All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jessecoyle.CredStashBouncyCastleCrypto Maven / Gradle / Ivy

package com.jessecoyle;

import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.StreamBlockCipher;
import org.bouncycastle.crypto.digests.SHA256Digest;
import org.bouncycastle.crypto.engines.AESFastEngine;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.modes.SICBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;

/**
 * Created by jcoyle on 2/1/16.
 */
public class CredStashBouncyCastleCrypto implements CredStashCrypto {
    @Override
    public byte[] decrypt(byte[] key, byte[] contents) {

        // Credstash uses standard AES
        BlockCipher engine = new AESFastEngine();

        // Credstash uses CTR mode
        StreamBlockCipher cipher = new SICBlockCipher(engine);

        boolean forEncryption = false;
        cipher.init(forEncryption, new ParametersWithIV(new KeyParameter(key), INITIALIZATION_VECTOR));

        byte[] resultBytes = new byte[contents.length];
        int contentsOffset = 0;
        int resultOffset = 0;
        cipher.processBytes(contents, contentsOffset, contents.length, resultBytes, resultOffset);
        return resultBytes;
    }

    @Override
    public byte[] digest(byte[] key, byte[] contents) {
        // Credstash uses SHA-256
        SHA256Digest digest = new SHA256Digest();

        // Credstash uses HMAC
        HMac mac = new HMac(digest);

        byte[] resultBytes = new byte[mac.getMacSize()];

        mac.init(new KeyParameter(key));
        mac.update(contents, 0, contents.length);
        mac.doFinal(resultBytes, 0);

        return resultBytes;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy