| package org.bouncycastle.crypto.test; |
| |
| import org.bouncycastle.crypto.digests.SHA3Digest; |
| import org.bouncycastle.crypto.macs.HMac; |
| import org.bouncycastle.crypto.params.KeyParameter; |
| import org.bouncycastle.util.Arrays; |
| import org.bouncycastle.util.encoders.Hex; |
| import org.bouncycastle.util.test.SimpleTest; |
| import org.bouncycastle.util.test.TestResult; |
| |
| /** |
| * SHA224 HMac Test |
| */ |
| public class SHA3HMacTest |
| extends SimpleTest |
| { |
| final static String[][] sha3_224 = |
| { |
| { |
| "000102030405060708090a0b0c0d0e0f101112131415161718191a1b", |
| "53616d706c65206d65737361676520666f72206b65796c656e3c626c6f636b6c656e", |
| "332cfd59347fdb8e576e77260be4aba2d6dc53117b3bfb52c6d18c04" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667 68696a6b 6c6d6e6f" + |
| "70717273 74757677 78797a7b 7c7d7e7f" + |
| "80818283 84858687 88898a8b 8c8d8e8f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3d626c 6f636b6c" + |
| "656e", |
| "d8b733bc f66c644a 12323d56 4e24dcf3" + |
| "fc75f231 f3b67968 359100c7" |
| |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667 68696a6b 6c6d6e6f" + |
| "70717273 74757677 78797a7b 7c7d7e7f" + |
| "80818283 84858687 88898a8b 8c8d8e8f" + |
| "90919293 94959697 98999a9b 9c9d9e9f" + |
| "a0a1a2a3 a4a5a6a7 a8a9aaab", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3e626c 6f636b6c" + |
| "656e", |
| "078695ee cc227c63 6ad31d06 3a15dd05" + |
| "a7e819a6 6ec6d8de 1e193e59" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e2c20 77697468 20747275 6e636174" + |
| "65642074 6167", |
| "8569c54c bb00a9b7 8ff1b391 b0e5" |
| }, |
| { |
| "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| "4869205468657265", |
| "3b16546bbc7be2706a031dcafd56373d9884367641d8c59af3c860f7" |
| } |
| }; |
| |
| final static String[][] sha3_256 = |
| { |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e", |
| "4fe8e202 c4f058e8 dddc23d8 c34e4673" + |
| "43e23555 e24fc2f0 25d598f5 58f67205" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667 68696a6b 6c6d6e6f" + |
| "70717273 74757677 78797a7b 7c7d7e7f" + |
| "80818283 84858687", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3d626c 6f636b6c" + |
| "656e", |
| "68b94e2e 538a9be4 103bebb5 aa016d47" + |
| "961d4d1a a9060613 13b557f8 af2c3faa" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667 68696a6b 6c6d6e6f" + |
| "70717273 74757677 78797a7b 7c7d7e7f" + |
| "80818283 84858687 88898a8b 8c8d8e8f" + |
| "90919293 94959697 98999a9b 9c9d9e9f" + |
| "a0a1a2a3 a4a5a6a7", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3e626c 6f636b6c" + |
| "656e", |
| "9bcf2c23 8e235c3c e88404e8 13bd2f3a" + |
| "97185ac6 f238c63d 6229a00b 07974258" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e2c20 77697468 20747275 6e636174" + |
| "65642074 6167", |
| "c8dc7148 d8c1423a a549105d afdf9cad" |
| }, |
| { |
| "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| "4869205468657265", |
| "ba85192310dffa96e2a3a40e69774351140bb7185e1202cdcc917589f95e16bb" |
| } |
| }; |
| |
| final static String[][] sha3_384 = { |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e", |
| "d588a3c5 1f3f2d90 6e8298c1 199aa8ff" + |
| "62962181 27f6b38a 90b6afe2 c5617725" + |
| "bc99987f 79b22a55 7b6520db 710b7f42" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3d626c 6f636b6c" + |
| "656e", |
| "a27d24b5 92e8c8cb f6d4ce6f c5bf62d8" + |
| "fc98bf2d 486640d9 eb8099e2 4047837f" + |
| "5f3bffbe 92dcce90 b4ed5b1e 7e44fa90" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667 68696a6b 6c6d6e6f" + |
| "70717273 74757677 78797a7b 7c7d7e7f" + |
| "80818283 84858687 88898a8b 8c8d8e8f" + |
| "90919293 94959697", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3e626c 6f636b6c" + |
| "656e", |
| "e5ae4c73 9f455279 368ebf36 d4f5354c" + |
| "95aa184c 899d3870 e460ebc2 88ef1f94" + |
| "70053f73 f7c6da2a 71bcaec3 8ce7d6ac" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e2c20 77697468 20747275 6e636174" + |
| "65642074 6167", |
| "25f4bf53 606e91af 79d24a4b b1fd6aec" + |
| "d44414a3 0c8ebb0a" |
| }, |
| { |
| "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| "4869205468657265", |
| "68d2dcf7fd4ddd0a2240c8a437305f61fb7334cfb5d0226e1bc27dc10a2e723a20d370b47743130e26ac7e3d532886bd" |
| } |
| }; |
| |
| final static String[][] sha3_512 = { |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e", |
| "4efd629d 6c71bf86 162658f2 9943b1c3" + |
| "08ce27cd fa6db0d9 c3ce8176 3f9cbce5" + |
| "f7ebe986 8031db1a 8f8eb7b6 b95e5c5e" + |
| "3f657a89 96c86a2f 6527e307 f0213196" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3d626c 6f636b6c" + |
| "656e", |
| "544e257e a2a3e5ea 19a590e6 a24b724c" + |
| "e6327757 723fe275 1b75bf00 7d80f6b3" + |
| "60744bf1 b7a88ea5 85f9765b 47911976" + |
| "d3191cf8 3c039f5f fab0d29c c9d9b6da" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f" + |
| "40414243 44454647 48494a4b 4c4d4e4f" + |
| "50515253 54555657 58595a5b 5c5d5e5f" + |
| "60616263 64656667 68696a6b 6c6d6e6f" + |
| "70717273 74757677 78797a7b 7c7d7e7f" + |
| "80818283 84858687", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3e626c 6f636b6c" + |
| "656e", |
| "5f464f5e 5b7848e3 885e49b2 c385f069" + |
| "4985d0e3 8966242d c4a5fe3f ea4b37d4" + |
| "6b65cece d5dcf594 38dd840b ab22269f" + |
| "0ba7febd b9fcf746 02a35666 b2a32915" |
| }, |
| { |
| "00010203 04050607 08090a0b 0c0d0e0f" + |
| "10111213 14151617 18191a1b 1c1d1e1f" + |
| "20212223 24252627 28292a2b 2c2d2e2f" + |
| "30313233 34353637 38393a3b 3c3d3e3f", |
| "53616d70 6c65206d 65737361 67652066" + |
| "6f72206b 65796c65 6e3c626c 6f636b6c" + |
| "656e2c20 77697468 20747275 6e636174" + |
| "65642074 6167", |
| "7bb06d85 9257b25c e73ca700 df34c5cb" + |
| "ef5c898b ac91029e 0b27975d 4e526a08" |
| }, |
| { |
| "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| "4869205468657265", |
| "eb3fbd4b2eaab8f5c504bd3a41465aacec15770a7cabac531e482f860b5ec7ba47ccb2c6f2afce8f88d22b6dc61380f23a668fd3888bb80537c0a0b86407689e" |
| } |
| }; |
| |
| public String getName() |
| { |
| return "SHA3HMac"; |
| } |
| |
| public void performTest() |
| throws Exception |
| { |
| doTest(new HMac(new SHA3Digest(224)), sha3_224); |
| doTest(new HMac(new SHA3Digest(256)), sha3_256); |
| doTest(new HMac(new SHA3Digest(384)), sha3_384); |
| doTest(new HMac(new SHA3Digest(512)), sha3_512); |
| } |
| |
| public void doTest(HMac hmac, String[][] data) |
| { |
| byte[] resBuf = new byte[hmac.getMacSize()]; |
| |
| for (int i = 0; i < data.length; i++) |
| { |
| byte[] m = Hex.decode(data[i][1]); |
| |
| hmac.init(new KeyParameter(Hex.decode(data[i][0]))); |
| hmac.update(m, 0, m.length); |
| hmac.doFinal(resBuf, 0); |
| |
| isTrue(hmac.getAlgorithmName() + " vector " + i + " failed got " + new String(Hex.encode(resBuf)), startsWith(resBuf, Hex.decode(data[i][2]))); |
| } |
| |
| // |
| // test reset |
| // |
| int vector = 0; // vector used for test |
| byte[] m = Hex.decode(data[vector][1]); |
| |
| hmac.init(new KeyParameter(Hex.decode(data[vector][0]))); |
| hmac.update(m, 0, m.length); |
| hmac.doFinal(resBuf, 0); |
| hmac.reset(); |
| hmac.update(m, 0, m.length); |
| hmac.doFinal(resBuf, 0); |
| |
| isTrue(hmac.getAlgorithmName() + " reset with vector " + vector + " failed", Arrays.areEqual(resBuf, Hex.decode(data[vector][2]))); |
| } |
| |
| private static boolean startsWith(byte[] a, byte[] b) |
| { |
| if (a.length == b.length) |
| { |
| return Arrays.areEqual(a, b); |
| } |
| |
| for (int i = 0; i != b.length; i++) |
| { |
| if (a[i] != b[i]) |
| { |
| return false; |
| } |
| } |
| |
| return true; |
| } |
| |
| public static void main( |
| String[] args) |
| { |
| SHA3HMacTest test = new SHA3HMacTest(); |
| TestResult result = test.perform(); |
| |
| System.out.println(result); |
| } |
| } |