<div dir="ltr"><div><span style="font-size:x-small">Oops, looking more attentively at the code rand.c has lines like:</span><br></div><div><br></div><div><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><div class="" id="LC100" style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:18px;padding-left:10px;height:18px">
<span class="" style="color:rgb(153,153,153);font-weight:bold">#if defined (HOST_WIN32)</span></div><div style="color:rgb(51,51,51);font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;line-height:18px">
<span class="" style="color:rgb(153,153,153);font-weight:bold"><br></span></div><font face="arial, helvetica, sans-serif" size="1"><b><i><font color="#ff0000"><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif" size="1"><b><i><font color="#ff0000"><br>
</font></i></b></font></pre>So you need to see what part of it is actually being compiled for the platform you are targeting.<br></font></i></b><br>When targeting Windows header files windows.h and wincrypt.h (from the Windows SDK, which is a building dependency) are included and then probably there you will find the definition for CryptAcquireContext but as with most APIs from Windows it will actually be implemented by two entry-points CryptAcquireContextA (for ANSI strings in parameters/returns) and CryptAcquireContextW (for Unicode [UTF-16] strings) in some Microsoft provided native dll.</font><br>
</pre><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif" size="1"><br></font></pre><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif" size="1">In Unix we have:</font></pre>
<pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif" size="1"><br></font></pre><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><pre style="overflow:auto;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;color:rgb(51,51,51);line-height:18px">
<div class="" id="LC268" style="padding-left:10px;height:18px"><span class="">gpointer</span></div><div class="" id="LC269" style="padding-left:10px;height:18px"><span class="" style="color:rgb(153,0,0);font-weight:bold">ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngInitialize</span> <span class="">(</span><span class="">MonoArray</span> <span class="" style="font-weight:bold">*</span><span class="">seed</span><span class="">)</span></div>
<div class="" id="LC270" style="padding-left:10px;height:18px"><span class="">{</span></div><div class="" id="LC271" style="padding-left:10px;height:18px"> <span class="" style="color:rgb(153,153,136);font-style:italic">/* if required exception will be thrown in managed code */</span></div>
<div class="" id="LC272" style="padding-left:10px;height:18px">     <span class="" style="font-weight:bold">return</span> <span class="">((</span><span class="" style="font-weight:bold">!</span><span class="">egd</span> <span class="" style="font-weight:bold">&&</span> <span class="">(</span><span class="">file</span> <span class="" style="font-weight:bold"><</span> <span class="" style="color:rgb(0,153,153)">0</span><span class="">))</span> <span class="" style="font-weight:bold">?</span> <span class="" style="color:rgb(0,134,179)">NULL</span> <span class="" style="font-weight:bold">:</span> <span class="">GINT_TO_POINTER</span> <span class="">(</span><span class="">file</span><span class="">));</span></div>
<div class="" id="LC273" style="padding-left:10px;height:18px"><span class="">}</span></div><div class="" id="LC273" style="padding-left:10px;height:18px"><span class=""><br></span></div></pre></pre><pre style="overflow:auto;margin-top:0px;margin-bottom:0px">
<font face="arial, helvetica, sans-serif" size="1">and random bytes are obtained from the /dev/urandom device.</font></pre><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif" size="1"><br>
</font></pre><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><font face="arial, helvetica, sans-serif" size="1">And the "Native" version simply short-circuits it as it simply uses an internal rand() function for any call to ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngGetBytes() :</font></pre>
<font face="arial, helvetica, sans-serif" size="1"><span style="white-space:pre"> </span></font><pre style="overflow:auto;margin-top:0px;margin-bottom:0px"><pre style="overflow:auto;font-family:Consolas,'Liberation Mono',Menlo,Courier,monospace;font-size:12px;margin-top:0px;margin-bottom:0px;color:rgb(51,51,51);line-height:18px">
<div class="" id="LC194" style="padding-left:10px;height:18px"><span class="">gpointer</span></div><div class="" id="LC195" style="padding-left:10px;height:18px"><span class="" style="color:rgb(153,0,0);font-weight:bold">ves_icall_System_Security_Cryptography_RNGCryptoServiceProvider_RngInitialize</span> <span class="">(</span><span class="">MonoArray</span> <span class="" style="font-weight:bold">*</span><span class="">seed</span><span class="">)</span></div>
<div class="" id="LC196" style="padding-left:10px;height:18px"><span class="">{</span></div><div class="" id="LC197" style="padding-left:10px;height:18px"> <span class="" style="font-weight:bold">return</span> <span class="" style="font-weight:bold">-</span><span class="" style="color:rgb(0,153,153)">1</span><span class="">;</span></div>
<div class="" id="LC198" style="padding-left:10px;height:18px"><span class="">}</span></div></pre></pre></div></div><div class="gmail_extra"><br clear="all"><div>Rafael Teixeira<br>O..:.)oooo<br></div>
<br><br><div class="gmail_quote">On Fri, Jun 27, 2014 at 11:17 AM, Rafael Teixeira <span dir="ltr"><<a href="mailto:monoman@gmail.com" target="_blank">monoman@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div dir="ltr">You are looking at the wrong rand.c. They are switched on compilation depending on the target platform.<div><br></div><div>Hope it helps,</div></div><div class="gmail_extra"><br clear="all"><div>Rafael Teixeira<br>

O..:.)oooo<br></div><div><div class="h5">
<br><br><div class="gmail_quote">On Fri, Jun 27, 2014 at 10:34 AM, 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">> From: Miguel de Icaza [mailto:<a href="mailto:miguel@xamarin.com" target="_blank">miguel@xamarin.com</a>]<br>
<div>><br>
> rand.c has several implementations, the CryptAcquireContext is part of the<br>
> Win32 support, and is a Win32 API call.<br>
><br>
> There is also a Native client implementation and a Unix one.<br>
<br>
</div>Thanks - But - What am I missing?  I don't have any "wincrypt.h" file anywhere in my mono source tree.  So I guess wincrypt.h exists in windows and not unix/linux...  I guess if you build on windows, it probably calls the Win32 API directly, and otherwise, some other functionally equivalent implementation takes its place...<br>


<br>
I'm confused about the meaning of a "native" implementation versus a "unix" one.  If I build on mac or linux, does that imply it uses the unix one?  Are you saying non-windows platforms (mac/linux) implement this call in a native library that's included in the OS?<br>


<br>
Sorry, I'm just still confused about how that gets hooked in, where it comes from....<br>
<div><div>_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com" target="_blank">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</div></div></blockquote></div><br></div></div></div>
</blockquote></div><br></div>