summaryrefslogtreecommitdiffstats
path: root/patches
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2012-09-04 22:37:51 -0700
committerBrian Carlstrom <bdc@google.com>2012-09-10 17:12:56 -0700
commit4c111300c39cb2e27f07fc2ae3b00e23ed4443b2 (patch)
tree09f7bc25efefbfb90b4af3334f4c691eab0ea727 /patches
parentd74998611292b4682daa644b5eefc3b61c0898a6 (diff)
downloadandroid_external_bouncycastle-4c111300c39cb2e27f07fc2ae3b00e23ed4443b2.tar.gz
android_external_bouncycastle-4c111300c39cb2e27f07fc2ae3b00e23ed4443b2.tar.bz2
android_external_bouncycastle-4c111300c39cb2e27f07fc2ae3b00e23ed4443b2.zip
bouncycastle 1.47 upgrade
Change-Id: I601cc0dd434897d48c79abb67e9f833159135cce
Diffstat (limited to 'patches')
-rw-r--r--patches/README2
-rw-r--r--patches/android.patch12399
2 files changed, 5454 insertions, 6947 deletions
diff --git a/patches/README b/patches/README
index c0f5697..fa4c751 100644
--- a/patches/README
+++ b/patches/README
@@ -16,7 +16,6 @@ Other performance (both speed and memory) and correctness changes:
- singleton DERNull (BouncyCastle now does this but we make constructor private to be sure)
- similarly made DERBoolean constructor private and moved to DERBoolean.{getInstance,TRUE,FALSE}
- removed use of Boolean constructor
-- DERPrintableString interns its internal String values
- DERObjectIdentifier interns its internal String indentifer value
- changed uses of 'new Integer' to 'Integer.valueOf'
- X509CertificateObject.getEncoded caches its result
@@ -29,7 +28,6 @@ Other performance (both speed and memory) and correctness changes:
- Fixed cut & paste instanceof error in EncryptedPrivateKeyInfo
- Make BouncyCastleProvider.PROVIDER_NAME final
- Added wrapper for SecretKeyFactory.PBKDF2WithHmacSHA1
-- Added DSA support to JDKKeyManager.engineGetKeySpec
- Fixed CertBlacklist to do a by-value comparison of public keys
Other security changes:
diff --git a/patches/android.patch b/patches/android.patch
index 40a24f8..33df91a 100644
--- a/patches/android.patch
+++ b/patches/android.patch
@@ -1,23 +1,9 @@
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1InputStream.java bcprov-jdk16-146/org/bouncycastle/asn1/ASN1InputStream.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1InputStream.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/ASN1InputStream.java 2012-07-27 18:48:00.011478563 +0000
-@@ -363,7 +363,9 @@
- case BMP_STRING:
- return new DERBMPString(bytes);
- case BOOLEAN:
-- return new ASN1Boolean(bytes);
-+ // BEGIN android-changed
-+ return DERBoolean.getInstance(bytes);
-+ // END android-changed
- case ENUMERATED:
- return new ASN1Enumerated(bytes);
- case GENERALIZED_TIME:
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1Null.java bcprov-jdk16-146/org/bouncycastle/asn1/ASN1Null.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1Null.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/ASN1Null.java 2012-07-27 18:47:59.981477999 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/ASN1Null.java bcprov-jdk15on-147/org/bouncycastle/asn1/ASN1Null.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/ASN1Null.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/ASN1Null.java 2012-09-11 00:12:44.000000000 +0000
@@ -8,9 +8,11 @@
public abstract class ASN1Null
- extends ASN1Object
+ extends ASN1Primitive
{
- public ASN1Null()
+ // BEGIN android-changed
@@ -26,23 +12,23 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1Null.java bcprov-jdk1
}
+ // END android-changed
- public int hashCode()
+ public static ASN1Null getInstance(Object o)
{
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERBoolean.java bcprov-jdk16-146/org/bouncycastle/asn1/DERBoolean.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERBoolean.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/DERBoolean.java 2012-07-27 18:47:59.981477999 +0000
-@@ -5,7 +5,9 @@
- public class DERBoolean
- extends ASN1Object
- {
-- byte value;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERBoolean.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERBoolean.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERBoolean.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERBoolean.java 2012-09-11 00:12:44.000000000 +0000
+@@ -10,7 +10,9 @@
+ private static final byte[] TRUE_VALUE = new byte[] { (byte)0xff };
+ private static final byte[] FALSE_VALUE = new byte[] { 0 };
+
+- private byte[] value;
+ // BEGIN android-changed
-+ private final byte value;
++ final private byte[] value;
+ // END android-changed
- public static final DERBoolean FALSE = new DERBoolean(false);
- public static final DERBoolean TRUE = new DERBoolean(true);
-@@ -35,6 +37,17 @@
+ public static final ASN1Boolean FALSE = new ASN1Boolean(false);
+ public static final ASN1Boolean TRUE = new ASN1Boolean(true);
+@@ -46,6 +48,17 @@
return (value ? TRUE : FALSE);
}
@@ -55,44 +41,25 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERBoolean.java bcprov-jd
+ {
+ return (octets[0] != 0) ? TRUE : FALSE;
+ }
-+ // END android-added
+
++ // END android-added
/**
* return a Boolean from a tagged object.
*
-@@ -56,23 +69,29 @@
- }
- else
- {
-- return new DERBoolean(((ASN1OctetString)o).getOctets());
-+ // BEGIN android-changed
-+ return getInstance(((ASN1OctetString)o).getOctets());
-+ // END android-changed
+@@ -71,7 +84,9 @@
}
}
-- public DERBoolean(
-- byte[] value)
-- {
-- if (value.length != 1)
-- {
-- throw new IllegalArgumentException("byte value should have 1 byte in it");
-- }
--
-- this.value = value[0];
-- }
-+ // BEGIN android-removed
-+ // public DERBoolean(
-+ // byte[] value)
-+ // {
-+ // if (value.length != 1)
-+ // {
-+ // throw new IllegalArgumentException("byte value should have 1 byte in it");
-+ // }
-+ //
-+ // this.value = value[0];
-+ // }
-+ // END android-removed
+- DERBoolean(
++ // BEGIN android-changed
++ protected DERBoolean(
++ // END android-changed
+ byte[] value)
+ {
+ if (value.length != 1)
+@@ -93,8 +108,10 @@
+ }
+ }
- public DERBoolean(
+ // BEGIN android-changed
@@ -100,19 +67,14 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERBoolean.java bcprov-jd
boolean value)
+ // END android-changed
{
- this.value = (value) ? (byte)0xff : (byte)0;
+ this.value = (value) ? TRUE_VALUE : FALSE_VALUE;
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERNull.java bcprov-jdk16-146/org/bouncycastle/asn1/DERNull.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERNull.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/DERNull.java 2012-07-27 18:47:59.981477999 +0000
-@@ -10,9 +10,13 @@
- {
- public static final DERNull INSTANCE = new DERNull();
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERNull.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERNull.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERNull.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERNull.java 2012-09-11 00:12:44.000000000 +0000
+@@ -12,7 +12,9 @@
-- byte[] zeroBytes = new byte[0];
-+ // BEGIN android-changed
-+ private static final byte[] zeroBytes = new byte[0];
-+ // END android-changed
+ private static final byte[] zeroBytes = new byte[0];
- public DERNull()
+ // BEGIN android-changed
@@ -121,10 +83,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERNull.java bcprov-jdk16
{
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERObjectIdentifier.java bcprov-jdk16-146/org/bouncycastle/asn1/DERObjectIdentifier.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERObjectIdentifier.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/DERObjectIdentifier.java 2012-07-27 18:48:00.011478563 +0000
-@@ -110,7 +110,13 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERObjectIdentifier.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERObjectIdentifier.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERObjectIdentifier.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERObjectIdentifier.java 2012-09-11 00:12:44.000000000 +0000
+@@ -117,7 +117,13 @@
}
}
@@ -139,7 +101,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERObjectIdentifier.java
}
public DERObjectIdentifier(
-@@ -121,7 +127,13 @@
+@@ -128,7 +134,13 @@
throw new IllegalArgumentException("string " + identifier + " not an OID");
}
@@ -154,59 +116,37 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERObjectIdentifier.java
}
public String getId()
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERPrintableString.java bcprov-jdk16-146/org/bouncycastle/asn1/DERPrintableString.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERPrintableString.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/DERPrintableString.java 2012-07-27 18:48:00.011478563 +0000
-@@ -9,7 +9,9 @@
- extends ASN1Object
- implements DERString
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERPrintableString.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERPrintableString.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERPrintableString.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERPrintableString.java 2012-09-11 00:12:44.000000000 +0000
+@@ -12,7 +12,9 @@
+ extends ASN1Primitive
+ implements ASN1String
{
-- String string;
+- private byte[] string;
+ // BEGIN android-changed
-+ private final String string;
++ private final byte[] string;
+ // END android-changed
/**
* return a printable string from the passed in object.
-@@ -65,7 +67,9 @@
- cs[i] = (char)(string[i] & 0xff);
- }
-
-- this.string = new String(cs);
-+ // BEGIN android-changed
-+ this.string = new String(cs).intern();
-+ // END android-changed
- }
-
- /**
-@@ -94,7 +98,9 @@
- throw new IllegalArgumentException("string contains illegal characters");
- }
-
-- this.string = string;
-+ // BEGIN android-changed
-+ this.string = string.intern();
-+ // END android-changed
- }
-
- public String getString()
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/cms/ContentInfo.java bcprov-jdk16-146/org/bouncycastle/asn1/cms/ContentInfo.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/cms/ContentInfo.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/cms/ContentInfo.java 2012-07-27 18:48:00.011478563 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/cms/ContentInfo.java bcprov-jdk15on-147/org/bouncycastle/asn1/cms/ContentInfo.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/cms/ContentInfo.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/cms/ContentInfo.java 2012-09-11 00:12:44.000000000 +0000
@@ -12,7 +12,9 @@
public class ContentInfo
- extends ASN1Encodable
+ extends ASN1Object
- implements CMSObjectIdentifiers
+ // BEGIN android-removed
+ // implements CMSObjectIdentifiers
+ // END android-removed
{
private ASN1ObjectIdentifier contentType;
- private DEREncodable content;
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 2012-07-27 18:48:00.011478563 +0000
+ private ASN1Encodable content;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 2012-09-11 00:12:44.000000000 +0000
@@ -37,10 +37,13 @@
public static EncryptedPrivateKeyInfo getInstance(
Object obj)
@@ -219,12 +159,12 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyI
return (EncryptedPrivateKeyInfo)obj;
}
+ // END android-changed
- else if (obj instanceof ASN1Sequence)
+ else if (obj != null)
{
- return new EncryptedPrivateKeyInfo((ASN1Sequence)obj);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2012-07-27 18:47:59.981477999 +0000
+ return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj));
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2012-09-11 00:12:44.000000000 +0000
@@ -10,8 +10,10 @@
//
static final ASN1ObjectIdentifier pkcs_1 = new ASN1ObjectIdentifier("1.2.840.113549.1.1");
@@ -280,9 +220,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifier
static final ASN1ObjectIdentifier id_hmacWithSHA256 = digestAlgorithm.branch("9");
static final ASN1ObjectIdentifier id_hmacWithSHA384 = digestAlgorithm.branch("10");
static final ASN1ObjectIdentifier id_hmacWithSHA512 = digestAlgorithm.branch("11");
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 2012-07-27 18:47:59.981477999 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 2012-09-11 00:12:44.000000000 +0000
@@ -19,7 +19,9 @@
private AlgorithmIdentifier maskGenAlgorithm;
private AlgorithmIdentifier pSourceAlgorithm;
@@ -294,24 +234,24 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0]));
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 2012-07-27 18:47:59.981477999 +0000
-@@ -20,7 +20,9 @@
- private DERInteger saltLength;
- private DERInteger trailerField;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 2012-09-11 00:12:44.000000000 +0000
+@@ -22,7 +22,9 @@
+ private ASN1Integer saltLength;
+ private ASN1Integer trailerField;
- public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
+ // BEGIN android-changed
+ public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
+ // END android-changed
public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
- public final static DERInteger DEFAULT_SALT_LENGTH = new DERInteger(20);
- public final static DERInteger DEFAULT_TRAILER_FIELD = new DERInteger(1);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/util/ASN1Dump.java bcprov-jdk16-146/org/bouncycastle/asn1/util/ASN1Dump.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/util/ASN1Dump.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/util/ASN1Dump.java 2012-07-27 18:48:00.011478563 +0000
-@@ -79,7 +79,9 @@
+ public final static ASN1Integer DEFAULT_SALT_LENGTH = new ASN1Integer(20);
+ public final static ASN1Integer DEFAULT_TRAILER_FIELD = new ASN1Integer(1);
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/util/ASN1Dump.java bcprov-jdk15on-147/org/bouncycastle/asn1/util/ASN1Dump.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/util/ASN1Dump.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/util/ASN1Dump.java 2012-09-11 00:12:44.000000000 +0000
+@@ -78,7 +78,9 @@
{
Object o = e.nextElement();
@@ -322,10 +262,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/util/ASN1Dump.java bcprov
{
buf.append(tab);
buf.append("NULL");
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/AttCertIssuer.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/AttCertIssuer.java 2012-07-27 18:48:00.011478563 +0000
-@@ -45,7 +45,7 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AttCertIssuer.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AttCertIssuer.java 2012-09-11 00:12:44.000000000 +0000
+@@ -46,7 +46,7 @@
ASN1TaggedObject obj,
boolean explicit)
{
@@ -334,32 +274,57 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java b
}
/**
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/BasicConstraints.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/BasicConstraints.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/BasicConstraints.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/BasicConstraints.java 2012-07-27 18:48:00.011478563 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 2012-09-11 00:12:44.000000000 +0000
+@@ -14,7 +14,9 @@
+ import org.bouncycastle.asn1.DERSequence;
+ import org.bouncycastle.asn1.DERTaggedObject;
+ import org.bouncycastle.crypto.Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+
+ /**
+ * The AuthorityKeyIdentifier object.
+@@ -101,7 +103,9 @@
+ public AuthorityKeyIdentifier(
+ SubjectPublicKeyInfo spki)
+ {
+- Digest digest = new SHA1Digest();
++ // BEGIN android-changed
++ Digest digest = new OpenSSLDigest.SHA1();
++ // END android-changed
+ byte[] resBuf = new byte[digest.getDigestSize()];
+
+ byte[] bytes = spki.getPublicKeyData().getBytes();
+@@ -119,7 +123,9 @@
+ GeneralNames name,
+ BigInteger serialNumber)
+ {
+- Digest digest = new SHA1Digest();
++ // BEGIN android-changed
++ Digest digest = new OpenSSLDigest.SHA1();
++ // END android-changed
+ byte[] resBuf = new byte[digest.getDigestSize()];
+
+ byte[] bytes = spki.getPublicKeyData().getBytes();
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/BasicConstraints.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/BasicConstraints.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/BasicConstraints.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/BasicConstraints.java 2012-09-11 00:12:44.000000000 +0000
@@ -14,7 +14,9 @@
public class BasicConstraints
- extends ASN1Encodable
+ extends ASN1Object
{
- DERBoolean cA = new DERBoolean(false);
+ // BEGIN android-changed
+ DERBoolean cA = DERBoolean.FALSE;
+ // END android-changed
- DERInteger pathLenConstraint = null;
+ ASN1Integer pathLenConstraint = null;
public static BasicConstraints getInstance(
-@@ -89,7 +91,9 @@
- {
- if (cA)
- {
-- this.cA = new DERBoolean(cA);
-+ // BEGIN android-changed
-+ this.cA = DERBoolean.getInstance(cA);
-+ // END android-changed
- this.pathLenConstraint = new DERInteger(pathLenConstraint);
- }
- else
-@@ -104,7 +108,9 @@
+@@ -81,7 +83,9 @@
{
if (cA)
{
@@ -370,7 +335,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/BasicConstraints.jav
}
else
{
-@@ -121,7 +127,9 @@
+@@ -98,7 +102,9 @@
public BasicConstraints(
int pathLenConstraint)
{
@@ -378,12 +343,26 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/BasicConstraints.jav
+ // BEGIN android-changed
+ this.cA = DERBoolean.TRUE;
+ // END android-changed
- this.pathLenConstraint = new DERInteger(pathLenConstraint);
+ this.pathLenConstraint = new ASN1Integer(pathLenConstraint);
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 2012-07-27 18:48:00.011478563 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/CRLReason.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/CRLReason.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/CRLReason.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/CRLReason.java 2012-09-11 00:12:44.000000000 +0000
+@@ -138,7 +138,9 @@
+
+ public static CRLReason lookup(int value)
+ {
+- Integer idx = new Integer(value);
++ // BEGIN android-changed
++ Integer idx = Integer.valueOf(value);
++ // END android-changed
+
+ if (!table.containsKey(idx))
+ {
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 2012-09-11 00:12:44.000000000 +0000
@@ -96,11 +96,15 @@
}
if (onlyContainsUserCerts)
@@ -420,10 +399,35 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/IssuingDistributionP
}
seq = new DERSequence(vec);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Extensions.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Extensions.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Extensions.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Extensions.java 2012-07-27 18:48:00.011478563 +0000
-@@ -400,7 +400,9 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java 2012-09-11 00:12:44.000000000 +0000
+@@ -6,7 +6,9 @@
+ import org.bouncycastle.asn1.ASN1TaggedObject;
+ import org.bouncycastle.asn1.DEROctetString;
+ import org.bouncycastle.crypto.Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+
+ /**
+ * The SubjectKeyIdentifier object.
+@@ -119,7 +121,9 @@
+
+ private static byte[] getDigest(SubjectPublicKeyInfo spki)
+ {
+- Digest digest = new SHA1Digest();
++ // BEGIN android-changed
++ Digest digest = new OpenSSLDigest.SHA1();
++ // END android-changed
+ byte[] resBuf = new byte[digest.getDigestSize()];
+
+ byte[] bytes = spki.getPublicKeyData().getBytes();
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Extensions.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Extensions.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Extensions.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Extensions.java 2012-09-11 00:12:44.000000000 +0000
+@@ -408,7 +408,9 @@
if (ext.isCritical())
{
@@ -434,10 +438,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Extensions.java
}
v.add(ext.getValue());
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Name.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Name.java 2012-07-27 18:48:00.011478563 +0000
-@@ -249,8 +249,10 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Name.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Name.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Name.java 2012-09-11 00:12:44.000000000 +0000
+@@ -255,8 +255,10 @@
*/
public static final Hashtable SymbolLookUp = DefaultLookUp;
@@ -450,9 +454,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov
static
{
-@@ -432,7 +434,9 @@
- {
- values.addElement("#" + bytesToString(Hex.encode(value.getDERObject().getDEREncoded())));
+@@ -445,7 +447,9 @@
+ throw new IllegalArgumentException("cannot encode value");
+ }
}
- added.addElement((i != 0) ? TRUE : FALSE); // to allow earlier JDK compatibility
+ // BEGIN android-changed
@@ -461,7 +465,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov
}
}
}
-@@ -689,7 +693,9 @@
+@@ -702,7 +706,9 @@
if (index == -1)
{
@@ -472,9 +476,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov
}
String name = token.substring(0, index);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509NameTokenizer.java
---- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2012-07-27 18:48:00.011478563 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509NameTokenizer.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2012-09-11 00:12:44.000000000 +0000
@@ -58,6 +58,17 @@
}
else
@@ -493,16 +497,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.ja
buf.append(c);
}
escaped = false;
-@@ -96,4 +107,4 @@
- index = end;
- return buf.toString().trim();
- }
--}
-+}
-\ No newline at end of file
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/PBEParametersGenerator.java bcprov-jdk16-146/org/bouncycastle/crypto/PBEParametersGenerator.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/PBEParametersGenerator.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/PBEParametersGenerator.java 2012-07-27 18:48:00.021478751 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/PBEParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/PBEParametersGenerator.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/PBEParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/PBEParametersGenerator.java 2012-09-11 00:12:44.000000000 +0000
@@ -136,7 +136,8 @@
public static byte[] PKCS12PasswordToBytes(
char[] password)
@@ -520,9 +517,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/PBEParametersGenerator.
+ // END android-changed
}
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java bcprov-jdk16-146/org/bouncycastle/crypto/digests/OpenSSLDigest.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java 1970-01-01 00:00:00.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/digests/OpenSSLDigest.java 2012-07-27 18:48:00.021478751 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java bcprov-jdk15on-147/org/bouncycastle/crypto/digests/OpenSSLDigest.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java 1970-01-01 00:00:00.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/digests/OpenSSLDigest.java 2012-09-11 00:12:44.000000000 +0000
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
@@ -683,19 +680,75 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.j
+ public SHA512() { super("SHA-512", EVP_MD, SIZE, BLOCK_SIZE); }
+ }
+}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/engines/RC2Engine.java bcprov-jdk16-146/org/bouncycastle/crypto/engines/RC2Engine.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/engines/RC2Engine.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/engines/RC2Engine.java 2012-07-27 18:48:00.011478563 +0000
-@@ -313,4 +313,4 @@
- out[outOff + 6] = (byte)x76;
- out[outOff + 7] = (byte)(x76 >> 8);
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/OAEPEncoding.java bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/OAEPEncoding.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/OAEPEncoding.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/OAEPEncoding.java 2012-09-11 00:12:44.000000000 +0000
+@@ -4,7 +4,9 @@
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.InvalidCipherTextException;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+ import org.bouncycastle.crypto.params.ParametersWithRandom;
+
+ import java.security.SecureRandom;
+@@ -26,7 +28,9 @@
+ public OAEPEncoding(
+ AsymmetricBlockCipher cipher)
+ {
+- this(cipher, new SHA1Digest(), null);
++ // BEGIN android-changed
++ this(cipher, new OpenSSLDigest.SHA1(), null);
++ // END android-changed
}
--}
-+}
-\ No newline at end of file
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java bcprov-jdk16-146/org/bouncycastle/crypto/generators/DHParametersHelper.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/generators/DHParametersHelper.java 2012-07-27 18:48:00.021478751 +0000
+
+ public OAEPEncoding(
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/PKCS1Encoding.java bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/PKCS1Encoding.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 2012-09-11 00:12:44.000000000 +0000
+@@ -206,6 +206,12 @@
+ {
+ throw new InvalidCipherTextException("unknown block type");
+ }
++ // BEGIN android-added
++ if ((type == 1 && forPrivateKey) || (type == 2 && !forPrivateKey))
++ {
++ throw new InvalidCipherTextException("invalid block type " + type);
++ }
++ // END android-added
+
+ if (useStrictLength && block.length != engine.getOutputBlockSize())
+ {
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/engines/DESedeWrapEngine.java bcprov-jdk15on-147/org/bouncycastle/crypto/engines/DESedeWrapEngine.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 2012-09-11 00:12:44.000000000 +0000
+@@ -6,7 +6,9 @@
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.InvalidCipherTextException;
+ import org.bouncycastle.crypto.Wrapper;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+ import org.bouncycastle.crypto.modes.CBCBlockCipher;
+ import org.bouncycastle.crypto.params.KeyParameter;
+ import org.bouncycastle.crypto.params.ParametersWithIV;
+@@ -52,7 +54,9 @@
+ //
+ // checksum digest
+ //
+- Digest sha1 = new SHA1Digest();
++ // BEGIN android-changed
++ Digest sha1 = new OpenSSLDigest.SHA1();
++ // END android-changed
+ byte[] digest = new byte[20];
+
+ /**
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DHParametersHelper.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DHParametersHelper.java 2012-09-11 00:12:44.000000000 +0000
@@ -3,10 +3,17 @@
import java.math.BigInteger;
import java.security.SecureRandom;
@@ -746,16 +799,102 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/generators/DHParameters
return new BigInteger[] { p, q };
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/macs/HMac.java bcprov-jdk16-146/org/bouncycastle/crypto/macs/HMac.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/macs/HMac.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/macs/HMac.java 2012-07-27 18:48:00.021478751 +0000
-@@ -32,23 +32,23 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DSAParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DSAParametersGenerator.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 2012-09-11 00:12:44.000000000 +0000
+@@ -1,8 +1,9 @@
+ package org.bouncycastle.crypto.generators;
+
+ import org.bouncycastle.crypto.Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+ import org.bouncycastle.crypto.params.DSAParameters;
+ import org.bouncycastle.crypto.params.DSAValidationParameters;
+ import org.bouncycastle.util.Arrays;
+@@ -75,7 +76,9 @@
+ byte[] part1 = new byte[20];
+ byte[] part2 = new byte[20];
+ byte[] u = new byte[20];
+- SHA1Digest sha1 = new SHA1Digest();
++ // BEGIN android-changed
++ Digest sha1 = new OpenSSLDigest.SHA1();
++ // END android-changed
+ int n = (L - 1) / 160;
+ byte[] w = new byte[L / 8];
+
+@@ -166,7 +169,9 @@
+ {
+ // A.1.1.2 Generation of the Probable Primes p and q Using an Approved Hash Function
+ // FIXME This should be configurable (digest size in bits must be >= N)
+- Digest d = new SHA256Digest();
++ // BEGIN android-changed
++ Digest d = new OpenSSLDigest.SHA256();
++ // END android-changed
+ int outlen = d.getDigestSize() * 8;
+
+ // 1. Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2). If
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 2012-09-11 00:12:44.000000000 +0000
+@@ -3,7 +3,9 @@
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.PBEParametersGenerator;
+-import org.bouncycastle.crypto.digests.MD5Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+ import org.bouncycastle.crypto.params.KeyParameter;
+ import org.bouncycastle.crypto.params.ParametersWithIV;
+
+@@ -17,7 +19,9 @@
+ public class OpenSSLPBEParametersGenerator
+ extends PBEParametersGenerator
+ {
+- private Digest digest = new MD5Digest();
++ // BEGIN android-changed
++ private Digest digest = new OpenSSLDigest.MD5();
++ // END android-changed
+
+ /**
+ * Construct a OpenSSL Parameters generator.
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 2012-09-11 00:12:44.000000000 +0000
+@@ -4,7 +4,9 @@
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.Mac;
+ import org.bouncycastle.crypto.PBEParametersGenerator;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
++// BEGIN android-changed
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-changed
+ import org.bouncycastle.crypto.macs.HMac;
+ import org.bouncycastle.crypto.params.KeyParameter;
+ import org.bouncycastle.crypto.params.ParametersWithIV;
+@@ -27,7 +29,9 @@
+ */
+ public PKCS5S2ParametersGenerator()
+ {
+- this(new SHA1Digest());
++ // BEGIN android-changed
++ this(new OpenSSLDigest.SHA1());
++ // END android-changed
+ }
+
+ public PKCS5S2ParametersGenerator(Digest digest)
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/macs/HMac.java bcprov-jdk15on-147/org/bouncycastle/crypto/macs/HMac.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/macs/HMac.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/macs/HMac.java 2012-09-11 00:12:44.000000000 +0000
+@@ -32,23 +32,31 @@
{
blockLengths = new Hashtable();
- blockLengths.put("GOST3411", new Integer(32));
-+ blockLengths.put("GOST3411", Integer.valueOf(32));
-
+-
- blockLengths.put("MD2", new Integer(16));
- blockLengths.put("MD4", new Integer(64));
- blockLengths.put("MD5", new Integer(64));
@@ -768,30 +907,59 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/macs/HMac.java bcprov-j
- blockLengths.put("SHA-256", new Integer(64));
- blockLengths.put("SHA-384", new Integer(128));
- blockLengths.put("SHA-512", new Integer(128));
-+ blockLengths.put("MD2", Integer.valueOf(16));
-+ blockLengths.put("MD4", Integer.valueOf(64));
+-
+- blockLengths.put("Tiger", new Integer(64));
+- blockLengths.put("Whirlpool", new Integer(64));
++ // BEGIN android-removed
++ // blockLengths.put("GOST3411", Integer.valueOf(32));
++ //
++ // blockLengths.put("MD2", Integer.valueOf(16));
++ // blockLengths.put("MD4", Integer.valueOf(64));
++ // END android-removed
+ blockLengths.put("MD5", Integer.valueOf(64));
+
-+ blockLengths.put("RIPEMD128", Integer.valueOf(64));
-+ blockLengths.put("RIPEMD160", Integer.valueOf(64));
++ // BEGIN android-removed
++ // blockLengths.put("RIPEMD128", Integer.valueOf(64));
++ // blockLengths.put("RIPEMD160", Integer.valueOf(64));
++ // END android-removed
+
+ blockLengths.put("SHA-1", Integer.valueOf(64));
-+ blockLengths.put("SHA-224", Integer.valueOf(64));
++ // BEGIN android-removed
++ // blockLengths.put("SHA-224", Integer.valueOf(64));
++ // END android-removed
+ blockLengths.put("SHA-256", Integer.valueOf(64));
+ blockLengths.put("SHA-384", Integer.valueOf(128));
+ blockLengths.put("SHA-512", Integer.valueOf(128));
-
-- blockLengths.put("Tiger", new Integer(64));
-- blockLengths.put("Whirlpool", new Integer(64));
-+ blockLengths.put("Tiger", Integer.valueOf(64));
-+ blockLengths.put("Whirlpool", Integer.valueOf(64));
++
++ // BEGIN android-removed
++ // blockLengths.put("Tiger", Integer.valueOf(64));
++ // blockLengths.put("Whirlpool", Integer.valueOf(64));
++ // END android-removed
}
private static int getByteLength(
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java bcprov-jdk16-146/org/bouncycastle/crypto/signers/RSADigestSigner.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/signers/RSADigestSigner.java 2012-07-27 18:48:00.021478751 +0000
-@@ -46,8 +46,10 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java bcprov-jdk15on-147/org/bouncycastle/crypto/signers/RSADigestSigner.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/signers/RSADigestSigner.java 2012-09-11 00:12:44.000000000 +0000
+@@ -39,18 +39,24 @@
+ */
+ static
+ {
+- oidMap.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128);
+- oidMap.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160);
+- oidMap.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256);
++ // BEGIN android-removed
++ // oidMap.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128);
++ // oidMap.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160);
++ // oidMap.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256);
++ // END android-removed
+
+ oidMap.put("SHA-1", X509ObjectIdentifiers.id_SHA1);
+- oidMap.put("SHA-224", NISTObjectIdentifiers.id_sha224);
++ // BEGIN android-removed
++ // oidMap.put("SHA-224", NISTObjectIdentifiers.id_sha224);
++ // END android-removed
+ oidMap.put("SHA-256", NISTObjectIdentifiers.id_sha256);
oidMap.put("SHA-384", NISTObjectIdentifiers.id_sha384);
oidMap.put("SHA-512", NISTObjectIdentifiers.id_sha512);
@@ -804,12 +972,12 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/signers/RSADigestSigner
oidMap.put("MD5", PKCSObjectIdentifiers.md5);
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java bcprov-jdk16-146/org/bouncycastle/crypto/util/PrivateKeyFactory.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2012-07-27 18:48:00.031478939 +0000
-@@ -12,7 +12,9 @@
- import org.bouncycastle.asn1.DERObject;
- import org.bouncycastle.asn1.DERObjectIdentifier;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java bcprov-jdk15on-147/org/bouncycastle/crypto/util/PrivateKeyFactory.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2012-09-11 00:12:44.000000000 +0000
+@@ -11,7 +11,9 @@
+ import org.bouncycastle.asn1.ASN1Sequence;
+ import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.nist.NISTNamedCurves;
-import org.bouncycastle.asn1.oiw.ElGamalParameter;
+// BEGIN android-removed
@@ -818,9 +986,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.
import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.DHParameter;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
-@@ -20,7 +22,9 @@
- import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;
- import org.bouncycastle.asn1.sec.ECPrivateKeyStructure;
+@@ -19,7 +21,9 @@
+ import org.bouncycastle.asn1.pkcs.RSAPrivateKey;
+ import org.bouncycastle.asn1.sec.ECPrivateKey;
import org.bouncycastle.asn1.sec.SECNamedCurves;
-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
+// BEGIN android-removed
@@ -829,7 +997,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.DSAParameter;
import org.bouncycastle.asn1.x9.X962NamedCurves;
-@@ -34,8 +38,10 @@
+@@ -33,8 +37,10 @@
import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
@@ -842,55 +1010,53 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.
import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
/**
-@@ -103,15 +109,17 @@
+@@ -100,14 +106,16 @@
return new DHPrivateKeyParameters(derX.getValue(), dhParams);
}
-- else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
+- else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm))
- {
-- ElGamalParameter params = new ElGamalParameter(
-- (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
-- DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
+- ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters());
+- DERInteger derX = (DERInteger)keyInfo.parsePrivateKey();
-
- return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters(
- params.getP(), params.getG()));
- }
+ // BEGIN android-removed
-+ // else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
++ // else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm))
+ // {
-+ // ElGamalParameter params = new ElGamalParameter(
-+ // (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
-+ // DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
++ // ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters());
++ // DERInteger derX = (DERInteger)keyInfo.parsePrivateKey();
+ //
+ // return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters(
+ // params.getP(), params.getG()));
+ // }
+ // END android-removed
- else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa))
+ else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa))
{
- DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
-@@ -145,10 +153,12 @@
+ DERInteger derX = (DERInteger)keyInfo.parsePrivateKey();
+@@ -140,10 +148,12 @@
{
- ecP = NISTNamedCurves.getByOID(oid);
+ x9 = NISTNamedCurves.getByOID(oid);
-- if (ecP == null)
+- if (x9 == null)
- {
-- ecP = TeleTrusTNamedCurves.getByOID(oid);
+- x9 = TeleTrusTNamedCurves.getByOID(oid);
- }
+ // BEGIN android-removed
-+ // if (ecP == null)
++ // if (x9 == null)
+ // {
-+ // ecP = TeleTrusTNamedCurves.getByOID(oid);
++ // x9 = TeleTrusTNamedCurves.getByOID(oid);
+ // }
+ // END android-removed
}
}
-
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java bcprov-jdk16-146/org/bouncycastle/crypto/util/PublicKeyFactory.java
---- bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/crypto/util/PublicKeyFactory.java 2012-07-27 18:48:00.031478939 +0000
-@@ -15,12 +15,16 @@
- import org.bouncycastle.asn1.DERObjectIdentifier;
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java bcprov-jdk15on-147/org/bouncycastle/crypto/util/PublicKeyFactory.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/crypto/util/PublicKeyFactory.java 2012-09-11 00:12:44.000000000 +0000
+@@ -13,13 +13,17 @@
+ import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.nist.NISTNamedCurves;
-import org.bouncycastle.asn1.oiw.ElGamalParameter;
@@ -900,6 +1066,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.j
import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
import org.bouncycastle.asn1.pkcs.DHParameter;
import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.RSAPublicKey;
import org.bouncycastle.asn1.sec.SECNamedCurves;
-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
+// BEGIN android-removed
@@ -907,8 +1074,8 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.j
+// END android-removed
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.DSAParameter;
- import org.bouncycastle.asn1.x509.RSAPublicKeyStructure;
-@@ -42,8 +46,10 @@
+ import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
+@@ -40,8 +44,10 @@
import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
@@ -921,55 +1088,4665 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.j
import org.bouncycastle.crypto.params.RSAKeyParameters;
/**
-@@ -139,15 +145,17 @@
+@@ -135,14 +141,16 @@
return new DHPublicKeyParameters(derY.getValue(), dhParams);
}
-- else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
+- else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm))
- {
-- ElGamalParameter params = new ElGamalParameter(
-- (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
-- DERInteger derY = (DERInteger)keyInfo.getPublicKey();
+- ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters());
+- DERInteger derY = (DERInteger)keyInfo.parsePublicKey();
-
- return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(
- params.getP(), params.getG()));
- }
+ // BEGIN android-removed
-+ // else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
++ // else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm))
+ // {
-+ // ElGamalParameter params = new ElGamalParameter(
-+ // (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
-+ // DERInteger derY = (DERInteger)keyInfo.getPublicKey();
++ // ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters());
++ // DERInteger derY = (DERInteger)keyInfo.parsePublicKey();
+ //
+ // return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(
+ // params.getP(), params.getG()));
+ // }
+ // END android-removed
- else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa)
- || algId.getObjectId().equals(OIWObjectIdentifiers.dsaWithSHA1))
+ else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa)
+ || algId.getAlgorithm().equals(OIWObjectIdentifiers.dsaWithSHA1))
{
-@@ -182,10 +190,12 @@
+@@ -177,10 +185,12 @@
{
- ecP = NISTNamedCurves.getByOID(oid);
+ x9 = NISTNamedCurves.getByOID(oid);
-- if (ecP == null)
+- if (x9 == null)
- {
-- ecP = TeleTrusTNamedCurves.getByOID(oid);
+- x9 = TeleTrusTNamedCurves.getByOID(oid);
- }
+ // BEGIN android-removed
-+ // if (ecP == null)
++ // if (x9 == null)
+ // {
-+ // ecP = TeleTrusTNamedCurves.getByOID(oid);
++ // x9 = TeleTrusTNamedCurves.getByOID(oid);
+ // }
+ // END android-removed
}
}
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/DSA.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/DSA.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 2012-09-11 00:12:44.000000000 +0000
+@@ -27,26 +27,34 @@
+ provider.addAlgorithm("KeyPairGenerator.DSA", PREFIX + "KeyPairGeneratorSpi");
+ provider.addAlgorithm("KeyFactory.DSA", PREFIX + "KeyFactorySpi");
+
+- provider.addAlgorithm("Signature.DSA", PREFIX + "DSASigner$stdDSA");
++ // BEGIN android-changed
++ provider.addAlgorithm("Signature.SHA1withDSA", PREFIX + "DSASigner$stdDSA");
++ // END android-changed
+ provider.addAlgorithm("Signature.NONEWITHDSA", PREFIX + "DSASigner$noneDSA");
+
+ provider.addAlgorithm("Alg.Alias.Signature.RAWDSA", "NONEWITHDSA");
+
+- addSignatureAlgorithm(provider, "SHA224", "DSA", PREFIX + "DSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
+- addSignatureAlgorithm(provider, "SHA256", "DSA", PREFIX + "DSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
+- addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
+- addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
+-
+- provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA1withDSA", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "DSA");
+- provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA");
++ // BEGIN android-removed
++ // addSignatureAlgorithm(provider, "SHA224", "DSA", PREFIX + "DSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
++ // addSignatureAlgorithm(provider, "SHA256", "DSA", PREFIX + "DSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
++ // addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
++ // addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
++ // END android-removed
++
++ // BEGIN android-added
++ provider.addAlgorithm("Alg.Alias.Signature.DSA", "SHA1withDSA");
++ // END android-added
++ // BEGIN android-changed
++ provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA");
++ provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA1withDSA");
++ // END android-changed
+
+ AsymmetricKeyInfoConverter keyFact = new KeyFactorySpi();
+
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/EC.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/EC.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/EC.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/EC.java 2012-09-11 00:12:44.000000000 +0000
+@@ -1,7 +1,9 @@
+ package org.bouncycastle.jcajce.provider.asymmetric;
+
+-import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
+-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
++// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// END android-removed
+ import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
+ import org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi;
+ import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
+@@ -21,33 +23,43 @@
+ public void configure(ConfigurableProvider provider)
+ {
+ provider.addAlgorithm("KeyAgreement.ECDH", PREFIX + "KeyAgreementSpi$DH");
+- provider.addAlgorithm("KeyAgreement.ECDHC", PREFIX + "KeyAgreementSpi$DHC");
+- provider.addAlgorithm("KeyAgreement.ECMQV", PREFIX + "KeyAgreementSpi$MQV");
+- provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$DHwithSHA1KDF");
+- provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$MQVwithSHA1KDF");
++ // BEGIN android-removed
++ // provider.addAlgorithm("KeyAgreement.ECDHC", PREFIX + "KeyAgreementSpi$DHC");
++ // provider.addAlgorithm("KeyAgreement.ECMQV", PREFIX + "KeyAgreementSpi$MQV");
++ // provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$DHwithSHA1KDF");
++ // provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$MQVwithSHA1KDF");
++ // END android-removed
+
+ registerOid(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC", new KeyFactorySpi.EC());
+ // TODO Should this be an alias for ECDH?
+ registerOid(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC", new KeyFactorySpi.EC());
+- registerOid(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV", new KeyFactorySpi.ECMQV());
+-
+- registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC");
+- // TODO Should this be an alias for ECDH?
+- registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC");
+- registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "EC");
++ // BEGIN android-removed
++ // registerOid(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV", new KeyFactorySpi.ECMQV());
++ // END android-removed
++
++ // BEGIN android-removed
++ // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC");
++ // // TODO Should this be an alias for ECDH?
++ // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC");
++ // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "EC");
++ // END android-removed
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcprov-jdk16-146/org/bouncycastle/jce/ECNamedCurveTable.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/ECNamedCurveTable.java 2012-07-27 18:48:00.031478939 +0000
+ provider.addAlgorithm("KeyFactory.EC", PREFIX + "KeyFactorySpi$EC");
+- provider.addAlgorithm("KeyFactory.ECDSA", PREFIX + "KeyFactorySpi$ECDSA");
+- provider.addAlgorithm("KeyFactory.ECDH", PREFIX + "KeyFactorySpi$ECDH");
+- provider.addAlgorithm("KeyFactory.ECDHC", PREFIX + "KeyFactorySpi$ECDHC");
+- provider.addAlgorithm("KeyFactory.ECMQV", PREFIX + "KeyFactorySpi$ECMQV");
++ // BEGIN android-removed
++ // provider.addAlgorithm("KeyFactory.ECDSA", PREFIX + "KeyFactorySpi$ECDSA");
++ // provider.addAlgorithm("KeyFactory.ECDH", PREFIX + "KeyFactorySpi$ECDH");
++ // provider.addAlgorithm("KeyFactory.ECDHC", PREFIX + "KeyFactorySpi$ECDHC");
++ // provider.addAlgorithm("KeyFactory.ECMQV", PREFIX + "KeyFactorySpi$ECMQV");
++ // END android-removed
+
+ provider.addAlgorithm("KeyPairGenerator.EC", PREFIX + "KeyPairGeneratorSpi$EC");
+- provider.addAlgorithm("KeyPairGenerator.ECDSA", PREFIX + "KeyPairGeneratorSpi$ECDSA");
+- provider.addAlgorithm("KeyPairGenerator.ECDH", PREFIX + "KeyPairGeneratorSpi$ECDH");
+- provider.addAlgorithm("KeyPairGenerator.ECDHC", PREFIX + "KeyPairGeneratorSpi$ECDHC");
+- provider.addAlgorithm("KeyPairGenerator.ECIES", PREFIX + "KeyPairGeneratorSpi$ECDH");
+- provider.addAlgorithm("KeyPairGenerator.ECMQV", PREFIX + "KeyPairGeneratorSpi$ECMQV");
++ // BEGIN android-removed
++ // provider.addAlgorithm("KeyPairGenerator.ECDSA", PREFIX + "KeyPairGeneratorSpi$ECDSA");
++ // provider.addAlgorithm("KeyPairGenerator.ECDH", PREFIX + "KeyPairGeneratorSpi$ECDH");
++ // provider.addAlgorithm("KeyPairGenerator.ECDHC", PREFIX + "KeyPairGeneratorSpi$ECDHC");
++ // provider.addAlgorithm("KeyPairGenerator.ECIES", PREFIX + "KeyPairGeneratorSpi$ECDH");
++ // provider.addAlgorithm("KeyPairGenerator.ECMQV", PREFIX + "KeyPairGeneratorSpi$ECMQV");
++ // END android-removed
+
+ provider.addAlgorithm("Signature.ECDSA", PREFIX + "SignatureSpi$ecDSA");
+ provider.addAlgorithm("Signature.NONEwithECDSA", PREFIX + "SignatureSpi$ecDSAnone");
+@@ -59,23 +71,29 @@
+ provider.addAlgorithm("Alg.Alias.Signature.SHA1WithECDSA", "ECDSA");
+ provider.addAlgorithm("Alg.Alias.Signature.ECDSAWithSHA1", "ECDSA");
+ provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10045.4.1", "ECDSA");
+- provider.addAlgorithm("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
+-
+- addSignatureAlgorithm(provider, "SHA224", "ECDSA", PREFIX + "SignatureSpi$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224);
++ // BEGIN android-removed
++ // provider.addAlgorithm("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
++ // END android-removed
++
++ // BEGIN android-removed
++ // addSignatureAlgorithm(provider, "SHA224", "ECDSA", PREFIX + "SignatureSpi$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224);
++ // END android-removed
+ addSignatureAlgorithm(provider, "SHA256", "ECDSA", PREFIX + "SignatureSpi$ecDSA256", X9ObjectIdentifiers.ecdsa_with_SHA256);
+ addSignatureAlgorithm(provider, "SHA384", "ECDSA", PREFIX + "SignatureSpi$ecDSA384", X9ObjectIdentifiers.ecdsa_with_SHA384);
+ addSignatureAlgorithm(provider, "SHA512", "ECDSA", PREFIX + "SignatureSpi$ecDSA512", X9ObjectIdentifiers.ecdsa_with_SHA512);
+- addSignatureAlgorithm(provider, "RIPEMD160", "ECDSA", PREFIX + "SignatureSpi$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
+-
+- provider.addAlgorithm("Signature.SHA1WITHECNR", PREFIX + "SignatureSpi$ecNR");
+- provider.addAlgorithm("Signature.SHA224WITHECNR", PREFIX + "SignatureSpi$ecNR224");
+- provider.addAlgorithm("Signature.SHA256WITHECNR", PREFIX + "SignatureSpi$ecNR256");
+- provider.addAlgorithm("Signature.SHA384WITHECNR", PREFIX + "SignatureSpi$ecNR384");
+- provider.addAlgorithm("Signature.SHA512WITHECNR", PREFIX + "SignatureSpi$ecNR512");
+-
+- addSignatureAlgorithm(provider, "SHA1", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
+- addSignatureAlgorithm(provider, "SHA224", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
+- addSignatureAlgorithm(provider, "SHA256", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
++ // BEGIN android-removed
++ // addSignatureAlgorithm(provider, "RIPEMD160", "ECDSA", PREFIX + "SignatureSpi$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
++ //
++ // provider.addAlgorithm("Signature.SHA1WITHECNR", PREFIX + "SignatureSpi$ecNR");
++ // provider.addAlgorithm("Signature.SHA224WITHECNR", PREFIX + "SignatureSpi$ecNR224");
++ // provider.addAlgorithm("Signature.SHA256WITHECNR", PREFIX + "SignatureSpi$ecNR256");
++ // provider.addAlgorithm("Signature.SHA384WITHECNR", PREFIX + "SignatureSpi$ecNR384");
++ // provider.addAlgorithm("Signature.SHA512WITHECNR", PREFIX + "SignatureSpi$ecNR512");
++ //
++ // addSignatureAlgorithm(provider, "SHA1", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
++ // addSignatureAlgorithm(provider, "SHA224", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
++ // addSignatureAlgorithm(provider, "SHA256", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
++ // END android-removed
+ }
+ }
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/RSA.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/RSA.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 2012-09-11 00:12:44.000000000 +0000
@@ -3,7 +3,9 @@
+ import org.bouncycastle.asn1.ASN1ObjectIdentifier;
+ import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// END android-removed
+ import org.bouncycastle.asn1.x509.X509ObjectIdentifiers;
+ import org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi;
+ import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
+@@ -24,41 +26,49 @@
+ public void configure(ConfigurableProvider provider)
+ {
+ provider.addAlgorithm("AlgorithmParameters.OAEP", PREFIX + "AlgorithmParametersSpi$OAEP");
+- provider.addAlgorithm("AlgorithmParameters.PSS", PREFIX + "AlgorithmParametersSpi$PSS");
+-
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS");
+-
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS");
+-
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAANDMGF1", "PSS");
++ // BEGIN android-removed
++ // provider.addAlgorithm("AlgorithmParameters.PSS", PREFIX + "AlgorithmParametersSpi$PSS");
++ //
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS");
++ //
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS");
++ //
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAANDMGF1", "PSS");
++ // END android-removed
+
+ provider.addAlgorithm("Cipher.RSA", PREFIX + "CipherSpi$NoPadding");
+- provider.addAlgorithm("Cipher.RSA/RAW", PREFIX + "CipherSpi$NoPadding");
+- provider.addAlgorithm("Cipher.RSA/PKCS1", PREFIX + "CipherSpi$PKCS1v1_5Padding");
+- provider.addAlgorithm("Cipher.1.2.840.113549.1.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding");
+- provider.addAlgorithm("Cipher.2.5.8.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding");
+- provider.addAlgorithm("Cipher.RSA/1", PREFIX + "CipherSpi$PKCS1v1_5Padding_PrivateOnly");
+- provider.addAlgorithm("Cipher.RSA/2", PREFIX + "CipherSpi$PKCS1v1_5Padding_PublicOnly");
+- provider.addAlgorithm("Cipher.RSA/OAEP", PREFIX + "CipherSpi$OAEPPadding");
+- provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, PREFIX + "CipherSpi$OAEPPadding");
+- provider.addAlgorithm("Cipher.RSA/ISO9796-1", PREFIX + "CipherSpi$ISO9796d1Padding");
++ // BEGIN android-changed
++ provider.addAlgorithm("Alg.Alias.Cipher.RSA/RAW", "RSA");
++ // END android-changed
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher.RSA/PKCS1", PREFIX + "CipherSpi$PKCS1v1_5Padding");
++ // provider.addAlgorithm("Cipher.1.2.840.113549.1.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding");
++ // provider.addAlgorithm("Cipher.2.5.8.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding");
++ // provider.addAlgorithm("Cipher.RSA/1", PREFIX + "CipherSpi$PKCS1v1_5Padding_PrivateOnly");
++ // provider.addAlgorithm("Cipher.RSA/2", PREFIX + "CipherSpi$PKCS1v1_5Padding_PublicOnly");
++ // provider.addAlgorithm("Cipher.RSA/OAEP", PREFIX + "CipherSpi$OAEPPadding");
++ // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, PREFIX + "CipherSpi$OAEPPadding");
++ // provider.addAlgorithm("Cipher.RSA/ISO9796-1", PREFIX + "CipherSpi$ISO9796d1Padding");
++ // END android-removed
+
+ provider.addAlgorithm("Alg.Alias.Cipher.RSA//RAW", "RSA");
+ provider.addAlgorithm("Alg.Alias.Cipher.RSA//NOPADDING", "RSA");
+- provider.addAlgorithm("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1");
+- provider.addAlgorithm("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP");
+- provider.addAlgorithm("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1");
++ // provider.addAlgorithm("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP");
++ // provider.addAlgorithm("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1");
++ // END android-removed
+
+ provider.addAlgorithm("KeyFactory.RSA", PREFIX + "KeyFactorySpi");
+ provider.addAlgorithm("KeyPairGenerator.RSA", PREFIX + "KeyPairGeneratorSpi");
+@@ -68,101 +78,111 @@
+ registerOid(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA", keyFact);
+ registerOid(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA", keyFact);
+ registerOid(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "RSA", keyFact);
+- registerOid(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "RSA", keyFact);
+-
+- registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA");
+- registerOidAlgorithmParameters(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA");
+- registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP");
+- registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS");
+-
+-
+- provider.addAlgorithm("Signature.RSASSA-PSS", PREFIX + "PSSSignatureSpi$PSSwithRSA");
+- provider.addAlgorithm("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA");
+- provider.addAlgorithm("Signature.OID." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA");
+-
+- provider.addAlgorithm("Signature.SHA224withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA224withRSA");
+- provider.addAlgorithm("Signature.SHA256withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA256withRSA");
+- provider.addAlgorithm("Signature.SHA384withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA384withRSA");
+- provider.addAlgorithm("Signature.SHA512withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA512withRSA");
+-
+- provider.addAlgorithm("Signature.RSA", PREFIX + "DigestSignatureSpi$noneRSA");
+- provider.addAlgorithm("Signature.RAWRSASSA-PSS", PREFIX + "PSSSignatureSpi$nonePSS");
+-
+- provider.addAlgorithm("Alg.Alias.Signature.RAWRSA", "RSA");
+- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSA", "RSA");
+- provider.addAlgorithm("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAANDMGF1", "RAWRSASSA-PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS");
+-
+-
+- provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA224WITHRSAANDMGF1", "SHA224withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA256WITHRSAANDMGF1", "SHA256withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA384WITHRSAANDMGF1", "SHA384withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA512WITHRSAANDMGF1", "SHA512withRSA/PSS");
+-
+- if (provider.hasAlgorithm("MessageDigest", "MD2"))
+- {
+- addDigestSignature(provider, "MD2", PREFIX + "DigestSignatureSpi$MD2", PKCSObjectIdentifiers.md2WithRSAEncryption);
+- }
+-
+- if (provider.hasAlgorithm("MessageDigest", "MD2"))
+- {
+- addDigestSignature(provider, "MD4", PREFIX + "DigestSignatureSpi$MD4", PKCSObjectIdentifiers.md4WithRSAEncryption);
+- }
+-
+- if (provider.hasAlgorithm("MessageDigest", "MD2"))
+- {
+- addDigestSignature(provider, "MD5", PREFIX + "DigestSignatureSpi$MD5", PKCSObjectIdentifiers.md5WithRSAEncryption);
+- provider.addAlgorithm("Signature.MD5withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$MD5WithRSAEncryption");
+- provider.addAlgorithm("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2");
+- }
++ // BEGIN android-removed
++ // registerOid(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "RSA", keyFact);
++ //
++ // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA");
++ // registerOidAlgorithmParameters(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA");
++ // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP");
++ // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS");
++ //
++ //
++ // provider.addAlgorithm("Signature.RSASSA-PSS", PREFIX + "PSSSignatureSpi$PSSwithRSA");
++ // provider.addAlgorithm("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA");
++ // provider.addAlgorithm("Signature.OID." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA");
++ //
++ // provider.addAlgorithm("Signature.SHA224withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA224withRSA");
++ // provider.addAlgorithm("Signature.SHA256withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA256withRSA");
++ // provider.addAlgorithm("Signature.SHA384withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA384withRSA");
++ // provider.addAlgorithm("Signature.SHA512withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA512withRSA");
++ //
++ // provider.addAlgorithm("Signature.RSA", PREFIX + "DigestSignatureSpi$noneRSA");
++ // provider.addAlgorithm("Signature.RAWRSASSA-PSS", PREFIX + "PSSSignatureSpi$nonePSS");
++ //
++ // provider.addAlgorithm("Alg.Alias.Signature.RAWRSA", "RSA");
++ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSA", "RSA");
++ // provider.addAlgorithm("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAANDMGF1", "RAWRSASSA-PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS");
++ //
++ //
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA224WITHRSAANDMGF1", "SHA224withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA256WITHRSAANDMGF1", "SHA256withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA384WITHRSAANDMGF1", "SHA384withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA512WITHRSAANDMGF1", "SHA512withRSA/PSS");
++ //
++ // if (provider.hasAlgorithm("MessageDigest", "MD2"))
++ // {
++ // addDigestSignature(provider, "MD2", PREFIX + "DigestSignatureSpi$MD2", PKCSObjectIdentifiers.md2WithRSAEncryption);
++ // }
++ //
++ // if (provider.hasAlgorithm("MessageDigest", "MD2"))
++ // {
++ // addDigestSignature(provider, "MD4", PREFIX + "DigestSignatureSpi$MD4", PKCSObjectIdentifiers.md4WithRSAEncryption);
++ // }
++ //
++ // if (provider.hasAlgorithm("MessageDigest", "MD2"))
++ // {
++ // addDigestSignature(provider, "MD5", PREFIX + "DigestSignatureSpi$MD5", PKCSObjectIdentifiers.md5WithRSAEncryption);
++ // provider.addAlgorithm("Signature.MD5withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$MD5WithRSAEncryption");
++ // provider.addAlgorithm("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2");
++ // }
++ // END android-removed
+
+ if (provider.hasAlgorithm("MessageDigest", "SHA1"))
+ {
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS");
+- provider.addAlgorithm("Signature.SHA1withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA1withRSA");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS");
+- provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHRSAANDMGF1", "SHA1withRSA/PSS");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS");
++ // provider.addAlgorithm("Signature.SHA1withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA1withRSA");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS");
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHRSAANDMGF1", "SHA1withRSA/PSS");
++ // END android-removed
+
+ addDigestSignature(provider, "SHA1", PREFIX + "DigestSignatureSpi$SHA1", PKCSObjectIdentifiers.sha1WithRSAEncryption);
+
+- provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2");
+- provider.addAlgorithm("Signature.SHA1withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$SHA1WithRSAEncryption");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2");
++ // provider.addAlgorithm("Signature.SHA1withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$SHA1WithRSAEncryption");
++ // END android-removed
+ provider.addAlgorithm("Alg.Alias.Signature." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA");
+ provider.addAlgorithm("Alg.Alias.Signature.OID." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA");
+ }
+
+- addDigestSignature(provider, "SHA224", PREFIX + "DigestSignatureSpi$SHA224", PKCSObjectIdentifiers.sha224WithRSAEncryption);
++ // BEGIN android-removed
++ // addDigestSignature(provider, "SHA224", PREFIX + "DigestSignatureSpi$SHA224", PKCSObjectIdentifiers.sha224WithRSAEncryption);
++ // END android-removed
+ addDigestSignature(provider, "SHA256", PREFIX + "DigestSignatureSpi$SHA256", PKCSObjectIdentifiers.sha256WithRSAEncryption);
+ addDigestSignature(provider, "SHA384", PREFIX + "DigestSignatureSpi$SHA384", PKCSObjectIdentifiers.sha384WithRSAEncryption);
+ addDigestSignature(provider, "SHA512", PREFIX + "DigestSignatureSpi$SHA512", PKCSObjectIdentifiers.sha512WithRSAEncryption);
+
+- if (provider.hasAlgorithm("MessageDigest", "RIPEMD128"))
+- {
+- addDigestSignature(provider, "RIPEMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
+- addDigestSignature(provider, "RMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", null);
+- }
+-
+- if (provider.hasAlgorithm("MessageDigest", "RIPEMD160"))
+- {
+- addDigestSignature(provider, "RIPEMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
+- addDigestSignature(provider, "RMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", null);
+- provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2");
+- provider.addAlgorithm("Signature.RIPEMD160withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$RIPEMD160WithRSAEncryption");
+- }
+-
+- if (provider.hasAlgorithm("MessageDigest", "RIPEMD256"))
+- {
+- addDigestSignature(provider, "RIPEMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
+- addDigestSignature(provider, "RMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", null);
+- }
++ // BEGIN android-removed
++ // if (provider.hasAlgorithm("MessageDigest", "RIPEMD128"))
++ // {
++ // addDigestSignature(provider, "RIPEMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
++ // addDigestSignature(provider, "RMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", null);
++ // }
++ //
++ // if (provider.hasAlgorithm("MessageDigest", "RIPEMD160"))
++ // {
++ // addDigestSignature(provider, "RIPEMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
++ // addDigestSignature(provider, "RMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", null);
++ // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2");
++ // provider.addAlgorithm("Signature.RIPEMD160withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$RIPEMD160WithRSAEncryption");
++ // }
++ //
++ // if (provider.hasAlgorithm("MessageDigest", "RIPEMD256"))
++ // {
++ // addDigestSignature(provider, "RIPEMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
++ // addDigestSignature(provider, "RMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", null);
++ // }
++ // END android-removed
+ }
+
+ private void addDigestSignature(
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/X509.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/X509.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/X509.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/X509.java 2012-09-11 00:12:44.000000000 +0000
+@@ -18,8 +18,10 @@
+
+ public void configure(ConfigurableProvider provider)
+ {
+- provider.addAlgorithm("KeyFactory.X.509", "org.bouncycastle.jcajce.provider.asymmetric.x509.KeyFactory");
+- provider.addAlgorithm("Alg.Alias.KeyFactory.X509", "X.509");
++ // BEGIN android-removed
++ // provider.addAlgorithm("KeyFactory.X.509", "org.bouncycastle.jcajce.provider.asymmetric.x509.KeyFactory");
++ // provider.addAlgorithm("Alg.Alias.KeyFactory.X509", "X.509");
++ // END android-removed
+
+ //
+ // certificate factories.
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -35,10 +35,12 @@
+
+ static
+ {
+- Integer i64 = new Integer(64);
+- Integer i192 = new Integer(192);
+- Integer i128 = new Integer(128);
+- Integer i256 = new Integer(256);
++ // BEGIN android-changed
++ Integer i64 = Integer.valueOf(64);
++ Integer i192 = Integer.valueOf(192);
++ Integer i128 = Integer.valueOf(128);
++ Integer i256 = Integer.valueOf(256);
++ // END android-changed
+
+ algorithms.put("DES", i64);
+ algorithms.put("DESEDE", i192);
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -63,7 +63,9 @@
+ {
+ if (!initialised)
+ {
+- Integer paramStrength = new Integer(strength);
++ // BEGIN android-changed
++ Integer paramStrength = Integer.valueOf(strength);
++ // END android-changed
+
+ if (params.containsKey(paramStrength))
+ {
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 2012-09-11 00:12:44.000000000 +0000
+@@ -23,11 +23,16 @@
+ import org.bouncycastle.crypto.DSA;
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.digests.NullDigest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA224Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.SHA384Digest;
+-import org.bouncycastle.crypto.digests.SHA512Digest;
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
++// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.SHA1Digest;
++// import org.bouncycastle.crypto.digests.SHA224Digest;
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.SHA384Digest;
++// import org.bouncycastle.crypto.digests.SHA512Digest;
++// END android-removed
+ import org.bouncycastle.crypto.params.ParametersWithRandom;
+
+ public class DSASigner
+@@ -228,45 +233,49 @@
+ {
+ public stdDSA()
+ {
+- super(new SHA1Digest(), new org.bouncycastle.crypto.signers.DSASigner());
++ // BEGIN android-changed
++ super(new OpenSSLDigest.SHA1(), new org.bouncycastle.crypto.signers.DSASigner());
++ // END android-changed
+ }
+ }
+
+- static public class dsa224
+- extends DSASigner
+- {
+- public dsa224()
+- {
+- super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner());
+- }
+- }
+-
+- static public class dsa256
+- extends DSASigner
+- {
+- public dsa256()
+- {
+- super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner());
+- }
+- }
+-
+- static public class dsa384
+- extends DSASigner
+- {
+- public dsa384()
+- {
+- super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner());
+- }
+- }
+-
+- static public class dsa512
+- extends DSASigner
+- {
+- public dsa512()
+- {
+- super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner());
+- }
+- }
++ // BEGIN android-removed
++ // static public class dsa224
++ // extends DSASigner
++ // {
++ // public dsa224()
++ // {
++ // super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner());
++ // }
++ // }
++ //
++ // static public class dsa256
++ // extends DSASigner
++ // {
++ // public dsa256()
++ // {
++ // super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner());
++ // }
++ // }
++ //
++ // static public class dsa384
++ // extends DSASigner
++ // {
++ // public dsa384()
++ // {
++ // super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner());
++ // }
++ // }
++ //
++ // static public class dsa512
++ // extends DSASigner
++ // {
++ // public dsa512()
++ // {
++ // super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner());
++ // }
++ // }
++ // END android-removed
+
+ static public class noneDSA
+ extends DSASigner
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -20,7 +20,9 @@
+ import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.DERObjectIdentifier;
+ import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
+-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
++// END android-removed
+ import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+ import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
+ import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
+@@ -222,21 +224,23 @@
+ ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters());
+ X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid);
+
+- if (ecP == null) // GOST Curve
+- {
+- ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid);
+- EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed());
+-
+- ecSpec = new ECNamedCurveSpec(
+- ECGOST3410NamedCurves.getName(oid),
+- ellipticCurve,
+- new ECPoint(
+- gParam.getG().getX().toBigInteger(),
+- gParam.getG().getY().toBigInteger()),
+- gParam.getN(),
+- gParam.getH());
+- }
+- else
++ // BEGIN android-removed
++ // if (ecP == null) // GOST Curve
++ // {
++ // ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid);
++ // EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed());
++ //
++ // ecSpec = new ECNamedCurveSpec(
++ // ECGOST3410NamedCurves.getName(oid),
++ // ellipticCurve,
++ // new ECPoint(
++ // gParam.getG().getX().toBigInteger(),
++ // gParam.getG().getY().toBigInteger()),
++ // gParam.getN(),
++ // gParam.getH());
++ // }
++ // else
++ // END android-removed
+ {
+ EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed());
+
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java 2012-09-11 00:12:44.000000000 +0000
+@@ -5,10 +5,14 @@
+ import java.security.PublicKey;
+
+ import org.bouncycastle.asn1.ASN1ObjectIdentifier;
+-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
++// END android-removed
+ import org.bouncycastle.asn1.nist.NISTNamedCurves;
+ import org.bouncycastle.asn1.sec.SECNamedCurves;
+-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
++// END android-removed
+ import org.bouncycastle.asn1.x9.X962NamedCurves;
+ import org.bouncycastle.asn1.x9.X9ECParameters;
+ import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
+@@ -166,14 +170,16 @@
+ {
+ oid = NISTNamedCurves.getOID(name);
+ }
+- if (oid == null)
+- {
+- oid = TeleTrusTNamedCurves.getOID(name);
+- }
+- if (oid == null)
+- {
+- oid = ECGOST3410NamedCurves.getOID(name);
+- }
++ // BEGIN android-removed
++ // if (oid == null)
++ // {
++ // oid = TeleTrusTNamedCurves.getOID(name);
++ // }
++ // if (oid == null)
++ // {
++ // oid = ECGOST3410NamedCurves.getOID(name);
++ // }
++ // END android-removed
+ }
+
+ return oid;
+@@ -191,10 +197,12 @@
+ {
+ params = NISTNamedCurves.getByOID(oid);
+ }
+- if (params == null)
+- {
+- params = TeleTrusTNamedCurves.getByOID(oid);
+- }
++ // BEGIN android-removed
++ // if (params == null)
++ // {
++ // params = TeleTrusTNamedCurves.getByOID(oid);
++ // }
++ // END android-removed
+ }
+
+ return params;
+@@ -212,14 +220,16 @@
+ {
+ name = NISTNamedCurves.getName(oid);
+ }
+- if (name == null)
+- {
+- name = TeleTrusTNamedCurves.getName(oid);
+- }
+- if (name == null)
+- {
+- name = ECGOST3410NamedCurves.getName(oid);
+- }
++ // BEGIN android-removed
++ // if (name == null)
++ // {
++ // name = TeleTrusTNamedCurves.getName(oid);
++ // }
++ // if (name == null)
++ // {
++ // name = ECGOST3410NamedCurves.getName(oid);
++ // }
++ // END android-removed
+ }
+
+ return name;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -23,20 +23,26 @@
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.DerivationFunction;
+ import org.bouncycastle.crypto.agreement.ECDHBasicAgreement;
+-import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement;
+-import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement;
+-import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters;
+-import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement;
++// import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement;
++// import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters;
++// import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator;
++// END android-removed
+ import org.bouncycastle.crypto.digests.SHA1Digest;
+ import org.bouncycastle.crypto.params.ECDomainParameters;
+ import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
+ import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+-import org.bouncycastle.crypto.params.MQVPrivateParameters;
+-import org.bouncycastle.crypto.params.MQVPublicParameters;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.params.MQVPrivateParameters;
++// import org.bouncycastle.crypto.params.MQVPublicParameters;
++// END android-removed
+ import org.bouncycastle.jce.interfaces.ECPrivateKey;
+ import org.bouncycastle.jce.interfaces.ECPublicKey;
+-import org.bouncycastle.jce.interfaces.MQVPrivateKey;
+-import org.bouncycastle.jce.interfaces.MQVPublicKey;
++// BEGIN android-removed
++// import org.bouncycastle.jce.interfaces.MQVPrivateKey;
++// import org.bouncycastle.jce.interfaces.MQVPublicKey;
++// END android-removed
+
+ /**
+ * Diffie-Hellman key agreement using elliptic curve keys, ala IEEE P1363
+@@ -52,9 +58,11 @@
+
+ static
+ {
+- Integer i128 = new Integer(128);
+- Integer i192 = new Integer(192);
+- Integer i256 = new Integer(256);
++ // BEGIN android-changed
++ Integer i128 = Integer.valueOf(128);
++ Integer i192 = Integer.valueOf(192);
++ Integer i256 = Integer.valueOf(256);
++ // END android-changed
+
+ algorithms.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), i128);
+ algorithms.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), i192);
+@@ -69,7 +77,9 @@
+ private BigInteger result;
+ private ECDomainParameters parameters;
+ private BasicAgreement agreement;
+- private DerivationFunction kdf;
++ // BEGIN android-removed
++ // private DerivationFunction kdf;
++ // END android-removed
+
+ private byte[] bigIntToBytes(
+ BigInteger r)
+@@ -84,7 +94,9 @@
+ {
+ this.kaAlgorithm = kaAlgorithm;
+ this.agreement = agreement;
+- this.kdf = kdf;
++ // BEGIN android-removed
++ // this.kdf = kdf;
++ // END android-removed
+ }
+
+ protected Key engineDoPhase(
+@@ -103,25 +115,27 @@
+ }
+
+ CipherParameters pubKey;
+- if (agreement instanceof ECMQVBasicAgreement)
+- {
+- if (!(key instanceof MQVPublicKey))
+- {
+- throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
+- + getSimpleName(MQVPublicKey.class) + " for doPhase");
+- }
+-
+- MQVPublicKey mqvPubKey = (MQVPublicKey)key;
+- ECPublicKeyParameters staticKey = (ECPublicKeyParameters)
+- ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey());
+- ECPublicKeyParameters ephemKey = (ECPublicKeyParameters)
+- ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey());
+-
+- pubKey = new MQVPublicParameters(staticKey, ephemKey);
+-
+- // TODO Validate that all the keys are using the same parameters?
+- }
+- else
++ // BEGIN android-removed
++ // if (agreement instanceof ECMQVBasicAgreement)
++ // {
++ // if (!(key instanceof MQVPublicKey))
++ // {
++ // throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
++ // + getSimpleName(MQVPublicKey.class) + " for doPhase");
++ // }
++ //
++ // MQVPublicKey mqvPubKey = (MQVPublicKey)key;
++ // ECPublicKeyParameters staticKey = (ECPublicKeyParameters)
++ // ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey());
++ // ECPublicKeyParameters ephemKey = (ECPublicKeyParameters)
++ // ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey());
++ //
++ // pubKey = new MQVPublicParameters(staticKey, ephemKey);
++ //
++ // // TODO Validate that all the keys are using the same parameters?
++ // }
++ // else
++ // END android-removed
+ {
+ if (!(key instanceof ECPublicKey))
+ {
+@@ -142,11 +156,13 @@
+ protected byte[] engineGenerateSecret()
+ throws IllegalStateException
+ {
+- if (kdf != null)
+- {
+- throw new UnsupportedOperationException(
+- "KDF can only be used when algorithm is known");
+- }
++ // BEGIN android-removed
++ // if (kdf != null)
++ // {
++ // throw new UnsupportedOperationException(
++ // "KDF can only be used when algorithm is known");
++ // }
++ // END android-removed
+
+ return bigIntToBytes(result);
+ }
+@@ -174,23 +190,25 @@
+ {
+ byte[] secret = bigIntToBytes(result);
+
+- if (kdf != null)
+- {
+- if (!algorithms.containsKey(algorithm))
+- {
+- throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm);
+- }
+-
+- int keySize = ((Integer)algorithms.get(algorithm)).intValue();
+-
+- DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret);
+-
+- byte[] keyBytes = new byte[keySize / 8];
+- kdf.init(params);
+- kdf.generateBytes(keyBytes, 0, keyBytes.length);
+- secret = keyBytes;
+- }
+- else
++ // BEGIN android-removed
++ // if (kdf != null)
++ // {
++ // if (!algorithms.containsKey(algorithm))
++ // {
++ // throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm);
++ // }
++ //
++ // int keySize = ((Integer)algorithms.get(algorithm)).intValue();
++ //
++ // DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret);
++ //
++ // byte[] keyBytes = new byte[keySize / 8];
++ // kdf.init(params);
++ // kdf.generateBytes(keyBytes, 0, keyBytes.length);
++ // secret = keyBytes;
++ // }
++ // else
++ // END android-removed
+ {
+ // TODO Should we be ensuring the key is the right length?
+ }
+@@ -218,35 +236,37 @@
+ private void initFromKey(Key key)
+ throws InvalidKeyException
+ {
+- if (agreement instanceof ECMQVBasicAgreement)
+- {
+- if (!(key instanceof MQVPrivateKey))
+- {
+- throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
+- + getSimpleName(MQVPrivateKey.class) + " for initialisation");
+- }
+-
+- MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key;
+- ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters)
+- ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey());
+- ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters)
+- ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey());
+-
+- ECPublicKeyParameters ephemPubKey = null;
+- if (mqvPrivKey.getEphemeralPublicKey() != null)
+- {
+- ephemPubKey = (ECPublicKeyParameters)
+- ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey());
+- }
+-
+- MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey);
+- this.parameters = staticPrivKey.getParameters();
+-
+- // TODO Validate that all the keys are using the same parameters?
+-
+- agreement.init(localParams);
+- }
+- else
++ // BEGIN android-removed
++ // if (agreement instanceof ECMQVBasicAgreement)
++ // {
++ // if (!(key instanceof MQVPrivateKey))
++ // {
++ // throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
++ // + getSimpleName(MQVPrivateKey.class) + " for initialisation");
++ // }
++ //
++ // MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key;
++ // ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters)
++ // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey());
++ // ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters)
++ // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey());
++ //
++ // ECPublicKeyParameters ephemPubKey = null;
++ // if (mqvPrivKey.getEphemeralPublicKey() != null)
++ // {
++ // ephemPubKey = (ECPublicKeyParameters)
++ // ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey());
++ // }
++ //
++ // MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey);
++ // this.parameters = staticPrivKey.getParameters();
++ //
++ // // TODO Validate that all the keys are using the same parameters?
++ //
++ // agreement.init(localParams);
++ // }
++ // else
++ // END android-removed
+ {
+ if (!(key instanceof ECPrivateKey))
+ {
+@@ -277,39 +297,41 @@
+ }
+ }
+
+- public static class DHC
+- extends KeyAgreementSpi
+- {
+- public DHC()
+- {
+- super("ECDHC", new ECDHCBasicAgreement(), null);
+- }
+- }
+-
+- public static class MQV
+- extends KeyAgreementSpi
+- {
+- public MQV()
+- {
+- super("ECMQV", new ECMQVBasicAgreement(), null);
+- }
+- }
+-
+- public static class DHwithSHA1KDF
+- extends KeyAgreementSpi
+- {
+- public DHwithSHA1KDF()
+- {
+- super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
+- }
+- }
+-
+- public static class MQVwithSHA1KDF
+- extends KeyAgreementSpi
+- {
+- public MQVwithSHA1KDF()
+- {
+- super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
+- }
+- }
++ // BEGIN android-removed
++ // public static class DHC
++ // extends KeyAgreementSpi
++ // {
++ // public DHC()
++ // {
++ // super("ECDHC", new ECDHCBasicAgreement(), null);
++ // }
++ // }
++ //
++ // public static class MQV
++ // extends KeyAgreementSpi
++ // {
++ // public MQV()
++ // {
++ // super("ECMQV", new ECMQVBasicAgreement(), null);
++ // }
++ // }
++ //
++ // public static class DHwithSHA1KDF
++ // extends KeyAgreementSpi
++ // {
++ // public DHwithSHA1KDF()
++ // {
++ // super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
++ // }
++ // }
++ //
++ // public static class MQVwithSHA1KDF
++ // extends KeyAgreementSpi
++ // {
++ // public MQVwithSHA1KDF()
++ // {
++ // super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
++ // }
++ // }
++ // END android-removed
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -200,14 +200,16 @@
+ }
+ }
+
+- public static class ECGOST3410
+- extends KeyFactorySpi
+- {
+- public ECGOST3410()
+- {
+- super("ECGOST3410", BouncyCastleProvider.CONFIGURATION);
+- }
+- }
++ // BEGIN android-removed
++ // public static class ECGOST3410
++ // extends KeyFactorySpi
++ // {
++ // public ECGOST3410()
++ // {
++ // super("ECGOST3410", BouncyCastleProvider.CONFIGURATION);
++ // }
++ // }
++ // END android-removed
+
+ public static class ECDH
+ extends KeyFactorySpi
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -12,7 +12,9 @@
+ import org.bouncycastle.asn1.ASN1ObjectIdentifier;
+ import org.bouncycastle.asn1.nist.NISTNamedCurves;
+ import org.bouncycastle.asn1.sec.SECNamedCurves;
+-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
++// END android-removed
+ import org.bouncycastle.asn1.x9.X962NamedCurves;
+ import org.bouncycastle.asn1.x9.X9ECParameters;
+ import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
+@@ -55,13 +57,15 @@
+ static {
+ ecParameters = new Hashtable();
+
+- ecParameters.put(new Integer(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192
+- ecParameters.put(new Integer(239), new ECGenParameterSpec("prime239v1"));
+- ecParameters.put(new Integer(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256
+-
+- ecParameters.put(new Integer(224), new ECGenParameterSpec("P-224"));
+- ecParameters.put(new Integer(384), new ECGenParameterSpec("P-384"));
+- ecParameters.put(new Integer(521), new ECGenParameterSpec("P-521"));
++ // BEGIN android-changed
++ ecParameters.put(Integer.valueOf(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192
++ ecParameters.put(Integer.valueOf(239), new ECGenParameterSpec("prime239v1"));
++ ecParameters.put(Integer.valueOf(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256
++
++ ecParameters.put(Integer.valueOf(224), new ECGenParameterSpec("P-224"));
++ ecParameters.put(Integer.valueOf(384), new ECGenParameterSpec("P-384"));
++ ecParameters.put(Integer.valueOf(521), new ECGenParameterSpec("P-521"));
++ // END android-changed
+ }
+
+ public EC()
+@@ -85,8 +89,16 @@
+ SecureRandom random)
+ {
+ this.strength = strength;
++ // BEGIN android-added
++ if (random != null) {
++ // END android-added
+ this.random = random;
+- ECGenParameterSpec ecParams = (ECGenParameterSpec)ecParameters.get(new Integer(strength));
++ // BEGIN android-added
++ }
++ // END android-added
++ // BEGIN android-changed
++ ECGenParameterSpec ecParams = (ECGenParameterSpec)ecParameters.get(Integer.valueOf(strength));
++ // END android-changed
+
+ if (ecParams != null)
+ {
+@@ -110,6 +122,11 @@
+ SecureRandom random)
+ throws InvalidAlgorithmParameterException
+ {
++ // BEGIN android-added
++ if (random == null) {
++ random = this.random;
++ }
++ // END android-added
+ if (params instanceof ECParameterSpec)
+ {
+ ECParameterSpec p = (ECParameterSpec)params;
+@@ -154,10 +171,12 @@
+ {
+ ecP = NISTNamedCurves.getByName(curveName);
+ }
+- if (ecP == null)
+- {
+- ecP = TeleTrusTNamedCurves.getByName(curveName);
+- }
++ // BEGIN android-removed
++ // if (ecP == null)
++ // {
++ // ecP = TeleTrusTNamedCurves.getByName(curveName);
++ // }
++ // END android-removed
+ if (ecP == null)
+ {
+ // See if it's actually an OID string (SunJSSE ServerHandshaker setupEphemeralECDHKeys bug)
+@@ -173,10 +192,12 @@
+ {
+ ecP = NISTNamedCurves.getByOID(oid);
+ }
+- if (ecP == null)
+- {
+- ecP = TeleTrusTNamedCurves.getByOID(oid);
+- }
++ // BEGIN android-removed
++ // if (ecP == null)
++ // {
++ // ecP = TeleTrusTNamedCurves.getByOID(oid);
++ // }
++ // END android-removed
+ if (ecP == null)
+ {
+ throw new InvalidAlgorithmParameterException("unknown curve OID: " + curveName);
+@@ -231,7 +252,15 @@
+ {
+ if (!initialised)
+ {
+- throw new IllegalStateException("EC Key Pair Generator not initialised");
++ // BEGIN android-removed
++ // throw new IllegalStateException("EC Key Pair Generator not initialised");
++ // END android-removed
++ // BEGIN android-added
++ /*
++ * KeyPairGenerator documentation says that a default initialization must be provided
++ */
++ initialize(192, random);
++ // END android-added
+ }
+
+ AsymmetricCipherKeyPair pair = engine.generateKeyPair();
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -18,15 +18,22 @@
+ import org.bouncycastle.crypto.DSA;
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.digests.NullDigest;
+-import org.bouncycastle.crypto.digests.RIPEMD160Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA224Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.SHA384Digest;
+-import org.bouncycastle.crypto.digests.SHA512Digest;
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
++// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
++// import org.bouncycastle.crypto.digests.SHA1Digest;
++// import org.bouncycastle.crypto.digests.SHA224Digest;
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.SHA384Digest;
++// import org.bouncycastle.crypto.digests.SHA512Digest;
++// END android-removed
+ import org.bouncycastle.crypto.params.ParametersWithRandom;
+ import org.bouncycastle.crypto.signers.ECDSASigner;
+-import org.bouncycastle.crypto.signers.ECNRSigner;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.signers.ECNRSigner;
++// END android-removed
+ import org.bouncycastle.jcajce.provider.asymmetric.util.DSABase;
+ import org.bouncycastle.jcajce.provider.asymmetric.util.DSAEncoder;
+ import org.bouncycastle.jce.interfaces.ECKey;
+@@ -108,7 +115,9 @@
+ {
+ public ecDSA()
+ {
+- super(new SHA1Digest(), new ECDSASigner(), new StdDSAEncoder());
++ // BEGIN android-changed
++ super(new OpenSSLDigest.SHA1(), new ECDSASigner(), new StdDSAEncoder());
++ // END android-changed
+ }
+ }
+
+@@ -121,21 +130,25 @@
+ }
+ }
+
+- static public class ecDSA224
+- extends SignatureSpi
+- {
+- public ecDSA224()
+- {
+- super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder());
+- }
+- }
++ // BEGIN android-removed
++ // static public class ecDSA224
++ // extends SignatureSpi
++ // {
++ // public ecDSA224()
++ // {
++ // super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder());
++ // }
++ // }
++ // END android-removed
+
+ static public class ecDSA256
+ extends SignatureSpi
+ {
+ public ecDSA256()
+ {
+- super(new SHA256Digest(), new ECDSASigner(), new StdDSAEncoder());
++ // BEGIN android-changed
++ super(new OpenSSLDigest.SHA256(), new ECDSASigner(), new StdDSAEncoder());
++ // END android-changed
+ }
+ }
+
+@@ -144,7 +157,9 @@
+ {
+ public ecDSA384()
+ {
+- super(new SHA384Digest(), new ECDSASigner(), new StdDSAEncoder());
++ // BEGIN android-changed
++ super(new OpenSSLDigest.SHA384(), new ECDSASigner(), new StdDSAEncoder());
++ // END android-changed
+ }
+ }
+
+@@ -153,90 +168,94 @@
+ {
+ public ecDSA512()
+ {
+- super(new SHA512Digest(), new ECDSASigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecDSARipeMD160
+- extends SignatureSpi
+- {
+- public ecDSARipeMD160()
+- {
+- super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecNR
+- extends SignatureSpi
+- {
+- public ecNR()
+- {
+- super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecNR224
+- extends SignatureSpi
+- {
+- public ecNR224()
+- {
+- super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecNR256
+- extends SignatureSpi
+- {
+- public ecNR256()
+- {
+- super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecNR384
+- extends SignatureSpi
+- {
+- public ecNR384()
+- {
+- super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecNR512
+- extends SignatureSpi
+- {
+- public ecNR512()
+- {
+- super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
+- }
+- }
+-
+- static public class ecCVCDSA
+- extends SignatureSpi
+- {
+- public ecCVCDSA()
+- {
+- super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder());
+- }
+- }
+-
+- static public class ecCVCDSA224
+- extends SignatureSpi
+- {
+- public ecCVCDSA224()
+- {
+- super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder());
+- }
+- }
+-
+- static public class ecCVCDSA256
+- extends SignatureSpi
+- {
+- public ecCVCDSA256()
+- {
+- super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder());
+- }
+- }
++ // BEGIN android-changed
++ super(new OpenSSLDigest.SHA512(), new ECDSASigner(), new StdDSAEncoder());
++ // END android-changed
++ }
++ }
++
++ // BEGIN android-removed
++ // static public class ecDSARipeMD160
++ // extends SignatureSpi
++ // {
++ // public ecDSARipeMD160()
++ // {
++ // super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecNR
++ // extends SignatureSpi
++ // {
++ // public ecNR()
++ // {
++ // super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecNR224
++ // extends SignatureSpi
++ // {
++ // public ecNR224()
++ // {
++ // super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecNR256
++ // extends SignatureSpi
++ // {
++ // public ecNR256()
++ // {
++ // super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecNR384
++ // extends SignatureSpi
++ // {
++ // public ecNR384()
++ // {
++ // super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecNR512
++ // extends SignatureSpi
++ // {
++ // public ecNR512()
++ // {
++ // super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecCVCDSA
++ // extends SignatureSpi
++ // {
++ // public ecCVCDSA()
++ // {
++ // super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecCVCDSA224
++ // extends SignatureSpi
++ // {
++ // public ecCVCDSA224()
++ // {
++ // super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder());
++ // }
++ // }
++ //
++ // static public class ecCVCDSA256
++ // extends SignatureSpi
++ // {
++ // public ecCVCDSA256()
++ // {
++ // super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder());
++ // }
++ // }
++ // END android-removed
+
+ private static class StdDSAEncoder
+ implements DSAEncoder
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -55,11 +55,15 @@
+ {
+ AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
+ DigestFactory.getOID(currentSpec.getDigestAlgorithm()),
+- new DERNull());
++ // BEGIN android-changed
++ DERNull.INSTANCE);
++ // END android-changed
+ MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)currentSpec.getMGFParameters();
+ AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
+ PKCSObjectIdentifiers.id_mgf1,
+- new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), new DERNull()));
++ // BEGIN android-changed
++ new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE));
++ // END android-changed
+ PSource.PSpecified pSource = (PSource.PSpecified)currentSpec.getPSource();
+ AlgorithmIdentifier pSourceAlgorithm = new AlgorithmIdentifier(
+ PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(pSource.getValue()));
+@@ -170,11 +174,15 @@
+ PSSParameterSpec pssSpec = currentSpec;
+ AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
+ DigestFactory.getOID(pssSpec.getDigestAlgorithm()),
+- new DERNull());
++ // BEGIN android-changed
++ DERNull.INSTANCE);
++ // END android-changed
+ MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)pssSpec.getMGFParameters();
+ AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
+ PKCSObjectIdentifiers.id_mgf1,
+- new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), new DERNull()));
++ // BEGIN android-changed
++ new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE));
++ // END android-changed
+ RSASSAPSSparams pssP = new RSASSAPSSparams(hashAlgorithm, maskGenAlgorithm, new ASN1Integer(pssSpec.getSaltLength()), new ASN1Integer(pssSpec.getTrailerField()));
+
+ return pssP.getEncoded("DER");
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -127,7 +127,9 @@
+ */
+ public byte[] getEncoded()
+ {
+- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()));
++ // BEGIN android-changed
++ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()));
++ // END android-changed
+ }
+
+ /**
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -78,7 +78,9 @@
+
+ public byte[] getEncoded()
+ {
+- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO));
++ // BEGIN android-changed
++ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO));
++ // END android-changed
+ }
+
+ public boolean equals(Object o)
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -89,7 +89,9 @@
+
+ public byte[] getEncoded()
+ {
+- return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new org.bouncycastle.asn1.pkcs.RSAPublicKey(getModulus(), getPublicExponent()));
++ // BEGIN android-changed
++ return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new org.bouncycastle.asn1.pkcs.RSAPublicKey(getModulus(), getPublicExponent()));
++ // END android-changed
+ }
+
+ public int hashCode()
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -26,7 +26,9 @@
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.Digest;
+ import org.bouncycastle.crypto.InvalidCipherTextException;
+-import org.bouncycastle.crypto.encodings.ISO9796d1Encoding;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.encodings.ISO9796d1Encoding;
++// END android-removed
+ import org.bouncycastle.crypto.encodings.OAEPEncoding;
+ import org.bouncycastle.crypto.encodings.PKCS1Encoding;
+ import org.bouncycastle.crypto.engines.RSABlindedEngine;
+@@ -197,10 +199,12 @@
+ {
+ cipher = new PKCS1Encoding(new RSABlindedEngine());
+ }
+- else if (pad.equals("ISO9796-1PADDING"))
+- {
+- cipher = new ISO9796d1Encoding(new RSABlindedEngine());
+- }
++ // BEGIN android-removed
++ // else if (pad.equals("ISO9796-1PADDING"))
++ // {
++ // cipher = new ISO9796d1Encoding(new RSABlindedEngine());
++ // }
++ // END android-removed
+ else if (pad.equals("OAEPWITHMD5ANDMGF1PADDING"))
+ {
+ initFromSpec(new OAEPParameterSpec("MD5", "MGF1", new MGF1ParameterSpec("MD5"), PSource.PSpecified.DEFAULT));
+@@ -213,10 +217,12 @@
+ {
+ initFromSpec(OAEPParameterSpec.DEFAULT);
+ }
+- else if (pad.equals("OAEPWITHSHA224ANDMGF1PADDING") || pad.equals("OAEPWITHSHA-224ANDMGF1PADDING"))
+- {
+- initFromSpec(new OAEPParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), PSource.PSpecified.DEFAULT));
+- }
++ // BEGIN android-removed
++ // else if (pad.equals("OAEPWITHSHA224ANDMGF1PADDING") || pad.equals("OAEPWITHSHA-224ANDMGF1PADDING"))
++ // {
++ // initFromSpec(new OAEPParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), PSource.PSpecified.DEFAULT));
++ // }
++ // END android-removed
+ else if (pad.equals("OAEPWITHSHA256ANDMGF1PADDING") || pad.equals("OAEPWITHSHA-256ANDMGF1PADDING"))
+ {
+ initFromSpec(new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT));
+@@ -534,48 +540,50 @@
+ }
+ }
+
+- static public class PKCS1v1_5Padding
+- extends CipherSpi
+- {
+- public PKCS1v1_5Padding()
+- {
+- super(new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class PKCS1v1_5Padding_PrivateOnly
+- extends CipherSpi
+- {
+- public PKCS1v1_5Padding_PrivateOnly()
+- {
+- super(false, true, new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class PKCS1v1_5Padding_PublicOnly
+- extends CipherSpi
+- {
+- public PKCS1v1_5Padding_PublicOnly()
+- {
+- super(true, false, new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class OAEPPadding
+- extends CipherSpi
+- {
+- public OAEPPadding()
+- {
+- super(OAEPParameterSpec.DEFAULT);
+- }
+- }
+-
+- static public class ISO9796d1Padding
+- extends CipherSpi
+- {
+- public ISO9796d1Padding()
+- {
+- super(new ISO9796d1Encoding(new RSABlindedEngine()));
+- }
+- }
++ // BEGIN android-removed
++ // static public class PKCS1v1_5Padding
++ // extends CipherSpi
++ // {
++ // public PKCS1v1_5Padding()
++ // {
++ // super(new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class PKCS1v1_5Padding_PrivateOnly
++ // extends CipherSpi
++ // {
++ // public PKCS1v1_5Padding_PrivateOnly()
++ // {
++ // super(false, true, new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class PKCS1v1_5Padding_PublicOnly
++ // extends CipherSpi
++ // {
++ // public PKCS1v1_5Padding_PublicOnly()
++ // {
++ // super(true, false, new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class OAEPPadding
++ // extends CipherSpi
++ // {
++ // public OAEPPadding()
++ // {
++ // super(OAEPParameterSpec.DEFAULT);
++ // }
++ // }
++ //
++ // static public class ISO9796d1Padding
++ // extends CipherSpi
++ // {
++ // public ISO9796d1Padding()
++ // {
++ // super(new ISO9796d1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ // END android-removed
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -17,24 +17,31 @@
+ import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
+ import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// END android-removed
+ import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
+ import org.bouncycastle.asn1.x509.DigestInfo;
+ import org.bouncycastle.crypto.AsymmetricBlockCipher;
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.Digest;
+-import org.bouncycastle.crypto.digests.MD2Digest;
+-import org.bouncycastle.crypto.digests.MD4Digest;
+-import org.bouncycastle.crypto.digests.MD5Digest;
+-import org.bouncycastle.crypto.digests.NullDigest;
+-import org.bouncycastle.crypto.digests.RIPEMD128Digest;
+-import org.bouncycastle.crypto.digests.RIPEMD160Digest;
+-import org.bouncycastle.crypto.digests.RIPEMD256Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA224Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.SHA384Digest;
+-import org.bouncycastle.crypto.digests.SHA512Digest;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.MD2Digest;
++// import org.bouncycastle.crypto.digests.MD4Digest;
++// import org.bouncycastle.crypto.digests.MD5Digest;
++// import org.bouncycastle.crypto.digests.NullDigest;
++// import org.bouncycastle.crypto.digests.RIPEMD128Digest;
++// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
++// import org.bouncycastle.crypto.digests.RIPEMD256Digest;
++// import org.bouncycastle.crypto.digests.SHA1Digest;
++// import org.bouncycastle.crypto.digests.SHA224Digest;
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.SHA384Digest;
++// import org.bouncycastle.crypto.digests.SHA512Digest;
++// END android-removed
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
+ import org.bouncycastle.crypto.encodings.PKCS1Encoding;
+ import org.bouncycastle.crypto.engines.RSABlindedEngine;
+
+@@ -261,25 +268,31 @@
+ {
+ public SHA1()
+ {
+- super(OIWObjectIdentifiers.idSHA1, new SHA1Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // BEGIN android-changed
++ super(OIWObjectIdentifiers.idSHA1, new OpenSSLDigest.SHA1(), new PKCS1Encoding(new RSABlindedEngine()));
++ // END android-changed
+ }
+ }
+
+- static public class SHA224
+- extends DigestSignatureSpi
+- {
+- public SHA224()
+- {
+- super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
++ // BEGIN android-removed
++ // static public class SHA224
++ // extends DigestSignatureSpi
++ // {
++ // public SHA224()
++ // {
++ // super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ // END android-removed
+
+ static public class SHA256
+ extends DigestSignatureSpi
+ {
+ public SHA256()
+ {
+- super(NISTObjectIdentifiers.id_sha256, new SHA256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // BEGIN android-changed
++ super(NISTObjectIdentifiers.id_sha256, new OpenSSLDigest.SHA256(), new PKCS1Encoding(new RSABlindedEngine()));
++ // END android-changed
+ }
+ }
+
+@@ -288,7 +301,9 @@
+ {
+ public SHA384()
+ {
+- super(NISTObjectIdentifiers.id_sha384, new SHA384Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // BEGIN android-changed
++ super(NISTObjectIdentifiers.id_sha384, new OpenSSLDigest.SHA384(), new PKCS1Encoding(new RSABlindedEngine()));
++ // END android-changed
+ }
+ }
+
+@@ -297,70 +312,78 @@
+ {
+ public SHA512()
+ {
+- super(NISTObjectIdentifiers.id_sha512, new SHA512Digest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class MD2
+- extends DigestSignatureSpi
+- {
+- public MD2()
+- {
+- super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // BEGIN android-changed
++ super(NISTObjectIdentifiers.id_sha512, new OpenSSLDigest.SHA512(), new PKCS1Encoding(new RSABlindedEngine()));
++ // END android-changed
+ }
+ }
+
+- static public class MD4
+- extends DigestSignatureSpi
+- {
+- public MD4()
+- {
+- super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
++ // BEGIN android-removed
++ // static public class MD2
++ // extends DigestSignatureSpi
++ // {
++ // public MD2()
++ // {
++ // super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class MD4
++ // extends DigestSignatureSpi
++ // {
++ // public MD4()
++ // {
++ // super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ // END android-removed
+
+ static public class MD5
+ extends DigestSignatureSpi
+ {
+ public MD5()
+ {
+- super(PKCSObjectIdentifiers.md5, new MD5Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // BEGIN android-changed
++ super(PKCSObjectIdentifiers.md5, new OpenSSLDigest.MD5(), new PKCS1Encoding(new RSABlindedEngine()));
++ // END android-changed
+ }
+ }
+
+- static public class RIPEMD160
+- extends DigestSignatureSpi
+- {
+- public RIPEMD160()
+- {
+- super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class RIPEMD128
+- extends DigestSignatureSpi
+- {
+- public RIPEMD128()
+- {
+- super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class RIPEMD256
+- extends DigestSignatureSpi
+- {
+- public RIPEMD256()
+- {
+- super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
+-
+- static public class noneRSA
+- extends DigestSignatureSpi
+- {
+- public noneRSA()
+- {
+- super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine()));
+- }
+- }
++ // BEGIN android-removed
++ // static public class RIPEMD160
++ // extends DigestSignatureSpi
++ // {
++ // public RIPEMD160()
++ // {
++ // super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class RIPEMD128
++ // extends DigestSignatureSpi
++ // {
++ // public RIPEMD128()
++ // {
++ // super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class RIPEMD256
++ // extends DigestSignatureSpi
++ // {
++ // public RIPEMD256()
++ // {
++ // super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ //
++ // static public class noneRSA
++ // extends DigestSignatureSpi
++ // {
++ // public noneRSA()
++ // {
++ // super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine()));
++ // }
++ // }
++ // END android-removed
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 2012-09-11 00:12:44.000000000 +0000
+@@ -18,8 +18,10 @@
+ import javax.crypto.NoSuchPaddingException;
+ import javax.crypto.spec.IvParameterSpec;
+ import javax.crypto.spec.PBEParameterSpec;
+-import javax.crypto.spec.RC2ParameterSpec;
+-import javax.crypto.spec.RC5ParameterSpec;
++// BEGIN android-removed
++// import javax.crypto.spec.RC2ParameterSpec;
++// import javax.crypto.spec.RC5ParameterSpec;
++// END android-removed
+ import javax.crypto.spec.SecretKeySpec;
+
+ import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+@@ -37,8 +39,10 @@
+ {
+ IvParameterSpec.class,
+ PBEParameterSpec.class,
+- RC2ParameterSpec.class,
+- RC5ParameterSpec.class
++ // BEGIN android-removed
++ // RC2ParameterSpec.class,
++ // RC5ParameterSpec.class
++ // END android-removed
+ };
+
+
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 2012-09-11 00:12:44.000000000 +0000
+@@ -36,7 +36,9 @@
+ import org.bouncycastle.asn1.pkcs.SignedData;
+ import org.bouncycastle.jce.provider.BouncyCastleProvider;
+ import org.bouncycastle.util.io.pem.PemObject;
+-import org.bouncycastle.util.io.pem.PemWriter;
++// BEGIN android-removed
++// import org.bouncycastle.util.io.pem.PemWriter;
++// END android-removed
+
+ /**
+ * CertPath implementation for X.509 certificates.
+@@ -298,27 +300,29 @@
+ return toDEREncoded(new ContentInfo(
+ PKCSObjectIdentifiers.signedData, sd));
+ }
+- else if (encoding.equalsIgnoreCase("PEM"))
+- {
+- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
+- PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut));
+-
+- try
+- {
+- for (int i = 0; i != certificates.size(); i++)
+- {
+- pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded()));
+- }
+-
+- pWrt.close();
+- }
+- catch (Exception e)
+- {
+- throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
+- }
+-
+- return bOut.toByteArray();
+- }
++ // BEGIN android-removed
++ // else if (encoding.equalsIgnoreCase("PEM"))
++ // {
++ // ByteArrayOutputStream bOut = new ByteArrayOutputStream();
++ // PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut));
++ //
++ // try
++ // {
++ // for (int i = 0; i != certificates.size(); i++)
++ // {
++ // pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded()));
++ // }
++ //
++ // pWrt.close();
++ // }
++ // catch (Exception e)
++ // {
++ // throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
++ // }
++ //
++ // return bOut.toByteArray();
++ // }
++ // END android-removed
+ else
+ {
+ throw new CertificateEncodingException("unsupported encoding: " + encoding);
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/AES.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/AES.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/AES.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/AES.java 2012-09-11 00:12:44.000000000 +0000
+@@ -1,31 +1,43 @@
+ package org.bouncycastle.jcajce.provider.symmetric;
+
+-import java.security.AlgorithmParameters;
+-import java.security.InvalidAlgorithmParameterException;
++// BEGIN android-removed
++// import java.security.AlgorithmParameters;
++// import java.security.InvalidAlgorithmParameterException;
++// END android-removed
+ import java.security.SecureRandom;
+-import java.security.spec.AlgorithmParameterSpec;
+-
+-import javax.crypto.spec.IvParameterSpec;
++// BEGIN android-removed
++// import java.security.spec.AlgorithmParameterSpec;
++//
++// import javax.crypto.spec.IvParameterSpec;
++// END android-removed
+
+ import org.bouncycastle.asn1.nist.NISTObjectIdentifiers;
+ import org.bouncycastle.crypto.BufferedBlockCipher;
+ import org.bouncycastle.crypto.CipherKeyGenerator;
+ import org.bouncycastle.crypto.engines.AESFastEngine;
+ import org.bouncycastle.crypto.engines.AESWrapEngine;
+-import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
+-import org.bouncycastle.crypto.macs.CMac;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
++// import org.bouncycastle.crypto.macs.CMac;
++// END android-removed
+ import org.bouncycastle.crypto.modes.CBCBlockCipher;
+ import org.bouncycastle.crypto.modes.CFBBlockCipher;
+ import org.bouncycastle.crypto.modes.OFBBlockCipher;
+ import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
+-import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator;
++// BEGIN android-removed
++// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator;
++// END android-removed
+ import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
+ import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
+-import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
++// BEGIN android-removed
++// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
++// END android-removed
+ import org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher;
+ import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters;
+ import org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
+-import org.bouncycastle.jce.provider.BouncyCastleProvider;
++// BEGIN android-removed
++// import org.bouncycastle.jce.provider.BouncyCastleProvider;
++// END android-removed
+
+ public final class AES
+ {
+@@ -69,15 +81,17 @@
+ }
+ }
+
+- public static class AESCMAC
+- extends BaseMac
+- {
+- public AESCMAC()
+- {
+- super(new CMac(new AESFastEngine()));
+- }
+- }
+-
++ // BEGIN android-removed
++ // public static class AESCMAC
++ // extends BaseMac
++ // {
++ // public AESCMAC()
++ // {
++ // super(new CMac(new AESFastEngine()));
++ // }
++ // }
++ // END android-removed
++
+ static public class Wrap
+ extends BaseWrapCipher
+ {
+@@ -86,15 +100,17 @@
+ super(new AESWrapEngine());
+ }
+ }
+-
+- public static class RFC3211Wrap
+- extends BaseWrapCipher
+- {
+- public RFC3211Wrap()
+- {
+- super(new RFC3211WrapEngine(new AESFastEngine()), 16);
+- }
+- }
++
++ // BEGIN android-removed
++ // public static class RFC3211Wrap
++ // extends BaseWrapCipher
++ // {
++ // public RFC3211Wrap()
++ // {
++ // super(new RFC3211WrapEngine(new AESFastEngine()), 16);
++ // }
++ // }
++ // END android-removed
+
+ public static class KeyGen
+ extends BaseKeyGenerator
+@@ -110,70 +126,72 @@
+ }
+ }
+
+- public static class KeyGen128
+- extends KeyGen
+- {
+- public KeyGen128()
+- {
+- super(128);
+- }
+- }
+-
+- public static class KeyGen192
+- extends KeyGen
+- {
+- public KeyGen192()
+- {
+- super(192);
+- }
+- }
+-
+- public static class KeyGen256
+- extends KeyGen
+- {
+- public KeyGen256()
+- {
+- super(256);
+- }
+- }
+-
+- public static class AlgParamGen
+- extends BaseAlgorithmParameterGenerator
+- {
+- protected void engineInit(
+- AlgorithmParameterSpec genParamSpec,
+- SecureRandom random)
+- throws InvalidAlgorithmParameterException
+- {
+- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
+- }
+-
+- protected AlgorithmParameters engineGenerateParameters()
+- {
+- byte[] iv = new byte[16];
+-
+- if (random == null)
+- {
+- random = new SecureRandom();
+- }
+-
+- random.nextBytes(iv);
+-
+- AlgorithmParameters params;
+-
+- try
+- {
+- params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
+- params.init(new IvParameterSpec(iv));
+- }
+- catch (Exception e)
+- {
+- throw new RuntimeException(e.getMessage());
+- }
+-
+- return params;
+- }
+- }
++ // BEGIN android-removed
++ // public static class KeyGen128
++ // extends KeyGen
++ // {
++ // public KeyGen128()
++ // {
++ // super(128);
++ // }
++ // }
++ //
++ // public static class KeyGen192
++ // extends KeyGen
++ // {
++ // public KeyGen192()
++ // {
++ // super(192);
++ // }
++ // }
++ //
++ // public static class KeyGen256
++ // extends KeyGen
++ // {
++ // public KeyGen256()
++ // {
++ // super(256);
++ // }
++ // }
++ //
++ // public static class AlgParamGen
++ // extends BaseAlgorithmParameterGenerator
++ // {
++ // protected void engineInit(
++ // AlgorithmParameterSpec genParamSpec,
++ // SecureRandom random)
++ // throws InvalidAlgorithmParameterException
++ // {
++ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
++ // }
++ //
++ // protected AlgorithmParameters engineGenerateParameters()
++ // {
++ // byte[] iv = new byte[16];
++ //
++ // if (random == null)
++ // {
++ // random = new SecureRandom();
++ // }
++ //
++ // random.nextBytes(iv);
++ //
++ // AlgorithmParameters params;
++ //
++ // try
++ // {
++ // params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
++ // params.init(new IvParameterSpec(iv));
++ // }
++ // catch (Exception e)
++ // {
++ // throw new RuntimeException(e.getMessage());
++ // }
++ //
++ // return params;
++ // }
++ // }
++ // END android-removed
+
+ public static class AlgParams
+ extends IvAlgorithmParameters
+@@ -212,58 +230,66 @@
+ provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
+ provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
+
+- provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
++ // BEGIN android-removed
++ // provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
++ // END android-removed
+
+ provider.addAlgorithm("Cipher.AES", PREFIX + "$ECB");
+ provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES128, "AES");
+ provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES192, "AES");
+ provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES256, "AES");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB");
+- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB");
++ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB");
++ // END android-removed
+ provider.addAlgorithm("Cipher.AESWRAP", PREFIX + "$Wrap");
+ provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_wrap, "AESWRAP");
+ provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_wrap, "AESWRAP");
+ provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_wrap, "AESWRAP");
+- provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap");
++ // END android-removed
+
+ provider.addAlgorithm("KeyGenerator.AES", PREFIX + "$KeyGen");
+- provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128");
+- provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192");
+- provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256");
+- provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192");
+- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256");
+-
+- provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC");
++ // BEGIN android-removed
++ // provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128");
++ // provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192");
++ // provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256");
++ // provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192");
++ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256");
++ //
++ // provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC");
++ // END android-removed
+ }
+ }
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/ARC4.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/ARC4.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 2012-09-11 00:12:44.000000000 +0000
+@@ -27,7 +27,9 @@
+ {
+ public KeyGen()
+ {
+- super("RC4", 128, new CipherKeyGenerator());
++ // BEGIN android-changed
++ super("ARC4", 128, new CipherKeyGenerator());
++ // END android-changed
+ }
+ }
+
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 2012-09-11 00:12:44.000000000 +0000
+@@ -64,7 +64,9 @@
+ {
+
+ provider.addAlgorithm("Cipher.BLOWFISH", PREFIX + "$ECB");
+- provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC");
++ // END android-removed
+ provider.addAlgorithm("KeyGenerator.BLOWFISH", PREFIX + "$KeyGen");
+ provider.addAlgorithm("Alg.Alias.KeyGenerator.1.3.6.1.4.1.3029.1.2", "BLOWFISH");
+ provider.addAlgorithm("AlgorithmParameters.BLOWFISH", PREFIX + "$AlgParams");
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DES.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DES.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DES.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DES.java 2012-09-11 00:12:44.000000000 +0000
+@@ -16,11 +16,15 @@
+ import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
+ import org.bouncycastle.crypto.KeyGenerationParameters;
+ import org.bouncycastle.crypto.engines.DESEngine;
+-import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
++// END android-removed
+ import org.bouncycastle.crypto.generators.DESKeyGenerator;
+ import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
+-import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
+-import org.bouncycastle.crypto.macs.CMac;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
++// import org.bouncycastle.crypto.macs.CMac;
++// END android-removed
+ import org.bouncycastle.crypto.modes.CBCBlockCipher;
+ import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
+ import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
+@@ -48,115 +52,117 @@
+ }
+ }
+
+- static public class CBC
+- extends BaseBlockCipher
+- {
+- public CBC()
+- {
+- super(new CBCBlockCipher(new DESEngine()), 64);
+- }
+- }
+-
+- /**
+- * DES CFB8
+- */
+- public static class DESCFB8
+- extends BaseMac
+- {
+- public DESCFB8()
+- {
+- super(new CFBBlockCipherMac(new DESEngine()));
+- }
+- }
+-
+- /**
+- * DES64
+- */
+- public static class DES64
+- extends BaseMac
+- {
+- public DES64()
+- {
+- super(new CBCBlockCipherMac(new DESEngine(), 64));
+- }
+- }
+-
+- /**
+- * DES64with7816-4Padding
+- */
+- public static class DES64with7816d4
+- extends BaseMac
+- {
+- public DES64with7816d4()
+- {
+- super(new CBCBlockCipherMac(new DESEngine(), 64, new ISO7816d4Padding()));
+- }
+- }
+-
+- public static class CBCMAC
+- extends BaseMac
+- {
+- public CBCMAC()
+- {
+- super(new CBCBlockCipherMac(new DESEngine()));
+- }
+- }
+-
+- static public class CMAC
+- extends BaseMac
+- {
+- public CMAC()
+- {
+- super(new CMac(new DESEngine()));
+- }
+- }
+-
+- public static class RFC3211
+- extends BaseWrapCipher
+- {
+- public RFC3211()
+- {
+- super(new RFC3211WrapEngine(new DESEngine()), 8);
+- }
+- }
+-
+- public static class AlgParamGen
+- extends BaseAlgorithmParameterGenerator
+- {
+- protected void engineInit(
+- AlgorithmParameterSpec genParamSpec,
+- SecureRandom random)
+- throws InvalidAlgorithmParameterException
+- {
+- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
+- }
+-
+- protected AlgorithmParameters engineGenerateParameters()
+- {
+- byte[] iv = new byte[8];
+-
+- if (random == null)
+- {
+- random = new SecureRandom();
+- }
+-
+- random.nextBytes(iv);
+-
+- AlgorithmParameters params;
+-
+- try
+- {
+- params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
+- params.init(new IvParameterSpec(iv));
+- }
+- catch (Exception e)
+- {
+- throw new RuntimeException(e.getMessage());
+- }
+-
+- return params;
+- }
+- }
++ // BEGIN android-removed
++ // static public class CBC
++ // extends BaseBlockCipher
++ // {
++ // public CBC()
++ // {
++ // super(new CBCBlockCipher(new DESEngine()), 64);
++ // }
++ // }
++ //
++ // /**
++ // * DES CFB8
++ // */
++ // public static class DESCFB8
++ // extends BaseMac
++ // {
++ // public DESCFB8()
++ // {
++ // super(new CFBBlockCipherMac(new DESEngine()));
++ // }
++ // }
++ //
++ // /**
++ // * DES64
++ // */
++ // public static class DES64
++ // extends BaseMac
++ // {
++ // public DES64()
++ // {
++ // super(new CBCBlockCipherMac(new DESEngine(), 64));
++ // }
++ // }
++ //
++ // /**
++ // * DES64with7816-4Padding
++ // */
++ // public static class DES64with7816d4
++ // extends BaseMac
++ // {
++ // public DES64with7816d4()
++ // {
++ // super(new CBCBlockCipherMac(new DESEngine(), 64, new ISO7816d4Padding()));
++ // }
++ // }
++ //
++ // public static class CBCMAC
++ // extends BaseMac
++ // {
++ // public CBCMAC()
++ // {
++ // super(new CBCBlockCipherMac(new DESEngine()));
++ // }
++ // }
++ //
++ // static public class CMAC
++ // extends BaseMac
++ // {
++ // public CMAC()
++ // {
++ // super(new CMac(new DESEngine()));
++ // }
++ // }
++ //
++ // public static class RFC3211
++ // extends BaseWrapCipher
++ // {
++ // public RFC3211()
++ // {
++ // super(new RFC3211WrapEngine(new DESEngine()), 8);
++ // }
++ // }
++ //
++ // public static class AlgParamGen
++ // extends BaseAlgorithmParameterGenerator
++ // {
++ // protected void engineInit(
++ // AlgorithmParameterSpec genParamSpec,
++ // SecureRandom random)
++ // throws InvalidAlgorithmParameterException
++ // {
++ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
++ // }
++ //
++ // protected AlgorithmParameters engineGenerateParameters()
++ // {
++ // byte[] iv = new byte[8];
++ //
++ // if (random == null)
++ // {
++ // random = new SecureRandom();
++ // }
++ //
++ // random.nextBytes(iv);
++ //
++ // AlgorithmParameters params;
++ //
++ // try
++ // {
++ // params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
++ // params.init(new IvParameterSpec(iv));
++ // }
++ // catch (Exception e)
++ // {
++ // throw new RuntimeException(e.getMessage());
++ // }
++ //
++ // return params;
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * DES - the default for this is to generate a key in
+@@ -263,36 +269,42 @@
+ {
+
+ provider.addAlgorithm("Cipher.DES", PREFIX + "$ECB");
+- provider.addAlgorithm("Cipher." + OIWObjectIdentifiers.desCBC, PREFIX + "$CBC");
+-
+- addAlias(provider, OIWObjectIdentifiers.desCBC, "DES");
+-
+- provider.addAlgorithm("Cipher.DESRFC3211WRAP", PREFIX + "$RFC3211");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher." + OIWObjectIdentifiers.desCBC, PREFIX + "$CBC");
++ //
++ // addAlias(provider, OIWObjectIdentifiers.desCBC, "DES");
++ //
++ // provider.addAlgorithm("Cipher.DESRFC3211WRAP", PREFIX + "$RFC3211");
++ // END android-removed
+
+ provider.addAlgorithm("KeyGenerator.DES", PREFIX + "$KeyGenerator");
+
+ provider.addAlgorithm("SecretKeyFactory.DES", PREFIX + "$KeyFactory");
+
+- provider.addAlgorithm("Mac.DESCMAC", PREFIX + "$CMAC");
+- provider.addAlgorithm("Mac.DESMAC", PREFIX + "$CBCMAC");
+- provider.addAlgorithm("Alg.Alias.Mac.DES", "DESMAC");
+-
+- provider.addAlgorithm("Mac.DESMAC/CFB8", PREFIX + "$DESCFB8");
+- provider.addAlgorithm("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8");
+-
+- provider.addAlgorithm("Mac.DESMAC64", PREFIX + "$DES64");
+- provider.addAlgorithm("Alg.Alias.Mac.DES64", "DESMAC64");
+-
+- provider.addAlgorithm("Mac.DESMAC64WITHISO7816-4PADDING", PREFIX + "$DES64with7816d4");
+- provider.addAlgorithm("Alg.Alias.Mac.DES64WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING");
+- provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1MACWITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING");
+- provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Mac.DESCMAC", PREFIX + "$CMAC");
++ // provider.addAlgorithm("Mac.DESMAC", PREFIX + "$CBCMAC");
++ // provider.addAlgorithm("Alg.Alias.Mac.DES", "DESMAC");
++ //
++ // provider.addAlgorithm("Mac.DESMAC/CFB8", PREFIX + "$DESCFB8");
++ // provider.addAlgorithm("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8");
++ //
++ // provider.addAlgorithm("Mac.DESMAC64", PREFIX + "$DES64");
++ // provider.addAlgorithm("Alg.Alias.Mac.DES64", "DESMAC64");
++ //
++ // provider.addAlgorithm("Mac.DESMAC64WITHISO7816-4PADDING", PREFIX + "$DES64with7816d4");
++ // provider.addAlgorithm("Alg.Alias.Mac.DES64WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1MACWITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING");
++ // END android-removed
+
+ provider.addAlgorithm("AlgorithmParameters.DES", PACKAGE + ".util.IvAlgorithmParameters");
+ provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + OIWObjectIdentifiers.desCBC, "DES");
+
+- provider.addAlgorithm("AlgorithmParameterGenerator.DES", PREFIX + "$AlgParamGen");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "DES");
++ // BEGIN android-removed
++ // provider.addAlgorithm("AlgorithmParameterGenerator.DES", PREFIX + "$AlgParamGen");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "DES");
++ // END android-removed
+ }
+
+ private void addAlias(ConfigurableProvider provider, ASN1ObjectIdentifier oid, String name)
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DESede.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DESede.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DESede.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DESede.java 2012-09-11 00:12:44.000000000 +0000
+@@ -1,30 +1,42 @@
+ package org.bouncycastle.jcajce.provider.symmetric;
+
+-import java.security.AlgorithmParameters;
+-import java.security.InvalidAlgorithmParameterException;
++// BEGIN android-removed
++// import java.security.AlgorithmParameters;
++// import java.security.InvalidAlgorithmParameterException;
++// END android-removed
+ import java.security.SecureRandom;
+-import java.security.spec.AlgorithmParameterSpec;
++// BEGIN android-removed
++// import java.security.spec.AlgorithmParameterSpec;
++// END android-removed
+ import java.security.spec.InvalidKeySpecException;
+ import java.security.spec.KeySpec;
+
+ import javax.crypto.SecretKey;
+ import javax.crypto.spec.DESedeKeySpec;
+-import javax.crypto.spec.IvParameterSpec;
++// BEGIN android-removed
++// import javax.crypto.spec.IvParameterSpec;
++// END android-removed
+ import javax.crypto.spec.SecretKeySpec;
+
+ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+ import org.bouncycastle.crypto.KeyGenerationParameters;
+ import org.bouncycastle.crypto.engines.DESedeEngine;
+ import org.bouncycastle.crypto.engines.DESedeWrapEngine;
+-import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
++// END android-removed
+ import org.bouncycastle.crypto.generators.DESedeKeyGenerator;
+ import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
+-import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
+-import org.bouncycastle.crypto.macs.CMac;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
++// import org.bouncycastle.crypto.macs.CMac;
++// END android-removed
+ import org.bouncycastle.crypto.modes.CBCBlockCipher;
+ import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
+ import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
+-import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator;
++// BEGIN android-removed
++// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator;
++// END android-removed
+ import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
+ import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
+ import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
+@@ -57,17 +69,19 @@
+ }
+ }
+
+- /**
+- * DESede CFB8
+- */
+- public static class DESedeCFB8
+- extends BaseMac
+- {
+- public DESedeCFB8()
+- {
+- super(new CFBBlockCipherMac(new DESedeEngine()));
+- }
+- }
++ // BEGIN android-removed
++ // /**
++ // * DESede CFB8
++ // */
++ // public static class DESedeCFB8
++ // extends BaseMac
++ // {
++ // public DESedeCFB8()
++ // {
++ // super(new CFBBlockCipherMac(new DESedeEngine()));
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * DESede64
+@@ -102,15 +116,17 @@
+ }
+ }
+
+- static public class CMAC
+- extends BaseMac
+- {
+- public CMAC()
+- {
+- super(new CMac(new DESedeEngine()));
+- }
+- }
+-
++ // BEGIN android-removed
++ // static public class CMAC
++ // extends BaseMac
++ // {
++ // public CMAC()
++ // {
++ // super(new CMac(new DESedeEngine()));
++ // }
++ // }
++ // END android-removed
++
+ public static class Wrap
+ extends BaseWrapCipher
+ {
+@@ -119,15 +135,17 @@
+ super(new DESedeWrapEngine());
+ }
+ }
+-
+- public static class RFC3211
+- extends BaseWrapCipher
+- {
+- public RFC3211()
+- {
+- super(new RFC3211WrapEngine(new DESedeEngine()), 8);
+- }
+- }
++
++ // BEGIN android-removed
++ // public static class RFC3211
++ // extends BaseWrapCipher
++ // {
++ // public RFC3211()
++ // {
++ // super(new RFC3211WrapEngine(new DESedeEngine()), 8);
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * DESede - the default for this is to generate a key in
+@@ -217,43 +235,45 @@
+ }
+ }
+
+- public static class AlgParamGen
+- extends BaseAlgorithmParameterGenerator
+- {
+- protected void engineInit(
+- AlgorithmParameterSpec genParamSpec,
+- SecureRandom random)
+- throws InvalidAlgorithmParameterException
+- {
+- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
+- }
+-
+- protected AlgorithmParameters engineGenerateParameters()
+- {
+- byte[] iv = new byte[8];
+-
+- if (random == null)
+- {
+- random = new SecureRandom();
+- }
+-
+- random.nextBytes(iv);
+-
+- AlgorithmParameters params;
+-
+- try
+- {
+- params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
+- params.init(new IvParameterSpec(iv));
+- }
+- catch (Exception e)
+- {
+- throw new RuntimeException(e.getMessage());
+- }
+-
+- return params;
+- }
+- }
++ // BEGIN android-removed
++ // public static class AlgParamGen
++ // extends BaseAlgorithmParameterGenerator
++ // {
++ // protected void engineInit(
++ // AlgorithmParameterSpec genParamSpec,
++ // SecureRandom random)
++ // throws InvalidAlgorithmParameterException
++ // {
++ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
++ // }
++ //
++ // protected AlgorithmParameters engineGenerateParameters()
++ // {
++ // byte[] iv = new byte[8];
++ //
++ // if (random == null)
++ // {
++ // random = new SecureRandom();
++ // }
++ //
++ // random.nextBytes(iv);
++ //
++ // AlgorithmParameters params;
++ //
++ // try
++ // {
++ // params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
++ // params.init(new IvParameterSpec(iv));
++ // }
++ // catch (Exception e)
++ // {
++ // throw new RuntimeException(e.getMessage());
++ // }
++ //
++ // return params;
++ // }
++ // }
++ // END android-removed
+
+ static public class KeyFactory
+ extends BaseSecretKeyFactory
+@@ -337,18 +357,28 @@
+ public void configure(ConfigurableProvider provider)
+ {
+ provider.addAlgorithm("Cipher.DESEDE", PREFIX + "$ECB");
+- provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC");
++ // END android-removed
+ provider.addAlgorithm("Cipher.DESEDEWRAP", PREFIX + "$Wrap");
+- provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, PREFIX + "$Wrap");
+- provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211");
++ // BEGIN android-changed
++ provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWRAP");
++ // END android-changed
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211");
++ // END android-removed
+
+ if (provider.hasAlgorithm("MessageDigest", "SHA-1"))
+ {
+ provider.addAlgorithm("Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES3Key");
+- provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key");
+- provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key");
++ // provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key");
++ // END android-removed
+ provider.addAlgorithm("Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES2Key");
+- provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key");
++ // END android-removed
+ provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC, "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
+ provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC, "PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
+ provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1ANDDESEDE", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
+@@ -357,31 +387,37 @@
+ }
+
+ provider.addAlgorithm("KeyGenerator.DESEDE", PREFIX + "$KeyGenerator");
+- provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3");
+- provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator");
++ // BEGIN android-removed
++ // provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3");
++ // provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator");
++ // END android-removed
+
+ provider.addAlgorithm("SecretKeyFactory.DESEDE", PREFIX + "$KeyFactory");
+
+- provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC");
+- provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC");
+- provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
+-
+- provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8");
+- provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
+-
+- provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64");
+- provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
+-
+- provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4");
+- provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
+- provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
+- provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
++ // BEGIN android-removed
++ // provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC");
++ // provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
++ //
++ // provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
++ //
++ // provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
++ //
++ // provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
++ // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
++ // END android-removed
+
+ provider.addAlgorithm("AlgorithmParameters.DESEDE", PACKAGE + ".util.IvAlgorithmParameters");
+ provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
+
+- provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE", PREFIX + "$AlgParamGen");
+- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
++ // BEGIN android-removed
++ // provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE", PREFIX + "$AlgParamGen");
++ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
++ // END android-removed
+ }
+ }
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java 2012-09-11 00:12:44.000000000 +0000
+@@ -7,13 +7,17 @@
+
+ import javax.crypto.spec.IvParameterSpec;
+ import javax.crypto.spec.PBEParameterSpec;
+-import javax.crypto.spec.RC2ParameterSpec;
++// BEGIN android-removed
++// import javax.crypto.spec.RC2ParameterSpec;
++// END android-removed
+
+ import org.bouncycastle.asn1.ASN1Encoding;
+ import org.bouncycastle.asn1.ASN1Primitive;
+ import org.bouncycastle.asn1.pkcs.PBKDF2Params;
+ import org.bouncycastle.asn1.pkcs.PKCS12PBEParams;
+-import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
++// END android-removed
+ import org.bouncycastle.util.Arrays;
+
+ public abstract class BaseAlgorithmParameters
+@@ -39,177 +43,179 @@
+ protected abstract AlgorithmParameterSpec localEngineGetParameterSpec(Class paramSpec)
+ throws InvalidParameterSpecException;
+
+- public static class RC2AlgorithmParameters
+- extends BaseAlgorithmParameters
+- {
+- private static final short[] table = {
+- 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
+- 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
+- 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
+- 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
+- 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
+- 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
+- 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
+- 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
+- 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
+- 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
+- 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
+- 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
+- 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
+- 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
+- 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
+- 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
+- };
+-
+- private static final short[] ekb = {
+- 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
+- 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
+- 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
+- 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
+- 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
+- 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
+- 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
+- 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
+- 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
+- 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
+- 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
+- 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
+- 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
+- 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
+- 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
+- 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
+- };
+-
+- private byte[] iv;
+- private int parameterVersion = 58;
+-
+- protected byte[] engineGetEncoded()
+- {
+- return Arrays.clone(iv);
+- }
+-
+- protected byte[] engineGetEncoded(
+- String format)
+- throws IOException
+- {
+- if (this.isASN1FormatString(format))
+- {
+- if (parameterVersion == -1)
+- {
+- return new RC2CBCParameter(engineGetEncoded()).getEncoded();
+- }
+- else
+- {
+- return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
+- }
+- }
+-
+- if (format.equals("RAW"))
+- {
+- return engineGetEncoded();
+- }
+-
+- return null;
+- }
+-
+- protected AlgorithmParameterSpec localEngineGetParameterSpec(
+- Class paramSpec)
+- throws InvalidParameterSpecException
+- {
+- if (paramSpec == RC2ParameterSpec.class)
+- {
+- if (parameterVersion != -1)
+- {
+- if (parameterVersion < 256)
+- {
+- return new RC2ParameterSpec(ekb[parameterVersion], iv);
+- }
+- else
+- {
+- return new RC2ParameterSpec(parameterVersion, iv);
+- }
+- }
+- }
+-
+- if (paramSpec == IvParameterSpec.class)
+- {
+- return new IvParameterSpec(iv);
+- }
+-
+- throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
+- }
+-
+- protected void engineInit(
+- AlgorithmParameterSpec paramSpec)
+- throws InvalidParameterSpecException
+- {
+- if (paramSpec instanceof IvParameterSpec)
+- {
+- this.iv = ((IvParameterSpec)paramSpec).getIV();
+- }
+- else if (paramSpec instanceof RC2ParameterSpec)
+- {
+- int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
+- if (effKeyBits != -1)
+- {
+- if (effKeyBits < 256)
+- {
+- parameterVersion = table[effKeyBits];
+- }
+- else
+- {
+- parameterVersion = effKeyBits;
+- }
+- }
+-
+- this.iv = ((RC2ParameterSpec)paramSpec).getIV();
+- }
+- else
+- {
+- throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
+- }
+- }
+-
+- protected void engineInit(
+- byte[] params)
+- throws IOException
+- {
+- this.iv = Arrays.clone(params);
+- }
+-
+- protected void engineInit(
+- byte[] params,
+- String format)
+- throws IOException
+- {
+- if (this.isASN1FormatString(format))
+- {
+- RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params));
+-
+- if (p.getRC2ParameterVersion() != null)
+- {
+- parameterVersion = p.getRC2ParameterVersion().intValue();
+- }
+-
+- iv = p.getIV();
+-
+- return;
+- }
+-
+- if (format.equals("RAW"))
+- {
+- engineInit(params);
+- return;
+- }
+-
+- throw new IOException("Unknown parameters format in IV parameters object");
+- }
+-
+- protected String engineToString()
+- {
+- return "RC2 Parameters";
+- }
+- }
++ // BEGIN android-removed
++ // public static class RC2AlgorithmParameters
++ // extends BaseAlgorithmParameters
++ // {
++ // private static final short[] table = {
++ // 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
++ // 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
++ // 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
++ // 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
++ // 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
++ // 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
++ // 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
++ // 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
++ // 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
++ // 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
++ // 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
++ // 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
++ // 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
++ // 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
++ // 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
++ // 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
++ // };
++ //
++ // private static final short[] ekb = {
++ // 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
++ // 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
++ // 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
++ // 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
++ // 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
++ // 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
++ // 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
++ // 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
++ // 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
++ // 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
++ // 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
++ // 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
++ // 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
++ // 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
++ // 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
++ // 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
++ // };
++ //
++ // private byte[] iv;
++ // private int parameterVersion = 58;
++ //
++ // protected byte[] engineGetEncoded()
++ // {
++ // return Arrays.clone(iv);
++ // }
++ //
++ // protected byte[] engineGetEncoded(
++ // String format)
++ // throws IOException
++ // {
++ // if (this.isASN1FormatString(format))
++ // {
++ // if (parameterVersion == -1)
++ // {
++ // return new RC2CBCParameter(engineGetEncoded()).getEncoded();
++ // }
++ // else
++ // {
++ // return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
++ // }
++ // }
++ //
++ // if (format.equals("RAW"))
++ // {
++ // return engineGetEncoded();
++ // }
++ //
++ // return null;
++ // }
++ //
++ // protected AlgorithmParameterSpec localEngineGetParameterSpec(
++ // Class paramSpec)
++ // throws InvalidParameterSpecException
++ // {
++ // if (paramSpec == RC2ParameterSpec.class)
++ // {
++ // if (parameterVersion != -1)
++ // {
++ // if (parameterVersion < 256)
++ // {
++ // return new RC2ParameterSpec(ekb[parameterVersion], iv);
++ // }
++ // else
++ // {
++ // return new RC2ParameterSpec(parameterVersion, iv);
++ // }
++ // }
++ // }
++ //
++ // if (paramSpec == IvParameterSpec.class)
++ // {
++ // return new IvParameterSpec(iv);
++ // }
++ //
++ // throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
++ // }
++ //
++ // protected void engineInit(
++ // AlgorithmParameterSpec paramSpec)
++ // throws InvalidParameterSpecException
++ // {
++ // if (paramSpec instanceof IvParameterSpec)
++ // {
++ // this.iv = ((IvParameterSpec)paramSpec).getIV();
++ // }
++ // else if (paramSpec instanceof RC2ParameterSpec)
++ // {
++ // int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
++ // if (effKeyBits != -1)
++ // {
++ // if (effKeyBits < 256)
++ // {
++ // parameterVersion = table[effKeyBits];
++ // }
++ // else
++ // {
++ // parameterVersion = effKeyBits;
++ // }
++ // }
++ //
++ // this.iv = ((RC2ParameterSpec)paramSpec).getIV();
++ // }
++ // else
++ // {
++ // throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
++ // }
++ // }
++ //
++ // protected void engineInit(
++ // byte[] params)
++ // throws IOException
++ // {
++ // this.iv = Arrays.clone(params);
++ // }
++ //
++ // protected void engineInit(
++ // byte[] params,
++ // String format)
++ // throws IOException
++ // {
++ // if (this.isASN1FormatString(format))
++ // {
++ // RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params));
++ //
++ // if (p.getRC2ParameterVersion() != null)
++ // {
++ // parameterVersion = p.getRC2ParameterVersion().intValue();
++ // }
++ //
++ // iv = p.getIV();
++ //
++ // return;
++ // }
++ //
++ // if (format.equals("RAW"))
++ // {
++ // engineInit(params);
++ // return;
++ // }
++ //
++ // throw new IOException("Unknown parameters format in IV parameters object");
++ // }
++ //
++ // protected String engineToString()
++ // {
++ // return "RC2 Parameters";
++ // }
++ // }
++ // END android-removed
+
+ public static class PBKDF2
+ extends BaseAlgorithmParameters
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 2012-09-11 00:12:44.000000000 +0000
+@@ -17,8 +17,10 @@
+ import javax.crypto.ShortBufferException;
+ import javax.crypto.spec.IvParameterSpec;
+ import javax.crypto.spec.PBEParameterSpec;
+-import javax.crypto.spec.RC2ParameterSpec;
+-import javax.crypto.spec.RC5ParameterSpec;
++// BEGIN android-removed
++// import javax.crypto.spec.RC2ParameterSpec;
++// import javax.crypto.spec.RC5ParameterSpec;
++// END android-removed
+
+ import org.bouncycastle.crypto.BufferedBlockCipher;
+ import org.bouncycastle.crypto.CipherParameters;
+@@ -29,12 +31,18 @@
+ import org.bouncycastle.crypto.modes.CCMBlockCipher;
+ import org.bouncycastle.crypto.modes.CFBBlockCipher;
+ import org.bouncycastle.crypto.modes.CTSBlockCipher;
+-import org.bouncycastle.crypto.modes.EAXBlockCipher;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.modes.EAXBlockCipher;
++// END android-removed
+ import org.bouncycastle.crypto.modes.GCMBlockCipher;
+-import org.bouncycastle.crypto.modes.GOFBBlockCipher;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.modes.GOFBBlockCipher;
++// END android-removed
+ import org.bouncycastle.crypto.modes.OFBBlockCipher;
+-import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher;
+-import org.bouncycastle.crypto.modes.PGPCFBBlockCipher;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher;
++// import org.bouncycastle.crypto.modes.PGPCFBBlockCipher;
++// END android-removed
+ import org.bouncycastle.crypto.modes.SICBlockCipher;
+ import org.bouncycastle.crypto.paddings.BlockCipherPadding;
+ import org.bouncycastle.crypto.paddings.ISO10126d2Padding;
+@@ -46,11 +54,17 @@
+ import org.bouncycastle.crypto.params.KeyParameter;
+ import org.bouncycastle.crypto.params.ParametersWithIV;
+ import org.bouncycastle.crypto.params.ParametersWithRandom;
+-import org.bouncycastle.crypto.params.ParametersWithSBox;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.params.ParametersWithSBox;
++// END android-removed
+ import org.bouncycastle.crypto.params.RC2Parameters;
+-import org.bouncycastle.crypto.params.RC5Parameters;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.params.RC5Parameters;
++// END android-removed
+ import org.bouncycastle.jce.provider.BouncyCastleProvider;
+-import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
++// BEGIN android-removed
++// import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
++// END android-removed
+ import org.bouncycastle.jce.spec.RepeatedSecretKeySpec;
+ import org.bouncycastle.util.Strings;
+
+@@ -63,11 +77,15 @@
+ //
+ private Class[] availableSpecs =
+ {
+- RC2ParameterSpec.class,
+- RC5ParameterSpec.class,
++ // BEGIN android-removed
++ // RC2ParameterSpec.class,
++ // RC5ParameterSpec.class,
++ // END android-removed
+ IvParameterSpec.class,
+ PBEParameterSpec.class,
+- GOST28147ParameterSpec.class
++ // BEGIN android-removed
++ // GOST28147ParameterSpec.class
++ // END android-removed
+ };
+
+ private org.bouncycastle.crypto.BlockCipher baseEngine;
+@@ -222,20 +240,22 @@
+ new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
+ }
+ }
+- else if (modeName.startsWith("PGP"))
+- {
+- boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV");
+-
+- ivLength = baseEngine.getBlockSize();
+- cipher = new BufferedGenericBlockCipher(
+- new PGPCFBBlockCipher(baseEngine, inlineIV));
+- }
+- else if (modeName.equalsIgnoreCase("OpenPGPCFB"))
+- {
+- ivLength = 0;
+- cipher = new BufferedGenericBlockCipher(
+- new OpenPGPCFBBlockCipher(baseEngine));
+- }
++ // BEGIN android-removed
++ // else if (modeName.startsWith("PGP"))
++ // {
++ // boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV");
++
++ // ivLength = baseEngine.getBlockSize();
++ // cipher = new BufferedGenericBlockCipher(
++ // new PGPCFBBlockCipher(baseEngine, inlineIV));
++ // }
++ // else if (modeName.equalsIgnoreCase("OpenPGPCFB"))
++ // {
++ // ivLength = 0;
++ // cipher = new BufferedGenericBlockCipher(
++ // new OpenPGPCFBBlockCipher(baseEngine));
++ // }
++ // END android-removed
+ else if (modeName.startsWith("SIC"))
+ {
+ ivLength = baseEngine.getBlockSize();
+@@ -252,12 +272,14 @@
+ cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
+ new SICBlockCipher(baseEngine)));
+ }
+- else if (modeName.startsWith("GOFB"))
+- {
+- ivLength = baseEngine.getBlockSize();
+- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
+- new GOFBBlockCipher(baseEngine)));
+- }
++ // BEGIN android-removed
++ // else if (modeName.startsWith("GOFB"))
++ // {
++ // ivLength = baseEngine.getBlockSize();
++ // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
++ // new GOFBBlockCipher(baseEngine)));
++ // }
++ // END android-removed
+ else if (modeName.startsWith("CTS"))
+ {
+ ivLength = baseEngine.getBlockSize();
+@@ -268,11 +290,13 @@
+ ivLength = baseEngine.getBlockSize();
+ cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine));
+ }
+- else if (modeName.startsWith("EAX"))
+- {
+- ivLength = baseEngine.getBlockSize();
+- cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine));
+- }
++ // BEGIN android-removed
++ // else if (modeName.startsWith("EAX"))
++ // {
++ // ivLength = baseEngine.getBlockSize();
++ // cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine));
++ // }
++ // END android-removed
+ else if (modeName.startsWith("GCM"))
+ {
+ ivLength = baseEngine.getBlockSize();
+@@ -441,63 +465,65 @@
+ param = new KeyParameter(key.getEncoded());
+ }
+ }
+- else if (params instanceof GOST28147ParameterSpec)
+- {
+- GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params;
+-
+- param = new ParametersWithSBox(
+- new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox());
+-
+- if (gost28147Param.getIV() != null && ivLength != 0)
+- {
+- param = new ParametersWithIV(param, gost28147Param.getIV());
+- ivParam = (ParametersWithIV)param;
+- }
+- }
+- else if (params instanceof RC2ParameterSpec)
+- {
+- RC2ParameterSpec rc2Param = (RC2ParameterSpec)params;
+-
+- param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits());
+-
+- if (rc2Param.getIV() != null && ivLength != 0)
+- {
+- param = new ParametersWithIV(param, rc2Param.getIV());
+- ivParam = (ParametersWithIV)param;
+- }
+- }
+- else if (params instanceof RC5ParameterSpec)
+- {
+- RC5ParameterSpec rc5Param = (RC5ParameterSpec)params;
+-
+- param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds());
+- if (baseEngine.getAlgorithmName().startsWith("RC5"))
+- {
+- if (baseEngine.getAlgorithmName().equals("RC5-32"))
+- {
+- if (rc5Param.getWordSize() != 32)
+- {
+- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + ".");
+- }
+- }
+- else if (baseEngine.getAlgorithmName().equals("RC5-64"))
+- {
+- if (rc5Param.getWordSize() != 64)
+- {
+- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + ".");
+- }
+- }
+- }
+- else
+- {
+- throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5.");
+- }
+- if ((rc5Param.getIV() != null) && (ivLength != 0))
+- {
+- param = new ParametersWithIV(param, rc5Param.getIV());
+- ivParam = (ParametersWithIV)param;
+- }
+- }
++ // BEGIN android-removed
++ // else if (params instanceof GOST28147ParameterSpec)
++ // {
++ // GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params;
++ //
++ // param = new ParametersWithSBox(
++ // new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox());
++ //
++ // if (gost28147Param.getIV() != null && ivLength != 0)
++ // {
++ // param = new ParametersWithIV(param, gost28147Param.getIV());
++ // ivParam = (ParametersWithIV)param;
++ // }
++ // }
++ // else if (params instanceof RC2ParameterSpec)
++ // {
++ // RC2ParameterSpec rc2Param = (RC2ParameterSpec)params;
++ //
++ // param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits());
++ //
++ // if (rc2Param.getIV() != null && ivLength != 0)
++ // {
++ // param = new ParametersWithIV(param, rc2Param.getIV());
++ // ivParam = (ParametersWithIV)param;
++ // }
++ // }
++ // else if (params instanceof RC5ParameterSpec)
++ // {
++ // RC5ParameterSpec rc5Param = (RC5ParameterSpec)params;
++ //
++ // param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds());
++ // if (baseEngine.getAlgorithmName().startsWith("RC5"))
++ // {
++ // if (baseEngine.getAlgorithmName().equals("RC5-32"))
++ // {
++ // if (rc5Param.getWordSize() != 32)
++ // {
++ // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + ".");
++ // }
++ // }
++ // else if (baseEngine.getAlgorithmName().equals("RC5-64"))
++ // {
++ // if (rc5Param.getWordSize() != 64)
++ // {
++ // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + ".");
++ // }
++ // }
++ // }
++ // else
++ // {
++ // throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5.");
++ // }
++ // if ((rc5Param.getIV() != null) && (ivLength != 0))
++ // {
++ // param = new ParametersWithIV(param, rc5Param.getIV());
++ // ivParam = (ParametersWithIV)param;
++ // }
++ // }
++ // END android-removed
+ else
+ {
+ throw new InvalidAlgorithmParameterException("unknown parameter type.");
+@@ -701,10 +727,20 @@
+ int inputLen,
+ byte[] output,
+ int outputOffset)
+- throws IllegalBlockSizeException, BadPaddingException
++ throws IllegalBlockSizeException, BadPaddingException, ShortBufferException
+ {
++ // BEGIN android-note
++ // added ShortBufferException to the throws statement
++ // END android-note
+ int len = 0;
+
++ // BEGIN android-added
++ int outputLen = cipher.getOutputSize(inputLen);
++
++ if (outputLen + outputOffset > output.length) {
++ throw new ShortBufferException("need at least " + outputLen + " bytes");
++ }
++ // BEGIN android-added
+ if (inputLen != 0)
+ {
+ len = cipher.processBytes(input, inputOffset, inputLen, output, outputOffset);
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java 2012-09-11 00:12:44.000000000 +0000
+@@ -56,6 +56,11 @@
+ {
+ try
+ {
++ // BEGIN android-added
++ if (random == null) {
++ random = new SecureRandom();
++ }
++ // END android-added
+ engine.init(new KeyGenerationParameters(random, keySize));
+ uninitialised = false;
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 2012-09-11 00:12:44.000000000 +0000
+@@ -11,25 +11,34 @@
+
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.Mac;
+-import org.bouncycastle.crypto.digests.MD2Digest;
+-import org.bouncycastle.crypto.digests.MD4Digest;
+-import org.bouncycastle.crypto.digests.MD5Digest;
+-import org.bouncycastle.crypto.digests.RIPEMD128Digest;
+-import org.bouncycastle.crypto.digests.RIPEMD160Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA224Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.SHA384Digest;
+-import org.bouncycastle.crypto.digests.SHA512Digest;
+-import org.bouncycastle.crypto.digests.TigerDigest;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.MD2Digest;
++// import org.bouncycastle.crypto.digests.MD4Digest;
++// import org.bouncycastle.crypto.digests.MD5Digest;
++// import org.bouncycastle.crypto.digests.RIPEMD128Digest;
++// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
++// import org.bouncycastle.crypto.digests.SHA1Digest;
++// import org.bouncycastle.crypto.digests.SHA224Digest;
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.SHA384Digest;
++// import org.bouncycastle.crypto.digests.SHA512Digest;
++// import org.bouncycastle.crypto.digests.TigerDigest;
++// END android-removed
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
+ import org.bouncycastle.crypto.engines.DESEngine;
+ import org.bouncycastle.crypto.engines.RC2Engine;
+ import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
+-import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
+-import org.bouncycastle.crypto.macs.GOST28147Mac;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
++// import org.bouncycastle.crypto.macs.GOST28147Mac;
++// END android-removed
+ import org.bouncycastle.crypto.macs.HMac;
+-import org.bouncycastle.crypto.macs.ISO9797Alg3Mac;
+-import org.bouncycastle.crypto.macs.OldHMac;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.macs.ISO9797Alg3Mac;
++// import org.bouncycastle.crypto.macs.OldHMac;
++// END android-removed
+ import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
+ import org.bouncycastle.crypto.params.KeyParameter;
+ import org.bouncycastle.crypto.params.ParametersWithIV;
+@@ -179,91 +188,93 @@
+ }
+ }
+
+- /**
+- * GOST28147
+- */
+- public static class GOST28147
+- extends BaseMac
+- {
+- public GOST28147()
+- {
+- super(new GOST28147Mac());
+- }
+- }
+-
+-
+-
+- /**
+- * DES
+- */
+- public static class DESCFB8
+- extends BaseMac
+- {
+- public DESCFB8()
+- {
+- super(new CFBBlockCipherMac(new DESEngine()));
+- }
+- }
+-
+- /**
+- * RC2CFB8
+- */
+- public static class RC2CFB8
+- extends BaseMac
+- {
+- public RC2CFB8()
+- {
+- super(new CFBBlockCipherMac(new RC2Engine()));
+- }
+- }
+-
+- /**
+- * DES9797Alg3with7816-4Padding
+- */
+- public static class DES9797Alg3with7816d4
+- extends BaseMac
+- {
+- public DES9797Alg3with7816d4()
+- {
+- super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding()));
+- }
+- }
+-
+- /**
+- * DES9797Alg3
+- */
+- public static class DES9797Alg3
+- extends BaseMac
+- {
+- public DES9797Alg3()
+- {
+- super(new ISO9797Alg3Mac(new DESEngine()));
+- }
+- }
+-
+- /**
+- * MD2 HMac
+- */
+- public static class MD2
+- extends BaseMac
+- {
+- public MD2()
+- {
+- super(new HMac(new MD2Digest()));
+- }
+- }
+-
+- /**
+- * MD4 HMac
+- */
+- public static class MD4
+- extends BaseMac
+- {
+- public MD4()
+- {
+- super(new HMac(new MD4Digest()));
+- }
+- }
++ // BEGIN android-removed
++ // /**
++ // * GOST28147
++ // */
++ // public static class GOST28147
++ // extends BaseMac
++ // {
++ // public GOST28147()
++ // {
++ // super(new GOST28147Mac());
++ // }
++ // }
++ //
++ //
++ //
++ // /**
++ // * DES
++ // */
++ // public static class DESCFB8
++ // extends BaseMac
++ // {
++ // public DESCFB8()
++ // {
++ // super(new CFBBlockCipherMac(new DESEngine()));
++ // }
++ // }
++ //
++ // /**
++ // * RC2CFB8
++ // */
++ // public static class RC2CFB8
++ // extends BaseMac
++ // {
++ // public RC2CFB8()
++ // {
++ // super(new CFBBlockCipherMac(new RC2Engine()));
++ // }
++ // }
++ //
++ // /**
++ // * DES9797Alg3with7816-4Padding
++ // */
++ // public static class DES9797Alg3with7816d4
++ // extends BaseMac
++ // {
++ // public DES9797Alg3with7816d4()
++ // {
++ // super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding()));
++ // }
++ // }
++ //
++ // /**
++ // * DES9797Alg3
++ // */
++ // public static class DES9797Alg3
++ // extends BaseMac
++ // {
++ // public DES9797Alg3()
++ // {
++ // super(new ISO9797Alg3Mac(new DESEngine()));
++ // }
++ // }
++ //
++ // /**
++ // * MD2 HMac
++ // */
++ // public static class MD2
++ // extends BaseMac
++ // {
++ // public MD2()
++ // {
++ // super(new HMac(new MD2Digest()));
++ // }
++ // }
++ //
++ // /**
++ // * MD4 HMac
++ // */
++ // public static class MD4
++ // extends BaseMac
++ // {
++ // public MD4()
++ // {
++ // super(new HMac(new MD4Digest()));
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * MD5 HMac
+@@ -273,7 +284,9 @@
+ {
+ public MD5()
+ {
+- super(new HMac(new MD5Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.MD5()));
++ // END android-changed
+ }
+ }
+
+@@ -285,21 +298,25 @@
+ {
+ public SHA1()
+ {
+- super(new HMac(new SHA1Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA1()));
++ // END android-changed
+ }
+ }
+
+- /**
+- * SHA-224 HMac
+- */
+- public static class SHA224
+- extends BaseMac
+- {
+- public SHA224()
+- {
+- super(new HMac(new SHA224Digest()));
+- }
+- }
++ // BEGIN android-removed
++ // /**
++ // * SHA-224 HMac
++ // */
++ // public static class SHA224
++ // extends BaseMac
++ // {
++ // public SHA224()
++ // {
++ // super(new HMac(new SHA224Digest()));
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * SHA-256 HMac
+@@ -309,7 +326,7 @@
+ {
+ public SHA256()
+ {
+- super(new HMac(new SHA256Digest()));
++ super(new HMac(new OpenSSLDigest.SHA256()));
+ }
+ }
+
+@@ -321,18 +338,20 @@
+ {
+ public SHA384()
+ {
+- super(new HMac(new SHA384Digest()));
++ super(new HMac(new OpenSSLDigest.SHA384()));
+ }
+ }
+
+- public static class OldSHA384
+- extends BaseMac
+- {
+- public OldSHA384()
+- {
+- super(new OldHMac(new SHA384Digest()));
+- }
+- }
++ // BEGIN android-removed
++ // public static class OldSHA384
++ // extends BaseMac
++ // {
++ // public OldSHA384()
++ // {
++ // super(new OldHMac(new SHA384Digest()));
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * SHA-512 HMac
+@@ -342,75 +361,77 @@
+ {
+ public SHA512()
+ {
+- super(new HMac(new SHA512Digest()));
+- }
+- }
+-
+- /**
+- * SHA-512 HMac
+- */
+- public static class OldSHA512
+- extends BaseMac
+- {
+- public OldSHA512()
+- {
+- super(new OldHMac(new SHA512Digest()));
+- }
+- }
+-
+- /**
+- * RIPEMD128 HMac
+- */
+- public static class RIPEMD128
+- extends BaseMac
+- {
+- public RIPEMD128()
+- {
+- super(new HMac(new RIPEMD128Digest()));
+- }
+- }
+-
+- /**
+- * RIPEMD160 HMac
+- */
+- public static class RIPEMD160
+- extends BaseMac
+- {
+- public RIPEMD160()
+- {
+- super(new HMac(new RIPEMD160Digest()));
+- }
+- }
+-
+- /**
+- * Tiger HMac
+- */
+- public static class Tiger
+- extends BaseMac
+- {
+- public Tiger()
+- {
+- super(new HMac(new TigerDigest()));
++ super(new HMac(new OpenSSLDigest.SHA512()));
+ }
+ }
+
++ // BEGIN android-removed
++ // /**
++ // * SHA-512 HMac
++ // */
++ // public static class OldSHA512
++ // extends BaseMac
++ // {
++ // public OldSHA512()
++ // {
++ // super(new OldHMac(new SHA512Digest()));
++ // }
++ // }
++ //
++ // /**
++ // * RIPEMD128 HMac
++ // */
++ // public static class RIPEMD128
++ // extends BaseMac
++ // {
++ // public RIPEMD128()
++ // {
++ // super(new HMac(new RIPEMD128Digest()));
++ // }
++ // }
+ //
+- // PKCS12 states that the same algorithm should be used
+- // for the key generation as is used in the HMAC, so that
+- // is what we do here.
++ // /**
++ // * RIPEMD160 HMac
++ // */
++ // public static class RIPEMD160
++ // extends BaseMac
++ // {
++ // public RIPEMD160()
++ // {
++ // super(new HMac(new RIPEMD160Digest()));
++ // }
++ // }
+ //
+-
+- /**
+- * PBEWithHmacRIPEMD160
+- */
+- public static class PBEWithRIPEMD160
+- extends BaseMac
+- {
+- public PBEWithRIPEMD160()
+- {
+- super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160);
+- }
+- }
++ // /**
++ // * Tiger HMac
++ // */
++ // public static class Tiger
++ // extends BaseMac
++ // {
++ // public Tiger()
++ // {
++ // super(new HMac(new TigerDigest()));
++ // }
++ // }
++ //
++ // //
++ // // PKCS12 states that the same algorithm should be used
++ // // for the key generation as is used in the HMAC, so that
++ // // is what we do here.
++ // //
++ //
++ // /**
++ // * PBEWithHmacRIPEMD160
++ // */
++ // public static class PBEWithRIPEMD160
++ // extends BaseMac
++ // {
++ // public PBEWithRIPEMD160()
++ // {
++ // super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160);
++ // }
++ // }
++ // END android-removed
+
+ /**
+ * PBEWithHmacSHA
+@@ -420,19 +441,23 @@
+ {
+ public PBEWithSHA()
+ {
+- super(new HMac(new SHA1Digest()), PKCS12, SHA1, 160);
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA1()), PKCS12, SHA1, 160);
++ // END android-changed
+ }
+ }
+
+- /**
+- * PBEWithHmacTiger
+- */
+- public static class PBEWithTiger
+- extends BaseMac
+- {
+- public PBEWithTiger()
+- {
+- super(new HMac(new TigerDigest()), PKCS12, TIGER, 192);
+- }
+- }
++ // BEGIN android-removed
++ // /**
++ // * PBEWithHmacTiger
++ // */
++ // public static class PBEWithTiger
++ // extends BaseMac
++ // {
++ // public PBEWithTiger()
++ // {
++ // super(new HMac(new TigerDigest()), PKCS12, TIGER, 192);
++ // }
++ // }
++ // END android-removed
+ }
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 2012-09-11 00:12:44.000000000 +0000
+@@ -13,8 +13,10 @@
+ import javax.crypto.ShortBufferException;
+ import javax.crypto.spec.IvParameterSpec;
+ import javax.crypto.spec.PBEParameterSpec;
+-import javax.crypto.spec.RC2ParameterSpec;
+-import javax.crypto.spec.RC5ParameterSpec;
++// BEGIN android-removed
++// import javax.crypto.spec.RC2ParameterSpec;
++// import javax.crypto.spec.RC5ParameterSpec;
++// END android-removed
+
+ import org.bouncycastle.crypto.BlockCipher;
+ import org.bouncycastle.crypto.CipherParameters;
+@@ -34,8 +36,10 @@
+ //
+ private Class[] availableSpecs =
+ {
+- RC2ParameterSpec.class,
+- RC5ParameterSpec.class,
++ // BEGIN android-removed
++ // RC2ParameterSpec.class,
++ // RC5ParameterSpec.class,
++ // END android-removed
+ IvParameterSpec.class,
+ PBEParameterSpec.class
+ };
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 2012-09-11 00:12:44.000000000 +0000
+@@ -22,8 +22,10 @@
+ import javax.crypto.ShortBufferException;
+ import javax.crypto.spec.IvParameterSpec;
+ import javax.crypto.spec.PBEParameterSpec;
+-import javax.crypto.spec.RC2ParameterSpec;
+-import javax.crypto.spec.RC5ParameterSpec;
++// BEGIN android-removed
++// import javax.crypto.spec.RC2ParameterSpec;
++// import javax.crypto.spec.RC5ParameterSpec;
++// END android-removed
+ import javax.crypto.spec.SecretKeySpec;
+
+ import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
+@@ -45,8 +47,10 @@
+ {
+ IvParameterSpec.class,
+ PBEParameterSpec.class,
+- RC2ParameterSpec.class,
+- RC5ParameterSpec.class
++ // BEGIN android-removed
++ // RC2ParameterSpec.class,
++ // RC5ParameterSpec.class
++ // END android-removed
+ };
+
+ protected int pbeType = PKCS12;
+@@ -258,16 +262,19 @@
+ return null;
+ }
+
++ // BEGIN android-changed
++ // added ShortBufferException to throws statement
+ protected int engineDoFinal(
+ byte[] input,
+ int inputOffset,
+ int inputLen,
+ byte[] output,
+ int outputOffset)
+- throws IllegalBlockSizeException, BadPaddingException
++ throws IllegalBlockSizeException, BadPaddingException, ShortBufferException
+ {
+ return 0;
+ }
++ // END android-changed
+
+ protected byte[] engineWrap(
+ Key key)
+@@ -300,7 +307,12 @@
+ byte[] wrappedKey,
+ String wrappedKeyAlgorithm,
+ int wrappedKeyType)
+- throws InvalidKeyException
++ // BEGIN android-removed
++ // throws InvalidKeyException
++ // END android-removed
++ // BEGIN android-added
++ throws InvalidKeyException, NoSuchAlgorithmException
++ // END android-added
+ {
+ byte[] encoded;
+ try
+@@ -376,10 +388,12 @@
+ {
+ throw new InvalidKeyException("Unknown key type " + e.getMessage());
+ }
+- catch (NoSuchAlgorithmException e)
+- {
+- throw new InvalidKeyException("Unknown key type " + e.getMessage());
+- }
++ // BEGIN android-removed
++ // catch (NoSuchAlgorithmException e)
++ // {
++ // throw new InvalidKeyException("Unknown key type " + e.getMessage());
++ // }
++ // END android-removed
+ catch (InvalidKeySpecException e2)
+ {
+ throw new InvalidKeyException("Unknown key type " + e2.getMessage());
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 2012-09-11 00:12:44.000000000 +0000
+@@ -7,12 +7,17 @@
+
+ import org.bouncycastle.crypto.CipherParameters;
+ import org.bouncycastle.crypto.PBEParametersGenerator;
+-import org.bouncycastle.crypto.digests.MD2Digest;
+-import org.bouncycastle.crypto.digests.MD5Digest;
+-import org.bouncycastle.crypto.digests.RIPEMD160Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.TigerDigest;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.MD2Digest;
++// import org.bouncycastle.crypto.digests.MD5Digest;
++// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
++// import org.bouncycastle.crypto.digests.SHA1Digest;
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.TigerDigest;
++// END android-removed
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
+ import org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator;
+ import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
+ import org.bouncycastle.crypto.generators.PKCS5S1ParametersGenerator;
+@@ -28,10 +33,14 @@
+ //
+ static final int MD5 = 0;
+ static final int SHA1 = 1;
+- static final int RIPEMD160 = 2;
+- static final int TIGER = 3;
++ // BEGIN android-removed
++ // static final int RIPEMD160 = 2;
++ // static final int TIGER = 3;
++ // END android-removed
+ static final int SHA256 = 4;
+- static final int MD2 = 5;
++ // BEGIN android-removed
++ // static final int MD2 = 5;
++ // END android-removed
+
+ static final int PKCS5S1 = 0;
+ static final int PKCS5S2 = 1;
+@@ -53,14 +62,20 @@
+ {
+ switch (hash)
+ {
+- case MD2:
+- generator = new PKCS5S1ParametersGenerator(new MD2Digest());
+- break;
++ // BEGIN android-removed
++ // case MD2:
++ // generator = new PKCS5S1ParametersGenerator(new MD2Digest());
++ // break;
++ // END android-removed
+ case MD5:
+- generator = new PKCS5S1ParametersGenerator(new MD5Digest());
++ // BEGIN android-changed
++ generator = new PKCS5S1ParametersGenerator(new OpenSSLDigest.MD5());
++ // END android-changed
+ break;
+ case SHA1:
+- generator = new PKCS5S1ParametersGenerator(new SHA1Digest());
++ // BEGIN android-changed
++ generator = new PKCS5S1ParametersGenerator(new OpenSSLDigest.SHA1());
++ // END android-changed
+ break;
+ default:
+ throw new IllegalStateException("PKCS5 scheme 1 only supports MD2, MD5 and SHA1.");
+@@ -74,23 +89,33 @@
+ {
+ switch (hash)
+ {
+- case MD2:
+- generator = new PKCS12ParametersGenerator(new MD2Digest());
+- break;
++ // BEGIN android-removed
++ // case MD2:
++ // generator = new PKCS12ParametersGenerator(new MD2Digest());
++ // break;
++ // END android-removed
+ case MD5:
+- generator = new PKCS12ParametersGenerator(new MD5Digest());
++ // BEGIN android-changed
++ generator = new PKCS12ParametersGenerator(new OpenSSLDigest.MD5());
++ // END android-changed
+ break;
+ case SHA1:
+- generator = new PKCS12ParametersGenerator(new SHA1Digest());
+- break;
+- case RIPEMD160:
+- generator = new PKCS12ParametersGenerator(new RIPEMD160Digest());
+- break;
+- case TIGER:
+- generator = new PKCS12ParametersGenerator(new TigerDigest());
++ // BEGIN android-changed
++ generator = new PKCS12ParametersGenerator(new OpenSSLDigest.SHA1());
++ // END android-changed
+ break;
++ // BEGIN android-removed
++ // case RIPEMD160:
++ // generator = new PKCS12ParametersGenerator(new RIPEMD160Digest());
++ // break;
++ // case TIGER:
++ // generator = new PKCS12ParametersGenerator(new TigerDigest());
++ // break;
++ // END android-removed
+ case SHA256:
+- generator = new PKCS12ParametersGenerator(new SHA256Digest());
++ // BEGIN android-changed
++ generator = new PKCS12ParametersGenerator(new OpenSSLDigest.SHA256());
++ // END android-changed
+ break;
+ default:
+ throw new IllegalStateException("unknown digest scheme for PBE encryption.");
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/util/DigestFactory.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/util/DigestFactory.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/util/DigestFactory.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/util/DigestFactory.java 2012-09-11 00:12:44.000000000 +0000
+@@ -10,19 +10,26 @@
+ import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+ import org.bouncycastle.crypto.Digest;
+-import org.bouncycastle.crypto.digests.MD5Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA224Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.SHA384Digest;
+-import org.bouncycastle.crypto.digests.SHA512Digest;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.MD5Digest;
++// import org.bouncycastle.crypto.digests.SHA1Digest;
++// import org.bouncycastle.crypto.digests.SHA224Digest;
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.SHA384Digest;
++// import org.bouncycastle.crypto.digests.SHA512Digest;
++// END android-removed
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
+ import org.bouncycastle.util.Strings;
+
+ public class DigestFactory
+ {
+ private static Set md5 = new HashSet();
+ private static Set sha1 = new HashSet();
+- private static Set sha224 = new HashSet();
++ // BEGIN android-removed
++ // private static Set sha224 = new HashSet();
++ // END android-removed
+ private static Set sha256 = new HashSet();
+ private static Set sha384 = new HashSet();
+ private static Set sha512 = new HashSet();
+@@ -38,9 +45,11 @@
+ sha1.add("SHA-1");
+ sha1.add(OIWObjectIdentifiers.idSHA1.getId());
+
+- sha224.add("SHA224");
+- sha224.add("SHA-224");
+- sha224.add(NISTObjectIdentifiers.id_sha224.getId());
++ // BEGIN android-removed
++ // sha224.add("SHA224");
++ // sha224.add("SHA-224");
++ // sha224.add(NISTObjectIdentifiers.id_sha224.getId());
++ // END android-removed
+
+ sha256.add("SHA256");
+ sha256.add("SHA-256");
+@@ -61,9 +70,11 @@
+ oids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
+ oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1);
+
+- oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
+- oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
+- oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
++ // BEGIN android-removed
++ // oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
++ // oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
++ // oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
++ // END android-removed
+
+ oids.put("SHA256", NISTObjectIdentifiers.id_sha256);
+ oids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
+@@ -85,27 +96,39 @@
+
+ if (sha1.contains(digestName))
+ {
+- return new SHA1Digest();
++ // BEGIN android-changed
++ return new OpenSSLDigest.SHA1();
++ // END android-changed
+ }
+ if (md5.contains(digestName))
+ {
+- return new MD5Digest();
+- }
+- if (sha224.contains(digestName))
+- {
+- return new SHA224Digest();
+- }
++ // BEGIN android-changed
++ return new OpenSSLDigest.MD5();
++ // END android-changed
++ }
++ // BEGIN android-removed
++ // if (sha224.contains(digestName))
++ // {
++ // return new SHA224Digest();
++ // }
++ // END android-removed
+ if (sha256.contains(digestName))
+ {
+- return new SHA256Digest();
++ // BEGIN android-changed
++ return new OpenSSLDigest.SHA256();
++ // END android-changed
+ }
+ if (sha384.contains(digestName))
+ {
+- return new SHA384Digest();
++ // BEGIN android-changed
++ return new OpenSSLDigest.SHA384();
++ // END android-changed
+ }
+ if (sha512.contains(digestName))
+ {
+- return new SHA512Digest();
++ // BEGIN android-changed
++ return new OpenSSLDigest.SHA512();
++ // END android-changed
+ }
+
+ return null;
+@@ -116,7 +139,9 @@
+ String digest2)
+ {
+ return (sha1.contains(digest1) && sha1.contains(digest2))
+- || (sha224.contains(digest1) && sha224.contains(digest2))
++ // BEGIN android-removed
++ // || (sha224.contains(digest1) && sha224.contains(digest2))
++ // END android-removed
+ || (sha256.contains(digest1) && sha256.contains(digest2))
+ || (sha384.contains(digest1) && sha384.contains(digest2))
+ || (sha512.contains(digest1) && sha512.contains(digest2))
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcprov-jdk15on-147/org/bouncycastle/jce/ECNamedCurveTable.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/ECNamedCurveTable.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/ECNamedCurveTable.java 2012-09-11 00:12:44.000000000 +0000
+@@ -6,7 +6,9 @@
+ import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.nist.NISTNamedCurves;
import org.bouncycastle.asn1.sec.SECNamedCurves;
-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
@@ -990,7 +5767,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcp
- {
- try
- {
-- ecP = TeleTrusTNamedCurves.getByOID(new DERObjectIdentifier(name));
+- ecP = TeleTrusTNamedCurves.getByOID(new ASN1ObjectIdentifier(name));
- }
- catch (IllegalArgumentException e)
- {
@@ -1006,7 +5783,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcp
+ // {
+ // try
+ // {
-+ // ecP = TeleTrusTNamedCurves.getByOID(new DERObjectIdentifier(name));
++ // ecP = TeleTrusTNamedCurves.getByOID(new ASN1ObjectIdentifier(name));
+ // }
+ // catch (IllegalArgumentException e)
+ // {
@@ -1029,10 +5806,21 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcp
return v.elements();
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java bcprov-jdk16-146/org/bouncycastle/jce/PKCS10CertificationRequest.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/PKCS10CertificationRequest.java 2012-07-27 18:48:00.041479127 +0000
-@@ -80,15 +80,20 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java bcprov-jdk15on-147/org/bouncycastle/jce/PKCS10CertificationRequest.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/PKCS10CertificationRequest.java 2012-09-11 00:12:44.000000000 +0000
+@@ -37,7 +37,9 @@
+ import org.bouncycastle.asn1.pkcs.CertificationRequestInfo;
+ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.RSASSAPSSparams;
+-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// BEGIN android-removed
++// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
++// END android-removed
+ import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
+ import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
+ import org.bouncycastle.asn1.x509.X509Name;
+@@ -81,15 +83,20 @@
static
{
@@ -1057,7 +5845,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest
algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
-@@ -96,57 +101,78 @@
+@@ -97,57 +104,78 @@
algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
@@ -1156,7 +5944,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest
oids.put(NISTObjectIdentifiers.dsa_with_sha256, "SHA256WITHDSA");
//
-@@ -160,35 +186,53 @@
+@@ -161,35 +189,53 @@
// The parameters field SHALL be NULL for RSA based signature algorithms.
//
noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1);
@@ -1221,7 +6009,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest
params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
}
-@@ -594,10 +638,12 @@
+@@ -595,10 +641,12 @@
{
return "SHA1";
}
@@ -1238,7 +6026,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest
else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
{
return "SHA256";
-@@ -610,22 +656,24 @@
+@@ -611,22 +659,24 @@
{
return "SHA512";
}
@@ -1279,12 +6067,12 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest
else
{
return digestAlgOID.getId();
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java bcprov-jdk16-146/org/bouncycastle/jce/provider/BouncyCastleProvider.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2012-07-27 18:48:00.031478939 +0000
-@@ -45,7 +45,10 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/BouncyCastleProvider.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2012-09-11 00:12:44.000000000 +0000
+@@ -48,7 +48,10 @@
{
- private static String info = "BouncyCastle Security Provider v1.46";
+ private static String info = "BouncyCastle Security Provider v1.47";
- public static String PROVIDER_NAME = "BC";
+ // BEGIN android-changed
@@ -1292,27 +6080,54 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
+ public static final String PROVIDER_NAME = "BC";
+ // END android-changed
- /*
- * Configurable symmetric ciphers
-@@ -53,8 +56,14 @@
- private static final String SYMMETRIC_CIPHER_PACKAGE = "org.bouncycastle.jce.provider.symmetric.";
+ public static final ProviderConfiguration CONFIGURATION = new BouncyCastleProviderConfiguration();
+
+@@ -61,8 +64,13 @@
+ private static final String SYMMETRIC_CIPHER_PACKAGE = "org.bouncycastle.jcajce.provider.symmetric.";
private static final String[] SYMMETRIC_CIPHERS =
{
-- "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DESede", "Grainv1", "Grain128", "HC128", "HC256", "IDEA",
-- "Noekeon", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA"
+- "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DES", "DESede", "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA",
+- "Noekeon", "RC2", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA"
+ // BEGIN android-removed
-+ // "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DESede", "Grainv1", "Grain128", "HC128", "HC256", "IDEA",
-+ // "Noekeon", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA"
++ // "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DES", "DESede", "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA",
++ // "Noekeon", "RC2", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA"
+ // END android-removed
+ // BEGIN android-added
-+ "AES", "ARC4", "Blowfish", "DESede",
++ "AES", "ARC4", "Blowfish", "DES", "DESede",
++ // END android-added
+ };
+
+ /*
+@@ -79,7 +87,12 @@
+
+ private static final String[] ASYMMETRIC_CIPHERS =
+ {
+- "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal"
++ // BEGIN android-removed
++ // "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal"
++ // END android-removed
++ // BEGIN android-added
++ "DSA", "DH", "EC", "RSA",
+ // END android-added
-+
};
/*
-@@ -90,26 +99,28 @@
- loadAlgorithms(SYMMETRIC_CIPHER_PACKAGE, SYMMETRIC_CIPHERS);
+@@ -88,7 +101,12 @@
+ private static final String DIGEST_PACKAGE = "org.bouncycastle.jcajce.provider.digest.";
+ private static final String[] DIGESTS =
+ {
+- "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "Tiger", "Whirlpool"
++ // BEGIN android-removed
++ // "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "Tiger", "Whirlpool"
++ // END android-removed
++ // BEGIN android-added
++ "MD5", "SHA1", "SHA256", "SHA384", "SHA512",
++ // END android-added
+ };
+
+ /**
+@@ -120,26 +138,28 @@
+
loadAlgorithms(ASYMMETRIC_CIPHER_PACKAGE, ASYMMETRIC_CIPHERS);
- //
@@ -1360,7 +6175,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
//
-@@ -118,14 +129,24 @@
+@@ -148,14 +168,24 @@
put("KeyStore.BKS", "org.bouncycastle.jce.provider.JDKKeyStore");
put("KeyStore.BouncyCastle", "org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore");
put("KeyStore.PKCS12", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore");
@@ -1393,67 +6208,22 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
put("Alg.Alias.KeyStore.UBER", "BouncyCastle");
put("Alg.Alias.KeyStore.BOUNCYCASTLE", "BouncyCastle");
-@@ -142,44 +163,63 @@
- //
- put("AlgorithmParameterGenerator.DH", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DH");
- put("AlgorithmParameterGenerator.DSA", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DSA");
-- put("AlgorithmParameterGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$GOST3410");
-- put("AlgorithmParameterGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$ElGamal");
-- put("AlgorithmParameterGenerator.DES", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-- put("AlgorithmParameterGenerator.DESEDE", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-- put("AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-- put("AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-- put("AlgorithmParameterGenerator.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
-- put("AlgorithmParameterGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
-+ // BEGIN android-removed
-+ // put("AlgorithmParameterGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$GOST3410");
-+ // put("AlgorithmParameterGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$ElGamal");
-+ // put("AlgorithmParameterGenerator.DES", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-+ // put("AlgorithmParameterGenerator.DESEDE", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-+ // put("AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-+ // put("AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
-+ // put("AlgorithmParameterGenerator.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
-+ // put("AlgorithmParameterGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
-+ // END android-removed
-
- put("Alg.Alias.AlgorithmParameterGenerator.DIFFIEHELLMAN", "DH");
-- put("Alg.Alias.AlgorithmParameterGenerator.GOST-3410", "GOST3410");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.AlgorithmParameterGenerator.GOST-3410", "GOST3410");
-+ // END android-removed
+@@ -164,29 +194,41 @@
//
// algorithm parameters
//
- put("AlgorithmParameters.OAEP", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$OAEP");
-- put("AlgorithmParameters.PSS", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PSS");
-+ // BEGIN android-removed
-+ // put("AlgorithmParameters.PSS", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PSS");
-+ // END android-removed
- put("AlgorithmParameters.DH", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$DH");
- put("Alg.Alias.AlgorithmParameters.DIFFIEHELLMAN", "DH");
- put("AlgorithmParameters.DSA", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$DSA");
-- put("AlgorithmParameters.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$ElGamal");
- put("AlgorithmParameters.IES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IES");
+ // BEGIN android-removed
-+ // put("AlgorithmParameters.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$ElGamal");
+ // put("AlgorithmParameters.IES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IES");
+ // END android-removed
put("AlgorithmParameters.PKCS12PBE", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PKCS12PBE");
-- put("AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
+
- put("AlgorithmParameters." + PKCSObjectIdentifiers.id_PBKDF2, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PBKDF2");
--
-- put("AlgorithmParameters.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$GOST3410");
-- put("Alg.Alias.AlgorithmParameters.GOST-3410", "GOST3410");
-+ // BEGIN android-changed
-+ // redundant with below
-+ // put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESede");
-+ // END android-changed
+ // BEGIN android-removed
+ // put("AlgorithmParameters." + PKCSObjectIdentifiers.id_PBKDF2, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PBKDF2");
-+ //
-+ // put("AlgorithmParameters.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$GOST3410");
-+ // put("Alg.Alias.AlgorithmParameters.GOST-3410", "GOST3410");
+ // END android-removed
+
+
put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2", "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES", "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES", "PKCS12PBE");
@@ -1481,57 +6251,16 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC2-CBC", "PKCS12PBE");
put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC4", "PKCS12PBE");
put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC2-CBC", "PKCS12PBE");
-@@ -193,7 +233,7 @@
- put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.5", "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.6", "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters.PBEWithSHAAnd3KeyTripleDES", "PKCS12PBE");
--
-+
- put("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes256_cbc.getId(), "PKCS12PBE");
-@@ -203,22 +243,24 @@
-
- put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP");
-
-- put("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS");
-- put("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS");
-- put("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS");
-- put("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS");
+ put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC4", "PKCS12PBE");
+ put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE");
+- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE");
+ // BEGIN android-removed
-+ // put("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS");
-+ // put("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS");
++ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE");
+ // END android-removed
-
- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITAES-CBC-BC", "PKCS12PBE");
- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND192BITAES-CBC-BC", "PKCS12PBE");
-@@ -235,12 +277,14 @@
+ put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.1", "PKCS12PBE");
+ put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.2", "PKCS12PBE");
+ put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.3", "PKCS12PBE");
+@@ -217,12 +259,14 @@
put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND128BITAES-CBC-BC","PKCS12PBE");
put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND192BITAES-CBC-BC","PKCS12PBE");
put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND256BITAES-CBC-BC","PKCS12PBE");
@@ -1552,95 +6281,19 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
//
// key agreement
-@@ -252,71 +296,91 @@
- // cipher engines
- //
- put("Cipher.DES", "org.bouncycastle.jce.provider.JCEBlockCipher$DES");
-- put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JCEBlockCipher$DESCBC");
--
-- put("Cipher.RC2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2");
-- put("Cipher.RC2WRAP", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
-- put("Cipher.1.2.840.113549.1.9.16.3.7", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
--
-- put("Cipher.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2CBC");
-+ // BEGIN android-removed
-+ // put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JCEBlockCipher$DESCBC");
-+ //
-+ // put("Cipher.RC2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2");
-+ // put("Cipher.RC2WRAP", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
-+ // put("Cipher.1.2.840.113549.1.9.16.3.7", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
-+ //
-+ // put("Cipher.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2CBC");
-+ // END android-removed
-
+@@ -235,16 +279,22 @@
put("Alg.Alias.Cipher.PBEWithSHAAnd3KeyTripleDES", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
-- put("Cipher.GOST28147", "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147");
-- put("Alg.Alias.Cipher.GOST", "GOST28147");
-- put("Alg.Alias.Cipher.GOST-28147", "GOST28147");
-- put("Cipher." + CryptoProObjectIdentifiers.gostR28147_cbc, "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147cbc");
-+ // BEGIN android-removed
-+ // put("Cipher.GOST28147", "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147");
-+ // put("Alg.Alias.Cipher.GOST", "GOST28147");
-+ // put("Alg.Alias.Cipher.GOST-28147", "GOST28147");
-+ // put("Cipher." + CryptoProObjectIdentifiers.gostR28147_cbc, "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147cbc");
-+ // END android-removed
- put("Cipher.RSA", "org.bouncycastle.jce.provider.JCERSACipher$NoPadding");
-- put("Cipher.RSA/RAW", "org.bouncycastle.jce.provider.JCERSACipher$NoPadding");
-- put("Cipher.RSA/PKCS1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
-- put("Cipher.1.2.840.113549.1.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
-- put("Cipher.2.5.8.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
-- put("Cipher.RSA/1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PrivateOnly");
-- put("Cipher.RSA/2", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PublicOnly");
-- put("Cipher.RSA/OAEP", "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
-- put("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
-- put("Cipher.RSA/ISO9796-1", "org.bouncycastle.jce.provider.JCERSACipher$ISO9796d1Padding");
--
- put("Cipher.ECIES", "org.bouncycastle.jce.provider.JCEIESCipher$ECIES");
- put("Cipher.BrokenECIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenECIES");
- put("Cipher.IES", "org.bouncycastle.jce.provider.JCEIESCipher$IES");
- put("Cipher.BrokenIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenIES");
-- put("Cipher.ELGAMAL", "org.bouncycastle.jce.provider.JCEElGamalCipher$NoPadding");
-- put("Cipher.ELGAMAL/PKCS1", "org.bouncycastle.jce.provider.JCEElGamalCipher$PKCS1v1_5Padding");
-+ // BEGIN android-changed
-+ put("Alg.Alias.Cipher.RSA/RAW", "RSA");
-+ // END android-changed
+ // BEGIN android-removed
-+ // put("Cipher.RSA/PKCS1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
-+ // put("Cipher.1.2.840.113549.1.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
-+ // put("Cipher.2.5.8.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
-+ // put("Cipher.RSA/1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PrivateOnly");
-+ // put("Cipher.RSA/2", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PublicOnly");
-+ // put("Cipher.RSA/OAEP", "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
-+ // put("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
-+ // put("Cipher.RSA/ISO9796-1", "org.bouncycastle.jce.provider.JCERSACipher$ISO9796d1Padding");
-+ //
+ // put("Cipher.ECIES", "org.bouncycastle.jce.provider.JCEIESCipher$ECIES");
+ // put("Cipher.BrokenECIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenECIES");
+ // put("Cipher.IES", "org.bouncycastle.jce.provider.JCEIESCipher$IES");
+ // put("Cipher.BrokenIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenIES");
-+ // put("Cipher.ELGAMAL", "org.bouncycastle.jce.provider.JCEElGamalCipher$NoPadding");
-+ // put("Cipher.ELGAMAL/PKCS1", "org.bouncycastle.jce.provider.JCEElGamalCipher$PKCS1v1_5Padding");
-+ // END android-removed
-
- put("Alg.Alias.Cipher.RSA//RAW", "RSA");
- put("Alg.Alias.Cipher.RSA//NOPADDING", "RSA");
-- put("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1");
-- put("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP");
-- put("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1");
--
-- put("Alg.Alias.Cipher.ELGAMAL/ECB/PKCS1PADDING", "ELGAMAL/PKCS1");
-- put("Alg.Alias.Cipher.ELGAMAL/NONE/PKCS1PADDING", "ELGAMAL/PKCS1");
-- put("Alg.Alias.Cipher.ELGAMAL/NONE/NOPADDING", "ELGAMAL");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1");
-+ // put("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP");
-+ // put("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1");
-+ //
-+ // put("Alg.Alias.Cipher.ELGAMAL/ECB/PKCS1PADDING", "ELGAMAL/PKCS1");
-+ // put("Alg.Alias.Cipher.ELGAMAL/NONE/PKCS1PADDING", "ELGAMAL/PKCS1");
-+ // put("Alg.Alias.Cipher.ELGAMAL/NONE/NOPADDING", "ELGAMAL");
+ // END android-removed
put("Cipher.PBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithMD5AndDES");
@@ -1655,50 +6308,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
+ // put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES");
+ // END android-removed
put("Cipher.PBEWITHSHA1ANDRC2", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHA1AndRC2");
- put("Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndDES3Key");
-- put("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES3Key");
-- put("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndDES3Key");
-+ // BEGIN android-removed
-+ // put("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES3Key");
-+ // put("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndDES3Key");
-+ // END android-removed
- put("Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndDES2Key");
-- put("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES2Key");
-+ // BEGIN android-removed
-+ // put("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES2Key");
-+ // END android-removed
- put("Cipher.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAnd128BitRC2");
- put("Cipher.PBEWITHSHAAND40BITRC2-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAnd40BitRC2");
- put("Cipher.PBEWITHSHAAND128BITRC4", "org.bouncycastle.jce.provider.JCEStreamCipher$PBEWithSHAAnd128BitRC4");
- put("Cipher.PBEWITHSHAAND40BITRC4", "org.bouncycastle.jce.provider.JCEStreamCipher$PBEWithSHAAnd40BitRC4");
-
-- put("Alg.Alias.Cipher.PBEWITHSHA1AND3-KEYTRIPLEDES-CBC", "Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
-- put("Alg.Alias.Cipher.PBEWITHSHA1AND2-KEYTRIPLEDES-CBC", "Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
-- put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC2-CBC", "Cipher.PBEWITHSHAAND128BITRC2-CBC");
-- put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC2-CBC", "Cipher.PBEWITHSHAAND40BITRC2-CBC");
-- put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC4", "Cipher.PBEWITHSHAAND128BITRC4");
-- put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC4", "Cipher.PBEWITHSHAAND40BITRC4");
-+ // BEGIN android-changed
-+ put("Alg.Alias.Cipher.PBEWITHSHA1AND3-KEYTRIPLEDES-CBC", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
-+ put("Alg.Alias.Cipher.PBEWITHSHA1AND2-KEYTRIPLEDES-CBC", "PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
-+ put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC2-CBC", "PBEWITHSHAAND128BITRC2-CBC");
-+ put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC2-CBC", "PBEWITHSHAAND40BITRC2-CBC");
-+ put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC4", "PBEWITHSHAAND128BITRC4");
-+ put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC4", "PBEWITHSHAAND40BITRC4");
-+ // END android-changed
- put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PBEWITHSHAAND128BITAES-CBC-BC");
- put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PBEWITHSHAAND192BITAES-CBC-BC");
-@@ -324,7 +388,7 @@
- put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC");
- put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC");
- put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC");
--
-+
- put("Cipher.PBEWITHSHAAND128BITAES-CBC-BC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
- put("Cipher.PBEWITHSHAAND192BITAES-CBC-BC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
- put("Cipher.PBEWITHSHAAND256BITAES-CBC-BC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
-@@ -346,10 +410,12 @@
+ put("Cipher.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAnd128BitRC2");
+@@ -286,10 +336,12 @@
put("Cipher.PBEWITHMD5AND256BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
put("Cipher.PBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndTwofish");
@@ -1715,113 +6327,17 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES");
put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDDES");
put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES");
-@@ -368,13 +434,15 @@
- put("KeyGenerator.DES", "org.bouncycastle.jce.provider.JCEKeyGenerator$DES");
- put("Alg.Alias.KeyGenerator." + OIWObjectIdentifiers.desCBC, "DES");
-
-- put("KeyGenerator.RC2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
-- put("KeyGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
--
-- put("KeyGenerator.GOST28147", "org.bouncycastle.jce.provider.JCEKeyGenerator$GOST28147");
-- put("Alg.Alias.KeyGenerator.GOST", "GOST28147");
-- put("Alg.Alias.KeyGenerator.GOST-28147", "GOST28147");
-- put("Alg.Alias.KeyGenerator." + CryptoProObjectIdentifiers.gostR28147_cbc, "GOST28147");
-+ // BEGIN android-removed
-+ // put("KeyGenerator.RC2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
-+ // put("KeyGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
-+ //
-+ // put("KeyGenerator.GOST28147", "org.bouncycastle.jce.provider.JCEKeyGenerator$GOST28147");
-+ // put("Alg.Alias.KeyGenerator.GOST", "GOST28147");
-+ // put("Alg.Alias.KeyGenerator.GOST-28147", "GOST28147");
-+ // put("Alg.Alias.KeyGenerator." + CryptoProObjectIdentifiers.gostR28147_cbc, "GOST28147");
-+ // END android-removed
-
- //
- // key pair generators.
-@@ -382,14 +450,18 @@
- put("KeyPairGenerator.RSA", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$RSA");
- put("KeyPairGenerator.DH", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$DH");
- put("KeyPairGenerator.DSA", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$DSA");
-- put("KeyPairGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$ElGamal");
-+ // BEGIN android-removed
-+ // put("KeyPairGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$ElGamal");
-+ // END android-removed
-
- put("Alg.Alias.KeyPairGenerator.1.2.840.113549.1.1.1", "RSA");
- put("Alg.Alias.KeyPairGenerator.DIFFIEHELLMAN", "DH");
-
-- put("KeyPairGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$GOST3410");
-- put("Alg.Alias.KeyPairGenerator.GOST-3410", "GOST3410");
-- put("Alg.Alias.KeyPairGenerator.GOST-3410-94", "GOST3410");
-+ // BEGIN android-removed
-+ // put("KeyPairGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$GOST3410");
-+ // put("Alg.Alias.KeyPairGenerator.GOST-3410", "GOST3410");
-+ // put("Alg.Alias.KeyPairGenerator.GOST-3410-94", "GOST3410");
-+ // END android-removed
-
- //
- // key factories
-@@ -397,20 +469,24 @@
- put("KeyFactory.RSA", "org.bouncycastle.jce.provider.JDKKeyFactory$RSA");
- put("KeyFactory.DH", "org.bouncycastle.jce.provider.JDKKeyFactory$DH");
- put("KeyFactory.DSA", "org.bouncycastle.jce.provider.JDKKeyFactory$DSA");
-- put("KeyFactory.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
-- put("KeyFactory.ElGamal", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
--
-- put("KeyFactory.X.509", "org.bouncycastle.jce.provider.JDKKeyFactory$X509");
-+ // BEGIN android-removed
-+ // put("KeyFactory.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
-+ // put("KeyFactory.ElGamal", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
-+ //
-+ // put("KeyFactory.X.509", "org.bouncycastle.jce.provider.JDKKeyFactory$X509");
-+ // END android-removed
-
- put("Alg.Alias.KeyFactory.1.2.840.113549.1.1.1", "RSA");
- put("Alg.Alias.KeyFactory.1.2.840.10040.4.1", "DSA");
-
- put("Alg.Alias.KeyFactory.DIFFIEHELLMAN", "DH");
-
-- put("KeyFactory.GOST3410", "org.bouncycastle.jce.provider.JDKKeyFactory$GOST3410");
-- put("Alg.Alias.KeyFactory.GOST-3410", "GOST3410");
-- put("Alg.Alias.KeyFactory.GOST-3410-94", "GOST3410");
-- put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_94, "GOST3410");
-+ // BEGIN android-removed
-+ // put("KeyFactory.GOST3410", "org.bouncycastle.jce.provider.JDKKeyFactory$GOST3410");
-+ // put("Alg.Alias.KeyFactory.GOST-3410", "GOST3410");
-+ // put("Alg.Alias.KeyFactory.GOST-3410-94", "GOST3410");
-+ // put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_94, "GOST3410");
-+ // END android-removed
-
- //
- // Algorithm parameters
-@@ -418,24 +494,34 @@
- put("AlgorithmParameters.DES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
- put("Alg.Alias.AlgorithmParameters." + OIWObjectIdentifiers.desCBC, "DES");
- put("AlgorithmParameters.DESEDE", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
-- put("AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
-- put("AlgorithmParameters.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
-- put("AlgorithmParameters.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
-+ // BEGIN android-changed
-+ put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
-+ // END android-changed
-+ // BEGIN android-removed
-+ // put("AlgorithmParameters.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
-+ // put("AlgorithmParameters.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
-+ // END android-removed
-
+@@ -326,16 +378,20 @@
//
// secret key factories.
//
- put("SecretKeyFactory.DES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$DES");
- put("SecretKeyFactory.PBEWITHMD2ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndDES");
-
- put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
- put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
+ // BEGIN android-removed
+ // put("SecretKeyFactory.PBEWITHMD2ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndDES");
-+ // END android-removed
-+
-+ // BEGIN android-removed
++ //
+ // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
+ // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
+ // END android-removed
@@ -1837,7 +6353,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
put("SecretKeyFactory.PBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5AndDES");
put("SecretKeyFactory.PBEWITHMD5ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5AndRC2");
put("SecretKeyFactory.PBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHA1AndDES");
-@@ -447,31 +533,41 @@
+@@ -347,31 +403,39 @@
put("SecretKeyFactory.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAnd128BitRC2");
put("SecretKeyFactory.PBEWITHSHAAND40BITRC2-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAnd40BitRC2");
put("SecretKeyFactory.PBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAndTwofish");
@@ -1875,9 +6391,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
+ // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12");
+ // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PBE/PKCS12");
+ // put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAANDTWOFISH-CBC", "PBE/PKCS12");
-+ // END android-removed
-+
-+ // BEGIN android-removed
++ //
+ // put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES");
+ // put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2");
+ // END android-removed
@@ -1894,7 +6408,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES");
put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2");
put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES");
-@@ -508,6 +604,10 @@
+@@ -408,20 +472,31 @@
put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC");
put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC");
put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC");
@@ -1905,9 +6419,6 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
addMacAlgorithms();
-@@ -516,16 +616,23 @@
- addSignatureAlgorithms();
-
// Certification Path API
- put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi");
- put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi");
@@ -1936,15 +6447,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
}
private void loadAlgorithms(String packageName, String[] names)
-@@ -586,42 +693,46 @@
- //
+@@ -469,21 +544,25 @@
private void addMacAlgorithms()
{
-- put("Mac.DESMAC", "org.bouncycastle.jce.provider.JCEMac$DES");
-- put("Alg.Alias.Mac.DES", "DESMAC");
-- put("Mac.DESMAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$DESCFB8");
-- put("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8");
--
+
- put("Mac.DESWITHISO9797", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3");
- put("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797");
-
@@ -1953,27 +6459,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
- put("Mac.ISO9797ALG3WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4");
- put("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING");
-
-- put("Mac.RC2MAC", "org.bouncycastle.jce.provider.JCEMac$RC2");
-- put("Alg.Alias.Mac.RC2", "RC2MAC");
-- put("Mac.RC2MAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$RC2CFB8");
-- put("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8");
--
--
-- put("Mac.GOST28147MAC", "org.bouncycastle.jce.provider.JCEMac$GOST28147");
-- put("Alg.Alias.Mac.GOST28147", "GOST28147MAC");
--
- put("Mac.OLDHMACSHA384", "org.bouncycastle.jce.provider.JCEMac$OldSHA384");
-
- put("Mac.OLDHMACSHA512", "org.bouncycastle.jce.provider.JCEMac$OldSHA512");
--
-- addHMACAlgorithm("MD2", "org.bouncycastle.jce.provider.JCEMac$MD2", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD2HMAC");
-- addHMACAlgorithm("MD4", "org.bouncycastle.jce.provider.JCEMac$MD4", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD4HMAC");
+ // BEGIN android-removed
-+ // put("Mac.DESMAC", "org.bouncycastle.jce.provider.JCEMac$DES");
-+ // put("Alg.Alias.Mac.DES", "DESMAC");
-+ // put("Mac.DESMAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$DESCFB8");
-+ // put("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8");
-+ //
+ // put("Mac.DESWITHISO9797", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3");
+ // put("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797");
+ //
@@ -1982,54 +6471,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
+ // put("Mac.ISO9797ALG3WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4");
+ // put("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING");
+ //
-+ // put("Mac.RC2MAC", "org.bouncycastle.jce.provider.JCEMac$RC2");
-+ // put("Alg.Alias.Mac.RC2", "RC2MAC");
-+ // put("Mac.RC2MAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$RC2CFB8");
-+ // put("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8");
-+ //
-+ //
-+ // put("Mac.GOST28147MAC", "org.bouncycastle.jce.provider.JCEMac$GOST28147");
-+ // put("Alg.Alias.Mac.GOST28147", "GOST28147MAC");
-+ //
+ // put("Mac.OLDHMACSHA384", "org.bouncycastle.jce.provider.JCEMac$OldSHA384");
+ //
+ // put("Mac.OLDHMACSHA512", "org.bouncycastle.jce.provider.JCEMac$OldSHA512");
-+ //
-+ // addHMACAlgorithm("MD2", "org.bouncycastle.jce.provider.JCEMac$MD2", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD2HMAC");
-+ // addHMACAlgorithm("MD4", "org.bouncycastle.jce.provider.JCEMac$MD4", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD4HMAC");
-+ // END android-removed
- addHMACAlgorithm("MD5", "org.bouncycastle.jce.provider.JCEMac$MD5", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD5HMAC");
- addHMACAlias("MD5", IANAObjectIdentifiers.hmacMD5);
-
- addHMACAlgorithm("SHA1", "org.bouncycastle.jce.provider.JCEMac$SHA1", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA1");
- addHMACAlias("SHA1", PKCSObjectIdentifiers.id_hmacWithSHA1);
- addHMACAlias("SHA1", IANAObjectIdentifiers.hmacSHA1);
-- addHMACAlgorithm("SHA224", "org.bouncycastle.jce.provider.JCEMac$SHA224", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA224");
-- addHMACAlias("SHA224", PKCSObjectIdentifiers.id_hmacWithSHA224);
-+ // BEGIN android-removed
-+ // addHMACAlgorithm("SHA224", "org.bouncycastle.jce.provider.JCEMac$SHA224", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA224");
-+ // addHMACAlias("SHA224", PKCSObjectIdentifiers.id_hmacWithSHA224);
-+ // END android-removed
- addHMACAlgorithm("SHA256", "org.bouncycastle.jce.provider.JCEMac$SHA256", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA256");
- addHMACAlias("SHA256", PKCSObjectIdentifiers.id_hmacWithSHA256);
- addHMACAlgorithm("SHA384", "org.bouncycastle.jce.provider.JCEMac$SHA384", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA384");
-@@ -629,16 +740,20 @@
- addHMACAlgorithm("SHA512", "org.bouncycastle.jce.provider.JCEMac$SHA512", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA512");
- addHMACAlias("SHA512", PKCSObjectIdentifiers.id_hmacWithSHA512);
-
-- addHMACAlgorithm("RIPEMD128", "org.bouncycastle.jce.provider.JCEMac$RIPEMD128", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD128HMAC");
-- addHMACAlgorithm("RIPEMD160", "org.bouncycastle.jce.provider.JCEMac$RIPEMD160", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD160HMAC");
-- addHMACAlias("RIPEMD160", IANAObjectIdentifiers.hmacRIPEMD160);
--
-- addHMACAlgorithm("TIGER", "org.bouncycastle.jce.provider.JCEMac$Tiger", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACTIGER");
-- addHMACAlias("TIGER", IANAObjectIdentifiers.hmacTIGER);
-+ // BEGIN android-removed
-+ // addHMACAlgorithm("RIPEMD128", "org.bouncycastle.jce.provider.JCEMac$RIPEMD128", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD128HMAC");
-+ // addHMACAlgorithm("RIPEMD160", "org.bouncycastle.jce.provider.JCEMac$RIPEMD160", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD160HMAC");
-+ // addHMACAlias("RIPEMD160", IANAObjectIdentifiers.hmacRIPEMD160);
-+ //
-+ // addHMACAlgorithm("TIGER", "org.bouncycastle.jce.provider.JCEMac$Tiger", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACTIGER");
-+ // addHMACAlias("TIGER", IANAObjectIdentifiers.hmacTIGER);
+ // END android-removed
put("Mac.PBEWITHHMACSHA", "org.bouncycastle.jce.provider.JCEMac$PBEWithSHA");
@@ -2041,411 +6485,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvi
put("Alg.Alias.Mac.1.3.14.3.2.26", "PBEWITHHMACSHA");
}
-@@ -676,9 +791,11 @@
- put("Alg.Alias.MessageDigest.SHA1", "SHA-1");
- put("Alg.Alias.MessageDigest.SHA", "SHA-1");
- put("Alg.Alias.MessageDigest." + OIWObjectIdentifiers.idSHA1, "SHA-1");
-- put("MessageDigest.SHA-224", "org.bouncycastle.jce.provider.JDKMessageDigest$SHA224");
-- put("Alg.Alias.MessageDigest.SHA224", "SHA-224");
-- put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha224, "SHA-224");
-+ // BEGIN android-removed
-+ // put("MessageDigest.SHA-224", "org.bouncycastle.jce.provider.JDKMessageDigest$SHA224");
-+ // put("Alg.Alias.MessageDigest.SHA224", "SHA-224");
-+ // put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha224, "SHA-224");
-+ // END android-removed
- put("MessageDigest.SHA-256", "org.bouncycastle.jce.provider.JDKMessageDigest$SHA256");
- put("Alg.Alias.MessageDigest.SHA256", "SHA-256");
- put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha256, "SHA-256");
-@@ -689,27 +806,31 @@
- put("Alg.Alias.MessageDigest.SHA512", "SHA-512");
- put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512, "SHA-512");
-
-- put("MessageDigest.MD2", "org.bouncycastle.jce.provider.JDKMessageDigest$MD2");
-- put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md2, "MD2");
-- put("MessageDigest.MD4", "org.bouncycastle.jce.provider.JDKMessageDigest$MD4");
-- put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md4, "MD4");
-+ // BEGIN android-removed
-+ // put("MessageDigest.MD2", "org.bouncycastle.jce.provider.JDKMessageDigest$MD2");
-+ // put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md2, "MD2");
-+ // put("MessageDigest.MD4", "org.bouncycastle.jce.provider.JDKMessageDigest$MD4");
-+ // put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md4, "MD4");
-+ // END android-removed
- put("MessageDigest.MD5", "org.bouncycastle.jce.provider.JDKMessageDigest$MD5");
- put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md5, "MD5");
-- put("MessageDigest.RIPEMD128", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD128");
-- put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd128, "RIPEMD128");
-- put("MessageDigest.RIPEMD160", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD160");
-- put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd160, "RIPEMD160");
-- put("MessageDigest.RIPEMD256", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD256");
-- put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd256, "RIPEMD256");
-- put("MessageDigest.RIPEMD320", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD320");
-- put("MessageDigest.Tiger", "org.bouncycastle.jce.provider.JDKMessageDigest$Tiger");
--
-- put("MessageDigest.WHIRLPOOL", "org.bouncycastle.jce.provider.JDKMessageDigest$Whirlpool");
--
-- put("MessageDigest.GOST3411", "org.bouncycastle.jce.provider.JDKMessageDigest$GOST3411");
-- put("Alg.Alias.MessageDigest.GOST", "GOST3411");
-- put("Alg.Alias.MessageDigest.GOST-3411", "GOST3411");
-- put("Alg.Alias.MessageDigest." + CryptoProObjectIdentifiers.gostR3411, "GOST3411");
-+ // BEGIN android-removed
-+ // put("MessageDigest.RIPEMD128", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD128");
-+ // put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd128, "RIPEMD128");
-+ // put("MessageDigest.RIPEMD160", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD160");
-+ // put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd160, "RIPEMD160");
-+ // put("MessageDigest.RIPEMD256", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD256");
-+ // put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd256, "RIPEMD256");
-+ // put("MessageDigest.RIPEMD320", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD320");
-+ // put("MessageDigest.Tiger", "org.bouncycastle.jce.provider.JDKMessageDigest$Tiger");
-+
-+ // put("MessageDigest.WHIRLPOOL", "org.bouncycastle.jce.provider.JDKMessageDigest$Whirlpool");
-+
-+ // put("MessageDigest.GOST3411", "org.bouncycastle.jce.provider.JDKMessageDigest$GOST3411");
-+ // put("Alg.Alias.MessageDigest.GOST", "GOST3411");
-+ // put("Alg.Alias.MessageDigest.GOST-3411", "GOST3411");
-+ // put("Alg.Alias.MessageDigest." + CryptoProObjectIdentifiers.gostR3411, "GOST3411");
-+ // END android-removed
- }
-
- //
-@@ -717,55 +838,70 @@
- //
- private void addSignatureAlgorithms()
- {
-- put("Signature.MD2WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD2WithRSAEncryption");
-- put("Signature.MD4WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD4WithRSAEncryption");
-+ // BEGIN android-removed
-+ // Dropping MD2
-+ // put("Signature.MD2WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD2WithRSAEncryption");
-+ // put("Signature.MD4WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD4WithRSAEncryption");
-+ // END android-removed
- put("Signature.MD5WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD5WithRSAEncryption");
- put("Signature.SHA1WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA1WithRSAEncryption");
-- put("Signature.SHA224WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA224WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Signature.SHA224WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA224WithRSAEncryption");
-+ // END android-removed
- put("Signature.SHA256WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA256WithRSAEncryption");
- put("Signature.SHA384WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA384WithRSAEncryption");
- put("Signature.SHA512WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA512WithRSAEncryption");
-- put("Signature.RIPEMD160WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD160WithRSAEncryption");
-- put("Signature.RIPEMD128WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD128WithRSAEncryption");
-- put("Signature.RIPEMD256WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD256WithRSAEncryption");
-- put("Signature.DSA", "org.bouncycastle.jce.provider.JDKDSASigner$stdDSA");
-+ // BEGIN android-removed
-+ // put("Signature.RIPEMD160WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD160WithRSAEncryption");
-+ // put("Signature.RIPEMD128WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD128WithRSAEncryption");
-+ // put("Signature.RIPEMD256WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD256WithRSAEncryption");
-+ // END android-removed
-+ // BEGIN android-changed
-+ put("Signature.SHA1withDSA", "org.bouncycastle.jce.provider.JDKDSASigner$stdDSA");
-+ // END android-changed
- put("Signature.NONEWITHDSA", "org.bouncycastle.jce.provider.JDKDSASigner$noneDSA");
-- put("Signature.SHA1withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$SHA1WithRSAEncryption");
-- put("Signature.MD5withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$MD5WithRSAEncryption");
-- put("Signature.RIPEMD160withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$RIPEMD160WithRSAEncryption");
--
-- put("Signature.RSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
-- put("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
-- put("Signature.SHA1withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA1withRSA");
-- put("Signature.SHA224withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA224withRSA");
-- put("Signature.SHA256withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA256withRSA");
-- put("Signature.SHA384withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA384withRSA");
-- put("Signature.SHA512withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA512withRSA");
--
-- put("Signature.RSA", "org.bouncycastle.jce.provider.JDKDigestSignature$noneRSA");
-- put("Signature.RAWRSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$nonePSS");
-+ // BEGIN android-removed
-+ // put("Signature.SHA1withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$SHA1WithRSAEncryption");
-+ // put("Signature.MD5withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$MD5WithRSAEncryption");
-+ // put("Signature.RIPEMD160withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$RIPEMD160WithRSAEncryption");
-+ //
-+ // put("Signature.RSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
-+ // put("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
-+ // put("Signature.SHA1withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA1withRSA");
-+ // put("Signature.SHA224withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA224withRSA");
-+ // put("Signature.SHA256withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA256withRSA");
-+ // put("Signature.SHA384withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA384withRSA");
-+ // put("Signature.SHA512withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA512withRSA");
-+ //
-+ // put("Signature.RSA", "org.bouncycastle.jce.provider.JDKDigestSignature$noneRSA");
-+ // put("Signature.RAWRSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$nonePSS");
-+ // END android-removed
-
- put("Alg.Alias.Signature.RAWDSA", "NONEWITHDSA");
-
-- put("Alg.Alias.Signature.RAWRSA", "RSA");
-- put("Alg.Alias.Signature.NONEWITHRSA", "RSA");
-- put("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS");
-- put("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS");
-- put("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS");
--
-- put("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS");
--
-- put("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS");
-- put("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS");
-- put("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS");
-- put("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS");
-- put("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS");
--
-- put("Alg.Alias.Signature.MD2withRSAEncryption", "MD2WithRSAEncryption");
-- put("Alg.Alias.Signature.MD4withRSAEncryption", "MD4WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.RAWRSA", "RSA");
-+ // put("Alg.Alias.Signature.NONEWITHRSA", "RSA");
-+ // put("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS");
-+ // put("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS");
-+ // put("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS");
-+ //
-+ // put("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS");
-+ //
-+ // put("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS");
-+ // put("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS");
-+ // put("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS");
-+ // put("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS");
-+ // put("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS");
-+ //
-+ // put("Alg.Alias.Signature.MD2withRSAEncryption", "MD2WithRSAEncryption");
-+ // put("Alg.Alias.Signature.MD4withRSAEncryption", "MD4WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature.MD5withRSAEncryption", "MD5WithRSAEncryption");
- put("Alg.Alias.Signature.SHA1withRSAEncryption", "SHA1WithRSAEncryption");
-- put("Alg.Alias.Signature.SHA224withRSAEncryption", "SHA224WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.SHA224withRSAEncryption", "SHA224WithRSAEncryption");
-+ // END android-removed
-
- put("Alg.Alias.Signature.SHA256withRSAEncryption", "SHA256WithRSAEncryption");
- put("Alg.Alias.Signature.SHA384withRSAEncryption", "SHA384WithRSAEncryption");
-@@ -779,24 +915,30 @@
- put("Alg.Alias.Signature.SHA384WITHRSAENCRYPTION", "SHA384WithRSAEncryption");
- put("Alg.Alias.Signature.SHA512WITHRSAENCRYPTION", "SHA512WithRSAEncryption");
-
-- put("Alg.Alias.Signature.RIPEMD160withRSAEncryption", "RIPEMD160WithRSAEncryption");
--
-- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md2WithRSAEncryption, "MD2WithRSAEncryption");
-- put("Alg.Alias.Signature.MD2WithRSA", "MD2WithRSAEncryption");
-- put("Alg.Alias.Signature.MD2withRSA", "MD2WithRSAEncryption");
-- put("Alg.Alias.Signature.MD2/RSA", "MD2WithRSAEncryption");
-+ // BEGIN android-removed
-+ // Dropping MD2
-+ // put("Alg.Alias.Signature.RIPEMD160withRSAEncryption", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md2WithRSAEncryption, "MD2WithRSAEncryption");
-+ // put("Alg.Alias.Signature.MD2WithRSA", "MD2WithRSAEncryption");
-+ // put("Alg.Alias.Signature.MD2withRSA", "MD2WithRSAEncryption");
-+ // put("Alg.Alias.Signature.MD2/RSA", "MD2WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature.MD5WithRSA", "MD5WithRSAEncryption");
- put("Alg.Alias.Signature.MD5withRSA", "MD5WithRSAEncryption");
- put("Alg.Alias.Signature.MD5/RSA", "MD5WithRSAEncryption");
- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md5WithRSAEncryption, "MD5WithRSAEncryption");
-- put("Alg.Alias.Signature.MD4WithRSA", "MD4WithRSAEncryption");
-- put("Alg.Alias.Signature.MD4withRSA", "MD4WithRSAEncryption");
-- put("Alg.Alias.Signature.MD4/RSA", "MD4WithRSAEncryption");
-- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md4WithRSAEncryption, "MD4WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.MD4WithRSA", "MD4WithRSAEncryption");
-+ // put("Alg.Alias.Signature.MD4withRSA", "MD4WithRSAEncryption");
-+ // put("Alg.Alias.Signature.MD4/RSA", "MD4WithRSAEncryption");
-+ // put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md4WithRSAEncryption, "MD4WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature.SHA1WithRSA", "SHA1WithRSAEncryption");
- put("Alg.Alias.Signature.SHA1withRSA", "SHA1WithRSAEncryption");
-- put("Alg.Alias.Signature.SHA224WithRSA", "SHA224WithRSAEncryption");
-- put("Alg.Alias.Signature.SHA224withRSA", "SHA224WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.SHA224WithRSA", "SHA224WithRSAEncryption");
-+ // put("Alg.Alias.Signature.SHA224withRSA", "SHA224WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature.SHA256WithRSA", "SHA256WithRSAEncryption");
- put("Alg.Alias.Signature.SHA256withRSA", "SHA256WithRSAEncryption");
- put("Alg.Alias.Signature.SHA384WithRSA", "SHA384WithRSAEncryption");
-@@ -806,92 +948,110 @@
- put("Alg.Alias.Signature.SHA1/RSA", "SHA1WithRSAEncryption");
- put("Alg.Alias.Signature.SHA-1/RSA", "SHA1WithRSAEncryption");
- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha1WithRSAEncryption, "SHA1WithRSAEncryption");
-- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WithRSAEncryption");
- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WithRSAEncryption");
- put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WithRSAEncryption");
- put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.113549.1.1.1", "SHA1WithRSAEncryption");
- put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.113549.1.1.5", "SHA1WithRSAEncryption");
- put("Alg.Alias.Signature.1.2.840.113549.2.5with1.2.840.113549.1.1.1", "MD5WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD160WithRSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD160withRSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD128WithRSA", "RIPEMD128WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD128withRSA", "RIPEMD128WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD256WithRSA", "RIPEMD256WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD256withRSA", "RIPEMD256WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD-160/RSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.RMD160withRSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.RMD160/RSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.1.3.36.3.3.1.2", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.1.3.36.3.3.1.3", "RIPEMD128WithRSAEncryption");
-- put("Alg.Alias.Signature.1.3.36.3.3.1.4", "RIPEMD256WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.RIPEMD160WithRSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD160withRSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD128WithRSA", "RIPEMD128WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD128withRSA", "RIPEMD128WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD256WithRSA", "RIPEMD256WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD256withRSA", "RIPEMD256WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD-160/RSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RMD160withRSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RMD160/RSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.1.3.36.3.3.1.2", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.1.3.36.3.3.1.3", "RIPEMD128WithRSAEncryption");
-+ // put("Alg.Alias.Signature.1.3.36.3.3.1.4", "RIPEMD256WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WithRSAEncryption");
-
-- put("Alg.Alias.Signature.MD2WITHRSAENCRYPTION", "MD2WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.MD2WITHRSAENCRYPTION", "MD2WithRSAEncryption");
-+ // END android-removed
- put("Alg.Alias.Signature.MD5WITHRSAENCRYPTION", "MD5WithRSAEncryption");
- put("Alg.Alias.Signature.SHA1WITHRSAENCRYPTION", "SHA1WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD160WITHRSAENCRYPTION", "RIPEMD160WithRSAEncryption");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.RIPEMD160WITHRSAENCRYPTION", "RIPEMD160WithRSAEncryption");
-+ // END android-removed
-
- put("Alg.Alias.Signature.MD5WITHRSA", "MD5WithRSAEncryption");
- put("Alg.Alias.Signature.SHA1WITHRSA", "SHA1WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.RMD160WITHRSA", "RIPEMD160WithRSAEncryption");
-- put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
--
-- addSignatureAlgorithm("SHA224", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
-- addSignatureAlgorithm("SHA256", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
-- addSignatureAlgorithm("SHA384", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
-- addSignatureAlgorithm("SHA512", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
--
-- put("Alg.Alias.Signature.SHA/DSA", "DSA");
-- put("Alg.Alias.Signature.SHA1withDSA", "DSA");
-- put("Alg.Alias.Signature.SHA1WITHDSA", "DSA");
-- put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "DSA");
-- put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "DSA");
-- put("Alg.Alias.Signature.DSAwithSHA1", "DSA");
-- put("Alg.Alias.Signature.DSAWITHSHA1", "DSA");
-- put("Alg.Alias.Signature.SHA1WithDSA", "DSA");
-- put("Alg.Alias.Signature.DSAWithSHA1", "DSA");
-- put("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA");
-- put("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2");
-- put("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2");
-- put("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2");
--
-- put("Signature.ECGOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$ecgost3410");
-- put("Alg.Alias.Signature.ECGOST-3410", "ECGOST3410");
-- put("Alg.Alias.Signature.GOST-3410-2001", "ECGOST3410");
-- put("Alg.Alias.Signature.GOST3411withECGOST3410", "ECGOST3410");
-- put("Alg.Alias.Signature.GOST3411WITHECGOST3410", "ECGOST3410");
-- put("Alg.Alias.Signature.GOST3411WithECGOST3410", "ECGOST3410");
-- put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "ECGOST3410");
--
-- put("Signature.GOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$gost3410");
-- put("Alg.Alias.Signature.GOST-3410", "GOST3410");
-- put("Alg.Alias.Signature.GOST-3410-94", "GOST3410");
-- put("Alg.Alias.Signature.GOST3411withGOST3410", "GOST3410");
-- put("Alg.Alias.Signature.GOST3411WITHGOST3410", "GOST3410");
-- put("Alg.Alias.Signature.GOST3411WithGOST3410", "GOST3410");
-- put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3410");
-- }
--
-- private void addSignatureAlgorithm(
-- String digest,
-- String algorithm,
-- String className,
-- DERObjectIdentifier oid)
-- {
-- String mainName = digest + "WITH" + algorithm;
-- String jdk11Variation1 = digest + "with" + algorithm;
-- String jdk11Variation2 = digest + "With" + algorithm;
-- String alias = digest + "/" + algorithm;
--
-- put("Signature." + mainName, className);
-- put("Alg.Alias.Signature." + jdk11Variation1, mainName);
-- put("Alg.Alias.Signature." + jdk11Variation2, mainName);
-- put("Alg.Alias.Signature." + alias, mainName);
-- put("Alg.Alias.Signature." + oid, mainName);
-- put("Alg.Alias.Signature.OID." + oid, mainName);
-- }
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RMD160WITHRSA", "RIPEMD160WithRSAEncryption");
-+ // put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
-+ // END android-removed
-+
-+ // BEGIN android-removed
-+ // addSignatureAlgorithm("SHA224", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
-+ // addSignatureAlgorithm("SHA256", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
-+ // addSignatureAlgorithm("SHA384", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
-+ // addSignatureAlgorithm("SHA512", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
-+ // END android-removed
-+
-+ // BEGIN android-changed
-+ put("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA");
-+ put("Alg.Alias.Signature.DSA", "SHA1withDSA");
-+ put("Alg.Alias.Signature.SHA1WITHDSA", "SHA1withDSA");
-+ put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "SHA1withDSA");
-+ put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "SHA1withDSA");
-+ put("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA");
-+ put("Alg.Alias.Signature.DSAWITHSHA1", "SHA1withDSA");
-+ put("Alg.Alias.Signature.SHA1WithDSA", "SHA1withDSA");
-+ put("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA");
-+ put("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA1withDSA");
-+ // END android-changed
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2");
-+ // put("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2");
-+ // put("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2");
-+ //
-+ // put("Signature.ECGOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$ecgost3410");
-+ // put("Alg.Alias.Signature.ECGOST-3410", "ECGOST3410");
-+ // put("Alg.Alias.Signature.GOST-3410-2001", "ECGOST3410");
-+ // put("Alg.Alias.Signature.GOST3411withECGOST3410", "ECGOST3410");
-+ // put("Alg.Alias.Signature.GOST3411WITHECGOST3410", "ECGOST3410");
-+ // put("Alg.Alias.Signature.GOST3411WithECGOST3410", "ECGOST3410");
-+ // put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "ECGOST3410");
-+ //
-+ // put("Signature.GOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$gost3410");
-+ // put("Alg.Alias.Signature.GOST-3410", "GOST3410");
-+ // put("Alg.Alias.Signature.GOST-3410-94", "GOST3410");
-+ // put("Alg.Alias.Signature.GOST3411withGOST3410", "GOST3410");
-+ // put("Alg.Alias.Signature.GOST3411WITHGOST3410", "GOST3410");
-+ // put("Alg.Alias.Signature.GOST3411WithGOST3410", "GOST3410");
-+ // put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3410");
-+ // END android-removed
-+ }
-+
-+ // BEGIN android-removed
-+ // private void addSignatureAlgorithm(
-+ // String digest,
-+ // String algorithm,
-+ // String className,
-+ // DERObjectIdentifier oid)
-+ // {
-+ // String mainName = digest + "WITH" + algorithm;
-+ // String jdk11Variation1 = digest + "with" + algorithm;
-+ // String jdk11Variation2 = digest + "With" + algorithm;
-+ // String alias = digest + "/" + algorithm;
-+ //
-+ // put("Signature." + mainName, className);
-+ // put("Alg.Alias.Signature." + jdk11Variation1, mainName);
-+ // put("Alg.Alias.Signature." + jdk11Variation2, mainName);
-+ // put("Alg.Alias.Signature." + alias, mainName);
-+ // put("Alg.Alias.Signature." + oid, mainName);
-+ // put("Alg.Alias.Signature.OID." + oid, mainName);
-+ // }
-+ // END android-removed
-
- public void setParameter(String parameterName, Object parameter)
- {
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertBlacklist.java bcprov-jdk16-146/org/bouncycastle/jce/provider/CertBlacklist.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertBlacklist.java 1970-01-01 00:00:00.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/CertBlacklist.java 2012-07-27 18:48:00.031478939 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertBlacklist.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertBlacklist.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertBlacklist.java 1970-01-01 00:00:00.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertBlacklist.java 2012-09-11 00:12:44.000000000 +0000
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
@@ -2624,20 +6666,12 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertBlacklist.jav
+ }
+
+}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java bcprov-jdk16-146/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2012-07-27 18:48:00.031478939 +0000
-@@ -24,6 +24,7 @@
- import java.security.spec.DSAPublicKeySpec;
- import java.text.ParseException;
- import java.util.ArrayList;
-+import java.util.Arrays;
- import java.util.Collection;
- import java.util.Date;
- import java.util.Enumeration;
-@@ -59,13 +60,17 @@
- import org.bouncycastle.asn1.x509.PolicyInformation;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2012-09-11 00:12:44.000000000 +0000
+@@ -61,13 +61,17 @@
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
+ import org.bouncycastle.asn1.x509.X509Extension;
import org.bouncycastle.asn1.x509.X509Extensions;
-import org.bouncycastle.jce.X509LDAPCertStoreParameters;
+// BEGIN android-removed
@@ -2655,18 +6689,18 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidator
import org.bouncycastle.x509.X509AttributeCertificate;
import org.bouncycastle.x509.X509CRLStoreSelector;
import org.bouncycastle.x509.X509CertStoreSelector;
-@@ -250,7 +255,9 @@
+@@ -247,7 +251,9 @@
{
// look for URI
- List list = (List) it.next();
+ List list = (List)it.next();
- if (list.get(0).equals(new Integer(GeneralName.uniformResourceIdentifier)))
+ // BEGIN android-changed
+ if (list.get(0).equals(Integer.valueOf(GeneralName.uniformResourceIdentifier)))
+ // END android-changed
{
// found
- String temp = (String) list.get(1);
-@@ -660,38 +667,40 @@
+ String temp = (String)list.get(1);
+@@ -655,38 +661,40 @@
{
try
{
@@ -2739,13 +6773,13 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidator
}
catch (Exception e)
{
-@@ -758,35 +767,37 @@
+@@ -751,33 +759,35 @@
return certs;
}
- protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect,
- List certStores)
-- throws AnnotatedException
+- throws AnnotatedException
- {
- Set certs = new HashSet();
- Iterator iter = certStores.iterator();
@@ -2763,9 +6797,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidator
- }
- catch (StoreException e)
- {
-- throw
--
-- new AnnotatedException(
+- throw new AnnotatedException(
- "Problem while picking certificates from X.509 store.", e);
- }
- }
@@ -2775,7 +6807,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidator
+ // BEGIN android-removed
+ // protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect,
+ // List certStores)
-+ // throws AnnotatedException
++ // throws AnnotatedException
+ // {
+ // Set certs = new HashSet();
+ // Iterator iter = certStores.iterator();
@@ -2793,9 +6825,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidator
+ // }
+ // catch (StoreException e)
+ // {
-+ // throw
-+ //
-+ // new AnnotatedException(
++ // throw new AnnotatedException(
+ // "Problem while picking certificates from X.509 store.", e);
+ // }
+ // }
@@ -2806,10 +6836,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidator
protected static void addAdditionalStoresFromCRLDistributionPoint(
CRLDistPoint crldp, ExtendedPKIXParameters pkixParams)
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEBlockCipher.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEBlockCipher.java 2012-07-27 18:48:00.031478939 +0000
-@@ -17,8 +17,10 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEBlockCipher.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEBlockCipher.java 2012-09-11 00:12:44.000000000 +0000
+@@ -18,8 +18,10 @@
import javax.crypto.ShortBufferException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEParameterSpec;
@@ -2823,9 +6853,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
import org.bouncycastle.crypto.BlockCipher;
import org.bouncycastle.crypto.BufferedBlockCipher;
@@ -28,7 +30,9 @@
+ import org.bouncycastle.crypto.InvalidCipherTextException;
import org.bouncycastle.crypto.engines.AESFastEngine;
import org.bouncycastle.crypto.engines.DESEngine;
- import org.bouncycastle.crypto.engines.DESedeEngine;
-import org.bouncycastle.crypto.engines.GOST28147Engine;
+// BEGIN android-removed
+// import org.bouncycastle.crypto.engines.GOST28147Engine;
@@ -2833,7 +6863,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
import org.bouncycastle.crypto.engines.RC2Engine;
import org.bouncycastle.crypto.engines.TwofishEngine;
import org.bouncycastle.crypto.modes.AEADBlockCipher;
-@@ -36,12 +40,16 @@
+@@ -36,12 +40,18 @@
import org.bouncycastle.crypto.modes.CCMBlockCipher;
import org.bouncycastle.crypto.modes.CFBBlockCipher;
import org.bouncycastle.crypto.modes.CTSBlockCipher;
@@ -2842,7 +6872,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
+// import org.bouncycastle.crypto.modes.EAXBlockCipher;
+// END android-removed
import org.bouncycastle.crypto.modes.GCMBlockCipher;
- import org.bouncycastle.crypto.modes.GOFBBlockCipher;
+-import org.bouncycastle.crypto.modes.GOFBBlockCipher;
++// BEGIN android-removed
++// import org.bouncycastle.crypto.modes.GOFBBlockCipher;
++// END android-removed
import org.bouncycastle.crypto.modes.OFBBlockCipher;
-import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher;
-import org.bouncycastle.crypto.modes.PGPCFBBlockCipher;
@@ -2853,24 +6886,28 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
import org.bouncycastle.crypto.modes.SICBlockCipher;
import org.bouncycastle.crypto.paddings.BlockCipherPadding;
import org.bouncycastle.crypto.paddings.ISO10126d2Padding;
-@@ -53,10 +61,12 @@
+@@ -53,12 +63,16 @@
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
import org.bouncycastle.crypto.params.ParametersWithRandom;
-import org.bouncycastle.crypto.params.ParametersWithSBox;
-import org.bouncycastle.crypto.params.RC2Parameters;
-import org.bouncycastle.crypto.params.RC5Parameters;
--import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
+// BEGIN android-removed
+// import org.bouncycastle.crypto.params.ParametersWithSBox;
+// import org.bouncycastle.crypto.params.RC2Parameters;
+// import org.bouncycastle.crypto.params.RC5Parameters;
++// END android-removed
+ import org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey;
+ import org.bouncycastle.jcajce.provider.symmetric.util.PBE;
+-import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
++// BEGIN android-removed
+// import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
+// END android-removed
+ import org.bouncycastle.jce.spec.RepeatedSecretKeySpec;
import org.bouncycastle.util.Strings;
- public class JCEBlockCipher extends WrapCipherSpi
-@@ -67,11 +77,15 @@
+@@ -71,11 +85,15 @@
//
private Class[] availableSpecs =
{
@@ -2889,7 +6926,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
};
private BlockCipher baseEngine;
-@@ -226,20 +240,22 @@
+@@ -232,20 +250,22 @@
new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
}
}
@@ -2926,7 +6963,28 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
else if (modeName.startsWith("SIC"))
{
ivLength = baseEngine.getBlockSize();
-@@ -272,11 +288,13 @@
+@@ -262,12 +282,14 @@
+ cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
+ new SICBlockCipher(baseEngine)));
+ }
+- else if (modeName.startsWith("GOFB"))
+- {
+- ivLength = baseEngine.getBlockSize();
+- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
+- new GOFBBlockCipher(baseEngine)));
+- }
++ // BEGIN android-removed
++ // else if (modeName.startsWith("GOFB"))
++ // {
++ // ivLength = baseEngine.getBlockSize();
++ // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher(
++ // new GOFBBlockCipher(baseEngine)));
++ // }
++ // END android-removed
+ else if (modeName.startsWith("CTS"))
+ {
+ ivLength = baseEngine.getBlockSize();
+@@ -278,11 +300,13 @@
ivLength = baseEngine.getBlockSize();
cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine));
}
@@ -2945,7 +7003,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
else if (modeName.startsWith("GCM"))
{
ivLength = baseEngine.getBlockSize();
-@@ -365,13 +383,15 @@
+@@ -371,13 +395,15 @@
throw new InvalidKeyException("Key for algorithm " + key.getAlgorithm() + " not suitable for symmetric enryption.");
}
@@ -2968,7 +7026,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
//
// a note on iv's - if ivLength is zero the IV gets ignored (we don't use it).
-@@ -437,63 +457,65 @@
+@@ -451,63 +477,65 @@
param = new KeyParameter(key.getEncoded());
}
}
@@ -3091,7 +7149,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
else
{
throw new InvalidAlgorithmParameterException("unknown parameter type.");
-@@ -697,10 +719,21 @@
+@@ -711,10 +739,21 @@
int inputLen,
byte[] output,
int outputOffset)
@@ -3114,7 +7172,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
if (inputLen != 0)
{
len = cipher.processBytes(input, inputOffset, inputLen, output, outputOffset);
-@@ -742,62 +775,64 @@
+@@ -756,62 +795,64 @@
}
}
@@ -3235,150 +7293,11 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.ja
/**
* PBEWithMD5AndDES
-@@ -822,7 +857,7 @@
- super(new CBCBlockCipher(new RC2Engine()));
- }
- }
--
-+
- /**
- * PBEWithSHA1AndDES
- */
-@@ -870,7 +905,7 @@
- super(new CBCBlockCipher(new DESedeEngine()));
- }
- }
--
-+
- /**
- * PBEWithSHAAnd128BitRC2-CBC
- */
-@@ -894,7 +929,7 @@
- super(new CBCBlockCipher(new RC2Engine()));
- }
- }
--
-+
- /**
- * PBEWithSHAAndTwofish-CBC
- */
-@@ -906,7 +941,7 @@
- super(new CBCBlockCipher(new TwofishEngine()));
- }
- }
--
-+
- /**
- * PBEWithAES-CBC
- */
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java 2012-07-27 18:48:00.031478939 +0000
-@@ -36,10 +36,12 @@
-
- static
- {
-- Integer i64 = new Integer(64);
-- Integer i192 = new Integer(192);
-- Integer i128 = new Integer(128);
-- Integer i256 = new Integer(256);
-+ // BEGIN android-changed
-+ Integer i64 = Integer.valueOf(64);
-+ Integer i192 = Integer.valueOf(192);
-+ Integer i128 = Integer.valueOf(128);
-+ Integer i256 = Integer.valueOf(256);
-+ // END android-changed
-
- algorithms.put("DES", i64);
- algorithms.put("DESEDE", i192);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDigestUtil.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDigestUtil.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDigestUtil.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDigestUtil.java 2012-07-27 18:48:00.031478939 +0000
-@@ -12,7 +12,9 @@
- import org.bouncycastle.crypto.Digest;
- import org.bouncycastle.crypto.digests.MD5Digest;
- import org.bouncycastle.crypto.digests.SHA1Digest;
--import org.bouncycastle.crypto.digests.SHA224Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.SHA224Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA256Digest;
- import org.bouncycastle.crypto.digests.SHA384Digest;
- import org.bouncycastle.crypto.digests.SHA512Digest;
-@@ -22,7 +24,9 @@
- {
- private static Set md5 = new HashSet();
- private static Set sha1 = new HashSet();
-- private static Set sha224 = new HashSet();
-+ // BEGIN android-removed
-+ // private static Set sha224 = new HashSet();
-+ // END android-removed
- private static Set sha256 = new HashSet();
- private static Set sha384 = new HashSet();
- private static Set sha512 = new HashSet();
-@@ -38,9 +42,11 @@
- sha1.add("SHA-1");
- sha1.add(OIWObjectIdentifiers.idSHA1.getId());
-
-- sha224.add("SHA224");
-- sha224.add("SHA-224");
-- sha224.add(NISTObjectIdentifiers.id_sha224.getId());
-+ // BEGIN android-removed
-+ // sha224.add("SHA224");
-+ // sha224.add("SHA-224");
-+ // sha224.add(NISTObjectIdentifiers.id_sha224.getId());
-+ // END android-removed
-
- sha256.add("SHA256");
- sha256.add("SHA-256");
-@@ -61,9 +67,11 @@
- oids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
- oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1);
-
-- oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
-- oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
-- oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
-+ // BEGIN android-removed
-+ // oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
-+ // oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
-+ // oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
-+ // END android-removed
-
- oids.put("SHA256", NISTObjectIdentifiers.id_sha256);
- oids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
-@@ -91,10 +99,12 @@
- {
- return new MD5Digest();
- }
-- if (sha224.contains(digestName))
-- {
-- return new SHA224Digest();
-- }
-+ // BEGIN android-removed
-+ // if (sha224.contains(digestName))
-+ // {
-+ // return new SHA224Digest();
-+ // }
-+ // END android-removed
- if (sha256.contains(digestName))
- {
- return new SHA256Digest();
-@@ -116,7 +126,9 @@
- String digest2)
- {
- return (sha1.contains(digest1) && sha1.contains(digest2))
-- || (sha224.contains(digest1) && sha224.contains(digest2))
-+ // BEGIN android-removed
-+ // || (sha224.contains(digest1) && sha224.contains(digest2))
-+ // END android-removed
- || (sha256.contains(digest1) && sha256.contains(digest2))
- || (sha384.contains(digest1) && sha384.contains(digest2))
- || (sha512.contains(digest1) && sha512.contains(digest2))
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPrivateKey.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2012-07-27 18:48:00.031478939 +0000
-@@ -20,7 +20,9 @@
- import org.bouncycastle.asn1.DERObject;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPrivateKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -21,7 +21,9 @@
+ import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
@@ -3388,8 +7307,8 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.j
import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
import org.bouncycastle.asn1.sec.ECPrivateKeyStructure;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
-@@ -199,21 +201,23 @@
- DERObjectIdentifier oid = (DERObjectIdentifier)params.getParameters();
+@@ -203,21 +205,23 @@
+ ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters());
X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid);
- if (ecP == null) // GOST Curve
@@ -3427,30 +7346,30 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.j
{
EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed());
-@@ -324,11 +328,13 @@
- keyStructure = new ECPrivateKeyStructure(this.getS(), params);
- }
+@@ -331,11 +335,13 @@
-- if (algorithm.equals("ECGOST3410"))
-- {
-- info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), keyStructure.getDERObject());
-- }
-- else
-+ // BEGIN android-removed
-+ // if (algorithm.equals("ECGOST3410"))
-+ // {
-+ // info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), keyStructure.getDERObject());
-+ // }
-+ // else
-+ // END android-removed
+ try
{
+- if (algorithm.equals("ECGOST3410"))
+- {
+- info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive());
+- }
+- else
++ // BEGIN android-removed
++ // if (algorithm.equals("ECGOST3410"))
++ // {
++ // info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive());
++ // }
++ // else
++ // END android-removed
+ {
- info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.getDERObject()), keyStructure.getDERObject());
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPublicKey.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPublicKey.java 2012-07-27 18:48:00.031478939 +0000
-@@ -20,8 +20,10 @@
- import org.bouncycastle.asn1.DERObjectIdentifier;
+ info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.toASN1Primitive()), keyStructure.toASN1Primitive());
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPublicKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPublicKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -19,8 +19,10 @@
+ import org.bouncycastle.asn1.DERNull;
import org.bouncycastle.asn1.DEROctetString;
import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
@@ -3462,17 +7381,15 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.ja
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x9.X962Parameters;
-@@ -31,11 +33,15 @@
- import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
- import org.bouncycastle.crypto.params.ECDomainParameters;
- import org.bouncycastle.crypto.params.ECPublicKeyParameters;
+@@ -33,9 +35,13 @@
+ import org.bouncycastle.jcajce.provider.asymmetric.ec.EC5Util;
+ import org.bouncycastle.jcajce.provider.asymmetric.ec.ECUtil;
+ import org.bouncycastle.jcajce.provider.asymmetric.util.KeyUtil;
-import org.bouncycastle.jce.ECGOST3410NamedCurveTable;
+// BEGIN android-removed
+// import org.bouncycastle.jce.ECGOST3410NamedCurveTable;
+// END android-removed
import org.bouncycastle.jce.interfaces.ECPointEncoder;
- import org.bouncycastle.jce.provider.asymmetric.ec.EC5Util;
- import org.bouncycastle.jce.provider.asymmetric.ec.ECUtil;
-import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
+// BEGIN android-removed
+// import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
@@ -3514,7 +7431,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.ja
-
- try
- {
-- key = (ASN1OctetString) ASN1Object.fromByteArray(bits.getBytes());
+- key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes());
- }
- catch (IOException ex)
- {
@@ -3563,7 +7480,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.ja
+ //
+ // try
+ // {
-+ // key = (ASN1OctetString) ASN1Object.fromByteArray(bits.getBytes());
++ // key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes());
+ // }
+ // catch (IOException ex)
+ // {
@@ -3605,7 +7522,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.ja
+ // else
+ // END android-removed
{
- X962Parameters params = new X962Parameters((DERObject)info.getAlgorithmId().getParameters());
+ X962Parameters params = new X962Parameters((ASN1Primitive)info.getAlgorithmId().getParameters());
ECCurve curve;
@@ -315,45 +327,47 @@
ASN1Encodable params;
@@ -3647,7 +7564,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.ja
- extractBytes(encKey, 0, bX);
- extractBytes(encKey, 32, bY);
-
-- info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), new DEROctetString(encKey));
+- info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params), new DEROctetString(encKey));
- }
- else
+ // BEGIN android-removed
@@ -3687,281 +7604,47 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.ja
+ // extractBytes(encKey, 0, bX);
+ // extractBytes(encKey, 32, bY);
+ //
-+ // info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), new DEROctetString(encKey));
++ // info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params), new DEROctetString(encKey));
+ // }
+ // else
+ // END android-removed
{
if (ecSpec instanceof ECNamedCurveSpec)
{
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEKeyGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEKeyGenerator.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEKeyGenerator.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEKeyGenerator.java 2012-07-27 18:48:00.031478939 +0000
-@@ -57,6 +57,11 @@
- {
- try
- {
-+ // BEGIN android-added
-+ if (random == null) {
-+ random = new SecureRandom();
-+ }
-+ // END android-added
- engine.init(new KeyGenerationParameters(random, keySize));
- uninitialised = false;
- }
-@@ -93,56 +98,60 @@
- }
- }
-
-- /**
-- * RC2
-- */
-- public static class RC2
-- extends JCEKeyGenerator
-- {
-- public RC2()
-- {
-- super("RC2", 128, new CipherKeyGenerator());
-- }
-- }
--
-- /**
-- * GOST28147
-- */
-- public static class GOST28147
-- extends JCEKeyGenerator
-- {
-- public GOST28147()
-- {
-- super("GOST28147", 256, new CipherKeyGenerator());
-- }
-- }
-+ // BEGIN android-removed
-+ // /**
-+ // * RC2
-+ // */
-+ // public static class RC2
-+ // extends JCEKeyGenerator
-+ // {
-+ // public RC2()
-+ // {
-+ // super("RC2", 128, new CipherKeyGenerator());
-+ // }
-+ // }
-+ //
-+ // /**
-+ // * GOST28147
-+ // */
-+ // public static class GOST28147
-+ // extends JCEKeyGenerator
-+ // {
-+ // public GOST28147()
-+ // {
-+ // super("GOST28147", 256, new CipherKeyGenerator());
-+ // }
-+ // }
-+ // END android-removed
-
- // HMAC Related secret keys..
-
-- /**
-- * MD2HMAC
-- */
-- public static class MD2HMAC
-- extends JCEKeyGenerator
-- {
-- public MD2HMAC()
-- {
-- super("HMACMD2", 128, new CipherKeyGenerator());
-- }
-- }
--
--
-- /**
-- * MD4HMAC
-- */
-- public static class MD4HMAC
-- extends JCEKeyGenerator
-- {
-- public MD4HMAC()
-- {
-- super("HMACMD4", 128, new CipherKeyGenerator());
-- }
-- }
-+ // BEGIN android-removed
-+ // /**
-+ // * MD2HMAC
-+ // */
-+ // public static class MD2HMAC
-+ // extends JCEKeyGenerator
-+ // {
-+ // public MD2HMAC()
-+ // {
-+ // super("HMACMD2", 128, new CipherKeyGenerator());
-+ // }
-+ // }
-+ //
-+ //
-+ // /**
-+ // * MD4HMAC
-+ // */
-+ // public static class MD4HMAC
-+ // extends JCEKeyGenerator
-+ // {
-+ // public MD4HMAC()
-+ // {
-+ // super("HMACMD4", 128, new CipherKeyGenerator());
-+ // }
-+ // }
-+ // END android-removed
-
- /**
- * MD5HMAC
-@@ -157,29 +166,29 @@
- }
-
-
-- /**
-- * RIPE128HMAC
-- */
-- public static class RIPEMD128HMAC
-- extends JCEKeyGenerator
-- {
-- public RIPEMD128HMAC()
-- {
-- super("HMACRIPEMD128", 128, new CipherKeyGenerator());
-- }
-- }
--
-- /**
-- * RIPE160HMAC
-- */
-- public static class RIPEMD160HMAC
-- extends JCEKeyGenerator
-- {
-- public RIPEMD160HMAC()
-- {
-- super("HMACRIPEMD160", 160, new CipherKeyGenerator());
-- }
-- }
-+ // /**
-+ // * RIPE128HMAC
-+ // */
-+ // public static class RIPEMD128HMAC
-+ // extends JCEKeyGenerator
-+ // {
-+ // public RIPEMD128HMAC()
-+ // {
-+ // super("HMACRIPEMD128", 128, new CipherKeyGenerator());
-+ // }
-+ // }
-+
-+ // /**
-+ // * RIPE160HMAC
-+ // */
-+ // public static class RIPEMD160HMAC
-+ // extends JCEKeyGenerator
-+ // {
-+ // public RIPEMD160HMAC()
-+ // {
-+ // super("HMACRIPEMD160", 160, new CipherKeyGenerator());
-+ // }
-+ // }
-
-
- /**
-@@ -194,17 +203,19 @@
- }
- }
-
-- /**
-- * HMACSHA224
-- */
-- public static class HMACSHA224
-- extends JCEKeyGenerator
-- {
-- public HMACSHA224()
-- {
-- super("HMACSHA224", 224, new CipherKeyGenerator());
-- }
-- }
-+ // BEGIN android-removed
-+ // /**
-+ // * HMACSHA224
-+ // */
-+ // public static class HMACSHA224
-+ // extends JCEKeyGenerator
-+ // {
-+ // public HMACSHA224()
-+ // {
-+ // super("HMACSHA224", 224, new CipherKeyGenerator());
-+ // }
-+ // }
-+ // END android-removed
-
- /**
- * HMACSHA256
-@@ -242,15 +253,17 @@
- }
- }
-
-- /**
-- * HMACTIGER
-- */
-- public static class HMACTIGER
-- extends JCEKeyGenerator
-- {
-- public HMACTIGER()
-- {
-- super("HMACTIGER", 192, new CipherKeyGenerator());
-- }
-- }
-+ // BEGIN android-removed
-+ // /**
-+ // * HMACTIGER
-+ // */
-+ // public static class HMACTIGER
-+ // extends JCEKeyGenerator
-+ // {
-+ // public HMACTIGER()
-+ // {
-+ // super("HMACTIGER", 192, new CipherKeyGenerator());
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEMac.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEMac.java 2012-07-27 18:48:00.031478939 +0000
-@@ -11,25 +11,39 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEMac.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEMac.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEMac.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEMac.java 2012-09-11 00:12:44.000000000 +0000
+@@ -11,24 +11,35 @@
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.Mac;
-import org.bouncycastle.crypto.digests.MD2Digest;
-import org.bouncycastle.crypto.digests.MD4Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.MD2Digest;
-+// import org.bouncycastle.crypto.digests.MD4Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.MD5Digest;
+-import org.bouncycastle.crypto.digests.MD5Digest;
-import org.bouncycastle.crypto.digests.RIPEMD128Digest;
-import org.bouncycastle.crypto.digests.RIPEMD160Digest;
+-import org.bouncycastle.crypto.digests.SHA1Digest;
+-import org.bouncycastle.crypto.digests.SHA224Digest;
+-import org.bouncycastle.crypto.digests.SHA256Digest;
+-import org.bouncycastle.crypto.digests.SHA384Digest;
+-import org.bouncycastle.crypto.digests.SHA512Digest;
+-import org.bouncycastle.crypto.digests.TigerDigest;
+// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.MD2Digest;
++// import org.bouncycastle.crypto.digests.MD4Digest;
++// import org.bouncycastle.crypto.digests.MD5Digest;
+// import org.bouncycastle.crypto.digests.RIPEMD128Digest;
+// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA1Digest;
--import org.bouncycastle.crypto.digests.SHA224Digest;
-+// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.SHA1Digest;
+// import org.bouncycastle.crypto.digests.SHA224Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA256Digest;
- import org.bouncycastle.crypto.digests.SHA384Digest;
- import org.bouncycastle.crypto.digests.SHA512Digest;
--import org.bouncycastle.crypto.digests.TigerDigest;
-+// BEGIN android-removed
++// import org.bouncycastle.crypto.digests.SHA256Digest;
++// import org.bouncycastle.crypto.digests.SHA384Digest;
++// import org.bouncycastle.crypto.digests.SHA512Digest;
+// import org.bouncycastle.crypto.digests.TigerDigest;
+// END android-removed
++// BEGIN android-added
++import org.bouncycastle.crypto.digests.OpenSSLDigest;
++// END android-added
import org.bouncycastle.crypto.engines.DESEngine;
-import org.bouncycastle.crypto.engines.RC2Engine;
+// BEGIN android-removed
@@ -3969,10 +7652,8 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
+// END android-removed
import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
-import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
--import org.bouncycastle.crypto.macs.GOST28147Mac;
+// BEGIN android-removed
+// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
-+// import org.bouncycastle.crypto.macs.GOST28147Mac;
+// END android-removed
import org.bouncycastle.crypto.macs.HMac;
-import org.bouncycastle.crypto.macs.ISO9797Alg3Mac;
@@ -3984,7 +7665,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
import org.bouncycastle.crypto.params.KeyParameter;
import org.bouncycastle.crypto.params.ParametersWithIV;
-@@ -143,115 +157,117 @@
+@@ -144,109 +155,111 @@
* the classes that extend directly off us.
*/
@@ -4001,29 +7682,30 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
- }
-
- /**
-- * RC2
+- * DES 64 bit MAC
- */
-- public static class RC2
+- public static class DES64
- extends JCEMac
- {
-- public RC2()
+- public DES64()
- {
-- super(new CBCBlockCipherMac(new RC2Engine()));
+- super(new CBCBlockCipherMac(new DESEngine(), 64));
- }
- }
-
- /**
-- * GOST28147
+- * RC2
- */
-- public static class GOST28147
+- public static class RC2
- extends JCEMac
- {
-- public GOST28147()
+- public RC2()
- {
-- super(new GOST28147Mac());
+- super(new CBCBlockCipherMac(new RC2Engine()));
- }
- }
-
+-
-
-
- /**
@@ -4041,14 +7723,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
- /**
- * RC2CFB8
- */
-- public static class RC2CFB8
-- extends JCEMac
-- {
-- public RC2CFB8()
-- {
-- super(new CFBBlockCipherMac(new RC2Engine()));
-- }
-- }
+-
-
- /**
- * DES9797Alg3with7816-4Padding
@@ -4111,31 +7786,32 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
+ // }
+ //
+ // /**
-+ // * RC2
++ // * DES 64 bit MAC
+ // */
-+ // public static class RC2
++ // public static class DES64
+ // extends JCEMac
+ // {
-+ // public RC2()
++ // public DES64()
+ // {
-+ // super(new CBCBlockCipherMac(new RC2Engine()));
++ // super(new CBCBlockCipherMac(new DESEngine(), 64));
+ // }
+ // }
+ //
+ // /**
-+ // * GOST28147
++ // * RC2
+ // */
-+ // public static class GOST28147
++ // public static class RC2
+ // extends JCEMac
+ // {
-+ // public GOST28147()
++ // public RC2()
+ // {
-+ // super(new GOST28147Mac());
++ // super(new CBCBlockCipherMac(new RC2Engine()));
+ // }
+ // }
+ //
+ //
+ //
++ //
+ // /**
+ // * DES
+ // */
@@ -4151,14 +7827,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
+ // /**
+ // * RC2CFB8
+ // */
-+ // public static class RC2CFB8
-+ // extends JCEMac
-+ // {
-+ // public RC2CFB8()
-+ // {
-+ // super(new CFBBlockCipherMac(new RC2Engine()));
-+ // }
-+ // }
++ //
+ //
+ // /**
+ // * DES9797Alg3with7816-4Padding
@@ -4211,20 +7880,28 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
/**
* MD5 HMac
-@@ -264,7 +280,7 @@
- super(new HMac(new MD5Digest()));
+@@ -256,7 +269,9 @@
+ {
+ public MD5()
+ {
+- super(new HMac(new MD5Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.MD5()));
++ // END android-changed
}
}
--
-+
- /**
- * SHA1 HMac
- */
-@@ -276,18 +292,20 @@
- super(new HMac(new SHA1Digest()));
+
+@@ -268,21 +283,25 @@
+ {
+ public SHA1()
+ {
+- super(new HMac(new SHA1Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA1()));
++ // END android-changed
}
}
--
+
- /**
- * SHA-224 HMac
- */
@@ -4236,7 +7913,6 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
- super(new HMac(new SHA224Digest()));
- }
- }
-+
+ // BEGIN android-removed
+ // /**
+ // * SHA-224 HMac
@@ -4253,20 +7929,28 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
/**
* SHA-256 HMac
-@@ -300,7 +318,7 @@
- super(new HMac(new SHA256Digest()));
+@@ -292,7 +311,9 @@
+ {
+ public SHA256()
+ {
+- super(new HMac(new SHA256Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA256()));
++ // END android-changed
}
}
--
-+
- /**
- * SHA-384 HMac
- */
-@@ -312,15 +330,17 @@
- super(new HMac(new SHA384Digest()));
+
+@@ -304,18 +325,22 @@
+ {
+ public SHA384()
+ {
+- super(new HMac(new SHA384Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA384()));
++ // END android-changed
}
}
--
+
- public static class OldSHA384
- extends JCEMac
- {
@@ -4275,7 +7959,6 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
- super(new OldHMac(new SHA384Digest()));
- }
- }
-+
+ // BEGIN android-removed
+ // public static class OldSHA384
+ // extends JCEMac
@@ -4289,11 +7972,17 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
/**
* SHA-512 HMac
-@@ -333,73 +353,75 @@
- super(new HMac(new SHA512Digest()));
+@@ -325,75 +350,80 @@
+ {
+ public SHA512()
+ {
+- super(new HMac(new SHA512Digest()));
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA512()));
++ // END android-changed
}
}
--
+
- /**
- * SHA-512 HMac
- */
@@ -4382,7 +8071,6 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
- super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160);
- }
- }
--
+ // /**
+ // * RIPEMD160 HMac
+ // */
@@ -4425,15 +8113,20 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
+ // }
+ // }
+ // END android-removed
-+
+
/**
* PBEWithHmacSHA
- */
-@@ -411,16 +433,18 @@
- super(new HMac(new SHA1Digest()), PKCS12, SHA1, 160);
+@@ -403,19 +433,23 @@
+ {
+ public PBEWithSHA()
+ {
+- super(new HMac(new SHA1Digest()), PKCS12, SHA1, 160);
++ // BEGIN android-changed
++ super(new HMac(new OpenSSLDigest.SHA1()), PKCS12, SHA1, 160);
++ // END android-changed
}
}
--
+
- /**
- * PBEWithHmacTiger
- */
@@ -4445,7 +8138,6 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
- super(new HMac(new TigerDigest()), PKCS12, TIGER, 192);
- }
- }
-+
+ // BEGIN android-removed
+ // /**
+ // * PBEWithHmacTiger
@@ -4460,150 +8152,52 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcpro
+ // }
+ // END android-removed
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSACipher.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSACipher.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSACipher.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSACipher.java 2012-07-27 18:48:00.031478939 +0000
-@@ -535,48 +535,50 @@
- }
- }
-
-- static public class PKCS1v1_5Padding
-- extends JCERSACipher
-- {
-- public PKCS1v1_5Padding()
-- {
-- super(new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class PKCS1v1_5Padding_PrivateOnly
-- extends JCERSACipher
-- {
-- public PKCS1v1_5Padding_PrivateOnly()
-- {
-- super(false, true, new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class PKCS1v1_5Padding_PublicOnly
-- extends JCERSACipher
-- {
-- public PKCS1v1_5Padding_PublicOnly()
-- {
-- super(true, false, new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class OAEPPadding
-- extends JCERSACipher
-- {
-- public OAEPPadding()
-- {
-- super(OAEPParameterSpec.DEFAULT);
-- }
-- }
--
-- static public class ISO9796d1Padding
-- extends JCERSACipher
-- {
-- public ISO9796d1Padding()
-- {
-- super(new ISO9796d1Encoding(new RSABlindedEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class PKCS1v1_5Padding
-+ // extends JCERSACipher
-+ // {
-+ // public PKCS1v1_5Padding()
-+ // {
-+ // super(new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class PKCS1v1_5Padding_PrivateOnly
-+ // extends JCERSACipher
-+ // {
-+ // public PKCS1v1_5Padding_PrivateOnly()
-+ // {
-+ // super(false, true, new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class PKCS1v1_5Padding_PublicOnly
-+ // extends JCERSACipher
-+ // {
-+ // public PKCS1v1_5Padding_PublicOnly()
-+ // {
-+ // super(true, false, new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class OAEPPadding
-+ // extends JCERSACipher
-+ // {
-+ // public OAEPPadding()
-+ // {
-+ // super(OAEPParameterSpec.DEFAULT);
-+ // }
-+ // }
-+ //
-+ // static public class ISO9796d1Padding
-+ // extends JCERSACipher
-+ // {
-+ // public ISO9796d1Padding()
-+ // {
-+ // super(new ISO9796d1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 2012-07-27 18:48:00.031478939 +0000
-@@ -125,7 +125,9 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -127,7 +127,9 @@
*/
public byte[] getEncoded()
{
-- PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKeyStructure(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()).getDERObject());
+- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()));
+ // BEGIN android-changed
-+ PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKeyStructure(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()).getDERObject());
++ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()));
+ // END android-changed
-
- return info.getDEREncoded();
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateKey.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 2012-07-27 18:48:00.031478939 +0000
-@@ -77,7 +77,9 @@
+
+ /**
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -78,7 +78,9 @@
public byte[] getEncoded()
{
-- PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKeyStructure(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO).getDERObject());
+- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO));
+ // BEGIN android-changed
-+ PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKeyStructure(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO).getDERObject());
++ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO));
+ // END android-changed
-
- return info.getDEREncoded();
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPublicKey.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPublicKey.java 2012-07-27 18:48:00.031478939 +0000
-@@ -90,7 +90,9 @@
+
+ public boolean equals(Object o)
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPublicKey.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPublicKey.java 2012-09-11 00:12:44.000000000 +0000
+@@ -91,7 +91,9 @@
public byte[] getEncoded()
{
-- SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPublicKeyStructure(getModulus(), getPublicExponent()).getDERObject());
+- return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPublicKeyStructure(getModulus(), getPublicExponent()));
+ // BEGIN android-changed
-+ SubjectPublicKeyInfo info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPublicKeyStructure(getModulus(), getPublicExponent()).getDERObject());
++ return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPublicKeyStructure(getModulus(), getPublicExponent()));
+ // END android-changed
-
- return info.getDEREncoded();
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCESecretKeyFactory.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 2012-07-27 18:48:00.031478939 +0000
-@@ -250,29 +250,31 @@
+
+ public int hashCode()
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCESecretKeyFactory.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 2012-09-11 00:12:44.000000000 +0000
+@@ -252,29 +252,31 @@
}
}
@@ -4658,7 +8252,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFacto
/**
* PBEWithMD5AndDES
-@@ -406,17 +408,19 @@
+@@ -408,17 +410,19 @@
}
}
@@ -4689,7 +8283,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFacto
/**
* PBEWithHmacSHA
-@@ -430,17 +434,19 @@
+@@ -432,17 +436,19 @@
}
}
@@ -4720,7 +8314,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFacto
/**
* PBEWithSHA1And128BitAES-BC
-@@ -549,4 +555,56 @@
+@@ -551,4 +557,56 @@
super("PBEWithMD5And256BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 256, 128);
}
}
@@ -4769,7 +8363,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFacto
+ int ivSize = -1;
+ CipherParameters param = Util.makePBEMacParameters(pbeSpec, scheme, digest, keySize);
+
-+ return new JCEPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, param);
++ return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, param);
+ }
+
+ throw new InvalidKeySpecException("Invalid KeySpec");
@@ -4777,10 +8371,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFacto
+ }
+ // END android-added
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEStreamCipher.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEStreamCipher.java 2012-07-27 18:48:00.041479127 +0000
-@@ -13,20 +13,26 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEStreamCipher.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEStreamCipher.java 2012-09-11 00:12:44.000000000 +0000
+@@ -14,20 +14,26 @@
import javax.crypto.ShortBufferException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEParameterSpec;
@@ -4814,7 +8408,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.j
import org.bouncycastle.crypto.modes.CFBBlockCipher;
import org.bouncycastle.crypto.modes.OFBBlockCipher;
import org.bouncycastle.crypto.params.KeyParameter;
-@@ -40,8 +46,10 @@
+@@ -44,8 +50,10 @@
//
private Class[] availableSpecs =
{
@@ -4827,7 +8421,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.j
IvParameterSpec.class,
PBEParameterSpec.class
};
-@@ -370,125 +378,127 @@
+@@ -376,125 +384,127 @@
* The ciphers that inherit from us.
*/
@@ -5074,1262 +8668,24 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.j
/**
* PBEWithSHAAnd128BitRC4
-@@ -501,7 +511,7 @@
- super(new RC4Engine(), 0);
- }
- }
--
-+
- /**
- * PBEWithSHAAnd40BitRC4
- */
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java 2012-07-27 18:48:00.031478939 +0000
-@@ -11,18 +11,24 @@
- import javax.crypto.spec.DHGenParameterSpec;
- import javax.crypto.spec.DHParameterSpec;
- import javax.crypto.spec.IvParameterSpec;
--import javax.crypto.spec.RC2ParameterSpec;
-+// BEGIN android-removed
-+// import javax.crypto.spec.RC2ParameterSpec;
-+// END android-removed
-
- import org.bouncycastle.crypto.generators.DHParametersGenerator;
- import org.bouncycastle.crypto.generators.DSAParametersGenerator;
--import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
--import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
-+// import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator;
-+// END android-removed
- import org.bouncycastle.crypto.params.DHParameters;
- import org.bouncycastle.crypto.params.DSAParameters;
--import org.bouncycastle.crypto.params.ElGamalParameters;
--import org.bouncycastle.crypto.params.GOST3410Parameters;
--import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
--import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.params.ElGamalParameters;
-+// import org.bouncycastle.crypto.params.GOST3410Parameters;
-+// import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
-+// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
-+// END android-removed
-
- public abstract class JDKAlgorithmParameterGenerator
- extends AlgorithmParameterGeneratorSpi
-@@ -145,196 +151,198 @@
- }
- }
-
-- public static class GOST3410
-- extends JDKAlgorithmParameterGenerator
-- {
-- protected void engineInit(
-- AlgorithmParameterSpec genParamSpec,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for GOST3410 parameter generation.");
-- }
--
-- protected AlgorithmParameters engineGenerateParameters()
-- {
-- GOST3410ParametersGenerator pGen = new GOST3410ParametersGenerator();
--
-- if (random != null)
-- {
-- pGen.init(strength, 2, random);
-- }
-- else
-- {
-- pGen.init(strength, 2, new SecureRandom());
-- }
--
-- GOST3410Parameters p = pGen.generateParameters();
--
-- AlgorithmParameters params;
--
-- try
-- {
-- params = AlgorithmParameters.getInstance("GOST3410", BouncyCastleProvider.PROVIDER_NAME);
-- params.init(new GOST3410ParameterSpec(new GOST3410PublicKeyParameterSetSpec(p.getP(), p.getQ(), p.getA())));
-- }
-- catch (Exception e)
-- {
-- throw new RuntimeException(e.getMessage());
-- }
--
-- return params;
-- }
-- }
--
-- public static class ElGamal
-- extends JDKAlgorithmParameterGenerator
-- {
-- private int l = 0;
--
-- protected void engineInit(
-- AlgorithmParameterSpec genParamSpec,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- if (!(genParamSpec instanceof DHGenParameterSpec))
-- {
-- throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation");
-- }
-- DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec;
--
-- this.strength = spec.getPrimeSize();
-- this.l = spec.getExponentSize();
-- this.random = random;
-- }
--
-- protected AlgorithmParameters engineGenerateParameters()
-- {
-- ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
--
-- if (random != null)
-- {
-- pGen.init(strength, 20, random);
-- }
-- else
-- {
-- pGen.init(strength, 20, new SecureRandom());
-- }
--
-- ElGamalParameters p = pGen.generateParameters();
--
-- AlgorithmParameters params;
--
-- try
-- {
-- params = AlgorithmParameters.getInstance("ElGamal", BouncyCastleProvider.PROVIDER_NAME);
-- params.init(new DHParameterSpec(p.getP(), p.getG(), l));
-- }
-- catch (Exception e)
-- {
-- throw new RuntimeException(e.getMessage());
-- }
--
-- return params;
-- }
-- }
--
-- public static class DES
-- extends JDKAlgorithmParameterGenerator
-- {
-- protected void engineInit(
-- AlgorithmParameterSpec genParamSpec,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
-- }
--
-- protected AlgorithmParameters engineGenerateParameters()
-- {
-- byte[] iv = new byte[8];
--
-- if (random == null)
-- {
-- random = new SecureRandom();
-- }
--
-- random.nextBytes(iv);
--
-- AlgorithmParameters params;
--
-- try
-- {
-- params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
-- params.init(new IvParameterSpec(iv));
-- }
-- catch (Exception e)
-- {
-- throw new RuntimeException(e.getMessage());
-- }
--
-- return params;
-- }
-- }
--
-- public static class RC2
-- extends JDKAlgorithmParameterGenerator
-- {
-- RC2ParameterSpec spec = null;
--
-- protected void engineInit(
-- AlgorithmParameterSpec genParamSpec,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- if (genParamSpec instanceof RC2ParameterSpec)
-- {
-- spec = (RC2ParameterSpec)genParamSpec;
-- return;
-- }
--
-- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
-- }
--
-- protected AlgorithmParameters engineGenerateParameters()
-- {
-- AlgorithmParameters params;
--
-- if (spec == null)
-- {
-- byte[] iv = new byte[8];
--
-- if (random == null)
-- {
-- random = new SecureRandom();
-- }
--
-- random.nextBytes(iv);
--
-- try
-- {
-- params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
-- params.init(new IvParameterSpec(iv));
-- }
-- catch (Exception e)
-- {
-- throw new RuntimeException(e.getMessage());
-- }
-- }
-- else
-- {
-- try
-- {
-- params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
-- params.init(spec);
-- }
-- catch (Exception e)
-- {
-- throw new RuntimeException(e.getMessage());
-- }
-- }
--
-- return params;
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class GOST3410
-+ // extends JDKAlgorithmParameterGenerator
-+ // {
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec genParamSpec,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for GOST3410 parameter generation.");
-+ // }
-+ //
-+ // protected AlgorithmParameters engineGenerateParameters()
-+ // {
-+ // GOST3410ParametersGenerator pGen = new GOST3410ParametersGenerator();
-+ //
-+ // if (random != null)
-+ // {
-+ // pGen.init(strength, 2, random);
-+ // }
-+ // else
-+ // {
-+ // pGen.init(strength, 2, new SecureRandom());
-+ // }
-+ //
-+ // GOST3410Parameters p = pGen.generateParameters();
-+ //
-+ // AlgorithmParameters params;
-+ //
-+ // try
-+ // {
-+ // params = AlgorithmParameters.getInstance("GOST3410", BouncyCastleProvider.PROVIDER_NAME);
-+ // params.init(new GOST3410ParameterSpec(new GOST3410PublicKeyParameterSetSpec(p.getP(), p.getQ(), p.getA())));
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new RuntimeException(e.getMessage());
-+ // }
-+ //
-+ // return params;
-+ // }
-+ // }
-+ //
-+ // public static class ElGamal
-+ // extends JDKAlgorithmParameterGenerator
-+ // {
-+ // private int l = 0;
-+ //
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec genParamSpec,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // if (!(genParamSpec instanceof DHGenParameterSpec))
-+ // {
-+ // throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation");
-+ // }
-+ // DHGenParameterSpec spec = (DHGenParameterSpec)genParamSpec;
-+ //
-+ // this.strength = spec.getPrimeSize();
-+ // this.l = spec.getExponentSize();
-+ // this.random = random;
-+ // }
-+ //
-+ // protected AlgorithmParameters engineGenerateParameters()
-+ // {
-+ // ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
-+ //
-+ // if (random != null)
-+ // {
-+ // pGen.init(strength, 20, random);
-+ // }
-+ // else
-+ // {
-+ // pGen.init(strength, 20, new SecureRandom());
-+ // }
-+ //
-+ // ElGamalParameters p = pGen.generateParameters();
-+ //
-+ // AlgorithmParameters params;
-+ //
-+ // try
-+ // {
-+ // params = AlgorithmParameters.getInstance("ElGamal", BouncyCastleProvider.PROVIDER_NAME);
-+ // params.init(new DHParameterSpec(p.getP(), p.getG(), l));
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new RuntimeException(e.getMessage());
-+ // }
-+ //
-+ // return params;
-+ // }
-+ // }
-+ //
-+ // public static class DES
-+ // extends JDKAlgorithmParameterGenerator
-+ // {
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec genParamSpec,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
-+ // }
-+ //
-+ // protected AlgorithmParameters engineGenerateParameters()
-+ // {
-+ // byte[] iv = new byte[8];
-+ //
-+ // if (random == null)
-+ // {
-+ // random = new SecureRandom();
-+ // }
-+ //
-+ // random.nextBytes(iv);
-+ //
-+ // AlgorithmParameters params;
-+ //
-+ // try
-+ // {
-+ // params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
-+ // params.init(new IvParameterSpec(iv));
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new RuntimeException(e.getMessage());
-+ // }
-+ //
-+ // return params;
-+ // }
-+ // }
-+ //
-+ // public static class RC2
-+ // extends JDKAlgorithmParameterGenerator
-+ // {
-+ // RC2ParameterSpec spec = null;
-+ //
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec genParamSpec,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // if (genParamSpec instanceof RC2ParameterSpec)
-+ // {
-+ // spec = (RC2ParameterSpec)genParamSpec;
-+ // return;
-+ // }
-+ //
-+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
-+ // }
-+ //
-+ // protected AlgorithmParameters engineGenerateParameters()
-+ // {
-+ // AlgorithmParameters params;
-+ //
-+ // if (spec == null)
-+ // {
-+ // byte[] iv = new byte[8];
-+ //
-+ // if (random == null)
-+ // {
-+ // random = new SecureRandom();
-+ // }
-+ //
-+ // random.nextBytes(iv);
-+ //
-+ // try
-+ // {
-+ // params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
-+ // params.init(new IvParameterSpec(iv));
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new RuntimeException(e.getMessage());
-+ // }
-+ // }
-+ // else
-+ // {
-+ // try
-+ // {
-+ // params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
-+ // params.init(spec);
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new RuntimeException(e.getMessage());
-+ // }
-+ // }
-+ //
-+ // return params;
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 2012-07-27 18:48:00.031478939 +0000
-@@ -10,21 +10,27 @@
- import org.bouncycastle.asn1.DERObjectIdentifier;
- import org.bouncycastle.asn1.DEROctetString;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 2012-09-11 00:12:44.000000000 +0000
+@@ -17,7 +17,9 @@
import org.bouncycastle.asn1.DERSequence;
--import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
--import org.bouncycastle.asn1.oiw.ElGamalParameter;
-+// BEGIN android-removed
-+// import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
-+// import org.bouncycastle.asn1.oiw.ElGamalParameter;
-+// END android-removed
- import org.bouncycastle.asn1.pkcs.DHParameter;
- import org.bouncycastle.asn1.pkcs.PKCS12PBEParams;
- import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
--import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
-+// BEGIN android-removed
-+// import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
-+// END android-removed
- import org.bouncycastle.asn1.pkcs.RSAESOAEPparams;
- import org.bouncycastle.asn1.pkcs.RSASSAPSSparams;
import org.bouncycastle.asn1.pkcs.PBKDF2Params;
- import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
- import org.bouncycastle.asn1.x509.DSAParameter;
--import org.bouncycastle.jce.spec.ElGamalParameterSpec;
--import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
--import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
+ import org.bouncycastle.asn1.pkcs.PKCS12PBEParams;
-import org.bouncycastle.jce.spec.IESParameterSpec;
+// BEGIN android-removed
-+// import org.bouncycastle.jce.spec.ElGamalParameterSpec;
-+// import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
-+// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
+// import org.bouncycastle.jce.spec.IESParameterSpec;
+// END android-removed
- import org.bouncycastle.util.Arrays;
- import javax.crypto.spec.DHParameterSpec;
-@@ -32,7 +38,9 @@
- import javax.crypto.spec.OAEPParameterSpec;
- import javax.crypto.spec.PBEParameterSpec;
- import javax.crypto.spec.PSource;
--import javax.crypto.spec.RC2ParameterSpec;
-+// BEGIN android-removed
-+// import javax.crypto.spec.RC2ParameterSpec;
-+// END android-removed
- import java.io.IOException;
- import java.security.AlgorithmParametersSpi;
- import java.security.spec.AlgorithmParameterSpec;
-@@ -68,13 +76,13 @@
- extends JDKAlgorithmParameters
- {
- private byte[] iv;
--
-+
- protected byte[] engineGetEncoded()
- throws IOException
- {
- return engineGetEncoded("ASN.1");
- }
--
-+
- protected byte[] engineGetEncoded(
- String format)
- throws IOException
-@@ -83,15 +91,15 @@
- {
- return new DEROctetString(engineGetEncoded("RAW")).getEncoded();
- }
--
-+
- if (format.equals("RAW"))
- {
- return Arrays.clone(iv);
- }
--
-+
- return null;
- }
--
-+
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
-@@ -100,10 +108,10 @@
- {
- return new IvParameterSpec(iv);
- }
--
-+
- throw new InvalidParameterSpecException("unknown parameter spec passed to IV parameters object.");
- }
--
-+
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
-@@ -112,10 +120,10 @@
- {
- throw new InvalidParameterSpecException("IvParameterSpec required to initialise a IV parameters algorithm parameters object");
- }
--
-+
- this.iv = ((IvParameterSpec)paramSpec).getIV();
- }
--
-+
- protected void engineInit(
- byte[] params)
- throws IOException
-@@ -127,13 +135,13 @@
- && params[0] == 0x04 && params[1] == params.length - 2)
- {
- ASN1OctetString oct = (ASN1OctetString)ASN1Object.fromByteArray(params);
--
-+
- params = oct.getOctets();
- }
--
-+
- this.iv = Arrays.clone(params);
- }
--
-+
- protected void engineInit(
- byte[] params,
- String format)
-@@ -144,204 +152,206 @@
- try
- {
- ASN1OctetString oct = (ASN1OctetString)ASN1Object.fromByteArray(params);
--
-+
- engineInit(oct.getOctets());
- }
- catch (Exception e)
- {
- throw new IOException("Exception decoding: " + e);
- }
--
-+
- return;
- }
--
-+
- if (format.equals("RAW"))
- {
- engineInit(params);
- return;
- }
--
-+
- throw new IOException("Unknown parameters format in IV parameters object");
- }
--
-+
- protected String engineToString()
- {
- return "IV Parameters";
+ public abstract class JDKAlgorithmParameters
+ extends AlgorithmParametersSpi
+@@ -208,109 +210,111 @@
}
}
--
-- public static class RC2AlgorithmParameters
-- extends JDKAlgorithmParameters
-- {
-- private static final short[] table = {
-- 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
-- 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
-- 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
-- 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
-- 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
-- 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
-- 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
-- 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
-- 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
-- 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
-- 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
-- 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
-- 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
-- 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
-- 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
-- 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
-- };
--
-- private static final short[] ekb = {
-- 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
-- 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
-- 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
-- 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
-- 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
-- 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
-- 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
-- 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
-- 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
-- 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
-- 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
-- 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
-- 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
-- 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
-- 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
-- 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
-- };
--
-- private byte[] iv;
-- private int parameterVersion = 58;
--
-- protected byte[] engineGetEncoded()
-- {
-- return Arrays.clone(iv);
-- }
--
-- protected byte[] engineGetEncoded(
-- String format)
-- throws IOException
-- {
-- if (isASN1FormatString(format))
-- {
-- if (parameterVersion == -1)
-- {
-- return new RC2CBCParameter(engineGetEncoded()).getEncoded();
-- }
-- else
-- {
-- return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
-- }
-- }
--
-- if (format.equals("RAW"))
-- {
-- return engineGetEncoded();
-- }
--
-- return null;
-- }
--
-- protected AlgorithmParameterSpec localEngineGetParameterSpec(
-- Class paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (paramSpec == RC2ParameterSpec.class)
-- {
-- if (parameterVersion != -1)
-- {
-- if (parameterVersion < 256)
-- {
-- return new RC2ParameterSpec(ekb[parameterVersion], iv);
-- }
-- else
-- {
-- return new RC2ParameterSpec(parameterVersion, iv);
-- }
-- }
-- }
--
-- if (paramSpec == IvParameterSpec.class)
-- {
-- return new IvParameterSpec(iv);
-- }
--
-- throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
-- }
--
-- protected void engineInit(
-- AlgorithmParameterSpec paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (paramSpec instanceof IvParameterSpec)
-- {
-- this.iv = ((IvParameterSpec)paramSpec).getIV();
-- }
-- else if (paramSpec instanceof RC2ParameterSpec)
-- {
-- int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
-- if (effKeyBits != -1)
-- {
-- if (effKeyBits < 256)
-- {
-- parameterVersion = table[effKeyBits];
-- }
-- else
-- {
-- parameterVersion = effKeyBits;
-- }
-- }
--
-- this.iv = ((RC2ParameterSpec)paramSpec).getIV();
-- }
-- else
-- {
-- throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
-- }
-- }
--
-- protected void engineInit(
-- byte[] params)
-- throws IOException
-- {
-- this.iv = Arrays.clone(params);
-- }
--
-- protected void engineInit(
-- byte[] params,
-- String format)
-- throws IOException
-- {
-- if (isASN1FormatString(format))
-- {
-- RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Object.fromByteArray(params));
--
-- if (p.getRC2ParameterVersion() != null)
-- {
-- parameterVersion = p.getRC2ParameterVersion().intValue();
-- }
--
-- iv = p.getIV();
--
-- return;
-- }
--
-- if (format.equals("RAW"))
-- {
-- engineInit(params);
-- return;
-- }
--
-- throw new IOException("Unknown parameters format in IV parameters object");
-- }
--
-- protected String engineToString()
-- {
-- return "RC2 Parameters";
-- }
-- }
--
-+
-+ // BEGIN android-removed
-+ // public static class RC2AlgorithmParameters
-+ // extends JDKAlgorithmParameters
-+ // {
-+ // private static final short[] table = {
-+ // 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
-+ // 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
-+ // 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
-+ // 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
-+ // 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
-+ // 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
-+ // 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
-+ // 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
-+ // 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
-+ // 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
-+ // 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
-+ // 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
-+ // 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
-+ // 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
-+ // 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
-+ // 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
-+ // };
-+ //
-+ // private static final short[] ekb = {
-+ // 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
-+ // 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
-+ // 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
-+ // 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
-+ // 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
-+ // 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
-+ // 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
-+ // 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
-+ // 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
-+ // 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
-+ // 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
-+ // 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
-+ // 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
-+ // 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
-+ // 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
-+ // 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
-+ // };
-+ //
-+ // private byte[] iv;
-+ // private int parameterVersion = 58;
-+ //
-+ // protected byte[] engineGetEncoded()
-+ // {
-+ // return Arrays.clone(iv);
-+ // }
-+ //
-+ // protected byte[] engineGetEncoded(
-+ // String format)
-+ // throws IOException
-+ // {
-+ // if (isASN1FormatString(format))
-+ // {
-+ // if (parameterVersion == -1)
-+ // {
-+ // return new RC2CBCParameter(engineGetEncoded()).getEncoded();
-+ // }
-+ // else
-+ // {
-+ // return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
-+ // }
-+ // }
-+ //
-+ // if (format.equals("RAW"))
-+ // {
-+ // return engineGetEncoded();
-+ // }
-+ //
-+ // return null;
-+ // }
-+ //
-+ // protected AlgorithmParameterSpec localEngineGetParameterSpec(
-+ // Class paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (paramSpec == RC2ParameterSpec.class)
-+ // {
-+ // if (parameterVersion != -1)
-+ // {
-+ // if (parameterVersion < 256)
-+ // {
-+ // return new RC2ParameterSpec(ekb[parameterVersion], iv);
-+ // }
-+ // else
-+ // {
-+ // return new RC2ParameterSpec(parameterVersion, iv);
-+ // }
-+ // }
-+ // }
-+ //
-+ // if (paramSpec == IvParameterSpec.class)
-+ // {
-+ // return new IvParameterSpec(iv);
-+ // }
-+ //
-+ // throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
-+ // }
-+ //
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (paramSpec instanceof IvParameterSpec)
-+ // {
-+ // this.iv = ((IvParameterSpec)paramSpec).getIV();
-+ // }
-+ // else if (paramSpec instanceof RC2ParameterSpec)
-+ // {
-+ // int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
-+ // if (effKeyBits != -1)
-+ // {
-+ // if (effKeyBits < 256)
-+ // {
-+ // parameterVersion = table[effKeyBits];
-+ // }
-+ // else
-+ // {
-+ // parameterVersion = effKeyBits;
-+ // }
-+ // }
-+ //
-+ // this.iv = ((RC2ParameterSpec)paramSpec).getIV();
-+ // }
-+ // else
-+ // {
-+ // throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
-+ // }
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params)
-+ // throws IOException
-+ // {
-+ // this.iv = Arrays.clone(params);
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params,
-+ // String format)
-+ // throws IOException
-+ // {
-+ // if (isASN1FormatString(format))
-+ // {
-+ // RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Object.fromByteArray(params));
-+ //
-+ // if (p.getRC2ParameterVersion() != null)
-+ // {
-+ // parameterVersion = p.getRC2ParameterVersion().intValue();
-+ // }
-+ //
-+ // iv = p.getIV();
-+ //
-+ // return;
-+ // }
-+ //
-+ // if (format.equals("RAW"))
-+ // {
-+ // engineInit(params);
-+ // return;
-+ // }
-+ //
-+ // throw new IOException("Unknown parameters format in IV parameters object");
-+ // }
-+ //
-+ // protected String engineToString()
-+ // {
-+ // return "RC2 Parameters";
-+ // }
-+ // }
-+ // END android-removed
-+
- public static class PBKDF2
- extends JDKAlgorithmParameters
- {
-@@ -429,7 +439,7 @@
- extends JDKAlgorithmParameters
- {
- PKCS12PBEParams params;
--
-+
- protected byte[] engineGetEncoded()
- {
- try
-@@ -441,7 +451,7 @@
- throw new RuntimeException("Oooops! " + e.toString());
- }
- }
--
-+
- protected byte[] engineGetEncoded(
- String format)
- {
-@@ -449,10 +459,10 @@
- {
- return engineGetEncoded();
- }
--
-+
- return null;
- }
--
-+
- protected AlgorithmParameterSpec localEngineGetParameterSpec(
- Class paramSpec)
- throws InvalidParameterSpecException
-@@ -462,10 +472,10 @@
- return new PBEParameterSpec(params.getIV(),
- params.getIterations().intValue());
- }
--
-+
- throw new InvalidParameterSpecException("unknown parameter spec passed to PKCS12 PBE parameters object.");
- }
--
-+
- protected void engineInit(
- AlgorithmParameterSpec paramSpec)
- throws InvalidParameterSpecException
-@@ -474,20 +484,20 @@
- {
- throw new InvalidParameterSpecException("PBEParameterSpec required to initialise a PKCS12 PBE parameters algorithm parameters object");
- }
--
-+
- PBEParameterSpec pbeSpec = (PBEParameterSpec)paramSpec;
--
-+
- this.params = new PKCS12PBEParams(pbeSpec.getSalt(),
- pbeSpec.getIterationCount());
- }
--
-+
- protected void engineInit(
- byte[] params)
- throws IOException
- {
- this.params = PKCS12PBEParams.getInstance(ASN1Object.fromByteArray(params));
- }
--
-+
- protected void engineInit(
- byte[] params,
- String format)
-@@ -498,10 +508,10 @@
- engineInit(params);
- return;
- }
--
-+
- throw new IOException("Unknown parameters format in PKCS12 PBE parameters object");
- }
--
-+
- protected String engineToString()
- {
- return "PKCS12 PBE Parameters";
-@@ -725,334 +735,336 @@
- }
- }
-
-- public static class GOST3410
-- extends JDKAlgorithmParameters
-- {
-- GOST3410ParameterSpec currentSpec;
--
-- /**
-- * Return the X.509 ASN.1 structure GOST3410Parameter.
-- * <p>
-- * <pre>
-- * GOST3410Parameter ::= SEQUENCE {
-- * prime INTEGER, -- p
-- * subprime INTEGER, -- q
-- * base INTEGER, -- a}
-- * </pre>
-- */
-- protected byte[] engineGetEncoded()
-- {
-- GOST3410PublicKeyAlgParameters gost3410P = new GOST3410PublicKeyAlgParameters(new DERObjectIdentifier(currentSpec.getPublicKeyParamSetOID()), new DERObjectIdentifier(currentSpec.getDigestParamSetOID()), new DERObjectIdentifier(currentSpec.getEncryptionParamSetOID()));
--
-- try
-- {
-- return gost3410P.getEncoded(ASN1Encodable.DER);
-- }
-- catch (IOException e)
-- {
-- throw new RuntimeException("Error encoding GOST3410Parameters");
-- }
-- }
--
-- protected byte[] engineGetEncoded(
-- String format)
-- {
-- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-- {
-- return engineGetEncoded();
-- }
--
-- return null;
-- }
--
-- protected AlgorithmParameterSpec localEngineGetParameterSpec(
-- Class paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (paramSpec == GOST3410PublicKeyParameterSetSpec.class)
-- {
-- return currentSpec;
-- }
--
-- throw new InvalidParameterSpecException("unknown parameter spec passed to GOST3410 parameters object.");
-- }
--
-- protected void engineInit(
-- AlgorithmParameterSpec paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (!(paramSpec instanceof GOST3410ParameterSpec))
-- {
-- throw new InvalidParameterSpecException("GOST3410ParameterSpec required to initialise a GOST3410 algorithm parameters object");
-- }
--
-- this.currentSpec = (GOST3410ParameterSpec)paramSpec;
-- }
--
-- protected void engineInit(
-- byte[] params)
-- throws IOException
-- {
-- try
-- {
-- ASN1Sequence seq = (ASN1Sequence) ASN1Object.fromByteArray(params);
--
-- this.currentSpec = GOST3410ParameterSpec.fromPublicKeyAlg(
-- new GOST3410PublicKeyAlgParameters(seq));
-- }
-- catch (ClassCastException e)
-- {
-- throw new IOException("Not a valid GOST3410 Parameter encoding.");
-- }
-- catch (ArrayIndexOutOfBoundsException e)
-- {
-- throw new IOException("Not a valid GOST3410 Parameter encoding.");
-- }
-- }
--
-- protected void engineInit(
-- byte[] params,
-- String format)
-- throws IOException
-- {
-- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-- {
-- engineInit(params);
-- }
-- else
-- {
-- throw new IOException("Unknown parameter format " + format);
-- }
-- }
--
-- protected String engineToString()
-- {
-- return "GOST3410 Parameters";
-- }
-- }
--
-- public static class ElGamal
-- extends JDKAlgorithmParameters
-- {
-- ElGamalParameterSpec currentSpec;
--
-- /**
-- * Return the X.509 ASN.1 structure ElGamalParameter.
-- * <p>
-- * <pre>
-- * ElGamalParameter ::= SEQUENCE {
-- * prime INTEGER, -- p
-- * base INTEGER, -- g}
-- * </pre>
-- */
-- protected byte[] engineGetEncoded()
-- {
-- ElGamalParameter elP = new ElGamalParameter(currentSpec.getP(), currentSpec.getG());
--
-- try
-- {
-- return elP.getEncoded(ASN1Encodable.DER);
-- }
-- catch (IOException e)
-- {
-- throw new RuntimeException("Error encoding ElGamalParameters");
-- }
-- }
--
-- protected byte[] engineGetEncoded(
-- String format)
-- {
-- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-- {
-- return engineGetEncoded();
-- }
--
-- return null;
-- }
--
-- protected AlgorithmParameterSpec localEngineGetParameterSpec(
-- Class paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (paramSpec == ElGamalParameterSpec.class)
-- {
-- return currentSpec;
-- }
-- else if (paramSpec == DHParameterSpec.class)
-- {
-- return new DHParameterSpec(currentSpec.getP(), currentSpec.getG());
-- }
--
-- throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
-- }
--
-- protected void engineInit(
-- AlgorithmParameterSpec paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (!(paramSpec instanceof ElGamalParameterSpec) && !(paramSpec instanceof DHParameterSpec))
-- {
-- throw new InvalidParameterSpecException("DHParameterSpec required to initialise a ElGamal algorithm parameters object");
-- }
--
-- if (paramSpec instanceof ElGamalParameterSpec)
-- {
-- this.currentSpec = (ElGamalParameterSpec)paramSpec;
-- }
-- else
-- {
-- DHParameterSpec s = (DHParameterSpec)paramSpec;
--
-- this.currentSpec = new ElGamalParameterSpec(s.getP(), s.getG());
-- }
-- }
--
-- protected void engineInit(
-- byte[] params)
-- throws IOException
-- {
-- try
-- {
-- ElGamalParameter elP = new ElGamalParameter((ASN1Sequence)ASN1Object.fromByteArray(params));
--
-- currentSpec = new ElGamalParameterSpec(elP.getP(), elP.getG());
-- }
-- catch (ClassCastException e)
-- {
-- throw new IOException("Not a valid ElGamal Parameter encoding.");
-- }
-- catch (ArrayIndexOutOfBoundsException e)
-- {
-- throw new IOException("Not a valid ElGamal Parameter encoding.");
-- }
-- }
--
-- protected void engineInit(
-- byte[] params,
-- String format)
-- throws IOException
-- {
-- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-- {
-- engineInit(params);
-- }
-- else
-- {
-- throw new IOException("Unknown parameter format " + format);
-- }
-- }
--
-- protected String engineToString()
-- {
-- return "ElGamal Parameters";
-- }
-- }
--
+
- public static class IES
- extends JDKAlgorithmParameters
- {
@@ -6349,7 +8705,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParam
- v.add(new DEROctetString(currentSpec.getEncodingV()));
- v.add(new DERInteger(currentSpec.getMacKeySize()));
-
-- return new DERSequence(v).getEncoded(ASN1Encodable.DER);
+- return new DERSequence(v).getEncoded(ASN1Encoding.DER);
- }
- catch (IOException e)
- {
@@ -6398,7 +8754,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParam
- {
- try
- {
-- ASN1Sequence s = (ASN1Sequence)ASN1Object.fromByteArray(params);
+- ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(params);
-
- this.currentSpec = new IESParameterSpec(
- ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
@@ -6436,229 +8792,6 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParam
- }
- }
+ // BEGIN android-removed
-+ // public static class GOST3410
-+ // extends JDKAlgorithmParameters
-+ // {
-+ // GOST3410ParameterSpec currentSpec;
-+ //
-+ // /**
-+ // * Return the X.509 ASN.1 structure GOST3410Parameter.
-+ // * <p>
-+ // * <pre>
-+ // * GOST3410Parameter ::= SEQUENCE {
-+ // * prime INTEGER, -- p
-+ // * subprime INTEGER, -- q
-+ // * base INTEGER, -- a}
-+ // * </pre>
-+ // */
-+ // protected byte[] engineGetEncoded()
-+ // {
-+ // GOST3410PublicKeyAlgParameters gost3410P = new GOST3410PublicKeyAlgParameters(new DERObjectIdentifier(currentSpec.getPublicKeyParamSetOID()), new DERObjectIdentifier(currentSpec.getDigestParamSetOID()), new DERObjectIdentifier(currentSpec.getEncryptionParamSetOID()));
-+ //
-+ // try
-+ // {
-+ // return gost3410P.getEncoded(ASN1Encodable.DER);
-+ // }
-+ // catch (IOException e)
-+ // {
-+ // throw new RuntimeException("Error encoding GOST3410Parameters");
-+ // }
-+ // }
-+ //
-+ // protected byte[] engineGetEncoded(
-+ // String format)
-+ // {
-+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-+ // {
-+ // return engineGetEncoded();
-+ // }
-+ //
-+ // return null;
-+ // }
-+ //
-+ // protected AlgorithmParameterSpec localEngineGetParameterSpec(
-+ // Class paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (paramSpec == GOST3410PublicKeyParameterSetSpec.class)
-+ // {
-+ // return currentSpec;
-+ // }
-+ //
-+ // throw new InvalidParameterSpecException("unknown parameter spec passed to GOST3410 parameters object.");
-+ // }
-+ //
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (!(paramSpec instanceof GOST3410ParameterSpec))
-+ // {
-+ // throw new InvalidParameterSpecException("GOST3410ParameterSpec required to initialise a GOST3410 algorithm parameters object");
-+ // }
-+ //
-+ // this.currentSpec = (GOST3410ParameterSpec)paramSpec;
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params)
-+ // throws IOException
-+ // {
-+ // try
-+ // {
-+ // ASN1Sequence seq = (ASN1Sequence) ASN1Object.fromByteArray(params);
-+ //
-+ // this.currentSpec = GOST3410ParameterSpec.fromPublicKeyAlg(
-+ // new GOST3410PublicKeyAlgParameters(seq));
-+ // }
-+ // catch (ClassCastException e)
-+ // {
-+ // throw new IOException("Not a valid GOST3410 Parameter encoding.");
-+ // }
-+ // catch (ArrayIndexOutOfBoundsException e)
-+ // {
-+ // throw new IOException("Not a valid GOST3410 Parameter encoding.");
-+ // }
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params,
-+ // String format)
-+ // throws IOException
-+ // {
-+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-+ // {
-+ // engineInit(params);
-+ // }
-+ // else
-+ // {
-+ // throw new IOException("Unknown parameter format " + format);
-+ // }
-+ // }
-+ //
-+ // protected String engineToString()
-+ // {
-+ // return "GOST3410 Parameters";
-+ // }
-+ // }
-+
-+ // public static class ElGamal
-+ // extends JDKAlgorithmParameters
-+ // {
-+ // ElGamalParameterSpec currentSpec;
-+ //
-+ // /**
-+ // * Return the X.509 ASN.1 structure ElGamalParameter.
-+ // * <p>
-+ // * <pre>
-+ // * ElGamalParameter ::= SEQUENCE {
-+ // * prime INTEGER, -- p
-+ // * base INTEGER, -- g}
-+ // * </pre>
-+ // */
-+ // protected byte[] engineGetEncoded()
-+ // {
-+ // ElGamalParameter elP = new ElGamalParameter(currentSpec.getP(), currentSpec.getG());
-+ //
-+ // try
-+ // {
-+ // return elP.getEncoded(ASN1Encodable.DER);
-+ // }
-+ // catch (IOException e)
-+ // {
-+ // throw new RuntimeException("Error encoding ElGamalParameters");
-+ // }
-+ // }
-+ //
-+ // protected byte[] engineGetEncoded(
-+ // String format)
-+ // {
-+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-+ // {
-+ // return engineGetEncoded();
-+ // }
-+ //
-+ // return null;
-+ // }
-+ //
-+ // protected AlgorithmParameterSpec localEngineGetParameterSpec(
-+ // Class paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (paramSpec == ElGamalParameterSpec.class)
-+ // {
-+ // return currentSpec;
-+ // }
-+ // else if (paramSpec == DHParameterSpec.class)
-+ // {
-+ // return new DHParameterSpec(currentSpec.getP(), currentSpec.getG());
-+ // }
-+ //
-+ // throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
-+ // }
-+ //
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (!(paramSpec instanceof ElGamalParameterSpec) && !(paramSpec instanceof DHParameterSpec))
-+ // {
-+ // throw new InvalidParameterSpecException("DHParameterSpec required to initialise a ElGamal algorithm parameters object");
-+ // }
-+ //
-+ // if (paramSpec instanceof ElGamalParameterSpec)
-+ // {
-+ // this.currentSpec = (ElGamalParameterSpec)paramSpec;
-+ // }
-+ // else
-+ // {
-+ // DHParameterSpec s = (DHParameterSpec)paramSpec;
-+ //
-+ // this.currentSpec = new ElGamalParameterSpec(s.getP(), s.getG());
-+ // }
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params)
-+ // throws IOException
-+ // {
-+ // try
-+ // {
-+ // ElGamalParameter elP = new ElGamalParameter((ASN1Sequence)ASN1Object.fromByteArray(params));
-+ //
-+ // currentSpec = new ElGamalParameterSpec(elP.getP(), elP.getG());
-+ // }
-+ // catch (ClassCastException e)
-+ // {
-+ // throw new IOException("Not a valid ElGamal Parameter encoding.");
-+ // }
-+ // catch (ArrayIndexOutOfBoundsException e)
-+ // {
-+ // throw new IOException("Not a valid ElGamal Parameter encoding.");
-+ // }
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params,
-+ // String format)
-+ // throws IOException
-+ // {
-+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-+ // {
-+ // engineInit(params);
-+ // }
-+ // else
-+ // {
-+ // throw new IOException("Unknown parameter format " + format);
-+ // }
-+ // }
-+ //
-+ // protected String engineToString()
-+ // {
-+ // return "ElGamal Parameters";
-+ // }
-+ // }
-+ //
+ // public static class IES
+ // extends JDKAlgorithmParameters
+ // {
@@ -6678,7 +8811,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParam
+ // v.add(new DEROctetString(currentSpec.getEncodingV()));
+ // v.add(new DERInteger(currentSpec.getMacKeySize()));
+ //
-+ // return new DERSequence(v).getEncoded(ASN1Encodable.DER);
++ // return new DERSequence(v).getEncoded(ASN1Encoding.DER);
+ // }
+ // catch (IOException e)
+ // {
@@ -6727,7 +8860,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParam
+ // {
+ // try
+ // {
-+ // ASN1Sequence s = (ASN1Sequence)ASN1Object.fromByteArray(params);
++ // ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(params);
+ //
+ // this.currentSpec = new IESParameterSpec(
+ // ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
@@ -6765,1310 +8898,10 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParam
+ // }
+ // }
+ // END android-removed
-
- public static class OAEP
- extends JDKAlgorithmParameters
-@@ -1066,11 +1078,15 @@
- {
- AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
- JCEDigestUtil.getOID(currentSpec.getDigestAlgorithm()),
-- new DERNull());
-+ // BEGIN android-changed
-+ DERNull.INSTANCE);
-+ // END android-changed
- MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)currentSpec.getMGFParameters();
- AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
- PKCSObjectIdentifiers.id_mgf1,
-- new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), new DERNull()));
-+ // BEGIN android-changed
-+ new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE));
-+ // END android-changed
- PSource.PSpecified pSource = (PSource.PSpecified)currentSpec.getPSource();
- AlgorithmIdentifier pSourceAlgorithm = new AlgorithmIdentifier(
- PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(pSource.getValue()));
-@@ -1167,110 +1183,116 @@
- }
- }
-
-- public static class PSS
-- extends JDKAlgorithmParameters
-- {
-- PSSParameterSpec currentSpec;
--
-- /**
-- * Return the PKCS#1 ASN.1 structure RSASSA-PSS-params.
-- */
-- protected byte[] engineGetEncoded()
-- throws IOException
-- {
-- PSSParameterSpec pssSpec = currentSpec;
-- AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
-- JCEDigestUtil.getOID(pssSpec.getDigestAlgorithm()),
-- new DERNull());
-- MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)pssSpec.getMGFParameters();
-- AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
-- PKCSObjectIdentifiers.id_mgf1,
-- new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), new DERNull()));
-- RSASSAPSSparams pssP = new RSASSAPSSparams(hashAlgorithm, maskGenAlgorithm, new DERInteger(pssSpec.getSaltLength()), new DERInteger(pssSpec.getTrailerField()));
--
-- return pssP.getEncoded("DER");
-- }
--
-- protected byte[] engineGetEncoded(
-- String format)
-- throws IOException
-- {
-- if (format.equalsIgnoreCase("X.509")
-- || format.equalsIgnoreCase("ASN.1"))
-- {
-- return engineGetEncoded();
-- }
--
-- return null;
-- }
--
-- protected AlgorithmParameterSpec localEngineGetParameterSpec(
-- Class paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (paramSpec == PSSParameterSpec.class && currentSpec != null)
-- {
-- return currentSpec;
-- }
--
-- throw new InvalidParameterSpecException("unknown parameter spec passed to PSS parameters object.");
-- }
--
-- protected void engineInit(
-- AlgorithmParameterSpec paramSpec)
-- throws InvalidParameterSpecException
-- {
-- if (!(paramSpec instanceof PSSParameterSpec))
-- {
-- throw new InvalidParameterSpecException("PSSParameterSpec required to initialise an PSS algorithm parameters object");
-- }
--
-- this.currentSpec = (PSSParameterSpec)paramSpec;
-- }
--
-- protected void engineInit(
-- byte[] params)
-- throws IOException
-- {
-- try
-- {
-- RSASSAPSSparams pssP = new RSASSAPSSparams((ASN1Sequence)ASN1Object.fromByteArray(params));
--
-- currentSpec = new PSSParameterSpec(
-- pssP.getHashAlgorithm().getObjectId().getId(),
-- pssP.getMaskGenAlgorithm().getObjectId().getId(),
-- new MGF1ParameterSpec(AlgorithmIdentifier.getInstance(pssP.getMaskGenAlgorithm().getParameters()).getObjectId().getId()),
-- pssP.getSaltLength().getValue().intValue(),
-- pssP.getTrailerField().getValue().intValue());
-- }
-- catch (ClassCastException e)
-- {
-- throw new IOException("Not a valid PSS Parameter encoding.");
-- }
-- catch (ArrayIndexOutOfBoundsException e)
-- {
-- throw new IOException("Not a valid PSS Parameter encoding.");
-- }
-- }
--
-- protected void engineInit(
-- byte[] params,
-- String format)
-- throws IOException
-- {
-- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-- {
-- engineInit(params);
-- }
-- else
-- {
-- throw new IOException("Unknown parameter format " + format);
-- }
-- }
--
-- protected String engineToString()
-- {
-- return "PSS Parameters";
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class PSS
-+ // extends JDKAlgorithmParameters
-+ // {
-+ // PSSParameterSpec currentSpec;
-+ //
-+ // /**
-+ // * Return the PKCS#1 ASN.1 structure RSASSA-PSS-params.
-+ // */
-+ // protected byte[] engineGetEncoded()
-+ // throws IOException
-+ // {
-+ // PSSParameterSpec pssSpec = currentSpec;
-+ // AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
-+ // JCEDigestUtil.getOID(pssSpec.getDigestAlgorithm()),
-+ // // BEGIN android-changed
-+ // DERNull.INSTANCE);
-+ // // END android-changed
-+ // MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)pssSpec.getMGFParameters();
-+ // AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
-+ // PKCSObjectIdentifiers.id_mgf1,
-+ // // BEGIN android-changed
-+ // new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE));
-+ // // END android-changed
-+ // RSASSAPSSparams pssP = new RSASSAPSSparams(hashAlgorithm, maskGenAlgorithm, new DERInteger(pssSpec.getSaltLength()), new DERInteger(pssSpec.getTrailerField()));
-+ //
-+ // return pssP.getEncoded("DER");
-+ // }
-+ //
-+ // protected byte[] engineGetEncoded(
-+ // String format)
-+ // throws IOException
-+ // {
-+ // if (format.equalsIgnoreCase("X.509")
-+ // || format.equalsIgnoreCase("ASN.1"))
-+ // {
-+ // return engineGetEncoded();
-+ // }
-+ //
-+ // return null;
-+ // }
-+ //
-+ // protected AlgorithmParameterSpec localEngineGetParameterSpec(
-+ // Class paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (paramSpec == PSSParameterSpec.class && currentSpec != null)
-+ // {
-+ // return currentSpec;
-+ // }
-+ //
-+ // throw new InvalidParameterSpecException("unknown parameter spec passed to PSS parameters object.");
-+ // }
-+ //
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec paramSpec)
-+ // throws InvalidParameterSpecException
-+ // {
-+ // if (!(paramSpec instanceof PSSParameterSpec))
-+ // {
-+ // throw new InvalidParameterSpecException("PSSParameterSpec required to initialise an PSS algorithm parameters object");
-+ // }
-+ //
-+ // this.currentSpec = (PSSParameterSpec)paramSpec;
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params)
-+ // throws IOException
-+ // {
-+ // try
-+ // {
-+ // RSASSAPSSparams pssP = new RSASSAPSSparams((ASN1Sequence)ASN1Object.fromByteArray(params));
-+ //
-+ // currentSpec = new PSSParameterSpec(
-+ // pssP.getHashAlgorithm().getObjectId().getId(),
-+ // pssP.getMaskGenAlgorithm().getObjectId().getId(),
-+ // new MGF1ParameterSpec(AlgorithmIdentifier.getInstance(pssP.getMaskGenAlgorithm().getParameters()).getObjectId().getId()),
-+ // pssP.getSaltLength().getValue().intValue(),
-+ // pssP.getTrailerField().getValue().intValue());
-+ // }
-+ // catch (ClassCastException e)
-+ // {
-+ // throw new IOException("Not a valid PSS Parameter encoding.");
-+ // }
-+ // catch (ArrayIndexOutOfBoundsException e)
-+ // {
-+ // throw new IOException("Not a valid PSS Parameter encoding.");
-+ // }
-+ // }
-+ //
-+ // protected void engineInit(
-+ // byte[] params,
-+ // String format)
-+ // throws IOException
-+ // {
-+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
-+ // {
-+ // engineInit(params);
-+ // }
-+ // else
-+ // {
-+ // throw new IOException("Unknown parameter format " + format);
-+ // }
-+ // }
-+ //
-+ // protected String engineToString()
-+ // {
-+ // return "PSS Parameters";
-+ // }
-+ // }
-+ // END android-removed
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDSASigner.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDSASigner.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDSASigner.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDSASigner.java 2012-07-27 18:48:00.031478939 +0000
-@@ -23,13 +23,17 @@
- import org.bouncycastle.crypto.Digest;
- import org.bouncycastle.crypto.digests.NullDigest;
- import org.bouncycastle.crypto.digests.SHA1Digest;
--import org.bouncycastle.crypto.digests.SHA224Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.SHA224Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA256Digest;
- import org.bouncycastle.crypto.digests.SHA384Digest;
- import org.bouncycastle.crypto.digests.SHA512Digest;
- import org.bouncycastle.crypto.params.ParametersWithRandom;
- import org.bouncycastle.crypto.signers.DSASigner;
--import org.bouncycastle.jce.interfaces.GOST3410Key;
-+// BEGIN android-removed
-+// import org.bouncycastle.jce.interfaces.GOST3410Key;
-+// END android-removed
-
- public class JDKDSASigner
- extends SignatureSpi
-@@ -53,11 +57,16 @@
- {
- CipherParameters param;
-
-- if (publicKey instanceof GOST3410Key)
-- {
-- param = GOST3410Util.generatePublicKeyParameter(publicKey);
-- }
-- else if (publicKey instanceof DSAKey)
-+ // BEGIN android-removed
-+ // if (publicKey instanceof GOST3410Key)
-+ // {
-+ // param = GOST3410Util.generatePublicKeyParameter(publicKey);
-+ // }
-+ // else if (publicKey instanceof DSAKey)
-+ // END android-removed
-+ // BEGIN android-added
-+ if (publicKey instanceof DSAKey)
-+ // END android-added
- {
- param = DSAUtil.generatePublicKeyParameter(publicKey);
- }
-@@ -103,14 +112,18 @@
- {
- CipherParameters param;
-
-- if (privateKey instanceof GOST3410Key)
-- {
-- param = GOST3410Util.generatePrivateKeyParameter(privateKey);
-- }
-- else
-- {
-+ // BEGIN android-removed
-+ // if (privateKey instanceof GOST3410Key)
-+ // {
-+ // param = GOST3410Util.generatePrivateKeyParameter(privateKey);
-+ // }
-+ // else
-+ // {
-+ // END android-removed
- param = DSAUtil.generatePrivateKeyParameter(privateKey);
-- }
-+ // BEGIN android-removed
-+ // }
-+ // END android-removed
-
- if (random != null)
- {
-@@ -231,42 +244,44 @@
- super(new SHA1Digest(), new DSASigner());
- }
- }
--
-- static public class dsa224
-- extends JDKDSASigner
-- {
-- public dsa224()
-- {
-- super(new SHA224Digest(), new DSASigner());
-- }
-- }
--
-- static public class dsa256
-- extends JDKDSASigner
-- {
-- public dsa256()
-- {
-- super(new SHA256Digest(), new DSASigner());
-- }
-- }
-
-- static public class dsa384
-- extends JDKDSASigner
-- {
-- public dsa384()
-- {
-- super(new SHA384Digest(), new DSASigner());
-- }
-- }
--
-- static public class dsa512
-- extends JDKDSASigner
-- {
-- public dsa512()
-- {
-- super(new SHA512Digest(), new DSASigner());
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class dsa224
-+ // extends JDKDSASigner
-+ // {
-+ // public dsa224()
-+ // {
-+ // super(new SHA224Digest(), new DSASigner());
-+ // }
-+ // }
-+ //
-+ // static public class dsa256
-+ // extends JDKDSASigner
-+ // {
-+ // public dsa256()
-+ // {
-+ // super(new SHA256Digest(), new DSASigner());
-+ // }
-+ // }
-+ //
-+ // static public class dsa384
-+ // extends JDKDSASigner
-+ // {
-+ // public dsa384()
-+ // {
-+ // super(new SHA384Digest(), new DSASigner());
-+ // }
-+ // }
-+ //
-+ // static public class dsa512
-+ // extends JDKDSASigner
-+ // {
-+ // public dsa512()
-+ // {
-+ // super(new SHA512Digest(), new DSASigner());
-+ // }
-+ // }
-+ // END android-removed
-
- static public class noneDSA
- extends JDKDSASigner
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDigestSignature.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDigestSignature.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDigestSignature.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDigestSignature.java 2012-07-27 18:48:00.031478939 +0000
-@@ -23,15 +23,21 @@
- import org.bouncycastle.crypto.AsymmetricBlockCipher;
- import org.bouncycastle.crypto.CipherParameters;
- import org.bouncycastle.crypto.Digest;
--import org.bouncycastle.crypto.digests.MD2Digest;
--import org.bouncycastle.crypto.digests.MD4Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.MD2Digest;
-+// import org.bouncycastle.crypto.digests.MD4Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.MD5Digest;
- import org.bouncycastle.crypto.digests.NullDigest;
--import org.bouncycastle.crypto.digests.RIPEMD128Digest;
--import org.bouncycastle.crypto.digests.RIPEMD160Digest;
--import org.bouncycastle.crypto.digests.RIPEMD256Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.RIPEMD128Digest;
-+// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-+// import org.bouncycastle.crypto.digests.RIPEMD256Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA1Digest;
--import org.bouncycastle.crypto.digests.SHA224Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.SHA224Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA256Digest;
- import org.bouncycastle.crypto.digests.SHA384Digest;
- import org.bouncycastle.crypto.digests.SHA512Digest;
-@@ -265,14 +271,16 @@
- }
- }
-
-- static public class SHA224WithRSAEncryption
-- extends JDKDigestSignature
-- {
-- public SHA224WithRSAEncryption()
-- {
-- super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class SHA224WithRSAEncryption
-+ // extends JDKDigestSignature
-+ // {
-+ // public SHA224WithRSAEncryption()
-+ // {
-+ // super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ // END android-removed
-
- static public class SHA256WithRSAEncryption
- extends JDKDigestSignature
-@@ -301,23 +309,25 @@
- }
- }
-
-- static public class MD2WithRSAEncryption
-- extends JDKDigestSignature
-- {
-- public MD2WithRSAEncryption()
-- {
-- super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class MD4WithRSAEncryption
-- extends JDKDigestSignature
-- {
-- public MD4WithRSAEncryption()
-- {
-- super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class MD2WithRSAEncryption
-+ // extends JDKDigestSignature
-+ // {
-+ // public MD2WithRSAEncryption()
-+ // {
-+ // super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class MD4WithRSAEncryption
-+ // extends JDKDigestSignature
-+ // {
-+ // public MD4WithRSAEncryption()
-+ // {
-+ // super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ // END android-removed
-
- static public class MD5WithRSAEncryption
- extends JDKDigestSignature
-@@ -328,39 +338,41 @@
- }
- }
-
-- static public class RIPEMD160WithRSAEncryption
-- extends JDKDigestSignature
-- {
-- public RIPEMD160WithRSAEncryption()
-- {
-- super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class RIPEMD128WithRSAEncryption
-- extends JDKDigestSignature
-- {
-- public RIPEMD128WithRSAEncryption()
-- {
-- super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class RIPEMD256WithRSAEncryption
-- extends JDKDigestSignature
-- {
-- public RIPEMD256WithRSAEncryption()
-- {
-- super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
--
-- static public class noneRSA
-- extends JDKDigestSignature
-- {
-- public noneRSA()
-- {
-- super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class RIPEMD160WithRSAEncryption
-+ // extends JDKDigestSignature
-+ // {
-+ // public RIPEMD160WithRSAEncryption()
-+ // {
-+ // super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class RIPEMD128WithRSAEncryption
-+ // extends JDKDigestSignature
-+ // {
-+ // public RIPEMD128WithRSAEncryption()
-+ // {
-+ // super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class RIPEMD256WithRSAEncryption
-+ // extends JDKDigestSignature
-+ // {
-+ // public RIPEMD256WithRSAEncryption()
-+ // {
-+ // super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ //
-+ // static public class noneRSA
-+ // extends JDKDigestSignature
-+ // {
-+ // public noneRSA()
-+ // {
-+ // super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine()));
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyFactory.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyFactory.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyFactory.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyFactory.java 2012-07-27 18:48:00.031478939 +0000
-@@ -36,17 +36,21 @@
- import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;
- import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
- import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
--import org.bouncycastle.jce.interfaces.ElGamalPrivateKey;
--import org.bouncycastle.jce.interfaces.ElGamalPublicKey;
--import org.bouncycastle.jce.spec.ElGamalPrivateKeySpec;
--import org.bouncycastle.jce.spec.ElGamalPublicKeySpec;
--import org.bouncycastle.jce.spec.GOST3410PrivateKeySpec;
--import org.bouncycastle.jce.spec.GOST3410PublicKeySpec;
-+// BEGIN android-removed
-+// import org.bouncycastle.jce.interfaces.ElGamalPrivateKey;
-+// import org.bouncycastle.jce.interfaces.ElGamalPublicKey;
-+// import org.bouncycastle.jce.spec.ElGamalPrivateKeySpec;
-+// import org.bouncycastle.jce.spec.ElGamalPublicKeySpec;
-+// import org.bouncycastle.jce.spec.GOST3410PrivateKeySpec;
-+// import org.bouncycastle.jce.spec.GOST3410PublicKeySpec;
-+// END android-removed
-
- public abstract class JDKKeyFactory
- extends KeyFactorySpi
- {
-- protected boolean elGamalFactory = false;
-+ // BEGIN android-removed
-+ // protected boolean elGamalFactory = false;
-+ // END android-removed
-
- public JDKKeyFactory()
- {
-@@ -140,6 +144,20 @@
-
- return new DHPublicKeySpec(k.getY(), k.getParams().getP(), k.getParams().getG());
- }
-+ // BEGIN android-added
-+ else if (spec.isAssignableFrom(DSAPublicKeySpec.class) && key instanceof DSAPublicKey)
-+ {
-+ DSAPublicKey k = (DSAPublicKey)key;
-+
-+ return new DSAPublicKeySpec(k.getY(), k.getParams().getP(), k.getParams().getQ(), k.getParams().getG());
-+ }
-+ else if (spec.isAssignableFrom(DSAPrivateKeySpec.class) && key instanceof DSAPrivateKey)
-+ {
-+ DSAPrivateKey k = (DSAPrivateKey)key;
-+
-+ return new DSAPrivateKeySpec(k.getX(), k.getParams().getP(), k.getParams().getQ(), k.getParams().getG());
-+ }
-+ // END android-added
-
- throw new RuntimeException("not implemented yet " + key + " " + spec);
- }
-@@ -162,25 +180,33 @@
- }
- else if (key instanceof DHPublicKey)
- {
-- if (elGamalFactory)
-- {
-- return new JCEElGamalPublicKey((DHPublicKey)key);
-- }
-- else
-- {
-+ // BEGIN android-removed
-+ // if (elGamalFactory)
-+ // {
-+ // return new JCEElGamalPublicKey((DHPublicKey)key);
-+ // }
-+ // else
-+ // {
-+ // END android-removed
- return new JCEDHPublicKey((DHPublicKey)key);
-- }
-+ // BEGIN android-removed
-+ // }
-+ // END android-removed
- }
- else if (key instanceof DHPrivateKey)
- {
-- if (elGamalFactory)
-- {
-- return new JCEElGamalPrivateKey((DHPrivateKey)key);
-- }
-- else
-- {
-+ // BEGIN android-removed
-+ // if (elGamalFactory)
-+ // {
-+ // return new JCEElGamalPrivateKey((DHPrivateKey)key);
-+ // }
-+ // else
-+ // {
-+ // END android-removed
- return new JCEDHPrivateKey((DHPrivateKey)key);
-- }
-+ // BEGIN android-removed
-+ // }
-+ // END android-removed
- }
- else if (key instanceof DSAPublicKey)
- {
-@@ -190,14 +216,16 @@
- {
- return new JDKDSAPrivateKey((DSAPrivateKey)key);
- }
-- else if (key instanceof ElGamalPublicKey)
-- {
-- return new JCEElGamalPublicKey((ElGamalPublicKey)key);
-- }
-- else if (key instanceof ElGamalPrivateKey)
-- {
-- return new JCEElGamalPrivateKey((ElGamalPrivateKey)key);
-- }
-+ // BEGIN android-removed
-+ // else if (key instanceof ElGamalPublicKey)
-+ // {
-+ // return new JCEElGamalPublicKey((ElGamalPublicKey)key);
-+ // }
-+ // else if (key instanceof ElGamalPrivateKey)
-+ // {
-+ // return new JCEElGamalPrivateKey((ElGamalPrivateKey)key);
-+ // }
-+ // END android-removed
-
- throw new InvalidKeyException("key type unknown");
- }
-@@ -233,10 +261,12 @@
- {
- return new JCEDHPublicKey(info);
- }
-- else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
-- {
-- return new JCEElGamalPublicKey(info);
-- }
-+ // BEGIN android-removed
-+ // else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
-+ // {
-+ // return new JCEElGamalPublicKey(info);
-+ // }
-+ // END android-removed
- else if (algOid.equals(X9ObjectIdentifiers.id_dsa))
- {
- return new JDKDSAPublicKey(info);
-@@ -249,14 +279,15 @@
- {
- return new JCEECPublicKey(info);
- }
-- else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
-- {
-- return new JDKGOST3410PublicKey(info);
-- }
-- else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
-- {
-- return new JCEECPublicKey(info);
-- }
-+ // BEGIN android-removed
-+ // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
-+ // {
-+ // return new JDKGOST3410PublicKey(info);
-+ // }
-+ // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
-+ // {
-+ // return new JCEECPublicKey(info);
-+ // }
- else
- {
- throw new RuntimeException("algorithm identifier " + algOid + " in key not recognised");
-@@ -294,10 +325,12 @@
- {
- return new JCEDHPrivateKey(info);
- }
-- else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
-- {
-- return new JCEElGamalPrivateKey(info);
-- }
-+ // BEGIN android-removed
-+ // else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
-+ // {
-+ // return new JCEElGamalPrivateKey(info);
-+ // }
-+ // END android-removed
- else if (algOid.equals(X9ObjectIdentifiers.id_dsa))
- {
- return new JDKDSAPrivateKey(info);
-@@ -306,14 +339,16 @@
- {
- return new JCEECPrivateKey(info);
- }
-- else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
-- {
-- return new JDKGOST3410PrivateKey(info);
-- }
-- else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
-- {
-- return new JCEECPrivateKey(info);
-- }
-+ // BEGIN android-removed
-+ // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
-+ // {
-+ // return new JDKGOST3410PrivateKey(info);
-+ // }
-+ // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
-+ // {
-+ // return new JCEECPrivateKey(info);
-+ // }
-+ // END android-removed
- else
- {
- throw new RuntimeException("algorithm identifier " + algOid + " in key not recognised");
-@@ -444,89 +479,92 @@
- }
- }
-
-- public static class GOST3410
-- extends JDKKeyFactory
-- {
-- public GOST3410()
-- {
-- }
--
-- protected PrivateKey engineGeneratePrivate(
-- KeySpec keySpec)
-- throws InvalidKeySpecException
-- {
-- if (keySpec instanceof GOST3410PrivateKeySpec)
-- {
-- return new JDKGOST3410PrivateKey((GOST3410PrivateKeySpec)keySpec);
-- }
--
-- return super.engineGeneratePrivate(keySpec);
-- }
--
-- protected PublicKey engineGeneratePublic(
-- KeySpec keySpec)
-- throws InvalidKeySpecException
-- {
-- if (keySpec instanceof GOST3410PublicKeySpec)
-- {
-- return new JDKGOST3410PublicKey((GOST3410PublicKeySpec)keySpec);
-- }
--
-- return super.engineGeneratePublic(keySpec);
-- }
-- }
--
-- public static class ElGamal
-- extends JDKKeyFactory
-- {
-- public ElGamal()
-- {
-- elGamalFactory = true;
-- }
--
-- protected PrivateKey engineGeneratePrivate(
-- KeySpec keySpec)
-- throws InvalidKeySpecException
-- {
-- if (keySpec instanceof ElGamalPrivateKeySpec)
-- {
-- return new JCEElGamalPrivateKey((ElGamalPrivateKeySpec)keySpec);
-- }
-- else if (keySpec instanceof DHPrivateKeySpec)
-- {
-- return new JCEElGamalPrivateKey((DHPrivateKeySpec)keySpec);
-- }
--
-- return super.engineGeneratePrivate(keySpec);
-- }
-+ // BEGIN android-removed
-+ // public static class GOST3410
-+ // extends JDKKeyFactory
-+ // {
-+ // public GOST3410()
-+ // {
-+ // }
-+ //
-+ // protected PrivateKey engineGeneratePrivate(
-+ // KeySpec keySpec)
-+ // throws InvalidKeySpecException
-+ // {
-+ // if (keySpec instanceof GOST3410PrivateKeySpec)
-+ // {
-+ // return new JDKGOST3410PrivateKey((GOST3410PrivateKeySpec)keySpec);
-+ // }
-+ //
-+ // return super.engineGeneratePrivate(keySpec);
-+ // }
-+ //
-+ // protected PublicKey engineGeneratePublic(
-+ // KeySpec keySpec)
-+ // throws InvalidKeySpecException
-+ // {
-+ // if (keySpec instanceof GOST3410PublicKeySpec)
-+ // {
-+ // return new JDKGOST3410PublicKey((GOST3410PublicKeySpec)keySpec);
-+ // }
-+ //
-+ // return super.engineGeneratePublic(keySpec);
-+ // }
-+ // }
-
-- protected PublicKey engineGeneratePublic(
-- KeySpec keySpec)
-- throws InvalidKeySpecException
-- {
-- if (keySpec instanceof ElGamalPublicKeySpec)
-- {
-- return new JCEElGamalPublicKey((ElGamalPublicKeySpec)keySpec);
-- }
-- else if (keySpec instanceof DHPublicKeySpec)
-- {
-- return new JCEElGamalPublicKey((DHPublicKeySpec)keySpec);
-- }
--
-- return super.engineGeneratePublic(keySpec);
-- }
-- }
--
--
-- /**
-- * This isn't really correct, however the class path project API seems to think such
-- * a key factory will exist.
-- */
-- public static class X509
-- extends JDKKeyFactory
-- {
-- public X509()
-- {
-- }
-- }
-+ // public static class ElGamal
-+ // extends JDKKeyFactory
-+ // {
-+ // public ElGamal()
-+ // {
-+ // elGamalFactory = true;
-+ // }
-+ //
-+ // protected PrivateKey engineGeneratePrivate(
-+ // KeySpec keySpec)
-+ // throws InvalidKeySpecException
-+ // {
-+ // if (keySpec instanceof ElGamalPrivateKeySpec)
-+ // {
-+ // return new JCEElGamalPrivateKey((ElGamalPrivateKeySpec)keySpec);
-+ // }
-+ // else if (keySpec instanceof DHPrivateKeySpec)
-+ // {
-+ // return new JCEElGamalPrivateKey((DHPrivateKeySpec)keySpec);
-+ // }
-+ //
-+ // return super.engineGeneratePrivate(keySpec);
-+ // }
-+ //
-+ // protected PublicKey engineGeneratePublic(
-+ // KeySpec keySpec)
-+ // throws InvalidKeySpecException
-+ // {
-+ // if (keySpec instanceof ElGamalPublicKeySpec)
-+ // {
-+ // return new JCEElGamalPublicKey((ElGamalPublicKeySpec)keySpec);
-+ // }
-+ // else if (keySpec instanceof DHPublicKeySpec)
-+ // {
-+ // return new JCEElGamalPublicKey((DHPublicKeySpec)keySpec);
-+ // }
-+ //
-+ // return super.engineGeneratePublic(keySpec);
-+ // }
-+ // }
-+ //
-+ //
-+ //
-+ // /**
-+ // * This isn't really correct, however the class path project API seems to think such
-+ // * a key factory will exist.
-+ // */
-+ // public static class X509
-+ // extends JDKKeyFactory
-+ // {
-+ // public X509()
-+ // {
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java 2012-07-27 18:48:00.031478939 +0000
-@@ -6,9 +6,11 @@
- import org.bouncycastle.crypto.generators.DHParametersGenerator;
- import org.bouncycastle.crypto.generators.DSAKeyPairGenerator;
- import org.bouncycastle.crypto.generators.DSAParametersGenerator;
--import org.bouncycastle.crypto.generators.ElGamalKeyPairGenerator;
--import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
--import org.bouncycastle.crypto.generators.GOST3410KeyPairGenerator;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.generators.ElGamalKeyPairGenerator;
-+// import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
-+// import org.bouncycastle.crypto.generators.GOST3410KeyPairGenerator;
-+// END android-removed
- import org.bouncycastle.crypto.generators.RSAKeyPairGenerator;
- import org.bouncycastle.crypto.params.DHKeyGenerationParameters;
- import org.bouncycastle.crypto.params.DHParameters;
-@@ -18,20 +20,24 @@
- import org.bouncycastle.crypto.params.DSAParameters;
- import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
- import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
--import org.bouncycastle.crypto.params.ElGamalKeyGenerationParameters;
--import org.bouncycastle.crypto.params.ElGamalParameters;
--import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;
--import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
--import org.bouncycastle.crypto.params.GOST3410KeyGenerationParameters;
--import org.bouncycastle.crypto.params.GOST3410Parameters;
--import org.bouncycastle.crypto.params.GOST3410PrivateKeyParameters;
--import org.bouncycastle.crypto.params.GOST3410PublicKeyParameters;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.params.ElGamalKeyGenerationParameters;
-+// import org.bouncycastle.crypto.params.ElGamalParameters;
-+// import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;
-+// import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
-+// import org.bouncycastle.crypto.params.GOST3410KeyGenerationParameters;
-+// import org.bouncycastle.crypto.params.GOST3410Parameters;
-+// import org.bouncycastle.crypto.params.GOST3410PrivateKeyParameters;
-+// import org.bouncycastle.crypto.params.GOST3410PublicKeyParameters;
-+// END android-removed
- import org.bouncycastle.crypto.params.RSAKeyGenerationParameters;
- import org.bouncycastle.crypto.params.RSAKeyParameters;
- import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
--import org.bouncycastle.jce.spec.ElGamalParameterSpec;
--import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
--import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
-+// BEGIN android-removed
-+// import org.bouncycastle.jce.spec.ElGamalParameterSpec;
-+// import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
-+// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
-+// END android-removed
-
- import java.math.BigInteger;
- import java.security.InvalidAlgorithmParameterException;
-@@ -163,7 +169,9 @@
- {
- if (!initialised)
- {
-- Integer paramStrength = new Integer(strength);
-+ // BEGIN android-changed
-+ Integer paramStrength = Integer.valueOf(strength);
-+ // END android-changed
-
- if (params.containsKey(paramStrength))
- {
-@@ -260,139 +268,143 @@
- }
- }
-
-- public static class ElGamal
-- extends JDKKeyPairGenerator
-- {
-- ElGamalKeyGenerationParameters param;
-- ElGamalKeyPairGenerator engine = new ElGamalKeyPairGenerator();
-- int strength = 1024;
-- int certainty = 20;
-- SecureRandom random = new SecureRandom();
-- boolean initialised = false;
--
-- public ElGamal()
-- {
-- super("ElGamal");
-- }
--
-- public void initialize(
-- int strength,
-- SecureRandom random)
-- {
-- this.strength = strength;
-- this.random = random;
-- }
--
-- public void initialize(
-- AlgorithmParameterSpec params,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- if (!(params instanceof ElGamalParameterSpec) && !(params instanceof DHParameterSpec))
-- {
-- throw new InvalidAlgorithmParameterException("parameter object not a DHParameterSpec or an ElGamalParameterSpec");
-- }
--
-- if (params instanceof ElGamalParameterSpec)
-- {
-- ElGamalParameterSpec elParams = (ElGamalParameterSpec)params;
--
-- param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(elParams.getP(), elParams.getG()));
-- }
-- else
-- {
-- DHParameterSpec dhParams = (DHParameterSpec)params;
--
-- param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(dhParams.getP(), dhParams.getG(), dhParams.getL()));
-- }
--
-- engine.init(param);
-- initialised = true;
-- }
--
-- public KeyPair generateKeyPair()
-- {
-- if (!initialised)
-- {
-- ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
--
-- pGen.init(strength, certainty, random);
-- param = new ElGamalKeyGenerationParameters(random, pGen.generateParameters());
-- engine.init(param);
-- initialised = true;
-- }
--
-- AsymmetricCipherKeyPair pair = engine.generateKeyPair();
-- ElGamalPublicKeyParameters pub = (ElGamalPublicKeyParameters)pair.getPublic();
-- ElGamalPrivateKeyParameters priv = (ElGamalPrivateKeyParameters)pair.getPrivate();
--
-- return new KeyPair(new JCEElGamalPublicKey(pub),
-- new JCEElGamalPrivateKey(priv));
-- }
-- }
--
-- public static class GOST3410
-- extends JDKKeyPairGenerator
-- {
-- GOST3410KeyGenerationParameters param;
-- GOST3410KeyPairGenerator engine = new GOST3410KeyPairGenerator();
-- GOST3410ParameterSpec gost3410Params;
-- int strength = 1024;
-- SecureRandom random = null;
-- boolean initialised = false;
--
-- public GOST3410()
-- {
-- super("GOST3410");
-- }
--
-- public void initialize(
-- int strength,
-- SecureRandom random)
-- {
-- this.strength = strength;
-- this.random = random;
-- }
--
-- private void init(
-- GOST3410ParameterSpec gParams,
-- SecureRandom random)
-- {
-- GOST3410PublicKeyParameterSetSpec spec = gParams.getPublicKeyParameters();
--
-- param = new GOST3410KeyGenerationParameters(random, new GOST3410Parameters(spec.getP(), spec.getQ(), spec.getA()));
--
-- engine.init(param);
--
-- initialised = true;
-- gost3410Params = gParams;
-- }
--
-- public void initialize(
-- AlgorithmParameterSpec params,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- if (!(params instanceof GOST3410ParameterSpec))
-- {
-- throw new InvalidAlgorithmParameterException("parameter object not a GOST3410ParameterSpec");
-- }
--
-- init((GOST3410ParameterSpec)params, random);
-- }
--
-- public KeyPair generateKeyPair()
-- {
-- if (!initialised)
-- {
-- init(new GOST3410ParameterSpec(CryptoProObjectIdentifiers.gostR3410_94_CryptoPro_A.getId()), new SecureRandom());
-- }
--
-- AsymmetricCipherKeyPair pair = engine.generateKeyPair();
-- GOST3410PublicKeyParameters pub = (GOST3410PublicKeyParameters)pair.getPublic();
-- GOST3410PrivateKeyParameters priv = (GOST3410PrivateKeyParameters)pair.getPrivate();
--
-- return new KeyPair(new JDKGOST3410PublicKey(pub, gost3410Params), new JDKGOST3410PrivateKey(priv, gost3410Params));
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class ElGamal
-+ // extends JDKKeyPairGenerator
-+ // {
-+ // ElGamalKeyGenerationParameters param;
-+ // ElGamalKeyPairGenerator engine = new ElGamalKeyPairGenerator();
-+ // int strength = 1024;
-+ // int certainty = 20;
-+ // SecureRandom random = new SecureRandom();
-+ // boolean initialised = false;
-+ //
-+ // public ElGamal()
-+ // {
-+ // super("ElGamal");
-+ // }
-+ //
-+ // public void initialize(
-+ // int strength,
-+ // SecureRandom random)
-+ // {
-+ // this.strength = strength;
-+ // this.random = random;
-+ // }
-+ //
-+ // public void initialize(
-+ // AlgorithmParameterSpec params,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // if (!(params instanceof ElGamalParameterSpec) && !(params instanceof DHParameterSpec))
-+ // {
-+ // throw new InvalidAlgorithmParameterException("parameter object not a DHParameterSpec or an ElGamalParameterSpec");
-+ // }
-+ //
-+ // if (params instanceof ElGamalParameterSpec)
-+ // {
-+ // ElGamalParameterSpec elParams = (ElGamalParameterSpec)params;
-+
-+ // param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(elParams.getP(), elParams.getG()));
-+ // }
-+ // else
-+ // {
-+ // DHParameterSpec dhParams = (DHParameterSpec)params;
-+ //
-+ // param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(dhParams.getP(), dhParams.getG(), dhParams.getL()));
-+ // }
-+ //
-+ // engine.init(param);
-+ // initialised = true;
-+ // }
-+ //
-+ // public KeyPair generateKeyPair()
-+ // {
-+ // if (!initialised)
-+ // {
-+ // ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
-+ //
-+ // pGen.init(strength, certainty, random);
-+ // param = new ElGamalKeyGenerationParameters(random, pGen.generateParameters());
-+ // engine.init(param);
-+ // initialised = true;
-+ // }
-+ //
-+ // AsymmetricCipherKeyPair pair = engine.generateKeyPair();
-+ // ElGamalPublicKeyParameters pub = (ElGamalPublicKeyParameters)pair.getPublic();
-+ // ElGamalPrivateKeyParameters priv = (ElGamalPrivateKeyParameters)pair.getPrivate();
-+ //
-+ // return new KeyPair(new JCEElGamalPublicKey(pub),
-+ // new JCEElGamalPrivateKey(priv));
-+ // }
-+ // }
-+ // END android-removed
-+
-+ // BEGIN android-removed
-+ // public static class GOST3410
-+ // extends JDKKeyPairGenerator
-+ // {
-+ // GOST3410KeyGenerationParameters param;
-+ // GOST3410KeyPairGenerator engine = new GOST3410KeyPairGenerator();
-+ // GOST3410ParameterSpec gost3410Params;
-+ // int strength = 1024;
-+ // SecureRandom random = null;
-+ // boolean initialised = false;
-+ //
-+ // public GOST3410()
-+ // {
-+ // super("GOST3410");
-+ // }
-+ //
-+ // public void initialize(
-+ // int strength,
-+ // SecureRandom random)
-+ // {
-+ // this.strength = strength;
-+ // this.random = random;
-+ // }
-+ //
-+ // private void init(
-+ // GOST3410ParameterSpec gParams,
-+ // SecureRandom random)
-+ // {
-+ // GOST3410PublicKeyParameterSetSpec spec = gParams.getPublicKeyParameters();
-+ //
-+ // param = new GOST3410KeyGenerationParameters(random, new GOST3410Parameters(spec.getP(), spec.getQ(), spec.getA()));
-+ //
-+ // engine.init(param);
-+ //
-+ // initialised = true;
-+ // gost3410Params = gParams;
-+ // }
-+ //
-+ // public void initialize(
-+ // AlgorithmParameterSpec params,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // if (!(params instanceof GOST3410ParameterSpec))
-+ // {
-+ // throw new InvalidAlgorithmParameterException("parameter object not a GOST3410ParameterSpec");
-+ // }
-+ //
-+ // init((GOST3410ParameterSpec)params, random);
-+ // }
-+ //
-+ // public KeyPair generateKeyPair()
-+ // {
-+ // if (!initialised)
-+ // {
-+ // init(new GOST3410ParameterSpec(CryptoProObjectIdentifiers.gostR3410_94_CryptoPro_A.getId()), new SecureRandom());
-+ // }
-+ //
-+ // AsymmetricCipherKeyPair pair = engine.generateKeyPair();
-+ // GOST3410PublicKeyParameters pub = (GOST3410PublicKeyParameters)pair.getPublic();
-+ // GOST3410PrivateKeyParameters priv = (GOST3410PrivateKeyParameters)pair.getPrivate();
-+ //
-+ // return new KeyPair(new JDKGOST3410PublicKey(pub, gost3410Params), new JDKGOST3410PrivateKey(priv, gost3410Params));
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyStore.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyStore.java 2012-07-27 18:48:00.031478939 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKKeyStore.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKKeyStore.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKKeyStore.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKKeyStore.java 2012-09-11 00:12:44.000000000 +0000
@@ -39,7 +39,12 @@
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.Digest;
@@ -8083,15 +8916,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java
import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
import org.bouncycastle.crypto.io.DigestInputStream;
import org.bouncycastle.crypto.io.DigestOutputStream;
-@@ -442,6 +447,7 @@
- }
- catch (Exception e)
- {
-+
- throw new IOException("Exception creating key: " + e.toString());
- }
- }
-@@ -497,7 +503,13 @@
+@@ -498,7 +503,13 @@
if (entry == null)
{
@@ -8106,7 +8931,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java
}
table.remove(alias);
-@@ -810,12 +822,16 @@
+@@ -817,12 +828,16 @@
//
// we only do an integrity check if the password is provided.
//
@@ -8123,23 +8948,23 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java
+ PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new OpenSSLDigest.SHA1());
+ // END android-changed
pbeGen.init(passKey, salt, iterationCount);
- CipherParameters macParams = pbeGen.generateDerivedMacParameters(hMac.getMacSize());
- Arrays.fill(passKey, (byte)0);
-@@ -866,9 +882,11 @@
+
+ CipherParameters macParams;
+@@ -884,9 +899,11 @@
dOut.write(salt);
dOut.writeInt(iterationCount);
- HMac hMac = new HMac(new SHA1Digest());
+ // BEGIN android-changed
+ HMac hMac = new HMac(new OpenSSLDigest.SHA1());
- MacOutputStream mOut = new MacOutputStream(dOut, hMac);
+ MacOutputStream mOut = new MacOutputStream(hMac);
- PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new SHA1Digest());
+ PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new OpenSSLDigest.SHA1());
+ // END android-changed
byte[] passKey = PBEParametersGenerator.PKCS12PasswordToBytes(password);
pbeGen.init(passKey, salt, iterationCount);
-@@ -956,7 +974,9 @@
+@@ -974,7 +991,9 @@
Cipher cipher = this.makePBECipher(cipherAlg, Cipher.DECRYPT_MODE, password, salt, iterationCount);
CipherInputStream cIn = new CipherInputStream(dIn, cipher);
@@ -8150,476 +8975,21 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java
DigestInputStream dgIn = new DigestInputStream(cIn, dig);
this.loadStore(dgIn);
-@@ -996,8 +1016,9 @@
+@@ -1013,7 +1032,9 @@
cipher = this.makePBECipher(STORE_CIPHER, Cipher.ENCRYPT_MODE, password, salt, iterationCount);
CipherOutputStream cOut = new CipherOutputStream(dOut, cipher);
-- DigestOutputStream dgOut = new DigestOutputStream(cOut, new SHA1Digest());
--
+- DigestOutputStream dgOut = new DigestOutputStream(new SHA1Digest());
+ // BEGIN android-changed
-+ DigestOutputStream dgOut = new DigestOutputStream(cOut, new OpenSSLDigest.SHA1());
++ DigestOutputStream dgOut = new DigestOutputStream(new OpenSSLDigest.SHA1());
+ // END android-changed
- this.saveStore(dgOut);
- Digest dig = dgOut.getDigest();
-@@ -1009,5 +1030,5 @@
+ this.saveStore(new TeeOutputStream(cOut, dgOut));
- cOut.close();
- }
-- }
-+ }
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKMessageDigest.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKMessageDigest.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKMessageDigest.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKMessageDigest.java 2012-07-27 18:48:00.031478939 +0000
-@@ -57,36 +57,38 @@
- {
- super(new SHA1Digest());
- }
--
-+
- public Object clone()
- throws CloneNotSupportedException
- {
- SHA1 d = (SHA1)super.clone();
- d.digest = new SHA1Digest((SHA1Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class SHA224
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public SHA224()
-- {
-- super(new SHA224Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- SHA224 d = (SHA224)super.clone();
-- d.digest = new SHA224Digest((SHA224Digest)digest);
--
-+
- return d;
- }
- }
--
-+
-+ // BEGIN android-removed
-+ // static public class SHA224
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public SHA224()
-+ // {
-+ // super(new SHA224Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // SHA224 d = (SHA224)super.clone();
-+ // d.digest = new SHA224Digest((SHA224Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ // END android-removed
-+
- static public class SHA256
- extends JDKMessageDigest
- implements Cloneable
-@@ -95,13 +97,13 @@
- {
- super(new SHA256Digest());
- }
--
-+
- public Object clone()
- throws CloneNotSupportedException
- {
- SHA256 d = (SHA256)super.clone();
- d.digest = new SHA256Digest((SHA256Digest)digest);
--
-+
- return d;
- }
- }
-@@ -144,43 +146,45 @@
- }
- }
-
-- static public class MD2
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public MD2()
-- {
-- super(new MD2Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- MD2 d = (MD2)super.clone();
-- d.digest = new MD2Digest((MD2Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class MD4
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public MD4()
-- {
-- super(new MD4Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- MD4 d = (MD4)super.clone();
-- d.digest = new MD4Digest((MD4Digest)digest);
--
-- return d;
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class MD2
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public MD2()
-+ // {
-+ // super(new MD2Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // MD2 d = (MD2)super.clone();
-+ // d.digest = new MD2Digest((MD2Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class MD4
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public MD4()
-+ // {
-+ // super(new MD4Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // MD4 d = (MD4)super.clone();
-+ // d.digest = new MD4Digest((MD4Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ // END android-removed
-
- static public class MD5
- extends JDKMessageDigest
-@@ -190,147 +194,149 @@
- {
- super(new MD5Digest());
- }
--
-+
- public Object clone()
- throws CloneNotSupportedException
- {
- MD5 d = (MD5)super.clone();
- d.digest = new MD5Digest((MD5Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class RIPEMD128
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public RIPEMD128()
-- {
-- super(new RIPEMD128Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- RIPEMD128 d = (RIPEMD128)super.clone();
-- d.digest = new RIPEMD128Digest((RIPEMD128Digest)digest);
--
-+
- return d;
- }
- }
-
-- static public class RIPEMD160
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public RIPEMD160()
-- {
-- super(new RIPEMD160Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- RIPEMD160 d = (RIPEMD160)super.clone();
-- d.digest = new RIPEMD160Digest((RIPEMD160Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class RIPEMD256
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public RIPEMD256()
-- {
-- super(new RIPEMD256Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- RIPEMD256 d = (RIPEMD256)super.clone();
-- d.digest = new RIPEMD256Digest((RIPEMD256Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class RIPEMD320
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public RIPEMD320()
-- {
-- super(new RIPEMD320Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- RIPEMD320 d = (RIPEMD320)super.clone();
-- d.digest = new RIPEMD320Digest((RIPEMD320Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class Tiger
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public Tiger()
-- {
-- super(new TigerDigest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- Tiger d = (Tiger)super.clone();
-- d.digest = new TigerDigest((TigerDigest)digest);
--
-- return d;
-- }
-- }
--
-- static public class GOST3411
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public GOST3411()
-- {
-- super(new GOST3411Digest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- GOST3411 d = (GOST3411)super.clone();
-- d.digest = new GOST3411Digest((GOST3411Digest)digest);
--
-- return d;
-- }
-- }
--
-- static public class Whirlpool
-- extends JDKMessageDigest
-- implements Cloneable
-- {
-- public Whirlpool()
-- {
-- super(new WhirlpoolDigest());
-- }
--
-- public Object clone()
-- throws CloneNotSupportedException
-- {
-- Whirlpool d = (Whirlpool)super.clone();
-- d.digest = new WhirlpoolDigest((WhirlpoolDigest)digest);
--
-- return d;
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class RIPEMD128
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public RIPEMD128()
-+ // {
-+ // super(new RIPEMD128Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // RIPEMD128 d = (RIPEMD128)super.clone();
-+ // d.digest = new RIPEMD128Digest((RIPEMD128Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class RIPEMD160
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public RIPEMD160()
-+ // {
-+ // super(new RIPEMD160Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // RIPEMD160 d = (RIPEMD160)super.clone();
-+ // d.digest = new RIPEMD160Digest((RIPEMD160Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class RIPEMD256
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public RIPEMD256()
-+ // {
-+ // super(new RIPEMD256Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // RIPEMD256 d = (RIPEMD256)super.clone();
-+ // d.digest = new RIPEMD256Digest((RIPEMD256Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class RIPEMD320
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public RIPEMD320()
-+ // {
-+ // super(new RIPEMD320Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // RIPEMD320 d = (RIPEMD320)super.clone();
-+ // d.digest = new RIPEMD320Digest((RIPEMD320Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class Tiger
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public Tiger()
-+ // {
-+ // super(new TigerDigest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // Tiger d = (Tiger)super.clone();
-+ // d.digest = new TigerDigest((TigerDigest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class GOST3411
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public GOST3411()
-+ // {
-+ // super(new GOST3411Digest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // GOST3411 d = (GOST3411)super.clone();
-+ // d.digest = new GOST3411Digest((GOST3411Digest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ //
-+ // static public class Whirlpool
-+ // extends JDKMessageDigest
-+ // implements Cloneable
-+ // {
-+ // public Whirlpool()
-+ // {
-+ // super(new WhirlpoolDigest());
-+ // }
-+ //
-+ // public Object clone()
-+ // throws CloneNotSupportedException
-+ // {
-+ // Whirlpool d = (Whirlpool)super.clone();
-+ // d.digest = new WhirlpoolDigest((WhirlpoolDigest)digest);
-+ //
-+ // return d;
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 2012-07-27 18:48:00.031478939 +0000
-@@ -260,10 +260,13 @@
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 2012-09-11 00:12:44.000000000 +0000
+@@ -261,10 +261,13 @@
}
}
@@ -8637,7 +9007,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
}
/**
-@@ -438,6 +441,14 @@
+@@ -439,6 +442,14 @@
public Date engineGetCreationDate(String alias)
{
@@ -8652,7 +9022,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
return new Date();
}
-@@ -496,6 +507,11 @@
+@@ -497,6 +508,11 @@
Certificate[] chain)
throws KeyStoreException
{
@@ -8664,7 +9034,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
if ((key instanceof PrivateKey) && (chain == null))
{
throw new KeyStoreException("no certificate chain for private key");
-@@ -507,12 +523,18 @@
+@@ -508,12 +524,18 @@
}
keys.put(alias, key);
@@ -8683,7 +9053,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
}
public int engineSize()
-@@ -1488,7 +1510,9 @@
+@@ -1489,7 +1511,9 @@
{
byte[] res = calculatePbeMac(id_SHA1, mSalt, itCount, password, false, data);
@@ -8694,7 +9064,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
DigestInfo dInfo = new DigestInfo(algId, res);
mData = new MacData(dInfo, mSalt, itCount);
-@@ -1545,32 +1569,34 @@
+@@ -1546,32 +1570,34 @@
}
}
@@ -8712,7 +9082,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
- {
- public DefPKCS12KeyStore()
- {
-- super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbewithSHAAnd40BitRC2_CBC);
+- super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC);
- }
- }
-
@@ -8739,7 +9109,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
+ // {
+ // public DefPKCS12KeyStore()
+ // {
-+ // super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbewithSHAAnd40BitRC2_CBC);
++ // super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC);
+ // }
+ // }
+ //
@@ -8755,16 +9125,18 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
private static class IgnoresCaseHashtable
{
-@@ -1579,7 +1605,7 @@
+@@ -1580,7 +1606,9 @@
public void put(String key, Object value)
{
- String lower = Strings.toLowerCase(key);
++ // BEGIN android-changed
+ String lower = (key == null) ? null : Strings.toLowerCase(key);
++ // END android-changed
String k = (String)keys.get(lower);
if (k != null)
{
-@@ -1597,7 +1623,9 @@
+@@ -1598,7 +1626,9 @@
public Object remove(String alias)
{
@@ -8775,7 +9147,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
if (k == null)
{
return null;
-@@ -1608,7 +1636,9 @@
+@@ -1609,7 +1639,9 @@
public Object get(String alias)
{
@@ -8786,149 +9158,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore
if (k == null)
{
return null;
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PBE.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PBE.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PBE.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PBE.java 2012-07-27 18:48:00.031478939 +0000
-@@ -7,12 +7,18 @@
-
- import org.bouncycastle.crypto.CipherParameters;
- import org.bouncycastle.crypto.PBEParametersGenerator;
--import org.bouncycastle.crypto.digests.MD2Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.MD2Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.MD5Digest;
--import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA1Digest;
- import org.bouncycastle.crypto.digests.SHA256Digest;
--import org.bouncycastle.crypto.digests.TigerDigest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.TigerDigest;
-+// END android-removed
- import org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator;
- import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
- import org.bouncycastle.crypto.generators.PKCS5S1ParametersGenerator;
-@@ -53,9 +59,11 @@
- {
- switch (hash)
- {
-- case MD2:
-- generator = new PKCS5S1ParametersGenerator(new MD2Digest());
-- break;
-+ // BEGIN android-removed
-+ // case MD2:
-+ // generator = new PKCS5S1ParametersGenerator(new MD2Digest());
-+ // break;
-+ // END android-removed
- case MD5:
- generator = new PKCS5S1ParametersGenerator(new MD5Digest());
- break;
-@@ -74,21 +82,25 @@
- {
- switch (hash)
- {
-- case MD2:
-- generator = new PKCS12ParametersGenerator(new MD2Digest());
-- break;
-+ // BEGIN android-removed
-+ // case MD2:
-+ // generator = new PKCS12ParametersGenerator(new MD2Digest());
-+ // break;
-+ // END android-removed
- case MD5:
- generator = new PKCS12ParametersGenerator(new MD5Digest());
- break;
- case SHA1:
- generator = new PKCS12ParametersGenerator(new SHA1Digest());
- break;
-- case RIPEMD160:
-- generator = new PKCS12ParametersGenerator(new RIPEMD160Digest());
-- break;
-- case TIGER:
-- generator = new PKCS12ParametersGenerator(new TigerDigest());
-- break;
-+ // BEGIN android-removed
-+ // case RIPEMD160:
-+ // generator = new PKCS12ParametersGenerator(new RIPEMD160Digest());
-+ // break;
-+ // case TIGER:
-+ // generator = new PKCS12ParametersGenerator(new TigerDigest());
-+ // break;
-+ // END android-removed
- case SHA256:
- generator = new PKCS12ParametersGenerator(new SHA256Digest());
- break;
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPath.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPath.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPath.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPath.java 2012-07-27 18:48:00.041479127 +0000
-@@ -33,7 +33,9 @@
- import org.bouncycastle.asn1.pkcs.ContentInfo;
- import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
- import org.bouncycastle.asn1.pkcs.SignedData;
--import org.bouncycastle.openssl.PEMWriter;
-+// BEGIN android-removed
-+// import org.bouncycastle.openssl.PEMWriter;
-+// END android-removed
-
- /**
- * CertPath implementation for X.509 certificates.
-@@ -295,27 +297,29 @@
- return toDEREncoded(new ContentInfo(
- PKCSObjectIdentifiers.signedData, sd));
- }
-- else if (encoding.equalsIgnoreCase("PEM"))
-- {
-- ByteArrayOutputStream bOut = new ByteArrayOutputStream();
-- PEMWriter pWrt = new PEMWriter(new OutputStreamWriter(bOut));
--
-- try
-- {
-- for (int i = 0; i != certificates.size(); i++)
-- {
-- pWrt.writeObject(certificates.get(i));
-- }
--
-- pWrt.close();
-- }
-- catch (Exception e)
-- {
-- throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
-- }
--
-- return bOut.toByteArray();
-- }
-+ // BEGIN android-removed
-+ // else if (encoding.equalsIgnoreCase("PEM"))
-+ // {
-+ // ByteArrayOutputStream bOut = new ByteArrayOutputStream();
-+ // PEMWriter pWrt = new PEMWriter(new OutputStreamWriter(bOut));
-+ //
-+ // try
-+ // {
-+ // for (int i = 0; i != certificates.size(); i++)
-+ // {
-+ // pWrt.writeObject(certificates.get(i));
-+ // }
-+ //
-+ // pWrt.close();
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
-+ // }
-+ //
-+ // return bOut.toByteArray();
-+ // }
-+ // END android-removed
- else
- {
- throw new CertificateEncodingException("unsupported encoding: " + encoding);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2012-07-27 18:48:00.031478939 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2012-09-11 00:12:44.000000000 +0000
@@ -1,5 +1,8 @@
package org.bouncycastle.jce.provider;
@@ -8938,15 +9170,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValid
import java.security.InvalidAlgorithmParameterException;
import java.security.PublicKey;
import java.security.cert.CertPath;
-@@ -13,6 +16,7 @@
- import java.security.cert.TrustAnchor;
- import java.security.cert.X509Certificate;
- import java.util.ArrayList;
-+import java.util.Arrays;
- import java.util.HashSet;
- import java.util.Iterator;
- import java.util.List;
-@@ -33,6 +37,9 @@
+@@ -33,6 +36,9 @@
public class PKIXCertPathValidatorSpi
extends CertPathValidatorSpi
{
@@ -8956,7 +9180,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValid
public CertPathValidatorResult engineValidate(
CertPath certPath,
-@@ -75,6 +82,22 @@
+@@ -75,6 +81,22 @@
{
throw new CertPathValidatorException("Certification path is empty.", null, certPath, 0);
}
@@ -8979,7 +9203,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValid
//
// (b)
-@@ -251,6 +274,15 @@
+@@ -251,6 +273,15 @@
for (index = certs.size() - 1; index >= 0; index--)
{
@@ -8995,9 +9219,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValid
// try
// {
//
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 2012-07-27 18:48:00.031478939 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 2012-09-11 00:12:44.000000000 +0000
@@ -1533,7 +1533,9 @@
for (Enumeration e = permitted.getObjects(); e.hasMoreElements();)
{
@@ -9009,143 +9233,11 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXNameConstrain
if (subtreesMap.get(tagNo) == null)
{
subtreesMap.put(tagNo, new HashSet());
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/WrapCipherSpi.java bcprov-jdk16-146/org/bouncycastle/jce/provider/WrapCipherSpi.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/WrapCipherSpi.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/WrapCipherSpi.java 2012-07-27 18:48:00.031478939 +0000
-@@ -22,8 +22,10 @@
- import javax.crypto.ShortBufferException;
- import javax.crypto.spec.IvParameterSpec;
- import javax.crypto.spec.PBEParameterSpec;
--import javax.crypto.spec.RC2ParameterSpec;
--import javax.crypto.spec.RC5ParameterSpec;
-+// BEGIN android-removed
-+// import javax.crypto.spec.RC2ParameterSpec;
-+// import javax.crypto.spec.RC5ParameterSpec;
-+// END android-removed
- import javax.crypto.spec.SecretKeySpec;
-
- import org.bouncycastle.asn1.ASN1InputStream;
-@@ -36,7 +38,9 @@
- import org.bouncycastle.crypto.CipherParameters;
- import org.bouncycastle.crypto.InvalidCipherTextException;
- import org.bouncycastle.crypto.Wrapper;
--import org.bouncycastle.crypto.engines.RC2WrapEngine;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.engines.RC2WrapEngine;
-+// END android-removed
- import org.bouncycastle.crypto.params.KeyParameter;
- import org.bouncycastle.crypto.params.ParametersWithIV;
-
-@@ -50,8 +54,10 @@
- {
- IvParameterSpec.class,
- PBEParameterSpec.class,
-- RC2ParameterSpec.class,
-- RC5ParameterSpec.class
-+ // BEGIN android-removed
-+ // RC2ParameterSpec.class,
-+ // RC5ParameterSpec.class
-+ // END android-removed
- };
-
- protected int pbeType = PKCS12;
-@@ -263,16 +269,19 @@
- return null;
- }
-
-+ // BEGIN android-changed
-+ // added ShortBufferException to throws statement
- protected int engineDoFinal(
- byte[] input,
- int inputOffset,
- int inputLen,
- byte[] output,
- int outputOffset)
-- throws IllegalBlockSizeException, BadPaddingException
-+ throws IllegalBlockSizeException, BadPaddingException, ShortBufferException
- {
- return 0;
- }
-+ // END android-changed
-
- protected byte[] engineWrap(
- Key key)
-@@ -305,7 +314,12 @@
- byte[] wrappedKey,
- String wrappedKeyAlgorithm,
- int wrappedKeyType)
-- throws InvalidKeyException
-+ // BEGIN android-removed
-+ // throws InvalidKeyException
-+ // END android-removed
-+ // BEGIN android-added
-+ throws InvalidKeyException, NoSuchAlgorithmException
-+ // END android-added
- {
- byte[] encoded;
- try
-@@ -356,10 +370,12 @@
- {
- privKey = new JCEECPrivateKey(in);
- }
-- else if (oid.equals(CryptoProObjectIdentifiers.gostR3410_94))
-- {
-- privKey = new JDKGOST3410PrivateKey(in);
-- }
-+ // BEGIN android-removed
-+ // else if (oid.equals(CryptoProObjectIdentifiers.gostR3410_94))
-+ // {
-+ // privKey = new JDKGOST3410PrivateKey(in);
-+ // }
-+ // END android-removed
- else if (oid.equals(X9ObjectIdentifiers.id_dsa))
- {
- privKey = new JDKDSAPrivateKey(in);
-@@ -403,10 +419,12 @@
- {
- throw new InvalidKeyException("Unknown key type " + e.getMessage());
- }
-- catch (NoSuchAlgorithmException e)
-- {
-- throw new InvalidKeyException("Unknown key type " + e.getMessage());
-- }
-+ // BEGIN android-removed
-+ // catch (NoSuchAlgorithmException e)
-+ // {
-+ // throw new InvalidKeyException("Unknown key type " + e.getMessage());
-+ // }
-+ // END android-removed
- catch (InvalidKeySpecException e2)
- {
- throw new InvalidKeyException("Unknown key type " + e2.getMessage());
-@@ -420,12 +438,14 @@
- // classes that inherit directly from us
- //
-
-- public static class RC2Wrap
-- extends WrapCipherSpi
-- {
-- public RC2Wrap()
-- {
-- super(new RC2WrapEngine());
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class RC2Wrap
-+ // extends WrapCipherSpi
-+ // {
-+ // public RC2Wrap()
-+ // {
-+ // super(new RC2WrapEngine());
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509CertificateObject.java bcprov-jdk16-146/org/bouncycastle/jce/provider/X509CertificateObject.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509CertificateObject.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/X509CertificateObject.java 2012-07-27 18:48:00.031478939 +0000
-@@ -520,12 +520,20 @@
- return JDKKeyFactory.createPublicKeyFromPublicKeyInfo(c.getSubjectPublicKeyInfo());
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509CertificateObject.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509CertificateObject.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509CertificateObject.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509CertificateObject.java 2012-09-11 00:12:44.000000000 +0000
+@@ -544,12 +544,20 @@
+ }
}
+ // BEGIN android-changed
@@ -9156,28 +9248,19 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509CertificateOb
{
try
{
-- return c.getEncoded(ASN1Encodable.DER);
+- return c.getEncoded(ASN1Encoding.DER);
+ // BEGIN android-changed
+ if (encoded == null) {
-+ encoded = c.getEncoded(ASN1Encodable.DER);
++ encoded = c.getEncoded(ASN1Encoding.DER);
+ }
+ return encoded;
+ // END android-changed
}
catch (IOException e)
{
-@@ -711,7 +719,7 @@
- {
- Signature signature;
- String sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
--
-+
- try
- {
- signature = Signature.getInstance(sigName, BouncyCastleProvider.PROVIDER_NAME);
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java bcprov-jdk16-146/org/bouncycastle/jce/provider/X509SignatureUtil.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/X509SignatureUtil.java 2012-07-27 18:48:00.031478939 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509SignatureUtil.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509SignatureUtil.java 2012-09-11 00:12:44.000000000 +0000
@@ -25,7 +25,9 @@
class X509SignatureUtil
@@ -9268,1564 +9351,21 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509SignatureUtil
else
{
return digestAlgOID.getId();
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/EC.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/EC.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/EC.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/EC.java 2012-07-27 18:48:00.031478939 +0000
-@@ -4,8 +4,10 @@
-
- import org.bouncycastle.asn1.DERObjectIdentifier;
- import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
--import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk15on-147/org/bouncycastle/x509/X509Util.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/x509/X509Util.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/x509/X509Util.java 2012-09-11 00:12:44.000000000 +0000
+@@ -30,7 +30,9 @@
+ import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+ import org.bouncycastle.asn1.pkcs.RSASSAPSSparams;
-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
+// BEGIN android-removed
-+// import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
+// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
+// END android-removed
+ import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
-
- public class EC
-@@ -16,39 +18,49 @@
- public Mappings()
- {
- put("KeyAgreement.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DH");
-- put("KeyAgreement.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHC");
-- put("KeyAgreement.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQV");
-- put("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHwithSHA1KDF");
-- put("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQVwithSHA1KDF");
-+ // BEGIN android-removed
-+ // put("KeyAgreement.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHC");
-+ // put("KeyAgreement.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQV");
-+ // put("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHwithSHA1KDF");
-+ // put("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQVwithSHA1KDF");
-+ // END android-removed
-
- put("KeyFactory.EC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$EC");
-- put("KeyFactory.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDSA");
-- put("KeyFactory.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDH");
-- put("KeyFactory.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDHC");
-- put("KeyFactory.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECMQV");
-+ // BEGIN android-removed
-+ // put("KeyFactory.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDSA");
-+ // put("KeyFactory.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDH");
-+ // put("KeyFactory.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDHC");
-+ // put("KeyFactory.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECMQV");
-+ // END android-removed
- put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.id_ecPublicKey, "EC");
- // TODO Should this be an alias for ECDH?
- put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC");
-- put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
--
-- put("KeyFactory.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECGOST3410");
-- put("Alg.Alias.KeyFactory.GOST-3410-2001", "ECGOST3410");
-- put("Alg.Alias.KeyFactory.ECGOST-3410", "ECGOST3410");
-- put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_2001, "ECGOST3410");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
-+ //
-+ // put("KeyFactory.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECGOST3410");
-+ // put("Alg.Alias.KeyFactory.GOST-3410-2001", "ECGOST3410");
-+ // put("Alg.Alias.KeyFactory.ECGOST-3410", "ECGOST3410");
-+ // put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_2001, "ECGOST3410");
-+ // END android-removed
-
- put("KeyPairGenerator.EC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$EC");
-- put("KeyPairGenerator.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDSA");
-- put("KeyPairGenerator.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
-- put("KeyPairGenerator.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDHC");
-- put("KeyPairGenerator.ECIES", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
-- put("KeyPairGenerator.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECMQV");
-+ // BEGIN android-removed
-+ // put("KeyPairGenerator.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDSA");
-+ // put("KeyPairGenerator.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
-+ // put("KeyPairGenerator.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDHC");
-+ // put("KeyPairGenerator.ECIES", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
-+ // put("KeyPairGenerator.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECMQV");
-+ // END android-removed
- // TODO Should this be an alias for ECDH?
- put("Alg.Alias.KeyPairGenerator." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC");
-- put("Alg.Alias.KeyPairGenerator." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
--
-- put("KeyPairGenerator.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECGOST3410");
-- put("Alg.Alias.KeyPairGenerator.ECGOST-3410", "ECGOST3410");
-- put("Alg.Alias.KeyPairGenerator.GOST-3410-2001", "ECGOST3410");
-+ // BEGIN android-removed
-+ // put("Alg.Alias.KeyPairGenerator." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
-+ //
-+ // put("KeyPairGenerator.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECGOST3410");
-+ // put("Alg.Alias.KeyPairGenerator.ECGOST-3410", "ECGOST3410");
-+ // put("Alg.Alias.KeyPairGenerator.GOST-3410-2001", "ECGOST3410");
-+ // END android-removed
-
- put("Signature.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA");
- put("Signature.NONEwithECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSAnone");
-@@ -60,23 +72,27 @@
- put("Alg.Alias.Signature.SHA1WithECDSA", "ECDSA");
- put("Alg.Alias.Signature.ECDSAWithSHA1", "ECDSA");
- put("Alg.Alias.Signature.1.2.840.10045.4.1", "ECDSA");
-- put("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
--
-- addSignatureAlgorithm("SHA224", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224);
-+ // BEGIN android-removed
-+ // put("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
-+ //
-+ // addSignatureAlgorithm("SHA224", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224);
-+ // END android-removed
- addSignatureAlgorithm("SHA256", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA256", X9ObjectIdentifiers.ecdsa_with_SHA256);
- addSignatureAlgorithm("SHA384", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA384", X9ObjectIdentifiers.ecdsa_with_SHA384);
- addSignatureAlgorithm("SHA512", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA512", X9ObjectIdentifiers.ecdsa_with_SHA512);
-- addSignatureAlgorithm("RIPEMD160", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
--
-- put("Signature.SHA1WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR");
-- put("Signature.SHA224WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR224");
-- put("Signature.SHA256WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR256");
-- put("Signature.SHA384WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR384");
-- put("Signature.SHA512WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR512");
--
-- addSignatureAlgorithm("SHA1", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
-- addSignatureAlgorithm("SHA224", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
-- addSignatureAlgorithm("SHA256", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
-+ // BEGIN android-removed
-+ // addSignatureAlgorithm("RIPEMD160", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
-+ //
-+ // put("Signature.SHA1WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR");
-+ // put("Signature.SHA224WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR224");
-+ // put("Signature.SHA256WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR256");
-+ // put("Signature.SHA384WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR384");
-+ // put("Signature.SHA512WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR512");
-+ //
-+ // addSignatureAlgorithm("SHA1", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
-+ // addSignatureAlgorithm("SHA224", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
-+ // addSignatureAlgorithm("SHA256", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
-+ // END android-removed
- }
-
- private void addSignatureAlgorithm(
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java 2012-07-27 18:48:00.031478939 +0000
-@@ -1,10 +1,14 @@
- package org.bouncycastle.jce.provider.asymmetric.ec;
-
- import org.bouncycastle.asn1.DERObjectIdentifier;
--import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
-+// BEGIN android-removed
-+// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
-+// END android-removed
- import org.bouncycastle.asn1.nist.NISTNamedCurves;
- import org.bouncycastle.asn1.sec.SECNamedCurves;
--import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
-+// BEGIN android-removed
-+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
-+// END android-removed
- import org.bouncycastle.asn1.x9.X962NamedCurves;
- import org.bouncycastle.asn1.x9.X9ECParameters;
- import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
-@@ -167,14 +171,16 @@
- {
- oid = NISTNamedCurves.getOID(name);
- }
-- if (oid == null)
-- {
-- oid = TeleTrusTNamedCurves.getOID(name);
-- }
-- if (oid == null)
-- {
-- oid = ECGOST3410NamedCurves.getOID(name);
-- }
-+ // BEGIN android-removed
-+ // if (oid == null)
-+ // {
-+ // oid = TeleTrusTNamedCurves.getOID(name);
-+ // }
-+ // if (oid == null)
-+ // {
-+ // oid = ECGOST3410NamedCurves.getOID(name);
-+ // }
-+ // END android-removed
- }
-
- return oid;
-@@ -192,10 +198,12 @@
- {
- params = NISTNamedCurves.getByOID(oid);
- }
-- if (params == null)
-- {
-- params = TeleTrusTNamedCurves.getByOID(oid);
-- }
-+ // BEGIN android-removed
-+ // if (params == null)
-+ // {
-+ // params = TeleTrusTNamedCurves.getByOID(oid);
-+ // }
-+ // END android-removed
- }
-
- return params;
-@@ -213,14 +221,16 @@
- {
- name = NISTNamedCurves.getName(oid);
- }
-- if (name == null)
-- {
-- name = TeleTrusTNamedCurves.getName(oid);
-- }
-- if (name == null)
-- {
-- name = ECGOST3410NamedCurves.getName(oid);
-- }
-+ // BEGIN android-removed
-+ // if (name == null)
-+ // {
-+ // name = TeleTrusTNamedCurves.getName(oid);
-+ // }
-+ // if (name == null)
-+ // {
-+ // name = ECGOST3410NamedCurves.getName(oid);
-+ // }
-+ // END android-removed
- }
-
- return name;
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java 2012-07-27 18:48:00.031478939 +0000
-@@ -24,20 +24,26 @@
- import org.bouncycastle.crypto.CipherParameters;
- import org.bouncycastle.crypto.DerivationFunction;
- import org.bouncycastle.crypto.agreement.ECDHBasicAgreement;
--import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement;
--import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement;
--import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters;
--import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement;
-+// import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement;
-+// import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters;
-+// import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA1Digest;
- import org.bouncycastle.crypto.params.ECDomainParameters;
- import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
- import org.bouncycastle.crypto.params.ECPublicKeyParameters;
--import org.bouncycastle.crypto.params.MQVPrivateParameters;
--import org.bouncycastle.crypto.params.MQVPublicParameters;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.params.MQVPrivateParameters;
-+// import org.bouncycastle.crypto.params.MQVPublicParameters;
-+// END android-removed
- import org.bouncycastle.jce.interfaces.ECPrivateKey;
- import org.bouncycastle.jce.interfaces.ECPublicKey;
--import org.bouncycastle.jce.interfaces.MQVPrivateKey;
--import org.bouncycastle.jce.interfaces.MQVPublicKey;
-+// BEGIN android-removed
-+// import org.bouncycastle.jce.interfaces.MQVPrivateKey;
-+// import org.bouncycastle.jce.interfaces.MQVPublicKey;
-+// END android-removed
-
- /**
- * Diffie-Hellman key agreement using elliptic curve keys, ala IEEE P1363
-@@ -53,9 +59,11 @@
-
- static
- {
-- Integer i128 = new Integer(128);
-- Integer i192 = new Integer(192);
-- Integer i256 = new Integer(256);
-+ // BEGIN android-changed
-+ Integer i128 = Integer.valueOf(128);
-+ Integer i192 = Integer.valueOf(192);
-+ Integer i256 = Integer.valueOf(256);
-+ // END android-changed
-
- algorithms.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), i128);
- algorithms.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), i192);
-@@ -70,7 +78,9 @@
- private BigInteger result;
- private ECDomainParameters parameters;
- private BasicAgreement agreement;
-- private DerivationFunction kdf;
-+ // BEGIN android-removed
-+ // private DerivationFunction kdf;
-+ // END android-removed
-
- private byte[] bigIntToBytes(
- BigInteger r)
-@@ -85,7 +95,9 @@
- {
- this.kaAlgorithm = kaAlgorithm;
- this.agreement = agreement;
-- this.kdf = kdf;
-+ // BEGIN android-removed
-+ // this.kdf = kdf;
-+ // END android-removed
- }
-
- protected Key engineDoPhase(
-@@ -104,25 +116,27 @@
- }
-
- CipherParameters pubKey;
-- if (agreement instanceof ECMQVBasicAgreement)
-- {
-- if (!(key instanceof MQVPublicKey))
-- {
-- throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
-- + getSimpleName(MQVPublicKey.class) + " for doPhase");
-- }
--
-- MQVPublicKey mqvPubKey = (MQVPublicKey)key;
-- ECPublicKeyParameters staticKey = (ECPublicKeyParameters)
-- ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey());
-- ECPublicKeyParameters ephemKey = (ECPublicKeyParameters)
-- ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey());
--
-- pubKey = new MQVPublicParameters(staticKey, ephemKey);
--
-- // TODO Validate that all the keys are using the same parameters?
-- }
-- else
-+ // BEGIN android-removed
-+ // if (agreement instanceof ECMQVBasicAgreement)
-+ // {
-+ // if (!(key instanceof MQVPublicKey))
-+ // {
-+ // throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
-+ // + getSimpleName(MQVPublicKey.class) + " for doPhase");
-+ // }
-+ //
-+ // MQVPublicKey mqvPubKey = (MQVPublicKey)key;
-+ // ECPublicKeyParameters staticKey = (ECPublicKeyParameters)
-+ // ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey());
-+ // ECPublicKeyParameters ephemKey = (ECPublicKeyParameters)
-+ // ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey());
-+ //
-+ // pubKey = new MQVPublicParameters(staticKey, ephemKey);
-+ //
-+ // // TODO Validate that all the keys are using the same parameters?
-+ // }
-+ // else
-+ // END android-removed
- {
- if (!(key instanceof ECPublicKey))
- {
-@@ -143,11 +157,13 @@
- protected byte[] engineGenerateSecret()
- throws IllegalStateException
- {
-- if (kdf != null)
-- {
-- throw new UnsupportedOperationException(
-- "KDF can only be used when algorithm is known");
-- }
-+ // BEGIN android-removed
-+ // if (kdf != null)
-+ // {
-+ // throw new UnsupportedOperationException(
-+ // "KDF can only be used when algorithm is known");
-+ // }
-+ // END android-removed
-
- return bigIntToBytes(result);
- }
-@@ -175,23 +191,25 @@
- {
- byte[] secret = bigIntToBytes(result);
-
-- if (kdf != null)
-- {
-- if (!algorithms.containsKey(algorithm))
-- {
-- throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm);
-- }
--
-- int keySize = ((Integer)algorithms.get(algorithm)).intValue();
--
-- DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret);
--
-- byte[] keyBytes = new byte[keySize / 8];
-- kdf.init(params);
-- kdf.generateBytes(keyBytes, 0, keyBytes.length);
-- secret = keyBytes;
-- }
-- else
-+ // BEGIN android-removed
-+ // if (kdf != null)
-+ // {
-+ // if (!algorithms.containsKey(algorithm))
-+ // {
-+ // throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm);
-+ // }
-+ //
-+ // int keySize = ((Integer)algorithms.get(algorithm)).intValue();
-+ //
-+ // DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret);
-+ //
-+ // byte[] keyBytes = new byte[keySize / 8];
-+ // kdf.init(params);
-+ // kdf.generateBytes(keyBytes, 0, keyBytes.length);
-+ // secret = keyBytes;
-+ // }
-+ // else
-+ // END android-removed
- {
- // TODO Should we be ensuring the key is the right length?
- }
-@@ -219,35 +237,37 @@
- private void initFromKey(Key key)
- throws InvalidKeyException
- {
-- if (agreement instanceof ECMQVBasicAgreement)
-- {
-- if (!(key instanceof MQVPrivateKey))
-- {
-- throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
-- + getSimpleName(MQVPrivateKey.class) + " for initialisation");
-- }
--
-- MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key;
-- ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters)
-- ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey());
-- ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters)
-- ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey());
--
-- ECPublicKeyParameters ephemPubKey = null;
-- if (mqvPrivKey.getEphemeralPublicKey() != null)
-- {
-- ephemPubKey = (ECPublicKeyParameters)
-- ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey());
-- }
--
-- MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey);
-- this.parameters = staticPrivKey.getParameters();
--
-- // TODO Validate that all the keys are using the same parameters?
--
-- agreement.init(localParams);
-- }
-- else
-+ // BEGIN android-removed
-+ // if (agreement instanceof ECMQVBasicAgreement)
-+ // {
-+ // if (!(key instanceof MQVPrivateKey))
-+ // {
-+ // throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
-+ // + getSimpleName(MQVPrivateKey.class) + " for initialisation");
-+ // }
-+ //
-+ // MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key;
-+ // ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters)
-+ // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey());
-+ // ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters)
-+ // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey());
-+ //
-+ // ECPublicKeyParameters ephemPubKey = null;
-+ // if (mqvPrivKey.getEphemeralPublicKey() != null)
-+ // {
-+ // ephemPubKey = (ECPublicKeyParameters)
-+ // ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey());
-+ // }
-+ //
-+ // MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey);
-+ // this.parameters = staticPrivKey.getParameters();
-+ //
-+ // // TODO Validate that all the keys are using the same parameters?
-+ //
-+ // agreement.init(localParams);
-+ // }
-+ // else
-+ // END android-removed
- {
- if (!(key instanceof ECPrivateKey))
- {
-@@ -278,39 +298,41 @@
- }
- }
-
-- public static class DHC
-- extends KeyAgreement
-- {
-- public DHC()
-- {
-- super("ECDHC", new ECDHCBasicAgreement(), null);
-- }
-- }
--
-- public static class MQV
-- extends KeyAgreement
-- {
-- public MQV()
-- {
-- super("ECMQV", new ECMQVBasicAgreement(), null);
-- }
-- }
--
-- public static class DHwithSHA1KDF
-- extends KeyAgreement
-- {
-- public DHwithSHA1KDF()
-- {
-- super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
-- }
-- }
--
-- public static class MQVwithSHA1KDF
-- extends KeyAgreement
-- {
-- public MQVwithSHA1KDF()
-- {
-- super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class DHC
-+ // extends KeyAgreement
-+ // {
-+ // public DHC()
-+ // {
-+ // super("ECDHC", new ECDHCBasicAgreement(), null);
-+ // }
-+ // }
-+ //
-+ // public static class MQV
-+ // extends KeyAgreement
-+ // {
-+ // public MQV()
-+ // {
-+ // super("ECMQV", new ECMQVBasicAgreement(), null);
-+ // }
-+ // }
-+ //
-+ // public static class DHwithSHA1KDF
-+ // extends KeyAgreement
-+ // {
-+ // public DHwithSHA1KDF()
-+ // {
-+ // super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
-+ // }
-+ // }
-+ //
-+ // public static class MQVwithSHA1KDF
-+ // extends KeyAgreement
-+ // {
-+ // public MQVwithSHA1KDF()
-+ // {
-+ // super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
-+ // }
-+ // }
-+ // END android-removed
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java 2012-07-27 18:48:00.031478939 +0000
-@@ -10,10 +10,14 @@
- import java.util.Hashtable;
-
- import org.bouncycastle.asn1.DERObjectIdentifier;
--import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
-+// BEGIN android-removed
-+// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
-+// END android-removed
- import org.bouncycastle.asn1.nist.NISTNamedCurves;
- import org.bouncycastle.asn1.sec.SECNamedCurves;
--import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
-+// BEGIN android-removed
-+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
-+// END android-removed
- import org.bouncycastle.asn1.x9.X962NamedCurves;
- import org.bouncycastle.asn1.x9.X9ECParameters;
- import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
-@@ -56,13 +60,15 @@
- static {
- ecParameters = new Hashtable();
-
-- ecParameters.put(new Integer(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192
-- ecParameters.put(new Integer(239), new ECGenParameterSpec("prime239v1"));
-- ecParameters.put(new Integer(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256
--
-- ecParameters.put(new Integer(224), new ECGenParameterSpec("P-224"));
-- ecParameters.put(new Integer(384), new ECGenParameterSpec("P-384"));
-- ecParameters.put(new Integer(521), new ECGenParameterSpec("P-521"));
-+ // BEGIN android-changed
-+ ecParameters.put(Integer.valueOf(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192
-+ ecParameters.put(Integer.valueOf(239), new ECGenParameterSpec("prime239v1"));
-+ ecParameters.put(Integer.valueOf(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256
-+
-+ ecParameters.put(Integer.valueOf(224), new ECGenParameterSpec("P-224"));
-+ ecParameters.put(Integer.valueOf(384), new ECGenParameterSpec("P-384"));
-+ ecParameters.put(Integer.valueOf(521), new ECGenParameterSpec("P-521"));
-+ // END android-changed
- }
-
- public EC()
-@@ -83,8 +89,16 @@
- SecureRandom random)
- {
- this.strength = strength;
-+ // BEGIN android-added
-+ if (random != null) {
-+ // END android-added
- this.random = random;
-- this.ecParams = ecParameters.get(new Integer(strength));
-+ // BEGIN android-added
-+ }
-+ // END android-added
-+ // BEGIN android-changed
-+ this.ecParams = ecParameters.get(Integer.valueOf(strength));
-+ // END android-changed
-
- if (ecParams != null)
- {
-@@ -108,6 +122,11 @@
- SecureRandom random)
- throws InvalidAlgorithmParameterException
- {
-+ // BEGIN android-added
-+ if (random == null) {
-+ random = this.random;
-+ }
-+ // END android-added
- if (params instanceof ECParameterSpec)
- {
- ECParameterSpec p = (ECParameterSpec)params;
-@@ -135,23 +154,25 @@
- {
- final String curveName = ((ECGenParameterSpec)params).getName();
-
-- if (this.algorithm.equals("ECGOST3410"))
-- {
-- ECDomainParameters ecP = ECGOST3410NamedCurves.getByName(curveName);
-- if (ecP == null)
-- {
-- throw new InvalidAlgorithmParameterException("unknown curve name: " + curveName);
-- }
--
-- this.ecParams = new ECNamedCurveSpec(
-- curveName,
-- ecP.getCurve(),
-- ecP.getG(),
-- ecP.getN(),
-- ecP.getH(),
-- ecP.getSeed());
-- }
-- else
-+ // BEGIN android-removed
-+ // if (this.algorithm.equals("ECGOST3410"))
-+ // {
-+ // ECDomainParameters ecP = ECGOST3410NamedCurves.getByName(curveName);
-+ // if (ecP == null)
-+ // {
-+ // throw new InvalidAlgorithmParameterException("unknown curve name: " + curveName);
-+ // }
-+ //
-+ // this.ecParams = new ECNamedCurveSpec(
-+ // curveName,
-+ // ecP.getCurve(),
-+ // ecP.getG(),
-+ // ecP.getN(),
-+ // ecP.getH(),
-+ // ecP.getSeed());
-+ // }
-+ // else
-+ // END android-removed
- {
- X9ECParameters ecP = X962NamedCurves.getByName(curveName);
- if (ecP == null)
-@@ -161,10 +182,12 @@
- {
- ecP = NISTNamedCurves.getByName(curveName);
- }
-- if (ecP == null)
-- {
-- ecP = TeleTrusTNamedCurves.getByName(curveName);
-- }
-+ // BEGIN android-removed
-+ // if (ecP == null)
-+ // {
-+ // ecP = TeleTrusTNamedCurves.getByName(curveName);
-+ // }
-+ // END android-removed
- if (ecP == null)
- {
- // See if it's actually an OID string (SunJSSE ServerHandshaker setupEphemeralECDHKeys bug)
-@@ -180,10 +203,12 @@
- {
- ecP = NISTNamedCurves.getByOID(oid);
- }
-- if (ecP == null)
-- {
-- ecP = TeleTrusTNamedCurves.getByOID(oid);
-- }
-+ // BEGIN android-removed
-+ // if (ecP == null)
-+ // {
-+ // ecP = TeleTrusTNamedCurves.getByOID(oid);
-+ // }
-+ // END android-removed
- if (ecP == null)
- {
- throw new InvalidAlgorithmParameterException("unknown curve OID: " + curveName);
-@@ -239,7 +264,15 @@
- {
- if (!initialised)
- {
-- throw new IllegalStateException("EC Key Pair Generator not initialised");
-+ // BEGIN android-removed
-+ // throw new IllegalStateException("EC Key Pair Generator not initialised");
-+ // END android-removed
-+ // BEGIN android-added
-+ /*
-+ * KeyPairGenerator documentation says that a default initialization must be provided
-+ */
-+ initialize(192, random);
-+ // END android-added
- }
-
- AsymmetricCipherKeyPair pair = engine.generateKeyPair();
-@@ -279,14 +312,16 @@
- }
- }
-
-- public static class ECGOST3410
-- extends EC
-- {
-- public ECGOST3410()
-- {
-- super("ECGOST3410");
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class ECGOST3410
-+ // extends EC
-+ // {
-+ // public ECGOST3410()
-+ // {
-+ // super("ECGOST3410");
-+ // }
-+ // }
-+ // END android-removed
-
- public static class ECDH
- extends EC
-@@ -314,4 +349,4 @@
- super("ECMQV");
- }
- }
--}
-\ No newline at end of file
-+}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java 2012-07-27 18:48:00.031478939 +0000
-@@ -18,15 +18,21 @@
- import org.bouncycastle.crypto.DSA;
- import org.bouncycastle.crypto.Digest;
- import org.bouncycastle.crypto.digests.NullDigest;
--import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA1Digest;
--import org.bouncycastle.crypto.digests.SHA224Digest;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.digests.SHA224Digest;
-+// END android-removed
- import org.bouncycastle.crypto.digests.SHA256Digest;
- import org.bouncycastle.crypto.digests.SHA384Digest;
- import org.bouncycastle.crypto.digests.SHA512Digest;
- import org.bouncycastle.crypto.params.ParametersWithRandom;
- import org.bouncycastle.crypto.signers.ECDSASigner;
--import org.bouncycastle.crypto.signers.ECNRSigner;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.signers.ECNRSigner;
-+// END android-removed
- import org.bouncycastle.jce.interfaces.ECKey;
- import org.bouncycastle.jce.provider.DSABase;
- import org.bouncycastle.jce.provider.DSAEncoder;
-@@ -122,14 +128,16 @@
- }
- }
-
-- static public class ecDSA224
-- extends Signature
-- {
-- public ecDSA224()
-- {
-- super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder());
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class ecDSA224
-+ // extends Signature
-+ // {
-+ // public ecDSA224()
-+ // {
-+ // super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ // END android-removed
-
- static public class ecDSA256
- extends Signature
-@@ -158,86 +166,88 @@
- }
- }
-
-- static public class ecDSARipeMD160
-- extends Signature
-- {
-- public ecDSARipeMD160()
-- {
-- super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
-- }
-- }
--
-- static public class ecNR
-- extends Signature
-- {
-- public ecNR()
-- {
-- super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
-- }
-- }
--
-- static public class ecNR224
-- extends Signature
-- {
-- public ecNR224()
-- {
-- super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
-- }
-- }
--
-- static public class ecNR256
-- extends Signature
-- {
-- public ecNR256()
-- {
-- super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
-- }
-- }
--
-- static public class ecNR384
-- extends Signature
-- {
-- public ecNR384()
-- {
-- super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
-- }
-- }
--
-- static public class ecNR512
-- extends Signature
-- {
-- public ecNR512()
-- {
-- super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
-- }
-- }
--
-- static public class ecCVCDSA
-- extends Signature
-- {
-- public ecCVCDSA()
-- {
-- super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder());
-- }
-- }
--
-- static public class ecCVCDSA224
-- extends Signature
-- {
-- public ecCVCDSA224()
-- {
-- super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder());
-- }
-- }
--
-- static public class ecCVCDSA256
-- extends Signature
-- {
-- public ecCVCDSA256()
-- {
-- super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder());
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class ecDSARipeMD160
-+ // extends Signature
-+ // {
-+ // public ecDSARipeMD160()
-+ // {
-+ // super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecNR
-+ // extends Signature
-+ // {
-+ // public ecNR()
-+ // {
-+ // super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecNR224
-+ // extends Signature
-+ // {
-+ // public ecNR224()
-+ // {
-+ // super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecNR256
-+ // extends Signature
-+ // {
-+ // public ecNR256()
-+ // {
-+ // super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecNR384
-+ // extends Signature
-+ // {
-+ // public ecNR384()
-+ // {
-+ // super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecNR512
-+ // extends Signature
-+ // {
-+ // public ecNR512()
-+ // {
-+ // super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecCVCDSA
-+ // extends Signature
-+ // {
-+ // public ecCVCDSA()
-+ // {
-+ // super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecCVCDSA224
-+ // extends Signature
-+ // {
-+ // public ecCVCDSA224()
-+ // {
-+ // super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder());
-+ // }
-+ // }
-+ //
-+ // static public class ecCVCDSA256
-+ // extends Signature
-+ // {
-+ // public ecCVCDSA256()
-+ // {
-+ // super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder());
-+ // }
-+ // }
-+ // END android-removed
-
- private static class StdDSAEncoder
- implements DSAEncoder
-@@ -331,4 +341,4 @@
- return sig;
- }
- }
--}
-\ No newline at end of file
-+}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/AES.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/AES.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/AES.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/AES.java 2012-07-27 18:48:00.031478939 +0000
-@@ -13,8 +13,10 @@
- import org.bouncycastle.crypto.CipherKeyGenerator;
- import org.bouncycastle.crypto.engines.AESFastEngine;
- import org.bouncycastle.crypto.engines.AESWrapEngine;
--import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
--import org.bouncycastle.crypto.macs.CMac;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
-+// import org.bouncycastle.crypto.macs.CMac;
-+// END android-removed
- import org.bouncycastle.crypto.modes.CBCBlockCipher;
- import org.bouncycastle.crypto.modes.CFBBlockCipher;
- import org.bouncycastle.crypto.modes.OFBBlockCipher;
-@@ -41,41 +43,43 @@
- }
- }
-
-- public static class CBC
-- extends JCEBlockCipher
-- {
-- public CBC()
-- {
-- super(new CBCBlockCipher(new AESFastEngine()), 128);
-- }
-- }
--
-- static public class CFB
-- extends JCEBlockCipher
-- {
-- public CFB()
-- {
-- super(new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 128)), 128);
-- }
-- }
--
-- static public class OFB
-- extends JCEBlockCipher
-- {
-- public OFB()
-- {
-- super(new BufferedBlockCipher(new OFBBlockCipher(new AESFastEngine(), 128)), 128);
-- }
-- }
--
-- public static class AESCMAC
-- extends JCEMac
-- {
-- public AESCMAC()
-- {
-- super(new CMac(new AESFastEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class CBC
-+ // extends JCEBlockCipher
-+ // {
-+ // public CBC()
-+ // {
-+ // super(new CBCBlockCipher(new AESFastEngine()), 128);
-+ // }
-+ // }
-+ //
-+ // static public class CFB
-+ // extends JCEBlockCipher
-+ // {
-+ // public CFB()
-+ // {
-+ // super(new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 128)), 128);
-+ // }
-+ // }
-+ //
-+ // static public class OFB
-+ // extends JCEBlockCipher
-+ // {
-+ // public OFB()
-+ // {
-+ // super(new BufferedBlockCipher(new OFBBlockCipher(new AESFastEngine(), 128)), 128);
-+ // }
-+ // }
-+ //
-+ // public static class AESCMAC
-+ // extends JCEMac
-+ // {
-+ // public AESCMAC()
-+ // {
-+ // super(new CMac(new AESFastEngine()));
-+ // }
-+ // }
-+ // END android-removed
-
- static public class Wrap
- extends WrapCipherSpi
-@@ -86,14 +90,16 @@
- }
- }
-
-- public static class RFC3211Wrap
-- extends WrapCipherSpi
-- {
-- public RFC3211Wrap()
-- {
-- super(new RFC3211WrapEngine(new AESFastEngine()), 16);
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class RFC3211Wrap
-+ // extends WrapCipherSpi
-+ // {
-+ // public RFC3211Wrap()
-+ // {
-+ // super(new RFC3211WrapEngine(new AESFastEngine()), 16);
-+ // }
-+ // }
-+ // END android-removed
-
- public static class KeyGen
- extends JCEKeyGenerator
-@@ -109,70 +115,72 @@
- }
- }
-
-- public static class KeyGen128
-- extends KeyGen
-- {
-- public KeyGen128()
-- {
-- super(128);
-- }
-- }
--
-- public static class KeyGen192
-- extends KeyGen
-- {
-- public KeyGen192()
-- {
-- super(192);
-- }
-- }
--
-- public static class KeyGen256
-- extends KeyGen
-- {
-- public KeyGen256()
-- {
-- super(256);
-- }
-- }
--
-- public static class AlgParamGen
-- extends JDKAlgorithmParameterGenerator
-- {
-- protected void engineInit(
-- AlgorithmParameterSpec genParamSpec,
-- SecureRandom random)
-- throws InvalidAlgorithmParameterException
-- {
-- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
-- }
--
-- protected AlgorithmParameters engineGenerateParameters()
-- {
-- byte[] iv = new byte[16];
--
-- if (random == null)
-- {
-- random = new SecureRandom();
-- }
--
-- random.nextBytes(iv);
--
-- AlgorithmParameters params;
--
-- try
-- {
-- params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
-- params.init(new IvParameterSpec(iv));
-- }
-- catch (Exception e)
-- {
-- throw new RuntimeException(e.getMessage());
-- }
--
-- return params;
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class KeyGen128
-+ // extends KeyGen
-+ // {
-+ // public KeyGen128()
-+ // {
-+ // super(128);
-+ // }
-+ // }
-+ //
-+ // public static class KeyGen192
-+ // extends KeyGen
-+ // {
-+ // public KeyGen192()
-+ // {
-+ // super(192);
-+ // }
-+ // }
-+ //
-+ // public static class KeyGen256
-+ // extends KeyGen
-+ // {
-+ // public KeyGen256()
-+ // {
-+ // super(256);
-+ // }
-+ // }
-+ //
-+ // public static class AlgParamGen
-+ // extends JDKAlgorithmParameterGenerator
-+ // {
-+ // protected void engineInit(
-+ // AlgorithmParameterSpec genParamSpec,
-+ // SecureRandom random)
-+ // throws InvalidAlgorithmParameterException
-+ // {
-+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
-+ // }
-+ //
-+ // protected AlgorithmParameters engineGenerateParameters()
-+ // {
-+ // byte[] iv = new byte[16];
-+ //
-+ // if (random == null)
-+ // {
-+ // random = new SecureRandom();
-+ // }
-+ //
-+ // random.nextBytes(iv);
-+ //
-+ // AlgorithmParameters params;
-+ //
-+ // try
-+ // {
-+ // params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
-+ // params.init(new IvParameterSpec(iv));
-+ // }
-+ // catch (Exception e)
-+ // {
-+ // throw new RuntimeException(e.getMessage());
-+ // }
-+ //
-+ // return params;
-+ // }
-+ // }
-+ // END android-removed
-
- public static class AlgParams
- extends JDKAlgorithmParameters.IVAlgorithmParameters
-@@ -205,58 +213,66 @@
- put("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
- put("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
-
-- put("AlgorithmParameterGenerator.AES", "org.bouncycastle.jce.provider.symmetric.AES$AlgParamGen");
-- put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
-- put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
-- put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
-- put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
-- put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
-- put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
-+ // BEGIN android-removed
-+ // put("AlgorithmParameterGenerator.AES", "org.bouncycastle.jce.provider.symmetric.AES$AlgParamGen");
-+ // put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
-+ // put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
-+ // put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
-+ // put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
-+ // put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
-+ // put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
-+ // END android-removed
-
- put("Cipher.AES", "org.bouncycastle.jce.provider.symmetric.AES$ECB");
- put("Alg.Alias.Cipher." + wrongAES128, "AES");
- put("Alg.Alias.Cipher." + wrongAES192, "AES");
- put("Alg.Alias.Cipher." + wrongAES256, "AES");
-- put("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
-- put("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
-- put("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
-- put("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
-- put("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
-+ // BEGIN android-removed
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
-+ // put("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
-+ // END android-removed
- put("Cipher.AESWRAP", "org.bouncycastle.jce.provider.symmetric.AES$Wrap");
- put("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_wrap, "AESWRAP");
- put("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_wrap, "AESWRAP");
- put("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_wrap, "AESWRAP");
-- put("Cipher.AESRFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.AES$RFC3211Wrap");
-+ // BEGIN android-removed
-+ // put("Cipher.AESRFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.AES$RFC3211Wrap");
-+ // END android-removed
-
- put("KeyGenerator.AES", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen");
-- put("KeyGenerator.2.16.840.1.101.3.4.2", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-- put("KeyGenerator.2.16.840.1.101.3.4.22", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-- put("KeyGenerator.2.16.840.1.101.3.4.42", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-- put("KeyGenerator.AESWRAP", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-- put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
--
-- put("Mac.AESCMAC", "org.bouncycastle.jce.provider.symmetric.AES$AESCMAC");
-+ // BEGIN android-removed
-+ // put("KeyGenerator.2.16.840.1.101.3.4.2", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-+ // put("KeyGenerator.2.16.840.1.101.3.4.22", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-+ // put("KeyGenerator.2.16.840.1.101.3.4.42", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-+ // put("KeyGenerator.AESWRAP", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
-+ // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
-+ //
-+ // put("Mac.AESCMAC", "org.bouncycastle.jce.provider.symmetric.AES$AESCMAC");
-+ // END android-removed
- }
- }
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/ARC4.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/ARC4.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/ARC4.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/ARC4.java 2012-07-27 18:48:00.031478939 +0000
-@@ -27,7 +27,9 @@
- {
- public KeyGen()
- {
-- super("RC4", 128, new CipherKeyGenerator());
-+ // BEGIN android-changed
-+ super("ARC4", 128, new CipherKeyGenerator());
-+ // END android-changed
- }
- }
-
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/Blowfish.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/Blowfish.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/Blowfish.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/Blowfish.java 2012-07-27 18:48:00.031478939 +0000
-@@ -57,7 +57,9 @@
- public Mappings()
- {
- put("Cipher.BLOWFISH", "org.bouncycastle.jce.provider.symmetric.Blowfish$ECB");
-- put("Cipher.1.3.6.1.4.1.3029.1.2", "org.bouncycastle.jce.provider.symmetric.Blowfish$CBC");
-+ // BEGIN android-removed
-+ // put("Cipher.1.3.6.1.4.1.3029.1.2", "org.bouncycastle.jce.provider.symmetric.Blowfish$CBC");
-+ // END android-removed
- put("KeyGenerator.BLOWFISH", "org.bouncycastle.jce.provider.symmetric.Blowfish$KeyGen");
- put("Alg.Alias.KeyGenerator.1.3.6.1.4.1.3029.1.2", "BLOWFISH");
- put("AlgorithmParameters.BLOWFISH", "org.bouncycastle.jce.provider.symmetric.Blowfish$AlgParams");
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/DESede.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/DESede.java
---- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/DESede.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/DESede.java 2012-07-27 18:48:00.031478939 +0000
-@@ -14,11 +14,15 @@
- import org.bouncycastle.crypto.KeyGenerationParameters;
- import org.bouncycastle.crypto.engines.DESedeEngine;
- import org.bouncycastle.crypto.engines.DESedeWrapEngine;
--import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
-+// END android-removed
- import org.bouncycastle.crypto.generators.DESedeKeyGenerator;
- import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
--import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
--import org.bouncycastle.crypto.macs.CMac;
-+// BEGIN android-removed
-+// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
-+// import org.bouncycastle.crypto.macs.CMac;
-+// END android-removed
- import org.bouncycastle.crypto.modes.CBCBlockCipher;
- import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
- import org.bouncycastle.jce.provider.JCEBlockCipher;
-@@ -51,17 +55,19 @@
- }
- }
-
-- /**
-- * DESede CFB8
-- */
-- public static class DESedeCFB8
-- extends JCEMac
-- {
-- public DESedeCFB8()
-- {
-- super(new CFBBlockCipherMac(new DESedeEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // /**
-+ // * DESede CFB8
-+ // */
-+ // public static class DESedeCFB8
-+ // extends JCEMac
-+ // {
-+ // public DESedeCFB8()
-+ // {
-+ // super(new CFBBlockCipherMac(new DESedeEngine()));
-+ // }
-+ // }
-+ // END android-removed
-
- /**
- * DESede64
-@@ -96,14 +102,16 @@
- }
- }
-
-- static public class CMAC
-- extends JCEMac
-- {
-- public CMAC()
-- {
-- super(new CMac(new DESedeEngine()));
-- }
-- }
-+ // BEGIN android-removed
-+ // static public class CMAC
-+ // extends JCEMac
-+ // {
-+ // public CMAC()
-+ // {
-+ // super(new CMac(new DESedeEngine()));
-+ // }
-+ // }
-+ // END android-removed
-
- public static class Wrap
- extends WrapCipherSpi
-@@ -114,14 +122,16 @@
- }
- }
-
-- public static class RFC3211
-- extends WrapCipherSpi
-- {
-- public RFC3211()
-- {
-- super(new RFC3211WrapEngine(new DESedeEngine()), 8);
-- }
-- }
-+ // BEGIN android-removed
-+ // public static class RFC3211
-+ // extends WrapCipherSpi
-+ // {
-+ // public RFC3211()
-+ // {
-+ // super(new RFC3211WrapEngine(new DESedeEngine()), 8);
-+ // }
-+ // }
-+ // END android-removed
-
- /**
- * DESede - the default for this is to generate a key in
-@@ -262,32 +272,42 @@
- public Mappings()
- {
- put("Cipher.DESEDE", "org.bouncycastle.jce.provider.symmetric.DESede$ECB");
-- put("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
-- put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
-+ // BEGIN android-removed
-+ // put("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
-+ // put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
-+ // END android-removed
- put("Cipher.DESEDEWRAP", "org.bouncycastle.jce.provider.symmetric.DESede$Wrap");
-- put("Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "org.bouncycastle.jce.provider.symmetric.DESede$Wrap");
-- put("Cipher.DESEDERFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.DESede$RFC3211");
-+ // BEGIN android-changed
-+ put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWRAP");
-+ // END android-changed
-+ // BEGIN android-removed
-+ // put("Cipher.DESEDERFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.DESede$RFC3211");
-+ // END android-removed
-
- put("KeyGenerator.DESEDE", "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator");
-- put("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator3");
-- put("KeyGenerator.DESEDEWRAP", "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator");
-+ // BEGIN android-removed
-+ // put("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator3");
-+ // put("KeyGenerator.DESEDEWRAP", "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator");
-+ // END android-removed
-
- put("SecretKeyFactory.DESEDE", "org.bouncycastle.jce.provider.symmetric.DESede$KeyFactory");
-
-- put("Mac.DESEDECMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CMAC");
-- put("Mac.DESEDEMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CBCMAC");
-- put("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
--
-- put("Mac.DESEDEMAC/CFB8", "org.bouncycastle.jce.provider.symmetric.DESede$DESedeCFB8");
-- put("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
--
-- put("Mac.DESEDEMAC64", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64");
-- put("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
--
-- put("Mac.DESEDEMAC64WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64with7816d4");
-- put("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
-- put("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
-- put("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
-+ // BEGIN android-removed
-+ // put("Mac.DESEDECMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CMAC");
-+ // put("Mac.DESEDEMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CBCMAC");
-+ // put("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
-+ //
-+ // put("Mac.DESEDEMAC/CFB8", "org.bouncycastle.jce.provider.symmetric.DESede$DESedeCFB8");
-+ // put("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
-+ //
-+ // put("Mac.DESEDEMAC64", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64");
-+ // put("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
-+ //
-+ // put("Mac.DESEDEMAC64WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64with7816d4");
-+ // put("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
-+ // put("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
-+ // put("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
-+ // END android-removed
- }
- }
- }
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/openssl/PEMUtilities.java bcprov-jdk16-146/org/bouncycastle/openssl/PEMUtilities.java
---- bcprov-jdk16-146.orig/org/bouncycastle/openssl/PEMUtilities.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/openssl/PEMUtilities.java 2012-07-27 18:48:00.031478939 +0000
-@@ -45,10 +45,12 @@
- PKCS5_SCHEME_2.add(NISTObjectIdentifiers.id_aes192_CBC);
- PKCS5_SCHEME_2.add(NISTObjectIdentifiers.id_aes256_CBC);
-
-- KEYSIZES.put(PKCSObjectIdentifiers.des_EDE3_CBC.getId(), new Integer(192));
-- KEYSIZES.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), new Integer(128));
-- KEYSIZES.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), new Integer(192));
-- KEYSIZES.put(NISTObjectIdentifiers.id_aes256_CBC.getId(), new Integer(256));
-+ // BEGIN android-changed
-+ KEYSIZES.put(PKCSObjectIdentifiers.des_EDE3_CBC.getId(), Integer.valueOf(192));
-+ KEYSIZES.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), Integer.valueOf(128));
-+ KEYSIZES.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), Integer.valueOf(192));
-+ KEYSIZES.put(NISTObjectIdentifiers.id_aes256_CBC.getId(), Integer.valueOf(256));
-+ // END android-changed
- }
-
- static int getKeySize(String algorithm)
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk16-146/org/bouncycastle/x509/X509Util.java
---- bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/x509/X509Util.java 2012-07-27 18:48:00.011478563 +0000
-@@ -44,14 +44,18 @@
+ import org.bouncycastle.jce.X509Principal;
+@@ -44,14 +46,18 @@
static
{
@@ -10848,7 +9388,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk1
algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
-@@ -59,45 +63,59 @@
+@@ -59,45 +65,59 @@
algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
@@ -10924,7 +9464,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk1
noParams.add(NISTObjectIdentifiers.dsa_with_sha256);
noParams.add(NISTObjectIdentifiers.dsa_with_sha384);
noParams.add(NISTObjectIdentifiers.dsa_with_sha512);
-@@ -105,25 +123,39 @@
+@@ -105,25 +125,39 @@
//
// RFC 4491
//
@@ -10973,7 +9513,7 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk1
params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
}
-@@ -166,7 +198,9 @@
+@@ -166,7 +200,9 @@
}
else
{
@@ -10984,9 +9524,9 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk1
}
}
-diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java bcprov-jdk16-146/org/bouncycastle/x509/extension/X509ExtensionUtil.java
---- bcprov-jdk16-146.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java 2011-02-23 20:08:56.000000000 +0000
-+++ bcprov-jdk16-146/org/bouncycastle/x509/extension/X509ExtensionUtil.java 2012-07-27 18:48:00.011478563 +0000
+diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java bcprov-jdk15on-147/org/bouncycastle/x509/extension/X509ExtensionUtil.java
+--- bcprov-jdk15on-147.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java 2012-03-22 15:11:48.000000000 +0000
++++ bcprov-jdk15on-147/org/bouncycastle/x509/extension/X509ExtensionUtil.java 2012-09-11 00:12:44.000000000 +0000
@@ -62,7 +62,9 @@
{
GeneralName genName = GeneralName.getInstance(it.nextElement());
@@ -10998,34 +9538,3 @@ diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/extension/X509ExtensionUt
switch (genName.getTagNo())
{
case GeneralName.ediPartyName:
-diff -Naur bcprov-jdk16-146.orig/src/main/java/org/bouncycastle/jce/provider/CertBlacklist.java.rej bcprov-jdk16-146/src/main/java/org/bouncycastle/jce/provider/CertBlacklist.java.rej
---- bcprov-jdk16-146.orig/src/main/java/org/bouncycastle/jce/provider/CertBlacklist.java.rej 1970-01-01 00:00:00.000000000 +0000
-+++ bcprov-jdk16-146/src/main/java/org/bouncycastle/jce/provider/CertBlacklist.java.rej 2012-07-27 18:47:59.931477059 +0000
-@@ -0,0 +1,27 @@
-+--- src/main/java/org/bouncycastle/jce/provider/CertBlacklist.java
-++++ src/main/java/org/bouncycastle/jce/provider/CertBlacklist.java
-+@@ -144,8 +144,9 @@
-+ String pubkeyBlacklist = readBlacklist(path);
-+ if (!pubkeyBlacklist.equals("")) {
-+ for (String value : pubkeyBlacklist.split(",")) {
-++ value = value.trim();
-+ if (isPubkeyHash(value)) {
-+- bl.add(Hex.decode(value));
-++ bl.add(value.getBytes());
-+ } else {
-+ System.logW("Tried to blacklist invalid pubkey " + value);
-+ }
-+@@ -161,7 +162,12 @@
-+ digest.update(encoded, 0, encoded.length);
-+ byte[] out = new byte[digest.getDigestSize()];
-+ digest.doFinal(out, 0);
-+- return pubkeyBlacklist.contains(out);
-++ for (byte[] blacklisted : pubkeyBlacklist) {
-++ if (Arrays.equals(blacklisted, Hex.encode(out))) {
-++ return true;
-++ }
-++ }
-++ return false;
-+ }
-+
-+ public boolean isSerialNumberBlackListed(BigInteger serial) {