1
package org.bouncycastle.crypto.test;
3
import org.bouncycastle.crypto.digests.SHA1Digest;
4
import org.bouncycastle.crypto.macs.HMac;
5
import org.bouncycastle.crypto.params.KeyParameter;
6
import org.bouncycastle.util.Arrays;
7
import org.bouncycastle.util.encoders.Hex;
8
import org.bouncycastle.util.test.SimpleTestResult;
9
import org.bouncycastle.util.test.Test;
10
import org.bouncycastle.util.test.TestResult;
13
* SHA1 HMac Test, test vectors from RFC 2202
15
public class SHA1HMacTest
18
final static String[] keys = {
19
"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
21
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
22
"0102030405060708090a0b0c0d0e0f10111213141516171819",
23
"0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
24
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
25
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
28
final static String[] digests = {
29
"b617318655057264e28bc0b6fb378c8ef146be00",
30
"effcdf6ae5eb2fa2d27416d5f184df9c259a7c79",
31
"125d7342b9ac11cd91a39af48aa17b4f63f175d3",
32
"4c9007f4026250c6bc8414f9bf50c86c2d7235da",
33
"4c1a03424b55e07fe7f27be1d58bb9324a9a5a04",
34
"aa4ae5e15272d00e95705637ce8a3b55ed402112",
35
"e8e99d0f45237d786d6bbaa7965c7808bbff1a91",
36
"4c1a03424b55e07fe7f27be1d58bb9324a9a5a04",
37
"aa4ae5e15272d00e95705637ce8a3b55ed402112",
38
"e8e99d0f45237d786d6bbaa7965c7808bbff1a91"
41
final static String[] messages = {
43
"what do ya want for nothing?",
44
"0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
45
"0xcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd",
46
"Test With Truncation",
47
"Test Using Larger Than Block-Size Key - Hash Key First",
48
"Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data"
51
public String getName()
56
public TestResult perform()
58
HMac hmac = new HMac(new SHA1Digest());
59
byte[] resBuf = new byte[hmac.getMacSize()];
61
for (int i = 0; i < messages.length; i++)
63
byte[] m = messages[i].getBytes();
64
if (messages[i].startsWith("0x"))
66
m = Hex.decode(messages[i].substring(2));
68
hmac.init(new KeyParameter(Hex.decode(keys[i])));
69
hmac.update(m, 0, m.length);
70
hmac.doFinal(resBuf, 0);
72
if (!Arrays.areEqual(resBuf, Hex.decode(digests[i])))
74
return new SimpleTestResult(false, getName() + ": Vector " + i + " failed");
81
int vector = 0; // vector used for test
82
byte[] m = messages[vector].getBytes();
83
if (messages[vector].startsWith("0x"))
85
m = Hex.decode(messages[vector].substring(2));
87
hmac.init(new KeyParameter(Hex.decode(keys[vector])));
88
hmac.update(m, 0, m.length);
89
hmac.doFinal(resBuf, 0);
91
hmac.update(m, 0, m.length);
92
hmac.doFinal(resBuf, 0);
94
if (!Arrays.areEqual(resBuf, Hex.decode(digests[vector])))
96
return new SimpleTestResult(false, getName() +
97
"Reset with vector " + vector + " failed");
100
return new SimpleTestResult(true, getName() + ": Okay");
103
public static void main(
106
SHA1HMacTest test = new SHA1HMacTest();
107
TestResult result = test.perform();
109
System.out.println(result);