summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/PKCS12Key.java82
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);
+ }
+}