FileDocCategorySizeDatePackage
PKCS5S1ParametersGenerator.javaAPI DocAzureus 3.0.3.43807Tue Jun 08 05:12:58 BST 2004org.bouncycastle.crypto.generators

PKCS5S1ParametersGenerator

public class PKCS5S1ParametersGenerator extends org.bouncycastle.crypto.PBEParametersGenerator
Generator for PBE derived keys and ivs as defined by PKCS 5 V2.0 Scheme 1. Note this generator is limited to the size of the hash produced by the digest used to drive it.

The document this implementation is based on can be found at RSA's PKCS5 Page

Fields Summary
private org.bouncycastle.crypto.Digest
digest
Constructors Summary
public PKCS5S1ParametersGenerator(org.bouncycastle.crypto.Digest digest)
Construct a PKCS 5 Scheme 1 Parameters generator.

param
digest the digest to be used as the source of derived keys.

        this.digest = digest;
    
Methods Summary
private byte[]generateDerivedKey()
the derived key function, the ith hash of the password and the salt.

        byte[] digestBytes = new byte[digest.getDigestSize()];

        digest.update(password, 0, password.length);
        digest.update(salt, 0, salt.length);

        digest.doFinal(digestBytes, 0);
        for (int i = 1; i < iterationCount; i++)
        {
            digest.update(digestBytes, 0, digestBytes.length);
            digest.doFinal(digestBytes, 0);
        }

        return digestBytes;
    
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;

        if (keySize > digest.getDigestSize())
        {
            throw new IllegalArgumentException(
                   "Can't generate a derived key " + keySize + " bytes long.");
        }

        byte[]  dKey = generateDerivedKey();

        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;

        if ((keySize + ivSize) > digest.getDigestSize())
        {
            throw new IllegalArgumentException(
                   "Can't generate a derived key " + (keySize + ivSize) + " bytes long.");
        }

        byte[]  dKey = generateDerivedKey();

        return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize);