📄 test.cpp
字号:
{ FileSource privFile(privFilename, true, new HexDecoder); RSASS<PKCS1v15, SHA>::Signer priv(privFile); FileSource f(messageFilename, true, new SignerFilter(GlobalRNG(), priv, new HexEncoder(new FileSink(signatureFilename))));}bool RSAVerifyFile(const char *pubFilename, const char *messageFilename, const char *signatureFilename){ FileSource pubFile(pubFilename, true, new HexDecoder); RSASS<PKCS1v15, SHA>::Verifier pub(pubFile); FileSource signatureFile(signatureFilename, true, new HexDecoder); if (signatureFile.MaxRetrievable() != pub.SignatureLength()) return false; SecByteBlock signature(pub.SignatureLength()); signatureFile.Get(signature, signature.size()); VerifierFilter *verifierFilter = new VerifierFilter(pub); verifierFilter->Put(signature, pub.SignatureLength()); FileSource f(messageFilename, true, verifierFilter); return verifierFilter->GetLastResult();}void DigestFile(const char *filename){ SHA1 sha; RIPEMD160 ripemd; SHA256 sha256; Tiger tiger; SHA512 sha512; Whirlpool whirlpool; vector_member_ptrs<HashFilter> filters(6); filters[0].reset(new HashFilter(sha)); filters[1].reset(new HashFilter(ripemd)); filters[2].reset(new HashFilter(tiger)); filters[3].reset(new HashFilter(sha256)); filters[4].reset(new HashFilter(sha512)); filters[5].reset(new HashFilter(whirlpool)); auto_ptr<ChannelSwitch> channelSwitch(new ChannelSwitch); size_t i; for (i=0; i<filters.size(); i++) channelSwitch->AddDefaultRoute(*filters[i]); FileSource(filename, true, channelSwitch.release()); HexEncoder encoder(new FileSink(cout), false); for (i=0; i<filters.size(); i++) { cout << filters[i]->AlgorithmName() << ": "; filters[i]->TransferTo(encoder); cout << "\n"; }}void HmacFile(const char *hexKey, const char *file){ member_ptr<MessageAuthenticationCode> mac; if (strcmp(hexKey, "selftest") == 0) { cerr << "Computing HMAC/SHA1 value for self test.\n"; mac.reset(NewIntegrityCheckingMAC()); } else { std::string decodedKey; StringSource(hexKey, true, new HexDecoder(new StringSink(decodedKey))); mac.reset(new HMAC<SHA1>((const byte *)decodedKey.data(), decodedKey.size())); } FileSource(file, true, new HashFilter(*mac, new HexEncoder(new FileSink(cout))));}void AES_CTR_Encrypt(const char *hexKey, const char *hexIV, const char *infile, const char *outfile){ SecByteBlock key = HexDecodeString(hexKey); SecByteBlock iv = HexDecodeString(hexIV); CTR_Mode<AES>::Encryption aes(key, key.size(), iv); FileSource(infile, true, new StreamTransformationFilter(aes, new FileSink(outfile)));}string EncryptString(const char *instr, const char *passPhrase){ string outstr; DefaultEncryptorWithMAC encryptor(passPhrase, new HexEncoder(new StringSink(outstr))); encryptor.Put((byte *)instr, strlen(instr)); encryptor.MessageEnd(); return outstr;}string DecryptString(const char *instr, const char *passPhrase){ string outstr; HexDecoder decryptor(new DefaultDecryptorWithMAC(passPhrase, new StringSink(outstr))); decryptor.Put((byte *)instr, strlen(instr)); decryptor.MessageEnd(); return outstr;}void EncryptFile(const char *in, const char *out, const char *passPhrase){ FileSource f(in, true, new DefaultEncryptorWithMAC(passPhrase, new FileSink(out)));}void DecryptFile(const char *in, const char *out, const char *passPhrase){ FileSource f(in, true, new DefaultDecryptorWithMAC(passPhrase, new FileSink(out)));}void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed){ assert(nShares<=1000); RandomPool rng; rng.IncorporateEntropy((byte *)seed, strlen(seed)); ChannelSwitch *channelSwitch; FileSource source(filename, false, new SecretSharing(rng, threshold, nShares, channelSwitch = new ChannelSwitch)); vector_member_ptrs<FileSink> fileSinks(nShares); string channel; for (int i=0; i<nShares; i++) { char extension[5] = ".000"; extension[1]='0'+byte(i/100); extension[2]='0'+byte((i/10)%10); extension[3]='0'+byte(i%10); fileSinks[i].reset(new FileSink((string(filename)+extension).c_str())); channel = WordToString<word32>(i); fileSinks[i]->Put((byte *)channel.data(), 4); channelSwitch->AddRoute(channel, *fileSinks[i], DEFAULT_CHANNEL); } source.PumpAll();}void SecretRecoverFile(int threshold, const char *outFilename, char *const *inFilenames){ assert(threshold<=1000); SecretRecovery recovery(threshold, new FileSink(outFilename)); vector_member_ptrs<FileSource> fileSources(threshold); SecByteBlock channel(4); int i; for (i=0; i<threshold; i++) { fileSources[i].reset(new FileSource(inFilenames[i], false)); fileSources[i]->Pump(4); fileSources[i]->Get(channel, 4); fileSources[i]->Attach(new ChannelSwitch(recovery, string((char *)channel.begin(), 4))); } while (fileSources[0]->Pump(256)) for (i=1; i<threshold; i++) fileSources[i]->Pump(256); for (i=0; i<threshold; i++) fileSources[i]->PumpAll();}void InformationDisperseFile(int threshold, int nShares, const char *filename){ assert(nShares<=1000); ChannelSwitch *channelSwitch; FileSource source(filename, false, new InformationDispersal(threshold, nShares, channelSwitch = new ChannelSwitch)); vector_member_ptrs<FileSink> fileSinks(nShares); string channel; for (int i=0; i<nShares; i++) { char extension[5] = ".000"; extension[1]='0'+byte(i/100); extension[2]='0'+byte((i/10)%10); extension[3]='0'+byte(i%10); fileSinks[i].reset(new FileSink((string(filename)+extension).c_str())); channel = WordToString<word32>(i); fileSinks[i]->Put((byte *)channel.data(), 4); channelSwitch->AddRoute(channel, *fileSinks[i], DEFAULT_CHANNEL); } source.PumpAll();}void InformationRecoverFile(int threshold, const char *outFilename, char *const *inFilenames){ assert(threshold<=1000); InformationRecovery recovery(threshold, new FileSink(outFilename)); vector_member_ptrs<FileSource> fileSources(threshold); SecByteBlock channel(4); int i; for (i=0; i<threshold; i++) { fileSources[i].reset(new FileSource(inFilenames[i], false)); fileSources[i]->Pump(4); fileSources[i]->Get(channel, 4); fileSources[i]->Attach(new ChannelSwitch(recovery, string((char *)channel.begin(), 4))); } while (fileSources[0]->Pump(256)) for (i=1; i<threshold; i++) fileSources[i]->Pump(256); for (i=0; i<threshold; i++) fileSources[i]->PumpAll();}void GzipFile(const char *in, const char *out, int deflate_level){// FileSource(in, true, new Gzip(new FileSink(out), deflate_level)); // use a filter graph to compare decompressed data with original // // Source ----> Gzip ------> Sink // \ | // \ Gunzip // \ | // \ v // > ComparisonFilter EqualityComparisonFilter comparison; Gunzip gunzip(new ChannelSwitch(comparison, "0")); gunzip.SetAutoSignalPropagation(0); FileSink sink(out); ChannelSwitch *cs; Gzip gzip(cs = new ChannelSwitch(sink), deflate_level); cs->AddDefaultRoute(gunzip); cs = new ChannelSwitch(gzip); cs->AddDefaultRoute(comparison, "1"); FileSource source(in, true, cs); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1");}void GunzipFile(const char *in, const char *out){ FileSource(in, true, new Gunzip(new FileSink(out)));}void Base64Encode(const char *in, const char *out){ FileSource(in, true, new Base64Encoder(new FileSink(out)));}void Base64Decode(const char *in, const char *out){ FileSource(in, true, new Base64Decoder(new FileSink(out)));}void HexEncode(const char *in, const char *out){ FileSource(in, true, new HexEncoder(new FileSink(out)));}void HexDecode(const char *in, const char *out){ FileSource(in, true, new HexDecoder(new FileSink(out)));}void ForwardTcpPort(const char *sourcePortName, const char *destinationHost, const char *destinationPortName){#ifdef SOCKETS_AVAILABLE SocketsInitializer sockInit; Socket sockListen, sockSource, sockDestination; int sourcePort = Socket::PortNameToNumber(sourcePortName); int destinationPort = Socket::PortNameToNumber(destinationPortName); sockListen.Create(); sockListen.Bind(sourcePort); setsockopt(sockListen, IPPROTO_TCP, TCP_NODELAY, "\x01", 1); cout << "Listing on port " << sourcePort << ".\n"; sockListen.Listen(); sockListen.Accept(sockSource); cout << "Connection accepted on port " << sourcePort << ".\n"; sockListen.CloseSocket(); cout << "Making connection to " << destinationHost << ", port " << destinationPort << ".\n"; sockDestination.Create(); sockDestination.Connect(destinationHost, destinationPort); cout << "Connection made to " << destinationHost << ", starting to forward.\n"; SocketSource out(sockSource, false, new SocketSink(sockDestination)); SocketSource in(sockDestination, false, new SocketSink(sockSource)); WaitObjectContainer waitObjects; while (!(in.SourceExhausted() && out.SourceExhausted())) { waitObjects.Clear(); out.GetWaitObjects(waitObjects, CallStack("ForwardTcpPort - out", NULL)); in.GetWaitObjects(waitObjects, CallStack("ForwardTcpPort - in", NULL)); waitObjects.Wait(INFINITE_TIME); if (!out.SourceExhausted()) { cout << "o" << flush; out.PumpAll2(false); if (out.SourceExhausted()) cout << "EOF received on source socket.\n"; } if (!in.SourceExhausted()) { cout << "i" << flush; in.PumpAll2(false); if (in.SourceExhausted()) cout << "EOF received on destination socket.\n"; } }#else cout << "Socket support was not enabled at compile time.\n"; exit(-1);#endif}bool Validate(int alg, bool thorough, const char *seedInput){ bool result; std::string seed = seedInput ? std::string(seedInput) : IntToString(time(NULL)); seed.resize(16); cout << "Using seed: " << seed << endl << endl; s_globalRNG.SetKeyWithIV((byte *)seed.data(), 16, (byte *)seed.data()); switch (alg) { case 0: result = ValidateAll(thorough); break; case 1: result = TestSettings(); break; case 2: result = TestOS_RNG(); break; case 3: result = ValidateMD5(); break; case 4: result = ValidateSHA(); break; case 5: result = ValidateDES(); break; case 6: result = ValidateIDEA(); break; case 7: result = ValidateARC4(); break; case 8: result = ValidateRC5(); break; case 9: result = ValidateBlowfish(); break;// case 10: result = ValidateDiamond2(); break; case 11: result = ValidateThreeWay(); break; case 12: result = ValidateBBS(); break; case 13: result = ValidateDH(); break; case 14: result = ValidateRSA(); break; case 15: result = ValidateElGamal(); break; case 16: result = ValidateDSA(thorough); break;// case 17: result = ValidateHAVAL(); break; case 18: result = ValidateSAFER(); break; case 19: result = ValidateLUC(); break; case 20: result = ValidateRabin(); break;// case 21: result = ValidateBlumGoldwasser(); break; case 22: result = ValidateECP(); break; case 23: result = ValidateEC2N(); break;// case 24: result = ValidateMD5MAC(); break; case 25: result = ValidateGOST(); break; case 26: result = ValidateTiger(); break; case 27: result = ValidateRIPEMD(); break; case 28: result = ValidateHMAC(); break;// case 29: result = ValidateXMACC(); break; case 30: result = ValidateSHARK(); break; case 32: result = ValidateLUC_DH(); break; case 33: result = ValidateLUC_DL(); break; case 34: result = ValidateSEAL(); break; case 35: result = ValidateCAST(); break; case 36: result = ValidateSquare(); break; case 37: result = ValidateRC2(); break; case 38: result = ValidateRC6(); break; case 39: result = ValidateMARS(); break; case 40: result = ValidateRW(); break; case 41: result = ValidateMD2(); break; case 42: result = ValidateNR(); break; case 43: result = ValidateMQV(); break; case 44: result = ValidateRijndael(); break; case 45: result = ValidateTwofish(); break; case 46: result = ValidateSerpent(); break; case 47: result = ValidateCipherModes(); break; case 48: result = ValidateCRC32(); break; case 49: result = ValidateECDSA(); break; case 50: result = ValidateXTR_DH(); break; case 51: result = ValidateSKIPJACK(); break; case 52: result = ValidateSHA2(); break; case 53: result = ValidatePanama(); break; case 54: result = ValidateAdler32(); break; case 55: result = ValidateMD4(); break; case 56: result = ValidatePBKDF(); break; case 57: result = ValidateESIGN(); break; case 58: result = ValidateDLIES(); break; case 59: result = ValidateBaseCode(); break; case 60: result = ValidateSHACAL2(); break; case 61: result = ValidateCamellia(); break; case 62: result = ValidateWhirlpool(); break; case 63: result = ValidateTTMAC(); break; case 64: result = ValidateSalsa(); break; case 65: result = ValidateSosemanuk(); break; case 66: result = ValidateVMAC(); break; case 67: result = ValidateCCM(); break; case 68: result = ValidateGCM(); break; case 69: result = ValidateCMAC(); break; default: return false; } time_t endTime = time(NULL); cout << "\nTest ended at " << asctime(localtime(&endTime)); cout << "Seed used was: " << seed << endl; return result;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -