use of im.actor.runtime.crypto.Digest in project actor-platform by actorapp.
the class TrustedKey method load.
private synchronized void load() {
if (!isLoaded) {
isLoaded = true;
this.key = Hex.fromHex(hexKey);
byte[] hash = new byte[32];
Digest sha256 = Crypto.createSHA256();
sha256.update(key, 0, key.length);
sha256.doFinal(hash, 0);
this.keyId = ByteStrings.bytesToLong(hash);
}
}
use of im.actor.runtime.crypto.Digest in project actor-platform by actorapp.
the class AuthKeyActor method gotoDHState.
private void gotoDHState(final long keyId, final byte[] key, final byte[] serverNonce) {
final byte[] clientNonce = new byte[32];
Crypto.nextBytes(clientNonce);
byte[] keyMaterial = new byte[32];
Crypto.nextBytes(keyMaterial);
final Curve25519KeyPair clientKeyPair = Curve25519.keyGen(keyMaterial);
goToState(new ActorState() {
@Override
public ProtoStruct sendStartMessage() throws IOException {
Log.d(TAG, "Sending RequestDH");
return new RequestDH(randomId, keyId, clientNonce, clientKeyPair.getPublicKey());
}
@Override
public void onMessage(ProtoStruct struct) throws IOException {
if (struct instanceof ResponseDoDH) {
Log.d(TAG, "Received ResponseDoDH");
ResponseDoDH r = (ResponseDoDH) struct;
if (r.getRandomId() != randomId) {
throw new IOException("Incorrect RandomId");
}
PRF combinedPrf = Cryptos.PRF_SHA_STREEBOG_256();
byte[] nonce = ByteStrings.merge(clientNonce, serverNonce);
byte[] pre_master_secret = Curve25519.calculateAgreement(clientKeyPair.getPrivateKey(), key);
byte[] master_secret = combinedPrf.calculate(pre_master_secret, "master secret", nonce, 256);
byte[] verify = combinedPrf.calculate(master_secret, "client finished", nonce, 256);
if (!Curve25519.verifySignature(key, verify, r.getVerifySign())) {
throw new IOException("Incorrect Signature");
}
Digest sha256 = Crypto.createSHA256();
sha256.update(master_secret, 0, master_secret.length);
byte[] authIdHash = new byte[32];
sha256.doFinal(authIdHash, 0);
long authId = ByteStrings.bytesToLong(authIdHash);
Log.d(TAG, "Key successfully created #" + authId);
gotoSuccess(master_secret, authId);
} else {
throw new IOException("Expected: ResponseGetServerKey, got: " + struct.getClass().getName());
}
}
});
}
use of im.actor.runtime.crypto.Digest in project actor-platform by actorapp.
the class RatchetKeySignature method hashForSignature.
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;
}
use of im.actor.runtime.crypto.Digest in project actor-platform by actorapp.
the class Crypto method SHA256.
/**
* Calculating SHA256
*
* @param data source data
* @return SHA256 of data
*/
public static byte[] SHA256(byte[] data) {
Digest sha256 = createSHA256();
sha256.update(data, 0, data.length);
byte[] res = new byte[32];
sha256.doFinal(res, 0);
return res;
}
use of im.actor.runtime.crypto.Digest in project actor-platform by actorapp.
the class RatchetMasterSecret method calculateMasterSecret.
public static byte[] calculateMasterSecret(RatchetPrivateKey ownIdentity, RatchetPrivateKey ownEphermal, RatchetPublicKey foreignIdentity, RatchetPublicKey foreignEphermal) {
byte[] ecResult;
if (ownIdentity.isBigger(foreignIdentity.getKey())) {
ecResult = ByteStrings.merge(Curve25519.calculateAgreement(ownIdentity.getPrivateKey(), foreignEphermal.getKey()), Curve25519.calculateAgreement(ownEphermal.getPrivateKey(), foreignIdentity.getKey()), Curve25519.calculateAgreement(ownEphermal.getPrivateKey(), foreignEphermal.getKey()));
} else {
ecResult = ByteStrings.merge(Curve25519.calculateAgreement(ownEphermal.getPrivateKey(), foreignIdentity.getKey()), Curve25519.calculateAgreement(ownIdentity.getPrivateKey(), foreignEphermal.getKey()), Curve25519.calculateAgreement(ownEphermal.getPrivateKey(), foreignEphermal.getKey()));
}
Digest sha256 = Crypto.createSHA256();
sha256.update(ecResult, 0, ecResult.length);
byte[] res = new byte[32];
sha256.doFinal(res, 0);
return res;
}
Aggregations