📄 validat3_8cpp-source.html
字号:
00483 {00484 HMAC_MD5 mac((byte *)keys[k], strlen(keys[k]));00485 cout << <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 << setw(2) << setfill(<span class="charliteral">'0'</span>) << hex << (<span class="keywordtype">int</span>)(byte)keys[k][j];00488 cout << endl;00489 00490 pass = HashModuleTest(mac, testSet+k, 1) && 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<MD5></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 << <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<2; k++)00537 {00538 XMACC_MD5 mac(keys[k], counters[k]);00539 cout << <span class="stringliteral">"\nKEY: "</span>;00540 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0;j<XMACC_MD5::KEYLENGTH;j++)00541 cout << setw(2) << setfill(<span class="charliteral">'0'</span>) << hex << (<span class="keywordtype">int</span>)keys[k][j];00542 cout << <span class="stringliteral">" COUNTER: 0x"</span> << hex << counters[k] << endl << endl;00543 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i<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 && !fail;00550 cout << (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<XMACC_MD5::DIGESTSIZE;j++)00552 cout << setw(2) << setfill(<span class="charliteral">'0'</span>) << hex << (<span class="keywordtype">int</span>)digest[j];00553 cout << <span class="stringliteral">" \""</span> << TestVals[i] << <span class="charliteral">'\"'</span> << 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 &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<testSetSize; i++)00572 {00573 <span class="keyword">const</span> PBKDF_TestTuple &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 && !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 << (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 << <span class="stringliteral">" "</span> << tuple.iterations;00589 cout << <span class="stringliteral">" "</span> << tuple.hexPassword << <span class="stringliteral">" "</span> << tuple.hexSalt << <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 << 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<SHA1></a> pbkdf;00618 00619 cout << <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])) && 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<SHA1></a> pbkdf;00632 00633 cout << <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])) && 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 + -