summaryrefslogtreecommitdiffstats
path: root/cryptopp562/test.cpp
diff options
context:
space:
mode:
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;
-}