📄 test_8cpp-source.html
字号:
<a name="l00204"></a>00204 }<a name="l00205"></a>00205 word32 checksumPos = optionalHeaderPos + 64;<a name="l00206"></a>00206 word32 certificateTableDirectoryPos = optionalHeaderPos + (optionalHeaderMagic == 0x10b ? 128 : 144);<a name="l00207"></a>00207 word32 certificateTablePos = *(word32 *)(buf+certificateTableDirectoryPos);<a name="l00208"></a>00208 word32 certificateTableSize = *(word32 *)(buf+certificateTableDirectoryPos+4);<a name="l00209"></a>00209 <span class="keywordflow">if</span> (certificateTableSize != 0)<a name="l00210"></a>00210 cerr << <span class="stringliteral">"Warning: certificate table (IMAGE_DIRECTORY_ENTRY_SECURITY) of target image is not empty.\n"</span>;<a name="l00211"></a>00211 <a name="l00212"></a>00212 <span class="comment">// find where to place computed MAC</span><a name="l00213"></a>00213 byte mac[] = <a class="code" href="fips140_8h.html#fa5d25ce1be2e8d1beda9340260a4d77">CRYPTOPP_DUMMY_DLL_MAC</a>;<a name="l00214"></a>00214 byte *found = std::search(buf.begin(), buf.end(), mac+0, mac+<span class="keyword">sizeof</span>(mac));<a name="l00215"></a>00215 <span class="keywordflow">if</span> (found == buf.end())<a name="l00216"></a>00216 {<a name="l00217"></a>00217 cerr << <span class="stringliteral">"MAC placeholder not found. Possibly the actual MAC was already placed.\n"</span>;<a name="l00218"></a>00218 <span class="keywordflow">return</span> 2;<a name="l00219"></a>00219 }<a name="l00220"></a>00220 word32 macPos = (<span class="keywordtype">unsigned</span> int)(found-buf.begin());<a name="l00221"></a>00221 <a name="l00222"></a>00222 <span class="comment">// compute MAC</span><a name="l00223"></a>00223 <a class="code" href="classmember__ptr.html">member_ptr<MessageAuthenticationCode></a> pMac(<a class="code" href="fips140_8h.html#766d57f0d6451c714b95ba126258b487">NewIntegrityCheckingMAC</a>());<a name="l00224"></a>00224 assert(pMac->DigestSize() == <span class="keyword">sizeof</span>(mac));<a name="l00225"></a>00225 <a class="code" href="class_meter_filter.html" title="measure how many byte and messages pass through, also serves as valve">MeterFilter</a> f(<span class="keyword">new</span> <a class="code" href="class_hash_filter.html" title="Filter Wrapper for HashTransformation.">HashFilter</a>(*pMac, <span class="keyword">new</span> <a class="code" href="class_array_sink.html" title="Copy input to a memory buffer.">ArraySink</a>(mac, <span class="keyword">sizeof</span>(mac))));<a name="l00226"></a>00226 f.AddRangeToSkip(0, checksumPos, 4);<a name="l00227"></a>00227 f.AddRangeToSkip(0, certificateTableDirectoryPos, 8);<a name="l00228"></a>00228 f.AddRangeToSkip(0, macPos, <span class="keyword">sizeof</span>(mac));<a name="l00229"></a>00229 f.AddRangeToSkip(0, certificateTablePos, certificateTableSize);<a name="l00230"></a>00230 f.PutMessageEnd(buf.begin(), buf.size());<a name="l00231"></a>00231 <a name="l00232"></a>00232 <span class="comment">// place MAC</span><a name="l00233"></a>00233 cout << <span class="stringliteral">"Placing MAC in file "</span> << argv[2] << <span class="stringliteral">", location "</span> << macPos << <span class="stringliteral">".\n"</span>;<a name="l00234"></a>00234 dllFile.seekg(macPos, std::ios_base::beg);<a name="l00235"></a>00235 dllFile.write((<span class="keywordtype">char</span> *)mac, <span class="keyword">sizeof</span>(mac));<a name="l00236"></a>00236 }<a name="l00237"></a>00237 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"m"</span>)<a name="l00238"></a>00238 DigestFile(argv[2]);<a name="l00239"></a>00239 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"tv"</span>)<a name="l00240"></a>00240 {<a name="l00241"></a>00241 std::string fname = argv[2];<a name="l00242"></a>00242 <span class="keywordflow">if</span> (fname.find(<span class="stringliteral">".txt"</span>) == std::string::npos)<a name="l00243"></a>00243 fname = <span class="stringliteral">"TestVectors/"</span> + fname + <span class="stringliteral">".txt"</span>;<a name="l00244"></a>00244 <span class="keywordflow">return</span> !RunTestDataFile(fname.c_str());<a name="l00245"></a>00245 }<a name="l00246"></a>00246 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"t"</span>)<a name="l00247"></a>00247 {<a name="l00248"></a>00248 <span class="comment">// VC60 workaround: use char array instead of std::string to workaround MSVC's getline bug</span><a name="l00249"></a>00249 <span class="keywordtype">char</span> passPhrase[MAX_PHRASE_LENGTH], plaintext[1024];<a name="l00250"></a>00250 <a name="l00251"></a>00251 cout << <span class="stringliteral">"Passphrase: "</span>;<a name="l00252"></a>00252 cin.getline(passPhrase, MAX_PHRASE_LENGTH);<a name="l00253"></a>00253 <a name="l00254"></a>00254 cout << <span class="stringliteral">"\nPlaintext: "</span>;<a name="l00255"></a>00255 cin.getline(plaintext, 1024);<a name="l00256"></a>00256 <a name="l00257"></a>00257 <span class="keywordtype">string</span> ciphertext = EncryptString(plaintext, passPhrase);<a name="l00258"></a>00258 cout << <span class="stringliteral">"\nCiphertext: "</span> << ciphertext << endl;<a name="l00259"></a>00259 <a name="l00260"></a>00260 <span class="keywordtype">string</span> decrypted = DecryptString(ciphertext.c_str(), passPhrase);<a name="l00261"></a>00261 cout << <span class="stringliteral">"\nDecrypted: "</span> << decrypted << endl;<a name="l00262"></a>00262 <a name="l00263"></a>00263 <span class="keywordflow">return</span> 0;<a name="l00264"></a>00264 }<a name="l00265"></a>00265 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"e64"</span>)<a name="l00266"></a>00266 Base64Encode(argv[2], argv[3]);<a name="l00267"></a>00267 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"d64"</span>)<a name="l00268"></a>00268 Base64Decode(argv[2], argv[3]);<a name="l00269"></a>00269 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"e16"</span>)<a name="l00270"></a>00270 HexEncode(argv[2], argv[3]);<a name="l00271"></a>00271 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"d16"</span>)<a name="l00272"></a>00272 HexDecode(argv[2], argv[3]);<a name="l00273"></a>00273 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"e"</span> || command == <span class="stringliteral">"d"</span>)<a name="l00274"></a>00274 {<a name="l00275"></a>00275 <span class="keywordtype">char</span> passPhrase[MAX_PHRASE_LENGTH];<a name="l00276"></a>00276 cout << <span class="stringliteral">"Passphrase: "</span>;<a name="l00277"></a>00277 cin.getline(passPhrase, MAX_PHRASE_LENGTH);<a name="l00278"></a>00278 <span class="keywordflow">if</span> (command == <span class="stringliteral">"e"</span>)<a name="l00279"></a>00279 EncryptFile(argv[2], argv[3], passPhrase);<a name="l00280"></a>00280 <span class="keywordflow">else</span><a name="l00281"></a>00281 DecryptFile(argv[2], argv[3], passPhrase);<a name="l00282"></a>00282 }<a name="l00283"></a>00283 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"ss"</span>)<a name="l00284"></a>00284 {<a name="l00285"></a>00285 <span class="keywordtype">char</span> seed[1024];<a name="l00286"></a>00286 cout << <span class="stringliteral">"\nRandom Seed: "</span>;<a name="l00287"></a>00287 ws(cin);<a name="l00288"></a>00288 cin.getline(seed, 1024);<a name="l00289"></a>00289 SecretShareFile(atoi(argv[2]), atoi(argv[3]), argv[4], seed);<a name="l00290"></a>00290 }<a name="l00291"></a>00291 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"sr"</span>)<a name="l00292"></a>00292 SecretRecoverFile(argc-3, argv[2], argv+3);<a name="l00293"></a>00293 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"id"</span>)<a name="l00294"></a>00294 InformationDisperseFile(atoi(argv[2]), atoi(argv[3]), argv[4]);<a name="l00295"></a>00295 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"ir"</span>)<a name="l00296"></a>00296 InformationRecoverFile(argc-3, argv[2], argv+3);<a name="l00297"></a>00297 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"v"</span>)<a name="l00298"></a>00298 <span class="keywordflow">return</span> !Validate(argc>2 ? atoi(argv[2]) : 0, argv[1][1] == <span class="charliteral">'v'</span>, argc>3 ? argv[3] : NULL);<a name="l00299"></a>00299 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"b"</span>)<a name="l00300"></a>00300 BenchmarkAll(argc<3 ? 1 : atof(argv[2]), argc<4 ? 0 : atof(argv[3])*1e9);<a name="l00301"></a>00301 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"b2"</span>)<a name="l00302"></a>00302 BenchmarkAll2(argc<3 ? 1 : atof(argv[2]), argc<4 ? 0 : atof(argv[3])*1e9);<a name="l00303"></a>00303 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"z"</span>)<a name="l00304"></a>00304 GzipFile(argv[3], argv[4], argv[2][0]-<span class="charliteral">'0'</span>);<a name="l00305"></a>00305 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"u"</span>)<a name="l00306"></a>00306 GunzipFile(argv[2], argv[3]);<a name="l00307"></a>00307 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"fips"</span>)<a name="l00308"></a>00308 FIPS140_SampleApplication();<a name="l00309"></a>00309 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"fips-rand"</span>)<a name="l00310"></a>00310 FIPS140_GenerateRandomFiles();<a name="l00311"></a>00311 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"ft"</span>)<a name="l00312"></a>00312 ForwardTcpPort(argv[2], argv[3], argv[4]);<a name="l00313"></a>00313 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"a"</span>)<a name="l00314"></a>00314 {<a name="l00315"></a>00315 <span class="keywordflow">if</span> (AdhocTest)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -