📄 fipstest_8cpp-source.html
字号:
<a name="l00376"></a>00376 }<a name="l00377"></a>00377 }<a name="l00378"></a>00378 <span class="preprocessor">#endif</span><a name="l00379"></a>00379 <span class="preprocessor"></span><a name="l00380"></a>00380 <span class="keywordflow">if</span> (subSectionMemStart <= expectedModuleMac && expectedModuleMac < subSectionMemStart + subSectionSize)<a name="l00381"></a>00381 {<a name="l00382"></a>00382 <span class="comment">// found stored MAC</span><a name="l00383"></a>00383 macFileLocation = (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>)(subSectionFileStart + (expectedModuleMac - subSectionMemStart));<a name="l00384"></a>00384 verifier.AddRangeToSkip(0, macFileLocation, macSize);<a name="l00385"></a>00385 }<a name="l00386"></a>00386 <a name="l00387"></a>00387 file.<a class="code" href="class_buffered_transformation.html#91c4526148274ae9cb68803bb2d2a2aa" title="move transferMax bytes of the buffered output to target as input">TransferTo</a>(verifier, subSectionFileStart - currentFilePos);<a name="l00388"></a>00388 verifier.Put(subSectionMemStart, subSectionSize);<a name="l00389"></a>00389 file.<a class="code" href="class_file_store.html#224d31ea858a3c890fec604a030db7cf" title="discard skipMax bytes from the output buffer">Skip</a>(subSectionSize);<a name="l00390"></a>00390 currentFilePos = subSectionFileStart + subSectionSize;<a name="l00391"></a>00391 subSectionStart = nextSubSectionStart;<a name="l00392"></a>00392 } <span class="keywordflow">while</span> (nextSubSectionStart != 0);<a name="l00393"></a>00393 }<a name="l00394"></a>00394 phs++;<a name="l00395"></a>00395 }<a name="l00396"></a>00396 <span class="preprocessor">#endif</span><a name="l00397"></a>00397 <span class="preprocessor"></span> file.<a class="code" href="class_buffered_transformation.html#80b60bff9f62976c15effdbc45cbc5f1">TransferAllTo</a>(verifier);<a name="l00398"></a>00398 <a name="l00399"></a>00399 <span class="preprocessor">#ifdef CRYPTOPP_WIN32_AVAILABLE</span><a name="l00400"></a>00400 <span class="preprocessor"></span> <span class="comment">// if that fails (could be caused by debug breakpoints or DLL base relocation modifying image in memory),</span><a name="l00401"></a>00401 <span class="comment">// hash from disk instead</span><a name="l00402"></a>00402 <span class="keywordflow">if</span> (memcmp(expectedModuleMac, actualMac, macSize) != 0)<a name="l00403"></a>00403 {<a name="l00404"></a>00404 OutputDebugString(<span class="stringliteral">"In memory integrity check failed. This may be caused by debug breakpoints or DLL relocation.\n"</span>);<a name="l00405"></a>00405 moduleStream.clear();<a name="l00406"></a>00406 moduleStream.seekg(0);<a name="l00407"></a>00407 verifier.Initialize(MakeParameters(<a class="code" href="namespace_name.html#54b71c75bd8b50e8bddfacf1f7b7b338" title="ByteArrayParameter.">Name::OutputBuffer</a>(), <a class="code" href="class_byte_array_parameter.html">ByteArrayParameter</a>(actualMac, (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>)actualMac.size())));<a name="l00408"></a>00408 <span class="comment">// verifier.Initialize(MakeParameters(Name::OutputFileName(), (const char *)"c:\\dt2.tmp"));</span><a name="l00409"></a>00409 verifier.AddRangeToSkip(0, checksumPos, checksumSize);<a name="l00410"></a>00410 verifier.AddRangeToSkip(0, certificateTableDirectoryPos, certificateTableDirectorySize);<a name="l00411"></a>00411 verifier.AddRangeToSkip(0, certificateTablePos, certificateTableSize);<a name="l00412"></a>00412 verifier.AddRangeToSkip(0, macFileLocation, macSize);<a name="l00413"></a>00413 <a class="code" href="class_file_store.html" title="file-based implementation of Store interface">FileStore</a>(moduleStream).TransferAllTo(verifier);<a name="l00414"></a>00414 }<a name="l00415"></a>00415 <span class="preprocessor">#endif</span><a name="l00416"></a>00416 <span class="preprocessor"></span><a name="l00417"></a>00417 <span class="keywordflow">if</span> (memcmp(expectedModuleMac, actualMac, macSize) == 0)<a name="l00418"></a>00418 <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00419"></a>00419 <a name="l00420"></a>00420 <span class="preprocessor">#ifdef CRYPTOPP_WIN32_AVAILABLE</span><a name="l00421"></a>00421 <span class="preprocessor"></span> std::string hexMac;<a name="l00422"></a>00422 <a class="code" href="class_hex_encoder.html" title="Converts given data to base 16.">HexEncoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html" title="Append input to a string object.">StringSink</a>(hexMac)).PutMessageEnd(actualMac, actualMac.size());<a name="l00423"></a>00423 OutputDebugString(((<span class="stringliteral">"Crypto++ DLL integrity check failed. Actual MAC is: "</span> + hexMac) + <span class="stringliteral">"\n"</span>).c_str());<a name="l00424"></a>00424 <span class="preprocessor">#endif</span><a name="l00425"></a>00425 <span class="preprocessor"></span> <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00426"></a>00426 }<a name="l00427"></a>00427 <a name="l00428"></a><a class="code" href="fips140_8h.html#fbf72ca41794ab8c4be31b31070a903f">00428</a> <span class="keywordtype">void</span> <a class="code" href="fips140_8h.html#fbf72ca41794ab8c4be31b31070a903f" title="perform the power-up self test, and set the self test status">DoPowerUpSelfTest</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *moduleFilename, <span class="keyword">const</span> byte *expectedModuleMac)<a name="l00429"></a>00429 {<a name="l00430"></a>00430 g_powerUpSelfTestStatus = <a class="code" href="fips140_8h.html#8ccac50ac3bfc5abaa6cb457f0ded35d50805cb51444d59eb747962fa279ad27">POWER_UP_SELF_TEST_NOT_DONE</a>;<a name="l00431"></a>00431 SetPowerUpSelfTestInProgressOnThisThread(<span class="keyword">true</span>);<a name="l00432"></a>00432 <a name="l00433"></a>00433 <span class="keywordflow">try</span><a name="l00434"></a>00434 {<a name="l00435"></a>00435 <span class="keywordflow">if</span> (FIPS_140_2_ComplianceEnabled() || expectedModuleMac != NULL)<a name="l00436"></a>00436 {<a name="l00437"></a>00437 <span class="keywordflow">if</span> (!<a class="code" href="fips140_8h.html#422b2c96912953afb9b01b7c498baed3">IntegrityCheckModule</a>(moduleFilename, expectedModuleMac, &g_actualMac, &g_macFileLocation))<a name="l00438"></a>00438 <span class="keywordflow">throw</span> 0; <span class="comment">// throw here so we break in the debugger, this will be caught right away</span><a name="l00439"></a>00439 }<a name="l00440"></a>00440 <a name="l00441"></a>00441 <span class="comment">// algorithm tests</span><a name="l00442"></a>00442 <a name="l00443"></a>00443 X917RNG_KnownAnswerTest<AES>(<a name="l00444"></a>00444 <span class="stringliteral">"2b7e151628aed2a6abf7158809cf4f3c"</span>, <span class="comment">// key</span><a name="l00445"></a>00445 <span class="stringliteral">"000102030405060708090a0b0c0d0e0f"</span>, <span class="comment">// seed</span><a name="l00446"></a>00446 <span class="stringliteral">"00000000000000000000000000000001"</span>, <span class="comment">// time vector</span><a name="l00447"></a>00447 <span class="stringliteral">"D176EDD27493B0395F4D10546232B0693DC7061C03C3A554F09CECF6F6B46D945A"</span>); <span class="comment">// output</span><a name="l00448"></a>00448 <a name="l00449"></a>00449 SymmetricEncryptionKnownAnswerTest<DES_EDE3>(<a name="l00450"></a>00450 <span class="stringliteral">"385D7189A5C3D485E1370AA5D408082B5CCCCB5E19F2D90E"</span>,<a name="l00451"></a>00451 <span class="stringliteral">"C141B5FCCD28DC8A"</span>,<a name="l00452"></a>00452 <span class="stringliteral">"6E1BD7C6120947A464A6AAB293A0F89A563D8D40D3461B68"</span>,<a name="l00453"></a>00453 <span class="stringliteral">"64EAAD4ACBB9CEAD6C7615E7C7E4792FE587D91F20C7D2F4"</span>,<a name="l00454"></a>00454 <span class="stringliteral">"6235A461AFD312973E3B4F7AA7D23E34E03371F8E8C376C9"</span>,<a name="l00455"></a>00455 <span class="stringliteral">"E26BA806A59B0330DE40CA38E77A3E494BE2B212F6DD624B"</span>,<a name="l00456"></a>00456 <span class="stringliteral">"E26BA806A59B03307DE2BCC25A08BA40A8BA335F5D604C62"</span>,<a name="l00457"></a>00457 <span class="stringliteral">"E26BA806A59B03303C62C2EFF32D3ACDD5D5F35EBCC53371"</span>);<a name="l00458"></a>00458 <a name="l00459"></a>00459 SymmetricEncryptionKnownAnswerTest<SKIPJACK>(<a name="l00460"></a>00460 <span class="stringliteral">"1555E5531C3A169B2D65"</span>,<a name="l00461"></a>00461 <span class="stringliteral">"6EC9795701F49864"</span>,<a name="l00462"></a>00462 <span class="stringliteral">"00AFA48E9621E52E8CBDA312660184EDDB1F33D9DACDA8DA"</span>,<a name="l00463"></a>00463 <span class="stringliteral">"DBEC73562EFCAEB56204EB8AE9557EBF77473FBB52D17CD1"</span>,<a name="l00464"></a>00464 <span class="stringliteral">"0C7B0B74E21F99B8F2C8DF37879F6C044967F42A796DCA8B"</span>,<a name="l00465"></a>00465 <span class="stringliteral">"79FDDA9724E36CC2E023E9A5C717A8A8A7FDA465CADCBF63"</span>,<a name="l00466"></a>00466 <span class="stringliteral">"79FDDA9724E36CC26CACBD83C1ABC06EAF5B249BE5B1E040"</span>,<a name="l00467"></a>00467 <span class="stringliteral">"79FDDA9724E36CC211B0AEC607B95A96BCDA318440B82F49"</span>);<a name="l00468"></a>00468 <a name="l00469"></a>00469 SymmetricEncryptionKnownAnswerTest<AES>(<a name="l00470"></a>00470 <span class="stringliteral">"2b7e151628aed2a6abf7158809cf4f3c"</span>,<a name="l00471"></a>00471 <span class="stringliteral">"000102030405060708090a0b0c0d0e0f"</span>,<a name="l00472"></a>00472 <span class="stringliteral">"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710"</span>, <span class="comment">// plaintext</span><a name="l00473"></a>00473 <span class="stringliteral">"3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4"</span>, <span class="comment">// ecb</span><a name="l00474"></a>00474 <span class="stringliteral">"7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -