summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2013-05-24 19:14:15 -0700
committerBrian Carlstrom <bdc@google.com>2013-06-03 14:01:40 -0700
commita198e1ecc615e26a167d0f2dca9fa7e5fc62de10 (patch)
tree6ac741d0b1ccd61f033299754a0b9a3a54985e18 /bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest
parent67e643cbf3cff776bf1a8fe1ea50a14ccf2d41e4 (diff)
downloadandroid_external_bouncycastle-a198e1ecc615e26a167d0f2dca9fa7e5fc62de10.tar.gz
android_external_bouncycastle-a198e1ecc615e26a167d0f2dca9fa7e5fc62de10.tar.bz2
android_external_bouncycastle-a198e1ecc615e26a167d0f2dca9fa7e5fc62de10.zip
bouncycastle 1.49 upgrade
Change-Id: Icbf5a147409c810060a5acc884834fb2a778e860
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/MD5.java11
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java129
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA256.java33
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA384.java26
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA512.java123
5 files changed, 310 insertions, 12 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/MD5.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/MD5.java
index 6834e3c..93a7d71 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/MD5.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/MD5.java
@@ -7,15 +7,20 @@ import org.bouncycastle.crypto.digests.MD5Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
-import org.bouncycastle.jce.provider.JCEMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
public class MD5
{
+ private MD5()
+ {
+
+ }
+
/**
- * MD5 HMac
+ * MD5 HashMac
*/
public static class HashMac
- extends JCEMac
+ extends BaseMac
{
public HashMac()
{
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java
index 2a9eceb..df5d41a 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA1.java
@@ -1,17 +1,33 @@
package org.bouncycastle.jcajce.provider.digest;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.KeySpec;
+
+import javax.crypto.SecretKey;
+import javax.crypto.spec.PBEKeySpec;
+
import org.bouncycastle.asn1.iana.IANAObjectIdentifiers;
import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.crypto.CipherKeyGenerator;
+import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.digests.SHA1Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
+import org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
-import org.bouncycastle.jce.provider.JCEMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.BaseSecretKeyFactory;
+import org.bouncycastle.jcajce.provider.symmetric.util.PBE;
+import org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory;
public class SHA1
{
+ private SHA1()
+ {
+
+ }
+
static public class Digest
extends BCMessageDigest
implements Cloneable
@@ -35,7 +51,7 @@ public class SHA1
* SHA1 HMac
*/
public static class HashMac
- extends JCEMac
+ extends BaseMac
{
public HashMac()
{
@@ -52,6 +68,103 @@ public class SHA1
}
}
+ /**
+ * SHA1 HMac
+ */
+ public static class SHA1Mac
+ extends BaseMac
+ {
+ public SHA1Mac()
+ {
+ super(new HMac(new SHA1Digest()));
+ }
+ }
+
+ /**
+ * PBEWithHmacSHA
+ */
+ public static class PBEWithMacKeyFactory
+ extends PBESecretKeyFactory
+ {
+ public PBEWithMacKeyFactory()
+ {
+ super("PBEwithHmacSHA", null, false, PKCS12, SHA1, 160, 0);
+ }
+ }
+
+
+ public static class BasePBKDF2WithHmacSHA1
+ extends BaseSecretKeyFactory
+ {
+ private int scheme;
+
+ public BasePBKDF2WithHmacSHA1(String name, int scheme)
+ {
+ super(name, PKCSObjectIdentifiers.id_PBKDF2);
+
+ this.scheme = scheme;
+ }
+
+ protected SecretKey engineGenerateSecret(
+ KeySpec keySpec)
+ throws InvalidKeySpecException
+ {
+ if (keySpec instanceof PBEKeySpec)
+ {
+ PBEKeySpec pbeSpec = (PBEKeySpec)keySpec;
+
+ if (pbeSpec.getSalt() == null)
+ {
+ throw new InvalidKeySpecException("missing required salt");
+ }
+
+ if (pbeSpec.getIterationCount() <= 0)
+ {
+ throw new InvalidKeySpecException("positive iteration count required: "
+ + pbeSpec.getIterationCount());
+ }
+
+ if (pbeSpec.getKeyLength() <= 0)
+ {
+ throw new InvalidKeySpecException("positive key length required: "
+ + pbeSpec.getKeyLength());
+ }
+
+ if (pbeSpec.getPassword().length == 0)
+ {
+ throw new IllegalArgumentException("password empty");
+ }
+
+ int digest = SHA1;
+ int keySize = pbeSpec.getKeyLength();
+ int ivSize = -1; // JDK 1,2 and earlier does not understand simplified version.
+ CipherParameters param = PBE.Util.makePBEMacParameters(pbeSpec, scheme, digest, keySize);
+
+ return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, param);
+ }
+
+ throw new InvalidKeySpecException("Invalid KeySpec");
+ }
+ }
+
+ public static class PBKDF2WithHmacSHA1UTF8
+ extends BasePBKDF2WithHmacSHA1
+ {
+ public PBKDF2WithHmacSHA1UTF8()
+ {
+ super("PBKDF2WithHmacSHA1", PKCS5S2_UTF8);
+ }
+ }
+
+ public static class PBKDF2WithHmacSHA18BIT
+ extends BasePBKDF2WithHmacSHA1
+ {
+ public PBKDF2WithHmacSHA18BIT()
+ {
+ super("PBKDF2WithHmacSHA1And8bit", PKCS5S2);
+ }
+ }
+
public static class Mappings
extends DigestAlgorithmProvider
{
@@ -71,6 +184,18 @@ public class SHA1
addHMACAlgorithm(provider, "SHA1", PREFIX + "$HashMac", PREFIX + "$KeyGenerator");
addHMACAlias(provider, "SHA1", PKCSObjectIdentifiers.id_hmacWithSHA1);
addHMACAlias(provider, "SHA1", IANAObjectIdentifiers.hmacSHA1);
+
+ provider.addAlgorithm("Mac.PBEWITHHMACSHA", PREFIX + "$SHA1Mac");
+ provider.addAlgorithm("Mac.PBEWITHHMACSHA1", PREFIX + "$SHA1Mac");
+ provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHHMACSHA", "PBEWITHHMACSHA1");
+ provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + OIWObjectIdentifiers.idSHA1, "PBEWITHHMACSHA1");
+ provider.addAlgorithm("Alg.Alias.Mac." + OIWObjectIdentifiers.idSHA1, "PBEWITHHMACSHA");
+
+ provider.addAlgorithm("SecretKeyFactory.PBEWITHHMACSHA1", PREFIX + "$PBEWithMacKeyFactory");
+ provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA1", PREFIX + "$PBKDF2WithHmacSHA1UTF8");
+ provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.id_PBKDF2, "PBKDF2WithHmacSHA1");
+ provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBKDF2WithHmacSHA1AndUTF8", "PBKDF2WithHmacSHA1");
+ provider.addAlgorithm("SecretKeyFactory.PBKDF2WithHmacSHA1And8BIT", PREFIX + "$PBKDF2WithHmacSHA18BIT");
}
}
}
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA256.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA256.java
index 4e25c39..4504f30 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA256.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA256.java
@@ -7,10 +7,16 @@ import org.bouncycastle.crypto.digests.SHA256Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
-import org.bouncycastle.jce.provider.JCEMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory;
public class SHA256
{
+ private SHA256()
+ {
+
+ }
+
static public class Digest
extends BCMessageDigest
implements Cloneable
@@ -31,7 +37,7 @@ public class SHA256
}
public static class HashMac
- extends JCEMac
+ extends BaseMac
{
public HashMac()
{
@@ -39,7 +45,21 @@ public class SHA256
}
}
- /**
+ // BEGIN android-removed
+ // /**
+ // * PBEWithHmacSHA
+ // */
+ // public static class PBEWithMacKeyFactory
+ // extends PBESecretKeyFactory
+ // {
+ // public PBEWithMacKeyFactory()
+ // {
+ // super("PBEwithHmacSHA256", null, false, PKCS12, SHA256, 256, 0);
+ // }
+ // }
+ // END android-removed
+
+ /**
* HMACSHA256
*/
public static class KeyGenerator
@@ -66,8 +86,15 @@ public class SHA256
provider.addAlgorithm("Alg.Alias.MessageDigest.SHA256", "SHA-256");
provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha256, "SHA-256");
+ // BEGIN android-removed
+ // provider.addAlgorithm("SecretKeyFactory.PBEWITHHMACSHA256", PREFIX + "$PBEWithMacKeyFactory");
+ // provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHHMACSHA-256", "PBEWITHHMACSHA256");
+ // provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + NISTObjectIdentifiers.id_sha256, "PBEWITHHMACSHA256");
+ // END android-removed
+
addHMACAlgorithm(provider, "SHA256", PREFIX + "$HashMac", PREFIX + "$KeyGenerator");
addHMACAlias(provider, "SHA256", PKCSObjectIdentifiers.id_hmacWithSHA256);
+ addHMACAlias(provider, "SHA256", NISTObjectIdentifiers.id_sha256);
}
}
}
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA384.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA384.java
index c724310..e563579 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA384.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA384.java
@@ -5,12 +5,20 @@ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.crypto.CipherKeyGenerator;
import org.bouncycastle.crypto.digests.SHA384Digest;
import org.bouncycastle.crypto.macs.HMac;
+// BEGIN android-removed
+// import org.bouncycastle.crypto.macs.OldHMac;
+// END android-removed
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
-import org.bouncycastle.jce.provider.JCEMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
public class SHA384
{
+ private SHA384()
+ {
+
+ }
+
static public class Digest
extends BCMessageDigest
implements Cloneable
@@ -31,7 +39,7 @@ public class SHA384
}
public static class HashMac
- extends JCEMac
+ extends BaseMac
{
public HashMac()
{
@@ -51,6 +59,17 @@ public class SHA384
}
}
+ // BEGIN android-removed
+ // public static class OldSHA384
+ // extends BaseMac
+ // {
+ // public OldSHA384()
+ // {
+ // super(new OldHMac(new SHA384Digest()));
+ // }
+ // }
+ // END android-removed
+
public static class Mappings
extends DigestAlgorithmProvider
{
@@ -65,6 +84,9 @@ public class SHA384
provider.addAlgorithm("MessageDigest.SHA-384", PREFIX + "$Digest");
provider.addAlgorithm("Alg.Alias.MessageDigest.SHA384", "SHA-384");
provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha384, "SHA-384");
+ // BEGIN android-removed
+ // provider.addAlgorithm("Mac.OLDHMACSHA384", PREFIX + "$OldSHA384");
+ // END android-removed
addHMACAlgorithm(provider, "SHA384", PREFIX + "$HashMac", PREFIX + "$KeyGenerator");
addHMACAlias(provider, "SHA384", PKCSObjectIdentifiers.id_hmacWithSHA384);
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA512.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA512.java
index cae9e7b..903eec1 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA512.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/digest/SHA512.java
@@ -4,13 +4,24 @@ import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
import org.bouncycastle.crypto.CipherKeyGenerator;
import org.bouncycastle.crypto.digests.SHA512Digest;
+// BEGIN android-removed
+// import org.bouncycastle.crypto.digests.SHA512tDigest;
+// END android-removed
import org.bouncycastle.crypto.macs.HMac;
+// BEGIN android-removed
+// import org.bouncycastle.crypto.macs.OldHMac;
+// END android-removed
import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
-import org.bouncycastle.jce.provider.JCEMac;
+import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
public class SHA512
{
+ private SHA512()
+ {
+
+ }
+
static public class Digest
extends BCMessageDigest
implements Cloneable
@@ -30,8 +41,47 @@ public class SHA512
}
}
+ // BEGIN android-removed
+ // static public class DigestT
+ // extends BCMessageDigest
+ // implements Cloneable
+ // {
+ // public DigestT(int bitLength)
+ // {
+ // super(new SHA512tDigest(bitLength));
+ // }
+ //
+ // public Object clone()
+ // throws CloneNotSupportedException
+ // {
+ // DigestT d = (DigestT)super.clone();
+ // d.digest = new SHA512tDigest((SHA512tDigest)digest);
+ //
+ // return d;
+ // }
+ // }
+ //
+ // static public class DigestT224
+ // extends DigestT
+ // {
+ // public DigestT224()
+ // {
+ // super(224);
+ // }
+ // }
+ //
+ // static public class DigestT256
+ // extends DigestT
+ // {
+ // public DigestT256()
+ // {
+ // super(256);
+ // }
+ // }
+ // END android-removed
+
public static class HashMac
- extends JCEMac
+ extends BaseMac
{
public HashMac()
{
@@ -39,6 +89,38 @@ public class SHA512
}
}
+ // BEGIN android-removed
+ // public static class HashMacT224
+ // extends BaseMac
+ // {
+ // public HashMacT224()
+ // {
+ // super(new HMac(new SHA512tDigest(224)));
+ // }
+ // }
+ //
+ // public static class HashMacT256
+ // extends BaseMac
+ // {
+ // public HashMacT256()
+ // {
+ // super(new HMac(new SHA512tDigest(256)));
+ // }
+ // }
+ //
+ // /**
+ // * SHA-512 HMac
+ // */
+ // public static class OldSHA512
+ // extends BaseMac
+ // {
+ // public OldSHA512()
+ // {
+ // super(new OldHMac(new SHA512Digest()));
+ // }
+ // }
+ // END android-removed
+
/**
* HMACSHA512
*/
@@ -51,6 +133,26 @@ public class SHA512
}
}
+ // BEGIN android-removed
+ // public static class KeyGeneratorT224
+ // extends BaseKeyGenerator
+ // {
+ // public KeyGeneratorT224()
+ // {
+ // super("HMACSHA512/224", 224, new CipherKeyGenerator());
+ // }
+ // }
+ //
+ // public static class KeyGeneratorT256
+ // extends BaseKeyGenerator
+ // {
+ // public KeyGeneratorT256()
+ // {
+ // super("HMACSHA512/256", 256, new CipherKeyGenerator());
+ // }
+ // }
+ // END android-removed
+
public static class Mappings
extends DigestAlgorithmProvider
{
@@ -66,8 +168,25 @@ public class SHA512
provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512", "SHA-512");
provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512, "SHA-512");
+ // BEGIN android-removed
+ // provider.addAlgorithm("MessageDigest.SHA-512/224", PREFIX + "$DigestT224");
+ // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512/224", "SHA-512/224");
+ // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_224, "SHA-512/224");
+ //
+ // provider.addAlgorithm("MessageDigest.SHA-512/256", PREFIX + "$DigestT256");
+ // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512256", "SHA-512/256");
+ // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_256, "SHA-512/256");
+ //
+ // provider.addAlgorithm("Mac.OLDHMACSHA512", PREFIX + "$OldSHA512");
+ // END android-removed
+
addHMACAlgorithm(provider, "SHA512", PREFIX + "$HashMac", PREFIX + "$KeyGenerator");
addHMACAlias(provider, "SHA512", PKCSObjectIdentifiers.id_hmacWithSHA512);
+
+ // BEGIN android-removed
+ // addHMACAlgorithm(provider, "SHA512/224", PREFIX + "$HashMacT224", PREFIX + "$KeyGeneratorT224");
+ // addHMACAlgorithm(provider, "SHA512/256", PREFIX + "$HashMacT256", PREFIX + "$KeyGeneratorT256");
+ // END android-removed
}
}