summaryrefslogtreecommitdiffstats
path: root/cryptopp562/test.cpp
diff options
context:
space:
mode:
authorMalfurious <m@lfurio.us>2024-10-21 11:09:00 -0400
committerMalfurious <m@lfurio.us>2024-10-24 06:41:41 -0400
commit5494fc310acf0aabb9d828451331e44483eb21c7 (patch)
tree77280a586d52470fca89b9ed73f5f1faaf7907c6 /cryptopp562/test.cpp
parent428471d39fb8c205a9fad899c88c30a2cb7df685 (diff)
downloadcompass-5494fc310acf0aabb9d828451331e44483eb21c7.tar.gz
compass-5494fc310acf0aabb9d828451331e44483eb21c7.zip
Remove Crypto++ library
The tracked version of Crypto++ is going on 10 years old and doesn't always compile properly on modern tooling. This removes the entire subdirectory as well as references to files in the build script. Due to the number of files touched by this commit, I opt to add its replacement in the next commit. Signed-off-by: Malfurious <m@lfurio.us>
Diffstat (limited to 'cryptopp562/test.cpp')
-rw-r--r--cryptopp562/test.cpp852
1 files changed, 0 insertions, 852 deletions
diff --git a/cryptopp562/test.cpp b/cryptopp562/test.cpp
deleted file mode 100644
index 5ef7e4a..0000000
--- a/cryptopp562/test.cpp
+++ /dev/null
@@ -1,852 +0,0 @@
-// test.cpp - written and placed in the public domain by Wei Dai
-
-#define _CRT_SECURE_NO_DEPRECATE
-#define CRYPTOPP_DEFAULT_NO_DLL
-#define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1
-
-#include "dll.h"
-#include "md5.h"
-#include "ripemd.h"
-#include "rng.h"
-#include "gzip.h"
-#include "default.h"
-#include "randpool.h"
-#include "ida.h"
-#include "base64.h"
-#include "socketft.h"
-#include "wait.h"
-#include "factory.h"
-#include "whrlpool.h"
-#include "tiger.h"
-
-#include "validate.h"
-#include "bench.h"
-
-#include <iostream>
-#include <time.h>
-
-#ifdef CRYPTOPP_WIN32_AVAILABLE
-#include <windows.h>
-#endif
-
-#if defined(USE_BERKELEY_STYLE_SOCKETS) && !defined(macintosh)
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#endif
-
-#if (_MSC_VER >= 1000)
-#include <crtdbg.h> // for the debug heap
-#endif
-
-#if defined(__MWERKS__) && defined(macintosh)
-#include <console.h>
-#endif
-
-#ifdef __BORLANDC__
-#pragma comment(lib, "cryptlib_bds.lib")
-#pragma comment(lib, "ws2_32.lib")
-#endif
-
-USING_NAMESPACE(CryptoPP)
-USING_NAMESPACE(std)
-
-const int MAX_PHRASE_LENGTH=250;
-
-void RegisterFactories();
-
-void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed);
-string RSAEncryptString(const char *pubFilename, const char *seed, const char *message);
-string RSADecryptString(const char *privFilename, const char *ciphertext);
-void RSASignFile(const char *privFilename, const char *messageFilename, const char *signatureFilename);
-bool RSAVerifyFile(const char *pubFilename, const char *messageFilename, const char *signatureFilename);
-
-void DigestFile(const char *file);
-void HmacFile(const char *hexKey, const char *file);
-
-void AES_CTR_Encrypt(const char *hexKey, const char *hexIV, const char *infile, const char *outfile);
-
-string EncryptString(const char *plaintext, const char *passPhrase);
-string DecryptString(const char *ciphertext, const char *passPhrase);
-
-void EncryptFile(const char *in, const char *out, const char *passPhrase);
-void DecryptFile(const char *in, const char *out, const char *passPhrase);
-
-void SecretShareFile(int threshold, int nShares, const char *filename, const char *seed);
-void SecretRecoverFile(int threshold, const char *outFilename, char *const *inFilenames);
-
-void InformationDisperseFile(int threshold, int nShares, const char *filename);
-void InformationRecoverFile(int threshold, const char *outFilename, char *const *inFilenames);
-
-void GzipFile(const char *in, const char *out, int deflate_level);
-void GunzipFile(const char *in, const char *out);
-
-void Base64Encode(const char *infile, const char *outfile);
-void Base64Decode(const char *infile, const char *outfile);
-void HexEncode(const char *infile, const char *outfile);
-void HexDecode(const char *infile, const char *outfile);
-
-void ForwardTcpPort(const char *sourcePort, const char *destinationHost, const char *destinationPort);
-
-void FIPS140_SampleApplication();
-void FIPS140_GenerateRandomFiles();
-
-bool Validate(int, bool, const char *);
-
-int (*AdhocTest)(int argc, char *argv[]) = NULL;
-
-static OFB_Mode<AES>::Encryption s_globalRNG;
-
-RandomNumberGenerator & GlobalRNG()
-{
- return s_globalRNG;
-}
-
-/*int CRYPTOPP_API main(int argc, char *argv[])
-{
-#ifdef _CRTDBG_LEAK_CHECK_DF
- // Turn on leak-checking
- int tempflag = _CrtSetDbgFlag( _CRTDBG_REPORT_FLAG );
- tempflag |= _CRTDBG_LEAK_CHECK_DF;
- _CrtSetDbgFlag( tempflag );
-#endif
-
-#if defined(__MWERKS__) && defined(macintosh)
- argc = ccommand(&argv);
-#endif
-
- try
- {
- RegisterFactories();
-
- std::string seed = IntToString(time(NULL));
- seed.resize(16);
- s_globalRNG.SetKeyWithIV((byte *)seed.data(), 16, (byte *)seed.data());
-
- std::string command, executableName, macFilename;
-
- if (argc < 2)
- command = 'h';
- else
- command = argv[1];
-
- if (command == "g")
- {
- char seed[1024], privFilename[128], pubFilename[128];
- unsigned int keyLength;
-
- cout << "Key length in bits: ";
- cin >> keyLength;
-
- cout << "\nSave private key to file: ";
- cin >> privFilename;
-
- cout << "\nSave public key to file: ";
- cin >> pubFilename;
-
- cout << "\nRandom Seed: ";
- ws(cin);
- cin.getline(seed, 1024);
-
- GenerateRSAKey(keyLength, privFilename, pubFilename, seed);
- }
- else if (command == "rs")
- RSASignFile(argv[2], argv[3], argv[4]);
- else if (command == "rv")
- {
- bool verified = RSAVerifyFile(argv[2], argv[3], argv[4]);
- cout << (verified ? "valid signature" : "invalid signature") << endl;
- }
- else if (command == "r")
- {
- char privFilename[128], pubFilename[128];
- char seed[1024], message[1024];
-
- cout << "Private key file: ";
- cin >> privFilename;
-
- cout << "\nPublic key file: ";
- cin >> pubFilename;
-
- cout << "\nRandom Seed: ";
- ws(cin);
- cin.getline(seed, 1024);
-
- cout << "\nMessage: ";
- cin.getline(message, 1024);
-
- string ciphertext = RSAEncryptString(pubFilename, seed, message);
- cout << "\nCiphertext: " << ciphertext << endl;
-
- string decrypted = RSADecryptString(privFilename, ciphertext.c_str());
- cout << "\nDecrypted: " << decrypted << endl;
- }
- else if (command == "mt")
- {
- MaurerRandomnessTest mt;
- FileStore fs(argv[2]);
- fs.TransferAllTo(mt);
- cout << "Maurer Test Value: " << mt.GetTestValue() << endl;
- }
- else if (command == "mac_dll")
- {
- // sanity check on file size
- std::fstream dllFile(argv[2], ios::in | ios::out | ios::binary);
- std::ifstream::pos_type fileEnd = dllFile.seekg(0, std::ios_base::end).tellg();
- if (fileEnd > 20*1000*1000)
- {
- cerr << "Input file too large (more than 20 MB).\n";
- return 1;
- }
-
- // read file into memory
- unsigned int fileSize = (unsigned int)fileEnd;
- SecByteBlock buf(fileSize);
- dllFile.seekg(0, std::ios_base::beg);
- dllFile.read((char *)buf.begin(), fileSize);
-
- // find positions of relevant sections in the file, based on version 8 of documentation from http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
- word32 coffPos = *(word16 *)(buf+0x3c);
- word32 optionalHeaderPos = coffPos + 24;
- word16 optionalHeaderMagic = *(word16 *)(buf+optionalHeaderPos);
- if (optionalHeaderMagic != 0x10b && optionalHeaderMagic != 0x20b)
- {
- cerr << "Target file is not a PE32 or PE32+ image.\n";
- return 3;
- }
- word32 checksumPos = optionalHeaderPos + 64;
- word32 certificateTableDirectoryPos = optionalHeaderPos + (optionalHeaderMagic == 0x10b ? 128 : 144);
- word32 certificateTablePos = *(word32 *)(buf+certificateTableDirectoryPos);
- word32 certificateTableSize = *(word32 *)(buf+certificateTableDirectoryPos+4);
- if (certificateTableSize != 0)
- cerr << "Warning: certificate table (IMAGE_DIRECTORY_ENTRY_SECURITY) of target image is not empty.\n";
-
- // find where to place computed MAC
- byte mac[] = CRYPTOPP_DUMMY_DLL_MAC;
- byte *found = std::search(buf.begin(), buf.end(), mac+0, mac+sizeof(mac));
- if (found == buf.end())
- {
- cerr << "MAC placeholder not found. Possibly the actual MAC was already placed.\n";
- return 2;
- }
- word32 macPos = (unsigned int)(found-buf.begin());
-
- // compute MAC
- member_ptr<MessageAuthenticationCode> pMac(NewIntegrityCheckingMAC());
- assert(pMac->DigestSize() == sizeof(mac));
- MeterFilter f(new HashFilter(*pMac, new ArraySink(mac, sizeof(mac))));
- f.AddRangeToSkip(0, checksumPos, 4);
- f.AddRangeToSkip(0, certificateTableDirectoryPos, 8);
- f.AddRangeToSkip(0, macPos, sizeof(mac));
- f.AddRangeToSkip(0, certificateTablePos, certificateTableSize);
- f.PutMessageEnd(buf.begin(), buf.size());
-
- // place MAC
- cout << "Placing MAC in file " << argv[2] << ", location " << macPos << ".\n";
- dllFile.seekg(macPos, std::ios_base::beg);
- dllFile.write((char *)mac, sizeof(mac));
- }
- else if (command == "m")
- DigestFile(argv[2]);
- else if (command == "tv")
- {
- std::string fname = argv[2];
- if (fname.find(".txt") == std::string::npos)
- fname = "TestVectors/" + fname + ".txt";
- return !RunTestDataFile(fname.c_str());
- }
- else if (command == "t")
- {
- // VC60 workaround: use char array instead of std::string to workaround MSVC's getline bug
- char passPhrase[MAX_PHRASE_LENGTH], plaintext[1024];
-
- cout << "Passphrase: ";
- cin.getline(passPhrase, MAX_PHRASE_LENGTH);
-
- cout << "\nPlaintext: ";
- cin.getline(plaintext, 1024);
-
- string ciphertext = EncryptString(plaintext, passPhrase);
- cout << "\nCiphertext: " << ciphertext << endl;
-
- string decrypted = DecryptString(ciphertext.c_str(), passPhrase);
- cout << "\nDecrypted: " << decrypted << endl;
-
- return 0;
- }
- else if (command == "e64")
- Base64Encode(argv[2], argv[3]);
- else if (command == "d64")
- Base64Decode(argv[2], argv[3]);
- else if (command == "e16")
- HexEncode(argv[2], argv[3]);
- else if (command == "d16")
- HexDecode(argv[2], argv[3]);
- else if (command == "e" || command == "d")
- {
- char passPhrase[MAX_PHRASE_LENGTH];
- cout << "Passphrase: ";
- cin.getline(passPhrase, MAX_PHRASE_LENGTH);
- if (command == "e")
- EncryptFile(argv[2], argv[3], passPhrase);
- else
- DecryptFile(argv[2], argv[3], passPhrase);
- }
- else if (command == "ss")
- {
- char seed[1024];
- cout << "\nRandom Seed: ";
- ws(cin);
- cin.getline(seed, 1024);
- SecretShareFile(atoi(argv[2]), atoi(argv[3]), argv[4], seed);
- }
- else if (command == "sr")
- SecretRecoverFile(argc-3, argv[2], argv+3);
- else if (command == "id")
- InformationDisperseFile(atoi(argv[2]), atoi(argv[3]), argv[4]);
- else if (command == "ir")
- InformationRecoverFile(argc-3, argv[2], argv+3);
- else if (command == "v" || command == "vv")
- return !Validate(argc>2 ? atoi(argv[2]) : 0, argv[1][1] == 'v', argc>3 ? argv[3] : NULL);
- else if (command == "b")
- BenchmarkAll(argc<3 ? 1 : atof(argv[2]), argc<4 ? 0 : atof(argv[3])*1e9);
- else if (command == "b2")
- BenchmarkAll2(argc<3 ? 1 : atof(argv[2]), argc<4 ? 0 : atof(argv[3])*1e9);
- else if (command == "z")
- GzipFile(argv[3], argv[4], argv[2][0]-'0');
- else if (command == "u")
- GunzipFile(argv[2], argv[3]);
- else if (command == "fips")
- FIPS140_SampleApplication();
- else if (command == "fips-rand")
- FIPS140_GenerateRandomFiles();
- else if (command == "ft")
- ForwardTcpPort(argv[2], argv[3], argv[4]);
- else if (command == "a")
- {
- if (AdhocTest)
- return (*AdhocTest)(argc, argv);
- else
- {
- cerr << "AdhocTest not defined.\n";
- return 1;
- }
- }
- else if (command == "hmac")
- HmacFile(argv[2], argv[3]);
- else if (command == "ae")
- AES_CTR_Encrypt(argv[2], argv[3], argv[4], argv[5]);
- else if (command == "h")
- {
- FileSource usage("TestData/usage.dat", true, new FileSink(cout));
- return 1;
- }
- else if (command == "V")
- {
- cout << CRYPTOPP_VERSION / 100 << '.' << (CRYPTOPP_VERSION % 100) / 10 << '.' << CRYPTOPP_VERSION % 10 << endl;
- }
- else
- {
- cerr << "Unrecognized command. Run \"cryptest h\" to obtain usage information.\n";
- return 1;
- }
- return 0;
- }
- catch(CryptoPP::Exception &e)
- {
- cout << "\nCryptoPP::Exception caught: " << e.what() << endl;
- return -1;
- }
- catch(std::exception &e)
- {
- cout << "\nstd::exception caught: " << e.what() << endl;
- return -2;
- }
-}*/
-
-void FIPS140_GenerateRandomFiles()
-{
-#ifdef OS_RNG_AVAILABLE
- DefaultAutoSeededRNG rng;
- RandomNumberStore store(rng, ULONG_MAX);
-
- for (unsigned int i=0; i<100000; i++)
- store.TransferTo(FileSink((IntToString(i) + ".rnd").c_str()).Ref(), 20000);
-#else
- cout << "OS provided RNG not available.\n";
- exit(-1);
-#endif
-}
-
-SecByteBlock HexDecodeString(const char *hex)
-{
- StringSource ss(hex, true, new HexDecoder);
- SecByteBlock result((size_t)ss.MaxRetrievable());
- ss.Get(result, result.size());
- return result;
-}
-
-void GenerateRSAKey(unsigned int keyLength, const char *privFilename, const char *pubFilename, const char *seed)
-{
- RandomPool randPool;
- randPool.IncorporateEntropy((byte *)seed, strlen(seed));
-
- RSAES_OAEP_SHA_Decryptor priv(randPool, keyLength);
- HexEncoder privFile(new FileSink(privFilename));
- priv.DEREncode(privFile);
- privFile.MessageEnd();
-
- RSAES_OAEP_SHA_Encryptor pub(priv);
- HexEncoder pubFile(new FileSink(pubFilename));
- pub.DEREncode(pubFile);
- pubFile.MessageEnd();
-}
-
-string RSAEncryptString(const char *pubFilename, const char *seed, const char *message)
-{
- FileSource pubFile(pubFilename, true, new HexDecoder);
- RSAES_OAEP_SHA_Encryptor pub(pubFile);
-
- RandomPool randPool;
- randPool.IncorporateEntropy((byte *)seed, strlen(seed));
-
- string result;
- StringSource(message, true, new PK_EncryptorFilter(randPool, pub, new HexEncoder(new StringSink(result))));
- return result;
-}
-
-string RSADecryptString(const char *privFilename, const char *ciphertext)
-{
- FileSource privFile(privFilename, true, new HexDecoder);
- RSAES_OAEP_SHA_Decryptor priv(privFile);
-
- string result;
- StringSource(ciphertext, true, new HexDecoder(new PK_DecryptorFilter(GlobalRNG(), priv, new StringSink(result))));
- return result;
-}
-
-void RSASignFile(const char *privFilename, const char *messageFilename, const char *signatureFilename)
-{
- 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;
-}