Example usage for org.bouncycastle.crypto.engines AESEngine reset

List of usage examples for org.bouncycastle.crypto.engines AESEngine reset

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.engines AESEngine reset.

Prototype

public void reset() 

Source Link

Usage

From source file:com.thecorpora.qbo.androidapk.AESCipher.java

License:Open Source License

public String encrypt(byte configData[], String key) throws Exception {
    byte[] encryptedConfigData = null;
    AESEngine blockCipher = new AESEngine();
    blockCipher.reset();
    CBCBlockCipher cbcCipher = new CBCBlockCipher(blockCipher);
    BufferedBlockCipher bbc = new PaddedBufferedBlockCipher(cbcCipher);

    byte[] salt = new byte[8];
    SecureRandom secure = new SecureRandom();
    secure.nextBytes(salt);//from  w w  w.  ja  v a  2 s.  c o  m

    //intialising in the encryption mode with Key and IV
    bbc.init(true, getKeyParamWithIv(key, salt));
    byte[] encryptedData = new byte[bbc.getOutputSize(configData.length)];

    //process array of bytes
    int noOfBytes = bbc.processBytes(configData, 0, configData.length, encryptedData, 0);

    //process the last block in the buffer
    bbc.doFinal(encryptedData, noOfBytes);

    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    //writing encrypted data along with the salt in the format readable by open ssl api
    bos.write("Salted__".getBytes());
    bos.write(salt);
    bos.write(encryptedData);
    encryptedConfigData = bos.toByteArray();
    bos.close();

    //      return encryptedConfigData;
    return Base64.encodeToString(encryptedConfigData, Base64.DEFAULT);

}

From source file:io.warp10.script.lora.LORAENC.java

License:Apache License

@Override
public Object apply(WarpScriptStack stack) throws WarpScriptException {

    Object top = stack.pop();/*from  w  w w.ja  va 2s.c  om*/

    if (!(top instanceof String)) {
        throw new WarpScriptException(getName() + " expects a 128 bits hex encoded key on top of the stack.");
    }

    String keystr = top.toString();

    if (keystr.length() != 32) {
        throw new WarpScriptException(getName() + " expects a 128 bits hex encoded key on top of the stack.");
    }

    top = stack.pop();

    if (!(top instanceof Long)) {
        throw new WarpScriptException(getName() + " expects a sequence counter below the key.");
    }

    int sequenceCounter = ((Number) top).intValue();

    top = stack.pop();

    if (!(top instanceof Long)) {
        throw new WarpScriptException(
                getName() + " expects a direction (0 uplink or 1 downlink) below the sequence counter.");
    }

    int dir = ((Number) top).intValue();

    if (0 != dir && 1 != dir) {
        throw new WarpScriptException(
                getName() + " expects a direction (0 uplink or 1 downlink) below the sequence counter.");
    }

    top = stack.pop();

    if (!(top instanceof Long)) {
        throw new WarpScriptException(getName() + " expects a device address below the direction.");
    }

    int addr = ((Number) top).intValue();

    String datastr = stack.pop().toString();

    if (0 != datastr.length() % 2) {
        throw new WarpScriptException(
                getName() + " expects a hex encoded data frame with an even length of hex digits.");
    }

    byte[] data = Hex.decode(datastr);

    //
    // Compute MIC block B0
    //

    byte[] ABlock = new byte[16];

    ABlock[0] = 0x01;
    ABlock[5] = (byte) (dir & 0x1);
    ABlock[6] = (byte) (addr & 0xFF);
    ABlock[7] = (byte) ((addr >> 8) & 0xFF);
    ABlock[8] = (byte) ((addr >> 16) & 0xFF);
    ABlock[9] = (byte) ((addr >> 24) & 0xFF);

    ABlock[10] = (byte) ((sequenceCounter) & 0xFF);
    ABlock[11] = (byte) ((sequenceCounter >> 8) & 0xFF);
    ABlock[12] = (byte) ((sequenceCounter >> 16) & 0xFF);
    ABlock[13] = (byte) ((sequenceCounter >> 24) & 0xFF);

    int nblocks = data.length / 16 + (0 == data.length % 16 ? 0 : 1);

    AESEngine aes = new AESEngine();
    KeyParameter key = new KeyParameter(Hex.decode(keystr));
    aes.init(true, key);

    byte[] SBlock = new byte[16];

    int offset = 0;

    for (int i = 0; i < nblocks; i++) {
        ABlock[15] = (byte) (i & 0xFF);
        aes.reset();
        aes.processBlock(ABlock, 0, SBlock, 0);

        for (int k = 0; i < 16; i++) {
            if (offset + k < data.length) {
                data[offset + k] = (byte) (data[offset + k] ^ SBlock[k]);
            }
        }
        offset += 16;
    }

    stack.push(new String(Hex.encode(data), Charsets.US_ASCII));

    return stack;
}