package org.bouncycastle.jcajce;

import org.bouncycastle.crypto.PBEParametersGenerator;

A password based key for use with PKCS#12.
/** * A password based key for use with PKCS#12. */
public class PKCS12Key implements PBKDFKey { private final char[] password; private final boolean useWrongZeroLengthConversion;
Basic constructor for a password based key - secret key generation parameters will be passed separately..
Params:
  • password – password to use.
/** * Basic constructor for a password based key - secret key generation parameters will be passed separately.. * * @param password password to use. */
public PKCS12Key(char[] password) { this(password, false); }
Unfortunately there seems to be some confusion about how to handle zero length passwords.
Params:
  • password – password to use.
  • useWrongZeroLengthConversion – use the incorrect encoding approach (add pad bytes)
/** * Unfortunately there seems to be some confusion about how to handle zero length * passwords. * * @param password password to use. * @param useWrongZeroLengthConversion use the incorrect encoding approach (add pad bytes) */
public PKCS12Key(char[] password, boolean useWrongZeroLengthConversion) { if (password == null) { password = new char[0]; } this.password = new char[password.length]; this.useWrongZeroLengthConversion = useWrongZeroLengthConversion; System.arraycopy(password, 0, this.password, 0, password.length); }
Return a reference to the char[] array holding the password.
Returns:a reference to the password array.
/** * Return a reference to the char[] array holding the password. * * @return a reference to the password array. */
public char[] getPassword() { return password; }
Return the password based key derivation function this key is for,
Returns:the string "PKCS12"
/** * Return the password based key derivation function this key is for, * * @return the string "PKCS12" */
public String getAlgorithm() { return "PKCS12"; }
Return the format encoding.
Returns:the string "PKCS12", representing the char[] to byte[] conversion.
/** * Return the format encoding. * * @return the string "PKCS12", representing the char[] to byte[] conversion. */
public String getFormat() { return "PKCS12"; }
Return the password converted to bytes.
Returns:the password converted to a byte array.
/** * Return the password converted to bytes. * * @return the password converted to a byte array. */
public byte[] getEncoded() { if (useWrongZeroLengthConversion && password.length == 0) { return new byte[2]; } return PBEParametersGenerator.PKCS12PasswordToBytes(password); } }