Test Keccak
1 string msg1600 = x"8C3798E51BC68482D7337D3ABB75DC9FFE860714A9AD73551E120059860DDE24AB87327222B64CF774415A70F724CDF270DE3FE47DDA07B61C9EF2A3551F45A5584860248FABDE676E1CD75F6355AA3EAEABE3B51DC813D9FB2EAA4F0F1D9F834D7CAD9C7C695AE84B329385BC0BEF895B9F1EDF44A03D4B410CC23A79A6B62E4F346A5E8DD851C2857995DDBF5B2D717AEB847310E1F6A46AC3D26A7F9B44985AF656D2B7C9406E8A9E8F47DCB4EF6B83CAACF9AEFB6118BFCFF7E44BEF6937EBDDC89186839B77"; 2 3 immutable string[] plaintexts = [x"",x"",x"",x"", 4 // https://cloud.github.com/downloads/johanns/sha3/KeccakTestVectors.zip 5 x"CC", 6 msg1600, 7 x"CC", 8 msg1600, 9 x"CC", 10 msg1600, 11 x"CC", 12 msg1600 13 ]; 14 15 immutable string[] hexHashes = [ 16 x"f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd", 17 x"c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", 18 x"2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff", 19 x"0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e", 20 // https://cloud.github.com/downloads/johanns/sha3/KeccakTestVectors.zip 21 x"A9CAB59EB40A10B246290F2D6086E32E3689FAF1D26B470C899F2802", 22 x"1029CA117957D80F3C859E8394DD34969331CA3BCEDC436B1EAB0849", 23 x"EEAD6DBFC7340A56CAEDC044696A168870549A6A7F6F56961E84A54BD9970B8A", 24 x"E83EA21F5BC0976953AF86069A10EB6024A1AC59D609688E4A9759BB8B6C9441", 25 x"1B84E62A46E5A201861754AF5DC95C4A1A69CAF4A796AE405680161E29572641F5FA1E8641D7958336EE7B11C58F73E9", 26 x"B5A7160112E0825A7C03643BEB98B1FC2549B81F01C3C4271DFF99BE57D472A7FAD133808D7D2D414D6011E9A2E8DFEC", 27 x"8630C13CBD066EA74BBE7FE468FEC1DEE10EDC1254FB4C1B7C5FD69B646E44160B8CE01D05A0908CA790DFB080F4B513BC3B6225ECE7A810371441A5AC666EB9", 28 x"2A11CB6921EA662A39DDEE7982E3CF5B317195661D5505AD04D11EE23E178ED65F3E06A7F096F4EAF1FF6A09239CF5A0A39DC9F4C92AF63FDF7211E1CF467653", 29 30 ]; 31 32 33 for(size_t i = 0; i < plaintexts.length; ++i) { 34 const (ubyte)[] plain = cast(const ubyte[]) plaintexts[i]; 35 const ubyte[] expectedHash = cast(const ubyte[]) hexHashes[i]; 36 ubyte[] actualHash; 37 38 switch(expectedHash.length*8) { 39 case 224: 40 Keccak224 k; 41 k.put(plain); 42 actualHash = k.finish!224(); 43 break; 44 case 256: 45 Keccak256 k; 46 k.put(plain); 47 actualHash = k.finish!256(); 48 break; 49 case 384: 50 Keccak384 k; 51 k.put(plain); 52 actualHash = k.finish!384(); 53 break; 54 case 512: 55 Keccak512 k; 56 k.put(plain); 57 actualHash = k.finish!512(); 58 break; 59 default: assert(0); 60 } 61 62 assert(expectedHash == actualHash, "Keccak Produced wrong hash."); 63 }