~brian-thomason/+junk/bouncycastle

« back to all changes in this revision

Viewing changes to test/src/org/bouncycastle/crypto/test/SHA1HMacTest.java

  • Committer: Brian Thomason
  • Date: 2011-12-20 17:20:32 UTC
  • Revision ID: brian.thomason@canonical.com-20111220172032-rdtm13jgdxtksacr
Initial import

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
package org.bouncycastle.crypto.test;
 
2
 
 
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;
 
11
 
 
12
/**
 
13
 * SHA1 HMac Test, test vectors from RFC 2202
 
14
 */
 
15
public class SHA1HMacTest
 
16
    implements Test
 
17
{
 
18
    final static String[] keys = {
 
19
        "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
 
20
        "4a656665",
 
21
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
 
22
        "0102030405060708090a0b0c0d0e0f10111213141516171819",
 
23
        "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
 
24
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
 
25
        "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
 
26
    };
 
27
 
 
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"
 
39
    };
 
40
 
 
41
    final static String[] messages = {
 
42
        "Hi There",
 
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"
 
49
    };
 
50
        
 
51
    public String getName()
 
52
    {
 
53
        return "SHA1HMac";
 
54
    }
 
55
 
 
56
    public TestResult perform()
 
57
    {
 
58
        HMac hmac = new HMac(new SHA1Digest());
 
59
        byte[] resBuf = new byte[hmac.getMacSize()];
 
60
 
 
61
        for (int i = 0; i < messages.length; i++)
 
62
        {
 
63
            byte[] m = messages[i].getBytes();
 
64
            if (messages[i].startsWith("0x"))
 
65
            {
 
66
                m = Hex.decode(messages[i].substring(2));
 
67
            }
 
68
            hmac.init(new KeyParameter(Hex.decode(keys[i])));
 
69
            hmac.update(m, 0, m.length);
 
70
            hmac.doFinal(resBuf, 0);
 
71
 
 
72
            if (!Arrays.areEqual(resBuf, Hex.decode(digests[i])))
 
73
            {
 
74
                return new SimpleTestResult(false, getName() + ": Vector " + i + " failed");
 
75
            }
 
76
        }
 
77
 
 
78
        //
 
79
        // test reset
 
80
        //
 
81
        int vector = 0; // vector used for test
 
82
        byte[] m = messages[vector].getBytes();
 
83
        if (messages[vector].startsWith("0x"))
 
84
        {
 
85
            m = Hex.decode(messages[vector].substring(2));
 
86
        }
 
87
        hmac.init(new KeyParameter(Hex.decode(keys[vector])));
 
88
        hmac.update(m, 0, m.length);
 
89
        hmac.doFinal(resBuf, 0);
 
90
        hmac.reset();
 
91
        hmac.update(m, 0, m.length);
 
92
        hmac.doFinal(resBuf, 0);
 
93
 
 
94
        if (!Arrays.areEqual(resBuf, Hex.decode(digests[vector])))
 
95
        {
 
96
            return new SimpleTestResult(false, getName() +
 
97
                    "Reset with vector " + vector + " failed");
 
98
        }
 
99
 
 
100
        return new SimpleTestResult(true, getName() + ": Okay");
 
101
    }
 
102
 
 
103
    public static void main(
 
104
        String[]    args)
 
105
    {
 
106
        SHA1HMacTest    test = new SHA1HMacTest();
 
107
        TestResult      result = test.perform();
 
108
 
 
109
        System.out.println(result);
 
110
    }
 
111
}