Java 类org.bouncycastle.crypto.BlockCipher 实例源码

项目:Spring-MVC-Blueprints    文件:UploadEncryptFileController.java   
private byte[] encryptDESFile(String keys, byte[] plainText) {
BlockCipher engine = new DESEngine();

      byte[] key = keys.getBytes();
      byte[] ptBytes = plainText;
      BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(engine));
      cipher.init(true, new KeyParameter(key));
      byte[] rv = new byte[cipher.getOutputSize(ptBytes.length)];
      int tam = cipher.processBytes(ptBytes, 0, ptBytes.length, rv, 0);
      try {
          cipher.doFinal(rv, tam);
      } catch (Exception ce) {
          ce.printStackTrace();
      }
      return rv;
  }
项目:keepass2android    文件:CTSBlockCipher.java   
/**
 * Create a buffered block cipher that uses Cipher Text Stealing
 *
 * @param cipher the underlying block cipher this buffering object wraps.
 */
public CTSBlockCipher(
    BlockCipher     cipher)
{
    if ((cipher instanceof OFBBlockCipher) || (cipher instanceof CFBBlockCipher))
    {
        throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers");
    }

    this.cipher = cipher;

    blockSize = cipher.getBlockSize();

    buf = new byte[blockSize * 2];
    bufOff = 0;
}
项目:ipack    文件:BlockCipherMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits.
 * <p>
 * Note: the size of the MAC must be at least 16 bits (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @deprecated use CBCBlockCipherMac
 */
public BlockCipherMac(
    BlockCipher     cipher,
    int             macSizeInBits)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:ipack    文件:CBCBlockCipherMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits. This class uses CBC mode as the basis for the
 * MAC generation.
 * <p>
 * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
 * or 16 bits if being used as a data authenticator (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @param padding the padding to be used to complete the last block.
 */
public CBCBlockCipherMac(
    BlockCipher         cipher,
    int                 macSizeInBits,
    BlockCipherPadding  padding)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.padding = padding;
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:ipack    文件:CFBBlockCipherMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits. This class uses CFB mode as the basis for the
 * MAC generation.
 * <p>
 * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
 * or 16 bits if being used as a data authenticator (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param cfbBitSize the size of an output block produced by the CFB mode.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @param padding a padding to be used.
 */
public CFBBlockCipherMac(
    BlockCipher         cipher,
    int                 cfbBitSize,
    int                 macSizeInBits,
    BlockCipherPadding  padding)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    mac = new byte[cipher.getBlockSize()];

    this.cipher = new MacCFBBlockCipher(cipher, cfbBitSize);
    this.padding = padding;
    this.macSize = macSizeInBits / 8;

    buf = new byte[this.cipher.getBlockSize()];
    bufOff = 0;
}
项目:ipack    文件:ISO9797Alg3Mac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits. This class uses single DES CBC mode as the basis for the
 * MAC generation. The final block is decrypted and then encrypted using the
 * middle and right part of the key.
 * <p>
 * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
 * or 16 bits if being used as a data authenticator (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @param padding the padding to be used to complete the last block.
 */
public ISO9797Alg3Mac(
    BlockCipher         cipher,
    int                 macSizeInBits,
    BlockCipherPadding  padding)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    if (!(cipher instanceof DESEngine))
    {
        throw new IllegalArgumentException("cipher must be instance of DESEngine");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.padding = padding;
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:ipack    文件:CTSBlockCipher.java   
/**
 * Create a buffered block cipher that uses Cipher Text Stealing
 *
 * @param cipher the underlying block cipher this buffering object wraps.
 */
public CTSBlockCipher(
    BlockCipher     cipher)
{
    if ((cipher instanceof OFBBlockCipher) || (cipher instanceof CFBBlockCipher))
    {
        throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers");
    }

    this.cipher = cipher;

    blockSize = cipher.getBlockSize();

    buf = new byte[blockSize * 2];
    bufOff = 0;
}
项目:ipack    文件:GOFBBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of the
 * counter mode (must have a 64 bit block size).
 */
public GOFBBlockCipher(
    BlockCipher cipher)
{
    this.cipher = cipher;
    this.blockSize = cipher.getBlockSize();

    if (blockSize != 8)
    {
        throw new IllegalArgumentException("GCTR only for 64 bit block ciphers");
    }

    this.IV = new byte[cipher.getBlockSize()];
    this.ofbV = new byte[cipher.getBlockSize()];
    this.ofbOutV = new byte[cipher.getBlockSize()];
}
项目:truevfs    文件:CtrBlockCipherTest.java   
@Test
public void compareModes() {
    BlockCipher engine = new AESEngine();
    int blockSize = engine.getBlockSize();
    BlockCipher ref = new SICBlockCipher(engine); // reference implementation
    BlockCipher uut = new CtrBlockCipher(engine); // unit under test
    PBEParametersGenerator gen = new PKCS5S2ParametersGenerator();
    byte[] salt = new byte[blockSize]; // used as salt and cipher input
    new SecureRandom().nextBytes(salt);
    gen.init("top secret".getBytes(), salt, 1);
    ParametersWithIV
            param = (ParametersWithIV) gen.generateDerivedParameters(
                blockSize * 8,
                blockSize * 8);

    ref.init(true, param);
    uut.init(true, param);
    assertModes(ref, uut);

    ref.init(false, param);
    uut.init(false, param);
    assertModes(ref, uut);
}
项目:KeePass2Android    文件:CTSBlockCipher.java   
/**
 * Create a buffered block cipher that uses Cipher Text Stealing
 *
 * @param cipher the underlying block cipher this buffering object wraps.
 */
public CTSBlockCipher(
    BlockCipher     cipher)
{
    if ((cipher instanceof OFBBlockCipher) || (cipher instanceof CFBBlockCipher))
    {
        throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers");
    }

    this.cipher = cipher;

    blockSize = cipher.getBlockSize();

    buf = new byte[blockSize * 2];
    bufOff = 0;
}
项目:Aki-SSL    文件:CFBBlockCipherMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits. This class uses CFB mode as the basis for the
 * MAC generation.
 * <p>
 * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
 * or 16 bits if being used as a data authenticator (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param cfbBitSize the size of an output block produced by the CFB mode.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @param padding a padding to be used.
 */
public CFBBlockCipherMac(
    BlockCipher         cipher,
    int                 cfbBitSize,
    int                 macSizeInBits,
    BlockCipherPadding  padding)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    mac = new byte[cipher.getBlockSize()];

    this.cipher = new MacCFBBlockCipher(cipher, cfbBitSize);
    this.padding = padding;
    this.macSize = macSizeInBits / 8;

    buf = new byte[this.cipher.getBlockSize()];
    bufOff = 0;
}
项目:gwt-crypto    文件:RFC3211WrapTest.java   
private void encryptBlock(byte[] key, byte[] iv, byte[] cekBlock)
{
    BlockCipher engine = new CBCBlockCipher(new DESEngine());

    engine.init(true, new ParametersWithIV(new KeyParameter(key), iv));

    for (int i = 0; i < cekBlock.length; i += 8)
    {
        engine.processBlock(cekBlock, i, cekBlock, i);
    }

    for (int i = 0; i < cekBlock.length; i += 8)
    {
        engine.processBlock(cekBlock, i, cekBlock, i);
    }
}
项目:Direct-File-Downloader    文件:CTSBlockCipher.java   
/**
    * Create a buffered block cipher that uses Cipher Text Stealing
    *
    * @param cipher the underlying block cipher this buffering object wraps.
    */
public CTSBlockCipher(
       BlockCipher     cipher)
{
       if ((cipher instanceof OFBBlockCipher) || (cipher instanceof CFBBlockCipher))
       {
           throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers");
       }

       this.cipher = cipher;

       blockSize = cipher.getBlockSize();

       buf = new byte[blockSize * 2];
       bufOff = 0;
}
项目:Aki-SSL    文件:BlockCipherMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits.
 * <p>
 * Note: the size of the MAC must be at least 16 bits (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @deprecated use CBCBlockCipherMac
 */
public BlockCipherMac(
    BlockCipher     cipher,
    int             macSizeInBits)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:gwt-crypto    文件:BcUtil.java   
public static PGPDataDecryptor createDataDecryptor(boolean withIntegrityPacket, BlockCipher engine, byte[] key)
{
    final BufferedBlockCipher c = createStreamCipher(false, engine, withIntegrityPacket, key);

    return new PGPDataDecryptor()
    {
        public InputStream getInputStream(InputStream in)
        {
            return new CipherInputStream(in, c);
        }

        public int getBlockSize()
        {
            return c.getBlockSize();
        }

        public PGPDigestCalculator getIntegrityCalculator()
        {
            return new SHA1PGPDigestCalculator();
        }
    };
}
项目:vsDiaryWriter    文件:BlockCiphers.java   
public static BlockCipherEncryptor getEncryptor(String cipher, String mode, String padding) {

        StringBuilder sb = new StringBuilder();
        sb.append(cipher).append("/").append(mode).append("/").append(padding);
        String type = sb.toString();

        BlockCipherEncryptor bc = cache.get(type);
        if (bc == null) {

            BlockCipher engine = getBlockCipherEngine(cipher);
            BlockCipher modeEngine = wrapBlockCipherMode(engine, mode);
            BlockCipherPadding pad = getBlockCipherPadding(padding);

            BCBlockCipherBuilder builder = new BCBlockCipherBuilder();
            builder.setBlockSize(engine.getBlockSize()).setKeySize(getKeySize(cipher)).setCipher(modeEngine)
                    .setPadding(pad);
            bc = builder.build();
            cache.put(type, bc);
        }
        return bc;
    }
项目:gwt-crypto    文件:BlockCipherMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits.
 * <p>
 * Note: the size of the MAC must be at least 16 bits (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @deprecated use CBCBlockCipherMac
 */
public BlockCipherMac(
    BlockCipher     cipher,
    int             macSizeInBits)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:Aki-SSL    文件:BaseBlockCipher.java   
protected BaseBlockCipher(
    BlockCipher engine,
    int scheme,
    int digest,
    int keySizeInBits,
    int ivLength)
{
    baseEngine = engine;

    this.scheme = scheme;
    this.digest = digest;
    this.keySizeInBits = keySizeInBits;
    this.ivLength = ivLength;

    cipher = new BufferedGenericBlockCipher(engine);
}
项目:Aki-SSL    文件:ISO9797Alg3Mac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits. This class uses single DES CBC mode as the basis for the
 * MAC generation. The final block is decrypted and then encrypted using the
 * middle and right part of the key.
 * <p>
 * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
 * or 16 bits if being used as a data authenticator (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8.
 * @param padding the padding to be used to complete the last block.
 */
public ISO9797Alg3Mac(
    BlockCipher         cipher,
    int                 macSizeInBits,
    BlockCipherPadding  padding)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    if (!(cipher instanceof DESEngine))
    {
        throw new IllegalArgumentException("cipher must be instance of DESEngine");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.padding = padding;
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:gwt-crypto    文件:CTSBlockCipher.java   
/**
 * Create a buffered block cipher that uses Cipher Text Stealing
 *
 * @param cipher the underlying block cipher this buffering object wraps.
 */
public CTSBlockCipher(
    BlockCipher     cipher)
{
    if (cipher instanceof StreamBlockCipher)
    {
        throw new IllegalArgumentException("CTSBlockCipher can only accept ECB, or CBC ciphers");
    }

    this.cipher = cipher;

    blockSize = cipher.getBlockSize();

    buf = new byte[blockSize * 2];
    bufOff = 0;
}
项目:keepass2android    文件:JCEBlockCipher.java   
protected JCEBlockCipher(
    BlockCipher engine)
{
    baseEngine = engine;

    cipher = new BufferedGenericBlockCipher(engine);
}
项目:keepass2android    文件:JCEBlockCipher.java   
protected JCEBlockCipher(
    BlockCipher engine,
    int         ivLength)
{
    baseEngine = engine;

    this.cipher = new BufferedGenericBlockCipher(engine);
    this.ivLength = ivLength / 8;
}
项目:keepass2android    文件:JCEStreamCipher.java   
protected JCEStreamCipher(
    BlockCipher engine,
    int         ivLength)
{
    this.ivLength = ivLength;

    cipher = new StreamBlockCipher(engine);
}
项目:keepass2android    文件:CBCBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of chaining.
 */
public CBCBlockCipher(
    BlockCipher cipher)
{
    this.cipher = cipher;
    this.blockSize = cipher.getBlockSize();

    this.IV = new byte[blockSize];
    this.cbcV = new byte[blockSize];
    this.cbcNextV = new byte[blockSize];
}
项目:keepass2android    文件:OFBBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of the
 * feedback mode.
 * @param blockSize the block size in bits (note: a multiple of 8)
 */
public OFBBlockCipher(
    BlockCipher cipher,
    int         blockSize)
{
    this.cipher = cipher;
    this.blockSize = blockSize / 8;

    this.IV = new byte[cipher.getBlockSize()];
    this.ofbV = new byte[cipher.getBlockSize()];
    this.ofbOutV = new byte[cipher.getBlockSize()];
}
项目:keepass2android    文件:CFBBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of the
 * feedback mode.
 * @param bitBlockSize the block size in bits (note: a multiple of 8)
 */
public CFBBlockCipher(
    BlockCipher cipher,
    int         bitBlockSize)
{
    this.cipher = cipher;
    this.blockSize = bitBlockSize / 8;

    this.IV = new byte[cipher.getBlockSize()];
    this.cfbV = new byte[cipher.getBlockSize()];
    this.cfbOutV = new byte[cipher.getBlockSize()];
}
项目:keepass2android    文件:PaddedBufferedBlockCipher.java   
/**
 * Create a buffered block cipher with the desired padding.
 *
 * @param cipher the underlying block cipher this buffering object wraps.
 * @param padding the padding type.
 */
public PaddedBufferedBlockCipher(
    BlockCipher         cipher,
    BlockCipherPadding  padding)
{
    this.cipher = cipher;
    this.padding = padding;

    buf = new byte[cipher.getBlockSize()];
    bufOff = 0;
}
项目:ipack    文件:JCEStreamCipher.java   
protected JCEStreamCipher(
    BlockCipher engine,
    int         ivLength)
{
    this.ivLength = ivLength;

    cipher = new StreamBlockCipher(engine);
}
项目:ipack    文件:BrokenJCEBlockCipher.java   
protected BrokenJCEBlockCipher(
    BlockCipher engine,
    int         pbeType,
    int         pbeHash,
    int         pbeKeySize,
    int         pbeIvSize)
{
    cipher = new PaddedBufferedBlockCipher(engine);

    this.pbeType = pbeType;
    this.pbeHash = pbeHash;
    this.pbeKeySize = pbeKeySize;
    this.pbeIvSize = pbeIvSize;
}
项目:ipack    文件:CMac.java   
/**
 * create a standard MAC based on a block cipher with the size of the
 * MAC been given in bits.
 * <p/>
 * Note: the size of the MAC must be at least 24 bits (FIPS Publication 81),
 * or 16 bits if being used as a data authenticator (FIPS Publication 113),
 * and in general should be less than the size of the block cipher as it reduces
 * the chance of an exhaustive attack (see Handbook of Applied Cryptography).
 *
 * @param cipher        the cipher to be used as the basis of the MAC generation.
 * @param macSizeInBits the size of the MAC in bits, must be a multiple of 8 and <= 128.
 */
public CMac(BlockCipher cipher, int macSizeInBits)
{
    if ((macSizeInBits % 8) != 0)
    {
        throw new IllegalArgumentException("MAC size must be multiple of 8");
    }

    if (macSizeInBits > (cipher.getBlockSize() * 8))
    {
        throw new IllegalArgumentException(
            "MAC size must be less or equal to "
                + (cipher.getBlockSize() * 8));
    }

    if (cipher.getBlockSize() != 8 && cipher.getBlockSize() != 16)
    {
        throw new IllegalArgumentException(
            "Block size must be either 64 or 128 bits");
    }

    this.cipher = new CBCBlockCipher(cipher);
    this.macSize = macSizeInBits / 8;

    mac = new byte[cipher.getBlockSize()];

    buf = new byte[cipher.getBlockSize()];

    ZEROES = new byte[cipher.getBlockSize()];

    bufOff = 0;
}
项目:ipack    文件:CFBBlockCipherMac.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of the
 * feedback mode.
 * @param blockSize the block size in bits (note: a multiple of 8)
 */
public MacCFBBlockCipher(
    BlockCipher         cipher,
    int                 bitBlockSize)
{
    this.cipher = cipher;
    this.blockSize = bitBlockSize / 8;

    this.IV = new byte[cipher.getBlockSize()];
    this.cfbV = new byte[cipher.getBlockSize()];
    this.cfbOutV = new byte[cipher.getBlockSize()];
}
项目:ipack    文件:SP800SecureRandomBuilder.java   
public CTRDRBGProvider(BlockCipher blockCipher, int keySizeInBits, byte[] nonce, byte[] personalizationString, int securityStrength)
{
    this.blockCipher = blockCipher;
    this.keySizeInBits = keySizeInBits;
    this.nonce = nonce;
    this.personalizationString = personalizationString;
    this.securityStrength = securityStrength;
}
项目:ipack    文件:CTRSP800DRBG.java   
/**
 * Construct a SP800-90A CTR DRBG.
 * <p>
 * Minimum entropy requirement is the security strength requested.
 * </p>
 * @param engine underlying block cipher to use to support DRBG
 * @param keySizeInBits size of the key to use with the block cipher.
 * @param securityStrength security strength required (in bits)
 * @param entropySource source of entropy to use for seeding/reseeding.
 * @param personalizationString personalization string to distinguish this DRBG (may be null).
 * @param nonce nonce to further distinguish this DRBG (may be null).
 */
public CTRSP800DRBG(BlockCipher engine, int keySizeInBits, int securityStrength, EntropySource entropySource, byte[] personalizationString, byte[] nonce)
{
    _entropySource = entropySource;
    _engine = engine;     

    _keySizeInBits = keySizeInBits;
    _seedLength = keySizeInBits + engine.getBlockSize() * 8;
    _isTDEA = isTDEA(engine);

    if (securityStrength > 256)
    {
        throw new IllegalArgumentException("Requested security strength is not supported by the derivation function");
    }

    if (getMaxSecurityStrength(engine, keySizeInBits) < securityStrength)
    {
        throw new IllegalArgumentException("Requested security strength is not supported by block cipher and key size");
    }

    if (entropySource.entropySize() < securityStrength)
    {
        throw new IllegalArgumentException("Not enough entropy for security strength required");
    }

    byte[] entropy = entropySource.getEntropy();  // Get_entropy_input

    CTR_DRBG_Instantiate_algorithm(entropy, nonce, personalizationString);
}
项目:ipack    文件:CTRSP800DRBG.java   
private int getMaxSecurityStrength(BlockCipher cipher, int keySizeInBits)
{
    if (isTDEA(cipher) && keySizeInBits == 168)
    {
        return 112;
    }
    if (cipher.getAlgorithmName().equals("AES"))
    {
        return keySizeInBits;
    }

    return -1;
}
项目:ipack    文件:OCBBlockCipher.java   
public OCBBlockCipher(BlockCipher hashCipher, BlockCipher mainCipher)
{
    if (hashCipher == null)
    {
        throw new IllegalArgumentException("'hashCipher' cannot be null");
    }
    if (hashCipher.getBlockSize() != BLOCK_SIZE)
    {
        throw new IllegalArgumentException("'hashCipher' must have a block size of "
            + BLOCK_SIZE);
    }
    if (mainCipher == null)
    {
        throw new IllegalArgumentException("'mainCipher' cannot be null");
    }
    if (mainCipher.getBlockSize() != BLOCK_SIZE)
    {
        throw new IllegalArgumentException("'mainCipher' must have a block size of "
            + BLOCK_SIZE);
    }

    if (!hashCipher.getAlgorithmName().equals(mainCipher.getAlgorithmName()))
    {
        throw new IllegalArgumentException(
            "'hashCipher' and 'mainCipher' must be the same algorithm");
    }

    this.hashCipher = hashCipher;
    this.mainCipher = mainCipher;
}
项目:ipack    文件:CCMBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param c the block cipher to be used.
 */
public CCMBlockCipher(BlockCipher c)
{
    this.cipher = c;
    this.blockSize = c.getBlockSize();
    this.macBlock = new byte[blockSize];

    if (blockSize != 16)
    {
        throw new IllegalArgumentException("cipher required with a block size of 16.");
    }
}
项目:ipack    文件:CBCBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of chaining.
 */
public CBCBlockCipher(
    BlockCipher cipher)
{
    this.cipher = cipher;
    this.blockSize = cipher.getBlockSize();

    this.IV = new byte[blockSize];
    this.cbcV = new byte[blockSize];
    this.cbcNextV = new byte[blockSize];
}
项目:ipack    文件:EAXBlockCipher.java   
/**
 * Constructor that accepts an instance of a block cipher engine.
 *
 * @param cipher the engine to use
 */
public EAXBlockCipher(BlockCipher cipher)
{
    blockSize = cipher.getBlockSize();
    mac = new CMac(cipher);
    macBlock = new byte[blockSize];
    bufBlock = new byte[blockSize * 2];
    associatedTextMac = new byte[mac.getMacSize()];
    nonceMac = new byte[mac.getMacSize()];
    this.cipher = new SICBlockCipher(cipher);
}
项目:ipack    文件:OFBBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of the
 * feedback mode.
 * @param blockSize the block size in bits (note: a multiple of 8)
 */
public OFBBlockCipher(
    BlockCipher cipher,
    int         blockSize)
{
    this.cipher = cipher;
    this.blockSize = blockSize / 8;

    this.IV = new byte[cipher.getBlockSize()];
    this.ofbV = new byte[cipher.getBlockSize()];
    this.ofbOutV = new byte[cipher.getBlockSize()];
}
项目:ipack    文件:OpenPGPCFBBlockCipher.java   
/**
 * Basic constructor.
 *
 * @param cipher the block cipher to be used as the basis of the
 * feedback mode.
 */
public OpenPGPCFBBlockCipher(
    BlockCipher cipher)
{
    this.cipher = cipher;

    this.blockSize = cipher.getBlockSize();
    this.IV = new byte[blockSize];
    this.FR = new byte[blockSize];
    this.FRE = new byte[blockSize];
}