Example usage for org.bouncycastle.crypto.digests KeccakDigest update

List of usage examples for org.bouncycastle.crypto.digests KeccakDigest update

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.digests KeccakDigest update.

Prototype

public void update(byte[] in, int inOff, int len) 

Source Link

Usage

From source file:org.ethereum.crypto.Keccak256Helper.java

License:Open Source License

private static byte[] keccak256(byte[] message, int start, int length, KeccakDigest digest,
        boolean bouncyencoder) {
    byte[] hash = new byte[digest.getDigestSize()];

    if (message.length != 0) {
        digest.update(message, start, length);
    }//from  w w  w .j av  a2 s. c om
    digest.doFinal(hash, 0);
    return hash;
}

From source file:org.ethereum.crypto.Keccak256Helper.java

License:Open Source License

private static byte[] doKeccak256(byte[] message, KeccakDigest digest, boolean bouncyencoder) {
    byte[] hash = new byte[digest.getDigestSize()];

    if (message.length != 0) {
        digest.update(message, 0, message.length);
    }/*  w  w w. j  a v  a2 s. co m*/
    digest.doFinal(hash, 0);
    return hash;
}

From source file:org.ethereum.crypto.Keccak256Helper.java

License:Open Source License

private static byte[] doKeccak256(byte[] m1, byte[] m2, KeccakDigest digest, boolean bouncyencoder) {
    byte[] hash = new byte[digest.getDigestSize()];
    digest.update(m1, 0, m1.length);
    digest.update(m2, 0, m2.length);/*from w  w w  .  j  a v a2  s.  com*/

    digest.doFinal(hash, 0);
    return hash;
}

From source file:org.ethereum.net.rlpx.EncryptionHandshake.java

License:Open Source License

void agreeSecret(byte[] initiatePacket, byte[] responsePacket) {
    BigInteger secretScalar = remoteEphemeralKey.multiply(ephemeralKey.getPrivKey()).normalize().getXCoord()
            .toBigInteger();//from w  ww .  j a  v  a2s . co m
    byte[] agreedSecret = ByteUtil.bigIntegerToBytes(secretScalar, SECRET_SIZE);
    byte[] sharedSecret = Keccak256Helper.keccak256(agreedSecret,
            Keccak256Helper.keccak256(responderNonce, initiatorNonce));
    byte[] aesSecret = Keccak256Helper.keccak256(agreedSecret, sharedSecret);
    secrets = new Secrets();
    secrets.aes = aesSecret;
    secrets.mac = Keccak256Helper.keccak256(agreedSecret, aesSecret);
    secrets.token = Keccak256Helper.keccak256(sharedSecret);

    KeccakDigest mac1 = new KeccakDigest(MAC_SIZE);
    mac1.update(xor(secrets.mac, responderNonce), 0, secrets.mac.length);
    byte[] buf = new byte[32];
    new KeccakDigest(mac1).doFinal(buf, 0);
    mac1.update(initiatePacket, 0, initiatePacket.length);
    new KeccakDigest(mac1).doFinal(buf, 0);
    KeccakDigest mac2 = new KeccakDigest(MAC_SIZE);
    mac2.update(xor(secrets.mac, initiatorNonce), 0, secrets.mac.length);
    new KeccakDigest(mac2).doFinal(buf, 0);
    mac2.update(responsePacket, 0, responsePacket.length);
    new KeccakDigest(mac2).doFinal(buf, 0);
    if (isInitiator) {
        secrets.egressMac = mac1;
        secrets.ingressMac = mac2;
    } else {
        secrets.egressMac = mac2;
        secrets.ingressMac = mac1;
    }
}

From source file:org.ethereum.net.rlpx.FrameCodec.java

License:Open Source License

private byte[] updateMac(KeccakDigest mac, byte[] seed, int offset, byte[] out, int outOffset, boolean egress)
        throws IOException {
    byte[] aesBlock = new byte[mac.getDigestSize()];
    doSum(mac, aesBlock);//from   ww w .j a  va2s  .  c  o  m
    makeMacCipher().processBlock(aesBlock, 0, aesBlock, 0);
    // Note that although the mac digest size is 32 bytes, we only use 16 bytes in the computation
    int length = 16;
    for (int i = 0; i < length; i++) {
        aesBlock[i] ^= seed[i + offset];
    }
    mac.update(aesBlock, 0, length);
    byte[] result = new byte[mac.getDigestSize()];
    doSum(mac, result);
    if (egress) {
        System.arraycopy(result, 0, out, outOffset, length);
    } else {
        for (int i = 0; i < length; i++) {
            if (out[i + outOffset] != result[i]) {
                throw new IOException("MAC mismatch");
            }
        }
    }
    return result;
}