📄 test_8cpp-source.html
字号:
00432 <span class="keywordtype">void</span> HmacFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *hexKey, <span class="keyword">const</span> <span class="keywordtype">char</span> *file)00433 {00434 member_ptr<MessageAuthenticationCode> mac;00435 std::string decodedKey;00436 <a class="code" href="class_string_source.html">StringSource</a>(hexKey, <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>(decodedKey)));00437 mac.reset(<span class="keyword">new</span> <a class="code" href="class_h_m_a_c.html">HMAC<SHA1></a>((<span class="keyword">const</span> byte *)decodedKey.data(), decodedKey.size()));00438 <a class="code" href="class_file_source.html">FileSource</a>(file, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_hash_filter.html">HashFilter</a>(*mac, <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>(cout))));00439 }00440 00441 string EncryptString(<span class="keyword">const</span> <span class="keywordtype">char</span> *instr, <span class="keyword">const</span> <span class="keywordtype">char</span> *passPhrase)00442 {00443 string outstr;00444 00445 <a class="code" href="class_default_encryptor_with_m_a_c.html">DefaultEncryptorWithMAC</a> encryptor(passPhrase, <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>(outstr)));00446 encryptor.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>((byte *)instr, strlen(instr));00447 encryptor.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_7">MessageEnd</a>();00448 00449 <span class="keywordflow">return</span> outstr;00450 }00451 00452 string DecryptString(<span class="keyword">const</span> <span class="keywordtype">char</span> *instr, <span class="keyword">const</span> <span class="keywordtype">char</span> *passPhrase)00453 {00454 string outstr;00455 00456 <a class="code" href="class_hex_decoder.html">HexDecoder</a> decryptor(<span class="keyword">new</span> <a class="code" href="class_default_decryptor_with_m_a_c.html">DefaultDecryptorWithMAC</a>(passPhrase, <span class="keyword">new</span> <a class="code" href="class_string_sink_template.html">StringSink</a>(outstr)));00457 decryptor.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>((byte *)instr, strlen(instr));00458 decryptor.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_7">MessageEnd</a>();00459 00460 <span class="keywordflow">return</span> outstr;00461 }00462 00463 <span class="keywordtype">void</span> EncryptFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keyword">const</span> <span class="keywordtype">char</span> *out, <span class="keyword">const</span> <span class="keywordtype">char</span> *passPhrase)00464 {00465 <a class="code" href="class_file_source.html">FileSource</a> f(in, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_default_encryptor_with_m_a_c.html">DefaultEncryptorWithMAC</a>(passPhrase, <span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(out)));00466 }00467 00468 <span class="keywordtype">void</span> DecryptFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keyword">const</span> <span class="keywordtype">char</span> *out, <span class="keyword">const</span> <span class="keywordtype">char</span> *passPhrase)00469 {00470 <a class="code" href="class_file_source.html">FileSource</a> f(in, <span class="keyword">true</span>, <span class="keyword">new</span> <a class="code" href="class_default_decryptor_with_m_a_c.html">DefaultDecryptorWithMAC</a>(passPhrase, <span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(out)));00471 }00472 00473 <span class="keywordtype">void</span> SecretShareFile(<span class="keywordtype">int</span> threshold, <span class="keywordtype">int</span> nShares, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename, <span class="keyword">const</span> <span class="keywordtype">char</span> *seed)00474 {00475 assert(nShares<=1000);00476 00477 <a class="code" href="class_random_pool.html">RandomPool</a> rng;00478 rng.<a class="code" href="class_buffered_transformation.html#_zlib_decompressorz1_0">Put</a>((byte *)seed, strlen(seed));00479 00480 <a class="code" href="class_channel_switch.html">ChannelSwitch</a> *channelSwitch;00481 <a class="code" href="class_file_source.html">FileSource</a> source(filename, <span class="keyword">false</span>, <span class="keyword">new</span> <a class="code" href="class_secret_sharing.html">SecretSharing</a>(rng, threshold, nShares, channelSwitch = <span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>));00482 00483 vector_member_ptrs<FileSink> fileSinks(nShares);00484 string channel;00485 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<nShares; i++)00486 {00487 <span class="keywordtype">char</span> extension[5] = <span class="stringliteral">".000"</span>;00488 extension[1]=<span class="charliteral">'0'</span>+byte(i/100);00489 extension[2]=<span class="charliteral">'0'</span>+byte((i/10)%10);00490 extension[3]=<span class="charliteral">'0'</span>+byte(i%10);00491 fileSinks[i].reset(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>((string(filename)+extension).c_str()));00492 00493 channel = WordToString<word32>(i);00494 fileSinks[i]->Put((byte *)channel.data(), 4);00495 channelSwitch-><a class="code" href="class_channel_switch.html#_channel_switcha13">AddRoute</a>(channel, *fileSinks[i], BufferedTransformation::NULL_CHANNEL);00496 }00497 00498 source.<a class="code" href="class_source.html#_windows_pipe_sourcea16">PumpAll</a>();00499 }00500 00501 <span class="keywordtype">void</span> SecretRecoverFile(<span class="keywordtype">int</span> threshold, <span class="keyword">const</span> <span class="keywordtype">char</span> *outFilename, <span class="keywordtype">char</span> *<span class="keyword">const</span> *inFilenames)00502 {00503 assert(threshold<=1000);00504 00505 <a class="code" href="class_secret_recovery.html">SecretRecovery</a> recovery(threshold, <span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(outFilename));00506 00507 vector_member_ptrs<FileSource> fileSources(threshold);00508 <a class="code" href="class_sec_block.html">SecByteBlock</a> channel(4);00509 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;00510 <span class="keywordflow">for</span> (i=0; i<threshold; i++)00511 {00512 fileSources[i].reset(<span class="keyword">new</span> <a class="code" href="class_file_source.html">FileSource</a>(inFilenames[i], <span class="keyword">false</span>));00513 fileSources[i]->Pump(4);00514 fileSources[i]->Get(channel, 4);00515 fileSources[i]->Attach(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(recovery, string((<span class="keywordtype">char</span> *)channel.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>(), 4)));00516 }00517 00518 <span class="keywordflow">while</span> (fileSources[0]->Pump(256))00519 <span class="keywordflow">for</span> (i=1; i<threshold; i++)00520 fileSources[i]->Pump(256);00521 00522 <span class="keywordflow">for</span> (i=0; i<threshold; i++)00523 fileSources[i]->PumpAll();00524 }00525 00526 <span class="keywordtype">void</span> InformationDisperseFile(<span class="keywordtype">int</span> threshold, <span class="keywordtype">int</span> nShares, <span class="keyword">const</span> <span class="keywordtype">char</span> *filename)00527 {00528 assert(nShares<=1000);00529 00530 <a class="code" href="class_channel_switch.html">ChannelSwitch</a> *channelSwitch;00531 <a class="code" href="class_file_source.html">FileSource</a> source(filename, <span class="keyword">false</span>, <span class="keyword">new</span> <a class="code" href="class_information_dispersal.html">InformationDispersal</a>(threshold, nShares, channelSwitch = <span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>));00532 00533 vector_member_ptrs<FileSink> fileSinks(nShares);00534 string channel;00535 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i=0; i<nShares; i++)00536 {00537 <span class="keywordtype">char</span> extension[5] = <span class="stringliteral">".000"</span>;00538 extension[1]=<span class="charliteral">'0'</span>+byte(i/100);00539 extension[2]=<span class="charliteral">'0'</span>+byte((i/10)%10);00540 extension[3]=<span class="charliteral">'0'</span>+byte(i%10);00541 fileSinks[i].reset(<span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>((string(filename)+extension).c_str()));00542 00543 channel = WordToString<word32>(i);00544 fileSinks[i]->Put((byte *)channel.data(), 4);00545 channelSwitch-><a class="code" href="class_channel_switch.html#_channel_switcha13">AddRoute</a>(channel, *fileSinks[i], BufferedTransformation::NULL_CHANNEL);00546 }00547 00548 source.<a class="code" href="class_source.html#_windows_pipe_sourcea16">PumpAll</a>();00549 }00550 00551 <span class="keywordtype">void</span> InformationRecoverFile(<span class="keywordtype">int</span> threshold, <span class="keyword">const</span> <span class="keywordtype">char</span> *outFilename, <span class="keywordtype">char</span> *<span class="keyword">const</span> *inFilenames)00552 {00553 assert(threshold<=1000);00554 00555 <a class="code" href="class_information_recovery.html">InformationRecovery</a> recovery(threshold, <span class="keyword">new</span> <a class="code" href="class_file_sink.html">FileSink</a>(outFilename));00556 00557 vector_member_ptrs<FileSource> fileSources(threshold);00558 <a class="code" href="class_sec_block.html">SecByteBlock</a> channel(4);00559 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;00560 <span class="keywordflow">for</span> (i=0; i<threshold; i++)00561 {00562 fileSources[i].reset(<span class="keyword">new</span> <a class="code" href="class_file_source.html">FileSource</a>(inFilenames[i], <span class="keyword">false</span>));00563 fileSources[i]->Pump(4);00564 fileSources[i]->Get(channel, 4);00565 fileSources[i]->Attach(<span class="keyword">new</span> <a class="code" href="class_channel_switch.html">ChannelSwitch</a>(recovery, string((<span class="keywordtype">char</span> *)channel.<a class="code" href="class_sec_block.html#_sec_block_with_hinta7">begin</a>(), 4)));00566 }00567 00568 <span class="keywordflow">while</span> (fileSources[0]->Pump(256))00569 <span class="keywordflow">for</span> (i=1; i<threshold; i++)00570 fileSources[i]->Pump(256);00571 00572 <span class="keywordflow">for</span> (i=0; i<threshold; i++)00573 fileSources[i]->PumpAll();00574 }00575 00576 <span class="keywordtype">void</span> GzipFile(<span class="keyword">const</span> <span class="keywordtype">char</span> *in, <span class="keyword">const</span> <span class="keywordtype">char</span> *out, <span class="keywordtype">int</span> deflate_level)00577 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -