Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 550bbe86d83a7870fdddc73c68e5d2b2 > files > 231

libunbound-devel-1.3.4-1mdv2010.0.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>unbound: util/random.c File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li><a href="dirs.html"><span>Directories</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="dir_4b581c88b01efb1cf178857b56f0f2fb.html">util</a>
  </div>
</div>
<div class="contents">
<h1>random.c File Reference</h1>Thread safe random functions.  
<a href="#_details">More...</a>
<p>
<code>#include &quot;config.h&quot;</code><br>
<code>#include &quot;<a class="el" href="random_8h.html">util/random.h</a>&quot;</code><br>
<code>#include &quot;<a class="el" href="log_8h.html">util/log.h</a>&quot;</code><br>
<code>#include &lt;openssl/rand.h&gt;</code><br>
<code>#include &lt;openssl/rc4.h&gt;</code><br>
<code>#include &lt;openssl/err.h&gt;</code><br>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Data Structures</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structub__randstate.html">ub_randstate</a></td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Struct with per-thread random state.  <a href="structub__randstate.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Defines</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e644779154eb97135768f1d42506cc2e"></a><!-- doxytag: member="random.c::SEED_SIZE" ref="e644779154eb97135768f1d42506cc2e" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#e644779154eb97135768f1d42506cc2e">SEED_SIZE</a>&nbsp;&nbsp;&nbsp;20</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Size of key to use. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#4ce3e2af80a76d816ab7f8567ec4a65a">MAX_VALUE</a>&nbsp;&nbsp;&nbsp;0x7fffffff</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Max random value.  <a href="#4ce3e2af80a76d816ab7f8567ec4a65a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e7eaf9449e948715964ebf4d2001e1bb"></a><!-- doxytag: member="random.c::REKEY_BYTES" ref="e7eaf9449e948715964ebf4d2001e1bb" args="" -->
#define&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#e7eaf9449e948715964ebf4d2001e1bb">REKEY_BYTES</a>&nbsp;&nbsp;&nbsp;(1 &lt;&lt; 24)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Number of bytes to reseed after. <br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#b5132b212ce16e6966cd8b23566c71bb">ub_systemseed</a> (unsigned int seed)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize the system randomness.  <a href="#b5132b212ce16e6966cd8b23566c71bb"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="cb43bec2a89c475a6368c12a90309a18"></a><!-- doxytag: member="random.c::ub_arc4random_stir" ref="cb43bec2a89c475a6368c12a90309a18" args="(struct ub_randstate *s, struct ub_randstate *from)" -->
static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#cb43bec2a89c475a6368c12a90309a18">ub_arc4random_stir</a> (struct <a class="el" href="structub__randstate.html">ub_randstate</a> *s, struct <a class="el" href="structub__randstate.html">ub_randstate</a> *from)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">reseed random generator <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct <a class="el" href="structub__randstate.html">ub_randstate</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#3de5dc60edbbcab3d16a501209f70e96">ub_initstate</a> (unsigned int seed, struct <a class="el" href="structub__randstate.html">ub_randstate</a> *from)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initialize a random generator state for use.  <a href="#3de5dc60edbbcab3d16a501209f70e96"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">long int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#4cc3cdffbf81987366a391858674f54a">ub_random</a> (struct <a class="el" href="structub__randstate.html">ub_randstate</a> *s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Generate next random number from the state passed along.  <a href="#4cc3cdffbf81987366a391858674f54a"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="random_8c.html#8fd81e3a467602e41b0632a4eeb001be">ub_randfree</a> (struct <a class="el" href="structub__randstate.html">ub_randstate</a> *s)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Delete the random state.  <a href="#8fd81e3a467602e41b0632a4eeb001be"></a><br></td></tr>
</table>
<hr><h2>Detailed Description</h2>
Thread safe random functions. 
<p>
Similar to arc4random() with an explicit initialisation routine.<p>
The code in this file is based on arc4random from openssh-4.0p1/openbsd-compat/bsd-arc4random.c That code is also BSD licensed. Here is their statement:<p>
Copyright (c) 1996, David Mazieres &lt;<a href="mailto:dm@uun.org">dm@uun.org</a>&gt; Copyright (c) 2008, Damien Miller &lt;<a href="mailto:djm@openbsd.org">djm@openbsd.org</a>&gt;<p>
Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.<p>
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. <hr><h2>Define Documentation</h2>
<a class="anchor" name="4ce3e2af80a76d816ab7f8567ec4a65a"></a><!-- doxytag: member="random.c::MAX_VALUE" ref="4ce3e2af80a76d816ab7f8567ec4a65a" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define MAX_VALUE&nbsp;&nbsp;&nbsp;0x7fffffff          </td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Max random value. 
<p>
Similar to RAND_MAX, but more portable (mingw uses only 15 bits random). 
<p>Referenced by <a class="el" href="random_8c_source.html#l00167">ub_random()</a>.</p>

</div>
</div><p>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="b5132b212ce16e6966cd8b23566c71bb"></a><!-- doxytag: member="random.c::ub_systemseed" ref="b5132b212ce16e6966cd8b23566c71bb" args="(unsigned int seed)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ub_systemseed           </td>
          <td>(</td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>seed</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Initialize the system randomness. 
<p>
Obtains entropy from the system before a chroot or privilege makes it unavailable. You do not have to call this, otherwise ub_initstate does so. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>seed,:</em>&nbsp;</td><td>seed value to create state (if no good entropy is found). </td></tr>
  </table>
</dl>

<p>References <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="log_8h_source.html#l00052">VERB_OPS</a>, and <a class="el" href="ldns-testpkts_8c.html#a557e5b23b2833d7c1ec0415a1bdd2b1">verbose()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00147">daemon_init()</a>, <a class="el" href="random_8c_source.html#l00117">ub_arc4random_stir()</a>, and <a class="el" href="random_8c_source.html#l00154">ub_initstate()</a>.</p>

</div>
</div><p>
<a class="anchor" name="3de5dc60edbbcab3d16a501209f70e96"></a><!-- doxytag: member="random.c::ub_initstate" ref="3de5dc60edbbcab3d16a501209f70e96" args="(unsigned int seed, struct ub_randstate *from)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct <a class="el" href="structub__randstate.html">ub_randstate</a>* ub_initstate           </td>
          <td>(</td>
          <td class="paramtype">unsigned int&nbsp;</td>
          <td class="paramname"> <em>seed</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structub__randstate.html">ub_randstate</a> *&nbsp;</td>
          <td class="paramname"> <em>from</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Initialize a random generator state for use. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>seed,:</em>&nbsp;</td><td>seed value to create state contents. (ignored for arc4random). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>from,:</em>&nbsp;</td><td>if not NULL, the seed is taken from this random structure. can be used to seed random states via a parent-random-state that is itself seeded with entropy. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>new state or NULL alloc failure. </dd></dl>

<p>References <a class="el" href="log_8c_source.html#l00241">log_err()</a>, <a class="el" href="random_8c_source.html#l00117">ub_arc4random_stir()</a>, and <a class="el" href="random_8c_source.html#l00092">ub_systemseed()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00276">daemon_create_workers()</a>, <a class="el" href="libworker_8c_source.html#l00092">libworker_setup()</a>, <a class="el" href="unitmain_8c_source.html#l00401">rnd_test()</a>, <a class="el" href="libunbound_8c_source.html#l00064">ub_ctx_create()</a>, and <a class="el" href="worker_8c_source.html#l00967">worker_init()</a>.</p>

</div>
</div><p>
<a class="anchor" name="4cc3cdffbf81987366a391858674f54a"></a><!-- doxytag: member="random.c::ub_random" ref="4cc3cdffbf81987366a391858674f54a" args="(struct ub_randstate *s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">long int ub_random           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__randstate.html">ub_randstate</a> *&nbsp;</td>
          <td class="paramname"> <em>state</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Generate next random number from the state passed along. 
<p>
Thread safe, so random numbers are repeatable. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>state,:</em>&nbsp;</td><td>must have been initialised with ub_initstate. </td></tr>
  </table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>: random 31 bit value. </dd></dl>

<p>References <a class="el" href="random_8c_source.html#l00085">MAX_VALUE</a>, <a class="el" href="random_8c_source.html#l00073">ub_randstate::rc4</a>, <a class="el" href="random_8c_source.html#l00075">ub_randstate::rc4_ready</a>, and <a class="el" href="random_8c_source.html#l00117">ub_arc4random_stir()</a>.</p>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00244">daemon_get_shufport()</a>, <a class="el" href="iter__utils_8c_source.html#l00389">iter_ns_probability()</a>, <a class="el" href="iter__utils_8c_source.html#l00286">iter_server_selection()</a>, <a class="el" href="outside__network_8c_source.html#l00985">pending_tcp_query()</a>, <a class="el" href="unitmain_8c_source.html#l00401">rnd_test()</a>, <a class="el" href="outside__network_8c_source.html#l00769">select_id()</a>, <a class="el" href="outside__network_8c_source.html#l00795">select_ifport()</a>, <a class="el" href="outside__network_8c_source.html#l01154">serviced_perturb_qname()</a>, and <a class="el" href="random_8c_source.html#l00117">ub_arc4random_stir()</a>.</p>

</div>
</div><p>
<a class="anchor" name="8fd81e3a467602e41b0632a4eeb001be"></a><!-- doxytag: member="random.c::ub_randfree" ref="8fd81e3a467602e41b0632a4eeb001be" args="(struct ub_randstate *s)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ub_randfree           </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structub__randstate.html">ub_randstate</a> *&nbsp;</td>
          <td class="paramname"> <em>state</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Delete the random state. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>state,:</em>&nbsp;</td><td>to delete. </td></tr>
  </table>
</dl>

<p>Referenced by <a class="el" href="daemon_8c_source.html#l00475">daemon_delete()</a>, <a class="el" href="libworker_8c_source.html#l00071">libworker_delete()</a>, <a class="el" href="unitmain_8c_source.html#l00401">rnd_test()</a>, <a class="el" href="libunbound_8c_source.html#l00064">ub_ctx_create()</a>, <a class="el" href="libunbound_8c_source.html#l00153">ub_ctx_delete()</a>, and <a class="el" href="worker_8c_source.html#l01115">worker_delete()</a>.</p>

</div>
</div><p>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Tue Oct 13 06:46:32 2009 for unbound by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>