blob: 36f8f80ee660fa0b7e8027bd674406ac771011dc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
/*
* Copyright (c) 2010, Isode Limited, London, England.
* All rights reserved.
*/
/*
* Copyright (c) 2010, Remko Tronçon.
* All rights reserved.
*/
package com.isode.stroke.stringcodecs;
import com.isode.stroke.base.ByteArray;
public class HMACSHA1 {
private static final int B = 64;
public static ByteArray getResult(ByteArray key, ByteArray data) {
assert key.getSize() <= B;
/* And an assert that does something */
if (key.getSize() > B) {
throw new IllegalStateException("Invalid key size.");
}
// Create the padded key
ByteArray paddedKey = new ByteArray(key);
for (int i = key.getSize(); i < B; ++i) {
paddedKey.append((byte) 0x0);
}
// Create the first value
ByteArray x = new ByteArray(paddedKey);
byte[] xInner = x.getData();
for (int i = 0; i < xInner.length; ++i) {
xInner[i] ^= 0x36;
}
x = new ByteArray(xInner);
x.append(data);
// Create the second value
ByteArray y = new ByteArray(paddedKey);
byte[] yInner = y.getData();
for (int i = 0; i < yInner.length; ++i) {
yInner[i] ^= 0x5c;
}
y = new ByteArray(yInner);
y.append(SHA1.getHash(x));
return SHA1.getHash(y);
}
}
|