⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osrng_8h-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<a name="l00070"></a>00070         BlockingRng();<a name="l00071"></a>00071         ~BlockingRng();<a name="l00072"></a>00072         <span class="keywordtype">void</span> <a class="code" href="class_random_number_generator.html#497145546d24e6d4abaf10b7e0f1ba17" title="generate random array of bytes">GenerateBlock</a>(byte *output, <span class="keywordtype">size_t</span> size);<a name="l00073"></a>00073 <a name="l00074"></a>00074 <span class="keyword">protected</span>:<a name="l00075"></a><a class="code" href="class_blocking_rng.html#9ff90fdef665fd4eea94e0a930a5eebd">00075</a>         <span class="keywordtype">int</span> m_fd;<a name="l00076"></a>00076 };<a name="l00077"></a>00077 <a name="l00078"></a>00078 <span class="preprocessor">#endif</span><a name="l00079"></a>00079 <span class="preprocessor"></span><a name="l00080"></a>00080 CRYPTOPP_DLL <span class="keywordtype">void</span> CRYPTOPP_API OS_GenerateRandomBlock(<span class="keywordtype">bool</span> blocking, byte *output, <span class="keywordtype">size_t</span> size);<a name="l00081"></a>00081 <span class="comment"></span><a name="l00082"></a>00082 <span class="comment">//! Automaticly Seeded Randomness Pool</span><a name="l00083"></a>00083 <span class="comment"></span><span class="comment">/*! This class seeds itself using an operating system provided RNG. */</span><a name="l00084"></a><a class="code" href="class_auto_seeded_random_pool.html">00084</a> <span class="keyword">class </span>CRYPTOPP_DLL AutoSeededRandomPool : <span class="keyword">public</span> <a class="code" href="class_random_pool.html" title="Randomness Pool.">RandomPool</a><a name="l00085"></a>00085 {<a name="l00086"></a>00086 <span class="keyword">public</span>:<span class="comment"></span><a name="l00087"></a>00087 <span class="comment">        //! use blocking to choose seeding with BlockingRng or NonblockingRng. the parameter is ignored if only one of these is available</span><a name="l00088"></a><a class="code" href="class_auto_seeded_random_pool.html#48c29d23718d5191b0d67967f84ada64">00088</a> <span class="comment"></span>        <span class="keyword">explicit</span> AutoSeededRandomPool(<span class="keywordtype">bool</span> blocking = <span class="keyword">false</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seedSize = 32)<a name="l00089"></a>00089                 {Reseed(blocking, seedSize);}<a name="l00090"></a>00090         <span class="keywordtype">void</span> Reseed(<span class="keywordtype">bool</span> blocking = <span class="keyword">false</span>, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seedSize = 32);<a name="l00091"></a>00091 };<a name="l00092"></a>00092 <span class="comment"></span><a name="l00093"></a>00093 <span class="comment">//! RNG from ANSI X9.17 Appendix C, seeded using an OS provided RNG</span><a name="l00094"></a>00094 <span class="comment"></span><span class="keyword">template</span> &lt;<span class="keyword">class</span> BLOCK_CIPHER&gt;<a name="l00095"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html">00095</a> <span class="keyword">class </span><a class="code" href="class_auto_seeded_x917_r_n_g.html" title="RNG from ANSI X9.17 Appendix C, seeded using an OS provided RNG.">AutoSeededX917RNG</a> : <span class="keyword">public</span> <a class="code" href="class_random_number_generator.html" title="interface for random number generators">RandomNumberGenerator</a>, <span class="keyword">public</span> <a class="code" href="class_not_copyable.html">NotCopyable</a><a name="l00096"></a>00096 {<a name="l00097"></a>00097 <span class="keyword">public</span>:<span class="comment"></span><a name="l00098"></a>00098 <span class="comment">        //! use blocking to choose seeding with BlockingRng or NonblockingRng. the parameter is ignored if only one of these is available</span><a name="l00099"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html#569086bfb40b4be6377b0ec977d01219">00099</a> <span class="comment"></span>        <span class="keyword">explicit</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#569086bfb40b4be6377b0ec977d01219" title="use blocking to choose seeding with BlockingRng or NonblockingRng. the parameter...">AutoSeededX917RNG</a>(<span class="keywordtype">bool</span> blocking = <span class="keyword">false</span>)<a name="l00100"></a>00100                 {<a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">Reseed</a>(blocking);}<a name="l00101"></a>00101         <span class="keywordtype">void</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">Reseed</a>(<span class="keywordtype">bool</span> blocking = <span class="keyword">false</span>, <span class="keyword">const</span> byte *additionalEntropy = NULL, <span class="keywordtype">size_t</span> length = 0);<a name="l00102"></a>00102         <span class="comment">// exposed for testing</span><a name="l00103"></a>00103         <span class="keywordtype">void</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">Reseed</a>(<span class="keyword">const</span> byte *key, <span class="keywordtype">size_t</span> keylength, <span class="keyword">const</span> byte *seed, <span class="keyword">const</span> byte *timeVector);<a name="l00104"></a>00104 <a name="l00105"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html#54661f4b174126dff52b6d313e5a5364">00105</a>         <span class="keywordtype">bool</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#54661f4b174126dff52b6d313e5a5364" title="returns true if IncorporateEntropy is implemented">CanIncorporateEntropy</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <span class="keyword">true</span>;}<a name="l00106"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html#657ec405854e19eb52fe0f9a6bddc289">00106</a>         <span class="keywordtype">void</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#657ec405854e19eb52fe0f9a6bddc289" title="update RNG state with additional unpredictable values">IncorporateEntropy</a>(<span class="keyword">const</span> byte *input, <span class="keywordtype">size_t</span> length) {<a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">Reseed</a>(<span class="keyword">false</span>, input, length);}<a name="l00107"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html#78075a7f80e8e62981342c438ae8e5b8">00107</a>         <span class="keywordtype">void</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#78075a7f80e8e62981342c438ae8e5b8" title="generate random bytes as input to a BufferedTransformation">GenerateIntoBufferedTransformation</a>(<a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;target, <span class="keyword">const</span> std::string &amp;channel, lword length) {m_rng-&gt;GenerateIntoBufferedTransformation(target, channel, length);}<a name="l00108"></a>00108 <a name="l00109"></a>00109 <span class="keyword">private</span>:<a name="l00110"></a>00110         <a class="code" href="classmember__ptr.html">member_ptr&lt;RandomNumberGenerator&gt;</a> m_rng;<a name="l00111"></a>00111 };<a name="l00112"></a>00112 <a name="l00113"></a>00113 <span class="keyword">template</span> &lt;<span class="keyword">class</span> BLOCK_CIPHER&gt;<a name="l00114"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html#9ff4b2fb3e774fa8adb800bb3a21d0b8">00114</a> <span class="keywordtype">void</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">AutoSeededX917RNG&lt;BLOCK_CIPHER&gt;::Reseed</a>(<span class="keyword">const</span> byte *key, <span class="keywordtype">size_t</span> keylength, <span class="keyword">const</span> byte *seed, <span class="keyword">const</span> byte *timeVector)<a name="l00115"></a>00115 {<a name="l00116"></a>00116         m_rng.<a class="code" href="classmember__ptr.html#0191c833924d93e9093b07bab31010fe">reset</a>(<span class="keyword">new</span> <a class="code" href="class_x917_r_n_g.html" title="RNG derived from ANSI X9.17 Appendix C.">X917RNG</a>(<span class="keyword">new</span> <span class="keyword">typename</span> BLOCK_CIPHER::Encryption(key, keylength), seed, timeVector));<a name="l00117"></a>00117 }<a name="l00118"></a>00118 <a name="l00119"></a>00119 <span class="keyword">template</span> &lt;<span class="keyword">class</span> BLOCK_CIPHER&gt;<a name="l00120"></a><a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">00120</a> <span class="keywordtype">void</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">AutoSeededX917RNG&lt;BLOCK_CIPHER&gt;::Reseed</a>(<span class="keywordtype">bool</span> blocking, <span class="keyword">const</span> byte *input, <span class="keywordtype">size_t</span> length)<a name="l00121"></a>00121 {<a name="l00122"></a>00122         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> seed(BLOCK_CIPHER::BLOCKSIZE + BLOCK_CIPHER::DEFAULT_KEYLENGTH);<a name="l00123"></a>00123         <span class="keyword">const</span> byte *key;<a name="l00124"></a>00124         <span class="keywordflow">do</span><a name="l00125"></a>00125         {<a name="l00126"></a>00126                 OS_GenerateRandomBlock(blocking, seed, seed.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00127"></a>00127                 <span class="keywordflow">if</span> (length &gt; 0)<a name="l00128"></a>00128                 {<a name="l00129"></a>00129                         <a class="code" href="class_s_h_a256.html" title="implements the SHA-256 standard">SHA256</a> hash;<a name="l00130"></a>00130                         hash.<a class="code" href="class_iterated_hash_base.html#3202914349a18f79facb605d75f0d10c">Update</a>(seed, seed.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>());<a name="l00131"></a>00131                         hash.<a class="code" href="class_iterated_hash_base.html#3202914349a18f79facb605d75f0d10c">Update</a>(input, length);<a name="l00132"></a>00132                         hash.<a class="code" href="class_iterated_hash_base.html#2fb87191e0a4359fb9e81c71f99db600">TruncatedFinal</a>(seed, UnsignedMin(hash.<a class="code" href="class_iterated_hash_with_static_transform.html#f308600222696a01464a8e93bc2c00c0" title="size of the hash returned by Final()">DigestSize</a>(), seed.<a class="code" href="class_sec_block.html#f5999bffe3193e62719cc0792b0282a7">size</a>()));<a name="l00133"></a>00133                 }<a name="l00134"></a>00134                 key = seed + BLOCK_CIPHER::BLOCKSIZE;<a name="l00135"></a>00135         }       <span class="comment">// check that seed and key don't have same value</span><a name="l00136"></a>00136         <span class="keywordflow">while</span> (memcmp(key, seed, STDMIN((<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)BLOCK_CIPHER::BLOCKSIZE, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)BLOCK_CIPHER::DEFAULT_KEYLENGTH)) == 0);<a name="l00137"></a>00137 <a name="l00138"></a>00138         <a class="code" href="class_auto_seeded_x917_r_n_g.html#a36420ffc4fb2acf9bc693d65da2e1c6">Reseed</a>(key, BLOCK_CIPHER::DEFAULT_KEYLENGTH, seed, NULL);<a name="l00139"></a>00139 }<a name="l00140"></a>00140 <a name="l00141"></a>00141 CRYPTOPP_DLL_TEMPLATE_CLASS <a class="code" href="class_auto_seeded_x917_r_n_g.html" title="RNG from ANSI X9.17 Appendix C, seeded using an OS provided RNG.">AutoSeededX917RNG&lt;AES&gt;</a>;<a name="l00142"></a>00142 <a name="l00143"></a>00143 <span class="preprocessor">#if CRYPTOPP_ENABLE_COMPLIANCE_WITH_FIPS_140_2</span><a name="l00144"></a>00144 <span class="preprocessor"></span><span class="keyword">typedef</span> <a class="code" href="class_auto_seeded_x917_r_n_g.html" title="RNG from ANSI X9.17 Appendix C, seeded using an OS provided RNG.">AutoSeededX917RNG&lt;AES&gt;</a> <a class="code" href="class_auto_seeded_random_pool.html" title="Automaticly Seeded Randomness Pool.">DefaultAutoSeededRNG</a>;<a name="l00145"></a>00145 <span class="preprocessor">#else</span><a name="l00146"></a>00146 <span class="preprocessor"></span><span class="keyword">typedef</span> AutoSeededRandomPool <a class="code" href="class_auto_seeded_random_pool.html" title="Automaticly Seeded Randomness Pool.">DefaultAutoSeededRNG</a>;<a name="l00147"></a>00147 <span class="preprocessor">#endif</span><a name="l00148"></a>00148 <span class="preprocessor"></span><a name="l00149"></a>00149 NAMESPACE_END<a name="l00150"></a>00150 <a name="l00151"></a>00151 <span class="preprocessor">#endif</span><a name="l00152"></a>00152 <span class="preprocessor"></span><a name="l00153"></a>00153 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Jun 1 11:11:23 2007 for Crypto++ by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -