FileDocCategorySizeDatePackage
OpenSSLPBEParametersGenerator.javaAPI DocAndroid 1.5 API3883Wed May 06 22:41:06 BST 2009org.bouncycastle.crypto.generators

OpenSSLPBEParametersGenerator

public class OpenSSLPBEParametersGenerator extends org.bouncycastle.crypto.PBEParametersGenerator
Generator for PBE derived keys and ivs as usd by OpenSSL.

The scheme is a simple extension of PKCS 5 V2.0 Scheme 1 using MD5 with an iteration count of 1.

Fields Summary
private org.bouncycastle.crypto.Digest
digest
Constructors Summary
public OpenSSLPBEParametersGenerator()
Construct a OpenSSL Parameters generator.


               
     
    
    
Methods Summary
private byte[]generateDerivedKey(int bytesNeeded)
the derived key function, the ith hash of the password and the salt.

        byte[]  buf = new byte[digest.getDigestSize()];
        byte[]  key = new byte[bytesNeeded];
        int     offset = 0;
        
        for (;;)
        {
            digest.update(password, 0, password.length);
            digest.update(salt, 0, salt.length);

            digest.doFinal(buf, 0);
            
            int len = (bytesNeeded > buf.length) ? buf.length : bytesNeeded;
            System.arraycopy(buf, 0, key, offset, len);
            offset += len;

            // check if we need any more
            bytesNeeded -= len;
            if (bytesNeeded == 0)
            {
                break;
            }

            // do another round
            digest.reset();
            digest.update(buf, 0, buf.length);
        }
        
        return key;
    
public org.bouncycastle.crypto.CipherParametersgenerateDerivedMacParameters(int keySize)
Generate a key parameter for use with a MAC derived from the password, salt, and iteration count we are currently initialised with.

param
keySize the size of the key we want (in bits)
return
a KeyParameter object.
exception
IllegalArgumentException if the key length larger than the base hash size.

        return generateDerivedParameters(keySize);
    
public org.bouncycastle.crypto.CipherParametersgenerateDerivedParameters(int keySize)
Generate a key parameter derived from the password, salt, and iteration count we are currently initialised with.

param
keySize the size of the key we want (in bits)
return
a KeyParameter object.
exception
IllegalArgumentException if the key length larger than the base hash size.

        keySize = keySize / 8;

        byte[]  dKey = generateDerivedKey(keySize);

        return new KeyParameter(dKey, 0, keySize);
    
public org.bouncycastle.crypto.CipherParametersgenerateDerivedParameters(int keySize, int ivSize)
Generate a key with initialisation vector parameter derived from the password, salt, and iteration count we are currently initialised with.

param
keySize the size of the key we want (in bits)
param
ivSize the size of the iv we want (in bits)
return
a ParametersWithIV object.
exception
IllegalArgumentException if keySize + ivSize is larger than the base hash size.

        keySize = keySize / 8;
        ivSize = ivSize / 8;

        byte[]  dKey = generateDerivedKey(keySize + ivSize);

        return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize);
    
public voidinit(byte[] password, byte[] salt)
Initialise - note the iteration count for this algorithm is fixed at 1.

param
password password to use.
param
salt salt to use.

        super.init(password, salt, 1);