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

📄 validat1_8cpp-source.html

📁 著名的密码库Crypto++的文档 C++语言的杰作。程序员必备。
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00331"></a>00331                         cout &lt;&lt; <span class="stringliteral">"passed:"</span>;<a name="l00332"></a>00332                 cout &lt;&lt; <span class="stringliteral">"  "</span> &lt;&lt; total &lt;&lt; <span class="stringliteral">" generated bytes compressed to "</span> &lt;&lt; (size_t)sink-&gt;<a class="code" href="class_array_sink.html#36374569bfaf3711c3a7a306a46ea6d9">TotalPutLength</a>() &lt;&lt; <span class="stringliteral">" bytes by DEFLATE"</span> &lt;&lt; endl;<a name="l00333"></a>00333         }<a name="l00334"></a>00334         <span class="keywordflow">else</span><a name="l00335"></a>00335                 cout &lt;&lt; <span class="stringliteral">"\nNo operating system provided blocking random number generator, skipping test."</span> &lt;&lt; endl;<a name="l00336"></a>00336 <a name="l00337"></a>00337         rng.<a class="code" href="classmember__ptr.html#0191c833924d93e9093b07bab31010fe">reset</a>(NULL);<a name="l00338"></a>00338 <span class="preprocessor">#ifdef NONBLOCKING_RNG_AVAILABLE</span><a name="l00339"></a>00339 <span class="preprocessor"></span>        <span class="keywordflow">try</span> {rng.<a class="code" href="classmember__ptr.html#0191c833924d93e9093b07bab31010fe">reset</a>(<span class="keyword">new</span> <a class="code" href="class_nonblocking_rng.html" title="encapsulate CryptoAPI's CryptGenRandom or /dev/urandom">NonblockingRng</a>);}<a name="l00340"></a>00340         <span class="keywordflow">catch</span> (<a class="code" href="class_o_s___r_n_g___err.html" title="Exception class for Operating-System Random Number Generator.">OS_RNG_Err</a> &amp;) {}<a name="l00341"></a>00341 <span class="preprocessor">#endif</span><a name="l00342"></a>00342 <span class="preprocessor"></span><a name="l00343"></a>00343         <span class="keywordflow">if</span> (rng.<a class="code" href="classmember__ptr.html#2d10dec2a51691b589d56b71ec78e59a">get</a>())<a name="l00344"></a>00344         {<a name="l00345"></a>00345                 cout &lt;&lt; <span class="stringliteral">"\nTesting operating system provided nonblocking random number generator...\n\n"</span>;<a name="l00346"></a>00346 <a name="l00347"></a>00347                 <a class="code" href="class_array_sink.html" title="Copy input to a memory buffer.">ArraySink</a> *sink;<a name="l00348"></a>00348                 <a class="code" href="class_random_number_source.html" title="RNG-based implementation of Source interface.">RandomNumberSource</a> test(*rng, 100000, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_deflator.html" title="DEFLATE (RFC 1951) compressor.">Deflator</a>(sink=<span class="keyword">new</span> <a class="code" href="class_array_sink.html" title="Copy input to a memory buffer.">ArraySink</a>(NULL, 0)));<a name="l00349"></a>00349                 <a name="l00350"></a>00350                 <span class="keywordflow">if</span> (sink-&gt;<a class="code" href="class_array_sink.html#36374569bfaf3711c3a7a306a46ea6d9">TotalPutLength</a>() &lt; 100000)<a name="l00351"></a>00351                 {<a name="l00352"></a>00352                         cout &lt;&lt; <span class="stringliteral">"FAILED:"</span>;<a name="l00353"></a>00353                         pass = <span class="keyword">false</span>;<a name="l00354"></a>00354                 }<a name="l00355"></a>00355                 <span class="keywordflow">else</span><a name="l00356"></a>00356                         cout &lt;&lt; <span class="stringliteral">"passed:"</span>;<a name="l00357"></a>00357                 cout &lt;&lt; <span class="stringliteral">"  100000 generated bytes compressed to "</span> &lt;&lt; (size_t)sink-&gt;<a class="code" href="class_array_sink.html#36374569bfaf3711c3a7a306a46ea6d9">TotalPutLength</a>() &lt;&lt; <span class="stringliteral">" bytes by DEFLATE"</span> &lt;&lt; endl;<a name="l00358"></a>00358         }<a name="l00359"></a>00359         <span class="keywordflow">else</span><a name="l00360"></a>00360                 cout &lt;&lt; <span class="stringliteral">"\nNo operating system provided nonblocking random number generator, skipping test."</span> &lt;&lt; endl;<a name="l00361"></a>00361 <a name="l00362"></a>00362         <span class="keywordflow">return</span> pass;<a name="l00363"></a>00363 }<a name="l00364"></a>00364 <a name="l00365"></a>00365 <span class="comment">// VC50 workaround</span><a name="l00366"></a>00366 <span class="keyword">typedef</span> auto_ptr&lt;BlockTransformation&gt; apbt;<a name="l00367"></a>00367 <a name="l00368"></a><a class="code" href="class_cipher_factory.html">00368</a> <span class="keyword">class </span><a class="code" href="class_cipher_factory.html">CipherFactory</a><a name="l00369"></a>00369 {<a name="l00370"></a>00370 <span class="keyword">public</span>:<a name="l00371"></a>00371         <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> BlockSize() <span class="keyword">const</span> =0;<a name="l00372"></a>00372         <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> KeyLength() <span class="keyword">const</span> =0;<a name="l00373"></a>00373 <a name="l00374"></a>00374         <span class="keyword">virtual</span> apbt NewEncryption(<span class="keyword">const</span> byte *key) <span class="keyword">const</span> =0;<a name="l00375"></a>00375         <span class="keyword">virtual</span> apbt NewDecryption(<span class="keyword">const</span> byte *key) <span class="keyword">const</span> =0;<a name="l00376"></a>00376 };<a name="l00377"></a>00377 <a name="l00378"></a><a class="code" href="class_fixed_rounds_cipher_factory.html">00378</a> <span class="keyword">template</span> &lt;<span class="keyword">class</span> E, <span class="keyword">class</span> D&gt; <span class="keyword">class </span><a class="code" href="class_fixed_rounds_cipher_factory.html">FixedRoundsCipherFactory</a> : <span class="keyword">public</span> <a class="code" href="class_cipher_factory.html">CipherFactory</a><a name="l00379"></a>00379 {<a name="l00380"></a>00380 <span class="keyword">public</span>:<a name="l00381"></a><a class="code" href="class_fixed_rounds_cipher_factory.html#cee52fd2a76dc77f6d02e5fe08affa88">00381</a>         <a class="code" href="class_fixed_rounds_cipher_factory.html#cee52fd2a76dc77f6d02e5fe08affa88">FixedRoundsCipherFactory</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keylen=0) : <a class="code" href="class_fixed_rounds_cipher_factory.html#25e5a44482e0b8011cf4356ab75f57ac">m_keylen</a>(keylen?keylen:E::DEFAULT_KEYLENGTH) {}<a name="l00382"></a><a class="code" href="class_fixed_rounds_cipher_factory.html#b769fbfa9132253631770a410a007c9c">00382</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_fixed_rounds_cipher_factory.html#b769fbfa9132253631770a410a007c9c">BlockSize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> E::BLOCKSIZE;}<a name="l00383"></a><a class="code" href="class_fixed_rounds_cipher_factory.html#ac83502a42d49402741fbd6d731318ee">00383</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_fixed_rounds_cipher_factory.html#ac83502a42d49402741fbd6d731318ee">KeyLength</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_fixed_rounds_cipher_factory.html#25e5a44482e0b8011cf4356ab75f57ac">m_keylen</a>;}<a name="l00384"></a>00384 <a name="l00385"></a><a class="code" href="class_fixed_rounds_cipher_factory.html#5bb903c37685c6ec3a89d855be23926d">00385</a>         apbt <a class="code" href="class_fixed_rounds_cipher_factory.html#5bb903c37685c6ec3a89d855be23926d">NewEncryption</a>(<span class="keyword">const</span> byte *key)<span class="keyword"> const</span><a name="l00386"></a>00386 <span class="keyword">                </span>{<span class="keywordflow">return</span> apbt(<span class="keyword">new</span> E(key, <a class="code" href="class_fixed_rounds_cipher_factory.html#25e5a44482e0b8011cf4356ab75f57ac">m_keylen</a>));}<a name="l00387"></a><a class="code" href="class_fixed_rounds_cipher_factory.html#13359a21647665e8ef98a9502abaab30">00387</a>         apbt <a class="code" href="class_fixed_rounds_cipher_factory.html#13359a21647665e8ef98a9502abaab30">NewDecryption</a>(<span class="keyword">const</span> byte *key)<span class="keyword"> const</span><a name="l00388"></a>00388 <span class="keyword">                </span>{<span class="keywordflow">return</span> apbt(<span class="keyword">new</span> D(key, <a class="code" href="class_fixed_rounds_cipher_factory.html#25e5a44482e0b8011cf4356ab75f57ac">m_keylen</a>));}<a name="l00389"></a>00389 <a name="l00390"></a><a class="code" href="class_fixed_rounds_cipher_factory.html#25e5a44482e0b8011cf4356ab75f57ac">00390</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_fixed_rounds_cipher_factory.html#25e5a44482e0b8011cf4356ab75f57ac">m_keylen</a>;<a name="l00391"></a>00391 };<a name="l00392"></a>00392 <a name="l00393"></a><a class="code" href="class_variable_rounds_cipher_factory.html">00393</a> <span class="keyword">template</span> &lt;<span class="keyword">class</span> E, <span class="keyword">class</span> D&gt; <span class="keyword">class </span><a class="code" href="class_variable_rounds_cipher_factory.html">VariableRoundsCipherFactory</a> : <span class="keyword">public</span> <a class="code" href="class_cipher_factory.html">CipherFactory</a><a name="l00394"></a>00394 {<a name="l00395"></a>00395 <span class="keyword">public</span>:<a name="l00396"></a><a class="code" href="class_variable_rounds_cipher_factory.html#da38c98b445d8ac28802b3358ec8bb02">00396</a>         <a class="code" href="class_variable_rounds_cipher_factory.html#da38c98b445d8ac28802b3358ec8bb02">VariableRoundsCipherFactory</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keylen=0, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> rounds=0)<a name="l00397"></a>00397                 : <a class="code" href="class_variable_rounds_cipher_factory.html#403f4ea480da6a52147989a11124491b">m_keylen</a>(keylen ? keylen : E::DEFAULT_KEYLENGTH), <a class="code" href="class_variable_rounds_cipher_factory.html#5f70618f2aeb41e00cef9d3437c54d90">m_rounds</a>(rounds ? rounds : E::DEFAULT_ROUNDS) {}<a name="l00398"></a><a class="code" href="class_variable_rounds_cipher_factory.html#f5cfa1ab6dcd4c5d991d900cd3ba59d1">00398</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_variable_rounds_cipher_factory.html#f5cfa1ab6dcd4c5d991d900cd3ba59d1">BlockSize</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> E::BLOCKSIZE;}<a name="l00399"></a><a class="code" href="class_variable_rounds_cipher_factory.html#1a6683c8b73f6b67c31f2a6532b8cdd4">00399</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_variable_rounds_cipher_factory.html#1a6683c8b73f6b67c31f2a6532b8cdd4">KeyLength</a>()<span class="keyword"> const </span>{<span class="keywordflow">return</span> <a class="code" href="class_variable_rounds_cipher_factory.html#403f4ea480da6a52147989a11124491b">m_keylen</a>;}<a name="l00400"></a>00400 <a name="l00401"></a><a class="code" href="class_variable_rounds_cipher_factory.html#34e8586f5c2a5d3094b5ef1d8c846ab0">00401</a>         apbt <a class="code" href="class_variable_rounds_cipher_factory.html#34e8586f5c2a5d3094b5ef1d8c846ab0">NewEncryption</a>(<span class="keyword">const</span> byte *key)<span class="keyword"> const</span><a name="l00402"></a>00402 <span class="keyword">                </span>{<span class="keywordflow">return</span> apbt(<span class="keyword">new</span> E(key, <a class="code" href="class_variable_rounds_cipher_factory.html#403f4ea480da6a52147989a11124491b">m_keylen</a>, <a class="code" href="class_variable_rounds_cipher_factory.html#5f70618f2aeb41e00cef9d3437c54d90">m_rounds</a>));}<a name="l00403"></a><a class="code" href="class_variable_rounds_cipher_factory.html#47fefa72ff96108d67f634d0646ccfdb">00403</a>         apbt <a class="code" href="class_variable_rounds_cipher_factory.html#47fefa72ff96108d67f634d0646ccfdb">NewDecryption</a>(<span class="keyword">const</span> byte *key)<span class="keyword"> const</span><a name="l00404"></a>00404 <span class="keyword">                </span>{<span class="keywordflow">return</span> apbt(<span class="keyword">new</span> D(key, <a class="code" href="class_variable_rounds_cipher_factory.html#403f4ea480da6a52147989a11124491b">m_keylen</a>, <a class="code" href="class_variable_rounds_cipher_factory.html#5f70618f2aeb41e00cef9d3437c54d90">m_rounds</a>));}<a name="l00405"></a>00405 <a name="l00406"></a><a class="code" href="class_variable_rounds_cipher_factory.html#5f70618f2aeb41e00cef9d3437c54d90">00406</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_variable_rounds_cipher_factory.html#403f4ea480da6a52147989a11124491b">m_keylen</a>, <a class="code" href="class_variable_rounds_cipher_factory.html#5f70618f2aeb41e00cef9d3437c54d90">m_rounds</a>;<a name="l00407"></a>00407 };<a name="l00408"></a>00408 <a name="l00409"></a>00409 <span class="keywordtype">bool</span> BlockTransformationTest(<span class="keyword">const</span> <a class="code" href="class_cipher_factory.html">CipherFactory</a> &amp;cg, <a class="code" href="class_buffered_transformation.html" title="interface for buffered transformations">BufferedTransformation</a> &amp;valdata, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> tuples = 0xffff)<a name="l00410"></a>00410 {<a name="l00411"></a>00411         <a class="code" href="class_hex_encoder.html" title="Converts given data to base 16.">HexEncoder</a> output(<span class="keyword">new</span> <a class="code" href="class_file_sink.html" title="file-based implementation of Sink interface">FileSink</a>(cout));<a name="l00412"></a>00412         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> plain(cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>()), cipher(cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>()), out(cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>()), outplain(cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>());<a name="l00413"></a>00413         <a class="code" href="class_sec_block.html" title="a block of memory allocated using A">SecByteBlock</a> key(cg.<a class="code" href="class_cipher_factory.html#b12ff234308a16f8e45d8b9f4dbbd9d7">KeyLength</a>());<a name="l00414"></a>00414         <span class="keywordtype">bool</span> pass=<span class="keyword">true</span>, fail;<a name="l00415"></a>00415 <a name="l00416"></a>00416         <span class="keywordflow">while</span> (valdata.<a class="code" href="class_buffered_transformation.html#30b2076bce5fb29e992b6457485c67c2" title="returns number of bytes that is currently ready for retrieval">MaxRetrievable</a>() &amp;&amp; tuples--)<a name="l00417"></a>00417         {<a name="l00418"></a>00418                 valdata.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(key, cg.<a class="code" href="class_cipher_factory.html#b12ff234308a16f8e45d8b9f4dbbd9d7">KeyLength</a>());<a name="l00419"></a>00419                 valdata.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(plain, cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>());<a name="l00420"></a>00420                 valdata.<a class="code" href="class_buffered_transformation.html#9e1ad913c8fe697d269f408a7d5928fc" title="try to retrieve a single byte">Get</a>(cipher, cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>());<a name="l00421"></a>00421 <a name="l00422"></a>00422                 apbt transE = cg.<a class="code" href="class_cipher_factory.html#d18cf69b9fc6b64729d95995aba8408c">NewEncryption</a>(key);<a name="l00423"></a>00423                 transE-&gt;ProcessBlock(plain, out);<a name="l00424"></a>00424                 fail = memcmp(out, cipher, cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>()) != 0;<a name="l00425"></a>00425 <a name="l00426"></a>00426                 apbt transD = cg.<a class="code" href="class_cipher_factory.html#55cad48078e9d09e074aca211d4ece93">NewDecryption</a>(key);<a name="l00427"></a>00427                 transD-&gt;ProcessBlock(out, outplain);<a name="l00428"></a>00428                 fail=fail || memcmp(outplain, plain, cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>());<a name="l00429"></a>00429 <a name="l00430"></a>00430                 pass = pass &amp;&amp; !fail;<a name="l00431"></a>00431 <a name="l00432"></a>00432                 cout &lt;&lt; (fail ? <span class="stringliteral">"FAILED   "</span> : <span class="stringliteral">"passed   "</span>);<a name="l00433"></a>00433                 output.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(key, cg.<a class="code" href="class_cipher_factory.html#b12ff234308a16f8e45d8b9f4dbbd9d7">KeyLength</a>());<a name="l00434"></a>00434                 cout &lt;&lt; <span class="stringliteral">"   "</span>;<a name="l00435"></a>00435                 output.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(outplain, cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>());<a name="l00436"></a>00436                 cout &lt;&lt; <span class="stringliteral">"   "</span>;<a name="l00437"></a>00437                 output.<a class="code" href="class_buffered_transformation.html#e70658b0d271f8e114ac6c3cc9774ede" title="input a byte for processing">Put</a>(out, cg.<a class="code" href="class_cipher_factory.html#96bc164e7c86740205db1e83ba6d0f1d">BlockSize</a>());<a name="l00438"></a>00438                 cout &lt;&lt; endl;<a name="l00439"></a>00439         }<a name="l00440"></a>00440         <span class="keywordflow">return</span> pass;<a name="l00441"></a>00441 }<a name="l00442"></a>00442 <a name="l00443"></a><a class="code" href="class_filter_tester.html">00443</a> <span class="keyword">class </span><a class="code" href="class_filter_tester.html">FilterTester</a> : <span class="keyword">public</span> <a class="code" href="class_unflushable.html" title="_">Unflushable</a>&lt;Sink&gt;<a name="l00444"></a>00444 {<a name="l00445"></a>00445 <span class="keyword">public</span>:<a name="l00446"></a><a class="code" href="class_filter_tester.html#c42153f5b435216ee9c4d8b85eeb2de8">00446</a>         <a class="code" href="class_filter_tester.html#c42153f5b435216ee9c4d8b85eeb2de8">FilterTester</a>(<span class="keyword">const</span> byte *<a class="code" href="class_filter_tester.html#d91cd562a429625366ebb4c7c98310c8">validOutput</a>, <span class="keywordtype">size_t</span> <a class="code" href="class_filter_tester.html#8d1589ead4c76565940de6dce40eaab8">outputLen</a>)<a name="l00447"></a>00447                 : validOutput(validOutput), outputLen(outputLen), <a class="code" href="class_filter_tester.html#3e682b1d1263042b724052d22fe7514a">counter</a>(0), <a class="code" href="class_filter_tester.html#5009d4d3daa271c88c150c98c771be57">fail</a>(false) {}

⌨️ 快捷键说明

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