byte[]  buf = new byte[inLen + (macKeySize / 8)];
byte[] buf = generateKdfBytes(kParam, inLen + (macKeySize / 8));
    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 (cipher == null)     // stream mode        {            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;    }