| package org.bouncycastle.crypto.test; |
| |
| import org.bouncycastle.crypto.digests.SHA384Digest; |
| 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; |
| |
| /** |
| * SHA384 HMac Test |
| */ |
| public class SHA384HMacTest |
| implements Test |
| { |
| final static String[] keys = { |
| "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b", |
| "4a656665", |
| "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| "0102030405060708090a0b0c0d0e0f10111213141516171819", |
| "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c", |
| "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", |
| "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |
| }; |
| |
| final static String[] digests = { |
| "afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6", |
| "af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649", |
| "88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27", |
| "3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffb", |
| "3abf34c3503b2a23a46efc619baef897f4c8e42c934ce55ccbae9740fcbc1af4ca62269e2a37cd88ba926341efe4aeea", |
| "4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952", |
| "6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5a678cc31e799176d3860e6110c46523e" |
| }; |
| |
| 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 "SHA384HMac"; |
| } |
| |
| public TestResult perform() |
| { |
| HMac hmac = new HMac(new SHA384Digest()); |
| 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) |
| { |
| SHA384HMacTest test = new SHA384HMacTest(); |
| TestResult result = test.perform(); |
| |
| System.out.println(result); |
| } |
| } |