diff options
Diffstat (limited to 'libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/generators/PKCS5S2ParametersGenerator.java')
-rw-r--r-- | libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/generators/PKCS5S2ParametersGenerator.java | 153 |
1 files changed, 0 insertions, 153 deletions
diff --git a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/generators/PKCS5S2ParametersGenerator.java b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/generators/PKCS5S2ParametersGenerator.java deleted file mode 100644 index 59b5a187c..000000000 --- a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/generators/PKCS5S2ParametersGenerator.java +++ /dev/null @@ -1,153 +0,0 @@ -package org.spongycastle.crypto.generators; - -import org.spongycastle.crypto.CipherParameters; -import org.spongycastle.crypto.Digest; -import org.spongycastle.crypto.Mac; -import org.spongycastle.crypto.PBEParametersGenerator; -import org.spongycastle.crypto.digests.SHA1Digest; -import org.spongycastle.crypto.macs.HMac; -import org.spongycastle.crypto.params.KeyParameter; -import org.spongycastle.crypto.params.ParametersWithIV; - -/** - * Generator for PBE derived keys and ivs as defined by PKCS 5 V2.0 Scheme 2. - * This generator uses a SHA-1 HMac as the calculation function. - * <p> - * The document this implementation is based on can be found at - * <a href=http://www.rsasecurity.com/rsalabs/pkcs/pkcs-5/index.html> - * RSA's PKCS5 Page</a> - */ -public class PKCS5S2ParametersGenerator - extends PBEParametersGenerator -{ - private Mac hMac; - private byte[] state; - - /** - * construct a PKCS5 Scheme 2 Parameters generator. - */ - public PKCS5S2ParametersGenerator() - { - this(new SHA1Digest()); - } - - public PKCS5S2ParametersGenerator(Digest digest) - { - hMac = new HMac(digest); - state = new byte[hMac.getMacSize()]; - } - - private void F( - byte[] S, - int c, - byte[] iBuf, - byte[] out, - int outOff) - { - if (c == 0) - { - throw new IllegalArgumentException("iteration count must be at least 1."); - } - - if (S != null) - { - hMac.update(S, 0, S.length); - } - - hMac.update(iBuf, 0, iBuf.length); - hMac.doFinal(state, 0); - - System.arraycopy(state, 0, out, outOff, state.length); - - for (int count = 1; count < c; count++) - { - hMac.update(state, 0, state.length); - hMac.doFinal(state, 0); - - for (int j = 0; j != state.length; j++) - { - out[outOff + j] ^= state[j]; - } - } - } - - private byte[] generateDerivedKey( - int dkLen) - { - int hLen = hMac.getMacSize(); - int l = (dkLen + hLen - 1) / hLen; - byte[] iBuf = new byte[4]; - byte[] outBytes = new byte[l * hLen]; - int outPos = 0; - - CipherParameters param = new KeyParameter(password); - - hMac.init(param); - - for (int i = 1; i <= l; i++) - { - // Increment the value in 'iBuf' - int pos = 3; - while (++iBuf[pos] == 0) - { - --pos; - } - - F(salt, iterationCount, iBuf, outBytes, outPos); - outPos += hLen; - } - - return outBytes; - } - - /** - * Generate a key parameter derived from the password, salt, and iteration - * count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - */ - public CipherParameters generateDerivedParameters( - int keySize) - { - keySize = keySize / 8; - - byte[] dKey = generateDerivedKey(keySize); - - return new KeyParameter(dKey, 0, keySize); - } - - /** - * Generate a key with initialisation vector parameter derived from - * the password, salt, and iteration count we are currently initialised - * with. - * - * @param keySize the size of the key we want (in bits) - * @param ivSize the size of the iv we want (in bits) - * @return a ParametersWithIV object. - */ - public CipherParameters generateDerivedParameters( - int keySize, - int ivSize) - { - keySize = keySize / 8; - ivSize = ivSize / 8; - - byte[] dKey = generateDerivedKey(keySize + ivSize); - - return new ParametersWithIV(new KeyParameter(dKey, 0, keySize), dKey, keySize, ivSize); - } - - /** - * Generate a key parameter for use with a MAC derived from the password, - * salt, and iteration count we are currently initialised with. - * - * @param keySize the size of the key we want (in bits) - * @return a KeyParameter object. - */ - public CipherParameters generateDerivedMacParameters( - int keySize) - { - return generateDerivedParameters(keySize); - } -} |