Some Blowfish test vectors from Schneier's site.
__gshared immutable immutable(char)[][] test_keys = [ "0000000000000000", "ffffffffffffffff", "57686f206973204a6f686e2047616c743f", // I don't know, do you? "1111111111111111", "0123456789abcdef", "1111111111111111", "fedcba9876543210" ]; __gshared immutable immutable(char)[][] test_plaintexts = [ "0000000000000000", "ffffffffffffffff", "fedcba9876543210", "1111111111111111", "1111111111111111", "0123456789abcdef", "0123456789abcdef" ]; __gshared immutable immutable(char)[][] test_ciphertexts = [ "4ef997456198dd78", "51866fd5b85ecb8a", "cc91732b8022f684", "2466dd878b963c9d", "61f9c3802281b096", "7d0cc630afda1ec7", "0aceab0fc6a0a28d" ]; Blowfish t = new Blowfish(); foreach (uint i, immutable(char)[] test_key; test_keys) { ubyte[] buffer = new ubyte[t.blockSize]; char[] result; auto key = ByteConverter.hexDecode(test_key); // Encryption t.init(true, key); t.update(ByteConverter.hexDecode(test_plaintexts[i]), buffer); result = ByteConverter.hexEncode(buffer); assert(result == test_ciphertexts[i], t.name~": ("~result~") != ("~test_ciphertexts[i]~")"); // Decryption t.init(false, key); t.update(ByteConverter.hexDecode(test_ciphertexts[i]), buffer); result = ByteConverter.hexEncode(buffer); assert(result == test_plaintexts[i], t.name~": ("~result~") != ("~test_plaintexts[i]~")"); }
Implementation of the Blowfish cipher designed by Bruce Schneier.