bool ValidateSquare() { cout << "\nSquare validation suite running...\n\n"; FileSource valdata("squareva.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<SquareEncryption, SquareDecryption>(), valdata); }
bool ValidateSHARK() { std::cout << "\nSHARK validation suite running...\n\n"; FileSource valdata("TestData/sharkval.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<SHARKEncryption, SHARKDecryption>(), valdata); }
bool ValidateIDEA() { cout << "\nIDEA validation suite running...\n\n"; FileSource valdata("ideaval.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<IDEAEncryption, IDEADecryption>(), valdata); }
bool ValidateRC5() { cout << "\nRC5 validation suite running...\n\n"; FileSource valdata("rc5val.dat", true, new HexDecoder); return BlockTransformationTest(VariableRoundsCipherFactory<RC5Encryption, RC5Decryption>(16, 12), valdata); }
bool ValidateGOST() { cout << "\nGOST validation suite running...\n\n"; FileSource valdata("gostval.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<GOSTEncryption, GOSTDecryption>(), valdata); }
SV *cond2perlcond(db_key_t key, db_op_t op, db_val_t* val) { SV* retval; SV *class; SV *p_key; SV *p_op; SV *p_type; SV *p_data; ENTER; SAVETMPS; class = newSVpv(PERL_CLASS_REQCOND, 0); p_key = newSVpv(key->s, key->len); p_op = newSVpv(op, strlen(op)); p_type = newSViv(val->type); p_data = valdata(val); retval = perlvdb_perlmethod(sv_2mortal(class), PERL_CONSTRUCTOR_NAME, sv_2mortal(p_key), sv_2mortal(p_op), sv_2mortal(p_type), sv_2mortal(p_data)); FREETMPS; LEAVE; return retval; }
bool ValidateSKIPJACK() { cout << "\nSKIPJACK validation suite running...\n\n"; FileSource valdata("skipjack.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<SKIPJACKEncryption, SKIPJACKDecryption>(), valdata); }
bool ValidateThreeWay() { cout << "\n3-WAY validation suite running...\n\n"; FileSource valdata("3wayval.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<ThreeWayEncryption, ThreeWayDecryption>(), valdata); }
bool ValidateSHACAL2() { cout << "\nSHACAL-2 validation suite running...\n\n"; bool pass = true; FileSource valdata("shacal2v.dat", true, new HexDecoder); pass = BlockTransformationTest(FixedRoundsCipherFactory<SHACAL2Encryption, SHACAL2Decryption>(16), valdata, 4) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<SHACAL2Encryption, SHACAL2Decryption>(64), valdata, 10) && pass; return pass; }
bool ValidateSerpent() { cout << "\nSerpent validation suite running...\n\n"; FileSource valdata("serpentv.dat", true, new HexDecoder); bool pass = true; pass = BlockTransformationTest(FixedRoundsCipherFactory<SerpentEncryption, SerpentDecryption>(16), valdata, 4) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<SerpentEncryption, SerpentDecryption>(24), valdata, 3) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<SerpentEncryption, SerpentDecryption>(32), valdata, 2) && pass; return pass; }
bool ValidateTwofish() { cout << "\nTwofish validation suite running...\n\n"; FileSource valdata("twofishv.dat", true, new HexDecoder); bool pass = true; pass = BlockTransformationTest(FixedRoundsCipherFactory<TwofishEncryption, TwofishDecryption>(16), valdata, 4) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<TwofishEncryption, TwofishDecryption>(24), valdata, 3) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<TwofishEncryption, TwofishDecryption>(32), valdata, 2) && pass; return pass; }
bool ValidateRijndael() { cout << "\nRijndael validation suite running...\n\n"; FileSource valdata("rijndael.dat", true, new HexDecoder); bool pass = true; pass = BlockTransformationTest(FixedRoundsCipherFactory<RijndaelEncryption, RijndaelDecryption>(16), valdata, 4) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<RijndaelEncryption, RijndaelDecryption>(24), valdata, 3) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<RijndaelEncryption, RijndaelDecryption>(32), valdata, 2) && pass; return pass; }
bool ValidateMARS() { cout << "\nMARS validation suite running...\n\n"; FileSource valdata("marsval.dat", true, new HexDecoder); bool pass = true; pass = BlockTransformationTest(FixedRoundsCipherFactory<MARSEncryption, MARSDecryption>(16), valdata, 4) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<MARSEncryption, MARSDecryption>(24), valdata, 3) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<MARSEncryption, MARSDecryption>(32), valdata, 2) && pass; return pass; }
bool ValidateCamellia() { cout << "\nCamellia validation suite running...\n\n"; bool pass = true; FileSource valdata("camellia.dat", true, new HexDecoder); pass = BlockTransformationTest(FixedRoundsCipherFactory<CamelliaEncryption, CamelliaDecryption>(16), valdata, 15) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<CamelliaEncryption, CamelliaDecryption>(24), valdata, 15) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<CamelliaEncryption, CamelliaDecryption>(32), valdata, 15) && pass; return pass; }
bool ValidateRC6() { std::cout << "\nRC6 validation suite running...\n\n"; FileSource valdata("TestData/rc6val.dat", true, new HexDecoder); bool pass = true; pass = BlockTransformationTest(FixedRoundsCipherFactory<RC6Encryption, RC6Decryption>(16), valdata, 2) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<RC6Encryption, RC6Decryption>(24), valdata, 2) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<RC6Encryption, RC6Decryption>(32), valdata, 2) && pass; return pass; }
bool ValidateSHARK() { cout << "\nSHARK validation suite running...\n\n"; #ifdef WORD64_AVAILABLE FileSource valdata("sharkval.dat", true, new HexDecoder); return BlockTransformationTest(FixedRoundsCipherFactory<SHARKEncryption, SHARKDecryption>(), valdata); #else cout << "word64 not available, skipping SHARK validation." << endl; return true; #endif }
bool ValidateSAFER() { cout << "\nSAFER validation suite running...\n\n"; FileSource valdata("saferval.dat", true, new HexDecoder); bool pass = true; pass = BlockTransformationTest(VariableRoundsCipherFactory<SAFER_K_Encryption, SAFER_K_Decryption>(8,6), valdata, 4) && pass; pass = BlockTransformationTest(VariableRoundsCipherFactory<SAFER_K_Encryption, SAFER_K_Decryption>(16,12), valdata, 4) && pass; pass = BlockTransformationTest(VariableRoundsCipherFactory<SAFER_SK_Encryption, SAFER_SK_Decryption>(8,6), valdata, 4) && pass; pass = BlockTransformationTest(VariableRoundsCipherFactory<SAFER_SK_Encryption, SAFER_SK_Decryption>(16,10), valdata, 4) && pass; return pass; }
bool ValidateDES() { cout << "\nDES validation suite running...\n\n"; FileSource valdata("descert.dat", true, new HexDecoder); bool pass = BlockTransformationTest(FixedRoundsCipherFactory<DESEncryption, DESDecryption>(), valdata); cout << "\nTesting EDE2, EDE3, and XEX3 variants...\n\n"; FileSource valdata1("3desval.dat", true, new HexDecoder); pass = BlockTransformationTest(FixedRoundsCipherFactory<DES_EDE2_Encryption, DES_EDE2_Decryption>(), valdata1, 1) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<DES_EDE3_Encryption, DES_EDE3_Decryption>(), valdata1, 1) && pass; pass = BlockTransformationTest(FixedRoundsCipherFactory<DES_XEX3_Encryption, DES_XEX3_Decryption>(), valdata1, 1) && pass; return pass; }
SV *val2perlval(db_val_t* val) { SV* retval; SV *class; SV *p_data; SV *p_type; class = newSVpv(PERL_CLASS_VALUE, 0); p_data = valdata(val); p_type = newSViv(val->type); retval = perlvdb_perlmethod(class, PERL_CONSTRUCTOR_NAME, p_type, p_data, NULL, NULL); return retval; }
SV *cond2perlcond(db_key_t key, db_op_t op, db_val_t* val) { SV* retval; SV *class; SV *p_key; SV *p_op; SV *p_type; SV *p_data; class = newSVpv(PERL_CLASS_REQCOND, 0); p_key = newSVpv(key->s, key->len); p_op = newSVpv(op, strlen(op)); p_type = newSViv(val->type); p_data = valdata(val); retval = perlvdb_perlmethod(class, PERL_CONSTRUCTOR_NAME, p_key, p_op, p_type, p_data); return retval; }
bool ValidateRC2() { cout << "\nRC2 validation suite running...\n\n"; FileSource valdata("rc2val.dat", true, new HexDecoder); HexEncoder output(new FileSink(cout)); SecByteBlock plain(RC2Encryption::BLOCKSIZE), cipher(RC2Encryption::BLOCKSIZE), out(RC2Encryption::BLOCKSIZE), outplain(RC2Encryption::BLOCKSIZE); SecByteBlock key(128); bool pass=true, fail; while (valdata.MaxRetrievable()) { byte keyLen, effectiveLen; valdata.Get(keyLen); valdata.Get(effectiveLen); valdata.Get(key, keyLen); valdata.Get(plain, RC2Encryption::BLOCKSIZE); valdata.Get(cipher, RC2Encryption::BLOCKSIZE); apbt transE(new RC2Encryption(key, keyLen, effectiveLen)); transE->ProcessBlock(plain, out); fail = memcmp(out, cipher, RC2Encryption::BLOCKSIZE) != 0; apbt transD(new RC2Decryption(key, keyLen, effectiveLen)); transD->ProcessBlock(out, outplain); fail=fail || memcmp(outplain, plain, RC2Encryption::BLOCKSIZE); pass = pass && !fail; cout << (fail ? "FAILED " : "passed "); output.Put(key, keyLen); cout << " "; output.Put(outplain, RC2Encryption::BLOCKSIZE); cout << " "; output.Put(out, RC2Encryption::BLOCKSIZE); cout << endl; } return pass; }
bool ValidateRC2() { std::cout << "\nRC2 validation suite running...\n\n"; FileSource valdata("TestData/rc2val.dat", true, new HexDecoder); HexEncoder output(new FileSink(std::cout)); SecByteBlock plain(RC2Encryption::BLOCKSIZE), cipher(RC2Encryption::BLOCKSIZE), out(RC2Encryption::BLOCKSIZE), outplain(RC2Encryption::BLOCKSIZE); SecByteBlock key(128); bool pass=true, fail; while (valdata.MaxRetrievable()) { byte keyLen, effectiveLen; valdata.Get(keyLen); valdata.Get(effectiveLen); valdata.Get(key, keyLen); valdata.Get(plain, RC2Encryption::BLOCKSIZE); valdata.Get(cipher, RC2Encryption::BLOCKSIZE); auto_ptr<BlockTransformation> transE(new RC2Encryption(key, keyLen, effectiveLen)); transE->ProcessBlock(plain, out); fail = !VerifyBufsEqual(out, cipher, RC2Encryption::BLOCKSIZE); auto_ptr<BlockTransformation> transD(new RC2Decryption(key, keyLen, effectiveLen)); transD->ProcessBlock(out, outplain); fail=fail || !VerifyBufsEqual(outplain, plain, RC2Encryption::BLOCKSIZE); pass = pass && !fail; std::cout << (fail ? "FAILED " : "passed "); output.Put(key, keyLen); std::cout << " "; output.Put(outplain, RC2Encryption::BLOCKSIZE); std::cout << " "; output.Put(out, RC2Encryption::BLOCKSIZE); std::cout << std::endl; } return pass; }
SV *pair2perlpair(db_key_t key, db_val_t* val) { SV* retval; SV *class; SV *p_key; SV *p_type; SV *p_data; class = newSVpv(PERL_CLASS_PAIR, 0); p_key = newSVpv(key->s, key->len); p_type = newSViv(val->type); p_data = valdata(val); retval = perlvdb_perlmethod(class, PERL_CONSTRUCTOR_NAME, p_key, p_type, p_data, NULL); SvREFCNT_dec(class); return retval; }