📄 validat3_8cpp-source.html
字号:
00320 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\xaa\x0c\xc9\x54\xd7\x57\xd7\xac\x77\x79\xca\x33\x42\x33\x4c\xa4\x71\xab\xd4\x7d\x59\x52\xac\x91\xed\x83\x7e\xcd\x5b\x16\x92\x2b"</span>),00321 HashTestTuple(<span class="stringliteral">"The quick brown fox jumps over the lazy dog"</span>, <span class="stringliteral">"\x5f\x5c\xa3\x55\xb9\x0a\xc6\x22\xb0\xaa\x7e\x65\x4e\xf5\xf2\x7e\x9e\x75\x11\x14\x15\xb4\x8b\x8a\xfe\x3a\xdd\x1c\x6b\x89\xcb\xa1"</span>),00322 HashTestTuple(<span class="stringliteral">"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"</span>, <span class="stringliteral">"\xaf\x9c\x66\xfb\x60\x58\xe2\x23\x2a\x5d\xfb\xa0\x63\xee\x14\xb0\xf8\x6f\x0e\x33\x4e\x16\x58\x12\x55\x94\x35\x46\x4d\xd9\xbb\x60"</span>, 15625)00323 };00324 HashTestTuple testSet2[] = 00325 {00326 HashTestTuple(<span class="stringliteral">""</span>, <span class="stringliteral">"\xe8\x1a\xa0\x45\x23\x53\x2d\xd7\x26\x7e\x5c\x5b\xc3\xba\x0e\x28\x98\x37\xa6\x2b\xa0\x32\x35\x03\x51\x98\x0e\x96\x0a\x84\xb0\xaf"</span>),00327 HashTestTuple(<span class="stringliteral">"The quick brown fox jumps over the lazy dog"</span>, <span class="stringliteral">"\x8f\xa7\xda\xdc\xe0\x11\x0f\x97\x9a\x0b\x79\x5e\x76\xb2\xc2\x56\x28\xd8\xbd\xa8\x87\x47\x75\x81\x49\xc4\x2e\x3b\xc1\x3f\x85\xbc"</span>),00328 HashTestTuple(<span class="stringliteral">"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"</span>, <span class="stringliteral">"\xcb\x34\xf0\x93\x7e\x8d\x87\x0d\x3b\xd7\xff\x63\x11\x76\x5f\x2c\x22\x9a\x6c\x21\x54\xe4\xdb\x11\x95\x38\xdb\x51\x59\x43\x7c\xab"</span>, 15625)00329 };00330 00331 cout << <span class="stringliteral">"\nPanama Hash Function (little endian) validation suite running...\n\n"</span>;00332 <a class="code" href="class_panama_hash.html">PanamaHash<LittleEndian></a> panamaLE;00333 pass = HashModuleTest(panamaLE, testSet1, <span class="keyword">sizeof</span>(testSet1)/<span class="keyword">sizeof</span>(testSet1[0])) && pass;00334 00335 cout << <span class="stringliteral">"\nPanama Hash Function (big endian) validation suite running...\n\n"</span>;00336 <a class="code" href="class_panama_hash.html">PanamaHash<BigEndian></a> panamaBE;00337 pass = HashModuleTest(panamaBE, testSet2, <span class="keyword">sizeof</span>(testSet2)/<span class="keyword">sizeof</span>(testSet2[0])) && pass;00338 00339 <span class="comment">// these were generated by Crypto++</span>00340 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Key0[] = {00341 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,00342 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,00343 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,00344 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,00345 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,00346 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,00347 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,00348 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};00349 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Input0l[] = {00350 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,00351 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,00352 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,00353 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};00354 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Output0l[] = {00355 0xF0,0x7F,0x5F,0xF2,0xCC,0xD0,0x1A,0x0A,00356 0x7D,0x44,0xAC,0xD6,0xD2,0x39,0xC2,0xAF,00357 0x0D,0xA1,0xFF,0x35,0x27,0x5B,0xAF,0x5D,00358 0xFA,0x6E,0x09,0x41,0x1B,0x79,0xD8,0xB9};00359 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Input0b[] = {00360 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,00361 0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,00362 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,00363 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};00364 <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> Output0b[] = {00365 0xE1,0x2E,0x2F,0x6B,0xA4,0x1A,0xE8,0x32,00366 0xD8,0x88,0xDA,0x9F,0xA6,0x86,0x3B,0xC3,00367 0x7C,0x0E,0x99,0x6F,0x19,0x0A,0x17,0x11,00368 0x33,0x03,0x22,0xD3,0x7B,0xD9,0x8C,0xA4};00369 00370 <span class="comment">// VC60 workaround: auto_ptr lacks reset()</span>00371 member_ptr<StreamTransformation> cipher;00372 <span class="keywordtype">bool</span> fail;00373 00374 cout << <span class="stringliteral">"\nPanama Cipher (little endian) validation suite running...\n\n"</span>;00375 00376 cipher.reset(<span class="keyword">new</span> <a class="code" href="struct_panama_cipher.html">PanamaCipher<LittleEndian></a>::Encryption(Key0, 64));00377 cipher->ProcessString(Input0l, <span class="keyword">sizeof</span>(Input0l));00378 fail = memcmp(Input0l, Output0l, <span class="keyword">sizeof</span>(Input0l)) != 0;00379 cout << (fail ? <span class="stringliteral">"FAILED"</span> : <span class="stringliteral">"passed"</span>) << <span class="stringliteral">" Test 0"</span> << endl;00380 pass = pass && !fail;00381 00382 cout << <span class="stringliteral">"\nPanama Cipher (big endian) validation suite running...\n\n"</span>;00383 00384 cipher.reset(<span class="keyword">new</span> <a class="code" href="struct_panama_cipher.html">PanamaCipher<BigEndian></a>::Encryption(Key0, 64));00385 cipher->ProcessString(Input0b, <span class="keyword">sizeof</span>(Input0b));00386 fail = memcmp(Input0b, Output0b, <span class="keyword">sizeof</span>(Input0b)) != 0;00387 cout << (fail ? <span class="stringliteral">"FAILED"</span> : <span class="stringliteral">"passed"</span>) << <span class="stringliteral">" Test 0"</span> << endl;00388 pass = pass && !fail;00389 00390 <span class="keywordflow">return</span> pass;00391 }00392 00393 <span class="keywordtype">bool</span> ValidateMD5MAC()00394 {00395 <span class="keyword">const</span> byte keys[2][MD5MAC::KEYLENGTH]={00396 {0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff},00397 {0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10}};00398 00399 <span class="keyword">const</span> <span class="keywordtype">char</span> *TestVals[7]={00400 <span class="stringliteral">""</span>,00401 <span class="stringliteral">"a"</span>,00402 <span class="stringliteral">"abc"</span>,00403 <span class="stringliteral">"message digest"</span>,00404 <span class="stringliteral">"abcdefghijklmnopqrstuvwxyz"</span>,00405 <span class="stringliteral">"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"</span>,00406 <span class="stringliteral">"12345678901234567890123456789012345678901234567890123456789012345678901234567890"</span>};00407 00408 <span class="keyword">const</span> byte output[2][7][MD5MAC::DIGESTSIZE]={00409 {{0x1f,0x1e,0xf2,0x37,0x5c,0xc0,0xe0,0x84,0x4f,0x98,0xe7,0xe8,0x11,0xa3,0x4d,0xa8},00410 {0x7a,0x76,0xee,0x64,0xca,0x71,0xef,0x23,0x7e,0x26,0x29,0xed,0x94,0x52,0x73,0x65},00411 {0xe8,0x01,0x3c,0x11,0xf7,0x20,0x9d,0x13,0x28,0xc0,0xca,0xa0,0x4f,0xd0,0x12,0xa6},00412 {0xc8,0x95,0x53,0x4f,0x22,0xa1,0x74,0xbc,0x3e,0x6a,0x25,0xa2,0xb2,0xef,0xd6,0x30},00413 {0x91,0x72,0x86,0x7e,0xb6,0x00,0x17,0x88,0x4c,0x6f,0xa8,0xcc,0x88,0xeb,0xe7,0xc9},00414 {0x3b,0xd0,0xe1,0x1d,0x5e,0x09,0x4c,0xb7,0x1e,0x35,0x44,0xac,0xa9,0xb8,0xbf,0xa2},00415 {0x93,0x37,0x16,0x64,0x44,0xcc,0x95,0x35,0xb7,0xd5,0xb8,0x0f,0x91,0xe5,0x29,0xcb}},00416 {{0x2f,0x6e,0x73,0x13,0xbf,0xbb,0xbf,0xcc,0x3a,0x2d,0xde,0x26,0x8b,0x59,0xcc,0x4d},00417 {0x69,0xf6,0xca,0xff,0x40,0x25,0x36,0xd1,0x7a,0xe1,0x38,0x03,0x2c,0x0c,0x5f,0xfd},00418 {0x56,0xd3,0x2b,0x6c,0x34,0x76,0x65,0xd9,0x74,0xd6,0xf7,0x5c,0x3f,0xc6,0xf0,0x40},00419 {0xb8,0x02,0xb2,0x15,0x4e,0x59,0x8b,0x6f,0x87,0x60,0x56,0xc7,0x85,0x46,0x2c,0x0b},00420 {0x5a,0xde,0xf4,0xbf,0xf8,0x04,0xbe,0x08,0x58,0x7e,0x94,0x41,0xcf,0x6d,0xbd,0x57},00421 {0x18,0xe3,0x49,0xa5,0x24,0x44,0xb3,0x0e,0x5e,0xba,0x5a,0xdd,0xdc,0xd9,0xf1,0x8d},00422 {0xf2,0xb9,0x06,0xa5,0xb8,0x4b,0x9b,0x4b,0xbe,0x95,0xed,0x32,0x56,0x4e,0xe7,0xeb}}};00423 00424 byte digest[MD5MAC::DIGESTSIZE];00425 <span class="keywordtype">bool</span> pass=<span class="keyword">true</span>, fail;00426 00427 cout << <span class="stringliteral">"\nMD5MAC validation suite running...\n"</span>;00428 00429 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k=0; k<2; k++)00430 {00431 <a class="code" href="class_message_authentication_code_final_template.html">MD5MAC</a> mac(keys[k]);00432 cout << <span class="stringliteral">"\nKEY: "</span>;00433 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0;j<MD5MAC::KEYLENGTH;j++)00434 cout << setw(2) << setfill(<span class="charliteral">'0'</span>) << hex << (<span class="keywordtype">int</span>)keys[k][j];00435 cout << endl << endl;00436 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i<7;i++)00437 {00438 mac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_ca5">Update</a>((byte *)TestVals[i], strlen(TestVals[i]));00439 mac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_c___basea13">Final</a>(digest);00440 fail = memcmp(digest, output[k][i], MD5MAC::DIGESTSIZE)00441 || !mac.<a class="code" href="class_hash_transformation.html#_x_m_a_c_c___basea16">VerifyDigest</a>(output[k][i], (byte *)TestVals[i], strlen(TestVals[i]));00442 pass = pass && !fail;00443 cout << (fail ? <span class="stringliteral">"FAILED "</span> : <span class="stringliteral">"passed "</span>);00444 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j=0;j<MD5MAC::DIGESTSIZE;j++)00445 cout << setw(2) << setfill(<span class="charliteral">'0'</span>) << hex << (<span class="keywordtype">int</span>)digest[j];00446 cout << <span class="stringliteral">" \""</span> << TestVals[i] << <span class="charliteral">'\"'</span> << endl;00447 }00448 }00449 00450 <span class="keywordflow">return</span> pass;00451 }00452 00453 <span class="keywordtype">bool</span> ValidateHMAC()00454 {00455 <span class="keyword">typedef</span> <a class="code" href="class_h_m_a_c.html">HMAC<MD5></a> HMAC_MD5;00456 00457 <span class="keyword">const</span> <span class="keywordtype">char</span>* keys[]=00458 {00459 <span class="stringliteral">"\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"</span>,00460 <span class="stringliteral">"Jefe"</span>,00461 <span class="stringliteral">"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"</span>,00462 <span class="stringliteral">"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"</span>00463 <span class="stringliteral">"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"</span>00464 <span class="stringliteral">"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"</span>00465 <span class="stringliteral">"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"</span>00466 <span class="stringliteral">"\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"</span>00467 };00468 00469 HashTestTuple testSet[] = 00470 {00471 HashTestTuple(<span class="stringliteral">"Hi There"</span>, <span class="stringliteral">"\x92\x94\x72\x7a\x36\x38\xbb\x1c\x13\xf4\x8e\xf8\x15\x8b\xfc\x9d"</span>),00472 HashTestTuple(<span class="stringliteral">"what do ya want for nothing?"</span>, <span class="stringliteral">"\x75\x0c\x78\x3e\x6a\xb0\xb5\x03\xea\xa8\x6e\x31\x0a\x5d\xb7\x38"</span>),00473 HashTestTuple(<span class="stringliteral">"\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD\xDD"</span>,00474 <span class="stringliteral">"\x56\xbe\x34\x52\x1d\x14\x4c\x88\xdb\xb8\xc7\x33\xf0\xe8\xb3\xf6"</span>),00475 HashTestTuple(<span class="stringliteral">"Test Using Larger Than Block-Size Key - Hash Key First"</span>, <span class="stringliteral">"\x6b\x1a\xb7\xfe\x4b\xd7\xbf\x8f\x0b\x62\xe6\xce\x61\xb9\xd0\xcd"</span>)00476 };00477 00478 <span class="keywordtype">bool</span> pass=<span class="keyword">true</span>;00479 00480 cout << <span class="stringliteral">"\nHMAC/MD5 validation suite running...\n"</span>;00481 00482 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> k=0; k<4; k++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -