void SymmetricEncryptionKnownAnswerTest( const char *key, const char *hexIV, const char *plaintext, const char *ecb, const char *cbc, const char *cfb, const char *ofb, const char *ctr, CIPHER *dummy = NULL) { std::string decodedKey; StringSource(key, true, new HexDecoder(new StringSink(decodedKey))); typename CIPHER::Encryption encryption((const byte *)decodedKey.data(), decodedKey.size()); typename CIPHER::Decryption decryption((const byte *)decodedKey.data(), decodedKey.size()); SecByteBlock iv(encryption.BlockSize()); StringSource(hexIV, true, new HexDecoder(new ArraySink(iv, iv.size()))); if (ecb) KnownAnswerTest(ECB_Mode_ExternalCipher::Encryption(encryption).Ref(), ECB_Mode_ExternalCipher::Decryption(decryption).Ref(), plaintext, ecb); if (cbc) KnownAnswerTest(CBC_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), CBC_Mode_ExternalCipher::Decryption(decryption, iv).Ref(), plaintext, cbc); if (cfb) KnownAnswerTest(CFB_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), CFB_Mode_ExternalCipher::Decryption(encryption, iv).Ref(), plaintext, cfb); if (ofb) KnownAnswerTest(OFB_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), OFB_Mode_ExternalCipher::Decryption(encryption, iv).Ref(), plaintext, ofb); if (ctr) KnownAnswerTest(CTR_Mode_ExternalCipher::Encryption(encryption, iv).Ref(), CTR_Mode_ExternalCipher::Decryption(encryption, iv).Ref(), plaintext, ctr); }
void MAC_KnownAnswerTest(const char *key, const char *message, const char *digest, MAC *dummy = NULL) { std::string decodedKey; StringSource(key, true, new HexDecoder(new StringSink(decodedKey))); MAC mac((const byte *)decodedKey.data(), decodedKey.size()); KnownAnswerTest(mac, message, digest); }
void X917RNG_KnownAnswerTest( const char *key, const char *seed, const char *output, unsigned int deterministicTimeVector, CIPHER *dummy = NULL) { std::string decodedKey, decodedSeed; StringSource(key, true, new HexDecoder(new StringSink(decodedKey))); StringSource(seed, true, new HexDecoder(new StringSink(decodedSeed))); AutoSeededX917RNG<CIPHER> rng; rng.Reseed((const byte *)decodedKey.data(), decodedKey.size(), (const byte *)decodedSeed.data(), deterministicTimeVector); KnownAnswerTest(rng, output); }
void X917RNG_KnownAnswerTest( const char *key, const char *seed, const char *deterministicTimeVector, const char *output, CIPHER *dummy = NULL) { #ifdef OS_RNG_AVAILABLE std::string decodedKey, decodedSeed, decodedDeterministicTimeVector; StringSource(key, true, new HexDecoder(new StringSink(decodedKey))); StringSource(seed, true, new HexDecoder(new StringSink(decodedSeed))); StringSource(deterministicTimeVector, true, new HexDecoder(new StringSink(decodedDeterministicTimeVector))); AutoSeededX917RNG<CIPHER> rng(false, false); rng.Reseed((const byte *)decodedKey.data(), decodedKey.size(), (const byte *)decodedSeed.data(), (const byte *)decodedDeterministicTimeVector.data()); KnownAnswerTest(rng, output); #else throw 0; #endif }
void SecureHashKnownAnswerTest(const char *message, const char *digest, HASH *dummy = NULL) { HASH hash; KnownAnswerTest(hash, message, digest); }