Search in sources :

Example 11 with ParametersWithIV

use of org.spongycastle.crypto.params.ParametersWithIV in project nuls by nuls-io.

the class AESEncrypt method encrypt.

/**
 * 加密
 *
 * @param plainBytes
 * @param iv
 * @param aesKey
 * @return EncryptedData
 */
public static EncryptedData encrypt(byte[] plainBytes, byte[] iv, KeyParameter aesKey) throws NulsRuntimeException {
    Utils.checkNotNull(plainBytes);
    Utils.checkNotNull(aesKey);
    try {
        if (iv == null) {
            iv = new byte[16];
            SECURE_RANDOM.nextBytes(iv);
        }
        ParametersWithIV keyWithIv = new ParametersWithIV(aesKey, iv);
        // Encrypt using AES.
        BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESFastEngine()));
        cipher.init(true, keyWithIv);
        byte[] encryptedBytes = new byte[cipher.getOutputSize(plainBytes.length)];
        final int length1 = cipher.processBytes(plainBytes, 0, plainBytes.length, encryptedBytes, 0);
        final int length2 = cipher.doFinal(encryptedBytes, length1);
        return new EncryptedData(iv, Arrays.copyOf(encryptedBytes, length1 + length2));
    } catch (Exception e) {
        throw new NulsRuntimeException(e);
    }
}
Also used : ParametersWithIV(org.spongycastle.crypto.params.ParametersWithIV) PaddedBufferedBlockCipher(org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher) BufferedBlockCipher(org.spongycastle.crypto.BufferedBlockCipher) PaddedBufferedBlockCipher(org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher) NulsRuntimeException(io.nuls.core.exception.NulsRuntimeException) CBCBlockCipher(org.spongycastle.crypto.modes.CBCBlockCipher) AESFastEngine(org.spongycastle.crypto.engines.AESFastEngine) NulsRuntimeException(io.nuls.core.exception.NulsRuntimeException)

Example 12 with ParametersWithIV

use of org.spongycastle.crypto.params.ParametersWithIV in project nuls by nuls-io.

the class AESEncrypt method decrypt.

/**
 * 解密
 *
 * @param dataToDecrypt
 * @param aesKey
 * @return byte[]
 * @throws NulsRuntimeException
 */
public static byte[] decrypt(EncryptedData dataToDecrypt, KeyParameter aesKey) throws NulsRuntimeException {
    Utils.checkNotNull(dataToDecrypt);
    Utils.checkNotNull(aesKey);
    try {
        ParametersWithIV keyWithIv = new ParametersWithIV(new KeyParameter(aesKey.getKey()), dataToDecrypt.getInitialisationVector());
        // Decrypt the message.
        BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(new AESFastEngine()));
        cipher.init(false, keyWithIv);
        byte[] cipherBytes = dataToDecrypt.getEncryptedBytes();
        byte[] decryptedBytes = new byte[cipher.getOutputSize(cipherBytes.length)];
        final int length1 = cipher.processBytes(cipherBytes, 0, cipherBytes.length, decryptedBytes, 0);
        final int length2 = cipher.doFinal(decryptedBytes, length1);
        return Arrays.copyOf(decryptedBytes, length1 + length2);
    } catch (Exception e) {
        throw new NulsRuntimeException(e);
    }
}
Also used : ParametersWithIV(org.spongycastle.crypto.params.ParametersWithIV) PaddedBufferedBlockCipher(org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher) BufferedBlockCipher(org.spongycastle.crypto.BufferedBlockCipher) PaddedBufferedBlockCipher(org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher) KeyParameter(org.spongycastle.crypto.params.KeyParameter) NulsRuntimeException(io.nuls.core.exception.NulsRuntimeException) CBCBlockCipher(org.spongycastle.crypto.modes.CBCBlockCipher) AESFastEngine(org.spongycastle.crypto.engines.AESFastEngine) NulsRuntimeException(io.nuls.core.exception.NulsRuntimeException)

Example 13 with ParametersWithIV

use of org.spongycastle.crypto.params.ParametersWithIV in project Zom-Android by zom.

the class OtrCryptoEngineImpl method aesDecrypt.

public byte[] aesDecrypt(byte[] key, byte[] ctr, byte[] b) throws OtrCryptoException {
    AESFastEngine aesDec = new AESFastEngine();
    SICBlockCipher sicAesDec = new SICBlockCipher(aesDec);
    BufferedBlockCipher bufSicAesDec = new BufferedBlockCipher(sicAesDec);
    // Create initial counter value 0.
    if (ctr == null)
        ctr = ZERO_CTR;
    bufSicAesDec.init(false, new ParametersWithIV(new KeyParameter(key), ctr));
    byte[] aesOutLwDec = new byte[b.length];
    int done = bufSicAesDec.processBytes(b, 0, b.length, aesOutLwDec, 0);
    try {
        bufSicAesDec.doFinal(aesOutLwDec, done);
    } catch (Exception e) {
        throw new OtrCryptoException(e);
    }
    return aesOutLwDec;
}
Also used : ParametersWithIV(org.spongycastle.crypto.params.ParametersWithIV) BufferedBlockCipher(org.spongycastle.crypto.BufferedBlockCipher) KeyParameter(org.spongycastle.crypto.params.KeyParameter) SICBlockCipher(org.spongycastle.crypto.modes.SICBlockCipher) AESFastEngine(org.spongycastle.crypto.engines.AESFastEngine) IOException(java.io.IOException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) InvalidKeyException(java.security.InvalidKeyException)

Example 14 with ParametersWithIV

use of org.spongycastle.crypto.params.ParametersWithIV in project Zom-Android by zom.

the class OtrCryptoEngineImpl method aesEncrypt.

public byte[] aesEncrypt(byte[] key, byte[] ctr, byte[] b) throws OtrCryptoException {
    AESFastEngine aesEnc = new AESFastEngine();
    SICBlockCipher sicAesEnc = new SICBlockCipher(aesEnc);
    BufferedBlockCipher bufSicAesEnc = new BufferedBlockCipher(sicAesEnc);
    // Create initial counter value 0.
    if (ctr == null)
        ctr = ZERO_CTR;
    bufSicAesEnc.init(true, new ParametersWithIV(new KeyParameter(key), ctr));
    byte[] aesOutLwEnc = new byte[b.length];
    int done = bufSicAesEnc.processBytes(b, 0, b.length, aesOutLwEnc, 0);
    try {
        bufSicAesEnc.doFinal(aesOutLwEnc, done);
    } catch (Exception e) {
        throw new OtrCryptoException(e);
    }
    return aesOutLwEnc;
}
Also used : ParametersWithIV(org.spongycastle.crypto.params.ParametersWithIV) BufferedBlockCipher(org.spongycastle.crypto.BufferedBlockCipher) KeyParameter(org.spongycastle.crypto.params.KeyParameter) SICBlockCipher(org.spongycastle.crypto.modes.SICBlockCipher) AESFastEngine(org.spongycastle.crypto.engines.AESFastEngine) IOException(java.io.IOException) NoSuchAlgorithmException(java.security.NoSuchAlgorithmException) InvalidKeyException(java.security.InvalidKeyException)

Example 15 with ParametersWithIV

use of org.spongycastle.crypto.params.ParametersWithIV in project toshi-android-client by toshiapp.

the class ECKey method decryptAES.

/**
 * Decrypt cipher by AES in SIC(also know as CTR) mode
 *
 * @param cipher -proper cipher
 * @return decrypted cipher, equal length to the cipher.
 * @deprecated should not use EC private scalar value as an AES key
 */
public byte[] decryptAES(byte[] cipher) {
    if (privKey == null) {
        throw new MissingPrivateKeyException();
    }
    if (!(privKey instanceof BCECPrivateKey)) {
        throw new UnsupportedOperationException("Cannot use the private key as an AES key");
    }
    AESFastEngine engine = new AESFastEngine();
    SICBlockCipher ctrEngine = new SICBlockCipher(engine);
    KeyParameter key = new KeyParameter(BigIntegers.asUnsignedByteArray(((BCECPrivateKey) privKey).getD()));
    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;
}
Also used : ParametersWithIV(org.spongycastle.crypto.params.ParametersWithIV) KeyParameter(org.spongycastle.crypto.params.KeyParameter) SICBlockCipher(org.spongycastle.crypto.modes.SICBlockCipher) AESFastEngine(org.spongycastle.crypto.engines.AESFastEngine) ECPoint(org.spongycastle.math.ec.ECPoint) BCECPrivateKey(org.spongycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey)

Aggregations

ParametersWithIV (org.spongycastle.crypto.params.ParametersWithIV)17 KeyParameter (org.spongycastle.crypto.params.KeyParameter)12 AESFastEngine (org.spongycastle.crypto.engines.AESFastEngine)11 BufferedBlockCipher (org.spongycastle.crypto.BufferedBlockCipher)8 CBCBlockCipher (org.spongycastle.crypto.modes.CBCBlockCipher)8 PaddedBufferedBlockCipher (org.spongycastle.crypto.paddings.PaddedBufferedBlockCipher)7 SICBlockCipher (org.spongycastle.crypto.modes.SICBlockCipher)6 IOException (java.io.IOException)4 BCECPrivateKey (org.spongycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey)3 ECPoint (org.spongycastle.math.ec.ECPoint)3 NulsRuntimeException (io.nuls.core.exception.NulsRuntimeException)2 InvalidKeyException (java.security.InvalidKeyException)2 NoSuchAlgorithmException (java.security.NoSuchAlgorithmException)2 DataLengthException (org.spongycastle.crypto.DataLengthException)2 InvalidCipherTextException (org.spongycastle.crypto.InvalidCipherTextException)2 StreamCipher (org.spongycastle.crypto.StreamCipher)2 PBEParametersGenerator (org.spongycastle.crypto.PBEParametersGenerator)1 AESEngine (org.spongycastle.crypto.engines.AESEngine)1 ChaCha7539Engine (org.spongycastle.crypto.engines.ChaCha7539Engine)1 Salsa20Engine (org.spongycastle.crypto.engines.Salsa20Engine)1