void EncryptionPairwiseConsistencyTest(const PK_Encryptor &encryptor, const PK_Decryptor &decryptor) { try { #ifdef OS_RNG_AVAILABLE AutoSeededX917RNG<DES_EDE3> rng; #else RandomNumberGenerator &rng = NullRNG(); #endif const char *testMessage ="test message"; EqualityComparisonFilter comparison; comparison.ChannelPutMessageEnd("0", (const byte *)testMessage, strlen(testMessage)); StringSource( testMessage, true, new PK_EncryptorFilter( rng, encryptor, new PK_DecryptorFilter(rng, decryptor, new ChannelSwitch(comparison, "1")))); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1"); } catch (...) { throw SelfTestFailure(encryptor.AlgorithmName() + ": pairwise consistency test failed"); } }
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 KnownAnswerTest(HashTransformation &hash, const char *message, const char *digest) { EqualityComparisonFilter comparison; StringSource(digest, true, new HexDecoder(new ChannelSwitch(comparison, "1"))); StringSource(message, true, new HashFilter(hash, new ChannelSwitch(comparison, "0"))); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1"); }
void KnownAnswerTest(RandomNumberGenerator &rng, const char *output) { EqualityComparisonFilter comparison; RandomNumberStore(rng, strlen(output)/2).TransferAllTo(comparison, "0"); StringSource(output, true, new HexDecoder(new ChannelSwitch(comparison, "1"))); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1"); }
void KnownAnswerTest(StreamTransformation &encryption, StreamTransformation &decryption, const char *plaintext, const char *ciphertext) { EqualityComparisonFilter comparison; StringSource(plaintext, true, new HexDecoder(new StreamTransformationFilter(encryption, new ChannelSwitch(comparison, "0"), StreamTransformationFilter::NO_PADDING))); StringSource(ciphertext, true, new HexDecoder(new ChannelSwitch(comparison, "1"))); StringSource(ciphertext, true, new HexDecoder(new StreamTransformationFilter(decryption, new ChannelSwitch(comparison, "0"), StreamTransformationFilter::NO_PADDING))); StringSource(plaintext, true, new HexDecoder(new ChannelSwitch(comparison, "1"))); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1"); }
void SignatureKnownAnswerTest(const char *key, const char *message, const char *signature, SCHEME *dummy = NULL) { typename SCHEME::Signer signer(StringSource(key, true, new HexDecoder).Ref()); typename SCHEME::Verifier verifier(signer); EqualityComparisonFilter comparison; StringSource(message, true, new SignerFilter(NullRNG(), signer, new ChannelSwitch(comparison, "0"))); StringSource(signature, true, new HexDecoder(new ChannelSwitch(comparison, "1"))); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1"); VerifierFilter verifierFilter(verifier, NULL, VerifierFilter::SIGNATURE_AT_BEGIN | VerifierFilter::THROW_EXCEPTION); StringSource(signature, true, new HexDecoder(new Redirector(verifierFilter, false))); StringSource(message, true, new Redirector(verifierFilter)); }
void SignatureKnownAnswerTest(const char *key, const char *message, const char *signature, SCHEME *dummy = NULL) { #ifdef OS_RNG_AVAILABLE DefaultAutoSeededRNG rng; #else RandomNumberGenerator &rng = NullRNG(); #endif typename SCHEME::Signer signer(StringSource(key, true, new HexDecoder).Ref()); typename SCHEME::Verifier verifier(signer); EqualityComparisonFilter comparison; StringSource(message, true, new SignerFilter(rng, signer, new ChannelSwitch(comparison, "0"))); StringSource(signature, true, new HexDecoder(new ChannelSwitch(comparison, "1"))); comparison.ChannelMessageSeriesEnd("0"); comparison.ChannelMessageSeriesEnd("1"); VerifierFilter verifierFilter(verifier, NULL, VerifierFilter::SIGNATURE_AT_BEGIN | VerifierFilter::THROW_EXCEPTION); StringSource(signature, true, new HexDecoder(new Redirector(verifierFilter, Redirector::DATA_ONLY))); StringSource(message, true, new Redirector(verifierFilter)); }