Search in sources :

Example 1 with KDFParameters

use of org.gudy.bouncycastle.crypto.params.KDFParameters in project BiglyBT by BiglySoftware.

the class IESEngine method decryptBlock.

private byte[] decryptBlock(byte[] in_enc, int inOff, int inLen, byte[] z) throws InvalidCipherTextException {
    byte[] M = null;
    KeyParameter macKey = null;
    KDFParameters kParam = new KDFParameters(z, param.getDerivationV());
    int macKeySize = param.getMacKeySize();
    kdf.init(kParam);
    inLen -= mac.getMacSize();
    if (// stream mode
    cipher == null) {
        byte[] buf = new byte[inLen + (macKeySize / 8)];
        M = new byte[inLen];
        kdf.generateBytes(buf, 0, buf.length);
        for (int i = 0; i != inLen; i++) {
            M[i] = (byte) (in_enc[inOff + i] ^ buf[i]);
        }
        macKey = new KeyParameter(buf, inLen, (macKeySize / 8));
    } else {
        int cipherKeySize = ((IESWithCipherParameters) param).getCipherKeySize();
        byte[] buf = new byte[(cipherKeySize / 8) + (macKeySize / 8)];
        cipher.init(false, new KeyParameter(buf, 0, (cipherKeySize / 8)));
        byte[] tmp = new byte[cipher.getOutputSize(inLen)];
        int off = cipher.processBytes(in_enc, inOff, inLen, tmp, 0);
        off += cipher.doFinal(tmp, off);
        M = new byte[off];
        System.arraycopy(tmp, 0, M, 0, off);
        macKey = new KeyParameter(buf, (cipherKeySize / 8), (macKeySize / 8));
    }
    byte[] macIV = param.getEncodingV();
    mac.init(macKey);
    mac.update(in_enc, inOff, inLen);
    mac.update(macIV, 0, macIV.length);
    mac.doFinal(macBuf, 0);
    inOff += inLen;
    for (int t = 0; t < macBuf.length; t++) {
        if (macBuf[t] != in_enc[inOff + t]) {
            throw (new InvalidCipherTextException("Mac codes failed to equal."));
        }
    }
    return M;
}
Also used : KDFParameters(org.gudy.bouncycastle.crypto.params.KDFParameters) KeyParameter(org.gudy.bouncycastle.crypto.params.KeyParameter) IESWithCipherParameters(org.gudy.bouncycastle.crypto.params.IESWithCipherParameters)

Example 2 with KDFParameters

use of org.gudy.bouncycastle.crypto.params.KDFParameters in project BiglyBT by BiglySoftware.

the class IESEngine method encryptBlock.

private byte[] encryptBlock(byte[] in, int inOff, int inLen, byte[] z) throws InvalidCipherTextException {
    byte[] C = null;
    KeyParameter macKey = null;
    KDFParameters kParam = new KDFParameters(z, param.getDerivationV());
    int c_text_length = 0;
    int macKeySize = param.getMacKeySize();
    kdf.init(kParam);
    if (// stream mode
    cipher == null) {
        byte[] buf = new byte[inLen + (macKeySize / 8)];
        C = new byte[inLen + mac.getMacSize()];
        c_text_length = inLen;
        kdf.generateBytes(buf, 0, buf.length);
        for (int i = 0; i != inLen; i++) {
            C[i] = (byte) (in[inOff + i] ^ buf[i]);
        }
        macKey = new KeyParameter(buf, inLen, (macKeySize / 8));
    } else {
        int cipherKeySize = ((IESWithCipherParameters) param).getCipherKeySize();
        byte[] buf = new byte[(cipherKeySize / 8) + (macKeySize / 8)];
        cipher.init(true, new KeyParameter(buf, 0, (cipherKeySize / 8)));
        c_text_length = cipher.getOutputSize(inLen);
        C = new byte[c_text_length + mac.getMacSize()];
        int off = cipher.processBytes(in, inOff, inLen, C, 0);
        cipher.doFinal(C, off);
        macKey = new KeyParameter(buf, (cipherKeySize / 8), (macKeySize / 8));
    }
    byte[] macIV = param.getEncodingV();
    mac.init(macKey);
    mac.update(C, 0, c_text_length);
    mac.update(macIV, 0, macIV.length);
    // 
    // return the message and it's MAC
    // 
    mac.doFinal(C, c_text_length);
    return C;
}
Also used : KDFParameters(org.gudy.bouncycastle.crypto.params.KDFParameters) KeyParameter(org.gudy.bouncycastle.crypto.params.KeyParameter) IESWithCipherParameters(org.gudy.bouncycastle.crypto.params.IESWithCipherParameters)

Example 3 with KDFParameters

use of org.gudy.bouncycastle.crypto.params.KDFParameters in project BiglyBT by BiglySoftware.

the class BaseKDFBytesGenerator method init.

@Override
public void init(DerivationParameters param) {
    if (param instanceof KDFParameters) {
        KDFParameters p = (KDFParameters) param;
        shared = p.getSharedSecret();
        iv = p.getIV();
    } else if (param instanceof ISO18033KDFParameters) {
        ISO18033KDFParameters p = (ISO18033KDFParameters) param;
        shared = p.getSeed();
        iv = null;
    } else {
        throw new IllegalArgumentException("KDF parameters required for KDF2Generator");
    }
}
Also used : ISO18033KDFParameters(org.gudy.bouncycastle.crypto.params.ISO18033KDFParameters) KDFParameters(org.gudy.bouncycastle.crypto.params.KDFParameters) ISO18033KDFParameters(org.gudy.bouncycastle.crypto.params.ISO18033KDFParameters)

Aggregations

KDFParameters (org.gudy.bouncycastle.crypto.params.KDFParameters)3 IESWithCipherParameters (org.gudy.bouncycastle.crypto.params.IESWithCipherParameters)2 KeyParameter (org.gudy.bouncycastle.crypto.params.KeyParameter)2 ISO18033KDFParameters (org.gudy.bouncycastle.crypto.params.ISO18033KDFParameters)1