| package org.bouncycastle.crypto.test; |
| |
| import org.bouncycastle.crypto.digests.SHA512Digest; |
| 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.SimpleTestResult; |
| import org.bouncycastle.util.test.Test; |
| import org.bouncycastle.util.test.TestResult; |
| |
| /** |
| * SHA512 HMac Test |
| */ |
| public class SHA512HMacTest |
| implements Test |
| { |
| final static String[] keys = { |
| "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| "4a656665", |
| "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| "0102030405060708090a0b0c0d0e0f10111213141516171819", |
| "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c", |
| "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| }; |
| |
| final static String[] digests = { |
| "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854", |
| "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737", |
| "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb", |
| "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd", |
| "415fad6271580a531d4179bc891d87a650188707922a4fbb36663a1eb16da008711c5b50ddd0fc235084eb9d3364a1454fb2ef67cd1d29fe6773068ea266e96b", |
| "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598", |
| "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58" |
| }; |
| |
| final static String[] messages = { |
| "Hi There", |
| "what do ya want for nothing?", |
| "0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd", |
| "0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd", |
| "Test With Truncation", |
| "Test Using Larger Than Block-Size Key - Hash Key First", |
| "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm." |
| }; |
| |
| public String getName() |
| { |
| return "SHA512HMac"; |
| } |
| |
| public TestResult perform() |
| { |
| HMac hmac = new HMac(new SHA512Digest()); |
| byte[] resBuf = new byte[hmac.getMacSize()]; |
| |
| for (int i = 0; i < messages.length; i++) |
| { |
| byte[] m = messages[i].getBytes(); |
| if (messages[i].startsWith("0x")) |
| { |
| m = Hex.decode(messages[i].substring(2)); |
| } |
| hmac.init(new KeyParameter(Hex.decode(keys[i]))); |
| hmac.update(m, 0, m.length); |
| hmac.doFinal(resBuf, 0); |
| |
| if (!Arrays.areEqual(resBuf, Hex.decode(digests[i]))) |
| { |
| return new SimpleTestResult(false, getName() + ": Vector " + i + " failed got -" + new String(Hex.encode(resBuf))); |
| } |
| } |
| |
| // |
| // test reset |
| // |
| int vector = 0; // vector used for test |
| byte[] m = messages[vector].getBytes(); |
| if (messages[vector].startsWith("0x")) |
| { |
| m = Hex.decode(messages[vector].substring(2)); |
| } |
| hmac.init(new KeyParameter(Hex.decode(keys[vector]))); |
| hmac.update(m, 0, m.length); |
| hmac.doFinal(resBuf, 0); |
| hmac.reset(); |
| hmac.update(m, 0, m.length); |
| hmac.doFinal(resBuf, 0); |
| |
| if (!Arrays.areEqual(resBuf, Hex.decode(digests[vector]))) |
| { |
| return new SimpleTestResult(false, getName() + |
| "Reset with vector " + vector + " failed"); |
| } |
| |
| return new SimpleTestResult(true, getName() + ": Okay"); |
| } |
| |
| public static void main( |
| String[] args) |
| { |
| SHA512HMacTest test = new SHA512HMacTest(); |
| TestResult result = test.perform(); |
| |
| System.out.println(result); |
| } |
| } |