<div dir="ltr">Does the file have to be written to in real time?<div><br></div><div>Why not perform buffered writes to a memory region, then flush to disk when a satisfiable amount of entropy has been met?</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Jul 2, 2014 at 10:32 PM, Edward Ned Harvey (mono) <span dir="ltr"><<a href="mailto:edward.harvey.mono@clevertrove.com" target="_blank">edward.harvey.mono@clevertrove.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">> From: Brandon Perry [mailto:<a href="mailto:bperry.volatile@gmail.com">bperry.volatile@gmail.com</a>]<br>

><br>
</div><div class="">> Do you *have* to write to the same file?<br>
<br>
</div>Yes.  Here is the situation:<br>
<a href="https://tinhatrandom.org" target="_blank">https://tinhatrandom.org</a><br>
An open source, MIT licensed class library aimed at improving crypto random available to the application developer...<br>
<br>
One of the things we need to do is this:  Assuming we have collected a lot of good entropy from various entropy sources, save a good strong random seed file on disk.  Later, any number of applications may be launched, potentially at the same time, which need to read & write the file, mutually exclusively.<br>

<br>
The reason it needs to be one file, is because that's the whole point - If the user has already entered random keyboard input, random mouse input, and we gathered entropy from the internet, and RNGCryptoServiceProvider, and other sources, then every application launch shouldn't need to repeat that.  First one does it; everyone later benefits from it.<br>

<br>
Right now, I believe, if I use FileMode.Open,  FileAccess.ReadWrite, and FileShare.None, that should work cross-platform to ensure only a single process may access the file at a time.  The process/thread that has the file lock can read the seed, write a new seed, and flush and close.  It will work reliably, I believe, for the first process that gets there, and to prevent any subsequent processes from accessing the same seed file before it is reseeded.  Any subsequent processes that fail to open the file (because another process already has it open) I think, will simply have to Sleep(1) and retry opening the file.  It's a little ghetto, but it should work AFAIK.<br>

</blockquote></div><br><br clear="all"><div><br></div>-- <br><a href="http://volatile-minds.blogspot.com">http://volatile-minds.blogspot.com</a> -- blog<br><a href="http://www.volatileminds.net">http://www.volatileminds.net</a> -- website
</div>