package org.bouncycastle.crypto;
import org.bouncycastle.util.Strings;
super class for all Password Based Encryption (PBE) parameter generator classes.
/**
* super class for all Password Based Encryption (PBE) parameter generator classes.
*/
public abstract class PBEParametersGenerator
{
protected byte[] password;
protected byte[] salt;
protected int iterationCount;
base constructor.
/**
* base constructor.
*/
protected PBEParametersGenerator()
{
}
initialise the PBE generator.
Params: - password – the password converted into bytes (see below).
- salt – the salt to be mixed with the password.
- iterationCount – the number of iterations the "mixing" function
is to be applied for.
/**
* initialise the PBE generator.
*
* @param password the password converted into bytes (see below).
* @param salt the salt to be mixed with the password.
* @param iterationCount the number of iterations the "mixing" function
* is to be applied for.
*/
public void init(
byte[] password,
byte[] salt,
int iterationCount)
{
this.password = password;
this.salt = salt;
this.iterationCount = iterationCount;
}
return the password byte array.
Returns: the password byte array.
/**
* return the password byte array.
*
* @return the password byte array.
*/
public byte[] getPassword()
{
return password;
}
return the salt byte array.
Returns: the salt byte array.
/**
* return the salt byte array.
*
* @return the salt byte array.
*/
public byte[] getSalt()
{
return salt;
}
return the iteration count.
Returns: the iteration count.
/**
* return the iteration count.
*
* @return the iteration count.
*/
public int getIterationCount()
{
return iterationCount;
}
generate derived parameters for a key of length keySize.
Params: - keySize – the length, in bits, of the key required.
Returns: a parameters object representing a key.
/**
* generate derived parameters for a key of length keySize.
*
* @param keySize the length, in bits, of the key required.
* @return a parameters object representing a key.
*/
public abstract CipherParameters generateDerivedParameters(int keySize);
generate derived parameters for a key of length keySize, and
an initialisation vector (IV) of length ivSize.
Params: - keySize – the length, in bits, of the key required.
- ivSize – the length, in bits, of the iv required.
Returns: a parameters object representing a key and an IV.
/**
* generate derived parameters for a key of length keySize, and
* an initialisation vector (IV) of length ivSize.
*
* @param keySize the length, in bits, of the key required.
* @param ivSize the length, in bits, of the iv required.
* @return a parameters object representing a key and an IV.
*/
public abstract CipherParameters generateDerivedParameters(int keySize, int ivSize);
generate derived parameters for a key of length keySize, specifically
for use with a MAC.
Params: - keySize – the length, in bits, of the key required.
Returns: a parameters object representing a key.
/**
* generate derived parameters for a key of length keySize, specifically
* for use with a MAC.
*
* @param keySize the length, in bits, of the key required.
* @return a parameters object representing a key.
*/
public abstract CipherParameters generateDerivedMacParameters(int keySize);
converts a password to a byte array according to the scheme in
PKCS5 (ascii, no padding)
Params: - password – a character array reqpresenting the password.
Returns: a byte array representing the password.
/**
* converts a password to a byte array according to the scheme in
* PKCS5 (ascii, no padding)
*
* @param password a character array reqpresenting the password.
* @return a byte array representing the password.
*/
public static byte[] PKCS5PasswordToBytes(
char[] password)
{
byte[] bytes = new byte[password.length];
for (int i = 0; i != bytes.length; i++)
{
bytes[i] = (byte)password[i];
}
return bytes;
}
converts a password to a byte array according to the scheme in
PKCS5 (UTF-8, no padding)
Params: - password – a character array reqpresenting the password.
Returns: a byte array representing the password.
/**
* converts a password to a byte array according to the scheme in
* PKCS5 (UTF-8, no padding)
*
* @param password a character array reqpresenting the password.
* @return a byte array representing the password.
*/
public static byte[] PKCS5PasswordToUTF8Bytes(
char[] password)
{
return Strings.toUTF8ByteArray(password);
}
converts a password to a byte array according to the scheme in
PKCS12 (unicode, big endian, 2 zero pad bytes at the end).
Params: - password – a character array representing the password.
Returns: a byte array representing the password.
/**
* converts a password to a byte array according to the scheme in
* PKCS12 (unicode, big endian, 2 zero pad bytes at the end).
*
* @param password a character array representing the password.
* @return a byte array representing the password.
*/
public static byte[] PKCS12PasswordToBytes(
char[] password)
{
if (password.length > 0)
{
// +1 for extra 2 pad bytes.
byte[] bytes = new byte[(password.length + 1) * 2];
for (int i = 0; i != password.length; i ++)
{
bytes[i * 2] = (byte)(password[i] >>> 8);
bytes[i * 2 + 1] = (byte)password[i];
}
return bytes;
}
else
{
return new byte[0];
}
}
}