diff options
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java')
-rw-r--r-- | bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java b/bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java new file mode 100644 index 00000000..db63ecdb --- /dev/null +++ b/bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java @@ -0,0 +1,82 @@ +package org.bouncycastle.jcajce; + +import org.bouncycastle.crypto.PBEParametersGenerator; + +/** + * 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.. + * + * @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. + * + * @param password password to use. + * @param useWrongZeroLengthConversion use the incorrect encoding approach (add pad bytes) + */ + public PKCS12Key(char[] password, boolean useWrongZeroLengthConversion) + { + 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. + * + * @return a reference to the password array. + */ + public char[] getPassword() + { + return password; + } + + /** + * Return the password based key derivation function this key is for, + * + * @return the string "PKCS12" + */ + public String getAlgorithm() + { + return "PKCS12"; + } + + /** + * 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. + * + * @return the password converted to a byte array. + */ + public byte[] getEncoded() + { + if (useWrongZeroLengthConversion && password.length == 0) + { + return new byte[2]; + } + + return PBEParametersGenerator.PKCS12PasswordToBytes(password); + } +} |