package im.actor.runtime.crypto.ratchet;
import im.actor.runtime.Crypto;
import im.actor.runtime.bser.BserWriter;
import im.actor.runtime.bser.DataOutput;
import im.actor.runtime.crypto.Digest;
// Disabling Bounds checks for speeding up calculations
/*-[
#define J2OBJC_DISABLE_ARRAY_BOUND_CHECKS 1
]-*/
public class RatchetKeySignature {
public static byte[] hashForSignature(long keyId, String keyAlg, byte[] publicKey) {
byte[] toSign;
try {
DataOutput dataOutput = new DataOutput();
BserWriter writer = new BserWriter(dataOutput);
writer.writeLong(1, keyId);
writer.writeString(2, keyAlg);
Digest sha256 = Crypto.createSHA256();
sha256.update(publicKey, 0, publicKey.length);
byte[] hash = new byte[32];
sha256.doFinal(hash, 0);
writer.writeBytes(3, hash);
toSign = dataOutput.toByteArray();
} catch (Exception e) {
// Never happens
return new byte[0];
}
return toSign;
}
}