📄 test_8cpp-source.html
字号:
00286 <span class="keywordflow">case</span> <span class="charliteral">'u'</span>:00287 GunzipFile(argv[2], argv[3]);00288 <span class="keywordflow">return</span> 0;00289 <span class="keywordflow">case</span> <span class="charliteral">'f'</span>:00290 <span class="keywordflow">if</span> (command == <span class="stringliteral">"fips"</span>)00291 FIPS140_SampleApplication();00292 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"fips-rand"</span>)00293 FIPS140_GenerateRandomFiles();00294 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (command == <span class="stringliteral">"ft"</span>)00295 ForwardTcpPort(argv[2], argv[3], argv[4]);00296 <span class="keywordflow">return</span> 0;00297 <span class="keywordflow">case</span> <span class="charliteral">'h'</span>:00298 <span class="keywordflow">if</span> (command == <span class="stringliteral">"hmac"</span>)00299 {00300 HmacFile(argv[2], argv[3]);00301 <span class="keywordflow">return</span> 0;00302 }00303 <span class="comment">// fall through</span>00304 <span class="keywordflow">default</span>:00305 <a class="code" href="class_file_source.html">FileSource</a> usage(<span class="stringliteral">"usage.dat"</span>, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(cout));00306 <span class="keywordflow">return</span> 1;00307 }00308 }00309 <span class="keywordflow">catch</span>(CryptoPP::Exception &e)00310 {00311 cout << <span class="stringliteral">"\nCryptoPP::Exception caught: "</span> << e.what() << endl;00312 <span class="keywordflow">return</span> -1;00313 }00314 <span class="keywordflow">catch</span>(std::exception &e)00315 {00316 cout << <span class="stringliteral">"\nstd::exception caught: "</span> << e.what() << endl;00317 <span class="keywordflow">return</span> -2;00318 }00319 }00320 00321 <span class="keywordtype">void</span> FIPS140_GenerateRandomFiles()00322 {00323 <span class="preprocessor">#ifdef OS_RNG_AVAILABLE</span>00324 <span class="preprocessor"></span> <a class="code" href="class_auto_seeded_x917_r_n_g.html">AutoSeededX917RNG<DES_EDE3></a> rng;00325 <a class="code" href="class_random_number_store.html">RandomNumberStore</a> store(rng, ULONG_MAX);00326 00327 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<100000; i++)00328 store.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(<a class="code" href="class_file_sink.html">FileSink</a>((IntToString(i) + <span class="stringliteral">".rnd"</span>).c_str()).Ref(), 20000);00329 <span class="preprocessor">#else</span>00330 <span class="preprocessor"></span> cout << <span class="stringliteral">"OS provided RNG not available.\n"</span>;00331 exit(-1);00332 <span class="preprocessor">#endif</span>00333 <span class="preprocessor"></span>}00334 00335 <a class="code" href="class_random_pool.html">RandomPool</a> & GlobalRNG()00336 {00337 <span class="keyword">static</span> <a class="code" href="class_random_pool.html">RandomPool</a> randomPool;00338 <span class="keywordflow">return</span> randomPool;00339 }00340 00341 <span class="keywordtype">void</span> GenerateRSAKey(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> keyLength, <span class="keyword">const</span> <span class="keywordtype">char</span> *privFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *pubFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *seed)00342 {00343 <a class="code" href="class_random_pool.html">RandomPool</a> randPool;00344 randPool.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>((byte *)seed, strlen(seed));00345 00346 <a class="code" href="struct_r_s_a_e_s.html">RSAES_OAEP_SHA_Decryptor</a> priv(randPool, keyLength);00347 <a class="code" href="class_hex_encoder.html">HexEncoder</a> privFile(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(privFilename));00348 priv.DEREncode(privFile);00349 privFile.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_7">MessageEnd</a>();00350 00351 <a class="code" href="struct_r_s_a_e_s.html">RSAES_OAEP_SHA_Encryptor</a> pub(priv);00352 <a class="code" href="class_hex_encoder.html">HexEncoder</a> pubFile(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(pubFilename));00353 pub.DEREncode(pubFile);00354 pubFile.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_7">MessageEnd</a>();00355 }00356 00357 string RSAEncryptString(<span class="keyword">const</span> <span class="keywordtype">char</span> *pubFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *seed, <span class="keyword">const</span> <span class="keywordtype">char</span> *message)00358 {00359 <a class="code" href="class_file_source.html">FileSource</a> pubFile(pubFilename, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>);00360 <a class="code" href="struct_r_s_a_e_s.html">RSAES_OAEP_SHA_Encryptor</a> pub(pubFile);00361 00362 <a class="code" href="class_random_pool.html">RandomPool</a> randPool;00363 randPool.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>((byte *)seed, strlen(seed));00364 00365 string result;00366 <a class="code" href="class_string_source.html">StringSource</a>(message, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_p_k___encryptor_filter.html">PK_EncryptorFilter</a>(randPool, pub, <span class="keyword">new</span> <a class="code" href="class_hex_encoder.html">HexEncoder</a>(<span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(result))));00367 <span class="keywordflow">return</span> result;00368 }00369 00370 string RSADecryptString(<span class="keyword">const</span> <span class="keywordtype">char</span> *privFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *ciphertext)00371 {00372 <a class="code" href="class_file_source.html">FileSource</a> privFile(privFilename, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>);00373 <a class="code" href="struct_r_s_a_e_s.html">RSAES_OAEP_SHA_Decryptor</a> priv(privFile);00374 00375 string result;00376 <a class="code" href="class_string_source.html">StringSource</a>(ciphertext, <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_p_k___decryptor_filter.html">PK_DecryptorFilter</a>(priv, <span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(result))));00377 <span class="keywordflow">return</span> result;00378 }00379 00380 <span class="keywordtype">void</span> RSASignFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *privFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *messageFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *signatureFilename)00381 {00382 <a class="code" href="class_file_source.html">FileSource</a> privFile(privFilename, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>);00383 <a class="code" href="struct_r_s_a_s_s_a.html">RSASSA_PKCS1v15_SHA_Signer</a> priv(privFile);00384 <span class="comment">// RSASSA_PKCS1v15_SHA_Signer ignores the rng. Use a real RNG for other signature schemes!</span>00385 <a class="code" href="class_file_source.html">FileSource</a> f(messageFilename, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_signer_filter.html">SignerFilter</a>(NullRNG(), priv, <span class="keyword">new</span> <a class="code" href="class_hex_encoder.html">HexEncoder</a>(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(signatureFilename))));00386 }00387 00388 <span class="keywordtype">bool</span> RSAVerifyFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *pubFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *messageFilename, <span class="keyword">const</span> <span class="keywordtype">char</span> *signatureFilename)00389 {00390 <a class="code" href="class_file_source.html">FileSource</a> pubFile(pubFilename, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>);00391 <a class="code" href="struct_r_s_a_s_s_a.html">RSASSA_PKCS1v15_SHA_Verifier</a> pub(pubFile);00392 00393 <a class="code" href="class_file_source.html">FileSource</a> signatureFile(signatureFilename, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hex_decoder.html">HexDecoder</a>);00394 <span class="keywordflow">if</span> (signatureFile.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_0">MaxRetrievable</a>() != pub.SignatureLength())00395 <span class="keywordflow">return</span> <span class="keyword">false</span>;00396 <a class="code" href="class_sec_block.html">SecByteBlock</a> signature(pub.SignatureLength());00397 signatureFile.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_2">Get</a>(signature, signature.<a class="code" href="class_sec_block.html#_sec_block_with_hinta13">size</a>());00398 00399 <a class="code" href="class_signature_verification_filter.html">VerifierFilter</a> *verifierFilter = <span class="keyword">new</span> <a class="code" href="class_signature_verification_filter.html">VerifierFilter</a>(pub);00400 verifierFilter-><a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>(signature, pub.SignatureLength());00401 <a class="code" href="class_file_source.html">FileSource</a> f(messageFilename, <span class="keyword">true</span>, verifierFilter);00402 00403 <span class="keywordflow">return</span> verifierFilter-><a class="code" href="class_signature_verification_filter.html#_signature_verification_filtera1">GetLastResult</a>();00404 }00405 00406 <span class="keywordtype">void</span> DigestFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *filename)00407 {00408 <a class="code" href="class_m_d5.html">MD5</a> md5;00409 <a class="code" href="class_s_h_a.html">SHA</a> sha;00410 <a class="code" href="class_r_i_p_e_m_d160.html">RIPEMD160</a> ripemd;00411 <a class="code" href="class_s_h_a256.html">SHA256</a> sha256;00412 <a class="code" href="class_hash_filter.html">HashFilter</a> md5Filter(md5), shaFilter(sha), ripemdFilter(ripemd), sha256Filter(sha256);00413 00414 auto_ptr<ChannelSwitch> channelSwitch(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>);00415 channelSwitch->AddDefaultRoute(md5Filter);00416 channelSwitch->AddDefaultRoute(shaFilter);00417 channelSwitch->AddDefaultRoute(ripemdFilter);00418 channelSwitch->AddDefaultRoute(sha256Filter);00419 <a class="code" href="class_file_source.html">FileSource</a>(filename, <span class="keyword">true</span>, channelSwitch.release());00420 00421 <a class="code" href="class_hex_encoder.html">HexEncoder</a> encoder(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(cout), <span class="keyword">false</span>);00422 cout << <span class="stringliteral">"\nMD5: "</span>;00423 md5Filter.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(encoder);00424 cout << <span class="stringliteral">"\nSHA-1: "</span>;00425 shaFilter.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(encoder);00426 cout << <span class="stringliteral">"\nRIPEMD-160: "</span>;00427 ripemdFilter.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(encoder);00428 cout << <span class="stringliteral">"\nSHA-256: "</span>;00429 sha256Filter.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz7_10">TransferTo</a>(encoder);00430 }00431
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -