aboutsummaryrefslogtreecommitdiffstats
path: root/libraries/spongycastle/jce/src/main/java/javax/crypto/spec/PBEKeySpec.java
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/spongycastle/jce/src/main/java/javax/crypto/spec/PBEKeySpec.java')
-rw-r--r--libraries/spongycastle/jce/src/main/java/javax/crypto/spec/PBEKeySpec.java222
1 files changed, 0 insertions, 222 deletions
diff --git a/libraries/spongycastle/jce/src/main/java/javax/crypto/spec/PBEKeySpec.java b/libraries/spongycastle/jce/src/main/java/javax/crypto/spec/PBEKeySpec.java
deleted file mode 100644
index 3727031bc..000000000
--- a/libraries/spongycastle/jce/src/main/java/javax/crypto/spec/PBEKeySpec.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package javax.crypto.spec;
-
-import java.security.spec.KeySpec;
-
-import javax.crypto.SecretKeyFactory;
-
-/**
- * A user-chosen password that can be used with password-based encryption (PBE).
- * <p>
- * The password can be viewed as some kind of raw key material, from which the
- * encryption mechanism that uses it derives a cryptographic key.
- * <p>
- * Different PBE mechanisms may consume different bits of each password
- * character. For example, the PBE mechanism defined in PKCS #5 looks at only
- * the low order 8 bits of each character, whereas PKCS #12 looks at all 16 bits
- * of each character.
- * <p>
- * You convert the password characters to a PBE key by creating an instance of
- * the appropriate secret-key factory. For example, a secret-key factory for
- * PKCS #5 will construct a PBE key from only the low order 8 bits of each
- * password character, whereas a secret-key factory for PKCS #12 will take all
- * 16 bits of each character.
- * <p>
- * Also note that this class stores passwords as char arrays instead of String
- * objects (which would seem more logical), because the String class is
- * immutable and there is no way to overwrite its internal value when the
- * password stored in it is no longer needed. Hence, this class requests the
- * password as a char array, so it can be overwritten when done.
- *
- * @see SecretKeyFactory
- * @see PBEParameterSpec
- */
-public class PBEKeySpec
- implements KeySpec
-{
-
- private char[] password;
-
- private byte[] salt;
-
- private int iterationCount;
-
- private int keyLength;
-
- private boolean isPasswordCleared;
-
- /**
- * Constructor that takes a password. An empty char[] is used if null is
- * specified.
- * <p>
- * Note: password is cloned before it is stored in the new PBEKeySpec
- * object.
- *
- * @param password -
- * the password.
- */
- public PBEKeySpec(char[] password)
- {
- if (password == null)
- {
- this.password = new char[0];
- }
- else
- {
- this.password = new char[password.length];
-
- System.arraycopy(password, 0, this.password, 0, password.length);
- }
- }
-
- /**
- * Returns a copy of the password.
- * <p>
- * Note: this method returns a copy of the password. It is the caller's
- * responsibility to zero out the password information after it is no longer
- * needed.
- *
- * @return the password
- * @throws IllegalStateException -
- * if password has been cleared by calling clearPassword method.
- */
- public final char[] getPassword()
- {
- if (isPasswordCleared)
- {
- throw new IllegalStateException("Password has been cleared");
- }
- return password;
- }
-
- /**
- * Constructor that takes a password, salt, iteration count, and
- * to-be-derived key length for generating PBEKey of variable-key-size PBE
- * ciphers. An empty char[] is used if null is specified for password.
- * <p>
- * Note: the password and salt are cloned before they are stored in the new
- * PBEKeySpec object.
- *
- *
- * @param password
- * password - the password.
- * @param salt
- * salt - the salt.
- * @param iterationCount
- * iterationCount - the iteration count.
- * @param keyLength
- * keyLength - the to-be-derived key length.
- * @throws NullPointerException -
- * if salt is null.
- * @throws IllegalArgumentException -
- * if salt is empty, i.e. 0-length, iterationCount or keyLength
- * is not positive.
- */
- public PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
- {
- this(password);
- if (salt == null)
- {
- throw new NullPointerException("salt is null");
- }
- if (salt.length == 0)
- {
- throw new IllegalArgumentException("salt is empty");
- }
- if (iterationCount < 0)
- {
- throw new IllegalArgumentException("iterationCount is not positive");
- }
- if (keyLength < 0)
- {
- throw new IllegalArgumentException("keyLength is not positive");
- }
- this.keyLength = keyLength;
- this.iterationCount = iterationCount;
- this.salt = (byte[]) salt.clone();
- }
-
- /**
- * Constructor that takes a password, salt, iteration count for generating
- * PBEKey of fixed-key-size PBE ciphers. An empty char[] is used if null is
- * specified for password.
- * <p>
- * Note: the password and salt are cloned before they are stored in the new
- * PBEKeySpec object.
- *
- * @param password -
- * the password.
- * @param salt -
- * the salt.
- * @param iterationCount -
- * the iteration count.
- * @throws NullPointerException -
- * if salt is null.
- * @throws IllegalArgumentException -
- * if salt is empty, i.e. 0-length, or iterationCount is not
- * positive.
- */
- public PBEKeySpec(char[] password, byte[] salt, int iterationCount)
- {
- this(password, salt, iterationCount, 0);
- }
-
- /**
- * Clears the internal copy of the password.
- */
- public final void clearPassword()
- {
- for (int i = 0; i < password.length; i++)
- {
- password[i] = 0;
- }
- password = null;
- isPasswordCleared = true;
- }
-
- /**
- * Returns a copy of the salt or null if not specified.
- *
- * Note: this method should return a copy of the salt. It is the caller's
- * responsibility to zero out the salt information after it is no longer
- * needed.
- *
- * @return the salt.
- */
- public final byte[] getSalt()
- {
- if (salt != null)
- {
- byte[] tmp = new byte[salt.length];
-
- System.arraycopy(salt, 0, tmp, 0, salt.length);
-
- return tmp;
- }
-
- return null;
- }
-
- /**
- * Returns the iteration count or 0 if not specified.
- *
- * @return the iteration count.
- */
- public final int getIterationCount()
- {
- return iterationCount;
- }
-
- /**
- * Returns the to-be-derived key length or 0 if not specified.
- * <p>
- * Note: this is used to indicate the preference on key length for
- * variable-key-size ciphers. The actual key size depends on each provider's
- * implementation.
- *
- * @return the to-be-derived key length.
- */
- public final int getKeyLength()
- {
- return keyLength;
- }
-}