diff -r 7d6f2526244a -r 197a85a35cba app/src/main/java/com/isode/stroke/stringcodecs/HMACSHA1.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/src/main/java/com/isode/stroke/stringcodecs/HMACSHA1.java Sun Mar 15 18:03:03 2015 +0100 @@ -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); + } +}