diff options
Diffstat (limited to 'src/com/isode/stroke/stringcodecs/HMACSHA1.java')
-rw-r--r-- | src/com/isode/stroke/stringcodecs/HMACSHA1.java | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/com/isode/stroke/stringcodecs/HMACSHA1.java b/src/com/isode/stroke/stringcodecs/HMACSHA1.java new file mode 100644 index 0000000..1d8c9b7 --- /dev/null +++ b/src/com/isode/stroke/stringcodecs/HMACSHA1.java @@ -0,0 +1,49 @@ +/* + * 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.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.append(SHA1.getHash(x)); + + return SHA1.getHash(y); + } +} |