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

📄 validat3_8cpp-source.html

📁 Crypto++是一个非常强大的密码学库,主要是功能全
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00483         {00484                 HMAC_MD5 mac((byte *)keys[k], strlen(keys[k]));00485                 cout &lt;&lt; <span class="stringliteral">"\nKEY: "</span>;00486                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0; keys[k][j] != 0; j++)00487                         cout &lt;&lt; setw(2) &lt;&lt; setfill(<span class="charliteral">'0'</span>) &lt;&lt; hex &lt;&lt; (<span class="keywordtype">int</span>)(byte)keys[k][j];00488                 cout &lt;&lt; endl;00489 00490                 pass = HashModuleTest(mac, testSet+k, 1) &amp;&amp; pass;00491         }00492 00493         <span class="keywordflow">return</span> pass;00494 }00495 00496 <span class="keywordtype">bool</span> ValidateXMACC()00497 {00498         <span class="keyword">typedef</span> <a class="code" href="class_x_m_a_c_c.html">XMACC&lt;MD5&gt;</a> XMACC_MD5;00499 00500         <span class="keyword">const</span> byte keys[2][XMACC_MD5::KEYLENGTH]={00501                 {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb},00502                 {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98}};00503 00504         <span class="keyword">const</span> word32 counters[2]={0xccddeeff, 0x76543210};00505 00506         <span class="keyword">const</span> <span class="keywordtype">char</span> *TestVals[7]={00507                 <span class="stringliteral">""</span>,00508                 <span class="stringliteral">"a"</span>,00509                 <span class="stringliteral">"abc"</span>,00510                 <span class="stringliteral">"message digest"</span>,00511                 <span class="stringliteral">"abcdefghijklmnopqrstuvwxyz"</span>,00512                 <span class="stringliteral">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"</span>,00513                 <span class="stringliteral">"12345678901234567890123456789012345678901234567890123456789012345678901234567890"</span>};00514 00515         <span class="keyword">const</span> byte output[2][7][XMACC_MD5::DIGESTSIZE]={00516                 {{0xcc,0xdd,0xef,0x00,0xfa,0x89,0x54,0x92,0x86,0x32,0xda,0x2a,0x3f,0x29,0xc5,0x52,0xa0,0x0d,0x05,0x13},00517                 {0xcc,0xdd,0xef,0x01,0xae,0xdb,0x8b,0x7b,0x69,0x71,0xc7,0x91,0x71,0x48,0x9d,0x18,0xe7,0xdf,0x9d,0x5a},00518                 {0xcc,0xdd,0xef,0x02,0x5e,0x01,0x2e,0x2e,0x4b,0xc3,0x83,0x62,0xc2,0xf4,0xe6,0x18,0x1c,0x44,0xaf,0xca},00519                 {0xcc,0xdd,0xef,0x03,0x3e,0xa9,0xf1,0xe0,0x97,0x91,0xf8,0xe2,0xbe,0xe0,0xdf,0xf3,0x41,0x03,0xb3,0x5a},00520                 {0xcc,0xdd,0xef,0x04,0x2e,0x6a,0x8d,0xb9,0x72,0xe3,0xce,0x9f,0xf4,0x28,0x45,0xe7,0xbc,0x80,0xa9,0xc7},00521                 {0xcc,0xdd,0xef,0x05,0x1a,0xd5,0x40,0x78,0xfb,0x16,0x37,0xfc,0x7a,0x1d,0xce,0xb4,0x77,0x10,0xb2,0xa0},00522                 {0xcc,0xdd,0xef,0x06,0x13,0x2f,0x11,0x47,0xd7,0x1b,0xb5,0x52,0x36,0x51,0x26,0xb0,0x96,0xd7,0x60,0x81}},00523                 {{0x76,0x54,0x32,0x11,0xe9,0xcb,0x74,0x32,0x07,0x93,0xfe,0x01,0xdd,0x27,0xdb,0xde,0x6b,0x77,0xa4,0x56},00524                 {0x76,0x54,0x32,0x12,0xcd,0x55,0x87,0x5c,0xc0,0x35,0x85,0x99,0x44,0x02,0xa5,0x0b,0x8c,0xe7,0x2c,0x68},00525                 {0x76,0x54,0x32,0x13,0xac,0xfd,0x87,0x50,0xc3,0x8f,0xcd,0x58,0xaa,0xa5,0x7e,0x7a,0x25,0x63,0x26,0xd1},00526                 {0x76,0x54,0x32,0x14,0xe3,0x30,0xf5,0xdd,0x27,0x2b,0x76,0x22,0x7f,0xaa,0x90,0x73,0x6a,0x48,0xdb,0x00},00527                 {0x76,0x54,0x32,0x15,0xfc,0x57,0x00,0x20,0x7c,0x9d,0xf6,0x30,0x6f,0xbd,0x46,0x3e,0xfb,0x8a,0x2c,0x60},00528                 {0x76,0x54,0x32,0x16,0xfb,0x0f,0xd3,0xdf,0x4c,0x4b,0xc3,0x05,0x9d,0x63,0x1e,0xba,0x25,0x2b,0xbe,0x35},00529                 {0x76,0x54,0x32,0x17,0xc6,0xfe,0xe6,0x5f,0xb1,0x35,0x8a,0xf5,0x32,0x7a,0x80,0xbd,0xb8,0x72,0xee,0xae}}};00530 00531         byte digest[XMACC_MD5::DIGESTSIZE];00532         <span class="keywordtype">bool</span> pass=<span class="keyword">true</span>, fail;00533 00534         cout &lt;&lt; <span class="stringliteral">"\nXMACC/MD5 validation suite running...\n"</span>;00535 00536         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k=0; k&lt;2; k++)00537         {00538                 XMACC_MD5 mac(keys[k], counters[k]);00539                 cout &lt;&lt; <span class="stringliteral">"\nKEY: "</span>;00540                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0;j&lt;XMACC_MD5::KEYLENGTH;j++)00541                         cout &lt;&lt; setw(2) &lt;&lt; setfill(<span class="charliteral">'0'</span>) &lt;&lt; hex &lt;&lt; (<span class="keywordtype">int</span>)keys[k][j];00542                 cout &lt;&lt; <span class="stringliteral">"    COUNTER: 0x"</span> &lt;&lt; hex &lt;&lt; counters[k] &lt;&lt; endl &lt;&lt; endl;00543                 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i&lt;7;i++)00544                 {00545                         mac.Update((byte *)TestVals[i], strlen(TestVals[i]));00546                         mac.Final(digest);00547                         fail = memcmp(digest, output[k][i], XMACC_MD5::DIGESTSIZE)00548                                  || !mac.VerifyDigest(output[k][i], (byte *)TestVals[i], strlen(TestVals[i]));00549                         pass = pass &amp;&amp; !fail;00550                         cout &lt;&lt; (fail ? <span class="stringliteral">"FAILED   "</span> : <span class="stringliteral">"passed   "</span>);00551                         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0;j&lt;XMACC_MD5::DIGESTSIZE;j++)00552                                 cout &lt;&lt; setw(2) &lt;&lt; setfill(<span class="charliteral">'0'</span>) &lt;&lt; hex &lt;&lt; (<span class="keywordtype">int</span>)digest[j];00553                         cout &lt;&lt; <span class="stringliteral">"   \""</span> &lt;&lt; TestVals[i] &lt;&lt; <span class="charliteral">'\"'</span> &lt;&lt; endl;00554                 }00555         }00556 00557         <span class="keywordflow">return</span> pass;00558 }00559 00560 <span class="keyword">struct </span>PBKDF_TestTuple00561 {00562         byte purpose;00563         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> iterations;00564         <span class="keyword">const</span> <span class="keywordtype">char</span> *hexPassword, *hexSalt, *hexDerivedKey;00565 };00566 00567 <span class="keywordtype">bool</span> TestPBKDF(PasswordBasedKeyDerivationFunction &amp;pbkdf, <span class="keyword">const</span> PBKDF_TestTuple *testSet, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> testSetSize)00568 {00569         <span class="keywordtype">bool</span> pass = <span class="keyword">true</span>;00570 00571         <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i&lt;testSetSize; i++)00572         {00573                 <span class="keyword">const</span> PBKDF_TestTuple &amp;tuple = testSet[i];00574 00575                 string password, salt, derivedKey;00576                 <a class="code" href="class_string_source.html">StringSource</a>(tuple.hexPassword, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(password)));00577                 <a class="code" href="class_string_source.html">StringSource</a>(tuple.hexSalt, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(salt)));00578                 <a class="code" href="class_string_source.html">StringSource</a>(tuple.hexDerivedKey, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(derivedKey)));00579 00580                 <a class="code" href="class_sec_block.html">SecByteBlock</a> derived(derivedKey.size());00581                 pbkdf.GeneralDeriveKey(derived, derived.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>(), tuple.purpose, (byte *)password.data(), password.size(), (byte *)salt.data(), salt.size(), tuple.iterations);00582                 <span class="keywordtype">bool</span> fail = memcmp(derived, derivedKey.data(), derived.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>()) != 0;00583                 pass = pass &amp;&amp; !fail;00584 00585                 <a class="code" href="class_hex_encoder.html">HexEncoder</a> enc(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(cout));00586                 cout &lt;&lt; (fail ? <span class="stringliteral">"FAILED   "</span> : <span class="stringliteral">"passed   "</span>);00587                 enc.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(tuple.purpose);00588                 cout &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; tuple.iterations;00589                 cout &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; tuple.hexPassword &lt;&lt; <span class="stringliteral">" "</span> &lt;&lt; tuple.hexSalt &lt;&lt; <span class="stringliteral">" "</span>;00590                 enc.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(derived, derived.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00591                 cout &lt;&lt; endl;00592         }00593 00594         <span class="keywordflow">return</span> pass;00595 }00596 00597 <span class="keywordtype">bool</span> ValidatePBKDF()00598 {00599         <span class="keywordtype">bool</span> pass = <span class="keyword">true</span>;00600 00601         {00602         <span class="comment">// from OpenSSL PKCS#12 Program FAQ v1.77, at http://www.drh-consultancy.demon.co.uk/test.txt</span>00603         PBKDF_TestTuple testSet[] = 00604         {00605                 {1, 1, <span class="stringliteral">"0073006D006500670000"</span>, <span class="stringliteral">"0A58CF64530D823F"</span>, <span class="stringliteral">"8AAAE6297B6CB04642AB5B077851284EB7128F1A2A7FBCA3"</span>},00606                 {2, 1, <span class="stringliteral">"0073006D006500670000"</span>, <span class="stringliteral">"0A58CF64530D823F"</span>, <span class="stringliteral">"79993DFE048D3B76"</span>},00607                 {1, 1, <span class="stringliteral">"0073006D006500670000"</span>, <span class="stringliteral">"642B99AB44FB4B1F"</span>, <span class="stringliteral">"F3A95FEC48D7711E985CFE67908C5AB79FA3D7C5CAA5D966"</span>},00608                 {2, 1, <span class="stringliteral">"0073006D006500670000"</span>, <span class="stringliteral">"642B99AB44FB4B1F"</span>, <span class="stringliteral">"C0A38D64A79BEA1D"</span>},00609                 {3, 1, <span class="stringliteral">"0073006D006500670000"</span>, <span class="stringliteral">"3D83C0E4546AC140"</span>, <span class="stringliteral">"8D967D88F6CAA9D714800AB3D48051D63F73A312"</span>},00610                 {1, 1000, <span class="stringliteral">"007100750065006500670000"</span>, <span class="stringliteral">"05DEC959ACFF72F7"</span>, <span class="stringliteral">"ED2034E36328830FF09DF1E1A07DD357185DAC0D4F9EB3D4"</span>},00611                 {2, 1000, <span class="stringliteral">"007100750065006500670000"</span>, <span class="stringliteral">"05DEC959ACFF72F7"</span>, <span class="stringliteral">"11DEDAD7758D4860"</span>},00612                 {1, 1000, <span class="stringliteral">"007100750065006500670000"</span>, <span class="stringliteral">"1682C0FC5B3F7EC5"</span>, <span class="stringliteral">"483DD6E919D7DE2E8E648BA8F862F3FBFBDC2BCB2C02957F"</span>},00613                 {2, 1000, <span class="stringliteral">"007100750065006500670000"</span>, <span class="stringliteral">"1682C0FC5B3F7EC5"</span>, <span class="stringliteral">"9D461D1B00355C50"</span>},00614                 {3, 1000, <span class="stringliteral">"007100750065006500670000"</span>, <span class="stringliteral">"263216FCC2FAB31C"</span>, <span class="stringliteral">"5EC4C7A80DF652294C3925B6489A7AB857C83476"</span>}00615         };00616 00617         <a class="code" href="class_p_k_c_s12___p_b_k_d_f.html">PKCS12_PBKDF&lt;SHA1&gt;</a> pbkdf;00618 00619         cout &lt;&lt; <span class="stringliteral">"\nPKCS #12 PBKDF validation suite running...\n\n"</span>;00620         pass = TestPBKDF(pbkdf, testSet, <span class="keyword">sizeof</span>(testSet)/<span class="keyword">sizeof</span>(testSet[0])) &amp;&amp; pass;00621         }00622 00623         {00624         <span class="comment">// from draft-ietf-smime-password-03.txt, at http://www.imc.org/draft-ietf-smime-password</span>00625         PBKDF_TestTuple testSet[] = 00626         {00627                 {0, 5, <span class="stringliteral">"70617373776f7264"</span>, <span class="stringliteral">"1234567878563412"</span>, <span class="stringliteral">"D1DAA78615F287E6"</span>},00628                 {0, 500, <span class="stringliteral">"416C6C206E2D656E746974696573206D75737420636F6D6D756E69636174652077697468206F74686572206E2d656E74697469657320766961206E2D3120656E746974656568656568656573"</span>, <span class="stringliteral">"1234567878563412"</span>,<span class="stringliteral">"6A8970BF68C92CAEA84A8DF28510858607126380CC47AB2D"</span>}00629         };00630 00631         <a class="code" href="class_p_k_c_s5___p_b_k_d_f2___h_m_a_c.html">PKCS5_PBKDF2_HMAC&lt;SHA1&gt;</a> pbkdf;00632 00633         cout &lt;&lt; <span class="stringliteral">"\nPKCS #5 PBKDF2 validation suite running...\n\n"</span>;00634         pass = TestPBKDF(pbkdf, testSet, <span class="keyword">sizeof</span>(testSet)/<span class="keyword">sizeof</span>(testSet[0])) &amp;&amp; pass;00635         }00636 00637         <span class="keywordflow">return</span> pass;00638 }</pre></div><hr size="1"><address style="align: right;"><small>Generated on Tue Jul 8 23:34:28 2003 for Crypto++ by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

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