Example usage for org.bouncycastle.crypto.modes SICBlockCipher processBlock

List of usage examples for org.bouncycastle.crypto.modes SICBlockCipher processBlock

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.modes SICBlockCipher processBlock.

Prototype

public int processBlock(byte[] in, int inOff, byte[] out, int outOff)
            throws DataLengthException, IllegalStateException 

Source Link

Usage

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

License:Open Source License

@Test // basic encryption/decryption
public void test11() throws Throwable {

    byte[] keyBytes = HashUtil.keccak256("...".getBytes());
    log.info("key: {}", Hex.toHexString(keyBytes));
    byte[] ivBytes = new byte[16];
    byte[] payload = Hex.decode("22400891000000000000000000000000");

    KeyParameter key = new KeyParameter(keyBytes);
    ParametersWithIV params = new ParametersWithIV(key, new byte[16]);

    AESEngine engine = new AESEngine();
    SICBlockCipher ctrEngine = new SICBlockCipher(engine);

    ctrEngine.init(true, params);//from   w  ww .j ava  2  s.  c om

    byte[] cipher = new byte[16];
    ctrEngine.processBlock(payload, 0, cipher, 0);

    log.info("cipher: {}", Hex.toHexString(cipher));

    byte[] output = new byte[cipher.length];
    ctrEngine.init(false, params);
    ctrEngine.processBlock(cipher, 0, output, 0);

    assertEquals(Hex.toHexString(output), Hex.toHexString(payload));
    log.info("original: {}", Hex.toHexString(payload));
}

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

License:Open Source License

@Test // big packet encryption
public void test12() throws Throwable {

    AESEngine engine = new AESEngine();
    SICBlockCipher ctrEngine = new SICBlockCipher(engine);

    byte[] keyBytes = Hex.decode("a4627abc2a3c25315bff732cb22bc128f203912dd2a840f31e66efb27a47d2b1");
    byte[] ivBytes = new byte[16];
    byte[] payload = Hex.decode(
            "0109efc76519b683d543db9d0991bcde99cc9a3d14b1d0ecb8e9f1f66f31558593d746eaa112891b04ef7126e1dce17c9ac92ebf39e010f0028b8ec699f56f5d0c0d00");
    byte[] cipherText = Hex.decode(
            "f9fab4e9dd9fc3e5d0d0d16da254a2ac24df81c076e3214e2c57da80a46e6ae4752f4b547889fa692b0997d74f36bb7c047100ba71045cb72cfafcc7f9a251762cdf8f");

    KeyParameter key = new KeyParameter(keyBytes);
    ParametersWithIV params = new ParametersWithIV(key, ivBytes);

    ctrEngine.init(true, params);//w ww.j  a v a2s  .c  o m

    byte[] in = payload;
    byte[] out = new byte[in.length];

    int i = 0;

    while (i < in.length) {
        ctrEngine.processBlock(in, i, out, i);
        i += engine.getBlockSize();
        if (in.length - i < engine.getBlockSize())
            break;
    }

    // process left bytes
    if (in.length - i > 0) {
        byte[] tmpBlock = new byte[16];
        System.arraycopy(in, i, tmpBlock, 0, in.length - i);
        ctrEngine.processBlock(tmpBlock, 0, tmpBlock, 0);
        System.arraycopy(tmpBlock, 0, out, i, in.length - i);
    }

    log.info("cipher: {}", Hex.toHexString(out));

    assertEquals(Hex.toHexString(cipherText), Hex.toHexString(out));
}

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

License:Open Source License

/**
 * Decrypt cipher by AES in SIC(also know as CTR) mode
 *
 * @param cipher -proper cipher//  w  ww  .  j  ava2 s. co m
 * @return decrypted cipher, equal length to the cipher.
 */
public byte[] decryptAES(byte[] cipher) {

    if (priv == null) {
        throw new MissingPrivateKeyException();
    }

    AESEngine engine = new AESEngine();
    SICBlockCipher ctrEngine = new SICBlockCipher(engine);

    KeyParameter key = new KeyParameter(BigIntegers.asUnsignedByteArray(priv));
    ParametersWithIV params = new ParametersWithIV(key, new byte[16]);

    ctrEngine.init(false, params);

    int i = 0;
    byte[] out = new byte[cipher.length];
    while (i < cipher.length) {
        ctrEngine.processBlock(cipher, i, out, i);
        i += engine.getBlockSize();
        if (cipher.length - i < engine.getBlockSize()) {
            break;
        }
    }

    // process left bytes
    if (cipher.length - i > 0) {
        byte[] tmpBlock = new byte[16];
        System.arraycopy(cipher, i, tmpBlock, 0, cipher.length - i);
        ctrEngine.processBlock(tmpBlock, 0, tmpBlock, 0);
        System.arraycopy(tmpBlock, 0, out, i, cipher.length - i);
    }

    return out;
}