1diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/ASN1Null.java bcprov-jdk15on-147/org/bouncycastle/asn1/ASN1Null.java 2--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/ASN1Null.java 2012-03-22 15:11:48.000000000 +0000 3+++ bcprov-jdk15on-147/org/bouncycastle/asn1/ASN1Null.java 2012-09-19 21:17:12.000000000 +0000 4@@ -8,9 +8,11 @@ 5 public abstract class ASN1Null 6 extends ASN1Primitive 7 { 8- public ASN1Null() 9+ // BEGIN android-changed 10+ /*package*/ ASN1Null() 11 { 12 } 13+ // END android-changed 14 15 public static ASN1Null getInstance(Object o) 16 { 17diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERBoolean.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERBoolean.java 18--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERBoolean.java 2012-03-22 15:11:48.000000000 +0000 19+++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERBoolean.java 2012-09-19 21:17:12.000000000 +0000 20@@ -10,7 +10,9 @@ 21 private static final byte[] TRUE_VALUE = new byte[] { (byte)0xff }; 22 private static final byte[] FALSE_VALUE = new byte[] { 0 }; 23 24- private byte[] value; 25+ // BEGIN android-changed 26+ final private byte[] value; 27+ // END android-changed 28 29 public static final ASN1Boolean FALSE = new ASN1Boolean(false); 30 public static final ASN1Boolean TRUE = new ASN1Boolean(true); 31@@ -46,6 +48,17 @@ 32 return (value ? TRUE : FALSE); 33 } 34 35+ // BEGIN android-added 36+ /** 37+ * return a DERBoolean from the passed in array. 38+ */ 39+ public static DERBoolean getInstance( 40+ byte[] octets) 41+ { 42+ return (octets[0] != 0) ? TRUE : FALSE; 43+ } 44+ 45+ // END android-added 46 /** 47 * return a Boolean from a tagged object. 48 * 49@@ -71,7 +84,9 @@ 50 } 51 } 52 53- DERBoolean( 54+ // BEGIN android-changed 55+ protected DERBoolean( 56+ // END android-changed 57 byte[] value) 58 { 59 if (value.length != 1) 60@@ -93,8 +108,10 @@ 61 } 62 } 63 64- public DERBoolean( 65+ // BEGIN android-changed 66+ protected DERBoolean( 67 boolean value) 68+ // END android-changed 69 { 70 this.value = (value) ? TRUE_VALUE : FALSE_VALUE; 71 } 72diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERNull.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERNull.java 73--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERNull.java 2012-03-22 15:11:48.000000000 +0000 74+++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERNull.java 2012-09-19 21:17:12.000000000 +0000 75@@ -12,7 +12,9 @@ 76 77 private static final byte[] zeroBytes = new byte[0]; 78 79- public DERNull() 80+ // BEGIN android-changed 81+ protected DERNull() 82+ // END android-changed 83 { 84 } 85 86diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERObjectIdentifier.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERObjectIdentifier.java 87--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERObjectIdentifier.java 2012-03-22 15:11:48.000000000 +0000 88+++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERObjectIdentifier.java 2012-09-19 21:17:12.000000000 +0000 89@@ -117,7 +117,13 @@ 90 } 91 } 92 93- this.identifier = objId.toString(); 94+ // BEGIN android-changed 95+ /* 96+ * Intern the identifier so there aren't hundreds of duplicates 97+ * (in practice). 98+ */ 99+ this.identifier = objId.toString().intern(); 100+ // END android-changed 101 } 102 103 public DERObjectIdentifier( 104@@ -128,7 +134,13 @@ 105 throw new IllegalArgumentException("string " + identifier + " not an OID"); 106 } 107 108- this.identifier = identifier; 109+ // BEGIN android-changed 110+ /* 111+ * Intern the identifier so there aren't hundreds of duplicates 112+ * (in practice). 113+ */ 114+ this.identifier = identifier.intern(); 115+ // END android-changed 116 } 117 118 public String getId() 119diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERPrintableString.java bcprov-jdk15on-147/org/bouncycastle/asn1/DERPrintableString.java 120--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/DERPrintableString.java 2012-03-22 15:11:48.000000000 +0000 121+++ bcprov-jdk15on-147/org/bouncycastle/asn1/DERPrintableString.java 2012-09-19 21:17:12.000000000 +0000 122@@ -12,7 +12,9 @@ 123 extends ASN1Primitive 124 implements ASN1String 125 { 126- private byte[] string; 127+ // BEGIN android-changed 128+ private final byte[] string; 129+ // END android-changed 130 131 /** 132 * return a printable string from the passed in object. 133diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/cms/ContentInfo.java bcprov-jdk15on-147/org/bouncycastle/asn1/cms/ContentInfo.java 134--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/cms/ContentInfo.java 2012-03-22 15:11:48.000000000 +0000 135+++ bcprov-jdk15on-147/org/bouncycastle/asn1/cms/ContentInfo.java 2012-09-19 21:17:12.000000000 +0000 136@@ -12,7 +12,9 @@ 137 138 public class ContentInfo 139 extends ASN1Object 140- implements CMSObjectIdentifiers 141+ // BEGIN android-removed 142+ // implements CMSObjectIdentifiers 143+ // END android-removed 144 { 145 private ASN1ObjectIdentifier contentType; 146 private ASN1Encodable content; 147diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 148--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 2012-03-22 15:11:48.000000000 +0000 149+++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java 2012-09-19 21:17:12.000000000 +0000 150@@ -37,10 +37,13 @@ 151 public static EncryptedPrivateKeyInfo getInstance( 152 Object obj) 153 { 154- if (obj instanceof EncryptedData) 155+ // BEGIN android-changed 156+ // fix copy and paste error in instanceof call 157+ if (obj instanceof EncryptedPrivateKeyInfo) 158 { 159 return (EncryptedPrivateKeyInfo)obj; 160 } 161+ // END android-changed 162 else if (obj != null) 163 { 164 return new EncryptedPrivateKeyInfo(ASN1Sequence.getInstance(obj)); 165diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 166--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2012-03-22 15:11:48.000000000 +0000 167+++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2012-09-19 21:17:12.000000000 +0000 168@@ -10,8 +10,10 @@ 169 // 170 static final ASN1ObjectIdentifier pkcs_1 = new ASN1ObjectIdentifier("1.2.840.113549.1.1"); 171 static final ASN1ObjectIdentifier rsaEncryption = pkcs_1.branch("1"); 172- static final ASN1ObjectIdentifier md2WithRSAEncryption = pkcs_1.branch("2"); 173- static final ASN1ObjectIdentifier md4WithRSAEncryption = pkcs_1.branch("3"); 174+ // BEGIN android-removed 175+ // static final ASN1ObjectIdentifier md2WithRSAEncryption = pkcs_1.branch("2"); 176+ // static final ASN1ObjectIdentifier md4WithRSAEncryption = pkcs_1.branch("3"); 177+ // END android-removed 178 static final ASN1ObjectIdentifier md5WithRSAEncryption = pkcs_1.branch("4"); 179 static final ASN1ObjectIdentifier sha1WithRSAEncryption = pkcs_1.branch("5"); 180 static final ASN1ObjectIdentifier srsaOAEPEncryptionSET = pkcs_1.branch("6"); 181@@ -22,7 +24,9 @@ 182 static final ASN1ObjectIdentifier sha256WithRSAEncryption = pkcs_1.branch("11"); 183 static final ASN1ObjectIdentifier sha384WithRSAEncryption = pkcs_1.branch("12"); 184 static final ASN1ObjectIdentifier sha512WithRSAEncryption = pkcs_1.branch("13"); 185- static final ASN1ObjectIdentifier sha224WithRSAEncryption = pkcs_1.branch("14"); 186+ // BEGIN android-removed 187+ // static final ASN1ObjectIdentifier sha224WithRSAEncryption = pkcs_1.branch("14"); 188+ // END android-removed 189 190 // 191 // pkcs-3 OBJECT IDENTIFIER ::= { 192@@ -65,13 +69,17 @@ 193 // md2 OBJECT IDENTIFIER ::= 194 // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 2} 195 // 196- static final ASN1ObjectIdentifier md2 = digestAlgorithm.branch("2"); 197+ // BEGIN android-removed 198+ // static final ASN1ObjectIdentifier md2 = digestAlgorithm.branch("2"); 199+ // END android-removed 200 201 // 202 // md4 OBJECT IDENTIFIER ::= 203 // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 4} 204 // 205- static final ASN1ObjectIdentifier md4 = digestAlgorithm.branch("4"); 206+ // BEGIN android-removed 207+ // static final ASN1ObjectIdentifier md4 = digestAlgorithm.branch("4"); 208+ // END android-removed 209 210 // 211 // md5 OBJECT IDENTIFIER ::= 212@@ -80,7 +88,9 @@ 213 static final ASN1ObjectIdentifier md5 = digestAlgorithm.branch("5"); 214 215 static final ASN1ObjectIdentifier id_hmacWithSHA1 = digestAlgorithm.branch("7"); 216- static final ASN1ObjectIdentifier id_hmacWithSHA224 = digestAlgorithm.branch("8"); 217+ // BEGIN android-removed 218+ // static final ASN1ObjectIdentifier id_hmacWithSHA224 = digestAlgorithm.branch("8"); 219+ // END android-removed 220 static final ASN1ObjectIdentifier id_hmacWithSHA256 = digestAlgorithm.branch("9"); 221 static final ASN1ObjectIdentifier id_hmacWithSHA384 = digestAlgorithm.branch("10"); 222 static final ASN1ObjectIdentifier id_hmacWithSHA512 = digestAlgorithm.branch("11"); 223diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 224--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 2012-03-22 15:11:48.000000000 +0000 225+++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java 2012-09-19 21:17:12.000000000 +0000 226@@ -19,7 +19,9 @@ 227 private AlgorithmIdentifier maskGenAlgorithm; 228 private AlgorithmIdentifier pSourceAlgorithm; 229 230- public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); 231+ // BEGIN android-changed 232+ public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE); 233+ // END android-changed 234 public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); 235 public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0])); 236 237diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 238--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 2012-03-22 15:11:48.000000000 +0000 239+++ bcprov-jdk15on-147/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java 2012-09-19 21:17:12.000000000 +0000 240@@ -22,7 +22,9 @@ 241 private ASN1Integer saltLength; 242 private ASN1Integer trailerField; 243 244- public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); 245+ // BEGIN android-changed 246+ public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE); 247+ // END android-changed 248 public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM); 249 public final static ASN1Integer DEFAULT_SALT_LENGTH = new ASN1Integer(20); 250 public final static ASN1Integer DEFAULT_TRAILER_FIELD = new ASN1Integer(1); 251diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/util/ASN1Dump.java bcprov-jdk15on-147/org/bouncycastle/asn1/util/ASN1Dump.java 252--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/util/ASN1Dump.java 2012-03-22 15:11:48.000000000 +0000 253+++ bcprov-jdk15on-147/org/bouncycastle/asn1/util/ASN1Dump.java 2012-09-19 21:17:12.000000000 +0000 254@@ -78,7 +78,9 @@ 255 { 256 Object o = e.nextElement(); 257 258- if (o == null || o.equals(new DERNull())) 259+ // BEGIN android-changed 260+ if (o == null || o.equals(DERNull.INSTANCE)) 261+ // END android-changed 262 { 263 buf.append(tab); 264 buf.append("NULL"); 265diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AttCertIssuer.java 266--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java 2012-03-22 15:11:48.000000000 +0000 267+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AttCertIssuer.java 2012-09-19 21:17:12.000000000 +0000 268@@ -46,7 +46,7 @@ 269 ASN1TaggedObject obj, 270 boolean explicit) 271 { 272- return getInstance(obj.getObject()); // must be explictly tagged 273+ return getInstance(obj.getObject()); // must be explicitly tagged 274 } 275 276 /** 277diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 278--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 2012-03-22 15:11:48.000000000 +0000 279+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 2012-09-19 21:17:12.000000000 +0000 280@@ -14,7 +14,9 @@ 281 import org.bouncycastle.asn1.DERSequence; 282 import org.bouncycastle.asn1.DERTaggedObject; 283 import org.bouncycastle.crypto.Digest; 284-import org.bouncycastle.crypto.digests.SHA1Digest; 285+// BEGIN android-changed 286+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 287+// END android-changed 288 289 /** 290 * The AuthorityKeyIdentifier object. 291@@ -101,7 +103,9 @@ 292 public AuthorityKeyIdentifier( 293 SubjectPublicKeyInfo spki) 294 { 295- Digest digest = new SHA1Digest(); 296+ // BEGIN android-changed 297+ Digest digest = AndroidDigestFactory.getSHA1(); 298+ // END android-changed 299 byte[] resBuf = new byte[digest.getDigestSize()]; 300 301 byte[] bytes = spki.getPublicKeyData().getBytes(); 302@@ -119,7 +123,9 @@ 303 GeneralNames name, 304 BigInteger serialNumber) 305 { 306- Digest digest = new SHA1Digest(); 307+ // BEGIN android-changed 308+ Digest digest = AndroidDigestFactory.getSHA1(); 309+ // END android-changed 310 byte[] resBuf = new byte[digest.getDigestSize()]; 311 312 byte[] bytes = spki.getPublicKeyData().getBytes(); 313diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/BasicConstraints.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/BasicConstraints.java 314--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/BasicConstraints.java 2012-03-22 15:11:48.000000000 +0000 315+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/BasicConstraints.java 2012-09-19 21:17:12.000000000 +0000 316@@ -14,7 +14,9 @@ 317 public class BasicConstraints 318 extends ASN1Object 319 { 320- DERBoolean cA = new DERBoolean(false); 321+ // BEGIN android-changed 322+ DERBoolean cA = DERBoolean.FALSE; 323+ // END android-changed 324 ASN1Integer pathLenConstraint = null; 325 326 public static BasicConstraints getInstance( 327@@ -81,7 +83,9 @@ 328 { 329 if (cA) 330 { 331- this.cA = new DERBoolean(true); 332+ // BEGIN android-changed 333+ this.cA = DERBoolean.TRUE; 334+ // END android-changed 335 } 336 else 337 { 338@@ -98,7 +102,9 @@ 339 public BasicConstraints( 340 int pathLenConstraint) 341 { 342- this.cA = new DERBoolean(true); 343+ // BEGIN android-changed 344+ this.cA = DERBoolean.TRUE; 345+ // END android-changed 346 this.pathLenConstraint = new ASN1Integer(pathLenConstraint); 347 } 348 349diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/CRLReason.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/CRLReason.java 350--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/CRLReason.java 2012-03-22 15:11:48.000000000 +0000 351+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/CRLReason.java 2012-09-19 21:17:12.000000000 +0000 352@@ -138,7 +138,9 @@ 353 354 public static CRLReason lookup(int value) 355 { 356- Integer idx = new Integer(value); 357+ // BEGIN android-changed 358+ Integer idx = Integer.valueOf(value); 359+ // END android-changed 360 361 if (!table.containsKey(idx)) 362 { 363diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 364--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 2012-03-22 15:11:48.000000000 +0000 365+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java 2012-09-19 21:17:12.000000000 +0000 366@@ -96,11 +96,15 @@ 367 } 368 if (onlyContainsUserCerts) 369 { 370- vec.add(new DERTaggedObject(false, 1, new DERBoolean(true))); 371+ // BEGIN android-changed 372+ vec.add(new DERTaggedObject(false, 1, DERBoolean.TRUE)); 373+ // END android-changed 374 } 375 if (onlyContainsCACerts) 376 { 377- vec.add(new DERTaggedObject(false, 2, new DERBoolean(true))); 378+ // BEGIN android-changed 379+ vec.add(new DERTaggedObject(false, 2, DERBoolean.TRUE)); 380+ // END android-changed 381 } 382 if (onlySomeReasons != null) 383 { 384@@ -108,11 +112,15 @@ 385 } 386 if (indirectCRL) 387 { 388- vec.add(new DERTaggedObject(false, 4, new DERBoolean(true))); 389+ // BEGIN android-changed 390+ vec.add(new DERTaggedObject(false, 4, DERBoolean.TRUE)); 391+ // END android-changed 392 } 393 if (onlyContainsAttributeCerts) 394 { 395- vec.add(new DERTaggedObject(false, 5, new DERBoolean(true))); 396+ // BEGIN android-changed 397+ vec.add(new DERTaggedObject(false, 5, DERBoolean.TRUE)); 398+ // END android-changed 399 } 400 401 seq = new DERSequence(vec); 402diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java 403--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java 2012-03-22 15:11:48.000000000 +0000 404+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/SubjectKeyIdentifier.java 2012-09-19 21:17:12.000000000 +0000 405@@ -6,7 +6,9 @@ 406 import org.bouncycastle.asn1.ASN1TaggedObject; 407 import org.bouncycastle.asn1.DEROctetString; 408 import org.bouncycastle.crypto.Digest; 409-import org.bouncycastle.crypto.digests.SHA1Digest; 410+// BEGIN android-changed 411+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 412+// END android-changed 413 414 /** 415 * The SubjectKeyIdentifier object. 416@@ -119,7 +121,9 @@ 417 418 private static byte[] getDigest(SubjectPublicKeyInfo spki) 419 { 420- Digest digest = new SHA1Digest(); 421+ // BEGIN android-changed 422+ Digest digest = AndroidDigestFactory.getSHA1(); 423+ // END android-changed 424 byte[] resBuf = new byte[digest.getDigestSize()]; 425 426 byte[] bytes = spki.getPublicKeyData().getBytes(); 427diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Extensions.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Extensions.java 428--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Extensions.java 2012-03-22 15:11:48.000000000 +0000 429+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Extensions.java 2012-09-19 21:17:12.000000000 +0000 430@@ -408,7 +408,9 @@ 431 432 if (ext.isCritical()) 433 { 434- v.add(new DERBoolean(true)); 435+ // BEGIN android-changed 436+ v.add(DERBoolean.TRUE); 437+ // END android-changed 438 } 439 440 v.add(ext.getValue()); 441diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Name.java 442--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509Name.java 2012-03-22 15:11:48.000000000 +0000 443+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509Name.java 2012-09-19 21:17:12.000000000 +0000 444@@ -255,8 +255,10 @@ 445 */ 446 public static final Hashtable SymbolLookUp = DefaultLookUp; 447 448- private static final Boolean TRUE = new Boolean(true); // for J2ME compatibility 449- private static final Boolean FALSE = new Boolean(false); 450+ // BEGIN android-changed 451+ private static final Boolean TRUE = Boolean.TRUE; 452+ private static final Boolean FALSE = Boolean.FALSE; 453+ // END android-changed 454 455 static 456 { 457@@ -445,7 +447,9 @@ 458 throw new IllegalArgumentException("cannot encode value"); 459 } 460 } 461- added.addElement((i != 0) ? TRUE : FALSE); // to allow earlier JDK compatibility 462+ // BEGIN android-changed 463+ added.addElement(Boolean.valueOf(i != 0)); 464+ // END android-changed 465 } 466 } 467 } 468@@ -702,7 +706,9 @@ 469 470 if (index == -1) 471 { 472- throw new IllegalArgumentException("badly formated directory string"); 473+ // BEGIN android-changed 474+ throw new IllegalArgumentException("badly formatted directory string"); 475+ // END android-changed 476 } 477 478 String name = token.substring(0, index); 479diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509NameTokenizer.java 480--- bcprov-jdk15on-147.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2012-03-22 15:11:48.000000000 +0000 481+++ bcprov-jdk15on-147/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2012-09-19 21:17:12.000000000 +0000 482@@ -58,6 +58,17 @@ 483 } 484 else 485 { 486+ // BEGIN android-added 487+ // copied from a newer version of BouncyCastle 488+ if (c == '#' && buf.charAt(buf.length() - 1) == '=') 489+ { 490+ buf.append('\\'); 491+ } 492+ else if (c == '+' && seperator != '+') 493+ { 494+ buf.append('\\'); 495+ } 496+ // END android-added 497 buf.append(c); 498 } 499 escaped = false; 500diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/PBEParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/PBEParametersGenerator.java 501--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/PBEParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000 502+++ bcprov-jdk15on-147/org/bouncycastle/crypto/PBEParametersGenerator.java 2012-09-19 21:17:12.000000000 +0000 503@@ -136,7 +136,8 @@ 504 public static byte[] PKCS12PasswordToBytes( 505 char[] password) 506 { 507- if (password.length > 0) 508+ // BEGIN android-changed 509+ if (password != null && password.length > 0) 510 { 511 // +1 for extra 2 pad bytes. 512 byte[] bytes = new byte[(password.length + 1) * 2]; 513@@ -153,5 +154,6 @@ 514 { 515 return new byte[0]; 516 } 517+ // END android-changed 518 } 519 } 520diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactory.java bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactory.java 521--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactory.java 1970-01-01 00:00:00.000000000 +0000 522+++ bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactory.java 2012-09-19 21:17:12.000000000 +0000 523@@ -0,0 +1,78 @@ 524+/* 525+ * Copyright (C) 2012 The Android Open Source Project 526+ * 527+ * Licensed under the Apache License, Version 2.0 (the "License"); 528+ * you may not use this file except in compliance with the License. 529+ * You may obtain a copy of the License at 530+ * 531+ * http://www.apache.org/licenses/LICENSE-2.0 532+ * 533+ * Unless required by applicable law or agreed to in writing, software 534+ * distributed under the License is distributed on an "AS IS" BASIS, 535+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 536+ * See the License for the specific language governing permissions and 537+ * limitations under the License. 538+ */ 539+ 540+package org.bouncycastle.crypto.digests; 541+ 542+import org.bouncycastle.crypto.Digest; 543+ 544+/** 545+ * Level of indirection to let us select OpenSSLDigest implementations 546+ * for libcore but fallback to BouncyCastle ones on the RI. 547+ */ 548+public final class AndroidDigestFactory { 549+ private static final String OpenSSLFactoryClassName 550+ = AndroidDigestFactory.class.getName() + "OpenSSL"; 551+ private static final String BouncyCastleFactoryClassName 552+ = AndroidDigestFactory.class.getName() + "BouncyCastle"; 553+ 554+ private static final AndroidDigestFactoryInterface FACTORY; 555+ static { 556+ Class factoryImplementationClass; 557+ try { 558+ factoryImplementationClass = Class.forName(OpenSSLFactoryClassName); 559+ } catch (ClassNotFoundException e1) { 560+ try { 561+ factoryImplementationClass = Class.forName(BouncyCastleFactoryClassName); 562+ } catch (ClassNotFoundException e2) { 563+ throw new AssertionError("Failed to find AndroidDigestFactoryInterface " 564+ + "implementation. Looked for " 565+ + OpenSSLFactoryClassName + " and " 566+ + BouncyCastleFactoryClassName); 567+ } 568+ } 569+ if (!AndroidDigestFactoryInterface.class.isAssignableFrom(factoryImplementationClass)) { 570+ throw new AssertionError(factoryImplementationClass 571+ + "does not implement AndroidDigestFactoryInterface"); 572+ } 573+ try { 574+ FACTORY = (AndroidDigestFactoryInterface) factoryImplementationClass.newInstance(); 575+ } catch (InstantiationException e) { 576+ throw new AssertionError(e); 577+ } catch (IllegalAccessException e) { 578+ throw new AssertionError(e); 579+ } 580+ } 581+ 582+ public static Digest getMD5() { 583+ return FACTORY.getMD5(); 584+ } 585+ 586+ public static Digest getSHA1() { 587+ return FACTORY.getSHA1(); 588+ } 589+ 590+ public static Digest getSHA256() { 591+ return FACTORY.getSHA256(); 592+ } 593+ 594+ public static Digest getSHA384() { 595+ return FACTORY.getSHA384(); 596+ } 597+ 598+ public static Digest getSHA512() { 599+ return FACTORY.getSHA512(); 600+ } 601+} 602diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java 603--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java 1970-01-01 00:00:00.000000000 +0000 604+++ bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java 2012-09-19 21:17:12.000000000 +0000 605@@ -0,0 +1,37 @@ 606+/* 607+ * Copyright (C) 2012 The Android Open Source Project 608+ * 609+ * Licensed under the Apache License, Version 2.0 (the "License"); 610+ * you may not use this file except in compliance with the License. 611+ * You may obtain a copy of the License at 612+ * 613+ * http://www.apache.org/licenses/LICENSE-2.0 614+ * 615+ * Unless required by applicable law or agreed to in writing, software 616+ * distributed under the License is distributed on an "AS IS" BASIS, 617+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 618+ * See the License for the specific language governing permissions and 619+ * limitations under the License. 620+ */ 621+ 622+package org.bouncycastle.crypto.digests; 623+ 624+import org.bouncycastle.crypto.Digest; 625+ 626+public class AndroidDigestFactoryBouncyCastle implements AndroidDigestFactoryInterface { 627+ public Digest getMD5() { 628+ return new MD5Digest(); 629+ } 630+ public Digest getSHA1() { 631+ return new SHA1Digest(); 632+ } 633+ public Digest getSHA256() { 634+ return new SHA256Digest(); 635+ } 636+ public Digest getSHA384() { 637+ return new SHA384Digest(); 638+ } 639+ public Digest getSHA512() { 640+ return new SHA512Digest(); 641+ } 642+} 643diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java 644--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java 1970-01-01 00:00:00.000000000 +0000 645+++ bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java 2012-09-19 21:17:12.000000000 +0000 646@@ -0,0 +1,27 @@ 647+/* 648+ * Copyright (C) 2012 The Android Open Source Project 649+ * 650+ * Licensed under the Apache License, Version 2.0 (the "License"); 651+ * you may not use this file except in compliance with the License. 652+ * You may obtain a copy of the License at 653+ * 654+ * http://www.apache.org/licenses/LICENSE-2.0 655+ * 656+ * Unless required by applicable law or agreed to in writing, software 657+ * distributed under the License is distributed on an "AS IS" BASIS, 658+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 659+ * See the License for the specific language governing permissions and 660+ * limitations under the License. 661+ */ 662+ 663+package org.bouncycastle.crypto.digests; 664+ 665+import org.bouncycastle.crypto.Digest; 666+ 667+interface AndroidDigestFactoryInterface { 668+ public Digest getMD5(); 669+ public Digest getSHA1(); 670+ public Digest getSHA256(); 671+ public Digest getSHA384(); 672+ public Digest getSHA512(); 673+} 674diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java 675--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java 1970-01-01 00:00:00.000000000 +0000 676+++ bcprov-jdk15on-147/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java 2012-09-19 21:17:12.000000000 +0000 677@@ -0,0 +1,37 @@ 678+/* 679+ * Copyright (C) 2012 The Android Open Source Project 680+ * 681+ * Licensed under the Apache License, Version 2.0 (the "License"); 682+ * you may not use this file except in compliance with the License. 683+ * You may obtain a copy of the License at 684+ * 685+ * http://www.apache.org/licenses/LICENSE-2.0 686+ * 687+ * Unless required by applicable law or agreed to in writing, software 688+ * distributed under the License is distributed on an "AS IS" BASIS, 689+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 690+ * See the License for the specific language governing permissions and 691+ * limitations under the License. 692+ */ 693+ 694+package org.bouncycastle.crypto.digests; 695+ 696+import org.bouncycastle.crypto.Digest; 697+ 698+public class AndroidDigestFactoryOpenSSL implements AndroidDigestFactoryInterface { 699+ public Digest getMD5() { 700+ return new OpenSSLDigest.MD5(); 701+ } 702+ public Digest getSHA1() { 703+ return new OpenSSLDigest.SHA1(); 704+ } 705+ public Digest getSHA256() { 706+ return new OpenSSLDigest.SHA256(); 707+ } 708+ public Digest getSHA384() { 709+ return new OpenSSLDigest.SHA384(); 710+ } 711+ public Digest getSHA512() { 712+ return new OpenSSLDigest.SHA512(); 713+ } 714+} 715diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java bcprov-jdk15on-147/org/bouncycastle/crypto/digests/OpenSSLDigest.java 716--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java 1970-01-01 00:00:00.000000000 +0000 717+++ bcprov-jdk15on-147/org/bouncycastle/crypto/digests/OpenSSLDigest.java 2012-09-19 21:17:12.000000000 +0000 718@@ -0,0 +1,159 @@ 719+/* 720+ * Copyright (C) 2008 The Android Open Source Project 721+ * 722+ * Licensed under the Apache License, Version 2.0 (the "License"); 723+ * you may not use this file except in compliance with the License. 724+ * You may obtain a copy of the License at 725+ * 726+ * http://www.apache.org/licenses/LICENSE-2.0 727+ * 728+ * Unless required by applicable law or agreed to in writing, software 729+ * distributed under the License is distributed on an "AS IS" BASIS, 730+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 731+ * See the License for the specific language governing permissions and 732+ * limitations under the License. 733+ */ 734+ 735+package org.bouncycastle.crypto.digests; 736+ 737+import org.apache.harmony.xnet.provider.jsse.NativeCrypto; 738+import org.bouncycastle.crypto.ExtendedDigest; 739+ 740+/** 741+ * Implements the BouncyCastle Digest interface using OpenSSL's EVP API. 742+ */ 743+public class OpenSSLDigest implements ExtendedDigest { 744+ 745+ /** 746+ * Holds the standard name of the hashing algorithm, e.g. "SHA-1"; 747+ */ 748+ private final String algorithm; 749+ 750+ /** 751+ * Holds the EVP_MD for the hashing algorithm, e.g. EVP_get_digestbyname("sha1"); 752+ */ 753+ private final int evp_md; 754+ 755+ /** 756+ * Holds the output size of the message digest. 757+ */ 758+ private final int size; 759+ 760+ /** 761+ * Holds the block size of the message digest. 762+ */ 763+ private final int blockSize; 764+ 765+ /** 766+ * Holds a pointer to the native message digest context. It is 767+ * lazily initialized to avoid having to reallocate on reset when 768+ * its unlikely to be reused. 769+ */ 770+ private int ctx; 771+ 772+ /** 773+ * Holds a dummy buffer for writing single bytes to the digest. 774+ */ 775+ private final byte[] singleByte = new byte[1]; 776+ 777+ /** 778+ * Creates a new OpenSSLMessageDigest instance for the given algorithm 779+ * name. 780+ */ 781+ private OpenSSLDigest(String algorithm, int evp_md, int size, int blockSize) { 782+ this.algorithm = algorithm; 783+ this.evp_md = evp_md; 784+ this.size = size; 785+ this.blockSize = blockSize; 786+ } 787+ 788+ public String getAlgorithmName() { 789+ return algorithm; 790+ } 791+ 792+ public int getDigestSize() { 793+ return size; 794+ } 795+ 796+ public int getByteLength() { 797+ return blockSize; 798+ } 799+ 800+ public void reset() { 801+ free(); 802+ } 803+ 804+ public void update(byte in) { 805+ singleByte[0] = in; 806+ update(singleByte, 0, 1); 807+ } 808+ 809+ public void update(byte[] in, int inOff, int len) { 810+ NativeCrypto.EVP_DigestUpdate(getCtx(), in, inOff, len); 811+ } 812+ 813+ public int doFinal(byte[] out, int outOff) { 814+ int i = NativeCrypto.EVP_DigestFinal(getCtx(), out, outOff); 815+ ctx = 0; // EVP_DigestFinal frees the context as a side effect 816+ reset(); 817+ return i; 818+ } 819+ 820+ private int getCtx() { 821+ if (ctx == 0) { 822+ ctx = NativeCrypto.EVP_DigestInit(evp_md); 823+ } 824+ return ctx; 825+ } 826+ 827+ private void free() { 828+ if (ctx != 0) { 829+ NativeCrypto.EVP_MD_CTX_destroy(ctx); 830+ ctx = 0; 831+ } 832+ } 833+ 834+ @Override 835+ protected void finalize() throws Throwable { 836+ try { 837+ free(); 838+ } finally { 839+ super.finalize(); 840+ } 841+ } 842+ 843+ public static class MD5 extends OpenSSLDigest { 844+ private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("md5"); 845+ private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD); 846+ private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD); 847+ public MD5() { super("MD5", EVP_MD, SIZE, BLOCK_SIZE); } 848+ } 849+ 850+ public static class SHA1 extends OpenSSLDigest { 851+ private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha1"); 852+ private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD); 853+ private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD); 854+ public SHA1() { super("SHA-1", EVP_MD, SIZE, BLOCK_SIZE); } 855+ } 856+ 857+ public static class SHA256 extends OpenSSLDigest { 858+ private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha256"); 859+ private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD); 860+ private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD); 861+ public SHA256() { super("SHA-256", EVP_MD, SIZE, BLOCK_SIZE); } 862+ } 863+ 864+ public static class SHA384 extends OpenSSLDigest { 865+ private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha384"); 866+ private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD); 867+ private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD); 868+ public SHA384() { super("SHA-384", EVP_MD, SIZE, BLOCK_SIZE); } 869+ } 870+ 871+ public static class SHA512 extends OpenSSLDigest { 872+ private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha512"); 873+ private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD); 874+ private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD); 875+ public SHA512() { super("SHA-512", EVP_MD, SIZE, BLOCK_SIZE); } 876+ } 877+} 878diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/OAEPEncoding.java bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/OAEPEncoding.java 879--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/OAEPEncoding.java 2012-03-22 15:11:48.000000000 +0000 880+++ bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/OAEPEncoding.java 2012-09-19 21:17:12.000000000 +0000 881@@ -4,7 +4,9 @@ 882 import org.bouncycastle.crypto.CipherParameters; 883 import org.bouncycastle.crypto.Digest; 884 import org.bouncycastle.crypto.InvalidCipherTextException; 885-import org.bouncycastle.crypto.digests.SHA1Digest; 886+// BEGIN android-changed 887+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 888+// END android-changed 889 import org.bouncycastle.crypto.params.ParametersWithRandom; 890 891 import java.security.SecureRandom; 892@@ -26,7 +28,9 @@ 893 public OAEPEncoding( 894 AsymmetricBlockCipher cipher) 895 { 896- this(cipher, new SHA1Digest(), null); 897+ // BEGIN android-changed 898+ this(cipher, AndroidDigestFactory.getSHA1(), null); 899+ // END android-changed 900 } 901 902 public OAEPEncoding( 903diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/PKCS1Encoding.java bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 904--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 2012-03-22 15:11:48.000000000 +0000 905+++ bcprov-jdk15on-147/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 2012-09-19 21:17:12.000000000 +0000 906@@ -206,6 +206,12 @@ 907 { 908 throw new InvalidCipherTextException("unknown block type"); 909 } 910+ // BEGIN android-added 911+ if ((type == 1 && forPrivateKey) || (type == 2 && !forPrivateKey)) 912+ { 913+ throw new InvalidCipherTextException("invalid block type " + type); 914+ } 915+ // END android-added 916 917 if (useStrictLength && block.length != engine.getOutputBlockSize()) 918 { 919diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/engines/DESedeWrapEngine.java bcprov-jdk15on-147/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 920--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 2012-03-22 15:11:48.000000000 +0000 921+++ bcprov-jdk15on-147/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 2012-09-19 21:17:12.000000000 +0000 922@@ -6,7 +6,9 @@ 923 import org.bouncycastle.crypto.Digest; 924 import org.bouncycastle.crypto.InvalidCipherTextException; 925 import org.bouncycastle.crypto.Wrapper; 926-import org.bouncycastle.crypto.digests.SHA1Digest; 927+// BEGIN android-changed 928+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 929+// END android-changed 930 import org.bouncycastle.crypto.modes.CBCBlockCipher; 931 import org.bouncycastle.crypto.params.KeyParameter; 932 import org.bouncycastle.crypto.params.ParametersWithIV; 933@@ -52,7 +54,9 @@ 934 // 935 // checksum digest 936 // 937- Digest sha1 = new SHA1Digest(); 938+ // BEGIN android-changed 939+ Digest sha1 = AndroidDigestFactory.getSHA1(); 940+ // END android-changed 941 byte[] digest = new byte[20]; 942 943 /** 944diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DHParametersHelper.java 945--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java 2012-03-22 15:11:48.000000000 +0000 946+++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DHParametersHelper.java 2012-09-19 21:17:12.000000000 +0000 947@@ -3,10 +3,17 @@ 948 import java.math.BigInteger; 949 import java.security.SecureRandom; 950 951+// BEGIN android-added 952+import java.util.logging.Logger; 953+// END android-added 954 import org.bouncycastle.util.BigIntegers; 955 956 class DHParametersHelper 957 { 958+ // BEGIN android-added 959+ private static final Logger logger = Logger.getLogger(DHParametersHelper.class.getName()); 960+ // END android-added 961+ 962 private static final BigInteger ONE = BigInteger.valueOf(1); 963 private static final BigInteger TWO = BigInteger.valueOf(2); 964 965@@ -17,11 +24,19 @@ 966 */ 967 static BigInteger[] generateSafePrimes(int size, int certainty, SecureRandom random) 968 { 969+ // BEGIN android-added 970+ logger.info("Generating safe primes. This may take a long time."); 971+ long start = System.currentTimeMillis(); 972+ int tries = 0; 973+ // END android-added 974 BigInteger p, q; 975 int qLength = size - 1; 976 977 for (;;) 978 { 979+ // BEGIN android-added 980+ tries++; 981+ // END android-added 982 q = new BigInteger(qLength, 2, random); 983 984 // p <- 2q + 1 985@@ -32,6 +47,11 @@ 986 break; 987 } 988 } 989+ // BEGIN android-added 990+ long end = System.currentTimeMillis(); 991+ long duration = end - start; 992+ logger.info("Generated safe primes: " + tries + " tries took " + duration + "ms"); 993+ // END android-added 994 995 return new BigInteger[] { p, q }; 996 } 997diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DSAParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 998--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000 999+++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 2012-09-19 21:17:12.000000000 +0000 1000@@ -1,8 +1,9 @@ 1001 package org.bouncycastle.crypto.generators; 1002 1003 import org.bouncycastle.crypto.Digest; 1004-import org.bouncycastle.crypto.digests.SHA1Digest; 1005-import org.bouncycastle.crypto.digests.SHA256Digest; 1006+// BEGIN android-changed 1007+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 1008+// END android-changed 1009 import org.bouncycastle.crypto.params.DSAParameters; 1010 import org.bouncycastle.crypto.params.DSAValidationParameters; 1011 import org.bouncycastle.util.Arrays; 1012@@ -75,7 +76,9 @@ 1013 byte[] part1 = new byte[20]; 1014 byte[] part2 = new byte[20]; 1015 byte[] u = new byte[20]; 1016- SHA1Digest sha1 = new SHA1Digest(); 1017+ // BEGIN android-changed 1018+ Digest sha1 = AndroidDigestFactory.getSHA1(); 1019+ // END android-changed 1020 int n = (L - 1) / 160; 1021 byte[] w = new byte[L / 8]; 1022 1023@@ -166,7 +169,9 @@ 1024 { 1025 // A.1.1.2 Generation of the Probable Primes p and q Using an Approved Hash Function 1026 // FIXME This should be configurable (digest size in bits must be >= N) 1027- Digest d = new SHA256Digest(); 1028+ // BEGIN android-changed 1029+ Digest d = AndroidDigestFactory.getSHA256(); 1030+ // END android-changed 1031 int outlen = d.getDigestSize() * 8; 1032 1033 // 1. Check that the (L, N) pair is in the list of acceptable (L, N pairs) (see Section 4.2). If 1034diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 1035--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000 1036+++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 2012-09-19 21:17:12.000000000 +0000 1037@@ -3,7 +3,9 @@ 1038 import org.bouncycastle.crypto.CipherParameters; 1039 import org.bouncycastle.crypto.Digest; 1040 import org.bouncycastle.crypto.PBEParametersGenerator; 1041-import org.bouncycastle.crypto.digests.MD5Digest; 1042+// BEGIN android-changed 1043+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 1044+// END android-changed 1045 import org.bouncycastle.crypto.params.KeyParameter; 1046 import org.bouncycastle.crypto.params.ParametersWithIV; 1047 1048@@ -17,7 +19,9 @@ 1049 public class OpenSSLPBEParametersGenerator 1050 extends PBEParametersGenerator 1051 { 1052- private Digest digest = new MD5Digest(); 1053+ // BEGIN android-changed 1054+ private Digest digest = AndroidDigestFactory.getMD5(); 1055+ // END android-changed 1056 1057 /** 1058 * Construct a OpenSSL Parameters generator. 1059diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java bcprov-jdk15on-147/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 1060--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 2012-03-22 15:11:48.000000000 +0000 1061+++ bcprov-jdk15on-147/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 2012-09-19 21:17:12.000000000 +0000 1062@@ -4,7 +4,9 @@ 1063 import org.bouncycastle.crypto.Digest; 1064 import org.bouncycastle.crypto.Mac; 1065 import org.bouncycastle.crypto.PBEParametersGenerator; 1066-import org.bouncycastle.crypto.digests.SHA1Digest; 1067+// BEGIN android-changed 1068+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 1069+// END android-changed 1070 import org.bouncycastle.crypto.macs.HMac; 1071 import org.bouncycastle.crypto.params.KeyParameter; 1072 import org.bouncycastle.crypto.params.ParametersWithIV; 1073@@ -27,7 +29,9 @@ 1074 */ 1075 public PKCS5S2ParametersGenerator() 1076 { 1077- this(new SHA1Digest()); 1078+ // BEGIN android-changed 1079+ this(AndroidDigestFactory.getSHA1()); 1080+ // END android-changed 1081 } 1082 1083 public PKCS5S2ParametersGenerator(Digest digest) 1084diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/macs/HMac.java bcprov-jdk15on-147/org/bouncycastle/crypto/macs/HMac.java 1085--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/macs/HMac.java 2012-03-22 15:11:48.000000000 +0000 1086+++ bcprov-jdk15on-147/org/bouncycastle/crypto/macs/HMac.java 2012-09-19 21:17:12.000000000 +0000 1087@@ -32,23 +32,31 @@ 1088 { 1089 blockLengths = new Hashtable(); 1090 1091- blockLengths.put("GOST3411", new Integer(32)); 1092- 1093- blockLengths.put("MD2", new Integer(16)); 1094- blockLengths.put("MD4", new Integer(64)); 1095- blockLengths.put("MD5", new Integer(64)); 1096- 1097- blockLengths.put("RIPEMD128", new Integer(64)); 1098- blockLengths.put("RIPEMD160", new Integer(64)); 1099- 1100- blockLengths.put("SHA-1", new Integer(64)); 1101- blockLengths.put("SHA-224", new Integer(64)); 1102- blockLengths.put("SHA-256", new Integer(64)); 1103- blockLengths.put("SHA-384", new Integer(128)); 1104- blockLengths.put("SHA-512", new Integer(128)); 1105- 1106- blockLengths.put("Tiger", new Integer(64)); 1107- blockLengths.put("Whirlpool", new Integer(64)); 1108+ // BEGIN android-removed 1109+ // blockLengths.put("GOST3411", Integer.valueOf(32)); 1110+ // 1111+ // blockLengths.put("MD2", Integer.valueOf(16)); 1112+ // blockLengths.put("MD4", Integer.valueOf(64)); 1113+ // END android-removed 1114+ blockLengths.put("MD5", Integer.valueOf(64)); 1115+ 1116+ // BEGIN android-removed 1117+ // blockLengths.put("RIPEMD128", Integer.valueOf(64)); 1118+ // blockLengths.put("RIPEMD160", Integer.valueOf(64)); 1119+ // END android-removed 1120+ 1121+ blockLengths.put("SHA-1", Integer.valueOf(64)); 1122+ // BEGIN android-removed 1123+ // blockLengths.put("SHA-224", Integer.valueOf(64)); 1124+ // END android-removed 1125+ blockLengths.put("SHA-256", Integer.valueOf(64)); 1126+ blockLengths.put("SHA-384", Integer.valueOf(128)); 1127+ blockLengths.put("SHA-512", Integer.valueOf(128)); 1128+ 1129+ // BEGIN android-removed 1130+ // blockLengths.put("Tiger", Integer.valueOf(64)); 1131+ // blockLengths.put("Whirlpool", Integer.valueOf(64)); 1132+ // END android-removed 1133 } 1134 1135 private static int getByteLength( 1136diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java bcprov-jdk15on-147/org/bouncycastle/crypto/signers/RSADigestSigner.java 1137--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java 2012-03-22 15:11:48.000000000 +0000 1138+++ bcprov-jdk15on-147/org/bouncycastle/crypto/signers/RSADigestSigner.java 2012-09-19 21:17:12.000000000 +0000 1139@@ -39,18 +39,24 @@ 1140 */ 1141 static 1142 { 1143- oidMap.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128); 1144- oidMap.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160); 1145- oidMap.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256); 1146+ // BEGIN android-removed 1147+ // oidMap.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128); 1148+ // oidMap.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160); 1149+ // oidMap.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256); 1150+ // END android-removed 1151 1152 oidMap.put("SHA-1", X509ObjectIdentifiers.id_SHA1); 1153- oidMap.put("SHA-224", NISTObjectIdentifiers.id_sha224); 1154+ // BEGIN android-removed 1155+ // oidMap.put("SHA-224", NISTObjectIdentifiers.id_sha224); 1156+ // END android-removed 1157 oidMap.put("SHA-256", NISTObjectIdentifiers.id_sha256); 1158 oidMap.put("SHA-384", NISTObjectIdentifiers.id_sha384); 1159 oidMap.put("SHA-512", NISTObjectIdentifiers.id_sha512); 1160 1161- oidMap.put("MD2", PKCSObjectIdentifiers.md2); 1162- oidMap.put("MD4", PKCSObjectIdentifiers.md4); 1163+ // BEGIN android-removed 1164+ // oidMap.put("MD2", PKCSObjectIdentifiers.md2); 1165+ // oidMap.put("MD4", PKCSObjectIdentifiers.md4); 1166+ // END android-removed 1167 oidMap.put("MD5", PKCSObjectIdentifiers.md5); 1168 } 1169 1170diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java bcprov-jdk15on-147/org/bouncycastle/crypto/util/PrivateKeyFactory.java 1171--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2012-03-22 15:11:48.000000000 +0000 1172+++ bcprov-jdk15on-147/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2012-09-19 21:17:12.000000000 +0000 1173@@ -11,7 +11,9 @@ 1174 import org.bouncycastle.asn1.ASN1Sequence; 1175 import org.bouncycastle.asn1.DERInteger; 1176 import org.bouncycastle.asn1.nist.NISTNamedCurves; 1177-import org.bouncycastle.asn1.oiw.ElGamalParameter; 1178+// BEGIN android-removed 1179+// import org.bouncycastle.asn1.oiw.ElGamalParameter; 1180+// END android-removed 1181 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1182 import org.bouncycastle.asn1.pkcs.DHParameter; 1183 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1184@@ -19,7 +21,9 @@ 1185 import org.bouncycastle.asn1.pkcs.RSAPrivateKey; 1186 import org.bouncycastle.asn1.sec.ECPrivateKey; 1187 import org.bouncycastle.asn1.sec.SECNamedCurves; 1188-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 1189+// BEGIN android-removed 1190+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 1191+// END android-removed 1192 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 1193 import org.bouncycastle.asn1.x509.DSAParameter; 1194 import org.bouncycastle.asn1.x9.X962NamedCurves; 1195@@ -33,8 +37,10 @@ 1196 import org.bouncycastle.crypto.params.DSAPrivateKeyParameters; 1197 import org.bouncycastle.crypto.params.ECDomainParameters; 1198 import org.bouncycastle.crypto.params.ECPrivateKeyParameters; 1199-import org.bouncycastle.crypto.params.ElGamalParameters; 1200-import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; 1201+// BEGIN android-removed 1202+// import org.bouncycastle.crypto.params.ElGamalParameters; 1203+// import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; 1204+// END android-removed 1205 import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; 1206 1207 /** 1208@@ -100,14 +106,16 @@ 1209 1210 return new DHPrivateKeyParameters(derX.getValue(), dhParams); 1211 } 1212- else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1213- { 1214- ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); 1215- DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); 1216- 1217- return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters( 1218- params.getP(), params.getG())); 1219- } 1220+ // BEGIN android-removed 1221+ // else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1222+ // { 1223+ // ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); 1224+ // DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); 1225+ // 1226+ // return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters( 1227+ // params.getP(), params.getG())); 1228+ // } 1229+ // END android-removed 1230 else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa)) 1231 { 1232 DERInteger derX = (DERInteger)keyInfo.parsePrivateKey(); 1233@@ -140,10 +148,12 @@ 1234 { 1235 x9 = NISTNamedCurves.getByOID(oid); 1236 1237- if (x9 == null) 1238- { 1239- x9 = TeleTrusTNamedCurves.getByOID(oid); 1240- } 1241+ // BEGIN android-removed 1242+ // if (x9 == null) 1243+ // { 1244+ // x9 = TeleTrusTNamedCurves.getByOID(oid); 1245+ // } 1246+ // END android-removed 1247 } 1248 } 1249 } 1250diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java bcprov-jdk15on-147/org/bouncycastle/crypto/util/PublicKeyFactory.java 1251--- bcprov-jdk15on-147.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java 2012-03-22 15:11:48.000000000 +0000 1252+++ bcprov-jdk15on-147/org/bouncycastle/crypto/util/PublicKeyFactory.java 2012-09-19 21:17:12.000000000 +0000 1253@@ -13,13 +13,17 @@ 1254 import org.bouncycastle.asn1.DERInteger; 1255 import org.bouncycastle.asn1.DEROctetString; 1256 import org.bouncycastle.asn1.nist.NISTNamedCurves; 1257-import org.bouncycastle.asn1.oiw.ElGamalParameter; 1258+// BEGIN android-removed 1259+// import org.bouncycastle.asn1.oiw.ElGamalParameter; 1260+// END android-removed 1261 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1262 import org.bouncycastle.asn1.pkcs.DHParameter; 1263 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1264 import org.bouncycastle.asn1.pkcs.RSAPublicKey; 1265 import org.bouncycastle.asn1.sec.SECNamedCurves; 1266-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 1267+// BEGIN android-removed 1268+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 1269+// END android-removed 1270 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 1271 import org.bouncycastle.asn1.x509.DSAParameter; 1272 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 1273@@ -40,8 +44,10 @@ 1274 import org.bouncycastle.crypto.params.DSAPublicKeyParameters; 1275 import org.bouncycastle.crypto.params.ECDomainParameters; 1276 import org.bouncycastle.crypto.params.ECPublicKeyParameters; 1277-import org.bouncycastle.crypto.params.ElGamalParameters; 1278-import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; 1279+// BEGIN android-removed 1280+// import org.bouncycastle.crypto.params.ElGamalParameters; 1281+// import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; 1282+// END android-removed 1283 import org.bouncycastle.crypto.params.RSAKeyParameters; 1284 1285 /** 1286@@ -135,14 +141,16 @@ 1287 1288 return new DHPublicKeyParameters(derY.getValue(), dhParams); 1289 } 1290- else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1291- { 1292- ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); 1293- DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); 1294- 1295- return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters( 1296- params.getP(), params.getG())); 1297- } 1298+ // BEGIN android-removed 1299+ // else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1300+ // { 1301+ // ElGamalParameter params = new ElGamalParameter((ASN1Sequence)algId.getParameters()); 1302+ // DERInteger derY = (DERInteger)keyInfo.parsePublicKey(); 1303+ // 1304+ // return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters( 1305+ // params.getP(), params.getG())); 1306+ // } 1307+ // END android-removed 1308 else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa) 1309 || algId.getAlgorithm().equals(OIWObjectIdentifiers.dsaWithSHA1)) 1310 { 1311@@ -177,10 +185,12 @@ 1312 { 1313 x9 = NISTNamedCurves.getByOID(oid); 1314 1315- if (x9 == null) 1316- { 1317- x9 = TeleTrusTNamedCurves.getByOID(oid); 1318- } 1319+ // BEGIN android-removed 1320+ // if (x9 == null) 1321+ // { 1322+ // x9 = TeleTrusTNamedCurves.getByOID(oid); 1323+ // } 1324+ // END android-removed 1325 } 1326 } 1327 } 1328diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/DSA.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 1329--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 2012-03-22 15:11:48.000000000 +0000 1330+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 2012-09-19 21:17:12.000000000 +0000 1331@@ -27,26 +27,34 @@ 1332 provider.addAlgorithm("KeyPairGenerator.DSA", PREFIX + "KeyPairGeneratorSpi"); 1333 provider.addAlgorithm("KeyFactory.DSA", PREFIX + "KeyFactorySpi"); 1334 1335- provider.addAlgorithm("Signature.DSA", PREFIX + "DSASigner$stdDSA"); 1336+ // BEGIN android-changed 1337+ provider.addAlgorithm("Signature.SHA1withDSA", PREFIX + "DSASigner$stdDSA"); 1338+ // END android-changed 1339 provider.addAlgorithm("Signature.NONEWITHDSA", PREFIX + "DSASigner$noneDSA"); 1340 1341 provider.addAlgorithm("Alg.Alias.Signature.RAWDSA", "NONEWITHDSA"); 1342 1343- addSignatureAlgorithm(provider, "SHA224", "DSA", PREFIX + "DSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224); 1344- addSignatureAlgorithm(provider, "SHA256", "DSA", PREFIX + "DSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256); 1345- addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384); 1346- addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512); 1347- 1348- provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "DSA"); 1349- provider.addAlgorithm("Alg.Alias.Signature.SHA1withDSA", "DSA"); 1350- provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "DSA"); 1351- provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "DSA"); 1352- provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "DSA"); 1353- provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "DSA"); 1354- provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "DSA"); 1355- provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "DSA"); 1356- provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "DSA"); 1357- provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA"); 1358+ // BEGIN android-removed 1359+ // addSignatureAlgorithm(provider, "SHA224", "DSA", PREFIX + "DSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224); 1360+ // addSignatureAlgorithm(provider, "SHA256", "DSA", PREFIX + "DSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256); 1361+ // addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384); 1362+ // addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512); 1363+ // END android-removed 1364+ 1365+ // BEGIN android-added 1366+ provider.addAlgorithm("Alg.Alias.Signature.DSA", "SHA1withDSA"); 1367+ // END android-added 1368+ // BEGIN android-changed 1369+ provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA"); 1370+ provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "SHA1withDSA"); 1371+ provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "SHA1withDSA"); 1372+ provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "SHA1withDSA"); 1373+ provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA"); 1374+ provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "SHA1withDSA"); 1375+ provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "SHA1withDSA"); 1376+ provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA"); 1377+ provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA1withDSA"); 1378+ // END android-changed 1379 1380 AsymmetricKeyInfoConverter keyFact = new KeyFactorySpi(); 1381 1382diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/EC.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/EC.java 1383--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/EC.java 2012-03-22 15:11:48.000000000 +0000 1384+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/EC.java 2012-09-19 21:17:12.000000000 +0000 1385@@ -1,7 +1,9 @@ 1386 package org.bouncycastle.jcajce.provider.asymmetric; 1387 1388-import org.bouncycastle.asn1.eac.EACObjectIdentifiers; 1389-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1390+// BEGIN android-removed 1391+// import org.bouncycastle.asn1.eac.EACObjectIdentifiers; 1392+// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1393+// END android-removed 1394 import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; 1395 import org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi; 1396 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 1397@@ -21,33 +23,43 @@ 1398 public void configure(ConfigurableProvider provider) 1399 { 1400 provider.addAlgorithm("KeyAgreement.ECDH", PREFIX + "KeyAgreementSpi$DH"); 1401- provider.addAlgorithm("KeyAgreement.ECDHC", PREFIX + "KeyAgreementSpi$DHC"); 1402- provider.addAlgorithm("KeyAgreement.ECMQV", PREFIX + "KeyAgreementSpi$MQV"); 1403- provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$DHwithSHA1KDF"); 1404- provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$MQVwithSHA1KDF"); 1405+ // BEGIN android-removed 1406+ // provider.addAlgorithm("KeyAgreement.ECDHC", PREFIX + "KeyAgreementSpi$DHC"); 1407+ // provider.addAlgorithm("KeyAgreement.ECMQV", PREFIX + "KeyAgreementSpi$MQV"); 1408+ // provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$DHwithSHA1KDF"); 1409+ // provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$MQVwithSHA1KDF"); 1410+ // END android-removed 1411 1412 registerOid(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC", new KeyFactorySpi.EC()); 1413 // TODO Should this be an alias for ECDH? 1414 registerOid(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC", new KeyFactorySpi.EC()); 1415- registerOid(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV", new KeyFactorySpi.ECMQV()); 1416- 1417- registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC"); 1418- // TODO Should this be an alias for ECDH? 1419- registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC"); 1420- registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "EC"); 1421+ // BEGIN android-removed 1422+ // registerOid(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV", new KeyFactorySpi.ECMQV()); 1423+ // END android-removed 1424+ 1425+ // BEGIN android-removed 1426+ // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC"); 1427+ // // TODO Should this be an alias for ECDH? 1428+ // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC"); 1429+ // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "EC"); 1430+ // END android-removed 1431 1432 provider.addAlgorithm("KeyFactory.EC", PREFIX + "KeyFactorySpi$EC"); 1433- provider.addAlgorithm("KeyFactory.ECDSA", PREFIX + "KeyFactorySpi$ECDSA"); 1434- provider.addAlgorithm("KeyFactory.ECDH", PREFIX + "KeyFactorySpi$ECDH"); 1435- provider.addAlgorithm("KeyFactory.ECDHC", PREFIX + "KeyFactorySpi$ECDHC"); 1436- provider.addAlgorithm("KeyFactory.ECMQV", PREFIX + "KeyFactorySpi$ECMQV"); 1437+ // BEGIN android-removed 1438+ // provider.addAlgorithm("KeyFactory.ECDSA", PREFIX + "KeyFactorySpi$ECDSA"); 1439+ // provider.addAlgorithm("KeyFactory.ECDH", PREFIX + "KeyFactorySpi$ECDH"); 1440+ // provider.addAlgorithm("KeyFactory.ECDHC", PREFIX + "KeyFactorySpi$ECDHC"); 1441+ // provider.addAlgorithm("KeyFactory.ECMQV", PREFIX + "KeyFactorySpi$ECMQV"); 1442+ // END android-removed 1443 1444 provider.addAlgorithm("KeyPairGenerator.EC", PREFIX + "KeyPairGeneratorSpi$EC"); 1445- provider.addAlgorithm("KeyPairGenerator.ECDSA", PREFIX + "KeyPairGeneratorSpi$ECDSA"); 1446- provider.addAlgorithm("KeyPairGenerator.ECDH", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1447- provider.addAlgorithm("KeyPairGenerator.ECDHC", PREFIX + "KeyPairGeneratorSpi$ECDHC"); 1448- provider.addAlgorithm("KeyPairGenerator.ECIES", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1449- provider.addAlgorithm("KeyPairGenerator.ECMQV", PREFIX + "KeyPairGeneratorSpi$ECMQV"); 1450+ // BEGIN android-removed 1451+ // provider.addAlgorithm("KeyPairGenerator.ECDSA", PREFIX + "KeyPairGeneratorSpi$ECDSA"); 1452+ // provider.addAlgorithm("KeyPairGenerator.ECDH", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1453+ // provider.addAlgorithm("KeyPairGenerator.ECDHC", PREFIX + "KeyPairGeneratorSpi$ECDHC"); 1454+ // provider.addAlgorithm("KeyPairGenerator.ECIES", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1455+ // provider.addAlgorithm("KeyPairGenerator.ECMQV", PREFIX + "KeyPairGeneratorSpi$ECMQV"); 1456+ // END android-removed 1457 1458 provider.addAlgorithm("Signature.ECDSA", PREFIX + "SignatureSpi$ecDSA"); 1459 provider.addAlgorithm("Signature.NONEwithECDSA", PREFIX + "SignatureSpi$ecDSAnone"); 1460@@ -59,23 +71,29 @@ 1461 provider.addAlgorithm("Alg.Alias.Signature.SHA1WithECDSA", "ECDSA"); 1462 provider.addAlgorithm("Alg.Alias.Signature.ECDSAWithSHA1", "ECDSA"); 1463 provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10045.4.1", "ECDSA"); 1464- provider.addAlgorithm("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA"); 1465- 1466- addSignatureAlgorithm(provider, "SHA224", "ECDSA", PREFIX + "SignatureSpi$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224); 1467+ // BEGIN android-removed 1468+ // provider.addAlgorithm("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA"); 1469+ // END android-removed 1470+ 1471+ // BEGIN android-removed 1472+ // addSignatureAlgorithm(provider, "SHA224", "ECDSA", PREFIX + "SignatureSpi$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224); 1473+ // END android-removed 1474 addSignatureAlgorithm(provider, "SHA256", "ECDSA", PREFIX + "SignatureSpi$ecDSA256", X9ObjectIdentifiers.ecdsa_with_SHA256); 1475 addSignatureAlgorithm(provider, "SHA384", "ECDSA", PREFIX + "SignatureSpi$ecDSA384", X9ObjectIdentifiers.ecdsa_with_SHA384); 1476 addSignatureAlgorithm(provider, "SHA512", "ECDSA", PREFIX + "SignatureSpi$ecDSA512", X9ObjectIdentifiers.ecdsa_with_SHA512); 1477- addSignatureAlgorithm(provider, "RIPEMD160", "ECDSA", PREFIX + "SignatureSpi$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160); 1478- 1479- provider.addAlgorithm("Signature.SHA1WITHECNR", PREFIX + "SignatureSpi$ecNR"); 1480- provider.addAlgorithm("Signature.SHA224WITHECNR", PREFIX + "SignatureSpi$ecNR224"); 1481- provider.addAlgorithm("Signature.SHA256WITHECNR", PREFIX + "SignatureSpi$ecNR256"); 1482- provider.addAlgorithm("Signature.SHA384WITHECNR", PREFIX + "SignatureSpi$ecNR384"); 1483- provider.addAlgorithm("Signature.SHA512WITHECNR", PREFIX + "SignatureSpi$ecNR512"); 1484- 1485- addSignatureAlgorithm(provider, "SHA1", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1); 1486- addSignatureAlgorithm(provider, "SHA224", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224); 1487- addSignatureAlgorithm(provider, "SHA256", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256); 1488+ // BEGIN android-removed 1489+ // addSignatureAlgorithm(provider, "RIPEMD160", "ECDSA", PREFIX + "SignatureSpi$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160); 1490+ // 1491+ // provider.addAlgorithm("Signature.SHA1WITHECNR", PREFIX + "SignatureSpi$ecNR"); 1492+ // provider.addAlgorithm("Signature.SHA224WITHECNR", PREFIX + "SignatureSpi$ecNR224"); 1493+ // provider.addAlgorithm("Signature.SHA256WITHECNR", PREFIX + "SignatureSpi$ecNR256"); 1494+ // provider.addAlgorithm("Signature.SHA384WITHECNR", PREFIX + "SignatureSpi$ecNR384"); 1495+ // provider.addAlgorithm("Signature.SHA512WITHECNR", PREFIX + "SignatureSpi$ecNR512"); 1496+ // 1497+ // addSignatureAlgorithm(provider, "SHA1", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1); 1498+ // addSignatureAlgorithm(provider, "SHA224", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224); 1499+ // addSignatureAlgorithm(provider, "SHA256", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256); 1500+ // END android-removed 1501 } 1502 } 1503 } 1504diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/RSA.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 1505--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 2012-03-22 15:11:48.000000000 +0000 1506+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 2012-11-01 06:02:09.000000000 +0000 1507@@ -3,7 +3,9 @@ 1508 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 1509 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1510 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1511-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1512+// BEGIN android-removed 1513+// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1514+// END android-removed 1515 import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; 1516 import org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi; 1517 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 1518@@ -24,41 +26,49 @@ 1519 public void configure(ConfigurableProvider provider) 1520 { 1521 provider.addAlgorithm("AlgorithmParameters.OAEP", PREFIX + "AlgorithmParametersSpi$OAEP"); 1522- provider.addAlgorithm("AlgorithmParameters.PSS", PREFIX + "AlgorithmParametersSpi$PSS"); 1523- 1524- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS"); 1525- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS"); 1526- 1527- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS"); 1528- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS"); 1529- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS"); 1530- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS"); 1531- 1532- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS"); 1533- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS"); 1534- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS"); 1535- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS"); 1536- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS"); 1537- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS"); 1538- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS"); 1539- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAANDMGF1", "PSS"); 1540+ // BEGIN android-removed 1541+ // provider.addAlgorithm("AlgorithmParameters.PSS", PREFIX + "AlgorithmParametersSpi$PSS"); 1542+ // 1543+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS"); 1544+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS"); 1545+ // 1546+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS"); 1547+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS"); 1548+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS"); 1549+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS"); 1550+ // 1551+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS"); 1552+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS"); 1553+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS"); 1554+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS"); 1555+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS"); 1556+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS"); 1557+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS"); 1558+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAANDMGF1", "PSS"); 1559+ // END android-removed 1560 1561 provider.addAlgorithm("Cipher.RSA", PREFIX + "CipherSpi$NoPadding"); 1562- provider.addAlgorithm("Cipher.RSA/RAW", PREFIX + "CipherSpi$NoPadding"); 1563- provider.addAlgorithm("Cipher.RSA/PKCS1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1564- provider.addAlgorithm("Cipher.1.2.840.113549.1.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1565- provider.addAlgorithm("Cipher.2.5.8.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1566- provider.addAlgorithm("Cipher.RSA/1", PREFIX + "CipherSpi$PKCS1v1_5Padding_PrivateOnly"); 1567- provider.addAlgorithm("Cipher.RSA/2", PREFIX + "CipherSpi$PKCS1v1_5Padding_PublicOnly"); 1568- provider.addAlgorithm("Cipher.RSA/OAEP", PREFIX + "CipherSpi$OAEPPadding"); 1569- provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, PREFIX + "CipherSpi$OAEPPadding"); 1570- provider.addAlgorithm("Cipher.RSA/ISO9796-1", PREFIX + "CipherSpi$ISO9796d1Padding"); 1571+ // BEGIN android-changed 1572+ provider.addAlgorithm("Alg.Alias.Cipher.RSA/RAW", "RSA"); 1573+ // END android-changed 1574+ // BEGIN android-removed 1575+ // provider.addAlgorithm("Cipher.RSA/PKCS1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1576+ // provider.addAlgorithm("Cipher.1.2.840.113549.1.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1577+ // provider.addAlgorithm("Cipher.2.5.8.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1578+ // provider.addAlgorithm("Cipher.RSA/1", PREFIX + "CipherSpi$PKCS1v1_5Padding_PrivateOnly"); 1579+ // provider.addAlgorithm("Cipher.RSA/2", PREFIX + "CipherSpi$PKCS1v1_5Padding_PublicOnly"); 1580+ // provider.addAlgorithm("Cipher.RSA/OAEP", PREFIX + "CipherSpi$OAEPPadding"); 1581+ // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, PREFIX + "CipherSpi$OAEPPadding"); 1582+ // provider.addAlgorithm("Cipher.RSA/ISO9796-1", PREFIX + "CipherSpi$ISO9796d1Padding"); 1583+ // END android-removed 1584 1585 provider.addAlgorithm("Alg.Alias.Cipher.RSA//RAW", "RSA"); 1586 provider.addAlgorithm("Alg.Alias.Cipher.RSA//NOPADDING", "RSA"); 1587- provider.addAlgorithm("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1"); 1588- provider.addAlgorithm("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP"); 1589- provider.addAlgorithm("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1"); 1590+ // BEGIN android-removed 1591+ // provider.addAlgorithm("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1"); 1592+ // provider.addAlgorithm("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP"); 1593+ // provider.addAlgorithm("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1"); 1594+ // END android-removed 1595 1596 provider.addAlgorithm("KeyFactory.RSA", PREFIX + "KeyFactorySpi"); 1597 provider.addAlgorithm("KeyPairGenerator.RSA", PREFIX + "KeyPairGeneratorSpi"); 1598@@ -68,101 +78,117 @@ 1599 registerOid(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA", keyFact); 1600 registerOid(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA", keyFact); 1601 registerOid(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "RSA", keyFact); 1602- registerOid(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "RSA", keyFact); 1603- 1604- registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA"); 1605- registerOidAlgorithmParameters(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA"); 1606- registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP"); 1607- registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS"); 1608- 1609- 1610- provider.addAlgorithm("Signature.RSASSA-PSS", PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1611- provider.addAlgorithm("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1612- provider.addAlgorithm("Signature.OID." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1613- 1614- provider.addAlgorithm("Signature.SHA224withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA224withRSA"); 1615- provider.addAlgorithm("Signature.SHA256withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA256withRSA"); 1616- provider.addAlgorithm("Signature.SHA384withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA384withRSA"); 1617- provider.addAlgorithm("Signature.SHA512withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA512withRSA"); 1618- 1619- provider.addAlgorithm("Signature.RSA", PREFIX + "DigestSignatureSpi$noneRSA"); 1620- provider.addAlgorithm("Signature.RAWRSASSA-PSS", PREFIX + "PSSSignatureSpi$nonePSS"); 1621- 1622- provider.addAlgorithm("Alg.Alias.Signature.RAWRSA", "RSA"); 1623- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSA", "RSA"); 1624- provider.addAlgorithm("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS"); 1625- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS"); 1626- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS"); 1627- provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAANDMGF1", "RAWRSASSA-PSS"); 1628- provider.addAlgorithm("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS"); 1629- 1630- 1631- provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS"); 1632- provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS"); 1633- provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS"); 1634- provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS"); 1635- provider.addAlgorithm("Alg.Alias.Signature.SHA224WITHRSAANDMGF1", "SHA224withRSA/PSS"); 1636- provider.addAlgorithm("Alg.Alias.Signature.SHA256WITHRSAANDMGF1", "SHA256withRSA/PSS"); 1637- provider.addAlgorithm("Alg.Alias.Signature.SHA384WITHRSAANDMGF1", "SHA384withRSA/PSS"); 1638- provider.addAlgorithm("Alg.Alias.Signature.SHA512WITHRSAANDMGF1", "SHA512withRSA/PSS"); 1639- 1640- if (provider.hasAlgorithm("MessageDigest", "MD2")) 1641- { 1642- addDigestSignature(provider, "MD2", PREFIX + "DigestSignatureSpi$MD2", PKCSObjectIdentifiers.md2WithRSAEncryption); 1643- } 1644- 1645- if (provider.hasAlgorithm("MessageDigest", "MD2")) 1646- { 1647- addDigestSignature(provider, "MD4", PREFIX + "DigestSignatureSpi$MD4", PKCSObjectIdentifiers.md4WithRSAEncryption); 1648- } 1649- 1650- if (provider.hasAlgorithm("MessageDigest", "MD2")) 1651+ // BEGIN android-removed 1652+ // registerOid(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "RSA", keyFact); 1653+ // 1654+ // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA"); 1655+ // registerOidAlgorithmParameters(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA"); 1656+ // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP"); 1657+ // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS"); 1658+ // 1659+ // 1660+ // provider.addAlgorithm("Signature.RSASSA-PSS", PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1661+ // provider.addAlgorithm("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1662+ // provider.addAlgorithm("Signature.OID." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1663+ // 1664+ // provider.addAlgorithm("Signature.SHA224withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA224withRSA"); 1665+ // provider.addAlgorithm("Signature.SHA256withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA256withRSA"); 1666+ // provider.addAlgorithm("Signature.SHA384withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA384withRSA"); 1667+ // provider.addAlgorithm("Signature.SHA512withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA512withRSA"); 1668+ // 1669+ // provider.addAlgorithm("Signature.RSA", PREFIX + "DigestSignatureSpi$noneRSA"); 1670+ // provider.addAlgorithm("Signature.RAWRSASSA-PSS", PREFIX + "PSSSignatureSpi$nonePSS"); 1671+ // 1672+ // provider.addAlgorithm("Alg.Alias.Signature.RAWRSA", "RSA"); 1673+ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSA", "RSA"); 1674+ // provider.addAlgorithm("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS"); 1675+ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS"); 1676+ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS"); 1677+ // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAANDMGF1", "RAWRSASSA-PSS"); 1678+ // provider.addAlgorithm("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS"); 1679+ // 1680+ // 1681+ // provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS"); 1682+ // provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS"); 1683+ // provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS"); 1684+ // provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS"); 1685+ // provider.addAlgorithm("Alg.Alias.Signature.SHA224WITHRSAANDMGF1", "SHA224withRSA/PSS"); 1686+ // provider.addAlgorithm("Alg.Alias.Signature.SHA256WITHRSAANDMGF1", "SHA256withRSA/PSS"); 1687+ // provider.addAlgorithm("Alg.Alias.Signature.SHA384WITHRSAANDMGF1", "SHA384withRSA/PSS"); 1688+ // provider.addAlgorithm("Alg.Alias.Signature.SHA512WITHRSAANDMGF1", "SHA512withRSA/PSS"); 1689+ // 1690+ // if (provider.hasAlgorithm("MessageDigest", "MD2")) 1691+ // { 1692+ // addDigestSignature(provider, "MD2", PREFIX + "DigestSignatureSpi$MD2", PKCSObjectIdentifiers.md2WithRSAEncryption); 1693+ // } 1694+ // 1695+ // // BEGIN android-changed 1696+ // if (provider.hasAlgorithm("MessageDigest", "MD4")) 1697+ // // END android-changed 1698+ // { 1699+ // addDigestSignature(provider, "MD4", PREFIX + "DigestSignatureSpi$MD4", PKCSObjectIdentifiers.md4WithRSAEncryption); 1700+ // } 1701+ // END android-removed 1702+ 1703+ // BEGIN android-changed 1704+ if (provider.hasAlgorithm("MessageDigest", "MD5")) 1705+ // END android-changed 1706 { 1707 addDigestSignature(provider, "MD5", PREFIX + "DigestSignatureSpi$MD5", PKCSObjectIdentifiers.md5WithRSAEncryption); 1708- provider.addAlgorithm("Signature.MD5withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$MD5WithRSAEncryption"); 1709- provider.addAlgorithm("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2"); 1710+ // BEGIN android-removed 1711+ // provider.addAlgorithm("Signature.MD5withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$MD5WithRSAEncryption"); 1712+ // provider.addAlgorithm("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2"); 1713+ // END android-removed 1714 } 1715 1716 if (provider.hasAlgorithm("MessageDigest", "SHA1")) 1717 { 1718- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS"); 1719- provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS"); 1720- provider.addAlgorithm("Signature.SHA1withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA1withRSA"); 1721- provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS"); 1722- provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHRSAANDMGF1", "SHA1withRSA/PSS"); 1723+ // BEGIN android-removed 1724+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS"); 1725+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS"); 1726+ // provider.addAlgorithm("Signature.SHA1withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA1withRSA"); 1727+ // provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS"); 1728+ // provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHRSAANDMGF1", "SHA1withRSA/PSS"); 1729+ // END android-removed 1730 1731 addDigestSignature(provider, "SHA1", PREFIX + "DigestSignatureSpi$SHA1", PKCSObjectIdentifiers.sha1WithRSAEncryption); 1732 1733- provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2"); 1734- provider.addAlgorithm("Signature.SHA1withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$SHA1WithRSAEncryption"); 1735+ // BEGIN android-removed 1736+ // provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2"); 1737+ // provider.addAlgorithm("Signature.SHA1withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$SHA1WithRSAEncryption"); 1738+ // END android-removed 1739 provider.addAlgorithm("Alg.Alias.Signature." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA"); 1740 provider.addAlgorithm("Alg.Alias.Signature.OID." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA"); 1741 } 1742 1743- addDigestSignature(provider, "SHA224", PREFIX + "DigestSignatureSpi$SHA224", PKCSObjectIdentifiers.sha224WithRSAEncryption); 1744+ // BEGIN android-removed 1745+ // addDigestSignature(provider, "SHA224", PREFIX + "DigestSignatureSpi$SHA224", PKCSObjectIdentifiers.sha224WithRSAEncryption); 1746+ // END android-removed 1747 addDigestSignature(provider, "SHA256", PREFIX + "DigestSignatureSpi$SHA256", PKCSObjectIdentifiers.sha256WithRSAEncryption); 1748 addDigestSignature(provider, "SHA384", PREFIX + "DigestSignatureSpi$SHA384", PKCSObjectIdentifiers.sha384WithRSAEncryption); 1749 addDigestSignature(provider, "SHA512", PREFIX + "DigestSignatureSpi$SHA512", PKCSObjectIdentifiers.sha512WithRSAEncryption); 1750 1751- if (provider.hasAlgorithm("MessageDigest", "RIPEMD128")) 1752- { 1753- addDigestSignature(provider, "RIPEMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 1754- addDigestSignature(provider, "RMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", null); 1755- } 1756- 1757- if (provider.hasAlgorithm("MessageDigest", "RIPEMD160")) 1758- { 1759- addDigestSignature(provider, "RIPEMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 1760- addDigestSignature(provider, "RMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", null); 1761- provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2"); 1762- provider.addAlgorithm("Signature.RIPEMD160withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$RIPEMD160WithRSAEncryption"); 1763- } 1764- 1765- if (provider.hasAlgorithm("MessageDigest", "RIPEMD256")) 1766- { 1767- addDigestSignature(provider, "RIPEMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 1768- addDigestSignature(provider, "RMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", null); 1769- } 1770+ // BEGIN android-removed 1771+ // if (provider.hasAlgorithm("MessageDigest", "RIPEMD128")) 1772+ // { 1773+ // addDigestSignature(provider, "RIPEMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 1774+ // addDigestSignature(provider, "RMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", null); 1775+ // } 1776+ // 1777+ // if (provider.hasAlgorithm("MessageDigest", "RIPEMD160")) 1778+ // { 1779+ // addDigestSignature(provider, "RIPEMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 1780+ // addDigestSignature(provider, "RMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", null); 1781+ // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2"); 1782+ // provider.addAlgorithm("Signature.RIPEMD160withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$RIPEMD160WithRSAEncryption"); 1783+ // } 1784+ // 1785+ // if (provider.hasAlgorithm("MessageDigest", "RIPEMD256")) 1786+ // { 1787+ // addDigestSignature(provider, "RIPEMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 1788+ // addDigestSignature(provider, "RMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", null); 1789+ // } 1790+ // END android-removed 1791 } 1792 1793 private void addDigestSignature( 1794diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/X509.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/X509.java 1795--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/X509.java 2012-03-22 15:11:48.000000000 +0000 1796+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/X509.java 2012-09-19 21:17:12.000000000 +0000 1797@@ -18,8 +18,10 @@ 1798 1799 public void configure(ConfigurableProvider provider) 1800 { 1801- provider.addAlgorithm("KeyFactory.X.509", "org.bouncycastle.jcajce.provider.asymmetric.x509.KeyFactory"); 1802- provider.addAlgorithm("Alg.Alias.KeyFactory.X509", "X.509"); 1803+ // BEGIN android-removed 1804+ // provider.addAlgorithm("KeyFactory.X.509", "org.bouncycastle.jcajce.provider.asymmetric.x509.KeyFactory"); 1805+ // provider.addAlgorithm("Alg.Alias.KeyFactory.X509", "X.509"); 1806+ // END android-removed 1807 1808 // 1809 // certificate factories. 1810diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java 1811--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java 2012-03-22 15:11:48.000000000 +0000 1812+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyAgreementSpi.java 2012-09-19 21:17:12.000000000 +0000 1813@@ -35,10 +35,12 @@ 1814 1815 static 1816 { 1817- Integer i64 = new Integer(64); 1818- Integer i192 = new Integer(192); 1819- Integer i128 = new Integer(128); 1820- Integer i256 = new Integer(256); 1821+ // BEGIN android-changed 1822+ Integer i64 = Integer.valueOf(64); 1823+ Integer i192 = Integer.valueOf(192); 1824+ Integer i128 = Integer.valueOf(128); 1825+ Integer i256 = Integer.valueOf(256); 1826+ // END android-changed 1827 1828 algorithms.put("DES", i64); 1829 algorithms.put("DESEDE", i192); 1830diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java 1831--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java 2012-03-22 15:11:48.000000000 +0000 1832+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dh/KeyPairGeneratorSpi.java 2012-09-19 21:17:12.000000000 +0000 1833@@ -63,7 +63,9 @@ 1834 { 1835 if (!initialised) 1836 { 1837- Integer paramStrength = new Integer(strength); 1838+ // BEGIN android-changed 1839+ Integer paramStrength = Integer.valueOf(strength); 1840+ // END android-changed 1841 1842 if (params.containsKey(paramStrength)) 1843 { 1844diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 1845--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 2012-03-22 15:11:48.000000000 +0000 1846+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 2012-09-19 21:17:12.000000000 +0000 1847@@ -23,11 +23,16 @@ 1848 import org.bouncycastle.crypto.DSA; 1849 import org.bouncycastle.crypto.Digest; 1850 import org.bouncycastle.crypto.digests.NullDigest; 1851-import org.bouncycastle.crypto.digests.SHA1Digest; 1852-import org.bouncycastle.crypto.digests.SHA224Digest; 1853-import org.bouncycastle.crypto.digests.SHA256Digest; 1854-import org.bouncycastle.crypto.digests.SHA384Digest; 1855-import org.bouncycastle.crypto.digests.SHA512Digest; 1856+// BEGIN android-added 1857+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 1858+// END android-added 1859+// BEGIN android-removed 1860+// import org.bouncycastle.crypto.digests.SHA1Digest; 1861+// import org.bouncycastle.crypto.digests.SHA224Digest; 1862+// import org.bouncycastle.crypto.digests.SHA256Digest; 1863+// import org.bouncycastle.crypto.digests.SHA384Digest; 1864+// import org.bouncycastle.crypto.digests.SHA512Digest; 1865+// END android-removed 1866 import org.bouncycastle.crypto.params.ParametersWithRandom; 1867 1868 public class DSASigner 1869@@ -228,45 +233,49 @@ 1870 { 1871 public stdDSA() 1872 { 1873- super(new SHA1Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1874+ // BEGIN android-changed 1875+ super(AndroidDigestFactory.getSHA1(), new org.bouncycastle.crypto.signers.DSASigner()); 1876+ // END android-changed 1877 } 1878 } 1879 1880- static public class dsa224 1881- extends DSASigner 1882- { 1883- public dsa224() 1884- { 1885- super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1886- } 1887- } 1888- 1889- static public class dsa256 1890- extends DSASigner 1891- { 1892- public dsa256() 1893- { 1894- super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1895- } 1896- } 1897- 1898- static public class dsa384 1899- extends DSASigner 1900- { 1901- public dsa384() 1902- { 1903- super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1904- } 1905- } 1906- 1907- static public class dsa512 1908- extends DSASigner 1909- { 1910- public dsa512() 1911- { 1912- super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1913- } 1914- } 1915+ // BEGIN android-removed 1916+ // static public class dsa224 1917+ // extends DSASigner 1918+ // { 1919+ // public dsa224() 1920+ // { 1921+ // super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1922+ // } 1923+ // } 1924+ // 1925+ // static public class dsa256 1926+ // extends DSASigner 1927+ // { 1928+ // public dsa256() 1929+ // { 1930+ // super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1931+ // } 1932+ // } 1933+ // 1934+ // static public class dsa384 1935+ // extends DSASigner 1936+ // { 1937+ // public dsa384() 1938+ // { 1939+ // super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1940+ // } 1941+ // } 1942+ // 1943+ // static public class dsa512 1944+ // extends DSASigner 1945+ // { 1946+ // public dsa512() 1947+ // { 1948+ // super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 1949+ // } 1950+ // } 1951+ // END android-removed 1952 1953 static public class noneDSA 1954 extends DSASigner 1955diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java 1956--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java 2012-03-22 15:11:48.000000000 +0000 1957+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/BCECPrivateKey.java 2012-09-19 21:17:12.000000000 +0000 1958@@ -19,8 +19,10 @@ 1959 import org.bouncycastle.asn1.DERInteger; 1960 import org.bouncycastle.asn1.DERNull; 1961 import org.bouncycastle.asn1.DERObjectIdentifier; 1962-import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 1963-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 1964+// BEGIN android-removed 1965+// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 1966+// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 1967+// END android-removed 1968 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 1969 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 1970 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 1971@@ -222,21 +224,23 @@ 1972 ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters()); 1973 X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid); 1974 1975- if (ecP == null) // GOST Curve 1976- { 1977- ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid); 1978- EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed()); 1979- 1980- ecSpec = new ECNamedCurveSpec( 1981- ECGOST3410NamedCurves.getName(oid), 1982- ellipticCurve, 1983- new ECPoint( 1984- gParam.getG().getX().toBigInteger(), 1985- gParam.getG().getY().toBigInteger()), 1986- gParam.getN(), 1987- gParam.getH()); 1988- } 1989- else 1990+ // BEGIN android-removed 1991+ // if (ecP == null) // GOST Curve 1992+ // { 1993+ // ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid); 1994+ // EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed()); 1995+ // 1996+ // ecSpec = new ECNamedCurveSpec( 1997+ // ECGOST3410NamedCurves.getName(oid), 1998+ // ellipticCurve, 1999+ // new ECPoint( 2000+ // gParam.getG().getX().toBigInteger(), 2001+ // gParam.getG().getY().toBigInteger()), 2002+ // gParam.getN(), 2003+ // gParam.getH()); 2004+ // } 2005+ // else 2006+ // END android-removed 2007 { 2008 EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed()); 2009 2010@@ -350,11 +354,13 @@ 2011 2012 try 2013 { 2014- if (algorithm.equals("ECGOST3410")) 2015- { 2016- info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 2017- } 2018- else 2019+ // BEGIN android-removed 2020+ // if (algorithm.equals("ECGOST3410")) 2021+ // { 2022+ // info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 2023+ // } 2024+ // else 2025+ // END android-removed 2026 { 2027 2028 info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 2029diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java 2030--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java 2012-03-22 15:11:48.000000000 +0000 2031+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/ECUtil.java 2012-09-19 21:17:12.000000000 +0000 2032@@ -5,10 +5,14 @@ 2033 import java.security.PublicKey; 2034 2035 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 2036-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 2037+// BEGIN android-removed 2038+// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 2039+// END android-removed 2040 import org.bouncycastle.asn1.nist.NISTNamedCurves; 2041 import org.bouncycastle.asn1.sec.SECNamedCurves; 2042-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 2043+// BEGIN android-removed 2044+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 2045+// END android-removed 2046 import org.bouncycastle.asn1.x9.X962NamedCurves; 2047 import org.bouncycastle.asn1.x9.X9ECParameters; 2048 import org.bouncycastle.crypto.params.AsymmetricKeyParameter; 2049@@ -166,14 +170,16 @@ 2050 { 2051 oid = NISTNamedCurves.getOID(name); 2052 } 2053- if (oid == null) 2054- { 2055- oid = TeleTrusTNamedCurves.getOID(name); 2056- } 2057- if (oid == null) 2058- { 2059- oid = ECGOST3410NamedCurves.getOID(name); 2060- } 2061+ // BEGIN android-removed 2062+ // if (oid == null) 2063+ // { 2064+ // oid = TeleTrusTNamedCurves.getOID(name); 2065+ // } 2066+ // if (oid == null) 2067+ // { 2068+ // oid = ECGOST3410NamedCurves.getOID(name); 2069+ // } 2070+ // END android-removed 2071 } 2072 2073 return oid; 2074@@ -191,10 +197,12 @@ 2075 { 2076 params = NISTNamedCurves.getByOID(oid); 2077 } 2078- if (params == null) 2079- { 2080- params = TeleTrusTNamedCurves.getByOID(oid); 2081- } 2082+ // BEGIN android-removed 2083+ // if (params == null) 2084+ // { 2085+ // params = TeleTrusTNamedCurves.getByOID(oid); 2086+ // } 2087+ // END android-removed 2088 } 2089 2090 return params; 2091@@ -212,14 +220,16 @@ 2092 { 2093 name = NISTNamedCurves.getName(oid); 2094 } 2095- if (name == null) 2096- { 2097- name = TeleTrusTNamedCurves.getName(oid); 2098- } 2099- if (name == null) 2100- { 2101- name = ECGOST3410NamedCurves.getName(oid); 2102- } 2103+ // BEGIN android-removed 2104+ // if (name == null) 2105+ // { 2106+ // name = TeleTrusTNamedCurves.getName(oid); 2107+ // } 2108+ // if (name == null) 2109+ // { 2110+ // name = ECGOST3410NamedCurves.getName(oid); 2111+ // } 2112+ // END android-removed 2113 } 2114 2115 return name; 2116diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2117--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2012-03-22 15:11:48.000000000 +0000 2118+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2012-09-19 21:17:12.000000000 +0000 2119@@ -23,20 +23,26 @@ 2120 import org.bouncycastle.crypto.CipherParameters; 2121 import org.bouncycastle.crypto.DerivationFunction; 2122 import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; 2123-import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement; 2124-import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement; 2125-import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters; 2126-import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator; 2127+// BEGIN android-removed 2128+// import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement; 2129+// import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement; 2130+// import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters; 2131+// import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator; 2132+// END android-removed 2133 import org.bouncycastle.crypto.digests.SHA1Digest; 2134 import org.bouncycastle.crypto.params.ECDomainParameters; 2135 import org.bouncycastle.crypto.params.ECPrivateKeyParameters; 2136 import org.bouncycastle.crypto.params.ECPublicKeyParameters; 2137-import org.bouncycastle.crypto.params.MQVPrivateParameters; 2138-import org.bouncycastle.crypto.params.MQVPublicParameters; 2139+// BEGIN android-removed 2140+// import org.bouncycastle.crypto.params.MQVPrivateParameters; 2141+// import org.bouncycastle.crypto.params.MQVPublicParameters; 2142+// END android-removed 2143 import org.bouncycastle.jce.interfaces.ECPrivateKey; 2144 import org.bouncycastle.jce.interfaces.ECPublicKey; 2145-import org.bouncycastle.jce.interfaces.MQVPrivateKey; 2146-import org.bouncycastle.jce.interfaces.MQVPublicKey; 2147+// BEGIN android-removed 2148+// import org.bouncycastle.jce.interfaces.MQVPrivateKey; 2149+// import org.bouncycastle.jce.interfaces.MQVPublicKey; 2150+// END android-removed 2151 2152 /** 2153 * Diffie-Hellman key agreement using elliptic curve keys, ala IEEE P1363 2154@@ -52,9 +58,11 @@ 2155 2156 static 2157 { 2158- Integer i128 = new Integer(128); 2159- Integer i192 = new Integer(192); 2160- Integer i256 = new Integer(256); 2161+ // BEGIN android-changed 2162+ Integer i128 = Integer.valueOf(128); 2163+ Integer i192 = Integer.valueOf(192); 2164+ Integer i256 = Integer.valueOf(256); 2165+ // END android-changed 2166 2167 algorithms.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), i128); 2168 algorithms.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), i192); 2169@@ -69,7 +77,9 @@ 2170 private BigInteger result; 2171 private ECDomainParameters parameters; 2172 private BasicAgreement agreement; 2173- private DerivationFunction kdf; 2174+ // BEGIN android-removed 2175+ // private DerivationFunction kdf; 2176+ // END android-removed 2177 2178 private byte[] bigIntToBytes( 2179 BigInteger r) 2180@@ -84,7 +94,9 @@ 2181 { 2182 this.kaAlgorithm = kaAlgorithm; 2183 this.agreement = agreement; 2184- this.kdf = kdf; 2185+ // BEGIN android-removed 2186+ // this.kdf = kdf; 2187+ // END android-removed 2188 } 2189 2190 protected Key engineDoPhase( 2191@@ -103,25 +115,27 @@ 2192 } 2193 2194 CipherParameters pubKey; 2195- if (agreement instanceof ECMQVBasicAgreement) 2196- { 2197- if (!(key instanceof MQVPublicKey)) 2198- { 2199- throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2200- + getSimpleName(MQVPublicKey.class) + " for doPhase"); 2201- } 2202- 2203- MQVPublicKey mqvPubKey = (MQVPublicKey)key; 2204- ECPublicKeyParameters staticKey = (ECPublicKeyParameters) 2205- ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey()); 2206- ECPublicKeyParameters ephemKey = (ECPublicKeyParameters) 2207- ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey()); 2208- 2209- pubKey = new MQVPublicParameters(staticKey, ephemKey); 2210- 2211- // TODO Validate that all the keys are using the same parameters? 2212- } 2213- else 2214+ // BEGIN android-removed 2215+ // if (agreement instanceof ECMQVBasicAgreement) 2216+ // { 2217+ // if (!(key instanceof MQVPublicKey)) 2218+ // { 2219+ // throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2220+ // + getSimpleName(MQVPublicKey.class) + " for doPhase"); 2221+ // } 2222+ // 2223+ // MQVPublicKey mqvPubKey = (MQVPublicKey)key; 2224+ // ECPublicKeyParameters staticKey = (ECPublicKeyParameters) 2225+ // ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey()); 2226+ // ECPublicKeyParameters ephemKey = (ECPublicKeyParameters) 2227+ // ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey()); 2228+ // 2229+ // pubKey = new MQVPublicParameters(staticKey, ephemKey); 2230+ // 2231+ // // TODO Validate that all the keys are using the same parameters? 2232+ // } 2233+ // else 2234+ // END android-removed 2235 { 2236 if (!(key instanceof ECPublicKey)) 2237 { 2238@@ -142,11 +156,13 @@ 2239 protected byte[] engineGenerateSecret() 2240 throws IllegalStateException 2241 { 2242- if (kdf != null) 2243- { 2244- throw new UnsupportedOperationException( 2245- "KDF can only be used when algorithm is known"); 2246- } 2247+ // BEGIN android-removed 2248+ // if (kdf != null) 2249+ // { 2250+ // throw new UnsupportedOperationException( 2251+ // "KDF can only be used when algorithm is known"); 2252+ // } 2253+ // END android-removed 2254 2255 return bigIntToBytes(result); 2256 } 2257@@ -174,23 +190,25 @@ 2258 { 2259 byte[] secret = bigIntToBytes(result); 2260 2261- if (kdf != null) 2262- { 2263- if (!algorithms.containsKey(algorithm)) 2264- { 2265- throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm); 2266- } 2267- 2268- int keySize = ((Integer)algorithms.get(algorithm)).intValue(); 2269- 2270- DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret); 2271- 2272- byte[] keyBytes = new byte[keySize / 8]; 2273- kdf.init(params); 2274- kdf.generateBytes(keyBytes, 0, keyBytes.length); 2275- secret = keyBytes; 2276- } 2277- else 2278+ // BEGIN android-removed 2279+ // if (kdf != null) 2280+ // { 2281+ // if (!algorithms.containsKey(algorithm)) 2282+ // { 2283+ // throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm); 2284+ // } 2285+ // 2286+ // int keySize = ((Integer)algorithms.get(algorithm)).intValue(); 2287+ // 2288+ // DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret); 2289+ // 2290+ // byte[] keyBytes = new byte[keySize / 8]; 2291+ // kdf.init(params); 2292+ // kdf.generateBytes(keyBytes, 0, keyBytes.length); 2293+ // secret = keyBytes; 2294+ // } 2295+ // else 2296+ // END android-removed 2297 { 2298 // TODO Should we be ensuring the key is the right length? 2299 } 2300@@ -218,35 +236,37 @@ 2301 private void initFromKey(Key key) 2302 throws InvalidKeyException 2303 { 2304- if (agreement instanceof ECMQVBasicAgreement) 2305- { 2306- if (!(key instanceof MQVPrivateKey)) 2307- { 2308- throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2309- + getSimpleName(MQVPrivateKey.class) + " for initialisation"); 2310- } 2311- 2312- MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key; 2313- ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters) 2314- ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey()); 2315- ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters) 2316- ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey()); 2317- 2318- ECPublicKeyParameters ephemPubKey = null; 2319- if (mqvPrivKey.getEphemeralPublicKey() != null) 2320- { 2321- ephemPubKey = (ECPublicKeyParameters) 2322- ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey()); 2323- } 2324- 2325- MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey); 2326- this.parameters = staticPrivKey.getParameters(); 2327- 2328- // TODO Validate that all the keys are using the same parameters? 2329- 2330- agreement.init(localParams); 2331- } 2332- else 2333+ // BEGIN android-removed 2334+ // if (agreement instanceof ECMQVBasicAgreement) 2335+ // { 2336+ // if (!(key instanceof MQVPrivateKey)) 2337+ // { 2338+ // throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2339+ // + getSimpleName(MQVPrivateKey.class) + " for initialisation"); 2340+ // } 2341+ // 2342+ // MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key; 2343+ // ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters) 2344+ // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey()); 2345+ // ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters) 2346+ // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey()); 2347+ // 2348+ // ECPublicKeyParameters ephemPubKey = null; 2349+ // if (mqvPrivKey.getEphemeralPublicKey() != null) 2350+ // { 2351+ // ephemPubKey = (ECPublicKeyParameters) 2352+ // ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey()); 2353+ // } 2354+ // 2355+ // MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey); 2356+ // this.parameters = staticPrivKey.getParameters(); 2357+ // 2358+ // // TODO Validate that all the keys are using the same parameters? 2359+ // 2360+ // agreement.init(localParams); 2361+ // } 2362+ // else 2363+ // END android-removed 2364 { 2365 if (!(key instanceof ECPrivateKey)) 2366 { 2367@@ -277,39 +297,41 @@ 2368 } 2369 } 2370 2371- public static class DHC 2372- extends KeyAgreementSpi 2373- { 2374- public DHC() 2375- { 2376- super("ECDHC", new ECDHCBasicAgreement(), null); 2377- } 2378- } 2379- 2380- public static class MQV 2381- extends KeyAgreementSpi 2382- { 2383- public MQV() 2384- { 2385- super("ECMQV", new ECMQVBasicAgreement(), null); 2386- } 2387- } 2388- 2389- public static class DHwithSHA1KDF 2390- extends KeyAgreementSpi 2391- { 2392- public DHwithSHA1KDF() 2393- { 2394- super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2395- } 2396- } 2397- 2398- public static class MQVwithSHA1KDF 2399- extends KeyAgreementSpi 2400- { 2401- public MQVwithSHA1KDF() 2402- { 2403- super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2404- } 2405- } 2406+ // BEGIN android-removed 2407+ // public static class DHC 2408+ // extends KeyAgreementSpi 2409+ // { 2410+ // public DHC() 2411+ // { 2412+ // super("ECDHC", new ECDHCBasicAgreement(), null); 2413+ // } 2414+ // } 2415+ // 2416+ // public static class MQV 2417+ // extends KeyAgreementSpi 2418+ // { 2419+ // public MQV() 2420+ // { 2421+ // super("ECMQV", new ECMQVBasicAgreement(), null); 2422+ // } 2423+ // } 2424+ // 2425+ // public static class DHwithSHA1KDF 2426+ // extends KeyAgreementSpi 2427+ // { 2428+ // public DHwithSHA1KDF() 2429+ // { 2430+ // super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2431+ // } 2432+ // } 2433+ // 2434+ // public static class MQVwithSHA1KDF 2435+ // extends KeyAgreementSpi 2436+ // { 2437+ // public MQVwithSHA1KDF() 2438+ // { 2439+ // super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2440+ // } 2441+ // } 2442+ // END android-removed 2443 } 2444diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2445--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2012-03-22 15:11:48.000000000 +0000 2446+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2012-09-19 21:17:12.000000000 +0000 2447@@ -200,14 +200,16 @@ 2448 } 2449 } 2450 2451- public static class ECGOST3410 2452- extends KeyFactorySpi 2453- { 2454- public ECGOST3410() 2455- { 2456- super("ECGOST3410", BouncyCastleProvider.CONFIGURATION); 2457- } 2458- } 2459+ // BEGIN android-removed 2460+ // public static class ECGOST3410 2461+ // extends KeyFactorySpi 2462+ // { 2463+ // public ECGOST3410() 2464+ // { 2465+ // super("ECGOST3410", BouncyCastleProvider.CONFIGURATION); 2466+ // } 2467+ // } 2468+ // END android-removed 2469 2470 public static class ECDH 2471 extends KeyFactorySpi 2472diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2473--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2012-03-22 15:11:48.000000000 +0000 2474+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2012-09-19 21:17:12.000000000 +0000 2475@@ -12,7 +12,9 @@ 2476 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 2477 import org.bouncycastle.asn1.nist.NISTNamedCurves; 2478 import org.bouncycastle.asn1.sec.SECNamedCurves; 2479-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 2480+// BEGIN android-removed 2481+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 2482+// END android-removed 2483 import org.bouncycastle.asn1.x9.X962NamedCurves; 2484 import org.bouncycastle.asn1.x9.X9ECParameters; 2485 import org.bouncycastle.crypto.AsymmetricCipherKeyPair; 2486@@ -55,13 +57,15 @@ 2487 static { 2488 ecParameters = new Hashtable(); 2489 2490- ecParameters.put(new Integer(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192 2491- ecParameters.put(new Integer(239), new ECGenParameterSpec("prime239v1")); 2492- ecParameters.put(new Integer(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256 2493- 2494- ecParameters.put(new Integer(224), new ECGenParameterSpec("P-224")); 2495- ecParameters.put(new Integer(384), new ECGenParameterSpec("P-384")); 2496- ecParameters.put(new Integer(521), new ECGenParameterSpec("P-521")); 2497+ // BEGIN android-changed 2498+ ecParameters.put(Integer.valueOf(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192 2499+ ecParameters.put(Integer.valueOf(239), new ECGenParameterSpec("prime239v1")); 2500+ ecParameters.put(Integer.valueOf(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256 2501+ 2502+ ecParameters.put(Integer.valueOf(224), new ECGenParameterSpec("P-224")); 2503+ ecParameters.put(Integer.valueOf(384), new ECGenParameterSpec("P-384")); 2504+ ecParameters.put(Integer.valueOf(521), new ECGenParameterSpec("P-521")); 2505+ // END android-changed 2506 } 2507 2508 public EC() 2509@@ -85,8 +89,16 @@ 2510 SecureRandom random) 2511 { 2512 this.strength = strength; 2513+ // BEGIN android-added 2514+ if (random != null) { 2515+ // END android-added 2516 this.random = random; 2517- ECGenParameterSpec ecParams = (ECGenParameterSpec)ecParameters.get(new Integer(strength)); 2518+ // BEGIN android-added 2519+ } 2520+ // END android-added 2521+ // BEGIN android-changed 2522+ ECGenParameterSpec ecParams = (ECGenParameterSpec)ecParameters.get(Integer.valueOf(strength)); 2523+ // END android-changed 2524 2525 if (ecParams != null) 2526 { 2527@@ -110,6 +122,11 @@ 2528 SecureRandom random) 2529 throws InvalidAlgorithmParameterException 2530 { 2531+ // BEGIN android-added 2532+ if (random == null) { 2533+ random = this.random; 2534+ } 2535+ // END android-added 2536 if (params instanceof ECParameterSpec) 2537 { 2538 ECParameterSpec p = (ECParameterSpec)params; 2539@@ -154,10 +171,12 @@ 2540 { 2541 ecP = NISTNamedCurves.getByName(curveName); 2542 } 2543- if (ecP == null) 2544- { 2545- ecP = TeleTrusTNamedCurves.getByName(curveName); 2546- } 2547+ // BEGIN android-removed 2548+ // if (ecP == null) 2549+ // { 2550+ // ecP = TeleTrusTNamedCurves.getByName(curveName); 2551+ // } 2552+ // END android-removed 2553 if (ecP == null) 2554 { 2555 // See if it's actually an OID string (SunJSSE ServerHandshaker setupEphemeralECDHKeys bug) 2556@@ -173,10 +192,12 @@ 2557 { 2558 ecP = NISTNamedCurves.getByOID(oid); 2559 } 2560- if (ecP == null) 2561- { 2562- ecP = TeleTrusTNamedCurves.getByOID(oid); 2563- } 2564+ // BEGIN android-removed 2565+ // if (ecP == null) 2566+ // { 2567+ // ecP = TeleTrusTNamedCurves.getByOID(oid); 2568+ // } 2569+ // END android-removed 2570 if (ecP == null) 2571 { 2572 throw new InvalidAlgorithmParameterException("unknown curve OID: " + curveName); 2573@@ -231,7 +252,15 @@ 2574 { 2575 if (!initialised) 2576 { 2577- throw new IllegalStateException("EC Key Pair Generator not initialised"); 2578+ // BEGIN android-removed 2579+ // throw new IllegalStateException("EC Key Pair Generator not initialised"); 2580+ // END android-removed 2581+ // BEGIN android-added 2582+ /* 2583+ * KeyPairGenerator documentation says that a default initialization must be provided 2584+ */ 2585+ initialize(192, random); 2586+ // END android-added 2587 } 2588 2589 AsymmetricCipherKeyPair pair = engine.generateKeyPair(); 2590diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2591--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2012-03-22 15:11:48.000000000 +0000 2592+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2012-09-19 21:17:12.000000000 +0000 2593@@ -18,15 +18,22 @@ 2594 import org.bouncycastle.crypto.DSA; 2595 import org.bouncycastle.crypto.Digest; 2596 import org.bouncycastle.crypto.digests.NullDigest; 2597-import org.bouncycastle.crypto.digests.RIPEMD160Digest; 2598-import org.bouncycastle.crypto.digests.SHA1Digest; 2599-import org.bouncycastle.crypto.digests.SHA224Digest; 2600-import org.bouncycastle.crypto.digests.SHA256Digest; 2601-import org.bouncycastle.crypto.digests.SHA384Digest; 2602-import org.bouncycastle.crypto.digests.SHA512Digest; 2603+// BEGIN android-added 2604+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 2605+// END android-added 2606+// BEGIN android-removed 2607+// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 2608+// import org.bouncycastle.crypto.digests.SHA1Digest; 2609+// import org.bouncycastle.crypto.digests.SHA224Digest; 2610+// import org.bouncycastle.crypto.digests.SHA256Digest; 2611+// import org.bouncycastle.crypto.digests.SHA384Digest; 2612+// import org.bouncycastle.crypto.digests.SHA512Digest; 2613+// END android-removed 2614 import org.bouncycastle.crypto.params.ParametersWithRandom; 2615 import org.bouncycastle.crypto.signers.ECDSASigner; 2616-import org.bouncycastle.crypto.signers.ECNRSigner; 2617+// BEGIN android-removed 2618+// import org.bouncycastle.crypto.signers.ECNRSigner; 2619+// END android-removed 2620 import org.bouncycastle.jcajce.provider.asymmetric.util.DSABase; 2621 import org.bouncycastle.jcajce.provider.asymmetric.util.DSAEncoder; 2622 import org.bouncycastle.jce.interfaces.ECKey; 2623@@ -108,7 +115,9 @@ 2624 { 2625 public ecDSA() 2626 { 2627- super(new SHA1Digest(), new ECDSASigner(), new StdDSAEncoder()); 2628+ // BEGIN android-changed 2629+ super(AndroidDigestFactory.getSHA1(), new ECDSASigner(), new StdDSAEncoder()); 2630+ // END android-changed 2631 } 2632 } 2633 2634@@ -121,21 +130,25 @@ 2635 } 2636 } 2637 2638- static public class ecDSA224 2639- extends SignatureSpi 2640- { 2641- public ecDSA224() 2642- { 2643- super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder()); 2644- } 2645- } 2646+ // BEGIN android-removed 2647+ // static public class ecDSA224 2648+ // extends SignatureSpi 2649+ // { 2650+ // public ecDSA224() 2651+ // { 2652+ // super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder()); 2653+ // } 2654+ // } 2655+ // END android-removed 2656 2657 static public class ecDSA256 2658 extends SignatureSpi 2659 { 2660 public ecDSA256() 2661 { 2662- super(new SHA256Digest(), new ECDSASigner(), new StdDSAEncoder()); 2663+ // BEGIN android-changed 2664+ super(AndroidDigestFactory.getSHA256(), new ECDSASigner(), new StdDSAEncoder()); 2665+ // END android-changed 2666 } 2667 } 2668 2669@@ -144,7 +157,9 @@ 2670 { 2671 public ecDSA384() 2672 { 2673- super(new SHA384Digest(), new ECDSASigner(), new StdDSAEncoder()); 2674+ // BEGIN android-changed 2675+ super(AndroidDigestFactory.getSHA384(), new ECDSASigner(), new StdDSAEncoder()); 2676+ // END android-changed 2677 } 2678 } 2679 2680@@ -153,90 +168,94 @@ 2681 { 2682 public ecDSA512() 2683 { 2684- super(new SHA512Digest(), new ECDSASigner(), new StdDSAEncoder()); 2685- } 2686- } 2687- 2688- static public class ecDSARipeMD160 2689- extends SignatureSpi 2690- { 2691- public ecDSARipeMD160() 2692- { 2693- super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder()); 2694- } 2695- } 2696- 2697- static public class ecNR 2698- extends SignatureSpi 2699- { 2700- public ecNR() 2701- { 2702- super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder()); 2703- } 2704- } 2705- 2706- static public class ecNR224 2707- extends SignatureSpi 2708- { 2709- public ecNR224() 2710- { 2711- super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder()); 2712- } 2713- } 2714- 2715- static public class ecNR256 2716- extends SignatureSpi 2717- { 2718- public ecNR256() 2719- { 2720- super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder()); 2721- } 2722- } 2723- 2724- static public class ecNR384 2725- extends SignatureSpi 2726- { 2727- public ecNR384() 2728- { 2729- super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder()); 2730- } 2731- } 2732- 2733- static public class ecNR512 2734- extends SignatureSpi 2735- { 2736- public ecNR512() 2737- { 2738- super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder()); 2739- } 2740- } 2741- 2742- static public class ecCVCDSA 2743- extends SignatureSpi 2744- { 2745- public ecCVCDSA() 2746- { 2747- super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder()); 2748- } 2749- } 2750- 2751- static public class ecCVCDSA224 2752- extends SignatureSpi 2753- { 2754- public ecCVCDSA224() 2755- { 2756- super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder()); 2757- } 2758- } 2759- 2760- static public class ecCVCDSA256 2761- extends SignatureSpi 2762- { 2763- public ecCVCDSA256() 2764- { 2765- super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder()); 2766- } 2767- } 2768+ // BEGIN android-changed 2769+ super(AndroidDigestFactory.getSHA512(), new ECDSASigner(), new StdDSAEncoder()); 2770+ // END android-changed 2771+ } 2772+ } 2773+ 2774+ // BEGIN android-removed 2775+ // static public class ecDSARipeMD160 2776+ // extends SignatureSpi 2777+ // { 2778+ // public ecDSARipeMD160() 2779+ // { 2780+ // super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder()); 2781+ // } 2782+ // } 2783+ // 2784+ // static public class ecNR 2785+ // extends SignatureSpi 2786+ // { 2787+ // public ecNR() 2788+ // { 2789+ // super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder()); 2790+ // } 2791+ // } 2792+ // 2793+ // static public class ecNR224 2794+ // extends SignatureSpi 2795+ // { 2796+ // public ecNR224() 2797+ // { 2798+ // super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder()); 2799+ // } 2800+ // } 2801+ // 2802+ // static public class ecNR256 2803+ // extends SignatureSpi 2804+ // { 2805+ // public ecNR256() 2806+ // { 2807+ // super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder()); 2808+ // } 2809+ // } 2810+ // 2811+ // static public class ecNR384 2812+ // extends SignatureSpi 2813+ // { 2814+ // public ecNR384() 2815+ // { 2816+ // super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder()); 2817+ // } 2818+ // } 2819+ // 2820+ // static public class ecNR512 2821+ // extends SignatureSpi 2822+ // { 2823+ // public ecNR512() 2824+ // { 2825+ // super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder()); 2826+ // } 2827+ // } 2828+ // 2829+ // static public class ecCVCDSA 2830+ // extends SignatureSpi 2831+ // { 2832+ // public ecCVCDSA() 2833+ // { 2834+ // super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder()); 2835+ // } 2836+ // } 2837+ // 2838+ // static public class ecCVCDSA224 2839+ // extends SignatureSpi 2840+ // { 2841+ // public ecCVCDSA224() 2842+ // { 2843+ // super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder()); 2844+ // } 2845+ // } 2846+ // 2847+ // static public class ecCVCDSA256 2848+ // extends SignatureSpi 2849+ // { 2850+ // public ecCVCDSA256() 2851+ // { 2852+ // super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder()); 2853+ // } 2854+ // } 2855+ // END android-removed 2856 2857 private static class StdDSAEncoder 2858 implements DSAEncoder 2859@@ -330,4 +349,4 @@ 2860 return sig; 2861 } 2862 } 2863-} 2864\ No newline at end of file 2865+} 2866diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java 2867--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java 2012-03-22 15:11:48.000000000 +0000 2868+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/AlgorithmParametersSpi.java 2012-09-19 21:17:12.000000000 +0000 2869@@ -55,11 +55,15 @@ 2870 { 2871 AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier( 2872 DigestFactory.getOID(currentSpec.getDigestAlgorithm()), 2873- new DERNull()); 2874+ // BEGIN android-changed 2875+ DERNull.INSTANCE); 2876+ // END android-changed 2877 MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)currentSpec.getMGFParameters(); 2878 AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier( 2879 PKCSObjectIdentifiers.id_mgf1, 2880- new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), new DERNull())); 2881+ // BEGIN android-changed 2882+ new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE)); 2883+ // END android-changed 2884 PSource.PSpecified pSource = (PSource.PSpecified)currentSpec.getPSource(); 2885 AlgorithmIdentifier pSourceAlgorithm = new AlgorithmIdentifier( 2886 PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(pSource.getValue())); 2887@@ -170,11 +174,15 @@ 2888 PSSParameterSpec pssSpec = currentSpec; 2889 AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier( 2890 DigestFactory.getOID(pssSpec.getDigestAlgorithm()), 2891- new DERNull()); 2892+ // BEGIN android-changed 2893+ DERNull.INSTANCE); 2894+ // END android-changed 2895 MGF1ParameterSpec mgfSpec = (MGF1ParameterSpec)pssSpec.getMGFParameters(); 2896 AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier( 2897 PKCSObjectIdentifiers.id_mgf1, 2898- new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), new DERNull())); 2899+ // BEGIN android-changed 2900+ new AlgorithmIdentifier(DigestFactory.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE)); 2901+ // END android-changed 2902 RSASSAPSSparams pssP = new RSASSAPSSparams(hashAlgorithm, maskGenAlgorithm, new ASN1Integer(pssSpec.getSaltLength()), new ASN1Integer(pssSpec.getTrailerField())); 2903 2904 return pssP.getEncoded("DER"); 2905diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java 2906--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java 2012-03-22 15:11:48.000000000 +0000 2907+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateCrtKey.java 2012-09-19 21:17:12.000000000 +0000 2908@@ -127,7 +127,9 @@ 2909 */ 2910 public byte[] getEncoded() 2911 { 2912- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient())); 2913+ // BEGIN android-changed 2914+ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient())); 2915+ // END android-changed 2916 } 2917 2918 /** 2919diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java 2920--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java 2012-03-22 15:11:48.000000000 +0000 2921+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPrivateKey.java 2012-09-19 21:17:12.000000000 +0000 2922@@ -78,7 +78,9 @@ 2923 2924 public byte[] getEncoded() 2925 { 2926- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO)); 2927+ // BEGIN android-changed 2928+ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO)); 2929+ // END android-changed 2930 } 2931 2932 public boolean equals(Object o) 2933diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java 2934--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java 2012-03-22 15:11:48.000000000 +0000 2935+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/BCRSAPublicKey.java 2012-09-19 21:17:12.000000000 +0000 2936@@ -89,7 +89,9 @@ 2937 2938 public byte[] getEncoded() 2939 { 2940- return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new org.bouncycastle.asn1.pkcs.RSAPublicKey(getModulus(), getPublicExponent())); 2941+ // BEGIN android-changed 2942+ return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new org.bouncycastle.asn1.pkcs.RSAPublicKey(getModulus(), getPublicExponent())); 2943+ // END android-changed 2944 } 2945 2946 public int hashCode() 2947diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2948--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2012-03-22 15:11:48.000000000 +0000 2949+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2012-09-19 21:17:12.000000000 +0000 2950@@ -26,7 +26,9 @@ 2951 import org.bouncycastle.crypto.CipherParameters; 2952 import org.bouncycastle.crypto.Digest; 2953 import org.bouncycastle.crypto.InvalidCipherTextException; 2954-import org.bouncycastle.crypto.encodings.ISO9796d1Encoding; 2955+// BEGIN android-removed 2956+// import org.bouncycastle.crypto.encodings.ISO9796d1Encoding; 2957+// END android-removed 2958 import org.bouncycastle.crypto.encodings.OAEPEncoding; 2959 import org.bouncycastle.crypto.encodings.PKCS1Encoding; 2960 import org.bouncycastle.crypto.engines.RSABlindedEngine; 2961@@ -197,10 +199,12 @@ 2962 { 2963 cipher = new PKCS1Encoding(new RSABlindedEngine()); 2964 } 2965- else if (pad.equals("ISO9796-1PADDING")) 2966- { 2967- cipher = new ISO9796d1Encoding(new RSABlindedEngine()); 2968- } 2969+ // BEGIN android-removed 2970+ // else if (pad.equals("ISO9796-1PADDING")) 2971+ // { 2972+ // cipher = new ISO9796d1Encoding(new RSABlindedEngine()); 2973+ // } 2974+ // END android-removed 2975 else if (pad.equals("OAEPWITHMD5ANDMGF1PADDING")) 2976 { 2977 initFromSpec(new OAEPParameterSpec("MD5", "MGF1", new MGF1ParameterSpec("MD5"), PSource.PSpecified.DEFAULT)); 2978@@ -213,10 +217,12 @@ 2979 { 2980 initFromSpec(OAEPParameterSpec.DEFAULT); 2981 } 2982- else if (pad.equals("OAEPWITHSHA224ANDMGF1PADDING") || pad.equals("OAEPWITHSHA-224ANDMGF1PADDING")) 2983- { 2984- initFromSpec(new OAEPParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), PSource.PSpecified.DEFAULT)); 2985- } 2986+ // BEGIN android-removed 2987+ // else if (pad.equals("OAEPWITHSHA224ANDMGF1PADDING") || pad.equals("OAEPWITHSHA-224ANDMGF1PADDING")) 2988+ // { 2989+ // initFromSpec(new OAEPParameterSpec("SHA-224", "MGF1", new MGF1ParameterSpec("SHA-224"), PSource.PSpecified.DEFAULT)); 2990+ // } 2991+ // END android-removed 2992 else if (pad.equals("OAEPWITHSHA256ANDMGF1PADDING") || pad.equals("OAEPWITHSHA-256ANDMGF1PADDING")) 2993 { 2994 initFromSpec(new OAEPParameterSpec("SHA-256", "MGF1", MGF1ParameterSpec.SHA256, PSource.PSpecified.DEFAULT)); 2995@@ -534,48 +540,50 @@ 2996 } 2997 } 2998 2999- static public class PKCS1v1_5Padding 3000- extends CipherSpi 3001- { 3002- public PKCS1v1_5Padding() 3003- { 3004- super(new PKCS1Encoding(new RSABlindedEngine())); 3005- } 3006- } 3007- 3008- static public class PKCS1v1_5Padding_PrivateOnly 3009- extends CipherSpi 3010- { 3011- public PKCS1v1_5Padding_PrivateOnly() 3012- { 3013- super(false, true, new PKCS1Encoding(new RSABlindedEngine())); 3014- } 3015- } 3016- 3017- static public class PKCS1v1_5Padding_PublicOnly 3018- extends CipherSpi 3019- { 3020- public PKCS1v1_5Padding_PublicOnly() 3021- { 3022- super(true, false, new PKCS1Encoding(new RSABlindedEngine())); 3023- } 3024- } 3025- 3026- static public class OAEPPadding 3027- extends CipherSpi 3028- { 3029- public OAEPPadding() 3030- { 3031- super(OAEPParameterSpec.DEFAULT); 3032- } 3033- } 3034- 3035- static public class ISO9796d1Padding 3036- extends CipherSpi 3037- { 3038- public ISO9796d1Padding() 3039- { 3040- super(new ISO9796d1Encoding(new RSABlindedEngine())); 3041- } 3042- } 3043+ // BEGIN android-removed 3044+ // static public class PKCS1v1_5Padding 3045+ // extends CipherSpi 3046+ // { 3047+ // public PKCS1v1_5Padding() 3048+ // { 3049+ // super(new PKCS1Encoding(new RSABlindedEngine())); 3050+ // } 3051+ // } 3052+ // 3053+ // static public class PKCS1v1_5Padding_PrivateOnly 3054+ // extends CipherSpi 3055+ // { 3056+ // public PKCS1v1_5Padding_PrivateOnly() 3057+ // { 3058+ // super(false, true, new PKCS1Encoding(new RSABlindedEngine())); 3059+ // } 3060+ // } 3061+ // 3062+ // static public class PKCS1v1_5Padding_PublicOnly 3063+ // extends CipherSpi 3064+ // { 3065+ // public PKCS1v1_5Padding_PublicOnly() 3066+ // { 3067+ // super(true, false, new PKCS1Encoding(new RSABlindedEngine())); 3068+ // } 3069+ // } 3070+ // 3071+ // static public class OAEPPadding 3072+ // extends CipherSpi 3073+ // { 3074+ // public OAEPPadding() 3075+ // { 3076+ // super(OAEPParameterSpec.DEFAULT); 3077+ // } 3078+ // } 3079+ // 3080+ // static public class ISO9796d1Padding 3081+ // extends CipherSpi 3082+ // { 3083+ // public ISO9796d1Padding() 3084+ // { 3085+ // super(new ISO9796d1Encoding(new RSABlindedEngine())); 3086+ // } 3087+ // } 3088+ // END android-removed 3089 } 3090diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 3091--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 2012-03-22 15:11:48.000000000 +0000 3092+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 2012-09-19 21:17:12.000000000 +0000 3093@@ -17,24 +17,31 @@ 3094 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 3095 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 3096 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 3097-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 3098+// BEGIN android-removed 3099+// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 3100+// END android-removed 3101 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 3102 import org.bouncycastle.asn1.x509.DigestInfo; 3103 import org.bouncycastle.crypto.AsymmetricBlockCipher; 3104 import org.bouncycastle.crypto.CipherParameters; 3105 import org.bouncycastle.crypto.Digest; 3106-import org.bouncycastle.crypto.digests.MD2Digest; 3107-import org.bouncycastle.crypto.digests.MD4Digest; 3108-import org.bouncycastle.crypto.digests.MD5Digest; 3109-import org.bouncycastle.crypto.digests.NullDigest; 3110-import org.bouncycastle.crypto.digests.RIPEMD128Digest; 3111-import org.bouncycastle.crypto.digests.RIPEMD160Digest; 3112-import org.bouncycastle.crypto.digests.RIPEMD256Digest; 3113-import org.bouncycastle.crypto.digests.SHA1Digest; 3114-import org.bouncycastle.crypto.digests.SHA224Digest; 3115-import org.bouncycastle.crypto.digests.SHA256Digest; 3116-import org.bouncycastle.crypto.digests.SHA384Digest; 3117-import org.bouncycastle.crypto.digests.SHA512Digest; 3118+// BEGIN android-removed 3119+// import org.bouncycastle.crypto.digests.MD2Digest; 3120+// import org.bouncycastle.crypto.digests.MD4Digest; 3121+// import org.bouncycastle.crypto.digests.MD5Digest; 3122+// import org.bouncycastle.crypto.digests.NullDigest; 3123+// import org.bouncycastle.crypto.digests.RIPEMD128Digest; 3124+// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 3125+// import org.bouncycastle.crypto.digests.RIPEMD256Digest; 3126+// import org.bouncycastle.crypto.digests.SHA1Digest; 3127+// import org.bouncycastle.crypto.digests.SHA224Digest; 3128+// import org.bouncycastle.crypto.digests.SHA256Digest; 3129+// import org.bouncycastle.crypto.digests.SHA384Digest; 3130+// import org.bouncycastle.crypto.digests.SHA512Digest; 3131+// END android-removed 3132+// BEGIN android-added 3133+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 3134+// END android-added 3135 import org.bouncycastle.crypto.encodings.PKCS1Encoding; 3136 import org.bouncycastle.crypto.engines.RSABlindedEngine; 3137 3138@@ -261,25 +268,31 @@ 3139 { 3140 public SHA1() 3141 { 3142- super(OIWObjectIdentifiers.idSHA1, new SHA1Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3143+ // BEGIN android-changed 3144+ super(OIWObjectIdentifiers.idSHA1, AndroidDigestFactory.getSHA1(), new PKCS1Encoding(new RSABlindedEngine())); 3145+ // END android-changed 3146 } 3147 } 3148 3149- static public class SHA224 3150- extends DigestSignatureSpi 3151- { 3152- public SHA224() 3153- { 3154- super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3155- } 3156- } 3157+ // BEGIN android-removed 3158+ // static public class SHA224 3159+ // extends DigestSignatureSpi 3160+ // { 3161+ // public SHA224() 3162+ // { 3163+ // super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3164+ // } 3165+ // } 3166+ // END android-removed 3167 3168 static public class SHA256 3169 extends DigestSignatureSpi 3170 { 3171 public SHA256() 3172 { 3173- super(NISTObjectIdentifiers.id_sha256, new SHA256Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3174+ // BEGIN android-changed 3175+ super(NISTObjectIdentifiers.id_sha256, AndroidDigestFactory.getSHA256(), new PKCS1Encoding(new RSABlindedEngine())); 3176+ // END android-changed 3177 } 3178 } 3179 3180@@ -288,7 +301,9 @@ 3181 { 3182 public SHA384() 3183 { 3184- super(NISTObjectIdentifiers.id_sha384, new SHA384Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3185+ // BEGIN android-changed 3186+ super(NISTObjectIdentifiers.id_sha384, AndroidDigestFactory.getSHA384(), new PKCS1Encoding(new RSABlindedEngine())); 3187+ // END android-changed 3188 } 3189 } 3190 3191@@ -297,70 +312,78 @@ 3192 { 3193 public SHA512() 3194 { 3195- super(NISTObjectIdentifiers.id_sha512, new SHA512Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3196- } 3197- } 3198- 3199- static public class MD2 3200- extends DigestSignatureSpi 3201- { 3202- public MD2() 3203- { 3204- super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3205+ // BEGIN android-changed 3206+ super(NISTObjectIdentifiers.id_sha512, AndroidDigestFactory.getSHA512(), new PKCS1Encoding(new RSABlindedEngine())); 3207+ // END android-changed 3208 } 3209 } 3210 3211- static public class MD4 3212- extends DigestSignatureSpi 3213- { 3214- public MD4() 3215- { 3216- super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3217- } 3218- } 3219+ // BEGIN android-removed 3220+ // static public class MD2 3221+ // extends DigestSignatureSpi 3222+ // { 3223+ // public MD2() 3224+ // { 3225+ // super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3226+ // } 3227+ // } 3228+ // 3229+ // static public class MD4 3230+ // extends DigestSignatureSpi 3231+ // { 3232+ // public MD4() 3233+ // { 3234+ // super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3235+ // } 3236+ // } 3237+ // END android-removed 3238 3239 static public class MD5 3240 extends DigestSignatureSpi 3241 { 3242 public MD5() 3243 { 3244- super(PKCSObjectIdentifiers.md5, new MD5Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3245+ // BEGIN android-changed 3246+ super(PKCSObjectIdentifiers.md5, AndroidDigestFactory.getMD5(), new PKCS1Encoding(new RSABlindedEngine())); 3247+ // END android-changed 3248 } 3249 } 3250 3251- static public class RIPEMD160 3252- extends DigestSignatureSpi 3253- { 3254- public RIPEMD160() 3255- { 3256- super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3257- } 3258- } 3259- 3260- static public class RIPEMD128 3261- extends DigestSignatureSpi 3262- { 3263- public RIPEMD128() 3264- { 3265- super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3266- } 3267- } 3268- 3269- static public class RIPEMD256 3270- extends DigestSignatureSpi 3271- { 3272- public RIPEMD256() 3273- { 3274- super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3275- } 3276- } 3277- 3278- static public class noneRSA 3279- extends DigestSignatureSpi 3280- { 3281- public noneRSA() 3282- { 3283- super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine())); 3284- } 3285- } 3286+ // BEGIN android-removed 3287+ // static public class RIPEMD160 3288+ // extends DigestSignatureSpi 3289+ // { 3290+ // public RIPEMD160() 3291+ // { 3292+ // super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3293+ // } 3294+ // } 3295+ // 3296+ // static public class RIPEMD128 3297+ // extends DigestSignatureSpi 3298+ // { 3299+ // public RIPEMD128() 3300+ // { 3301+ // super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3302+ // } 3303+ // } 3304+ // 3305+ // static public class RIPEMD256 3306+ // extends DigestSignatureSpi 3307+ // { 3308+ // public RIPEMD256() 3309+ // { 3310+ // super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3311+ // } 3312+ // } 3313+ // 3314+ // static public class noneRSA 3315+ // extends DigestSignatureSpi 3316+ // { 3317+ // public noneRSA() 3318+ // { 3319+ // super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine())); 3320+ // } 3321+ // } 3322+ // END android-removed 3323 } 3324diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 3325--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 2012-03-22 15:11:48.000000000 +0000 3326+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 2012-09-19 21:17:12.000000000 +0000 3327@@ -18,8 +18,10 @@ 3328 import javax.crypto.NoSuchPaddingException; 3329 import javax.crypto.spec.IvParameterSpec; 3330 import javax.crypto.spec.PBEParameterSpec; 3331-import javax.crypto.spec.RC2ParameterSpec; 3332-import javax.crypto.spec.RC5ParameterSpec; 3333+// BEGIN android-removed 3334+// import javax.crypto.spec.RC2ParameterSpec; 3335+// import javax.crypto.spec.RC5ParameterSpec; 3336+// END android-removed 3337 import javax.crypto.spec.SecretKeySpec; 3338 3339 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 3340@@ -37,8 +39,10 @@ 3341 { 3342 IvParameterSpec.class, 3343 PBEParameterSpec.class, 3344- RC2ParameterSpec.class, 3345- RC5ParameterSpec.class 3346+ // BEGIN android-removed 3347+ // RC2ParameterSpec.class, 3348+ // RC5ParameterSpec.class 3349+ // END android-removed 3350 }; 3351 3352 3353diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi.java 3354--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi.java 2012-03-22 15:11:48.000000000 +0000 3355+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi.java 2012-09-19 21:17:12.000000000 +0000 3356@@ -27,7 +27,9 @@ 3357 { 3358 return generatePrivate(PrivateKeyInfo.getInstance(((PKCS8EncodedKeySpec)keySpec).getEncoded())); 3359 } 3360- catch (IOException e) 3361+ // BEGIN android-changed 3362+ catch (Exception e) 3363+ // END android-changed 3364 { 3365 throw new InvalidKeySpecException("encoded key spec not recognised"); 3366 } 3367@@ -48,7 +50,9 @@ 3368 { 3369 return generatePublic(SubjectPublicKeyInfo.getInstance(((X509EncodedKeySpec)keySpec).getEncoded())); 3370 } 3371- catch (IOException e) 3372+ // BEGIN android-changed 3373+ catch (Exception e) 3374+ // END android-changed 3375 { 3376 throw new InvalidKeySpecException("encoded key spec not recognised"); 3377 } 3378diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 3379--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 2012-03-22 15:11:48.000000000 +0000 3380+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 2012-09-19 21:17:12.000000000 +0000 3381@@ -36,7 +36,9 @@ 3382 import org.bouncycastle.asn1.pkcs.SignedData; 3383 import org.bouncycastle.jce.provider.BouncyCastleProvider; 3384 import org.bouncycastle.util.io.pem.PemObject; 3385-import org.bouncycastle.util.io.pem.PemWriter; 3386+// BEGIN android-removed 3387+// import org.bouncycastle.util.io.pem.PemWriter; 3388+// END android-removed 3389 3390 /** 3391 * CertPath implementation for X.509 certificates. 3392@@ -298,27 +300,29 @@ 3393 return toDEREncoded(new ContentInfo( 3394 PKCSObjectIdentifiers.signedData, sd)); 3395 } 3396- else if (encoding.equalsIgnoreCase("PEM")) 3397- { 3398- ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 3399- PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut)); 3400- 3401- try 3402- { 3403- for (int i = 0; i != certificates.size(); i++) 3404- { 3405- pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded())); 3406- } 3407- 3408- pWrt.close(); 3409- } 3410- catch (Exception e) 3411- { 3412- throw new CertificateEncodingException("can't encode certificate for PEM encoded path"); 3413- } 3414- 3415- return bOut.toByteArray(); 3416- } 3417+ // BEGIN android-removed 3418+ // else if (encoding.equalsIgnoreCase("PEM")) 3419+ // { 3420+ // ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 3421+ // PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut)); 3422+ // 3423+ // try 3424+ // { 3425+ // for (int i = 0; i != certificates.size(); i++) 3426+ // { 3427+ // pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded())); 3428+ // } 3429+ // 3430+ // pWrt.close(); 3431+ // } 3432+ // catch (Exception e) 3433+ // { 3434+ // throw new CertificateEncodingException("can't encode certificate for PEM encoded path"); 3435+ // } 3436+ // 3437+ // return bOut.toByteArray(); 3438+ // } 3439+ // END android-removed 3440 else 3441 { 3442 throw new CertificateEncodingException("unsupported encoding: " + encoding); 3443diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/AES.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/AES.java 3444--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/AES.java 2012-03-22 15:11:48.000000000 +0000 3445+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/AES.java 2012-09-19 21:17:12.000000000 +0000 3446@@ -1,31 +1,43 @@ 3447 package org.bouncycastle.jcajce.provider.symmetric; 3448 3449-import java.security.AlgorithmParameters; 3450-import java.security.InvalidAlgorithmParameterException; 3451+// BEGIN android-removed 3452+// import java.security.AlgorithmParameters; 3453+// import java.security.InvalidAlgorithmParameterException; 3454+// END android-removed 3455 import java.security.SecureRandom; 3456-import java.security.spec.AlgorithmParameterSpec; 3457- 3458-import javax.crypto.spec.IvParameterSpec; 3459+// BEGIN android-removed 3460+// import java.security.spec.AlgorithmParameterSpec; 3461+// 3462+// import javax.crypto.spec.IvParameterSpec; 3463+// END android-removed 3464 3465 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 3466 import org.bouncycastle.crypto.BufferedBlockCipher; 3467 import org.bouncycastle.crypto.CipherKeyGenerator; 3468 import org.bouncycastle.crypto.engines.AESFastEngine; 3469 import org.bouncycastle.crypto.engines.AESWrapEngine; 3470-import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 3471-import org.bouncycastle.crypto.macs.CMac; 3472+// BEGIN android-removed 3473+// import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 3474+// import org.bouncycastle.crypto.macs.CMac; 3475+// END android-removed 3476 import org.bouncycastle.crypto.modes.CBCBlockCipher; 3477 import org.bouncycastle.crypto.modes.CFBBlockCipher; 3478 import org.bouncycastle.crypto.modes.OFBBlockCipher; 3479 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 3480-import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 3481+// BEGIN android-removed 3482+// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 3483+// END android-removed 3484 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 3485 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 3486-import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 3487+// BEGIN android-removed 3488+// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 3489+// END android-removed 3490 import org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher; 3491 import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters; 3492 import org.bouncycastle.jcajce.provider.util.AlgorithmProvider; 3493-import org.bouncycastle.jce.provider.BouncyCastleProvider; 3494+// BEGIN android-removed 3495+// import org.bouncycastle.jce.provider.BouncyCastleProvider; 3496+// END android-removed 3497 3498 public final class AES 3499 { 3500@@ -69,15 +81,17 @@ 3501 } 3502 } 3503 3504- public static class AESCMAC 3505- extends BaseMac 3506- { 3507- public AESCMAC() 3508- { 3509- super(new CMac(new AESFastEngine())); 3510- } 3511- } 3512- 3513+ // BEGIN android-removed 3514+ // public static class AESCMAC 3515+ // extends BaseMac 3516+ // { 3517+ // public AESCMAC() 3518+ // { 3519+ // super(new CMac(new AESFastEngine())); 3520+ // } 3521+ // } 3522+ // END android-removed 3523+ 3524 static public class Wrap 3525 extends BaseWrapCipher 3526 { 3527@@ -86,15 +100,17 @@ 3528 super(new AESWrapEngine()); 3529 } 3530 } 3531- 3532- public static class RFC3211Wrap 3533- extends BaseWrapCipher 3534- { 3535- public RFC3211Wrap() 3536- { 3537- super(new RFC3211WrapEngine(new AESFastEngine()), 16); 3538- } 3539- } 3540+ 3541+ // BEGIN android-removed 3542+ // public static class RFC3211Wrap 3543+ // extends BaseWrapCipher 3544+ // { 3545+ // public RFC3211Wrap() 3546+ // { 3547+ // super(new RFC3211WrapEngine(new AESFastEngine()), 16); 3548+ // } 3549+ // } 3550+ // END android-removed 3551 3552 public static class KeyGen 3553 extends BaseKeyGenerator 3554@@ -110,70 +126,72 @@ 3555 } 3556 } 3557 3558- public static class KeyGen128 3559- extends KeyGen 3560- { 3561- public KeyGen128() 3562- { 3563- super(128); 3564- } 3565- } 3566- 3567- public static class KeyGen192 3568- extends KeyGen 3569- { 3570- public KeyGen192() 3571- { 3572- super(192); 3573- } 3574- } 3575- 3576- public static class KeyGen256 3577- extends KeyGen 3578- { 3579- public KeyGen256() 3580- { 3581- super(256); 3582- } 3583- } 3584- 3585- public static class AlgParamGen 3586- extends BaseAlgorithmParameterGenerator 3587- { 3588- protected void engineInit( 3589- AlgorithmParameterSpec genParamSpec, 3590- SecureRandom random) 3591- throws InvalidAlgorithmParameterException 3592- { 3593- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 3594- } 3595- 3596- protected AlgorithmParameters engineGenerateParameters() 3597- { 3598- byte[] iv = new byte[16]; 3599- 3600- if (random == null) 3601- { 3602- random = new SecureRandom(); 3603- } 3604- 3605- random.nextBytes(iv); 3606- 3607- AlgorithmParameters params; 3608- 3609- try 3610- { 3611- params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME); 3612- params.init(new IvParameterSpec(iv)); 3613- } 3614- catch (Exception e) 3615- { 3616- throw new RuntimeException(e.getMessage()); 3617- } 3618- 3619- return params; 3620- } 3621- } 3622+ // BEGIN android-removed 3623+ // public static class KeyGen128 3624+ // extends KeyGen 3625+ // { 3626+ // public KeyGen128() 3627+ // { 3628+ // super(128); 3629+ // } 3630+ // } 3631+ // 3632+ // public static class KeyGen192 3633+ // extends KeyGen 3634+ // { 3635+ // public KeyGen192() 3636+ // { 3637+ // super(192); 3638+ // } 3639+ // } 3640+ // 3641+ // public static class KeyGen256 3642+ // extends KeyGen 3643+ // { 3644+ // public KeyGen256() 3645+ // { 3646+ // super(256); 3647+ // } 3648+ // } 3649+ // 3650+ // public static class AlgParamGen 3651+ // extends BaseAlgorithmParameterGenerator 3652+ // { 3653+ // protected void engineInit( 3654+ // AlgorithmParameterSpec genParamSpec, 3655+ // SecureRandom random) 3656+ // throws InvalidAlgorithmParameterException 3657+ // { 3658+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 3659+ // } 3660+ // 3661+ // protected AlgorithmParameters engineGenerateParameters() 3662+ // { 3663+ // byte[] iv = new byte[16]; 3664+ // 3665+ // if (random == null) 3666+ // { 3667+ // random = new SecureRandom(); 3668+ // } 3669+ // 3670+ // random.nextBytes(iv); 3671+ // 3672+ // AlgorithmParameters params; 3673+ // 3674+ // try 3675+ // { 3676+ // params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME); 3677+ // params.init(new IvParameterSpec(iv)); 3678+ // } 3679+ // catch (Exception e) 3680+ // { 3681+ // throw new RuntimeException(e.getMessage()); 3682+ // } 3683+ // 3684+ // return params; 3685+ // } 3686+ // } 3687+ // END android-removed 3688 3689 public static class AlgParams 3690 extends IvAlgorithmParameters 3691@@ -212,58 +230,66 @@ 3692 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CBC, "AES"); 3693 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CBC, "AES"); 3694 3695- provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen"); 3696- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES"); 3697- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES"); 3698- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES"); 3699- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES"); 3700- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES"); 3701- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES"); 3702+ // BEGIN android-removed 3703+ // provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen"); 3704+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES"); 3705+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES"); 3706+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES"); 3707+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES"); 3708+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES"); 3709+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES"); 3710+ // END android-removed 3711 3712 provider.addAlgorithm("Cipher.AES", PREFIX + "$ECB"); 3713 provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES128, "AES"); 3714 provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES192, "AES"); 3715 provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES256, "AES"); 3716- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB"); 3717- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB"); 3718- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB"); 3719- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC"); 3720- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC"); 3721- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC"); 3722- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB"); 3723- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB"); 3724- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB"); 3725- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB"); 3726- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB"); 3727- provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB"); 3728+ // BEGIN android-removed 3729+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB"); 3730+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB"); 3731+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB"); 3732+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC"); 3733+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC"); 3734+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC"); 3735+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB"); 3736+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB"); 3737+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB"); 3738+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB"); 3739+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB"); 3740+ // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB"); 3741+ // END android-removed 3742 provider.addAlgorithm("Cipher.AESWRAP", PREFIX + "$Wrap"); 3743 provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_wrap, "AESWRAP"); 3744 provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_wrap, "AESWRAP"); 3745 provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_wrap, "AESWRAP"); 3746- provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap"); 3747+ // BEGIN android-removed 3748+ // provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap"); 3749+ // END android-removed 3750 3751 provider.addAlgorithm("KeyGenerator.AES", PREFIX + "$KeyGen"); 3752- provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128"); 3753- provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192"); 3754- provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256"); 3755- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128"); 3756- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128"); 3757- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128"); 3758- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128"); 3759- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192"); 3760- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192"); 3761- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192"); 3762- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192"); 3763- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256"); 3764- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256"); 3765- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256"); 3766- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256"); 3767- provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen"); 3768- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128"); 3769- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192"); 3770- provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256"); 3771- 3772- provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC"); 3773+ // BEGIN android-removed 3774+ // provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128"); 3775+ // provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192"); 3776+ // provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256"); 3777+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128"); 3778+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128"); 3779+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128"); 3780+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128"); 3781+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192"); 3782+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192"); 3783+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192"); 3784+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192"); 3785+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256"); 3786+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256"); 3787+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256"); 3788+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256"); 3789+ // provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen"); 3790+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128"); 3791+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192"); 3792+ // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256"); 3793+ // 3794+ // provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC"); 3795+ // END android-removed 3796 } 3797 } 3798 } 3799diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/ARC4.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 3800--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 2012-03-22 15:11:48.000000000 +0000 3801+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 2012-09-19 21:17:12.000000000 +0000 3802@@ -27,7 +27,9 @@ 3803 { 3804 public KeyGen() 3805 { 3806- super("RC4", 128, new CipherKeyGenerator()); 3807+ // BEGIN android-changed 3808+ super("ARC4", 128, new CipherKeyGenerator()); 3809+ // END android-changed 3810 } 3811 } 3812 3813diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 3814--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 2012-03-22 15:11:48.000000000 +0000 3815+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 2012-09-19 21:17:12.000000000 +0000 3816@@ -64,7 +64,9 @@ 3817 { 3818 3819 provider.addAlgorithm("Cipher.BLOWFISH", PREFIX + "$ECB"); 3820- provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC"); 3821+ // BEGIN android-removed 3822+ // provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC"); 3823+ // END android-removed 3824 provider.addAlgorithm("KeyGenerator.BLOWFISH", PREFIX + "$KeyGen"); 3825 provider.addAlgorithm("Alg.Alias.KeyGenerator.1.3.6.1.4.1.3029.1.2", "BLOWFISH"); 3826 provider.addAlgorithm("AlgorithmParameters.BLOWFISH", PREFIX + "$AlgParams"); 3827diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DES.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DES.java 3828--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DES.java 2012-03-22 15:11:48.000000000 +0000 3829+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DES.java 2012-09-19 21:17:12.000000000 +0000 3830@@ -16,11 +16,15 @@ 3831 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 3832 import org.bouncycastle.crypto.KeyGenerationParameters; 3833 import org.bouncycastle.crypto.engines.DESEngine; 3834-import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 3835+// BEGIN android-removed 3836+// import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 3837+// END android-removed 3838 import org.bouncycastle.crypto.generators.DESKeyGenerator; 3839 import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 3840-import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 3841-import org.bouncycastle.crypto.macs.CMac; 3842+// BEGIN android-removed 3843+// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 3844+// import org.bouncycastle.crypto.macs.CMac; 3845+// END android-removed 3846 import org.bouncycastle.crypto.modes.CBCBlockCipher; 3847 import org.bouncycastle.crypto.paddings.ISO7816d4Padding; 3848 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 3849@@ -48,115 +52,117 @@ 3850 } 3851 } 3852 3853- static public class CBC 3854- extends BaseBlockCipher 3855- { 3856- public CBC() 3857- { 3858- super(new CBCBlockCipher(new DESEngine()), 64); 3859- } 3860- } 3861- 3862- /** 3863- * DES CFB8 3864- */ 3865- public static class DESCFB8 3866- extends BaseMac 3867- { 3868- public DESCFB8() 3869- { 3870- super(new CFBBlockCipherMac(new DESEngine())); 3871- } 3872- } 3873- 3874- /** 3875- * DES64 3876- */ 3877- public static class DES64 3878- extends BaseMac 3879- { 3880- public DES64() 3881- { 3882- super(new CBCBlockCipherMac(new DESEngine(), 64)); 3883- } 3884- } 3885- 3886- /** 3887- * DES64with7816-4Padding 3888- */ 3889- public static class DES64with7816d4 3890- extends BaseMac 3891- { 3892- public DES64with7816d4() 3893- { 3894- super(new CBCBlockCipherMac(new DESEngine(), 64, new ISO7816d4Padding())); 3895- } 3896- } 3897- 3898- public static class CBCMAC 3899- extends BaseMac 3900- { 3901- public CBCMAC() 3902- { 3903- super(new CBCBlockCipherMac(new DESEngine())); 3904- } 3905- } 3906- 3907- static public class CMAC 3908- extends BaseMac 3909- { 3910- public CMAC() 3911- { 3912- super(new CMac(new DESEngine())); 3913- } 3914- } 3915- 3916- public static class RFC3211 3917- extends BaseWrapCipher 3918- { 3919- public RFC3211() 3920- { 3921- super(new RFC3211WrapEngine(new DESEngine()), 8); 3922- } 3923- } 3924- 3925- public static class AlgParamGen 3926- extends BaseAlgorithmParameterGenerator 3927- { 3928- protected void engineInit( 3929- AlgorithmParameterSpec genParamSpec, 3930- SecureRandom random) 3931- throws InvalidAlgorithmParameterException 3932- { 3933- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 3934- } 3935- 3936- protected AlgorithmParameters engineGenerateParameters() 3937- { 3938- byte[] iv = new byte[8]; 3939- 3940- if (random == null) 3941- { 3942- random = new SecureRandom(); 3943- } 3944- 3945- random.nextBytes(iv); 3946- 3947- AlgorithmParameters params; 3948- 3949- try 3950- { 3951- params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME); 3952- params.init(new IvParameterSpec(iv)); 3953- } 3954- catch (Exception e) 3955- { 3956- throw new RuntimeException(e.getMessage()); 3957- } 3958- 3959- return params; 3960- } 3961- } 3962+ // BEGIN android-removed 3963+ // static public class CBC 3964+ // extends BaseBlockCipher 3965+ // { 3966+ // public CBC() 3967+ // { 3968+ // super(new CBCBlockCipher(new DESEngine()), 64); 3969+ // } 3970+ // } 3971+ // 3972+ // /** 3973+ // * DES CFB8 3974+ // */ 3975+ // public static class DESCFB8 3976+ // extends BaseMac 3977+ // { 3978+ // public DESCFB8() 3979+ // { 3980+ // super(new CFBBlockCipherMac(new DESEngine())); 3981+ // } 3982+ // } 3983+ // 3984+ // /** 3985+ // * DES64 3986+ // */ 3987+ // public static class DES64 3988+ // extends BaseMac 3989+ // { 3990+ // public DES64() 3991+ // { 3992+ // super(new CBCBlockCipherMac(new DESEngine(), 64)); 3993+ // } 3994+ // } 3995+ // 3996+ // /** 3997+ // * DES64with7816-4Padding 3998+ // */ 3999+ // public static class DES64with7816d4 4000+ // extends BaseMac 4001+ // { 4002+ // public DES64with7816d4() 4003+ // { 4004+ // super(new CBCBlockCipherMac(new DESEngine(), 64, new ISO7816d4Padding())); 4005+ // } 4006+ // } 4007+ // 4008+ // public static class CBCMAC 4009+ // extends BaseMac 4010+ // { 4011+ // public CBCMAC() 4012+ // { 4013+ // super(new CBCBlockCipherMac(new DESEngine())); 4014+ // } 4015+ // } 4016+ // 4017+ // static public class CMAC 4018+ // extends BaseMac 4019+ // { 4020+ // public CMAC() 4021+ // { 4022+ // super(new CMac(new DESEngine())); 4023+ // } 4024+ // } 4025+ // 4026+ // public static class RFC3211 4027+ // extends BaseWrapCipher 4028+ // { 4029+ // public RFC3211() 4030+ // { 4031+ // super(new RFC3211WrapEngine(new DESEngine()), 8); 4032+ // } 4033+ // } 4034+ // 4035+ // public static class AlgParamGen 4036+ // extends BaseAlgorithmParameterGenerator 4037+ // { 4038+ // protected void engineInit( 4039+ // AlgorithmParameterSpec genParamSpec, 4040+ // SecureRandom random) 4041+ // throws InvalidAlgorithmParameterException 4042+ // { 4043+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 4044+ // } 4045+ // 4046+ // protected AlgorithmParameters engineGenerateParameters() 4047+ // { 4048+ // byte[] iv = new byte[8]; 4049+ // 4050+ // if (random == null) 4051+ // { 4052+ // random = new SecureRandom(); 4053+ // } 4054+ // 4055+ // random.nextBytes(iv); 4056+ // 4057+ // AlgorithmParameters params; 4058+ // 4059+ // try 4060+ // { 4061+ // params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME); 4062+ // params.init(new IvParameterSpec(iv)); 4063+ // } 4064+ // catch (Exception e) 4065+ // { 4066+ // throw new RuntimeException(e.getMessage()); 4067+ // } 4068+ // 4069+ // return params; 4070+ // } 4071+ // } 4072+ // END android-removed 4073 4074 /** 4075 * DES - the default for this is to generate a key in 4076@@ -263,36 +269,42 @@ 4077 { 4078 4079 provider.addAlgorithm("Cipher.DES", PREFIX + "$ECB"); 4080- provider.addAlgorithm("Cipher." + OIWObjectIdentifiers.desCBC, PREFIX + "$CBC"); 4081- 4082- addAlias(provider, OIWObjectIdentifiers.desCBC, "DES"); 4083- 4084- provider.addAlgorithm("Cipher.DESRFC3211WRAP", PREFIX + "$RFC3211"); 4085+ // BEGIN android-removed 4086+ // provider.addAlgorithm("Cipher." + OIWObjectIdentifiers.desCBC, PREFIX + "$CBC"); 4087+ // 4088+ // addAlias(provider, OIWObjectIdentifiers.desCBC, "DES"); 4089+ // 4090+ // provider.addAlgorithm("Cipher.DESRFC3211WRAP", PREFIX + "$RFC3211"); 4091+ // END android-removed 4092 4093 provider.addAlgorithm("KeyGenerator.DES", PREFIX + "$KeyGenerator"); 4094 4095 provider.addAlgorithm("SecretKeyFactory.DES", PREFIX + "$KeyFactory"); 4096 4097- provider.addAlgorithm("Mac.DESCMAC", PREFIX + "$CMAC"); 4098- provider.addAlgorithm("Mac.DESMAC", PREFIX + "$CBCMAC"); 4099- provider.addAlgorithm("Alg.Alias.Mac.DES", "DESMAC"); 4100- 4101- provider.addAlgorithm("Mac.DESMAC/CFB8", PREFIX + "$DESCFB8"); 4102- provider.addAlgorithm("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8"); 4103- 4104- provider.addAlgorithm("Mac.DESMAC64", PREFIX + "$DES64"); 4105- provider.addAlgorithm("Alg.Alias.Mac.DES64", "DESMAC64"); 4106- 4107- provider.addAlgorithm("Mac.DESMAC64WITHISO7816-4PADDING", PREFIX + "$DES64with7816d4"); 4108- provider.addAlgorithm("Alg.Alias.Mac.DES64WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 4109- provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1MACWITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 4110- provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 4111+ // BEGIN android-removed 4112+ // provider.addAlgorithm("Mac.DESCMAC", PREFIX + "$CMAC"); 4113+ // provider.addAlgorithm("Mac.DESMAC", PREFIX + "$CBCMAC"); 4114+ // provider.addAlgorithm("Alg.Alias.Mac.DES", "DESMAC"); 4115+ // 4116+ // provider.addAlgorithm("Mac.DESMAC/CFB8", PREFIX + "$DESCFB8"); 4117+ // provider.addAlgorithm("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8"); 4118+ // 4119+ // provider.addAlgorithm("Mac.DESMAC64", PREFIX + "$DES64"); 4120+ // provider.addAlgorithm("Alg.Alias.Mac.DES64", "DESMAC64"); 4121+ // 4122+ // provider.addAlgorithm("Mac.DESMAC64WITHISO7816-4PADDING", PREFIX + "$DES64with7816d4"); 4123+ // provider.addAlgorithm("Alg.Alias.Mac.DES64WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 4124+ // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1MACWITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 4125+ // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 4126+ // END android-removed 4127 4128 provider.addAlgorithm("AlgorithmParameters.DES", PACKAGE + ".util.IvAlgorithmParameters"); 4129 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + OIWObjectIdentifiers.desCBC, "DES"); 4130 4131- provider.addAlgorithm("AlgorithmParameterGenerator.DES", PREFIX + "$AlgParamGen"); 4132- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "DES"); 4133+ // BEGIN android-removed 4134+ // provider.addAlgorithm("AlgorithmParameterGenerator.DES", PREFIX + "$AlgParamGen"); 4135+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "DES"); 4136+ // END android-removed 4137 } 4138 4139 private void addAlias(ConfigurableProvider provider, ASN1ObjectIdentifier oid, String name) 4140diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DESede.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DESede.java 4141--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/DESede.java 2012-03-22 15:11:48.000000000 +0000 4142+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/DESede.java 2012-09-19 21:17:12.000000000 +0000 4143@@ -1,30 +1,42 @@ 4144 package org.bouncycastle.jcajce.provider.symmetric; 4145 4146-import java.security.AlgorithmParameters; 4147-import java.security.InvalidAlgorithmParameterException; 4148+// BEGIN android-removed 4149+// import java.security.AlgorithmParameters; 4150+// import java.security.InvalidAlgorithmParameterException; 4151+// END android-removed 4152 import java.security.SecureRandom; 4153-import java.security.spec.AlgorithmParameterSpec; 4154+// BEGIN android-removed 4155+// import java.security.spec.AlgorithmParameterSpec; 4156+// END android-removed 4157 import java.security.spec.InvalidKeySpecException; 4158 import java.security.spec.KeySpec; 4159 4160 import javax.crypto.SecretKey; 4161 import javax.crypto.spec.DESedeKeySpec; 4162-import javax.crypto.spec.IvParameterSpec; 4163+// BEGIN android-removed 4164+// import javax.crypto.spec.IvParameterSpec; 4165+// END android-removed 4166 import javax.crypto.spec.SecretKeySpec; 4167 4168 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 4169 import org.bouncycastle.crypto.KeyGenerationParameters; 4170 import org.bouncycastle.crypto.engines.DESedeEngine; 4171 import org.bouncycastle.crypto.engines.DESedeWrapEngine; 4172-import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 4173+// BEGIN android-removed 4174+// import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 4175+// END android-removed 4176 import org.bouncycastle.crypto.generators.DESedeKeyGenerator; 4177 import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 4178-import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 4179-import org.bouncycastle.crypto.macs.CMac; 4180+// BEGIN android-removed 4181+// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 4182+// import org.bouncycastle.crypto.macs.CMac; 4183+// END android-removed 4184 import org.bouncycastle.crypto.modes.CBCBlockCipher; 4185 import org.bouncycastle.crypto.paddings.ISO7816d4Padding; 4186 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 4187-import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 4188+// BEGIN android-removed 4189+// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 4190+// END android-removed 4191 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 4192 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 4193 import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 4194@@ -57,17 +69,19 @@ 4195 } 4196 } 4197 4198- /** 4199- * DESede CFB8 4200- */ 4201- public static class DESedeCFB8 4202- extends BaseMac 4203- { 4204- public DESedeCFB8() 4205- { 4206- super(new CFBBlockCipherMac(new DESedeEngine())); 4207- } 4208- } 4209+ // BEGIN android-removed 4210+ // /** 4211+ // * DESede CFB8 4212+ // */ 4213+ // public static class DESedeCFB8 4214+ // extends BaseMac 4215+ // { 4216+ // public DESedeCFB8() 4217+ // { 4218+ // super(new CFBBlockCipherMac(new DESedeEngine())); 4219+ // } 4220+ // } 4221+ // END android-removed 4222 4223 /** 4224 * DESede64 4225@@ -102,15 +116,17 @@ 4226 } 4227 } 4228 4229- static public class CMAC 4230- extends BaseMac 4231- { 4232- public CMAC() 4233- { 4234- super(new CMac(new DESedeEngine())); 4235- } 4236- } 4237- 4238+ // BEGIN android-removed 4239+ // static public class CMAC 4240+ // extends BaseMac 4241+ // { 4242+ // public CMAC() 4243+ // { 4244+ // super(new CMac(new DESedeEngine())); 4245+ // } 4246+ // } 4247+ // END android-removed 4248+ 4249 public static class Wrap 4250 extends BaseWrapCipher 4251 { 4252@@ -119,15 +135,17 @@ 4253 super(new DESedeWrapEngine()); 4254 } 4255 } 4256- 4257- public static class RFC3211 4258- extends BaseWrapCipher 4259- { 4260- public RFC3211() 4261- { 4262- super(new RFC3211WrapEngine(new DESedeEngine()), 8); 4263- } 4264- } 4265+ 4266+ // BEGIN android-removed 4267+ // public static class RFC3211 4268+ // extends BaseWrapCipher 4269+ // { 4270+ // public RFC3211() 4271+ // { 4272+ // super(new RFC3211WrapEngine(new DESedeEngine()), 8); 4273+ // } 4274+ // } 4275+ // END android-removed 4276 4277 /** 4278 * DESede - the default for this is to generate a key in 4279@@ -217,43 +235,45 @@ 4280 } 4281 } 4282 4283- public static class AlgParamGen 4284- extends BaseAlgorithmParameterGenerator 4285- { 4286- protected void engineInit( 4287- AlgorithmParameterSpec genParamSpec, 4288- SecureRandom random) 4289- throws InvalidAlgorithmParameterException 4290- { 4291- throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 4292- } 4293- 4294- protected AlgorithmParameters engineGenerateParameters() 4295- { 4296- byte[] iv = new byte[8]; 4297- 4298- if (random == null) 4299- { 4300- random = new SecureRandom(); 4301- } 4302- 4303- random.nextBytes(iv); 4304- 4305- AlgorithmParameters params; 4306- 4307- try 4308- { 4309- params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME); 4310- params.init(new IvParameterSpec(iv)); 4311- } 4312- catch (Exception e) 4313- { 4314- throw new RuntimeException(e.getMessage()); 4315- } 4316- 4317- return params; 4318- } 4319- } 4320+ // BEGIN android-removed 4321+ // public static class AlgParamGen 4322+ // extends BaseAlgorithmParameterGenerator 4323+ // { 4324+ // protected void engineInit( 4325+ // AlgorithmParameterSpec genParamSpec, 4326+ // SecureRandom random) 4327+ // throws InvalidAlgorithmParameterException 4328+ // { 4329+ // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 4330+ // } 4331+ // 4332+ // protected AlgorithmParameters engineGenerateParameters() 4333+ // { 4334+ // byte[] iv = new byte[8]; 4335+ // 4336+ // if (random == null) 4337+ // { 4338+ // random = new SecureRandom(); 4339+ // } 4340+ // 4341+ // random.nextBytes(iv); 4342+ // 4343+ // AlgorithmParameters params; 4344+ // 4345+ // try 4346+ // { 4347+ // params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME); 4348+ // params.init(new IvParameterSpec(iv)); 4349+ // } 4350+ // catch (Exception e) 4351+ // { 4352+ // throw new RuntimeException(e.getMessage()); 4353+ // } 4354+ // 4355+ // return params; 4356+ // } 4357+ // } 4358+ // END android-removed 4359 4360 static public class KeyFactory 4361 extends BaseSecretKeyFactory 4362@@ -337,18 +357,28 @@ 4363 public void configure(ConfigurableProvider provider) 4364 { 4365 provider.addAlgorithm("Cipher.DESEDE", PREFIX + "$ECB"); 4366- provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC"); 4367+ // BEGIN android-removed 4368+ // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC"); 4369+ // END android-removed 4370 provider.addAlgorithm("Cipher.DESEDEWRAP", PREFIX + "$Wrap"); 4371- provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, PREFIX + "$Wrap"); 4372- provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211"); 4373+ // BEGIN android-changed 4374+ provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWRAP"); 4375+ // END android-changed 4376+ // BEGIN android-removed 4377+ // provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211"); 4378+ // END android-removed 4379 4380 if (provider.hasAlgorithm("MessageDigest", "SHA-1")) 4381 { 4382 provider.addAlgorithm("Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES3Key"); 4383- provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key"); 4384- provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key"); 4385+ // BEGIN android-removed 4386+ // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key"); 4387+ // provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key"); 4388+ // END android-removed 4389 provider.addAlgorithm("Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES2Key"); 4390- provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key"); 4391+ // BEGIN android-removed 4392+ // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key"); 4393+ // END android-removed 4394 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC, "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"); 4395 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC, "PBEWITHSHAAND2-KEYTRIPLEDES-CBC"); 4396 provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1ANDDESEDE", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"); 4397@@ -357,31 +387,37 @@ 4398 } 4399 4400 provider.addAlgorithm("KeyGenerator.DESEDE", PREFIX + "$KeyGenerator"); 4401- provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3"); 4402- provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator"); 4403+ // BEGIN android-removed 4404+ // provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3"); 4405+ // provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator"); 4406+ // END android-removed 4407 4408 provider.addAlgorithm("SecretKeyFactory.DESEDE", PREFIX + "$KeyFactory"); 4409 4410- provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC"); 4411- provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC"); 4412- provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC"); 4413- 4414- provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8"); 4415- provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8"); 4416- 4417- provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64"); 4418- provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64"); 4419- 4420- provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4"); 4421- provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 4422- provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 4423- provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 4424+ // BEGIN android-removed 4425+ // provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC"); 4426+ // provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC"); 4427+ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC"); 4428+ // 4429+ // provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8"); 4430+ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8"); 4431+ // 4432+ // provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64"); 4433+ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64"); 4434+ // 4435+ // provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4"); 4436+ // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 4437+ // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 4438+ // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 4439+ // END android-removed 4440 4441 provider.addAlgorithm("AlgorithmParameters.DESEDE", PACKAGE + ".util.IvAlgorithmParameters"); 4442 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE"); 4443 4444- provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE", PREFIX + "$AlgParamGen"); 4445- provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE"); 4446+ // BEGIN android-removed 4447+ // provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE", PREFIX + "$AlgParamGen"); 4448+ // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE"); 4449+ // END android-removed 4450 } 4451 } 4452 } 4453diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java 4454--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java 2012-03-22 15:11:48.000000000 +0000 4455+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseAlgorithmParameters.java 2012-09-19 21:17:12.000000000 +0000 4456@@ -7,13 +7,17 @@ 4457 4458 import javax.crypto.spec.IvParameterSpec; 4459 import javax.crypto.spec.PBEParameterSpec; 4460-import javax.crypto.spec.RC2ParameterSpec; 4461+// BEGIN android-removed 4462+// import javax.crypto.spec.RC2ParameterSpec; 4463+// END android-removed 4464 4465 import org.bouncycastle.asn1.ASN1Encoding; 4466 import org.bouncycastle.asn1.ASN1Primitive; 4467 import org.bouncycastle.asn1.pkcs.PBKDF2Params; 4468 import org.bouncycastle.asn1.pkcs.PKCS12PBEParams; 4469-import org.bouncycastle.asn1.pkcs.RC2CBCParameter; 4470+// BEGIN android-removed 4471+// import org.bouncycastle.asn1.pkcs.RC2CBCParameter; 4472+// END android-removed 4473 import org.bouncycastle.util.Arrays; 4474 4475 public abstract class BaseAlgorithmParameters 4476@@ -39,177 +43,179 @@ 4477 protected abstract AlgorithmParameterSpec localEngineGetParameterSpec(Class paramSpec) 4478 throws InvalidParameterSpecException; 4479 4480- public static class RC2AlgorithmParameters 4481- extends BaseAlgorithmParameters 4482- { 4483- private static final short[] table = { 4484- 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, 4485- 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, 4486- 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, 4487- 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, 4488- 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, 4489- 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, 4490- 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, 4491- 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, 4492- 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, 4493- 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, 4494- 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, 4495- 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, 4496- 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, 4497- 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, 4498- 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, 4499- 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab 4500- }; 4501- 4502- private static final short[] ekb = { 4503- 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, 4504- 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, 4505- 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, 4506- 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, 4507- 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, 4508- 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, 4509- 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, 4510- 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, 4511- 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, 4512- 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, 4513- 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, 4514- 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, 4515- 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, 4516- 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, 4517- 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, 4518- 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd 4519- }; 4520- 4521- private byte[] iv; 4522- private int parameterVersion = 58; 4523- 4524- protected byte[] engineGetEncoded() 4525- { 4526- return Arrays.clone(iv); 4527- } 4528- 4529- protected byte[] engineGetEncoded( 4530- String format) 4531- throws IOException 4532- { 4533- if (this.isASN1FormatString(format)) 4534- { 4535- if (parameterVersion == -1) 4536- { 4537- return new RC2CBCParameter(engineGetEncoded()).getEncoded(); 4538- } 4539- else 4540- { 4541- return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded(); 4542- } 4543- } 4544- 4545- if (format.equals("RAW")) 4546- { 4547- return engineGetEncoded(); 4548- } 4549- 4550- return null; 4551- } 4552- 4553- protected AlgorithmParameterSpec localEngineGetParameterSpec( 4554- Class paramSpec) 4555- throws InvalidParameterSpecException 4556- { 4557- if (paramSpec == RC2ParameterSpec.class) 4558- { 4559- if (parameterVersion != -1) 4560- { 4561- if (parameterVersion < 256) 4562- { 4563- return new RC2ParameterSpec(ekb[parameterVersion], iv); 4564- } 4565- else 4566- { 4567- return new RC2ParameterSpec(parameterVersion, iv); 4568- } 4569- } 4570- } 4571- 4572- if (paramSpec == IvParameterSpec.class) 4573- { 4574- return new IvParameterSpec(iv); 4575- } 4576- 4577- throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object."); 4578- } 4579- 4580- protected void engineInit( 4581- AlgorithmParameterSpec paramSpec) 4582- throws InvalidParameterSpecException 4583- { 4584- if (paramSpec instanceof IvParameterSpec) 4585- { 4586- this.iv = ((IvParameterSpec)paramSpec).getIV(); 4587- } 4588- else if (paramSpec instanceof RC2ParameterSpec) 4589- { 4590- int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits(); 4591- if (effKeyBits != -1) 4592- { 4593- if (effKeyBits < 256) 4594- { 4595- parameterVersion = table[effKeyBits]; 4596- } 4597- else 4598- { 4599- parameterVersion = effKeyBits; 4600- } 4601- } 4602- 4603- this.iv = ((RC2ParameterSpec)paramSpec).getIV(); 4604- } 4605- else 4606- { 4607- throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object"); 4608- } 4609- } 4610- 4611- protected void engineInit( 4612- byte[] params) 4613- throws IOException 4614- { 4615- this.iv = Arrays.clone(params); 4616- } 4617- 4618- protected void engineInit( 4619- byte[] params, 4620- String format) 4621- throws IOException 4622- { 4623- if (this.isASN1FormatString(format)) 4624- { 4625- RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params)); 4626- 4627- if (p.getRC2ParameterVersion() != null) 4628- { 4629- parameterVersion = p.getRC2ParameterVersion().intValue(); 4630- } 4631- 4632- iv = p.getIV(); 4633- 4634- return; 4635- } 4636- 4637- if (format.equals("RAW")) 4638- { 4639- engineInit(params); 4640- return; 4641- } 4642- 4643- throw new IOException("Unknown parameters format in IV parameters object"); 4644- } 4645- 4646- protected String engineToString() 4647- { 4648- return "RC2 Parameters"; 4649- } 4650- } 4651+ // BEGIN android-removed 4652+ // public static class RC2AlgorithmParameters 4653+ // extends BaseAlgorithmParameters 4654+ // { 4655+ // private static final short[] table = { 4656+ // 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, 4657+ // 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, 4658+ // 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, 4659+ // 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, 4660+ // 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, 4661+ // 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, 4662+ // 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, 4663+ // 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, 4664+ // 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, 4665+ // 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, 4666+ // 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, 4667+ // 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, 4668+ // 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, 4669+ // 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, 4670+ // 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, 4671+ // 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab 4672+ // }; 4673+ // 4674+ // private static final short[] ekb = { 4675+ // 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, 4676+ // 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, 4677+ // 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, 4678+ // 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, 4679+ // 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, 4680+ // 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, 4681+ // 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, 4682+ // 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, 4683+ // 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, 4684+ // 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, 4685+ // 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, 4686+ // 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, 4687+ // 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, 4688+ // 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, 4689+ // 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, 4690+ // 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd 4691+ // }; 4692+ // 4693+ // private byte[] iv; 4694+ // private int parameterVersion = 58; 4695+ // 4696+ // protected byte[] engineGetEncoded() 4697+ // { 4698+ // return Arrays.clone(iv); 4699+ // } 4700+ // 4701+ // protected byte[] engineGetEncoded( 4702+ // String format) 4703+ // throws IOException 4704+ // { 4705+ // if (this.isASN1FormatString(format)) 4706+ // { 4707+ // if (parameterVersion == -1) 4708+ // { 4709+ // return new RC2CBCParameter(engineGetEncoded()).getEncoded(); 4710+ // } 4711+ // else 4712+ // { 4713+ // return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded(); 4714+ // } 4715+ // } 4716+ // 4717+ // if (format.equals("RAW")) 4718+ // { 4719+ // return engineGetEncoded(); 4720+ // } 4721+ // 4722+ // return null; 4723+ // } 4724+ // 4725+ // protected AlgorithmParameterSpec localEngineGetParameterSpec( 4726+ // Class paramSpec) 4727+ // throws InvalidParameterSpecException 4728+ // { 4729+ // if (paramSpec == RC2ParameterSpec.class) 4730+ // { 4731+ // if (parameterVersion != -1) 4732+ // { 4733+ // if (parameterVersion < 256) 4734+ // { 4735+ // return new RC2ParameterSpec(ekb[parameterVersion], iv); 4736+ // } 4737+ // else 4738+ // { 4739+ // return new RC2ParameterSpec(parameterVersion, iv); 4740+ // } 4741+ // } 4742+ // } 4743+ // 4744+ // if (paramSpec == IvParameterSpec.class) 4745+ // { 4746+ // return new IvParameterSpec(iv); 4747+ // } 4748+ // 4749+ // throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object."); 4750+ // } 4751+ // 4752+ // protected void engineInit( 4753+ // AlgorithmParameterSpec paramSpec) 4754+ // throws InvalidParameterSpecException 4755+ // { 4756+ // if (paramSpec instanceof IvParameterSpec) 4757+ // { 4758+ // this.iv = ((IvParameterSpec)paramSpec).getIV(); 4759+ // } 4760+ // else if (paramSpec instanceof RC2ParameterSpec) 4761+ // { 4762+ // int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits(); 4763+ // if (effKeyBits != -1) 4764+ // { 4765+ // if (effKeyBits < 256) 4766+ // { 4767+ // parameterVersion = table[effKeyBits]; 4768+ // } 4769+ // else 4770+ // { 4771+ // parameterVersion = effKeyBits; 4772+ // } 4773+ // } 4774+ // 4775+ // this.iv = ((RC2ParameterSpec)paramSpec).getIV(); 4776+ // } 4777+ // else 4778+ // { 4779+ // throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object"); 4780+ // } 4781+ // } 4782+ // 4783+ // protected void engineInit( 4784+ // byte[] params) 4785+ // throws IOException 4786+ // { 4787+ // this.iv = Arrays.clone(params); 4788+ // } 4789+ // 4790+ // protected void engineInit( 4791+ // byte[] params, 4792+ // String format) 4793+ // throws IOException 4794+ // { 4795+ // if (this.isASN1FormatString(format)) 4796+ // { 4797+ // RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params)); 4798+ // 4799+ // if (p.getRC2ParameterVersion() != null) 4800+ // { 4801+ // parameterVersion = p.getRC2ParameterVersion().intValue(); 4802+ // } 4803+ // 4804+ // iv = p.getIV(); 4805+ // 4806+ // return; 4807+ // } 4808+ // 4809+ // if (format.equals("RAW")) 4810+ // { 4811+ // engineInit(params); 4812+ // return; 4813+ // } 4814+ // 4815+ // throw new IOException("Unknown parameters format in IV parameters object"); 4816+ // } 4817+ // 4818+ // protected String engineToString() 4819+ // { 4820+ // return "RC2 Parameters"; 4821+ // } 4822+ // } 4823+ // END android-removed 4824 4825 public static class PBKDF2 4826 extends BaseAlgorithmParameters 4827diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 4828--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 2012-03-22 15:11:48.000000000 +0000 4829+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 2012-09-19 21:17:12.000000000 +0000 4830@@ -17,8 +17,10 @@ 4831 import javax.crypto.ShortBufferException; 4832 import javax.crypto.spec.IvParameterSpec; 4833 import javax.crypto.spec.PBEParameterSpec; 4834-import javax.crypto.spec.RC2ParameterSpec; 4835-import javax.crypto.spec.RC5ParameterSpec; 4836+// BEGIN android-removed 4837+// import javax.crypto.spec.RC2ParameterSpec; 4838+// import javax.crypto.spec.RC5ParameterSpec; 4839+// END android-removed 4840 4841 import org.bouncycastle.crypto.BufferedBlockCipher; 4842 import org.bouncycastle.crypto.CipherParameters; 4843@@ -29,12 +31,18 @@ 4844 import org.bouncycastle.crypto.modes.CCMBlockCipher; 4845 import org.bouncycastle.crypto.modes.CFBBlockCipher; 4846 import org.bouncycastle.crypto.modes.CTSBlockCipher; 4847-import org.bouncycastle.crypto.modes.EAXBlockCipher; 4848+// BEGIN android-removed 4849+// import org.bouncycastle.crypto.modes.EAXBlockCipher; 4850+// END android-removed 4851 import org.bouncycastle.crypto.modes.GCMBlockCipher; 4852-import org.bouncycastle.crypto.modes.GOFBBlockCipher; 4853+// BEGIN android-removed 4854+// import org.bouncycastle.crypto.modes.GOFBBlockCipher; 4855+// END android-removed 4856 import org.bouncycastle.crypto.modes.OFBBlockCipher; 4857-import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher; 4858-import org.bouncycastle.crypto.modes.PGPCFBBlockCipher; 4859+// BEGIN android-removed 4860+// import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher; 4861+// import org.bouncycastle.crypto.modes.PGPCFBBlockCipher; 4862+// END android-removed 4863 import org.bouncycastle.crypto.modes.SICBlockCipher; 4864 import org.bouncycastle.crypto.paddings.BlockCipherPadding; 4865 import org.bouncycastle.crypto.paddings.ISO10126d2Padding; 4866@@ -46,11 +54,17 @@ 4867 import org.bouncycastle.crypto.params.KeyParameter; 4868 import org.bouncycastle.crypto.params.ParametersWithIV; 4869 import org.bouncycastle.crypto.params.ParametersWithRandom; 4870-import org.bouncycastle.crypto.params.ParametersWithSBox; 4871+// BEGIN android-removed 4872+// import org.bouncycastle.crypto.params.ParametersWithSBox; 4873+// END android-removed 4874 import org.bouncycastle.crypto.params.RC2Parameters; 4875-import org.bouncycastle.crypto.params.RC5Parameters; 4876+// BEGIN android-removed 4877+// import org.bouncycastle.crypto.params.RC5Parameters; 4878+// END android-removed 4879 import org.bouncycastle.jce.provider.BouncyCastleProvider; 4880-import org.bouncycastle.jce.spec.GOST28147ParameterSpec; 4881+// BEGIN android-removed 4882+// import org.bouncycastle.jce.spec.GOST28147ParameterSpec; 4883+// END android-removed 4884 import org.bouncycastle.jce.spec.RepeatedSecretKeySpec; 4885 import org.bouncycastle.util.Strings; 4886 4887@@ -63,11 +77,15 @@ 4888 // 4889 private Class[] availableSpecs = 4890 { 4891- RC2ParameterSpec.class, 4892- RC5ParameterSpec.class, 4893+ // BEGIN android-removed 4894+ // RC2ParameterSpec.class, 4895+ // RC5ParameterSpec.class, 4896+ // END android-removed 4897 IvParameterSpec.class, 4898 PBEParameterSpec.class, 4899- GOST28147ParameterSpec.class 4900+ // BEGIN android-removed 4901+ // GOST28147ParameterSpec.class 4902+ // END android-removed 4903 }; 4904 4905 private org.bouncycastle.crypto.BlockCipher baseEngine; 4906@@ -222,20 +240,22 @@ 4907 new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize())); 4908 } 4909 } 4910- else if (modeName.startsWith("PGP")) 4911- { 4912- boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV"); 4913- 4914- ivLength = baseEngine.getBlockSize(); 4915- cipher = new BufferedGenericBlockCipher( 4916- new PGPCFBBlockCipher(baseEngine, inlineIV)); 4917- } 4918- else if (modeName.equalsIgnoreCase("OpenPGPCFB")) 4919- { 4920- ivLength = 0; 4921- cipher = new BufferedGenericBlockCipher( 4922- new OpenPGPCFBBlockCipher(baseEngine)); 4923- } 4924+ // BEGIN android-removed 4925+ // else if (modeName.startsWith("PGP")) 4926+ // { 4927+ // boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV"); 4928+ 4929+ // ivLength = baseEngine.getBlockSize(); 4930+ // cipher = new BufferedGenericBlockCipher( 4931+ // new PGPCFBBlockCipher(baseEngine, inlineIV)); 4932+ // } 4933+ // else if (modeName.equalsIgnoreCase("OpenPGPCFB")) 4934+ // { 4935+ // ivLength = 0; 4936+ // cipher = new BufferedGenericBlockCipher( 4937+ // new OpenPGPCFBBlockCipher(baseEngine)); 4938+ // } 4939+ // END android-removed 4940 else if (modeName.startsWith("SIC")) 4941 { 4942 ivLength = baseEngine.getBlockSize(); 4943@@ -252,12 +272,14 @@ 4944 cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 4945 new SICBlockCipher(baseEngine))); 4946 } 4947- else if (modeName.startsWith("GOFB")) 4948- { 4949- ivLength = baseEngine.getBlockSize(); 4950- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 4951- new GOFBBlockCipher(baseEngine))); 4952- } 4953+ // BEGIN android-removed 4954+ // else if (modeName.startsWith("GOFB")) 4955+ // { 4956+ // ivLength = baseEngine.getBlockSize(); 4957+ // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 4958+ // new GOFBBlockCipher(baseEngine))); 4959+ // } 4960+ // END android-removed 4961 else if (modeName.startsWith("CTS")) 4962 { 4963 ivLength = baseEngine.getBlockSize(); 4964@@ -268,11 +290,13 @@ 4965 ivLength = baseEngine.getBlockSize(); 4966 cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine)); 4967 } 4968- else if (modeName.startsWith("EAX")) 4969- { 4970- ivLength = baseEngine.getBlockSize(); 4971- cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine)); 4972- } 4973+ // BEGIN android-removed 4974+ // else if (modeName.startsWith("EAX")) 4975+ // { 4976+ // ivLength = baseEngine.getBlockSize(); 4977+ // cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine)); 4978+ // } 4979+ // END android-removed 4980 else if (modeName.startsWith("GCM")) 4981 { 4982 ivLength = baseEngine.getBlockSize(); 4983@@ -441,63 +465,65 @@ 4984 param = new KeyParameter(key.getEncoded()); 4985 } 4986 } 4987- else if (params instanceof GOST28147ParameterSpec) 4988- { 4989- GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 4990- 4991- param = new ParametersWithSBox( 4992- new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox()); 4993- 4994- if (gost28147Param.getIV() != null && ivLength != 0) 4995- { 4996- param = new ParametersWithIV(param, gost28147Param.getIV()); 4997- ivParam = (ParametersWithIV)param; 4998- } 4999- } 5000- else if (params instanceof RC2ParameterSpec) 5001- { 5002- RC2ParameterSpec rc2Param = (RC2ParameterSpec)params; 5003- 5004- param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits()); 5005- 5006- if (rc2Param.getIV() != null && ivLength != 0) 5007- { 5008- param = new ParametersWithIV(param, rc2Param.getIV()); 5009- ivParam = (ParametersWithIV)param; 5010- } 5011- } 5012- else if (params instanceof RC5ParameterSpec) 5013- { 5014- RC5ParameterSpec rc5Param = (RC5ParameterSpec)params; 5015- 5016- param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds()); 5017- if (baseEngine.getAlgorithmName().startsWith("RC5")) 5018- { 5019- if (baseEngine.getAlgorithmName().equals("RC5-32")) 5020- { 5021- if (rc5Param.getWordSize() != 32) 5022- { 5023- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + "."); 5024- } 5025- } 5026- else if (baseEngine.getAlgorithmName().equals("RC5-64")) 5027- { 5028- if (rc5Param.getWordSize() != 64) 5029- { 5030- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + "."); 5031- } 5032- } 5033- } 5034- else 5035- { 5036- throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5."); 5037- } 5038- if ((rc5Param.getIV() != null) && (ivLength != 0)) 5039- { 5040- param = new ParametersWithIV(param, rc5Param.getIV()); 5041- ivParam = (ParametersWithIV)param; 5042- } 5043- } 5044+ // BEGIN android-removed 5045+ // else if (params instanceof GOST28147ParameterSpec) 5046+ // { 5047+ // GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 5048+ // 5049+ // param = new ParametersWithSBox( 5050+ // new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox()); 5051+ // 5052+ // if (gost28147Param.getIV() != null && ivLength != 0) 5053+ // { 5054+ // param = new ParametersWithIV(param, gost28147Param.getIV()); 5055+ // ivParam = (ParametersWithIV)param; 5056+ // } 5057+ // } 5058+ // else if (params instanceof RC2ParameterSpec) 5059+ // { 5060+ // RC2ParameterSpec rc2Param = (RC2ParameterSpec)params; 5061+ // 5062+ // param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits()); 5063+ // 5064+ // if (rc2Param.getIV() != null && ivLength != 0) 5065+ // { 5066+ // param = new ParametersWithIV(param, rc2Param.getIV()); 5067+ // ivParam = (ParametersWithIV)param; 5068+ // } 5069+ // } 5070+ // else if (params instanceof RC5ParameterSpec) 5071+ // { 5072+ // RC5ParameterSpec rc5Param = (RC5ParameterSpec)params; 5073+ // 5074+ // param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds()); 5075+ // if (baseEngine.getAlgorithmName().startsWith("RC5")) 5076+ // { 5077+ // if (baseEngine.getAlgorithmName().equals("RC5-32")) 5078+ // { 5079+ // if (rc5Param.getWordSize() != 32) 5080+ // { 5081+ // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + "."); 5082+ // } 5083+ // } 5084+ // else if (baseEngine.getAlgorithmName().equals("RC5-64")) 5085+ // { 5086+ // if (rc5Param.getWordSize() != 64) 5087+ // { 5088+ // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + "."); 5089+ // } 5090+ // } 5091+ // } 5092+ // else 5093+ // { 5094+ // throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5."); 5095+ // } 5096+ // if ((rc5Param.getIV() != null) && (ivLength != 0)) 5097+ // { 5098+ // param = new ParametersWithIV(param, rc5Param.getIV()); 5099+ // ivParam = (ParametersWithIV)param; 5100+ // } 5101+ // } 5102+ // END android-removed 5103 else 5104 { 5105 throw new InvalidAlgorithmParameterException("unknown parameter type."); 5106@@ -701,10 +727,20 @@ 5107 int inputLen, 5108 byte[] output, 5109 int outputOffset) 5110- throws IllegalBlockSizeException, BadPaddingException 5111+ throws IllegalBlockSizeException, BadPaddingException, ShortBufferException 5112 { 5113+ // BEGIN android-note 5114+ // added ShortBufferException to the throws statement 5115+ // END android-note 5116 int len = 0; 5117 5118+ // BEGIN android-added 5119+ int outputLen = cipher.getOutputSize(inputLen); 5120+ 5121+ if (outputLen + outputOffset > output.length) { 5122+ throw new ShortBufferException("need at least " + outputLen + " bytes"); 5123+ } 5124+ // BEGIN android-added 5125 if (inputLen != 0) 5126 { 5127 len = cipher.processBytes(input, inputOffset, inputLen, output, outputOffset); 5128diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java 5129--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java 2012-03-22 15:11:48.000000000 +0000 5130+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseKeyGenerator.java 2012-09-19 21:17:12.000000000 +0000 5131@@ -56,6 +56,11 @@ 5132 { 5133 try 5134 { 5135+ // BEGIN android-added 5136+ if (random == null) { 5137+ random = new SecureRandom(); 5138+ } 5139+ // END android-added 5140 engine.init(new KeyGenerationParameters(random, keySize)); 5141 uninitialised = false; 5142 } 5143diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 5144--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 2012-03-22 15:11:48.000000000 +0000 5145+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 2012-09-19 21:17:12.000000000 +0000 5146@@ -11,25 +11,34 @@ 5147 5148 import org.bouncycastle.crypto.CipherParameters; 5149 import org.bouncycastle.crypto.Mac; 5150-import org.bouncycastle.crypto.digests.MD2Digest; 5151-import org.bouncycastle.crypto.digests.MD4Digest; 5152-import org.bouncycastle.crypto.digests.MD5Digest; 5153-import org.bouncycastle.crypto.digests.RIPEMD128Digest; 5154-import org.bouncycastle.crypto.digests.RIPEMD160Digest; 5155-import org.bouncycastle.crypto.digests.SHA1Digest; 5156-import org.bouncycastle.crypto.digests.SHA224Digest; 5157-import org.bouncycastle.crypto.digests.SHA256Digest; 5158-import org.bouncycastle.crypto.digests.SHA384Digest; 5159-import org.bouncycastle.crypto.digests.SHA512Digest; 5160-import org.bouncycastle.crypto.digests.TigerDigest; 5161+// BEGIN android-removed 5162+// import org.bouncycastle.crypto.digests.MD2Digest; 5163+// import org.bouncycastle.crypto.digests.MD4Digest; 5164+// import org.bouncycastle.crypto.digests.MD5Digest; 5165+// import org.bouncycastle.crypto.digests.RIPEMD128Digest; 5166+// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 5167+// import org.bouncycastle.crypto.digests.SHA1Digest; 5168+// import org.bouncycastle.crypto.digests.SHA224Digest; 5169+// import org.bouncycastle.crypto.digests.SHA256Digest; 5170+// import org.bouncycastle.crypto.digests.SHA384Digest; 5171+// import org.bouncycastle.crypto.digests.SHA512Digest; 5172+// import org.bouncycastle.crypto.digests.TigerDigest; 5173+// END android-removed 5174+// BEGIN android-added 5175+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 5176+// END android-added 5177 import org.bouncycastle.crypto.engines.DESEngine; 5178 import org.bouncycastle.crypto.engines.RC2Engine; 5179 import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 5180-import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5181-import org.bouncycastle.crypto.macs.GOST28147Mac; 5182+// BEGIN android-removed 5183+// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5184+// import org.bouncycastle.crypto.macs.GOST28147Mac; 5185+// END android-removed 5186 import org.bouncycastle.crypto.macs.HMac; 5187-import org.bouncycastle.crypto.macs.ISO9797Alg3Mac; 5188-import org.bouncycastle.crypto.macs.OldHMac; 5189+// BEGIN android-removed 5190+// import org.bouncycastle.crypto.macs.ISO9797Alg3Mac; 5191+// import org.bouncycastle.crypto.macs.OldHMac; 5192+// END android-removed 5193 import org.bouncycastle.crypto.paddings.ISO7816d4Padding; 5194 import org.bouncycastle.crypto.params.KeyParameter; 5195 import org.bouncycastle.crypto.params.ParametersWithIV; 5196@@ -179,91 +188,93 @@ 5197 } 5198 } 5199 5200- /** 5201- * GOST28147 5202- */ 5203- public static class GOST28147 5204- extends BaseMac 5205- { 5206- public GOST28147() 5207- { 5208- super(new GOST28147Mac()); 5209- } 5210- } 5211- 5212- 5213- 5214- /** 5215- * DES 5216- */ 5217- public static class DESCFB8 5218- extends BaseMac 5219- { 5220- public DESCFB8() 5221- { 5222- super(new CFBBlockCipherMac(new DESEngine())); 5223- } 5224- } 5225- 5226- /** 5227- * RC2CFB8 5228- */ 5229- public static class RC2CFB8 5230- extends BaseMac 5231- { 5232- public RC2CFB8() 5233- { 5234- super(new CFBBlockCipherMac(new RC2Engine())); 5235- } 5236- } 5237- 5238- /** 5239- * DES9797Alg3with7816-4Padding 5240- */ 5241- public static class DES9797Alg3with7816d4 5242- extends BaseMac 5243- { 5244- public DES9797Alg3with7816d4() 5245- { 5246- super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding())); 5247- } 5248- } 5249- 5250- /** 5251- * DES9797Alg3 5252- */ 5253- public static class DES9797Alg3 5254- extends BaseMac 5255- { 5256- public DES9797Alg3() 5257- { 5258- super(new ISO9797Alg3Mac(new DESEngine())); 5259- } 5260- } 5261- 5262- /** 5263- * MD2 HMac 5264- */ 5265- public static class MD2 5266- extends BaseMac 5267- { 5268- public MD2() 5269- { 5270- super(new HMac(new MD2Digest())); 5271- } 5272- } 5273- 5274- /** 5275- * MD4 HMac 5276- */ 5277- public static class MD4 5278- extends BaseMac 5279- { 5280- public MD4() 5281- { 5282- super(new HMac(new MD4Digest())); 5283- } 5284- } 5285+ // BEGIN android-removed 5286+ // /** 5287+ // * GOST28147 5288+ // */ 5289+ // public static class GOST28147 5290+ // extends BaseMac 5291+ // { 5292+ // public GOST28147() 5293+ // { 5294+ // super(new GOST28147Mac()); 5295+ // } 5296+ // } 5297+ // 5298+ // 5299+ // 5300+ // /** 5301+ // * DES 5302+ // */ 5303+ // public static class DESCFB8 5304+ // extends BaseMac 5305+ // { 5306+ // public DESCFB8() 5307+ // { 5308+ // super(new CFBBlockCipherMac(new DESEngine())); 5309+ // } 5310+ // } 5311+ // 5312+ // /** 5313+ // * RC2CFB8 5314+ // */ 5315+ // public static class RC2CFB8 5316+ // extends BaseMac 5317+ // { 5318+ // public RC2CFB8() 5319+ // { 5320+ // super(new CFBBlockCipherMac(new RC2Engine())); 5321+ // } 5322+ // } 5323+ // 5324+ // /** 5325+ // * DES9797Alg3with7816-4Padding 5326+ // */ 5327+ // public static class DES9797Alg3with7816d4 5328+ // extends BaseMac 5329+ // { 5330+ // public DES9797Alg3with7816d4() 5331+ // { 5332+ // super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding())); 5333+ // } 5334+ // } 5335+ // 5336+ // /** 5337+ // * DES9797Alg3 5338+ // */ 5339+ // public static class DES9797Alg3 5340+ // extends BaseMac 5341+ // { 5342+ // public DES9797Alg3() 5343+ // { 5344+ // super(new ISO9797Alg3Mac(new DESEngine())); 5345+ // } 5346+ // } 5347+ // 5348+ // /** 5349+ // * MD2 HMac 5350+ // */ 5351+ // public static class MD2 5352+ // extends BaseMac 5353+ // { 5354+ // public MD2() 5355+ // { 5356+ // super(new HMac(new MD2Digest())); 5357+ // } 5358+ // } 5359+ // 5360+ // /** 5361+ // * MD4 HMac 5362+ // */ 5363+ // public static class MD4 5364+ // extends BaseMac 5365+ // { 5366+ // public MD4() 5367+ // { 5368+ // super(new HMac(new MD4Digest())); 5369+ // } 5370+ // } 5371+ // END android-removed 5372 5373 /** 5374 * MD5 HMac 5375@@ -273,7 +284,9 @@ 5376 { 5377 public MD5() 5378 { 5379- super(new HMac(new MD5Digest())); 5380+ // BEGIN android-changed 5381+ super(new HMac(AndroidDigestFactory.getMD5())); 5382+ // END android-changed 5383 } 5384 } 5385 5386@@ -285,21 +298,25 @@ 5387 { 5388 public SHA1() 5389 { 5390- super(new HMac(new SHA1Digest())); 5391+ // BEGIN android-changed 5392+ super(new HMac(AndroidDigestFactory.getSHA1())); 5393+ // END android-changed 5394 } 5395 } 5396 5397- /** 5398- * SHA-224 HMac 5399- */ 5400- public static class SHA224 5401- extends BaseMac 5402- { 5403- public SHA224() 5404- { 5405- super(new HMac(new SHA224Digest())); 5406- } 5407- } 5408+ // BEGIN android-removed 5409+ // /** 5410+ // * SHA-224 HMac 5411+ // */ 5412+ // public static class SHA224 5413+ // extends BaseMac 5414+ // { 5415+ // public SHA224() 5416+ // { 5417+ // super(new HMac(new SHA224Digest())); 5418+ // } 5419+ // } 5420+ // END android-removed 5421 5422 /** 5423 * SHA-256 HMac 5424@@ -309,7 +326,7 @@ 5425 { 5426 public SHA256() 5427 { 5428- super(new HMac(new SHA256Digest())); 5429+ super(new HMac(AndroidDigestFactory.getSHA256())); 5430 } 5431 } 5432 5433@@ -321,18 +338,20 @@ 5434 { 5435 public SHA384() 5436 { 5437- super(new HMac(new SHA384Digest())); 5438+ super(new HMac(AndroidDigestFactory.getSHA384())); 5439 } 5440 } 5441 5442- public static class OldSHA384 5443- extends BaseMac 5444- { 5445- public OldSHA384() 5446- { 5447- super(new OldHMac(new SHA384Digest())); 5448- } 5449- } 5450+ // BEGIN android-removed 5451+ // public static class OldSHA384 5452+ // extends BaseMac 5453+ // { 5454+ // public OldSHA384() 5455+ // { 5456+ // super(new OldHMac(new SHA384Digest())); 5457+ // } 5458+ // } 5459+ // END android-removed 5460 5461 /** 5462 * SHA-512 HMac 5463@@ -342,75 +361,77 @@ 5464 { 5465 public SHA512() 5466 { 5467- super(new HMac(new SHA512Digest())); 5468- } 5469- } 5470- 5471- /** 5472- * SHA-512 HMac 5473- */ 5474- public static class OldSHA512 5475- extends BaseMac 5476- { 5477- public OldSHA512() 5478- { 5479- super(new OldHMac(new SHA512Digest())); 5480- } 5481- } 5482- 5483- /** 5484- * RIPEMD128 HMac 5485- */ 5486- public static class RIPEMD128 5487- extends BaseMac 5488- { 5489- public RIPEMD128() 5490- { 5491- super(new HMac(new RIPEMD128Digest())); 5492- } 5493- } 5494- 5495- /** 5496- * RIPEMD160 HMac 5497- */ 5498- public static class RIPEMD160 5499- extends BaseMac 5500- { 5501- public RIPEMD160() 5502- { 5503- super(new HMac(new RIPEMD160Digest())); 5504- } 5505- } 5506- 5507- /** 5508- * Tiger HMac 5509- */ 5510- public static class Tiger 5511- extends BaseMac 5512- { 5513- public Tiger() 5514- { 5515- super(new HMac(new TigerDigest())); 5516+ super(new HMac(AndroidDigestFactory.getSHA512())); 5517 } 5518 } 5519 5520+ // BEGIN android-removed 5521+ // /** 5522+ // * SHA-512 HMac 5523+ // */ 5524+ // public static class OldSHA512 5525+ // extends BaseMac 5526+ // { 5527+ // public OldSHA512() 5528+ // { 5529+ // super(new OldHMac(new SHA512Digest())); 5530+ // } 5531+ // } 5532+ // 5533+ // /** 5534+ // * RIPEMD128 HMac 5535+ // */ 5536+ // public static class RIPEMD128 5537+ // extends BaseMac 5538+ // { 5539+ // public RIPEMD128() 5540+ // { 5541+ // super(new HMac(new RIPEMD128Digest())); 5542+ // } 5543+ // } 5544 // 5545- // PKCS12 states that the same algorithm should be used 5546- // for the key generation as is used in the HMAC, so that 5547- // is what we do here. 5548+ // /** 5549+ // * RIPEMD160 HMac 5550+ // */ 5551+ // public static class RIPEMD160 5552+ // extends BaseMac 5553+ // { 5554+ // public RIPEMD160() 5555+ // { 5556+ // super(new HMac(new RIPEMD160Digest())); 5557+ // } 5558+ // } 5559 // 5560- 5561- /** 5562- * PBEWithHmacRIPEMD160 5563- */ 5564- public static class PBEWithRIPEMD160 5565- extends BaseMac 5566- { 5567- public PBEWithRIPEMD160() 5568- { 5569- super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160); 5570- } 5571- } 5572+ // /** 5573+ // * Tiger HMac 5574+ // */ 5575+ // public static class Tiger 5576+ // extends BaseMac 5577+ // { 5578+ // public Tiger() 5579+ // { 5580+ // super(new HMac(new TigerDigest())); 5581+ // } 5582+ // } 5583+ // 5584+ // // 5585+ // // PKCS12 states that the same algorithm should be used 5586+ // // for the key generation as is used in the HMAC, so that 5587+ // // is what we do here. 5588+ // // 5589+ // 5590+ // /** 5591+ // * PBEWithHmacRIPEMD160 5592+ // */ 5593+ // public static class PBEWithRIPEMD160 5594+ // extends BaseMac 5595+ // { 5596+ // public PBEWithRIPEMD160() 5597+ // { 5598+ // super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160); 5599+ // } 5600+ // } 5601+ // END android-removed 5602 5603 /** 5604 * PBEWithHmacSHA 5605@@ -420,19 +441,23 @@ 5606 { 5607 public PBEWithSHA() 5608 { 5609- super(new HMac(new SHA1Digest()), PKCS12, SHA1, 160); 5610+ // BEGIN android-changed 5611+ super(new HMac(AndroidDigestFactory.getSHA1()), PKCS12, SHA1, 160); 5612+ // END android-changed 5613 } 5614 } 5615 5616- /** 5617- * PBEWithHmacTiger 5618- */ 5619- public static class PBEWithTiger 5620- extends BaseMac 5621- { 5622- public PBEWithTiger() 5623- { 5624- super(new HMac(new TigerDigest()), PKCS12, TIGER, 192); 5625- } 5626- } 5627+ // BEGIN android-removed 5628+ // /** 5629+ // * PBEWithHmacTiger 5630+ // */ 5631+ // public static class PBEWithTiger 5632+ // extends BaseMac 5633+ // { 5634+ // public PBEWithTiger() 5635+ // { 5636+ // super(new HMac(new TigerDigest()), PKCS12, TIGER, 192); 5637+ // } 5638+ // } 5639+ // END android-removed 5640 } 5641diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 5642--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 2012-03-22 15:11:48.000000000 +0000 5643+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 2012-09-19 21:17:12.000000000 +0000 5644@@ -13,8 +13,10 @@ 5645 import javax.crypto.ShortBufferException; 5646 import javax.crypto.spec.IvParameterSpec; 5647 import javax.crypto.spec.PBEParameterSpec; 5648-import javax.crypto.spec.RC2ParameterSpec; 5649-import javax.crypto.spec.RC5ParameterSpec; 5650+// BEGIN android-removed 5651+// import javax.crypto.spec.RC2ParameterSpec; 5652+// import javax.crypto.spec.RC5ParameterSpec; 5653+// END android-removed 5654 5655 import org.bouncycastle.crypto.BlockCipher; 5656 import org.bouncycastle.crypto.CipherParameters; 5657@@ -34,8 +36,10 @@ 5658 // 5659 private Class[] availableSpecs = 5660 { 5661- RC2ParameterSpec.class, 5662- RC5ParameterSpec.class, 5663+ // BEGIN android-removed 5664+ // RC2ParameterSpec.class, 5665+ // RC5ParameterSpec.class, 5666+ // END android-removed 5667 IvParameterSpec.class, 5668 PBEParameterSpec.class 5669 }; 5670diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 5671--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 2012-03-22 15:11:48.000000000 +0000 5672+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 2012-09-19 21:17:12.000000000 +0000 5673@@ -22,8 +22,10 @@ 5674 import javax.crypto.ShortBufferException; 5675 import javax.crypto.spec.IvParameterSpec; 5676 import javax.crypto.spec.PBEParameterSpec; 5677-import javax.crypto.spec.RC2ParameterSpec; 5678-import javax.crypto.spec.RC5ParameterSpec; 5679+// BEGIN android-removed 5680+// import javax.crypto.spec.RC2ParameterSpec; 5681+// import javax.crypto.spec.RC5ParameterSpec; 5682+// END android-removed 5683 import javax.crypto.spec.SecretKeySpec; 5684 5685 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 5686@@ -45,8 +47,10 @@ 5687 { 5688 IvParameterSpec.class, 5689 PBEParameterSpec.class, 5690- RC2ParameterSpec.class, 5691- RC5ParameterSpec.class 5692+ // BEGIN android-removed 5693+ // RC2ParameterSpec.class, 5694+ // RC5ParameterSpec.class 5695+ // END android-removed 5696 }; 5697 5698 protected int pbeType = PKCS12; 5699@@ -258,16 +262,19 @@ 5700 return null; 5701 } 5702 5703+ // BEGIN android-changed 5704+ // added ShortBufferException to throws statement 5705 protected int engineDoFinal( 5706 byte[] input, 5707 int inputOffset, 5708 int inputLen, 5709 byte[] output, 5710 int outputOffset) 5711- throws IllegalBlockSizeException, BadPaddingException 5712+ throws IllegalBlockSizeException, BadPaddingException, ShortBufferException 5713 { 5714 return 0; 5715 } 5716+ // END android-changed 5717 5718 protected byte[] engineWrap( 5719 Key key) 5720@@ -300,7 +307,12 @@ 5721 byte[] wrappedKey, 5722 String wrappedKeyAlgorithm, 5723 int wrappedKeyType) 5724- throws InvalidKeyException 5725+ // BEGIN android-removed 5726+ // throws InvalidKeyException 5727+ // END android-removed 5728+ // BEGIN android-added 5729+ throws InvalidKeyException, NoSuchAlgorithmException 5730+ // END android-added 5731 { 5732 byte[] encoded; 5733 try 5734@@ -376,10 +388,12 @@ 5735 { 5736 throw new InvalidKeyException("Unknown key type " + e.getMessage()); 5737 } 5738- catch (NoSuchAlgorithmException e) 5739- { 5740- throw new InvalidKeyException("Unknown key type " + e.getMessage()); 5741- } 5742+ // BEGIN android-removed 5743+ // catch (NoSuchAlgorithmException e) 5744+ // { 5745+ // throw new InvalidKeyException("Unknown key type " + e.getMessage()); 5746+ // } 5747+ // END android-removed 5748 catch (InvalidKeySpecException e2) 5749 { 5750 throw new InvalidKeyException("Unknown key type " + e2.getMessage()); 5751diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 5752--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 2012-03-22 15:11:48.000000000 +0000 5753+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 2012-09-19 21:17:12.000000000 +0000 5754@@ -7,12 +7,17 @@ 5755 5756 import org.bouncycastle.crypto.CipherParameters; 5757 import org.bouncycastle.crypto.PBEParametersGenerator; 5758-import org.bouncycastle.crypto.digests.MD2Digest; 5759-import org.bouncycastle.crypto.digests.MD5Digest; 5760-import org.bouncycastle.crypto.digests.RIPEMD160Digest; 5761-import org.bouncycastle.crypto.digests.SHA1Digest; 5762-import org.bouncycastle.crypto.digests.SHA256Digest; 5763-import org.bouncycastle.crypto.digests.TigerDigest; 5764+// BEGIN android-removed 5765+// import org.bouncycastle.crypto.digests.MD2Digest; 5766+// import org.bouncycastle.crypto.digests.MD5Digest; 5767+// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 5768+// import org.bouncycastle.crypto.digests.SHA1Digest; 5769+// import org.bouncycastle.crypto.digests.SHA256Digest; 5770+// import org.bouncycastle.crypto.digests.TigerDigest; 5771+// END android-removed 5772+// BEGIN android-added 5773+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 5774+// END android-added 5775 import org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator; 5776 import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator; 5777 import org.bouncycastle.crypto.generators.PKCS5S1ParametersGenerator; 5778@@ -28,10 +33,14 @@ 5779 // 5780 static final int MD5 = 0; 5781 static final int SHA1 = 1; 5782- static final int RIPEMD160 = 2; 5783- static final int TIGER = 3; 5784+ // BEGIN android-removed 5785+ // static final int RIPEMD160 = 2; 5786+ // static final int TIGER = 3; 5787+ // END android-removed 5788 static final int SHA256 = 4; 5789- static final int MD2 = 5; 5790+ // BEGIN android-removed 5791+ // static final int MD2 = 5; 5792+ // END android-removed 5793 5794 static final int PKCS5S1 = 0; 5795 static final int PKCS5S2 = 1; 5796@@ -53,14 +62,20 @@ 5797 { 5798 switch (hash) 5799 { 5800- case MD2: 5801- generator = new PKCS5S1ParametersGenerator(new MD2Digest()); 5802- break; 5803+ // BEGIN android-removed 5804+ // case MD2: 5805+ // generator = new PKCS5S1ParametersGenerator(new MD2Digest()); 5806+ // break; 5807+ // END android-removed 5808 case MD5: 5809- generator = new PKCS5S1ParametersGenerator(new MD5Digest()); 5810+ // BEGIN android-changed 5811+ generator = new PKCS5S1ParametersGenerator(AndroidDigestFactory.getMD5()); 5812+ // END android-changed 5813 break; 5814 case SHA1: 5815- generator = new PKCS5S1ParametersGenerator(new SHA1Digest()); 5816+ // BEGIN android-changed 5817+ generator = new PKCS5S1ParametersGenerator(AndroidDigestFactory.getSHA1()); 5818+ // END android-changed 5819 break; 5820 default: 5821 throw new IllegalStateException("PKCS5 scheme 1 only supports MD2, MD5 and SHA1."); 5822@@ -74,23 +89,33 @@ 5823 { 5824 switch (hash) 5825 { 5826- case MD2: 5827- generator = new PKCS12ParametersGenerator(new MD2Digest()); 5828- break; 5829+ // BEGIN android-removed 5830+ // case MD2: 5831+ // generator = new PKCS12ParametersGenerator(new MD2Digest()); 5832+ // break; 5833+ // END android-removed 5834 case MD5: 5835- generator = new PKCS12ParametersGenerator(new MD5Digest()); 5836+ // BEGIN android-changed 5837+ generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getMD5()); 5838+ // END android-changed 5839 break; 5840 case SHA1: 5841- generator = new PKCS12ParametersGenerator(new SHA1Digest()); 5842- break; 5843- case RIPEMD160: 5844- generator = new PKCS12ParametersGenerator(new RIPEMD160Digest()); 5845- break; 5846- case TIGER: 5847- generator = new PKCS12ParametersGenerator(new TigerDigest()); 5848+ // BEGIN android-changed 5849+ generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA1()); 5850+ // END android-changed 5851 break; 5852+ // BEGIN android-removed 5853+ // case RIPEMD160: 5854+ // generator = new PKCS12ParametersGenerator(new RIPEMD160Digest()); 5855+ // break; 5856+ // case TIGER: 5857+ // generator = new PKCS12ParametersGenerator(new TigerDigest()); 5858+ // break; 5859+ // END android-removed 5860 case SHA256: 5861- generator = new PKCS12ParametersGenerator(new SHA256Digest()); 5862+ // BEGIN android-changed 5863+ generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA256()); 5864+ // END android-changed 5865 break; 5866 default: 5867 throw new IllegalStateException("unknown digest scheme for PBE encryption."); 5868diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/util/DigestFactory.java bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/util/DigestFactory.java 5869--- bcprov-jdk15on-147.orig/org/bouncycastle/jcajce/provider/util/DigestFactory.java 2012-03-22 15:11:48.000000000 +0000 5870+++ bcprov-jdk15on-147/org/bouncycastle/jcajce/provider/util/DigestFactory.java 2012-09-19 21:17:12.000000000 +0000 5871@@ -10,19 +10,26 @@ 5872 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 5873 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 5874 import org.bouncycastle.crypto.Digest; 5875-import org.bouncycastle.crypto.digests.MD5Digest; 5876-import org.bouncycastle.crypto.digests.SHA1Digest; 5877-import org.bouncycastle.crypto.digests.SHA224Digest; 5878-import org.bouncycastle.crypto.digests.SHA256Digest; 5879-import org.bouncycastle.crypto.digests.SHA384Digest; 5880-import org.bouncycastle.crypto.digests.SHA512Digest; 5881+// BEGIN android-removed 5882+// import org.bouncycastle.crypto.digests.MD5Digest; 5883+// import org.bouncycastle.crypto.digests.SHA1Digest; 5884+// import org.bouncycastle.crypto.digests.SHA224Digest; 5885+// import org.bouncycastle.crypto.digests.SHA256Digest; 5886+// import org.bouncycastle.crypto.digests.SHA384Digest; 5887+// import org.bouncycastle.crypto.digests.SHA512Digest; 5888+// END android-removed 5889+// BEGIN android-added 5890+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 5891+// END android-added 5892 import org.bouncycastle.util.Strings; 5893 5894 public class DigestFactory 5895 { 5896 private static Set md5 = new HashSet(); 5897 private static Set sha1 = new HashSet(); 5898- private static Set sha224 = new HashSet(); 5899+ // BEGIN android-removed 5900+ // private static Set sha224 = new HashSet(); 5901+ // END android-removed 5902 private static Set sha256 = new HashSet(); 5903 private static Set sha384 = new HashSet(); 5904 private static Set sha512 = new HashSet(); 5905@@ -38,9 +45,11 @@ 5906 sha1.add("SHA-1"); 5907 sha1.add(OIWObjectIdentifiers.idSHA1.getId()); 5908 5909- sha224.add("SHA224"); 5910- sha224.add("SHA-224"); 5911- sha224.add(NISTObjectIdentifiers.id_sha224.getId()); 5912+ // BEGIN android-removed 5913+ // sha224.add("SHA224"); 5914+ // sha224.add("SHA-224"); 5915+ // sha224.add(NISTObjectIdentifiers.id_sha224.getId()); 5916+ // END android-removed 5917 5918 sha256.add("SHA256"); 5919 sha256.add("SHA-256"); 5920@@ -61,9 +70,11 @@ 5921 oids.put("SHA-1", OIWObjectIdentifiers.idSHA1); 5922 oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1); 5923 5924- oids.put("SHA224", NISTObjectIdentifiers.id_sha224); 5925- oids.put("SHA-224", NISTObjectIdentifiers.id_sha224); 5926- oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224); 5927+ // BEGIN android-removed 5928+ // oids.put("SHA224", NISTObjectIdentifiers.id_sha224); 5929+ // oids.put("SHA-224", NISTObjectIdentifiers.id_sha224); 5930+ // oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224); 5931+ // END android-removed 5932 5933 oids.put("SHA256", NISTObjectIdentifiers.id_sha256); 5934 oids.put("SHA-256", NISTObjectIdentifiers.id_sha256); 5935@@ -85,27 +96,39 @@ 5936 5937 if (sha1.contains(digestName)) 5938 { 5939- return new SHA1Digest(); 5940+ // BEGIN android-changed 5941+ return AndroidDigestFactory.getSHA1(); 5942+ // END android-changed 5943 } 5944 if (md5.contains(digestName)) 5945 { 5946- return new MD5Digest(); 5947- } 5948- if (sha224.contains(digestName)) 5949- { 5950- return new SHA224Digest(); 5951- } 5952+ // BEGIN android-changed 5953+ return AndroidDigestFactory.getMD5(); 5954+ // END android-changed 5955+ } 5956+ // BEGIN android-removed 5957+ // if (sha224.contains(digestName)) 5958+ // { 5959+ // return new SHA224Digest(); 5960+ // } 5961+ // END android-removed 5962 if (sha256.contains(digestName)) 5963 { 5964- return new SHA256Digest(); 5965+ // BEGIN android-changed 5966+ return AndroidDigestFactory.getSHA256(); 5967+ // END android-changed 5968 } 5969 if (sha384.contains(digestName)) 5970 { 5971- return new SHA384Digest(); 5972+ // BEGIN android-changed 5973+ return AndroidDigestFactory.getSHA384(); 5974+ // END android-changed 5975 } 5976 if (sha512.contains(digestName)) 5977 { 5978- return new SHA512Digest(); 5979+ // BEGIN android-changed 5980+ return AndroidDigestFactory.getSHA512(); 5981+ // END android-changed 5982 } 5983 5984 return null; 5985@@ -116,7 +139,9 @@ 5986 String digest2) 5987 { 5988 return (sha1.contains(digest1) && sha1.contains(digest2)) 5989- || (sha224.contains(digest1) && sha224.contains(digest2)) 5990+ // BEGIN android-removed 5991+ // || (sha224.contains(digest1) && sha224.contains(digest2)) 5992+ // END android-removed 5993 || (sha256.contains(digest1) && sha256.contains(digest2)) 5994 || (sha384.contains(digest1) && sha384.contains(digest2)) 5995 || (sha512.contains(digest1) && sha512.contains(digest2)) 5996diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcprov-jdk15on-147/org/bouncycastle/jce/ECNamedCurveTable.java 5997--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/ECNamedCurveTable.java 2012-03-22 15:11:48.000000000 +0000 5998+++ bcprov-jdk15on-147/org/bouncycastle/jce/ECNamedCurveTable.java 2012-09-19 21:17:12.000000000 +0000 5999@@ -6,7 +6,9 @@ 6000 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 6001 import org.bouncycastle.asn1.nist.NISTNamedCurves; 6002 import org.bouncycastle.asn1.sec.SECNamedCurves; 6003-import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 6004+// BEGIN android-removed 6005+// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 6006+// END android-removed 6007 import org.bouncycastle.asn1.x9.X962NamedCurves; 6008 import org.bouncycastle.asn1.x9.X9ECParameters; 6009 import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec; 6010@@ -55,21 +57,23 @@ 6011 } 6012 } 6013 6014- if (ecP == null) 6015- { 6016- ecP = TeleTrusTNamedCurves.getByName(name); 6017- if (ecP == null) 6018- { 6019- try 6020- { 6021- ecP = TeleTrusTNamedCurves.getByOID(new ASN1ObjectIdentifier(name)); 6022- } 6023- catch (IllegalArgumentException e) 6024- { 6025- // ignore - not an oid 6026- } 6027- } 6028- } 6029+ // BEGIN android-removed 6030+ // if (ecP == null) 6031+ // { 6032+ // ecP = TeleTrusTNamedCurves.getByName(name); 6033+ // if (ecP == null) 6034+ // { 6035+ // try 6036+ // { 6037+ // ecP = TeleTrusTNamedCurves.getByOID(new ASN1ObjectIdentifier(name)); 6038+ // } 6039+ // catch (IllegalArgumentException e) 6040+ // { 6041+ // // ignore - not an oid 6042+ // } 6043+ // } 6044+ // } 6045+ // END android-removed 6046 6047 if (ecP == null) 6048 { 6049@@ -102,7 +106,9 @@ 6050 addEnumeration(v, X962NamedCurves.getNames()); 6051 addEnumeration(v, SECNamedCurves.getNames()); 6052 addEnumeration(v, NISTNamedCurves.getNames()); 6053- addEnumeration(v, TeleTrusTNamedCurves.getNames()); 6054+ // BEGIN android-removed 6055+ // addEnumeration(v, TeleTrusTNamedCurves.getNames()); 6056+ // END android-removed 6057 6058 return v.elements(); 6059 } 6060diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java bcprov-jdk15on-147/org/bouncycastle/jce/PKCS10CertificationRequest.java 6061--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java 2012-03-22 15:11:48.000000000 +0000 6062+++ bcprov-jdk15on-147/org/bouncycastle/jce/PKCS10CertificationRequest.java 2012-09-19 21:17:12.000000000 +0000 6063@@ -30,14 +30,18 @@ 6064 import org.bouncycastle.asn1.DERBitString; 6065 import org.bouncycastle.asn1.DERNull; 6066 import org.bouncycastle.asn1.DERObjectIdentifier; 6067-import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 6068+// BEGIN android-removed 6069+// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 6070+// END android-removed 6071 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 6072 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 6073 import org.bouncycastle.asn1.pkcs.CertificationRequest; 6074 import org.bouncycastle.asn1.pkcs.CertificationRequestInfo; 6075 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 6076 import org.bouncycastle.asn1.pkcs.RSASSAPSSparams; 6077-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 6078+// BEGIN android-removed 6079+// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 6080+// END android-removed 6081 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 6082 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 6083 import org.bouncycastle.asn1.x509.X509Name; 6084@@ -81,15 +85,20 @@ 6085 6086 static 6087 { 6088- algorithms.put("MD2WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.2")); 6089- algorithms.put("MD2WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.2")); 6090+ // BEGIN android-removed 6091+ // Dropping MD2 6092+ // algorithms.put("MD2WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.2")); 6093+ // algorithms.put("MD2WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.2")); 6094+ // END android-removed 6095 algorithms.put("MD5WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.4")); 6096 algorithms.put("MD5WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.4")); 6097 algorithms.put("RSAWITHMD5", new DERObjectIdentifier("1.2.840.113549.1.1.4")); 6098 algorithms.put("SHA1WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.5")); 6099 algorithms.put("SHA1WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.5")); 6100- algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption); 6101- algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption); 6102+ // BEGIN android-removed 6103+ // algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption); 6104+ // algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption); 6105+ // END android-removed 6106 algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption); 6107 algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption); 6108 algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption); 6109@@ -97,57 +106,78 @@ 6110 algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption); 6111 algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption); 6112 algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 6113- algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 6114+ // BEGIN android-removed 6115+ // algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 6116+ // END android-removed 6117 algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 6118 algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 6119 algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 6120 algorithms.put("RSAWITHSHA1", new DERObjectIdentifier("1.2.840.113549.1.1.5")); 6121- algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 6122- algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 6123- algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 6124- algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 6125- algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 6126- algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 6127+ // BEGIN android-removed 6128+ // algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 6129+ // algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 6130+ // algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 6131+ // algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 6132+ // algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 6133+ // algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 6134+ // END android-removed 6135 algorithms.put("SHA1WITHDSA", new DERObjectIdentifier("1.2.840.10040.4.3")); 6136 algorithms.put("DSAWITHSHA1", new DERObjectIdentifier("1.2.840.10040.4.3")); 6137- algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 6138+ // BEGIN android-removed 6139+ // algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 6140+ // END android-removed 6141 algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256); 6142 algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384); 6143 algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512); 6144 algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1); 6145- algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224); 6146+ // BEGIN android-removed 6147+ // algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224); 6148+ // END android-removed 6149 algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256); 6150 algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384); 6151 algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512); 6152 algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1); 6153- algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 6154- algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 6155- algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6156- algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6157- algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6158+ // BEGIN android-removed 6159+ // algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 6160+ // algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 6161+ // algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6162+ // algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6163+ // algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6164+ // END android-removed 6165 6166 // 6167 // reverse mappings 6168 // 6169 oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.5"), "SHA1WITHRSA"); 6170- oids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WITHRSA"); 6171+ // BEGIN android-removed 6172+ // oids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WITHRSA"); 6173+ // END android-removed 6174 oids.put(PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WITHRSA"); 6175 oids.put(PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WITHRSA"); 6176 oids.put(PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WITHRSA"); 6177- oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410"); 6178- oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410"); 6179+ // BEGIN android-removed 6180+ // oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410"); 6181+ // oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410"); 6182+ // END android-removed 6183 6184 oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.4"), "MD5WITHRSA"); 6185- oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA"); 6186+ // BEGIN android-removed 6187+ // Dropping MD2 6188+ // oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA"); 6189+ // END android-removed 6190 oids.put(new DERObjectIdentifier("1.2.840.10040.4.3"), "SHA1WITHDSA"); 6191 oids.put(X9ObjectIdentifiers.ecdsa_with_SHA1, "SHA1WITHECDSA"); 6192- oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA"); 6193+ // BEGIN android-removed 6194+ // oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA"); 6195+ // END android-removed 6196 oids.put(X9ObjectIdentifiers.ecdsa_with_SHA256, "SHA256WITHECDSA"); 6197 oids.put(X9ObjectIdentifiers.ecdsa_with_SHA384, "SHA384WITHECDSA"); 6198 oids.put(X9ObjectIdentifiers.ecdsa_with_SHA512, "SHA512WITHECDSA"); 6199 oids.put(OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA"); 6200 oids.put(OIWObjectIdentifiers.dsaWithSHA1, "SHA1WITHDSA"); 6201- oids.put(NISTObjectIdentifiers.dsa_with_sha224, "SHA224WITHDSA"); 6202+ // BEGIN android-removed 6203+ // oids.put(NISTObjectIdentifiers.dsa_with_sha224, "SHA224WITHDSA"); 6204+ // END android-removed 6205 oids.put(NISTObjectIdentifiers.dsa_with_sha256, "SHA256WITHDSA"); 6206 6207 // 6208@@ -161,35 +191,53 @@ 6209 // The parameters field SHALL be NULL for RSA based signature algorithms. 6210 // 6211 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1); 6212- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224); 6213+ // BEGIN android-removed 6214+ // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224); 6215+ // END android-removed 6216 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256); 6217 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384); 6218 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512); 6219 noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1); 6220- noParams.add(NISTObjectIdentifiers.dsa_with_sha224); 6221+ // BEGIN android-removed 6222+ // noParams.add(NISTObjectIdentifiers.dsa_with_sha224); 6223+ // END android-removed 6224 noParams.add(NISTObjectIdentifiers.dsa_with_sha256); 6225 6226 // 6227 // RFC 4491 6228 // 6229- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 6230- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6231+ // BEGIN android-removed 6232+ // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 6233+ // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 6234+ // END android-removed 6235 // 6236 // explicit params 6237 // 6238- AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); 6239+ // BEGIN android-changed 6240+ AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE); 6241+ // END android-changed 6242 params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20)); 6243 6244- AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull()); 6245- params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28)); 6246- 6247- AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull()); 6248+ // BEGIN android-removed 6249+ // // BEGIN android-changed 6250+ // AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, DERNull.INSTANCE); 6251+ // // END android-changed 6252+ // params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28)); 6253+ // END android-removed 6254+ 6255+ // BEGIN android-changed 6256+ AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, DERNull.INSTANCE); 6257+ // END android-changed 6258 params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32)); 6259 6260- AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull()); 6261+ // BEGIN android-changed 6262+ AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, DERNull.INSTANCE); 6263+ // END android-changed 6264 params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48)); 6265 6266- AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull()); 6267+ // BEGIN android-changed 6268+ AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, DERNull.INSTANCE); 6269+ // END android-changed 6270 params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64)); 6271 } 6272 6273@@ -595,10 +643,12 @@ 6274 { 6275 return "SHA1"; 6276 } 6277- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID)) 6278- { 6279- return "SHA224"; 6280- } 6281+ // BEGIN android-removed 6282+ // else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID)) 6283+ // { 6284+ // return "SHA224"; 6285+ // } 6286+ // END android-removed 6287 else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID)) 6288 { 6289 return "SHA256"; 6290@@ -611,22 +661,24 @@ 6291 { 6292 return "SHA512"; 6293 } 6294- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 6295- { 6296- return "RIPEMD128"; 6297- } 6298- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 6299- { 6300- return "RIPEMD160"; 6301- } 6302- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 6303- { 6304- return "RIPEMD256"; 6305- } 6306- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 6307- { 6308- return "GOST3411"; 6309- } 6310+ // BEGIN android-removed 6311+ // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 6312+ // { 6313+ // return "RIPEMD128"; 6314+ // } 6315+ // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 6316+ // { 6317+ // return "RIPEMD160"; 6318+ // } 6319+ // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 6320+ // { 6321+ // return "RIPEMD256"; 6322+ // } 6323+ // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 6324+ // { 6325+ // return "GOST3411"; 6326+ // } 6327+ // END android-removed 6328 else 6329 { 6330 return digestAlgOID.getId(); 6331diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/BouncyCastleProvider.java 6332--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2012-03-22 15:11:48.000000000 +0000 6333+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2012-09-19 21:17:12.000000000 +0000 6334@@ -48,7 +48,10 @@ 6335 { 6336 private static String info = "BouncyCastle Security Provider v1.47"; 6337 6338- public static String PROVIDER_NAME = "BC"; 6339+ // BEGIN android-changed 6340+ // this constant should be final 6341+ public static final String PROVIDER_NAME = "BC"; 6342+ // END android-changed 6343 6344 public static final ProviderConfiguration CONFIGURATION = new BouncyCastleProviderConfiguration(); 6345 6346@@ -61,8 +64,13 @@ 6347 private static final String SYMMETRIC_CIPHER_PACKAGE = "org.bouncycastle.jcajce.provider.symmetric."; 6348 private static final String[] SYMMETRIC_CIPHERS = 6349 { 6350- "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DES", "DESede", "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA", 6351- "Noekeon", "RC2", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA" 6352+ // BEGIN android-removed 6353+ // "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DES", "DESede", "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA", 6354+ // "Noekeon", "RC2", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA" 6355+ // END android-removed 6356+ // BEGIN android-added 6357+ "AES", "ARC4", "Blowfish", "DES", "DESede", 6358+ // END android-added 6359 }; 6360 6361 /* 6362@@ -79,7 +87,12 @@ 6363 6364 private static final String[] ASYMMETRIC_CIPHERS = 6365 { 6366- "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal" 6367+ // BEGIN android-removed 6368+ // "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal" 6369+ // END android-removed 6370+ // BEGIN android-added 6371+ "DSA", "DH", "EC", "RSA", 6372+ // END android-added 6373 }; 6374 6375 /* 6376@@ -88,7 +101,12 @@ 6377 private static final String DIGEST_PACKAGE = "org.bouncycastle.jcajce.provider.digest."; 6378 private static final String[] DIGESTS = 6379 { 6380- "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "Tiger", "Whirlpool" 6381+ // BEGIN android-removed 6382+ // "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "Tiger", "Whirlpool" 6383+ // END android-removed 6384+ // BEGIN android-added 6385+ "MD5", "SHA1", "SHA256", "SHA384", "SHA512", 6386+ // END android-added 6387 }; 6388 6389 /** 6390@@ -120,26 +138,28 @@ 6391 6392 loadAlgorithms(ASYMMETRIC_CIPHER_PACKAGE, ASYMMETRIC_CIPHERS); 6393 6394- // 6395- // X509Store 6396- // 6397- put("X509Store.CERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertCollection"); 6398- put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreAttrCertCollection"); 6399- put("X509Store.CRL/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCRLCollection"); 6400- put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertPairCollection"); 6401- 6402- put("X509Store.CERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCerts"); 6403- put("X509Store.CRL/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCRLs"); 6404- put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPAttrCerts"); 6405- put("X509Store.CERTIFICATEPAIR/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCertPairs"); 6406- 6407- // 6408- // X509StreamParser 6409- // 6410- put("X509StreamParser.CERTIFICATE", "org.bouncycastle.jce.provider.X509CertParser"); 6411- put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.bouncycastle.jce.provider.X509AttrCertParser"); 6412- put("X509StreamParser.CRL", "org.bouncycastle.jce.provider.X509CRLParser"); 6413- put("X509StreamParser.CERTIFICATEPAIR", "org.bouncycastle.jce.provider.X509CertPairParser"); 6414+ // BEGIN android-removed 6415+ // // 6416+ // // X509Store 6417+ // // 6418+ // put("X509Store.CERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertCollection"); 6419+ // put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreAttrCertCollection"); 6420+ // put("X509Store.CRL/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCRLCollection"); 6421+ // put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertPairCollection"); 6422+ // 6423+ // put("X509Store.CERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCerts"); 6424+ // put("X509Store.CRL/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCRLs"); 6425+ // put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPAttrCerts"); 6426+ // put("X509Store.CERTIFICATEPAIR/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCertPairs"); 6427+ // 6428+ // // 6429+ // // X509StreamParser 6430+ // // 6431+ // put("X509StreamParser.CERTIFICATE", "org.bouncycastle.jce.provider.X509CertParser"); 6432+ // put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.bouncycastle.jce.provider.X509AttrCertParser"); 6433+ // put("X509StreamParser.CRL", "org.bouncycastle.jce.provider.X509CRLParser"); 6434+ // put("X509StreamParser.CERTIFICATEPAIR", "org.bouncycastle.jce.provider.X509CertPairParser"); 6435+ // END android-removed 6436 6437 6438 // 6439@@ -148,14 +168,24 @@ 6440 put("KeyStore.BKS", "org.bouncycastle.jce.provider.JDKKeyStore"); 6441 put("KeyStore.BouncyCastle", "org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore"); 6442 put("KeyStore.PKCS12", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore"); 6443- put("KeyStore.BCPKCS12", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore"); 6444- put("KeyStore.PKCS12-DEF", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore"); 6445- 6446- put("KeyStore.PKCS12-3DES-40RC2", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore"); 6447- put("KeyStore.PKCS12-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore3DES"); 6448- 6449- put("KeyStore.PKCS12-DEF-3DES-40RC2", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore"); 6450- put("KeyStore.PKCS12-DEF-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore3DES"); 6451+ // BEGIN android-changed 6452+ put("Alg.Alias.KeyStore.BCPKCS12", "PKCS12"); 6453+ // END android-changed 6454+ // BEGIN android-removed 6455+ // put("KeyStore.PKCS12-DEF", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore"); 6456+ // END android-removed 6457+ 6458+ // BEGIN android-changed 6459+ put("Alg.Alias.KeyStore.PKCS12-3DES-40RC2", "PKCS12"); 6460+ // END android-changed 6461+ // BEGIN android-removed 6462+ // put("KeyStore.PKCS12-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore3DES"); 6463+ // END android-removed 6464+ 6465+ // BEGIN android-removed 6466+ // put("KeyStore.PKCS12-DEF-3DES-40RC2", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore"); 6467+ // put("KeyStore.PKCS12-DEF-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore3DES"); 6468+ // END android-removed 6469 6470 put("Alg.Alias.KeyStore.UBER", "BouncyCastle"); 6471 put("Alg.Alias.KeyStore.BOUNCYCASTLE", "BouncyCastle"); 6472@@ -164,29 +194,41 @@ 6473 // 6474 // algorithm parameters 6475 // 6476- put("AlgorithmParameters.IES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IES"); 6477+ // BEGIN android-removed 6478+ // put("AlgorithmParameters.IES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IES"); 6479+ // END android-removed 6480 put("AlgorithmParameters.PKCS12PBE", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PKCS12PBE"); 6481 6482- put("AlgorithmParameters." + PKCSObjectIdentifiers.id_PBKDF2, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PBKDF2"); 6483+ // BEGIN android-removed 6484+ // put("AlgorithmParameters." + PKCSObjectIdentifiers.id_PBKDF2, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PBKDF2"); 6485+ // END android-removed 6486 6487 6488 put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2", "PKCS12PBE"); 6489- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES", "PKCS12PBE"); 6490- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES", "PKCS12PBE"); 6491- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC2", "PKCS12PBE"); 6492- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC4", "PKCS12PBE"); 6493+ // BEGIN android-removed 6494+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES", "PKCS12PBE"); 6495+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES", "PKCS12PBE"); 6496+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC2", "PKCS12PBE"); 6497+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC4", "PKCS12PBE"); 6498+ // END android-removed 6499 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE"); 6500- put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2-CBC", "PKCS12PBE"); 6501+ // BEGIN android-removed 6502+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2-CBC", "PKCS12PBE"); 6503+ // END android-removed 6504 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PKCS12PBE"); 6505 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PKCS12PBE"); 6506- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES3KEY-CBC", "PKCS12PBE"); 6507- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES2KEY-CBC", "PKCS12PBE"); 6508+ // BEGIN android-removed 6509+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES3KEY-CBC", "PKCS12PBE"); 6510+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES2KEY-CBC", "PKCS12PBE"); 6511+ // END android-removed 6512 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC2-CBC", "PKCS12PBE"); 6513 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC4", "PKCS12PBE"); 6514 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC2-CBC", "PKCS12PBE"); 6515 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC4", "PKCS12PBE"); 6516 put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE"); 6517- put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE"); 6518+ // BEGIN android-removed 6519+ // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE"); 6520+ // END android-removed 6521 put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.1", "PKCS12PBE"); 6522 put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.2", "PKCS12PBE"); 6523 put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.3", "PKCS12PBE"); 6524@@ -217,12 +259,14 @@ 6525 put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND128BITAES-CBC-BC","PKCS12PBE"); 6526 put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND192BITAES-CBC-BC","PKCS12PBE"); 6527 put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND256BITAES-CBC-BC","PKCS12PBE"); 6528- 6529- put("AlgorithmParameters.SHA1WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6530- put("AlgorithmParameters.SHA224WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6531- put("AlgorithmParameters.SHA256WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6532- put("AlgorithmParameters.SHA384WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6533- put("AlgorithmParameters.SHA512WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6534+ 6535+ // BEGIN android-removed 6536+ // put("AlgorithmParameters.SHA1WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6537+ // put("AlgorithmParameters.SHA224WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6538+ // put("AlgorithmParameters.SHA256WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6539+ // put("AlgorithmParameters.SHA384WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6540+ // put("AlgorithmParameters.SHA512WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters"); 6541+ // END android-removed 6542 6543 // 6544 // key agreement 6545@@ -235,16 +279,22 @@ 6546 put("Alg.Alias.Cipher.PBEWithSHAAnd3KeyTripleDES", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"); 6547 6548 6549- put("Cipher.ECIES", "org.bouncycastle.jce.provider.JCEIESCipher$ECIES"); 6550- put("Cipher.BrokenECIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenECIES"); 6551- put("Cipher.IES", "org.bouncycastle.jce.provider.JCEIESCipher$IES"); 6552- put("Cipher.BrokenIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenIES"); 6553+ // BEGIN android-removed 6554+ // put("Cipher.ECIES", "org.bouncycastle.jce.provider.JCEIESCipher$ECIES"); 6555+ // put("Cipher.BrokenECIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenECIES"); 6556+ // put("Cipher.IES", "org.bouncycastle.jce.provider.JCEIESCipher$IES"); 6557+ // put("Cipher.BrokenIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenIES"); 6558+ // END android-removed 6559 6560 put("Cipher.PBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithMD5AndDES"); 6561- put("Cipher.BROKENPBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES"); 6562+ // BEGIN android-removed 6563+ // put("Cipher.BROKENPBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES"); 6564+ // END android-removed 6565 put("Cipher.PBEWITHMD5ANDRC2", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithMD5AndRC2"); 6566 put("Cipher.PBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHA1AndDES"); 6567- put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES"); 6568+ // BEGIN android-removed 6569+ // put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES"); 6570+ // END android-removed 6571 put("Cipher.PBEWITHSHA1ANDRC2", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHA1AndRC2"); 6572 6573 put("Cipher.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAnd128BitRC2"); 6574@@ -286,10 +336,12 @@ 6575 put("Cipher.PBEWITHMD5AND256BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC"); 6576 6577 put("Cipher.PBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndTwofish"); 6578- put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish"); 6579- 6580- put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 6581- put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6582+ // BEGIN android-removed 6583+ // put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish"); 6584+ // 6585+ // put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 6586+ // put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6587+ // END android-removed 6588 put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES"); 6589 put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDDES"); 6590 put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES"); 6591@@ -326,16 +378,20 @@ 6592 // 6593 // secret key factories. 6594 // 6595- put("SecretKeyFactory.PBEWITHMD2ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndDES"); 6596- 6597- put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 6598- put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6599+ // BEGIN android-removed 6600+ // put("SecretKeyFactory.PBEWITHMD2ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndDES"); 6601+ // 6602+ // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 6603+ // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6604+ // END android-removed 6605 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES"); 6606 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDDES"); 6607 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES"); 6608 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndRC2_CBC, "PBEWITHSHA1ANDRC2"); 6609 6610- put("SecretKeyFactory.PBEWITHMD2ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndRC2"); 6611+ // BEGIN android-removed 6612+ // put("SecretKeyFactory.PBEWITHMD2ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndRC2"); 6613+ // END android-removed 6614 put("SecretKeyFactory.PBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5AndDES"); 6615 put("SecretKeyFactory.PBEWITHMD5ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5AndRC2"); 6616 put("SecretKeyFactory.PBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHA1AndDES"); 6617@@ -347,31 +403,39 @@ 6618 put("SecretKeyFactory.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAnd128BitRC2"); 6619 put("SecretKeyFactory.PBEWITHSHAAND40BITRC2-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAnd40BitRC2"); 6620 put("SecretKeyFactory.PBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAndTwofish"); 6621- put("SecretKeyFactory.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithRIPEMD160"); 6622+ // BEGIN android-removed 6623+ // put("SecretKeyFactory.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithRIPEMD160"); 6624+ // END android-removed 6625 put("SecretKeyFactory.PBEWITHHMACSHA1", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHA"); 6626- put("SecretKeyFactory.PBEWITHHMACTIGER", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithTiger"); 6627+ // BEGIN android-removed 6628+ // put("SecretKeyFactory.PBEWITHHMACTIGER", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithTiger"); 6629+ // END android-removed 6630 6631 put("SecretKeyFactory.PBEWITHMD5AND128BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5And128BitAESCBCOpenSSL"); 6632 put("SecretKeyFactory.PBEWITHMD5AND192BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5And192BitAESCBCOpenSSL"); 6633 put("SecretKeyFactory.PBEWITHMD5AND256BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5And256BitAESCBCOpenSSL"); 6634 6635- put("Alg.Alias.SecretKeyFactory.PBE", "PBE/PKCS5"); 6636- 6637- put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHMD5ANDDES", "PBE/PKCS5"); 6638- put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHA1ANDDES", "PBE/PKCS5"); 6639- put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12"); 6640- put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12"); 6641- put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PBE/PKCS12"); 6642- put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAANDTWOFISH-CBC", "PBE/PKCS12"); 6643- 6644- put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES"); 6645- put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2"); 6646+ // BEGIN android-removed 6647+ // put("Alg.Alias.SecretKeyFactory.PBE", "PBE/PKCS5"); 6648+ // 6649+ // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHMD5ANDDES", "PBE/PKCS5"); 6650+ // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHA1ANDDES", "PBE/PKCS5"); 6651+ // put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12"); 6652+ // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12"); 6653+ // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PBE/PKCS12"); 6654+ // put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAANDTWOFISH-CBC", "PBE/PKCS12"); 6655+ // 6656+ // put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES"); 6657+ // put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2"); 6658+ // END android-removed 6659 put("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDDES-CBC", "PBEWITHMD5ANDDES"); 6660 put("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDRC2-CBC", "PBEWITHMD5ANDRC2"); 6661 put("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDDES-CBC", "PBEWITHSHA1ANDDES"); 6662 put("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDRC2-CBC", "PBEWITHSHA1ANDRC2"); 6663- put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 6664- put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6665+ // BEGIN android-removed 6666+ // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 6667+ // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6668+ // END android-removed 6669 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES"); 6670 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2"); 6671 put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES"); 6672@@ -408,20 +472,31 @@ 6673 put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC"); 6674 put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC"); 6675 put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC"); 6676+ // BEGIN android-added 6677+ 6678+ put("SecretKeyFactory.PBKDF2WithHmacSHA1", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBKDF2WithHmacSHA1"); 6679+ // END android-added 6680 6681 addMacAlgorithms(); 6682 6683 // Certification Path API 6684- put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi"); 6685- put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi"); 6686- put("CertPathValidator.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi"); 6687- put("CertPathBuilder.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi"); 6688+ // BEGIN android-removed 6689+ // put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi"); 6690+ // put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi"); 6691+ // END android-removed 6692+ // BEGIN android-changed 6693+ // Use Alg.Alias so RFC3280 doesn't show up when iterating provider services, only PKIX 6694+ put("Alg.Alias.CertPathValidator.RFC3280", "PKIX"); 6695+ put("Alg.Alias.CertPathBuilder.RFC3280", "PKIX"); 6696+ // END android-changed 6697 put("CertPathValidator.PKIX", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi"); 6698 put("CertPathBuilder.PKIX", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi"); 6699 put("CertStore.Collection", "org.bouncycastle.jce.provider.CertStoreCollectionSpi"); 6700- put("CertStore.LDAP", "org.bouncycastle.jce.provider.X509LDAPCertStoreSpi"); 6701- put("CertStore.Multi", "org.bouncycastle.jce.provider.MultiCertStoreSpi"); 6702- put("Alg.Alias.CertStore.X509LDAP", "LDAP"); 6703+ // BEGIN android-removed 6704+ // put("CertStore.LDAP", "org.bouncycastle.jce.provider.X509LDAPCertStoreSpi"); 6705+ // put("CertStore.Multi", "org.bouncycastle.jce.provider.MultiCertStoreSpi"); 6706+ // put("Alg.Alias.CertStore.X509LDAP", "LDAP"); 6707+ // END android-removed 6708 } 6709 6710 private void loadAlgorithms(String packageName, String[] names) 6711@@ -469,21 +544,25 @@ 6712 private void addMacAlgorithms() 6713 { 6714 6715- put("Mac.DESWITHISO9797", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3"); 6716- put("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797"); 6717- 6718- put("Mac.ISO9797ALG3MAC", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3"); 6719- put("Alg.Alias.Mac.ISO9797ALG3", "ISO9797ALG3MAC"); 6720- put("Mac.ISO9797ALG3WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4"); 6721- put("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING"); 6722- 6723- put("Mac.OLDHMACSHA384", "org.bouncycastle.jce.provider.JCEMac$OldSHA384"); 6724- 6725- put("Mac.OLDHMACSHA512", "org.bouncycastle.jce.provider.JCEMac$OldSHA512"); 6726+ // BEGIN android-removed 6727+ // put("Mac.DESWITHISO9797", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3"); 6728+ // put("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797"); 6729+ // 6730+ // put("Mac.ISO9797ALG3MAC", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3"); 6731+ // put("Alg.Alias.Mac.ISO9797ALG3", "ISO9797ALG3MAC"); 6732+ // put("Mac.ISO9797ALG3WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4"); 6733+ // put("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING"); 6734+ // 6735+ // put("Mac.OLDHMACSHA384", "org.bouncycastle.jce.provider.JCEMac$OldSHA384"); 6736+ // 6737+ // put("Mac.OLDHMACSHA512", "org.bouncycastle.jce.provider.JCEMac$OldSHA512"); 6738+ // END android-removed 6739 6740 put("Mac.PBEWITHHMACSHA", "org.bouncycastle.jce.provider.JCEMac$PBEWithSHA"); 6741 put("Mac.PBEWITHHMACSHA1", "org.bouncycastle.jce.provider.JCEMac$PBEWithSHA"); 6742- put("Mac.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCEMac$PBEWithRIPEMD160"); 6743+ // BEGIN android-removed 6744+ // put("Mac.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCEMac$PBEWithRIPEMD160"); 6745+ // END android-removed 6746 put("Alg.Alias.Mac.1.3.14.3.2.26", "PBEWITHHMACSHA"); 6747 } 6748 6749diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertBlacklist.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertBlacklist.java 6750--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertBlacklist.java 1970-01-01 00:00:00.000000000 +0000 6751+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertBlacklist.java 2012-09-19 21:17:12.000000000 +0000 6752@@ -0,0 +1,216 @@ 6753+/* 6754+ * Copyright (C) 2012 The Android Open Source Project 6755+ * 6756+ * Licensed under the Apache License, Version 2.0 (the "License"); 6757+ * you may not use this file except in compliance with the License. 6758+ * You may obtain a copy of the License at 6759+ * 6760+ * http://www.apache.org/licenses/LICENSE-2.0 6761+ * 6762+ * Unless required by applicable law or agreed to in writing, software 6763+ * distributed under the License is distributed on an "AS IS" BASIS, 6764+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 6765+ * See the License for the specific language governing permissions and 6766+ * limitations under the License. 6767+ */ 6768+ 6769+package org.bouncycastle.jce.provider; 6770+ 6771+import java.io.Closeable; 6772+import java.io.ByteArrayOutputStream; 6773+import java.io.FileNotFoundException; 6774+import java.io.IOException; 6775+import java.io.RandomAccessFile; 6776+import java.math.BigInteger; 6777+import java.security.PublicKey; 6778+import java.util.Arrays; 6779+import java.util.Collections; 6780+import java.util.HashSet; 6781+import java.util.Set; 6782+import java.util.logging.Level; 6783+import java.util.logging.Logger; 6784+import org.bouncycastle.crypto.Digest; 6785+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 6786+import org.bouncycastle.util.encoders.Hex; 6787+ 6788+public class CertBlacklist { 6789+ 6790+ private static final String ANDROID_DATA = System.getenv("ANDROID_DATA"); 6791+ private static final String BLACKLIST_ROOT = ANDROID_DATA + "/misc/keychain/"; 6792+ public static final String DEFAULT_PUBKEY_BLACKLIST_PATH = BLACKLIST_ROOT + "pubkey_blacklist.txt"; 6793+ public static final String DEFAULT_SERIAL_BLACKLIST_PATH = BLACKLIST_ROOT + "serial_blacklist.txt"; 6794+ 6795+ private static final Logger logger = Logger.getLogger(CertBlacklist.class.getName()); 6796+ 6797+ // public for testing 6798+ public final Set<BigInteger> serialBlacklist; 6799+ public final Set<byte[]> pubkeyBlacklist; 6800+ 6801+ public CertBlacklist() { 6802+ this(DEFAULT_PUBKEY_BLACKLIST_PATH, DEFAULT_SERIAL_BLACKLIST_PATH); 6803+ } 6804+ 6805+ /** Test only interface, not for public use */ 6806+ public CertBlacklist(String pubkeyBlacklistPath, String serialBlacklistPath) { 6807+ serialBlacklist = readSerialBlackList(serialBlacklistPath); 6808+ pubkeyBlacklist = readPublicKeyBlackList(pubkeyBlacklistPath); 6809+ } 6810+ 6811+ private static boolean isHex(String value) { 6812+ try { 6813+ new BigInteger(value, 16); 6814+ return true; 6815+ } catch (NumberFormatException e) { 6816+ logger.log(Level.WARNING, "Could not parse hex value " + value, e); 6817+ return false; 6818+ } 6819+ } 6820+ 6821+ private static boolean isPubkeyHash(String value) { 6822+ if (value.length() != 40) { 6823+ logger.log(Level.WARNING, "Invalid pubkey hash length: " + value.length()); 6824+ return false; 6825+ } 6826+ return isHex(value); 6827+ } 6828+ 6829+ private static String readBlacklist(String path) { 6830+ try { 6831+ return readFileAsString(path); 6832+ } catch (FileNotFoundException ignored) { 6833+ } catch (IOException e) { 6834+ logger.log(Level.WARNING, "Could not read blacklist", e); 6835+ } 6836+ return ""; 6837+ } 6838+ 6839+ // From IoUtils.readFileAsString 6840+ private static String readFileAsString(String path) throws IOException { 6841+ return readFileAsBytes(path).toString("UTF-8"); 6842+ } 6843+ 6844+ // Based on IoUtils.readFileAsBytes 6845+ private static ByteArrayOutputStream readFileAsBytes(String path) throws IOException { 6846+ RandomAccessFile f = null; 6847+ try { 6848+ f = new RandomAccessFile(path, "r"); 6849+ ByteArrayOutputStream bytes = new ByteArrayOutputStream((int) f.length()); 6850+ byte[] buffer = new byte[8192]; 6851+ while (true) { 6852+ int byteCount = f.read(buffer); 6853+ if (byteCount == -1) { 6854+ return bytes; 6855+ } 6856+ bytes.write(buffer, 0, byteCount); 6857+ } 6858+ } finally { 6859+ closeQuietly(f); 6860+ } 6861+ } 6862+ 6863+ // Base on IoUtils.closeQuietly 6864+ private static void closeQuietly(Closeable closeable) { 6865+ if (closeable != null) { 6866+ try { 6867+ closeable.close(); 6868+ } catch (RuntimeException rethrown) { 6869+ throw rethrown; 6870+ } catch (Exception ignored) { 6871+ } 6872+ } 6873+ } 6874+ 6875+ private static final Set<BigInteger> readSerialBlackList(String path) { 6876+ 6877+ // start out with a base set of known bad values 6878+ Set<BigInteger> bl = new HashSet<BigInteger>(Arrays.asList( 6879+ // From http://src.chromium.org/viewvc/chrome/trunk/src/net/base/x509_certificate.cc?revision=78748&view=markup 6880+ // Not a real certificate. For testing only. 6881+ new BigInteger("077a59bcd53459601ca6907267a6dd1c", 16), 6882+ new BigInteger("047ecbe9fca55f7bd09eae36e10cae1e", 16), 6883+ new BigInteger("d8f35f4eb7872b2dab0692e315382fb0", 16), 6884+ new BigInteger("b0b7133ed096f9b56fae91c874bd3ac0", 16), 6885+ new BigInteger("9239d5348f40d1695a745470e1f23f43", 16), 6886+ new BigInteger("e9028b9578e415dc1a710a2b88154447", 16), 6887+ new BigInteger("d7558fdaf5f1105bb213282b707729a3", 16), 6888+ new BigInteger("f5c86af36162f13a64f54f6dc9587c06", 16), 6889+ new BigInteger("392a434f0e07df1f8aa305de34e0c229", 16), 6890+ new BigInteger("3e75ced46b693021218830ae86a82a71", 16) 6891+ )); 6892+ 6893+ // attempt to augment it with values taken from gservices 6894+ String serialBlacklist = readBlacklist(path); 6895+ if (!serialBlacklist.equals("")) { 6896+ for(String value : serialBlacklist.split(",")) { 6897+ try { 6898+ bl.add(new BigInteger(value, 16)); 6899+ } catch (NumberFormatException e) { 6900+ logger.log(Level.WARNING, "Tried to blacklist invalid serial number " + value, e); 6901+ } 6902+ } 6903+ } 6904+ 6905+ // whether that succeeds or fails, send it on its merry way 6906+ return Collections.unmodifiableSet(bl); 6907+ } 6908+ 6909+ private static final Set<byte[]> readPublicKeyBlackList(String path) { 6910+ 6911+ // start out with a base set of known bad values 6912+ Set<byte[]> bl = new HashSet<byte[]>(Arrays.asList( 6913+ // From http://src.chromium.org/viewvc/chrome/branches/782/src/net/base/x509_certificate.cc?r1=98750&r2=98749&pathrev=98750 6914+ // C=NL, O=DigiNotar, CN=DigiNotar Root CA/emailAddress=info@diginotar.nl 6915+ "410f36363258f30b347d12ce4863e433437806a8".getBytes(), 6916+ // Subject: CN=DigiNotar Cyber CA 6917+ // Issuer: CN=GTE CyberTrust Global Root 6918+ "ba3e7bd38cd7e1e6b9cd4c219962e59d7a2f4e37".getBytes(), 6919+ // Subject: CN=DigiNotar Services 1024 CA 6920+ // Issuer: CN=Entrust.net 6921+ "e23b8d105f87710a68d9248050ebefc627be4ca6".getBytes(), 6922+ // Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2 6923+ // Issuer: CN=Staat der Nederlanden Organisatie CA - G2 6924+ "7b2e16bc39bcd72b456e9f055d1de615b74945db".getBytes(), 6925+ // Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven 6926+ // Issuer: CN=Staat der Nederlanden Overheid CA 6927+ "e8f91200c65cee16e039b9f883841661635f81c5".getBytes(), 6928+ // From http://src.chromium.org/viewvc/chrome?view=rev&revision=108479 6929+ // Subject: O=Digicert Sdn. Bhd. 6930+ // Issuer: CN=GTE CyberTrust Global Root 6931+ "0129bcd5b448ae8d2496d1c3e19723919088e152".getBytes() 6932+ )); 6933+ 6934+ // attempt to augment it with values taken from gservices 6935+ String pubkeyBlacklist = readBlacklist(path); 6936+ if (!pubkeyBlacklist.equals("")) { 6937+ for (String value : pubkeyBlacklist.split(",")) { 6938+ value = value.trim(); 6939+ if (isPubkeyHash(value)) { 6940+ bl.add(value.getBytes()); 6941+ } else { 6942+ logger.log(Level.WARNING, "Tried to blacklist invalid pubkey " + value); 6943+ } 6944+ } 6945+ } 6946+ 6947+ return bl; 6948+ } 6949+ 6950+ public boolean isPublicKeyBlackListed(PublicKey publicKey) { 6951+ byte[] encoded = publicKey.getEncoded(); 6952+ Digest digest = AndroidDigestFactory.getSHA1(); 6953+ digest.update(encoded, 0, encoded.length); 6954+ byte[] out = new byte[digest.getDigestSize()]; 6955+ digest.doFinal(out, 0); 6956+ for (byte[] blacklisted : pubkeyBlacklist) { 6957+ if (Arrays.equals(blacklisted, Hex.encode(out))) { 6958+ return true; 6959+ } 6960+ } 6961+ return false; 6962+ } 6963+ 6964+ public boolean isSerialNumberBlackListed(BigInteger serial) { 6965+ return serialBlacklist.contains(serial); 6966+ } 6967+ 6968+} 6969diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 6970--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2012-03-22 15:11:48.000000000 +0000 6971+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2012-09-19 21:17:12.000000000 +0000 6972@@ -61,13 +61,17 @@ 6973 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 6974 import org.bouncycastle.asn1.x509.X509Extension; 6975 import org.bouncycastle.asn1.x509.X509Extensions; 6976-import org.bouncycastle.jce.X509LDAPCertStoreParameters; 6977+// BEGIN android-removed 6978+// import org.bouncycastle.jce.X509LDAPCertStoreParameters; 6979+// END android-removed 6980 import org.bouncycastle.jce.exception.ExtCertPathValidatorException; 6981 import org.bouncycastle.util.Selector; 6982 import org.bouncycastle.util.StoreException; 6983 import org.bouncycastle.x509.ExtendedPKIXBuilderParameters; 6984 import org.bouncycastle.x509.ExtendedPKIXParameters; 6985-import org.bouncycastle.x509.X509AttributeCertStoreSelector; 6986+// BEGIN android-removed 6987+// import org.bouncycastle.x509.X509AttributeCertStoreSelector; 6988+// END android-removed 6989 import org.bouncycastle.x509.X509AttributeCertificate; 6990 import org.bouncycastle.x509.X509CRLStoreSelector; 6991 import org.bouncycastle.x509.X509CertStoreSelector; 6992@@ -247,7 +251,9 @@ 6993 { 6994 // look for URI 6995 List list = (List)it.next(); 6996- if (list.get(0).equals(new Integer(GeneralName.uniformResourceIdentifier))) 6997+ // BEGIN android-changed 6998+ if (list.get(0).equals(Integer.valueOf(GeneralName.uniformResourceIdentifier))) 6999+ // END android-changed 7000 { 7001 // found 7002 String temp = (String)list.get(1); 7003@@ -655,38 +661,40 @@ 7004 { 7005 try 7006 { 7007- if (location.startsWith("ldap://")) 7008- { 7009- // ldap://directory.d-trust.net/CN=D-TRUST 7010- // Qualified CA 2003 1:PN,O=D-Trust GmbH,C=DE 7011- // skip "ldap://" 7012- location = location.substring(7); 7013- // after first / baseDN starts 7014- String base = null; 7015- String url = null; 7016- if (location.indexOf("/") != -1) 7017- { 7018- base = location.substring(location.indexOf("/")); 7019- // URL 7020- url = "ldap://" 7021- + location.substring(0, location.indexOf("/")); 7022- } 7023- else 7024- { 7025- url = "ldap://" + location; 7026- } 7027- // use all purpose parameters 7028- X509LDAPCertStoreParameters params = new X509LDAPCertStoreParameters.Builder( 7029- url, base).build(); 7030- pkixParams.addAdditionalStore(X509Store.getInstance( 7031- "CERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7032- pkixParams.addAdditionalStore(X509Store.getInstance( 7033- "CRL/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7034- pkixParams.addAdditionalStore(X509Store.getInstance( 7035- "ATTRIBUTECERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7036- pkixParams.addAdditionalStore(X509Store.getInstance( 7037- "CERTIFICATEPAIR/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7038- } 7039+ // BEGIN android-removed 7040+ // if (location.startsWith("ldap://")) 7041+ // { 7042+ // // ldap://directory.d-trust.net/CN=D-TRUST 7043+ // // Qualified CA 2003 1:PN,O=D-Trust GmbH,C=DE 7044+ // // skip "ldap://" 7045+ // location = location.substring(7); 7046+ // // after first / baseDN starts 7047+ // String base = null; 7048+ // String url = null; 7049+ // if (location.indexOf("/") != -1) 7050+ // { 7051+ // base = location.substring(location.indexOf("/")); 7052+ // // URL 7053+ // url = "ldap://" 7054+ // + location.substring(0, location.indexOf("/")); 7055+ // } 7056+ // else 7057+ // { 7058+ // url = "ldap://" + location; 7059+ // } 7060+ // // use all purpose parameters 7061+ // X509LDAPCertStoreParameters params = new X509LDAPCertStoreParameters.Builder( 7062+ // url, base).build(); 7063+ // pkixParams.addAdditionalStore(X509Store.getInstance( 7064+ // "CERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7065+ // pkixParams.addAdditionalStore(X509Store.getInstance( 7066+ // "CRL/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7067+ // pkixParams.addAdditionalStore(X509Store.getInstance( 7068+ // "ATTRIBUTECERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7069+ // pkixParams.addAdditionalStore(X509Store.getInstance( 7070+ // "CERTIFICATEPAIR/LDAP", params, BouncyCastleProvider.PROVIDER_NAME)); 7071+ // } 7072+ // END android-removed 7073 } 7074 catch (Exception e) 7075 { 7076@@ -751,33 +759,35 @@ 7077 return certs; 7078 } 7079 7080- protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect, 7081- List certStores) 7082- throws AnnotatedException 7083- { 7084- Set certs = new HashSet(); 7085- Iterator iter = certStores.iterator(); 7086- 7087- while (iter.hasNext()) 7088- { 7089- Object obj = iter.next(); 7090- 7091- if (obj instanceof X509Store) 7092- { 7093- X509Store certStore = (X509Store)obj; 7094- try 7095- { 7096- certs.addAll(certStore.getMatches(certSelect)); 7097- } 7098- catch (StoreException e) 7099- { 7100- throw new AnnotatedException( 7101- "Problem while picking certificates from X.509 store.", e); 7102- } 7103- } 7104- } 7105- return certs; 7106- } 7107+ // BEGIN android-removed 7108+ // protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect, 7109+ // List certStores) 7110+ // throws AnnotatedException 7111+ // { 7112+ // Set certs = new HashSet(); 7113+ // Iterator iter = certStores.iterator(); 7114+ // 7115+ // while (iter.hasNext()) 7116+ // { 7117+ // Object obj = iter.next(); 7118+ // 7119+ // if (obj instanceof X509Store) 7120+ // { 7121+ // X509Store certStore = (X509Store)obj; 7122+ // try 7123+ // { 7124+ // certs.addAll(certStore.getMatches(certSelect)); 7125+ // } 7126+ // catch (StoreException e) 7127+ // { 7128+ // throw new AnnotatedException( 7129+ // "Problem while picking certificates from X.509 store.", e); 7130+ // } 7131+ // } 7132+ // } 7133+ // return certs; 7134+ // } 7135+ // END android-removed 7136 7137 protected static void addAdditionalStoresFromCRLDistributionPoint( 7138 CRLDistPoint crldp, ExtendedPKIXParameters pkixParams) 7139diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEBlockCipher.java 7140--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java 2012-03-22 15:11:48.000000000 +0000 7141+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEBlockCipher.java 2012-09-19 21:17:12.000000000 +0000 7142@@ -18,8 +18,10 @@ 7143 import javax.crypto.ShortBufferException; 7144 import javax.crypto.spec.IvParameterSpec; 7145 import javax.crypto.spec.PBEParameterSpec; 7146-import javax.crypto.spec.RC2ParameterSpec; 7147-import javax.crypto.spec.RC5ParameterSpec; 7148+// BEGIN android-removed 7149+// import javax.crypto.spec.RC2ParameterSpec; 7150+// import javax.crypto.spec.RC5ParameterSpec; 7151+// END android-removed 7152 7153 import org.bouncycastle.crypto.BlockCipher; 7154 import org.bouncycastle.crypto.BufferedBlockCipher; 7155@@ -28,7 +30,9 @@ 7156 import org.bouncycastle.crypto.InvalidCipherTextException; 7157 import org.bouncycastle.crypto.engines.AESFastEngine; 7158 import org.bouncycastle.crypto.engines.DESEngine; 7159-import org.bouncycastle.crypto.engines.GOST28147Engine; 7160+// BEGIN android-removed 7161+// import org.bouncycastle.crypto.engines.GOST28147Engine; 7162+// END android-removed 7163 import org.bouncycastle.crypto.engines.RC2Engine; 7164 import org.bouncycastle.crypto.engines.TwofishEngine; 7165 import org.bouncycastle.crypto.modes.AEADBlockCipher; 7166@@ -36,12 +40,18 @@ 7167 import org.bouncycastle.crypto.modes.CCMBlockCipher; 7168 import org.bouncycastle.crypto.modes.CFBBlockCipher; 7169 import org.bouncycastle.crypto.modes.CTSBlockCipher; 7170-import org.bouncycastle.crypto.modes.EAXBlockCipher; 7171+// BEGIN android-removed 7172+// import org.bouncycastle.crypto.modes.EAXBlockCipher; 7173+// END android-removed 7174 import org.bouncycastle.crypto.modes.GCMBlockCipher; 7175-import org.bouncycastle.crypto.modes.GOFBBlockCipher; 7176+// BEGIN android-removed 7177+// import org.bouncycastle.crypto.modes.GOFBBlockCipher; 7178+// END android-removed 7179 import org.bouncycastle.crypto.modes.OFBBlockCipher; 7180-import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher; 7181-import org.bouncycastle.crypto.modes.PGPCFBBlockCipher; 7182+// BEGIN android-removed 7183+// import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher; 7184+// import org.bouncycastle.crypto.modes.PGPCFBBlockCipher; 7185+// END android-removed 7186 import org.bouncycastle.crypto.modes.SICBlockCipher; 7187 import org.bouncycastle.crypto.paddings.BlockCipherPadding; 7188 import org.bouncycastle.crypto.paddings.ISO10126d2Padding; 7189@@ -53,12 +63,16 @@ 7190 import org.bouncycastle.crypto.params.KeyParameter; 7191 import org.bouncycastle.crypto.params.ParametersWithIV; 7192 import org.bouncycastle.crypto.params.ParametersWithRandom; 7193-import org.bouncycastle.crypto.params.ParametersWithSBox; 7194-import org.bouncycastle.crypto.params.RC2Parameters; 7195-import org.bouncycastle.crypto.params.RC5Parameters; 7196+// BEGIN android-removed 7197+// import org.bouncycastle.crypto.params.ParametersWithSBox; 7198+// import org.bouncycastle.crypto.params.RC2Parameters; 7199+// import org.bouncycastle.crypto.params.RC5Parameters; 7200+// END android-removed 7201 import org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey; 7202 import org.bouncycastle.jcajce.provider.symmetric.util.PBE; 7203-import org.bouncycastle.jce.spec.GOST28147ParameterSpec; 7204+// BEGIN android-removed 7205+// import org.bouncycastle.jce.spec.GOST28147ParameterSpec; 7206+// END android-removed 7207 import org.bouncycastle.jce.spec.RepeatedSecretKeySpec; 7208 import org.bouncycastle.util.Strings; 7209 7210@@ -71,11 +85,15 @@ 7211 // 7212 private Class[] availableSpecs = 7213 { 7214- RC2ParameterSpec.class, 7215- RC5ParameterSpec.class, 7216+ // BEGIN android-removed 7217+ // RC2ParameterSpec.class, 7218+ // RC5ParameterSpec.class, 7219+ // END android-removed 7220 IvParameterSpec.class, 7221 PBEParameterSpec.class, 7222- GOST28147ParameterSpec.class 7223+ // BEGIN android-removed 7224+ // GOST28147ParameterSpec.class 7225+ // END android-removed 7226 }; 7227 7228 private BlockCipher baseEngine; 7229@@ -232,20 +250,22 @@ 7230 new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize())); 7231 } 7232 } 7233- else if (modeName.startsWith("PGP")) 7234- { 7235- boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV"); 7236- 7237- ivLength = baseEngine.getBlockSize(); 7238- cipher = new BufferedGenericBlockCipher( 7239- new PGPCFBBlockCipher(baseEngine, inlineIV)); 7240- } 7241- else if (modeName.equalsIgnoreCase("OpenPGPCFB")) 7242- { 7243- ivLength = 0; 7244- cipher = new BufferedGenericBlockCipher( 7245- new OpenPGPCFBBlockCipher(baseEngine)); 7246- } 7247+ // BEGIN android-removed 7248+ // else if (modeName.startsWith("PGP")) 7249+ // { 7250+ // boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV"); 7251+ // 7252+ // ivLength = baseEngine.getBlockSize(); 7253+ // cipher = new BufferedGenericBlockCipher( 7254+ // new PGPCFBBlockCipher(baseEngine, inlineIV)); 7255+ // } 7256+ // else if (modeName.equalsIgnoreCase("OpenPGPCFB")) 7257+ // { 7258+ // ivLength = 0; 7259+ // cipher = new BufferedGenericBlockCipher( 7260+ // new OpenPGPCFBBlockCipher(baseEngine)); 7261+ // } 7262+ // END android-removed 7263 else if (modeName.startsWith("SIC")) 7264 { 7265 ivLength = baseEngine.getBlockSize(); 7266@@ -262,12 +282,14 @@ 7267 cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7268 new SICBlockCipher(baseEngine))); 7269 } 7270- else if (modeName.startsWith("GOFB")) 7271- { 7272- ivLength = baseEngine.getBlockSize(); 7273- cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7274- new GOFBBlockCipher(baseEngine))); 7275- } 7276+ // BEGIN android-removed 7277+ // else if (modeName.startsWith("GOFB")) 7278+ // { 7279+ // ivLength = baseEngine.getBlockSize(); 7280+ // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7281+ // new GOFBBlockCipher(baseEngine))); 7282+ // } 7283+ // END android-removed 7284 else if (modeName.startsWith("CTS")) 7285 { 7286 ivLength = baseEngine.getBlockSize(); 7287@@ -278,11 +300,13 @@ 7288 ivLength = baseEngine.getBlockSize(); 7289 cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine)); 7290 } 7291- else if (modeName.startsWith("EAX")) 7292- { 7293- ivLength = baseEngine.getBlockSize(); 7294- cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine)); 7295- } 7296+ // BEGIN android-removed 7297+ // else if (modeName.startsWith("EAX")) 7298+ // { 7299+ // ivLength = baseEngine.getBlockSize(); 7300+ // cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine)); 7301+ // } 7302+ // END android-removed 7303 else if (modeName.startsWith("GCM")) 7304 { 7305 ivLength = baseEngine.getBlockSize(); 7306@@ -371,13 +395,15 @@ 7307 throw new InvalidKeyException("Key for algorithm " + key.getAlgorithm() + " not suitable for symmetric enryption."); 7308 } 7309 7310- // 7311- // for RC5-64 we must have some default parameters 7312- // 7313- if (params == null && baseEngine.getAlgorithmName().startsWith("RC5-64")) 7314- { 7315- throw new InvalidAlgorithmParameterException("RC5 requires an RC5ParametersSpec to be passed in."); 7316- } 7317+ // BEGIN android-removed 7318+ // // 7319+ // // for RC5-64 we must have some default parameters 7320+ // // 7321+ // if (params == null && baseEngine.getAlgorithmName().startsWith("RC5-64")) 7322+ // { 7323+ // throw new InvalidAlgorithmParameterException("RC5 requires an RC5ParametersSpec to be passed in."); 7324+ // } 7325+ // END android-removed 7326 7327 // 7328 // a note on iv's - if ivLength is zero the IV gets ignored (we don't use it). 7329@@ -451,63 +477,65 @@ 7330 param = new KeyParameter(key.getEncoded()); 7331 } 7332 } 7333- else if (params instanceof GOST28147ParameterSpec) 7334- { 7335- GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 7336- 7337- param = new ParametersWithSBox( 7338- new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox()); 7339- 7340- if (gost28147Param.getIV() != null && ivLength != 0) 7341- { 7342- param = new ParametersWithIV(param, gost28147Param.getIV()); 7343- ivParam = (ParametersWithIV)param; 7344- } 7345- } 7346- else if (params instanceof RC2ParameterSpec) 7347- { 7348- RC2ParameterSpec rc2Param = (RC2ParameterSpec)params; 7349- 7350- param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits()); 7351- 7352- if (rc2Param.getIV() != null && ivLength != 0) 7353- { 7354- param = new ParametersWithIV(param, rc2Param.getIV()); 7355- ivParam = (ParametersWithIV)param; 7356- } 7357- } 7358- else if (params instanceof RC5ParameterSpec) 7359- { 7360- RC5ParameterSpec rc5Param = (RC5ParameterSpec)params; 7361- 7362- param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds()); 7363- if (baseEngine.getAlgorithmName().startsWith("RC5")) 7364- { 7365- if (baseEngine.getAlgorithmName().equals("RC5-32")) 7366- { 7367- if (rc5Param.getWordSize() != 32) 7368- { 7369- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + "."); 7370- } 7371- } 7372- else if (baseEngine.getAlgorithmName().equals("RC5-64")) 7373- { 7374- if (rc5Param.getWordSize() != 64) 7375- { 7376- throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + "."); 7377- } 7378- } 7379- } 7380- else 7381- { 7382- throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5."); 7383- } 7384- if ((rc5Param.getIV() != null) && (ivLength != 0)) 7385- { 7386- param = new ParametersWithIV(param, rc5Param.getIV()); 7387- ivParam = (ParametersWithIV)param; 7388- } 7389- } 7390+ // BEGIN android-removed 7391+ // else if (params instanceof GOST28147ParameterSpec) 7392+ // { 7393+ // GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 7394+ // 7395+ // param = new ParametersWithSBox( 7396+ // new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox()); 7397+ // 7398+ // if (gost28147Param.getIV() != null && ivLength != 0) 7399+ // { 7400+ // param = new ParametersWithIV(param, gost28147Param.getIV()); 7401+ // ivParam = (ParametersWithIV)param; 7402+ // } 7403+ // } 7404+ // else if (params instanceof RC2ParameterSpec) 7405+ // { 7406+ // RC2ParameterSpec rc2Param = (RC2ParameterSpec)params; 7407+ // 7408+ // param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits()); 7409+ // 7410+ // if (rc2Param.getIV() != null && ivLength != 0) 7411+ // { 7412+ // param = new ParametersWithIV(param, rc2Param.getIV()); 7413+ // ivParam = (ParametersWithIV)param; 7414+ // } 7415+ // } 7416+ // else if (params instanceof RC5ParameterSpec) 7417+ // { 7418+ // RC5ParameterSpec rc5Param = (RC5ParameterSpec)params; 7419+ // 7420+ // param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds()); 7421+ // if (baseEngine.getAlgorithmName().startsWith("RC5")) 7422+ // { 7423+ // if (baseEngine.getAlgorithmName().equals("RC5-32")) 7424+ // { 7425+ // if (rc5Param.getWordSize() != 32) 7426+ // { 7427+ // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + "."); 7428+ // } 7429+ // } 7430+ // else if (baseEngine.getAlgorithmName().equals("RC5-64")) 7431+ // { 7432+ // if (rc5Param.getWordSize() != 64) 7433+ // { 7434+ // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + "."); 7435+ // } 7436+ // } 7437+ // } 7438+ // else 7439+ // { 7440+ // throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5."); 7441+ // } 7442+ // if ((rc5Param.getIV() != null) && (ivLength != 0)) 7443+ // { 7444+ // param = new ParametersWithIV(param, rc5Param.getIV()); 7445+ // ivParam = (ParametersWithIV)param; 7446+ // } 7447+ // } 7448+ // END android-removed 7449 else 7450 { 7451 throw new InvalidAlgorithmParameterException("unknown parameter type."); 7452@@ -711,10 +739,21 @@ 7453 int inputLen, 7454 byte[] output, 7455 int outputOffset) 7456- throws IllegalBlockSizeException, BadPaddingException 7457+ throws IllegalBlockSizeException, BadPaddingException, ShortBufferException 7458 { 7459+ // BEGIN android-note 7460+ // added ShortBufferException to the throws statement 7461+ // END android-note 7462 int len = 0; 7463 7464+ // BEGIN android-added 7465+ int outputLen = cipher.getOutputSize(inputLen); 7466+ 7467+ if (outputLen + outputOffset > output.length) { 7468+ throw new ShortBufferException("need at least " + outputLen + " bytes"); 7469+ } 7470+ // BEGIN android-added 7471+ 7472 if (inputLen != 0) 7473 { 7474 len = cipher.processBytes(input, inputOffset, inputLen, output, outputOffset); 7475@@ -756,62 +795,64 @@ 7476 } 7477 } 7478 7479- /** 7480- * DESCBC 7481- */ 7482- static public class DESCBC 7483- extends JCEBlockCipher 7484- { 7485- public DESCBC() 7486- { 7487- super(new CBCBlockCipher(new DESEngine()), 64); 7488- } 7489- } 7490- 7491- /** 7492- * GOST28147 7493- */ 7494- static public class GOST28147 7495- extends JCEBlockCipher 7496- { 7497- public GOST28147() 7498- { 7499- super(new GOST28147Engine()); 7500- } 7501- } 7502- 7503- static public class GOST28147cbc 7504- extends JCEBlockCipher 7505- { 7506- public GOST28147cbc() 7507- { 7508- super(new CBCBlockCipher(new GOST28147Engine()), 64); 7509- } 7510- } 7511- 7512- /** 7513- * RC2 7514- */ 7515- static public class RC2 7516- extends JCEBlockCipher 7517- { 7518- public RC2() 7519- { 7520- super(new RC2Engine()); 7521- } 7522- } 7523- 7524- /** 7525- * RC2CBC 7526- */ 7527- static public class RC2CBC 7528- extends JCEBlockCipher 7529- { 7530- public RC2CBC() 7531- { 7532- super(new CBCBlockCipher(new RC2Engine()), 64); 7533- } 7534- } 7535+ // BEGIN android-removed 7536+ // /** 7537+ // * DESCBC 7538+ // */ 7539+ // static public class DESCBC 7540+ // extends JCEBlockCipher 7541+ // { 7542+ // public DESCBC() 7543+ // { 7544+ // super(new CBCBlockCipher(new DESEngine()), 64); 7545+ // } 7546+ // } 7547+ // 7548+ // /** 7549+ // * GOST28147 7550+ // */ 7551+ // static public class GOST28147 7552+ // extends JCEBlockCipher 7553+ // { 7554+ // public GOST28147() 7555+ // { 7556+ // super(new GOST28147Engine()); 7557+ // } 7558+ // } 7559+ // 7560+ // static public class GOST28147cbc 7561+ // extends JCEBlockCipher 7562+ // { 7563+ // public GOST28147cbc() 7564+ // { 7565+ // super(new CBCBlockCipher(new GOST28147Engine()), 64); 7566+ // } 7567+ // } 7568+ // 7569+ // /** 7570+ // * RC2 7571+ // */ 7572+ // static public class RC2 7573+ // extends JCEBlockCipher 7574+ // { 7575+ // public RC2() 7576+ // { 7577+ // super(new RC2Engine()); 7578+ // } 7579+ // } 7580+ // 7581+ // /** 7582+ // * RC2CBC 7583+ // */ 7584+ // static public class RC2CBC 7585+ // extends JCEBlockCipher 7586+ // { 7587+ // public RC2CBC() 7588+ // { 7589+ // super(new CBCBlockCipher(new RC2Engine()), 64); 7590+ // } 7591+ // } 7592+ // END android-removed 7593 7594 /** 7595 * PBEWithMD5AndDES 7596diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPrivateKey.java 7597--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2012-03-22 15:11:48.000000000 +0000 7598+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2012-09-19 21:17:12.000000000 +0000 7599@@ -20,8 +20,10 @@ 7600 import org.bouncycastle.asn1.DERInteger; 7601 import org.bouncycastle.asn1.DERNull; 7602 import org.bouncycastle.asn1.DERObjectIdentifier; 7603-import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7604-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 7605+// BEGIN android-removed 7606+// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7607+// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 7608+// END android-removed 7609 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 7610 import org.bouncycastle.asn1.sec.ECPrivateKeyStructure; 7611 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 7612@@ -203,21 +205,23 @@ 7613 ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters()); 7614 X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid); 7615 7616- if (ecP == null) // GOST Curve 7617- { 7618- ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid); 7619- EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed()); 7620- 7621- ecSpec = new ECNamedCurveSpec( 7622- ECGOST3410NamedCurves.getName(oid), 7623- ellipticCurve, 7624- new ECPoint( 7625- gParam.getG().getX().toBigInteger(), 7626- gParam.getG().getY().toBigInteger()), 7627- gParam.getN(), 7628- gParam.getH()); 7629- } 7630- else 7631+ // BEGIN android-removed 7632+ // if (ecP == null) // GOST Curve 7633+ // { 7634+ // ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid); 7635+ // EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed()); 7636+ // 7637+ // ecSpec = new ECNamedCurveSpec( 7638+ // ECGOST3410NamedCurves.getName(oid), 7639+ // ellipticCurve, 7640+ // new ECPoint( 7641+ // gParam.getG().getX().toBigInteger(), 7642+ // gParam.getG().getY().toBigInteger()), 7643+ // gParam.getN(), 7644+ // gParam.getH()); 7645+ // } 7646+ // else 7647+ // END android-removed 7648 { 7649 EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed()); 7650 7651@@ -331,11 +335,13 @@ 7652 7653 try 7654 { 7655- if (algorithm.equals("ECGOST3410")) 7656- { 7657- info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 7658- } 7659- else 7660+ // BEGIN android-removed 7661+ // if (algorithm.equals("ECGOST3410")) 7662+ // { 7663+ // info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 7664+ // } 7665+ // else 7666+ // END android-removed 7667 { 7668 7669 info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 7670diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPublicKey.java 7671--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java 2012-03-22 15:11:48.000000000 +0000 7672+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEECPublicKey.java 2012-09-19 21:17:12.000000000 +0000 7673@@ -18,9 +18,11 @@ 7674 import org.bouncycastle.asn1.DERBitString; 7675 import org.bouncycastle.asn1.DERNull; 7676 import org.bouncycastle.asn1.DEROctetString; 7677-import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7678-import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 7679-import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters; 7680+// BEGIN android-removed 7681+// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7682+// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 7683+// import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters; 7684+// END android-removed 7685 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 7686 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 7687 import org.bouncycastle.asn1.x9.X962Parameters; 7688@@ -33,9 +35,13 @@ 7689 import org.bouncycastle.jcajce.provider.asymmetric.ec.EC5Util; 7690 import org.bouncycastle.jcajce.provider.asymmetric.ec.ECUtil; 7691 import org.bouncycastle.jcajce.provider.asymmetric.util.KeyUtil; 7692-import org.bouncycastle.jce.ECGOST3410NamedCurveTable; 7693+// BEGIN android-removed 7694+// import org.bouncycastle.jce.ECGOST3410NamedCurveTable; 7695+// END android-removed 7696 import org.bouncycastle.jce.interfaces.ECPointEncoder; 7697-import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec; 7698+// BEGIN android-removed 7699+// import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec; 7700+// END android-removed 7701 import org.bouncycastle.jce.spec.ECNamedCurveSpec; 7702 import org.bouncycastle.math.ec.ECCurve; 7703 7704@@ -46,7 +52,9 @@ 7705 private org.bouncycastle.math.ec.ECPoint q; 7706 private ECParameterSpec ecSpec; 7707 private boolean withCompression; 7708- private GOST3410PublicKeyAlgParameters gostParams; 7709+ // BEGIN android-removed 7710+ // private GOST3410PublicKeyAlgParameters gostParams; 7711+ // END android-removed 7712 7713 public JCEECPublicKey( 7714 String algorithm, 7715@@ -56,7 +64,9 @@ 7716 this.q = key.q; 7717 this.ecSpec = key.ecSpec; 7718 this.withCompression = key.withCompression; 7719- this.gostParams = key.gostParams; 7720+ // BEGIN android-removed 7721+ // this.gostParams = key.gostParams; 7722+ // END android-removed 7723 } 7724 7725 public JCEECPublicKey( 7726@@ -179,54 +189,56 @@ 7727 7728 private void populateFromPubKeyInfo(SubjectPublicKeyInfo info) 7729 { 7730- if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001)) 7731- { 7732- DERBitString bits = info.getPublicKeyData(); 7733- ASN1OctetString key; 7734- this.algorithm = "ECGOST3410"; 7735- 7736- try 7737- { 7738- key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes()); 7739- } 7740- catch (IOException ex) 7741- { 7742- throw new IllegalArgumentException("error recovering public key"); 7743- } 7744- 7745- byte[] keyEnc = key.getOctets(); 7746- byte[] x = new byte[32]; 7747- byte[] y = new byte[32]; 7748- 7749- for (int i = 0; i != x.length; i++) 7750- { 7751- x[i] = keyEnc[32 - 1 - i]; 7752- } 7753- 7754- for (int i = 0; i != y.length; i++) 7755- { 7756- y[i] = keyEnc[64 - 1 - i]; 7757- } 7758- 7759- gostParams = new GOST3410PublicKeyAlgParameters((ASN1Sequence)info.getAlgorithmId().getParameters()); 7760- 7761- ECNamedCurveParameterSpec spec = ECGOST3410NamedCurveTable.getParameterSpec(ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet())); 7762- 7763- ECCurve curve = spec.getCurve(); 7764- EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed()); 7765- 7766- this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false); 7767- 7768- ecSpec = new ECNamedCurveSpec( 7769- ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()), 7770- ellipticCurve, 7771- new ECPoint( 7772- spec.getG().getX().toBigInteger(), 7773- spec.getG().getY().toBigInteger()), 7774- spec.getN(), spec.getH()); 7775- 7776- } 7777- else 7778+ // BEGIN android-removed 7779+ // if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001)) 7780+ // { 7781+ // DERBitString bits = info.getPublicKeyData(); 7782+ // ASN1OctetString key; 7783+ // this.algorithm = "ECGOST3410"; 7784+ // 7785+ // try 7786+ // { 7787+ // key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes()); 7788+ // } 7789+ // catch (IOException ex) 7790+ // { 7791+ // throw new IllegalArgumentException("error recovering public key"); 7792+ // } 7793+ // 7794+ // byte[] keyEnc = key.getOctets(); 7795+ // byte[] x = new byte[32]; 7796+ // byte[] y = new byte[32]; 7797+ // 7798+ // for (int i = 0; i != x.length; i++) 7799+ // { 7800+ // x[i] = keyEnc[32 - 1 - i]; 7801+ // } 7802+ // 7803+ // for (int i = 0; i != y.length; i++) 7804+ // { 7805+ // y[i] = keyEnc[64 - 1 - i]; 7806+ // } 7807+ // 7808+ // gostParams = new GOST3410PublicKeyAlgParameters((ASN1Sequence)info.getAlgorithmId().getParameters()); 7809+ // 7810+ // ECNamedCurveParameterSpec spec = ECGOST3410NamedCurveTable.getParameterSpec(ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet())); 7811+ // 7812+ // ECCurve curve = spec.getCurve(); 7813+ // EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed()); 7814+ // 7815+ // this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false); 7816+ // 7817+ // ecSpec = new ECNamedCurveSpec( 7818+ // ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()), 7819+ // ellipticCurve, 7820+ // new ECPoint( 7821+ // spec.getG().getX().toBigInteger(), 7822+ // spec.getG().getY().toBigInteger()), 7823+ // spec.getN(), spec.getH()); 7824+ // 7825+ // } 7826+ // else 7827+ // END android-removed 7828 { 7829 X962Parameters params = new X962Parameters((ASN1Primitive)info.getAlgorithmId().getParameters()); 7830 ECCurve curve; 7831@@ -315,45 +327,47 @@ 7832 ASN1Encodable params; 7833 SubjectPublicKeyInfo info; 7834 7835- if (algorithm.equals("ECGOST3410")) 7836- { 7837- if (gostParams != null) 7838- { 7839- params = gostParams; 7840- } 7841- else 7842- { 7843- if (ecSpec instanceof ECNamedCurveSpec) 7844- { 7845- params = new GOST3410PublicKeyAlgParameters( 7846- ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()), 7847- CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet); 7848- } 7849- else 7850- { // strictly speaking this may not be applicable... 7851- ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve()); 7852- 7853- X9ECParameters ecP = new X9ECParameters( 7854- curve, 7855- EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression), 7856- ecSpec.getOrder(), 7857- BigInteger.valueOf(ecSpec.getCofactor()), 7858- ecSpec.getCurve().getSeed()); 7859- 7860- params = new X962Parameters(ecP); 7861- } 7862- } 7863- 7864- BigInteger bX = this.q.getX().toBigInteger(); 7865- BigInteger bY = this.q.getY().toBigInteger(); 7866- byte[] encKey = new byte[64]; 7867- 7868- extractBytes(encKey, 0, bX); 7869- extractBytes(encKey, 32, bY); 7870- 7871- info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params), new DEROctetString(encKey)); 7872- } 7873- else 7874+ // BEGIN android-removed 7875+ // if (algorithm.equals("ECGOST3410")) 7876+ // { 7877+ // if (gostParams != null) 7878+ // { 7879+ // params = gostParams; 7880+ // } 7881+ // else 7882+ // { 7883+ // if (ecSpec instanceof ECNamedCurveSpec) 7884+ // { 7885+ // params = new GOST3410PublicKeyAlgParameters( 7886+ // ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()), 7887+ // CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet); 7888+ // } 7889+ // else 7890+ // { // strictly speaking this may not be applicable... 7891+ // ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve()); 7892+ // 7893+ // X9ECParameters ecP = new X9ECParameters( 7894+ // curve, 7895+ // EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression), 7896+ // ecSpec.getOrder(), 7897+ // BigInteger.valueOf(ecSpec.getCofactor()), 7898+ // ecSpec.getCurve().getSeed()); 7899+ // 7900+ // params = new X962Parameters(ecP); 7901+ // } 7902+ // } 7903+ // 7904+ // BigInteger bX = this.q.getX().toBigInteger(); 7905+ // BigInteger bY = this.q.getY().toBigInteger(); 7906+ // byte[] encKey = new byte[64]; 7907+ // 7908+ // extractBytes(encKey, 0, bX); 7909+ // extractBytes(encKey, 32, bY); 7910+ // 7911+ // info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params), new DEROctetString(encKey)); 7912+ // } 7913+ // else 7914+ // END android-removed 7915 { 7916 if (ecSpec instanceof ECNamedCurveSpec) 7917 { 7918diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEMac.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEMac.java 7919--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEMac.java 2012-03-22 15:11:48.000000000 +0000 7920+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEMac.java 2012-09-19 21:17:12.000000000 +0000 7921@@ -11,24 +11,35 @@ 7922 7923 import org.bouncycastle.crypto.CipherParameters; 7924 import org.bouncycastle.crypto.Mac; 7925-import org.bouncycastle.crypto.digests.MD2Digest; 7926-import org.bouncycastle.crypto.digests.MD4Digest; 7927-import org.bouncycastle.crypto.digests.MD5Digest; 7928-import org.bouncycastle.crypto.digests.RIPEMD128Digest; 7929-import org.bouncycastle.crypto.digests.RIPEMD160Digest; 7930-import org.bouncycastle.crypto.digests.SHA1Digest; 7931-import org.bouncycastle.crypto.digests.SHA224Digest; 7932-import org.bouncycastle.crypto.digests.SHA256Digest; 7933-import org.bouncycastle.crypto.digests.SHA384Digest; 7934-import org.bouncycastle.crypto.digests.SHA512Digest; 7935-import org.bouncycastle.crypto.digests.TigerDigest; 7936+// BEGIN android-removed 7937+// import org.bouncycastle.crypto.digests.MD2Digest; 7938+// import org.bouncycastle.crypto.digests.MD4Digest; 7939+// import org.bouncycastle.crypto.digests.MD5Digest; 7940+// import org.bouncycastle.crypto.digests.RIPEMD128Digest; 7941+// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 7942+// import org.bouncycastle.crypto.digests.SHA1Digest; 7943+// import org.bouncycastle.crypto.digests.SHA224Digest; 7944+// import org.bouncycastle.crypto.digests.SHA256Digest; 7945+// import org.bouncycastle.crypto.digests.SHA384Digest; 7946+// import org.bouncycastle.crypto.digests.SHA512Digest; 7947+// import org.bouncycastle.crypto.digests.TigerDigest; 7948+// END android-removed 7949+// BEGIN android-added 7950+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 7951+// END android-added 7952 import org.bouncycastle.crypto.engines.DESEngine; 7953-import org.bouncycastle.crypto.engines.RC2Engine; 7954+// BEGIN android-removed 7955+// import org.bouncycastle.crypto.engines.RC2Engine; 7956+// END android-removed 7957 import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 7958-import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 7959+// BEGIN android-removed 7960+// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 7961+// END android-removed 7962 import org.bouncycastle.crypto.macs.HMac; 7963-import org.bouncycastle.crypto.macs.ISO9797Alg3Mac; 7964-import org.bouncycastle.crypto.macs.OldHMac; 7965+// BEGIN android-removed 7966+// import org.bouncycastle.crypto.macs.ISO9797Alg3Mac; 7967+// import org.bouncycastle.crypto.macs.OldHMac; 7968+// END android-removed 7969 import org.bouncycastle.crypto.paddings.ISO7816d4Padding; 7970 import org.bouncycastle.crypto.params.KeyParameter; 7971 import org.bouncycastle.crypto.params.ParametersWithIV; 7972@@ -144,109 +155,111 @@ 7973 * the classes that extend directly off us. 7974 */ 7975 7976- /** 7977- * DES 7978- */ 7979- public static class DES 7980- extends JCEMac 7981- { 7982- public DES() 7983- { 7984- super(new CBCBlockCipherMac(new DESEngine())); 7985- } 7986- } 7987- 7988- /** 7989- * DES 64 bit MAC 7990- */ 7991- public static class DES64 7992- extends JCEMac 7993- { 7994- public DES64() 7995- { 7996- super(new CBCBlockCipherMac(new DESEngine(), 64)); 7997- } 7998- } 7999- 8000- /** 8001- * RC2 8002- */ 8003- public static class RC2 8004- extends JCEMac 8005- { 8006- public RC2() 8007- { 8008- super(new CBCBlockCipherMac(new RC2Engine())); 8009- } 8010- } 8011- 8012- 8013- 8014- 8015- /** 8016- * DES 8017- */ 8018- public static class DESCFB8 8019- extends JCEMac 8020- { 8021- public DESCFB8() 8022- { 8023- super(new CFBBlockCipherMac(new DESEngine())); 8024- } 8025- } 8026- 8027- /** 8028- * RC2CFB8 8029- */ 8030- 8031- 8032- /** 8033- * DES9797Alg3with7816-4Padding 8034- */ 8035- public static class DES9797Alg3with7816d4 8036- extends JCEMac 8037- { 8038- public DES9797Alg3with7816d4() 8039- { 8040- super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding())); 8041- } 8042- } 8043- 8044- /** 8045- * DES9797Alg3 8046- */ 8047- public static class DES9797Alg3 8048- extends JCEMac 8049- { 8050- public DES9797Alg3() 8051- { 8052- super(new ISO9797Alg3Mac(new DESEngine())); 8053- } 8054- } 8055- 8056- /** 8057- * MD2 HMac 8058- */ 8059- public static class MD2 8060- extends JCEMac 8061- { 8062- public MD2() 8063- { 8064- super(new HMac(new MD2Digest())); 8065- } 8066- } 8067- 8068- /** 8069- * MD4 HMac 8070- */ 8071- public static class MD4 8072- extends JCEMac 8073- { 8074- public MD4() 8075- { 8076- super(new HMac(new MD4Digest())); 8077- } 8078- } 8079+ // BEGIN android-removed 8080+ // /** 8081+ // * DES 8082+ // */ 8083+ // public static class DES 8084+ // extends JCEMac 8085+ // { 8086+ // public DES() 8087+ // { 8088+ // super(new CBCBlockCipherMac(new DESEngine())); 8089+ // } 8090+ // } 8091+ // 8092+ // /** 8093+ // * DES 64 bit MAC 8094+ // */ 8095+ // public static class DES64 8096+ // extends JCEMac 8097+ // { 8098+ // public DES64() 8099+ // { 8100+ // super(new CBCBlockCipherMac(new DESEngine(), 64)); 8101+ // } 8102+ // } 8103+ // 8104+ // /** 8105+ // * RC2 8106+ // */ 8107+ // public static class RC2 8108+ // extends JCEMac 8109+ // { 8110+ // public RC2() 8111+ // { 8112+ // super(new CBCBlockCipherMac(new RC2Engine())); 8113+ // } 8114+ // } 8115+ // 8116+ // 8117+ // 8118+ // 8119+ // /** 8120+ // * DES 8121+ // */ 8122+ // public static class DESCFB8 8123+ // extends JCEMac 8124+ // { 8125+ // public DESCFB8() 8126+ // { 8127+ // super(new CFBBlockCipherMac(new DESEngine())); 8128+ // } 8129+ // } 8130+ // 8131+ // /** 8132+ // * RC2CFB8 8133+ // */ 8134+ // 8135+ // 8136+ // /** 8137+ // * DES9797Alg3with7816-4Padding 8138+ // */ 8139+ // public static class DES9797Alg3with7816d4 8140+ // extends JCEMac 8141+ // { 8142+ // public DES9797Alg3with7816d4() 8143+ // { 8144+ // super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding())); 8145+ // } 8146+ // } 8147+ // 8148+ // /** 8149+ // * DES9797Alg3 8150+ // */ 8151+ // public static class DES9797Alg3 8152+ // extends JCEMac 8153+ // { 8154+ // public DES9797Alg3() 8155+ // { 8156+ // super(new ISO9797Alg3Mac(new DESEngine())); 8157+ // } 8158+ // } 8159+ // 8160+ // /** 8161+ // * MD2 HMac 8162+ // */ 8163+ // public static class MD2 8164+ // extends JCEMac 8165+ // { 8166+ // public MD2() 8167+ // { 8168+ // super(new HMac(new MD2Digest())); 8169+ // } 8170+ // } 8171+ // 8172+ // /** 8173+ // * MD4 HMac 8174+ // */ 8175+ // public static class MD4 8176+ // extends JCEMac 8177+ // { 8178+ // public MD4() 8179+ // { 8180+ // super(new HMac(new MD4Digest())); 8181+ // } 8182+ // } 8183+ // END android-removed 8184 8185 /** 8186 * MD5 HMac 8187@@ -256,7 +269,9 @@ 8188 { 8189 public MD5() 8190 { 8191- super(new HMac(new MD5Digest())); 8192+ // BEGIN android-changed 8193+ super(new HMac(AndroidDigestFactory.getMD5())); 8194+ // END android-changed 8195 } 8196 } 8197 8198@@ -268,21 +283,25 @@ 8199 { 8200 public SHA1() 8201 { 8202- super(new HMac(new SHA1Digest())); 8203+ // BEGIN android-changed 8204+ super(new HMac(AndroidDigestFactory.getSHA1())); 8205+ // END android-changed 8206 } 8207 } 8208 8209- /** 8210- * SHA-224 HMac 8211- */ 8212- public static class SHA224 8213- extends JCEMac 8214- { 8215- public SHA224() 8216- { 8217- super(new HMac(new SHA224Digest())); 8218- } 8219- } 8220+ // BEGIN android-removed 8221+ // /** 8222+ // * SHA-224 HMac 8223+ // */ 8224+ // public static class SHA224 8225+ // extends JCEMac 8226+ // { 8227+ // public SHA224() 8228+ // { 8229+ // super(new HMac(new SHA224Digest())); 8230+ // } 8231+ // } 8232+ // END android-removed 8233 8234 /** 8235 * SHA-256 HMac 8236@@ -292,7 +311,9 @@ 8237 { 8238 public SHA256() 8239 { 8240- super(new HMac(new SHA256Digest())); 8241+ // BEGIN android-changed 8242+ super(new HMac(AndroidDigestFactory.getSHA256())); 8243+ // END android-changed 8244 } 8245 } 8246 8247@@ -304,18 +325,22 @@ 8248 { 8249 public SHA384() 8250 { 8251- super(new HMac(new SHA384Digest())); 8252+ // BEGIN android-changed 8253+ super(new HMac(AndroidDigestFactory.getSHA384())); 8254+ // END android-changed 8255 } 8256 } 8257 8258- public static class OldSHA384 8259- extends JCEMac 8260- { 8261- public OldSHA384() 8262- { 8263- super(new OldHMac(new SHA384Digest())); 8264- } 8265- } 8266+ // BEGIN android-removed 8267+ // public static class OldSHA384 8268+ // extends JCEMac 8269+ // { 8270+ // public OldSHA384() 8271+ // { 8272+ // super(new OldHMac(new SHA384Digest())); 8273+ // } 8274+ // } 8275+ // END android-removed 8276 8277 /** 8278 * SHA-512 HMac 8279@@ -325,75 +350,80 @@ 8280 { 8281 public SHA512() 8282 { 8283- super(new HMac(new SHA512Digest())); 8284+ // BEGIN android-changed 8285+ super(new HMac(AndroidDigestFactory.getSHA512())); 8286+ // END android-changed 8287 } 8288 } 8289 8290- /** 8291- * SHA-512 HMac 8292- */ 8293- public static class OldSHA512 8294- extends JCEMac 8295- { 8296- public OldSHA512() 8297- { 8298- super(new OldHMac(new SHA512Digest())); 8299- } 8300- } 8301 8302- /** 8303- * RIPEMD128 HMac 8304- */ 8305- public static class RIPEMD128 8306- extends JCEMac 8307- { 8308- public RIPEMD128() 8309- { 8310- super(new HMac(new RIPEMD128Digest())); 8311- } 8312- } 8313- 8314- /** 8315- * RIPEMD160 HMac 8316- */ 8317- public static class RIPEMD160 8318- extends JCEMac 8319- { 8320- public RIPEMD160() 8321- { 8322- super(new HMac(new RIPEMD160Digest())); 8323- } 8324- } 8325- 8326- /** 8327- * Tiger HMac 8328- */ 8329- public static class Tiger 8330- extends JCEMac 8331- { 8332- public Tiger() 8333- { 8334- super(new HMac(new TigerDigest())); 8335- } 8336- } 8337- 8338+ // BEGIN android-removed 8339+ // /** 8340+ // * SHA-512 HMac 8341+ // */ 8342+ // public static class OldSHA512 8343+ // extends JCEMac 8344+ // { 8345+ // public OldSHA512() 8346+ // { 8347+ // super(new OldHMac(new SHA512Digest())); 8348+ // } 8349+ // } 8350 // 8351- // PKCS12 states that the same algorithm should be used 8352- // for the key generation as is used in the HMAC, so that 8353- // is what we do here. 8354+ // /** 8355+ // * RIPEMD128 HMac 8356+ // */ 8357+ // public static class RIPEMD128 8358+ // extends JCEMac 8359+ // { 8360+ // public RIPEMD128() 8361+ // { 8362+ // super(new HMac(new RIPEMD128Digest())); 8363+ // } 8364+ // } 8365 // 8366- 8367- /** 8368- * PBEWithHmacRIPEMD160 8369- */ 8370- public static class PBEWithRIPEMD160 8371- extends JCEMac 8372- { 8373- public PBEWithRIPEMD160() 8374- { 8375- super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160); 8376- } 8377- } 8378+ // /** 8379+ // * RIPEMD160 HMac 8380+ // */ 8381+ // public static class RIPEMD160 8382+ // extends JCEMac 8383+ // { 8384+ // public RIPEMD160() 8385+ // { 8386+ // super(new HMac(new RIPEMD160Digest())); 8387+ // } 8388+ // } 8389+ // 8390+ // /** 8391+ // * Tiger HMac 8392+ // */ 8393+ // public static class Tiger 8394+ // extends JCEMac 8395+ // { 8396+ // public Tiger() 8397+ // { 8398+ // super(new HMac(new TigerDigest())); 8399+ // } 8400+ // } 8401+ // 8402+ // // 8403+ // // PKCS12 states that the same algorithm should be used 8404+ // // for the key generation as is used in the HMAC, so that 8405+ // // is what we do here. 8406+ // // 8407+ // 8408+ // /** 8409+ // * PBEWithHmacRIPEMD160 8410+ // */ 8411+ // public static class PBEWithRIPEMD160 8412+ // extends JCEMac 8413+ // { 8414+ // public PBEWithRIPEMD160() 8415+ // { 8416+ // super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160); 8417+ // } 8418+ // } 8419+ // END android-removed 8420 8421 /** 8422 * PBEWithHmacSHA 8423@@ -403,19 +433,23 @@ 8424 { 8425 public PBEWithSHA() 8426 { 8427- super(new HMac(new SHA1Digest()), PKCS12, SHA1, 160); 8428+ // BEGIN android-changed 8429+ super(new HMac(AndroidDigestFactory.getSHA1()), PKCS12, SHA1, 160); 8430+ // END android-changed 8431 } 8432 } 8433 8434- /** 8435- * PBEWithHmacTiger 8436- */ 8437- public static class PBEWithTiger 8438- extends JCEMac 8439- { 8440- public PBEWithTiger() 8441- { 8442- super(new HMac(new TigerDigest()), PKCS12, TIGER, 192); 8443- } 8444- } 8445+ // BEGIN android-removed 8446+ // /** 8447+ // * PBEWithHmacTiger 8448+ // */ 8449+ // public static class PBEWithTiger 8450+ // extends JCEMac 8451+ // { 8452+ // public PBEWithTiger() 8453+ // { 8454+ // super(new HMac(new TigerDigest()), PKCS12, TIGER, 192); 8455+ // } 8456+ // } 8457+ // END android-removed 8458 } 8459diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 8460--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 2012-03-22 15:11:48.000000000 +0000 8461+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java 2012-09-19 21:17:12.000000000 +0000 8462@@ -127,7 +127,9 @@ 8463 */ 8464 public byte[] getEncoded() 8465 { 8466- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient())); 8467+ // BEGIN android-changed 8468+ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKey(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient())); 8469+ // END android-changed 8470 } 8471 8472 /** 8473diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 8474--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 2012-03-22 15:11:48.000000000 +0000 8475+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPrivateKey.java 2012-09-19 21:17:12.000000000 +0000 8476@@ -78,7 +78,9 @@ 8477 8478 public byte[] getEncoded() 8479 { 8480- return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO)); 8481+ // BEGIN android-changed 8482+ return KeyUtil.getEncodedPrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new org.bouncycastle.asn1.pkcs.RSAPrivateKey(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO)); 8483+ // END android-changed 8484 } 8485 8486 public boolean equals(Object o) 8487diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPublicKey.java 8488--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java 2012-03-22 15:11:48.000000000 +0000 8489+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCERSAPublicKey.java 2012-09-19 21:17:12.000000000 +0000 8490@@ -91,7 +91,9 @@ 8491 8492 public byte[] getEncoded() 8493 { 8494- return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPublicKeyStructure(getModulus(), getPublicExponent())); 8495+ // BEGIN android-changed 8496+ return KeyUtil.getEncodedSubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPublicKeyStructure(getModulus(), getPublicExponent())); 8497+ // END android-changed 8498 } 8499 8500 public int hashCode() 8501diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 8502--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 2012-03-22 15:11:48.000000000 +0000 8503+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCESecretKeyFactory.java 2012-09-19 21:17:12.000000000 +0000 8504@@ -252,29 +252,31 @@ 8505 } 8506 } 8507 8508- /** 8509- * PBEWithMD2AndDES 8510- */ 8511- static public class PBEWithMD2AndDES 8512- extends DESPBEKeyFactory 8513- { 8514- public PBEWithMD2AndDES() 8515- { 8516- super("PBEwithMD2andDES", PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, true, PKCS5S1, MD2, 64, 64); 8517- } 8518- } 8519- 8520- /** 8521- * PBEWithMD2AndRC2 8522- */ 8523- static public class PBEWithMD2AndRC2 8524- extends PBEKeyFactory 8525- { 8526- public PBEWithMD2AndRC2() 8527- { 8528- super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64); 8529- } 8530- } 8531+ // BEGIN android-removed 8532+ // /** 8533+ // * PBEWithMD2AndDES 8534+ // */ 8535+ // static public class PBEWithMD2AndDES 8536+ // extends DESPBEKeyFactory 8537+ // { 8538+ // public PBEWithMD2AndDES() 8539+ // { 8540+ // super("PBEwithMD2andDES", PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, true, PKCS5S1, MD2, 64, 64); 8541+ // } 8542+ // } 8543+ // 8544+ // /** 8545+ // * PBEWithMD2AndRC2 8546+ // */ 8547+ // static public class PBEWithMD2AndRC2 8548+ // extends PBEKeyFactory 8549+ // { 8550+ // public PBEWithMD2AndRC2() 8551+ // { 8552+ // super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64); 8553+ // } 8554+ // } 8555+ // END android-removed 8556 8557 /** 8558 * PBEWithMD5AndDES 8559@@ -408,17 +410,19 @@ 8560 } 8561 } 8562 8563- /** 8564- * PBEWithHmacRIPEMD160 8565- */ 8566- public static class PBEWithRIPEMD160 8567- extends PBEKeyFactory 8568- { 8569- public PBEWithRIPEMD160() 8570- { 8571- super("PBEwithHmacRIPEMD160", null, false, PKCS12, RIPEMD160, 160, 0); 8572- } 8573- } 8574+ // BEGIN android-removed 8575+ // /** 8576+ // * PBEWithHmacRIPEMD160 8577+ // */ 8578+ // public static class PBEWithRIPEMD160 8579+ // extends PBEKeyFactory 8580+ // { 8581+ // public PBEWithRIPEMD160() 8582+ // { 8583+ // super("PBEwithHmacRIPEMD160", null, false, PKCS12, RIPEMD160, 160, 0); 8584+ // } 8585+ // } 8586+ // END android-removed 8587 8588 /** 8589 * PBEWithHmacSHA 8590@@ -432,17 +436,19 @@ 8591 } 8592 } 8593 8594- /** 8595- * PBEWithHmacTiger 8596- */ 8597- public static class PBEWithTiger 8598- extends PBEKeyFactory 8599- { 8600- public PBEWithTiger() 8601- { 8602- super("PBEwithHmacTiger", null, false, PKCS12, TIGER, 192, 0); 8603- } 8604- } 8605+ // BEGIN android-removed 8606+ // /** 8607+ // * PBEWithHmacTiger 8608+ // */ 8609+ // public static class PBEWithTiger 8610+ // extends PBEKeyFactory 8611+ // { 8612+ // public PBEWithTiger() 8613+ // { 8614+ // super("PBEwithHmacTiger", null, false, PKCS12, TIGER, 192, 0); 8615+ // } 8616+ // } 8617+ // END android-removed 8618 8619 /** 8620 * PBEWithSHA1And128BitAES-BC 8621@@ -551,4 +557,56 @@ 8622 super("PBEWithMD5And256BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 256, 128); 8623 } 8624 } 8625+ // BEGIN android-added 8626+ static public class PBKDF2WithHmacSHA1 8627+ extends JCESecretKeyFactory 8628+ { 8629+ public PBKDF2WithHmacSHA1() 8630+ { 8631+ super("PBKDF2WithHmacSHA1", PKCSObjectIdentifiers.id_PBKDF2); 8632+ } 8633+ 8634+ protected SecretKey engineGenerateSecret( 8635+ KeySpec keySpec) 8636+ throws InvalidKeySpecException 8637+ { 8638+ if (keySpec instanceof PBEKeySpec) 8639+ { 8640+ PBEKeySpec pbeSpec = (PBEKeySpec)keySpec; 8641+ 8642+ if (pbeSpec.getSalt() == null) 8643+ { 8644+ throw new InvalidKeySpecException("missing required salt"); 8645+ } 8646+ 8647+ if (pbeSpec.getIterationCount() <= 0) 8648+ { 8649+ throw new InvalidKeySpecException("positive iteration count required: " 8650+ + pbeSpec.getIterationCount()); 8651+ } 8652+ 8653+ if (pbeSpec.getKeyLength() <= 0) 8654+ { 8655+ throw new InvalidKeySpecException("positive key length required: " 8656+ + pbeSpec.getKeyLength()); 8657+ } 8658+ 8659+ if (pbeSpec.getPassword().length == 0) 8660+ { 8661+ throw new IllegalArgumentException("password empty"); 8662+ } 8663+ 8664+ int scheme = PKCS5S2; 8665+ int digest = SHA1; 8666+ int keySize = pbeSpec.getKeyLength(); 8667+ int ivSize = -1; 8668+ CipherParameters param = Util.makePBEMacParameters(pbeSpec, scheme, digest, keySize); 8669+ 8670+ return new BCPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, param); 8671+ } 8672+ 8673+ throw new InvalidKeySpecException("Invalid KeySpec"); 8674+ } 8675+ } 8676+ // END android-added 8677 } 8678diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEStreamCipher.java 8679--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java 2012-03-22 15:11:48.000000000 +0000 8680+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JCEStreamCipher.java 2012-09-19 21:17:12.000000000 +0000 8681@@ -14,20 +14,26 @@ 8682 import javax.crypto.ShortBufferException; 8683 import javax.crypto.spec.IvParameterSpec; 8684 import javax.crypto.spec.PBEParameterSpec; 8685-import javax.crypto.spec.RC2ParameterSpec; 8686-import javax.crypto.spec.RC5ParameterSpec; 8687+// BEGIN android-removed 8688+// import javax.crypto.spec.RC2ParameterSpec; 8689+// import javax.crypto.spec.RC5ParameterSpec; 8690+// END android-removed 8691 8692 import org.bouncycastle.crypto.BlockCipher; 8693 import org.bouncycastle.crypto.CipherParameters; 8694 import org.bouncycastle.crypto.DataLengthException; 8695 import org.bouncycastle.crypto.StreamBlockCipher; 8696 import org.bouncycastle.crypto.StreamCipher; 8697-import org.bouncycastle.crypto.engines.BlowfishEngine; 8698-import org.bouncycastle.crypto.engines.DESEngine; 8699-import org.bouncycastle.crypto.engines.DESedeEngine; 8700+// BEGIN android-removed 8701+// import org.bouncycastle.crypto.engines.BlowfishEngine; 8702+// import org.bouncycastle.crypto.engines.DESEngine; 8703+// import org.bouncycastle.crypto.engines.DESedeEngine; 8704+// END android-removed 8705 import org.bouncycastle.crypto.engines.RC4Engine; 8706-import org.bouncycastle.crypto.engines.SkipjackEngine; 8707-import org.bouncycastle.crypto.engines.TwofishEngine; 8708+// BEGIN android-removed 8709+// import org.bouncycastle.crypto.engines.SkipjackEngine; 8710+// import org.bouncycastle.crypto.engines.TwofishEngine; 8711+// END android-removed 8712 import org.bouncycastle.crypto.modes.CFBBlockCipher; 8713 import org.bouncycastle.crypto.modes.OFBBlockCipher; 8714 import org.bouncycastle.crypto.params.KeyParameter; 8715@@ -44,8 +50,10 @@ 8716 // 8717 private Class[] availableSpecs = 8718 { 8719- RC2ParameterSpec.class, 8720- RC5ParameterSpec.class, 8721+ // BEGIN android-removed 8722+ // RC2ParameterSpec.class, 8723+ // RC5ParameterSpec.class, 8724+ // END android-removed 8725 IvParameterSpec.class, 8726 PBEParameterSpec.class 8727 }; 8728@@ -376,125 +384,127 @@ 8729 * The ciphers that inherit from us. 8730 */ 8731 8732- /** 8733- * DES 8734- */ 8735- static public class DES_CFB8 8736- extends JCEStreamCipher 8737- { 8738- public DES_CFB8() 8739- { 8740- super(new CFBBlockCipher(new DESEngine(), 8), 64); 8741- } 8742- } 8743- 8744- /** 8745- * DESede 8746- */ 8747- static public class DESede_CFB8 8748- extends JCEStreamCipher 8749- { 8750- public DESede_CFB8() 8751- { 8752- super(new CFBBlockCipher(new DESedeEngine(), 8), 64); 8753- } 8754- } 8755- 8756- /** 8757- * SKIPJACK 8758- */ 8759- static public class Skipjack_CFB8 8760- extends JCEStreamCipher 8761- { 8762- public Skipjack_CFB8() 8763- { 8764- super(new CFBBlockCipher(new SkipjackEngine(), 8), 64); 8765- } 8766- } 8767- 8768- /** 8769- * Blowfish 8770- */ 8771- static public class Blowfish_CFB8 8772- extends JCEStreamCipher 8773- { 8774- public Blowfish_CFB8() 8775- { 8776- super(new CFBBlockCipher(new BlowfishEngine(), 8), 64); 8777- } 8778- } 8779- 8780- /** 8781- * Twofish 8782- */ 8783- static public class Twofish_CFB8 8784- extends JCEStreamCipher 8785- { 8786- public Twofish_CFB8() 8787- { 8788- super(new CFBBlockCipher(new TwofishEngine(), 8), 128); 8789- } 8790- } 8791- 8792- /** 8793- * DES 8794- */ 8795- static public class DES_OFB8 8796- extends JCEStreamCipher 8797- { 8798- public DES_OFB8() 8799- { 8800- super(new OFBBlockCipher(new DESEngine(), 8), 64); 8801- } 8802- } 8803- 8804- /** 8805- * DESede 8806- */ 8807- static public class DESede_OFB8 8808- extends JCEStreamCipher 8809- { 8810- public DESede_OFB8() 8811- { 8812- super(new OFBBlockCipher(new DESedeEngine(), 8), 64); 8813- } 8814- } 8815- 8816- /** 8817- * SKIPJACK 8818- */ 8819- static public class Skipjack_OFB8 8820- extends JCEStreamCipher 8821- { 8822- public Skipjack_OFB8() 8823- { 8824- super(new OFBBlockCipher(new SkipjackEngine(), 8), 64); 8825- } 8826- } 8827- 8828- /** 8829- * Blowfish 8830- */ 8831- static public class Blowfish_OFB8 8832- extends JCEStreamCipher 8833- { 8834- public Blowfish_OFB8() 8835- { 8836- super(new OFBBlockCipher(new BlowfishEngine(), 8), 64); 8837- } 8838- } 8839- 8840- /** 8841- * Twofish 8842- */ 8843- static public class Twofish_OFB8 8844- extends JCEStreamCipher 8845- { 8846- public Twofish_OFB8() 8847- { 8848- super(new OFBBlockCipher(new TwofishEngine(), 8), 128); 8849- } 8850- } 8851+ // BEGIN android-removed 8852+ // /** 8853+ // * DES 8854+ // */ 8855+ // static public class DES_CFB8 8856+ // extends JCEStreamCipher 8857+ // { 8858+ // public DES_CFB8() 8859+ // { 8860+ // super(new CFBBlockCipher(new DESEngine(), 8), 64); 8861+ // } 8862+ // } 8863+ // 8864+ // /** 8865+ // * DESede 8866+ // */ 8867+ // static public class DESede_CFB8 8868+ // extends JCEStreamCipher 8869+ // { 8870+ // public DESede_CFB8() 8871+ // { 8872+ // super(new CFBBlockCipher(new DESedeEngine(), 8), 64); 8873+ // } 8874+ // } 8875+ // 8876+ // /** 8877+ // * SKIPJACK 8878+ // */ 8879+ // static public class Skipjack_CFB8 8880+ // extends JCEStreamCipher 8881+ // { 8882+ // public Skipjack_CFB8() 8883+ // { 8884+ // super(new CFBBlockCipher(new SkipjackEngine(), 8), 64); 8885+ // } 8886+ // } 8887+ // 8888+ // /** 8889+ // * Blowfish 8890+ // */ 8891+ // static public class Blowfish_CFB8 8892+ // extends JCEStreamCipher 8893+ // { 8894+ // public Blowfish_CFB8() 8895+ // { 8896+ // super(new CFBBlockCipher(new BlowfishEngine(), 8), 64); 8897+ // } 8898+ // } 8899+ // 8900+ // /** 8901+ // * Twofish 8902+ // */ 8903+ // static public class Twofish_CFB8 8904+ // extends JCEStreamCipher 8905+ // { 8906+ // public Twofish_CFB8() 8907+ // { 8908+ // super(new CFBBlockCipher(new TwofishEngine(), 8), 128); 8909+ // } 8910+ // } 8911+ // 8912+ // /** 8913+ // * DES 8914+ // */ 8915+ // static public class DES_OFB8 8916+ // extends JCEStreamCipher 8917+ // { 8918+ // public DES_OFB8() 8919+ // { 8920+ // super(new OFBBlockCipher(new DESEngine(), 8), 64); 8921+ // } 8922+ // } 8923+ // 8924+ // /** 8925+ // * DESede 8926+ // */ 8927+ // static public class DESede_OFB8 8928+ // extends JCEStreamCipher 8929+ // { 8930+ // public DESede_OFB8() 8931+ // { 8932+ // super(new OFBBlockCipher(new DESedeEngine(), 8), 64); 8933+ // } 8934+ // } 8935+ // 8936+ // /** 8937+ // * SKIPJACK 8938+ // */ 8939+ // static public class Skipjack_OFB8 8940+ // extends JCEStreamCipher 8941+ // { 8942+ // public Skipjack_OFB8() 8943+ // { 8944+ // super(new OFBBlockCipher(new SkipjackEngine(), 8), 64); 8945+ // } 8946+ // } 8947+ // 8948+ // /** 8949+ // * Blowfish 8950+ // */ 8951+ // static public class Blowfish_OFB8 8952+ // extends JCEStreamCipher 8953+ // { 8954+ // public Blowfish_OFB8() 8955+ // { 8956+ // super(new OFBBlockCipher(new BlowfishEngine(), 8), 64); 8957+ // } 8958+ // } 8959+ // 8960+ // /** 8961+ // * Twofish 8962+ // */ 8963+ // static public class Twofish_OFB8 8964+ // extends JCEStreamCipher 8965+ // { 8966+ // public Twofish_OFB8() 8967+ // { 8968+ // super(new OFBBlockCipher(new TwofishEngine(), 8), 128); 8969+ // } 8970+ // } 8971+ // END android-removed 8972 8973 /** 8974 * PBEWithSHAAnd128BitRC4 8975diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 8976--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 2012-03-22 15:11:48.000000000 +0000 8977+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java 2012-09-19 21:17:12.000000000 +0000 8978@@ -17,7 +17,9 @@ 8979 import org.bouncycastle.asn1.DERSequence; 8980 import org.bouncycastle.asn1.pkcs.PBKDF2Params; 8981 import org.bouncycastle.asn1.pkcs.PKCS12PBEParams; 8982-import org.bouncycastle.jce.spec.IESParameterSpec; 8983+// BEGIN android-removed 8984+// import org.bouncycastle.jce.spec.IESParameterSpec; 8985+// END android-removed 8986 8987 public abstract class JDKAlgorithmParameters 8988 extends AlgorithmParametersSpi 8989@@ -208,109 +210,111 @@ 8990 } 8991 } 8992 8993- public static class IES 8994- extends JDKAlgorithmParameters 8995- { 8996- IESParameterSpec currentSpec; 8997- 8998- /** 8999- * in the absence of a standard way of doing it this will do for 9000- * now... 9001- */ 9002- protected byte[] engineGetEncoded() 9003- { 9004- try 9005- { 9006- ASN1EncodableVector v = new ASN1EncodableVector(); 9007- 9008- v.add(new DEROctetString(currentSpec.getDerivationV())); 9009- v.add(new DEROctetString(currentSpec.getEncodingV())); 9010- v.add(new DERInteger(currentSpec.getMacKeySize())); 9011- 9012- return new DERSequence(v).getEncoded(ASN1Encoding.DER); 9013- } 9014- catch (IOException e) 9015- { 9016- throw new RuntimeException("Error encoding IESParameters"); 9017- } 9018- } 9019- 9020- protected byte[] engineGetEncoded( 9021- String format) 9022- { 9023- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509")) 9024- { 9025- return engineGetEncoded(); 9026- } 9027- 9028- return null; 9029- } 9030- 9031- protected AlgorithmParameterSpec localEngineGetParameterSpec( 9032- Class paramSpec) 9033- throws InvalidParameterSpecException 9034- { 9035- if (paramSpec == IESParameterSpec.class) 9036- { 9037- return currentSpec; 9038- } 9039- 9040- throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object."); 9041- } 9042- 9043- protected void engineInit( 9044- AlgorithmParameterSpec paramSpec) 9045- throws InvalidParameterSpecException 9046- { 9047- if (!(paramSpec instanceof IESParameterSpec)) 9048- { 9049- throw new InvalidParameterSpecException("IESParameterSpec required to initialise a IES algorithm parameters object"); 9050- } 9051- 9052- this.currentSpec = (IESParameterSpec)paramSpec; 9053- } 9054- 9055- protected void engineInit( 9056- byte[] params) 9057- throws IOException 9058- { 9059- try 9060- { 9061- ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(params); 9062- 9063- this.currentSpec = new IESParameterSpec( 9064- ((ASN1OctetString)s.getObjectAt(0)).getOctets(), 9065- ((ASN1OctetString)s.getObjectAt(0)).getOctets(), 9066- ((DERInteger)s.getObjectAt(0)).getValue().intValue()); 9067- } 9068- catch (ClassCastException e) 9069- { 9070- throw new IOException("Not a valid IES Parameter encoding."); 9071- } 9072- catch (ArrayIndexOutOfBoundsException e) 9073- { 9074- throw new IOException("Not a valid IES Parameter encoding."); 9075- } 9076- } 9077- 9078- protected void engineInit( 9079- byte[] params, 9080- String format) 9081- throws IOException 9082- { 9083- if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509")) 9084- { 9085- engineInit(params); 9086- } 9087- else 9088- { 9089- throw new IOException("Unknown parameter format " + format); 9090- } 9091- } 9092- 9093- protected String engineToString() 9094- { 9095- return "IES Parameters"; 9096- } 9097- } 9098+ // BEGIN android-removed 9099+ // public static class IES 9100+ // extends JDKAlgorithmParameters 9101+ // { 9102+ // IESParameterSpec currentSpec; 9103+ // 9104+ // /** 9105+ // * in the absence of a standard way of doing it this will do for 9106+ // * now... 9107+ // */ 9108+ // protected byte[] engineGetEncoded() 9109+ // { 9110+ // try 9111+ // { 9112+ // ASN1EncodableVector v = new ASN1EncodableVector(); 9113+ // 9114+ // v.add(new DEROctetString(currentSpec.getDerivationV())); 9115+ // v.add(new DEROctetString(currentSpec.getEncodingV())); 9116+ // v.add(new DERInteger(currentSpec.getMacKeySize())); 9117+ // 9118+ // return new DERSequence(v).getEncoded(ASN1Encoding.DER); 9119+ // } 9120+ // catch (IOException e) 9121+ // { 9122+ // throw new RuntimeException("Error encoding IESParameters"); 9123+ // } 9124+ // } 9125+ // 9126+ // protected byte[] engineGetEncoded( 9127+ // String format) 9128+ // { 9129+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509")) 9130+ // { 9131+ // return engineGetEncoded(); 9132+ // } 9133+ // 9134+ // return null; 9135+ // } 9136+ // 9137+ // protected AlgorithmParameterSpec localEngineGetParameterSpec( 9138+ // Class paramSpec) 9139+ // throws InvalidParameterSpecException 9140+ // { 9141+ // if (paramSpec == IESParameterSpec.class) 9142+ // { 9143+ // return currentSpec; 9144+ // } 9145+ // 9146+ // throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object."); 9147+ // } 9148+ // 9149+ // protected void engineInit( 9150+ // AlgorithmParameterSpec paramSpec) 9151+ // throws InvalidParameterSpecException 9152+ // { 9153+ // if (!(paramSpec instanceof IESParameterSpec)) 9154+ // { 9155+ // throw new InvalidParameterSpecException("IESParameterSpec required to initialise a IES algorithm parameters object"); 9156+ // } 9157+ // 9158+ // this.currentSpec = (IESParameterSpec)paramSpec; 9159+ // } 9160+ // 9161+ // protected void engineInit( 9162+ // byte[] params) 9163+ // throws IOException 9164+ // { 9165+ // try 9166+ // { 9167+ // ASN1Sequence s = (ASN1Sequence)ASN1Primitive.fromByteArray(params); 9168+ // 9169+ // this.currentSpec = new IESParameterSpec( 9170+ // ((ASN1OctetString)s.getObjectAt(0)).getOctets(), 9171+ // ((ASN1OctetString)s.getObjectAt(0)).getOctets(), 9172+ // ((DERInteger)s.getObjectAt(0)).getValue().intValue()); 9173+ // } 9174+ // catch (ClassCastException e) 9175+ // { 9176+ // throw new IOException("Not a valid IES Parameter encoding."); 9177+ // } 9178+ // catch (ArrayIndexOutOfBoundsException e) 9179+ // { 9180+ // throw new IOException("Not a valid IES Parameter encoding."); 9181+ // } 9182+ // } 9183+ // 9184+ // protected void engineInit( 9185+ // byte[] params, 9186+ // String format) 9187+ // throws IOException 9188+ // { 9189+ // if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509")) 9190+ // { 9191+ // engineInit(params); 9192+ // } 9193+ // else 9194+ // { 9195+ // throw new IOException("Unknown parameter format " + format); 9196+ // } 9197+ // } 9198+ // 9199+ // protected String engineToString() 9200+ // { 9201+ // return "IES Parameters"; 9202+ // } 9203+ // } 9204+ // END android-removed 9205 } 9206diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKKeyStore.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKKeyStore.java 9207--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKKeyStore.java 2012-03-22 15:11:48.000000000 +0000 9208+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKKeyStore.java 2012-09-19 21:17:12.000000000 +0000 9209@@ -39,7 +39,12 @@ 9210 import org.bouncycastle.crypto.CipherParameters; 9211 import org.bouncycastle.crypto.Digest; 9212 import org.bouncycastle.crypto.PBEParametersGenerator; 9213-import org.bouncycastle.crypto.digests.SHA1Digest; 9214+// BEGIN android-added 9215+import org.bouncycastle.crypto.digests.AndroidDigestFactory; 9216+// END android-added 9217+// BEGIN android-removed 9218+// import org.bouncycastle.crypto.digests.SHA1Digest; 9219+// END android-removed 9220 import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator; 9221 import org.bouncycastle.crypto.io.DigestInputStream; 9222 import org.bouncycastle.crypto.io.DigestOutputStream; 9223@@ -498,7 +503,13 @@ 9224 9225 if (entry == null) 9226 { 9227- throw new KeyStoreException("no such entry as " + alias); 9228+ // BEGIN android-removed 9229+ // Only throw if there is a problem removing, not if missing 9230+ // throw new KeyStoreException("no such entry as " + alias); 9231+ // END android-removed 9232+ // BEGIN android-added 9233+ return; 9234+ // END android-added 9235 } 9236 9237 table.remove(alias); 9238@@ -817,12 +828,16 @@ 9239 // 9240 // we only do an integrity check if the password is provided. 9241 // 9242- HMac hMac = new HMac(new SHA1Digest()); 9243+ // BEGIN android-changed 9244+ HMac hMac = new HMac(AndroidDigestFactory.getSHA1()); 9245+ // END android-changed 9246 if (password != null && password.length != 0) 9247 { 9248 byte[] passKey = PBEParametersGenerator.PKCS12PasswordToBytes(password); 9249 9250- PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new SHA1Digest()); 9251+ // BEGIN android-changed 9252+ PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA1()); 9253+ // END android-changed 9254 pbeGen.init(passKey, salt, iterationCount); 9255 9256 CipherParameters macParams; 9257@@ -884,9 +899,11 @@ 9258 dOut.write(salt); 9259 dOut.writeInt(iterationCount); 9260 9261- HMac hMac = new HMac(new SHA1Digest()); 9262+ // BEGIN android-changed 9263+ HMac hMac = new HMac(AndroidDigestFactory.getSHA1()); 9264 MacOutputStream mOut = new MacOutputStream(hMac); 9265- PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new SHA1Digest()); 9266+ PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA1()); 9267+ // END android-changed 9268 byte[] passKey = PBEParametersGenerator.PKCS12PasswordToBytes(password); 9269 9270 pbeGen.init(passKey, salt, iterationCount); 9271@@ -974,7 +991,9 @@ 9272 Cipher cipher = this.makePBECipher(cipherAlg, Cipher.DECRYPT_MODE, password, salt, iterationCount); 9273 CipherInputStream cIn = new CipherInputStream(dIn, cipher); 9274 9275- Digest dig = new SHA1Digest(); 9276+ // BEGIN android-changed 9277+ Digest dig = AndroidDigestFactory.getSHA1(); 9278+ // END android-changed 9279 DigestInputStream dgIn = new DigestInputStream(cIn, dig); 9280 9281 this.loadStore(dgIn); 9282@@ -1013,7 +1032,9 @@ 9283 cipher = this.makePBECipher(STORE_CIPHER, Cipher.ENCRYPT_MODE, password, salt, iterationCount); 9284 9285 CipherOutputStream cOut = new CipherOutputStream(dOut, cipher); 9286- DigestOutputStream dgOut = new DigestOutputStream(new SHA1Digest()); 9287+ // BEGIN android-changed 9288+ DigestOutputStream dgOut = new DigestOutputStream(AndroidDigestFactory.getSHA1()); 9289+ // END android-changed 9290 9291 this.saveStore(new TeeOutputStream(cOut, dgOut)); 9292 9293diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 9294--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 2012-03-22 15:11:48.000000000 +0000 9295+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java 2012-09-19 21:17:12.000000000 +0000 9296@@ -261,10 +261,13 @@ 9297 } 9298 } 9299 9300- if (c == null && k == null) 9301- { 9302- throw new KeyStoreException("no such entry as " + alias); 9303- } 9304+ // BEGIN android-removed 9305+ // Only throw if there is a problem removing, not if missing 9306+ // if (c == null && k == null) 9307+ // { 9308+ // throw new KeyStoreException("no such entry as " + alias); 9309+ // } 9310+ // END android-removed 9311 } 9312 9313 /** 9314@@ -439,6 +442,14 @@ 9315 9316 public Date engineGetCreationDate(String alias) 9317 { 9318+ // BEGIN android-added 9319+ if (alias == null) { 9320+ throw new NullPointerException("alias == null"); 9321+ } 9322+ if (keys.get(alias) == null && certs.get(alias) == null) { 9323+ return null; 9324+ } 9325+ // END android-added 9326 return new Date(); 9327 } 9328 9329@@ -497,6 +508,11 @@ 9330 Certificate[] chain) 9331 throws KeyStoreException 9332 { 9333+ // BEGIN android-added 9334+ if (!(key instanceof PrivateKey)) { 9335+ throw new KeyStoreException("PKCS12 does not support non-PrivateKeys"); 9336+ } 9337+ // END android-added 9338 if ((key instanceof PrivateKey) && (chain == null)) 9339 { 9340 throw new KeyStoreException("no certificate chain for private key"); 9341@@ -508,12 +524,18 @@ 9342 } 9343 9344 keys.put(alias, key); 9345+ // BEGIN android-added 9346+ if (chain != null) { 9347+ // END android-added 9348 certs.put(alias, chain[0]); 9349 9350 for (int i = 0; i != chain.length; i++) 9351 { 9352 chainCerts.put(new CertId(chain[i].getPublicKey()), chain[i]); 9353 } 9354+ // BEGIN android-added 9355+ } 9356+ // END android-added 9357 } 9358 9359 public int engineSize() 9360@@ -1489,7 +1511,9 @@ 9361 { 9362 byte[] res = calculatePbeMac(id_SHA1, mSalt, itCount, password, false, data); 9363 9364- AlgorithmIdentifier algId = new AlgorithmIdentifier(id_SHA1, new DERNull()); 9365+ // BEGIN android-changed 9366+ AlgorithmIdentifier algId = new AlgorithmIdentifier(id_SHA1, DERNull.INSTANCE); 9367+ // END android-changed 9368 DigestInfo dInfo = new DigestInfo(algId, res); 9369 9370 mData = new MacData(dInfo, mSalt, itCount); 9371@@ -1546,32 +1570,34 @@ 9372 } 9373 } 9374 9375- public static class BCPKCS12KeyStore3DES 9376- extends JDKPKCS12KeyStore 9377- { 9378- public BCPKCS12KeyStore3DES() 9379- { 9380- super(bcProvider, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 9381- } 9382- } 9383- 9384- public static class DefPKCS12KeyStore 9385- extends JDKPKCS12KeyStore 9386- { 9387- public DefPKCS12KeyStore() 9388- { 9389- super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC); 9390- } 9391- } 9392- 9393- public static class DefPKCS12KeyStore3DES 9394- extends JDKPKCS12KeyStore 9395- { 9396- public DefPKCS12KeyStore3DES() 9397- { 9398- super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 9399- } 9400- } 9401+ // BEGIN android-removed 9402+ // public static class BCPKCS12KeyStore3DES 9403+ // extends JDKPKCS12KeyStore 9404+ // { 9405+ // public BCPKCS12KeyStore3DES() 9406+ // { 9407+ // super(bcProvider, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 9408+ // } 9409+ // } 9410+ // 9411+ // public static class DefPKCS12KeyStore 9412+ // extends JDKPKCS12KeyStore 9413+ // { 9414+ // public DefPKCS12KeyStore() 9415+ // { 9416+ // super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC); 9417+ // } 9418+ // } 9419+ // 9420+ // public static class DefPKCS12KeyStore3DES 9421+ // extends JDKPKCS12KeyStore 9422+ // { 9423+ // public DefPKCS12KeyStore3DES() 9424+ // { 9425+ // super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 9426+ // } 9427+ // } 9428+ // END android-removed 9429 9430 private static class IgnoresCaseHashtable 9431 { 9432@@ -1580,7 +1606,9 @@ 9433 9434 public void put(String key, Object value) 9435 { 9436- String lower = Strings.toLowerCase(key); 9437+ // BEGIN android-changed 9438+ String lower = (key == null) ? null : Strings.toLowerCase(key); 9439+ // END android-changed 9440 String k = (String)keys.get(lower); 9441 if (k != null) 9442 { 9443@@ -1598,7 +1626,9 @@ 9444 9445 public Object remove(String alias) 9446 { 9447- String k = (String)keys.remove(Strings.toLowerCase(alias)); 9448+ // BEGIN android-changed 9449+ String k = (String)keys.remove(alias == null ? null : Strings.toLowerCase(alias)); 9450+ // END android-changed 9451 if (k == null) 9452 { 9453 return null; 9454@@ -1609,7 +1639,9 @@ 9455 9456 public Object get(String alias) 9457 { 9458- String k = (String)keys.get(Strings.toLowerCase(alias)); 9459+ // BEGIN android-changed 9460+ String k = (String)keys.get(alias == null ? null : Strings.toLowerCase(alias)); 9461+ // END android-changed 9462 if (k == null) 9463 { 9464 return null; 9465diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 9466--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2012-03-22 15:11:48.000000000 +0000 9467+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2012-09-19 21:17:12.000000000 +0000 9468@@ -1,5 +1,8 @@ 9469 package org.bouncycastle.jce.provider; 9470 9471+// BEGIN android-added 9472+import java.math.BigInteger; 9473+// END android-added 9474 import java.security.InvalidAlgorithmParameterException; 9475 import java.security.PublicKey; 9476 import java.security.cert.CertPath; 9477@@ -33,6 +36,9 @@ 9478 public class PKIXCertPathValidatorSpi 9479 extends CertPathValidatorSpi 9480 { 9481+ // BEGIN android-added 9482+ private final static CertBlacklist blacklist = new CertBlacklist(); 9483+ // END android-added 9484 9485 public CertPathValidatorResult engineValidate( 9486 CertPath certPath, 9487@@ -75,6 +81,22 @@ 9488 { 9489 throw new CertPathValidatorException("Certification path is empty.", null, certPath, 0); 9490 } 9491+ // BEGIN android-added 9492+ { 9493+ X509Certificate cert = (X509Certificate) certs.get(0); 9494+ 9495+ if (cert != null) { 9496+ BigInteger serial = cert.getSerialNumber(); 9497+ if (blacklist.isSerialNumberBlackListed(serial)) { 9498+ // emulate CRL exception message in RFC3280CertPathUtilities.checkCRLs 9499+ String message = "Certificate revocation of serial 0x" + serial.toString(16); 9500+ System.out.println(message); 9501+ AnnotatedException e = new AnnotatedException(message); 9502+ throw new CertPathValidatorException(e.getMessage(), e, certPath, 0); 9503+ } 9504+ } 9505+ } 9506+ // END android-added 9507 9508 // 9509 // (b) 9510@@ -251,6 +273,15 @@ 9511 9512 for (index = certs.size() - 1; index >= 0; index--) 9513 { 9514+ // BEGIN android-added 9515+ if (blacklist.isPublicKeyBlackListed(workingPublicKey)) { 9516+ // emulate CRL exception message in RFC3280CertPathUtilities.checkCRLs 9517+ String message = "Certificate revocation of public key " + workingPublicKey; 9518+ System.out.println(message); 9519+ AnnotatedException e = new AnnotatedException(message); 9520+ throw new CertPathValidatorException(e.getMessage(), e, certPath, index); 9521+ } 9522+ // END android-added 9523 // try 9524 // { 9525 // 9526diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 9527--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 2012-03-22 15:11:48.000000000 +0000 9528+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java 2012-09-19 21:17:12.000000000 +0000 9529@@ -1533,7 +1533,9 @@ 9530 for (Enumeration e = permitted.getObjects(); e.hasMoreElements();) 9531 { 9532 GeneralSubtree subtree = GeneralSubtree.getInstance(e.nextElement()); 9533- Integer tagNo = new Integer(subtree.getBase().getTagNo()); 9534+ // BEGIN android-changed 9535+ Integer tagNo = Integer.valueOf(subtree.getBase().getTagNo()); 9536+ // END android-changed 9537 if (subtreesMap.get(tagNo) == null) 9538 { 9539 subtreesMap.put(tagNo, new HashSet()); 9540diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509CertificateObject.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509CertificateObject.java 9541--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509CertificateObject.java 2012-03-22 15:11:48.000000000 +0000 9542+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509CertificateObject.java 2012-09-19 21:17:12.000000000 +0000 9543@@ -544,12 +544,20 @@ 9544 } 9545 } 9546 9547+ // BEGIN android-changed 9548+ private byte[] encoded; 9549+ // END android-changed 9550 public byte[] getEncoded() 9551 throws CertificateEncodingException 9552 { 9553 try 9554 { 9555- return c.getEncoded(ASN1Encoding.DER); 9556+ // BEGIN android-changed 9557+ if (encoded == null) { 9558+ encoded = c.getEncoded(ASN1Encoding.DER); 9559+ } 9560+ return encoded; 9561+ // END android-changed 9562 } 9563 catch (IOException e) 9564 { 9565diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509SignatureUtil.java 9566--- bcprov-jdk15on-147.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java 2012-03-22 15:11:48.000000000 +0000 9567+++ bcprov-jdk15on-147/org/bouncycastle/jce/provider/X509SignatureUtil.java 2012-09-19 21:17:12.000000000 +0000 9568@@ -14,7 +14,9 @@ 9569 import org.bouncycastle.asn1.ASN1Sequence; 9570 import org.bouncycastle.asn1.DERNull; 9571 import org.bouncycastle.asn1.DERObjectIdentifier; 9572-import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9573+// BEGIN android-removed 9574+// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9575+// END android-removed 9576 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 9577 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 9578 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 9579@@ -25,7 +27,9 @@ 9580 9581 class X509SignatureUtil 9582 { 9583- private static final ASN1Null derNull = new DERNull(); 9584+ // BEGIN android-changed 9585+ private static final ASN1Null derNull = DERNull.INSTANCE; 9586+ // END android-changed 9587 9588 static void setSignatureParameters( 9589 Signature signature, 9590@@ -66,12 +70,14 @@ 9591 9592 if (params != null && !derNull.equals(params)) 9593 { 9594- if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS)) 9595- { 9596- RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params); 9597- 9598- return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1"; 9599- } 9600+ // BEGIN android-removed 9601+ // if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS)) 9602+ // { 9603+ // RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params); 9604+ // 9605+ // return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1"; 9606+ // } 9607+ // END android-removed 9608 if (sigAlgId.getObjectId().equals(X9ObjectIdentifiers.ecdsa_with_SHA2)) 9609 { 9610 ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params); 9611@@ -98,10 +104,12 @@ 9612 { 9613 return "SHA1"; 9614 } 9615- else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID)) 9616- { 9617- return "SHA224"; 9618- } 9619+ // BEGIN android-removed 9620+ // else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID)) 9621+ // { 9622+ // return "SHA224"; 9623+ // } 9624+ // END android-removed 9625 else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID)) 9626 { 9627 return "SHA256"; 9628@@ -114,22 +122,24 @@ 9629 { 9630 return "SHA512"; 9631 } 9632- else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 9633- { 9634- return "RIPEMD128"; 9635- } 9636- else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 9637- { 9638- return "RIPEMD160"; 9639- } 9640- else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 9641- { 9642- return "RIPEMD256"; 9643- } 9644- else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 9645- { 9646- return "GOST3411"; 9647- } 9648+ // BEGIN android-removed 9649+ // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 9650+ // { 9651+ // return "RIPEMD128"; 9652+ // } 9653+ // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 9654+ // { 9655+ // return "RIPEMD160"; 9656+ // } 9657+ // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 9658+ // { 9659+ // return "RIPEMD256"; 9660+ // } 9661+ // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 9662+ // { 9663+ // return "GOST3411"; 9664+ // } 9665+ // END android-removed 9666 else 9667 { 9668 return digestAlgOID.getId(); 9669diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk15on-147/org/bouncycastle/x509/X509Util.java 9670--- bcprov-jdk15on-147.orig/org/bouncycastle/x509/X509Util.java 2012-03-22 15:11:48.000000000 +0000 9671+++ bcprov-jdk15on-147/org/bouncycastle/x509/X509Util.java 2012-09-19 21:17:12.000000000 +0000 9672@@ -25,12 +25,16 @@ 9673 import org.bouncycastle.asn1.ASN1Integer; 9674 import org.bouncycastle.asn1.DERNull; 9675 import org.bouncycastle.asn1.DERObjectIdentifier; 9676-import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9677+// BEGIN android-removed 9678+// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9679+// END android-removed 9680 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 9681 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 9682 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 9683 import org.bouncycastle.asn1.pkcs.RSASSAPSSparams; 9684-import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 9685+// BEGIN android-removed 9686+// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 9687+// END android-removed 9688 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 9689 import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; 9690 import org.bouncycastle.jce.X509Principal; 9691@@ -44,14 +48,18 @@ 9692 9693 static 9694 { 9695- algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption); 9696- algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption); 9697+ // BEGIN android-removed 9698+ // algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption); 9699+ // algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption); 9700+ // END android-removed 9701 algorithms.put("MD5WITHRSAENCRYPTION", PKCSObjectIdentifiers.md5WithRSAEncryption); 9702 algorithms.put("MD5WITHRSA", PKCSObjectIdentifiers.md5WithRSAEncryption); 9703 algorithms.put("SHA1WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha1WithRSAEncryption); 9704 algorithms.put("SHA1WITHRSA", PKCSObjectIdentifiers.sha1WithRSAEncryption); 9705- algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption); 9706- algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption); 9707+ // BEGIN android-removed 9708+ // algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption); 9709+ // algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption); 9710+ // END android-removed 9711 algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption); 9712 algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption); 9713 algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption); 9714@@ -59,45 +67,59 @@ 9715 algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption); 9716 algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption); 9717 algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 9718- algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 9719+ // BEGIN android-removed 9720+ // algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 9721+ // END android-removed 9722 algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 9723 algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 9724 algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 9725- algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 9726- algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 9727- algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 9728- algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 9729- algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 9730- algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 9731+ // BEGIN android-removed 9732+ // algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 9733+ // algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 9734+ // algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 9735+ // algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 9736+ // algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 9737+ // algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 9738+ // END android-removed 9739 algorithms.put("SHA1WITHDSA", X9ObjectIdentifiers.id_dsa_with_sha1); 9740 algorithms.put("DSAWITHSHA1", X9ObjectIdentifiers.id_dsa_with_sha1); 9741- algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 9742+ // BEGIN android-removed 9743+ // algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 9744+ // END android-removed 9745 algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256); 9746 algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384); 9747 algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512); 9748 algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1); 9749 algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1); 9750- algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224); 9751+ // BEGIN android-removed 9752+ // algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224); 9753+ // END android-removed 9754 algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256); 9755 algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384); 9756 algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512); 9757- algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9758- algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9759- algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9760- algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9761- algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9762+ // BEGIN android-removed 9763+ // algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9764+ // algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9765+ // algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9766+ // algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9767+ // algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9768+ // END android-removed 9769 9770 // 9771 // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. 9772 // The parameters field SHALL be NULL for RSA based signature algorithms. 9773 // 9774 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1); 9775- noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224); 9776+ // BEGIN android-removed 9777+ // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224); 9778+ // END android-removed 9779 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256); 9780 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384); 9781 noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512); 9782 noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1); 9783- noParams.add(NISTObjectIdentifiers.dsa_with_sha224); 9784+ // BEGIN android-removed 9785+ // noParams.add(NISTObjectIdentifiers.dsa_with_sha224); 9786+ // END android-removed 9787 noParams.add(NISTObjectIdentifiers.dsa_with_sha256); 9788 noParams.add(NISTObjectIdentifiers.dsa_with_sha384); 9789 noParams.add(NISTObjectIdentifiers.dsa_with_sha512); 9790@@ -105,25 +127,39 @@ 9791 // 9792 // RFC 4491 9793 // 9794- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9795- noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9796+ // BEGIN android-removed 9797+ // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9798+ // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9799+ // END android-removed 9800 9801 // 9802 // explicit params 9803 // 9804- AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull()); 9805+ // BEGIN android-changed 9806+ AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE); 9807+ // END android-changed 9808 params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20)); 9809 9810- AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull()); 9811- params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28)); 9812- 9813- AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull()); 9814+ // BEGIN android-removed 9815+ // // BEGIN android-changed 9816+ // AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, DERNull.INSTANCE); 9817+ // // END android-changed 9818+ // params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28)); 9819+ // END android-removed 9820+ 9821+ // BEGIN android-changed 9822+ AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, DERNull.INSTANCE); 9823+ // END android-changed 9824 params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32)); 9825 9826- AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull()); 9827+ // BEGIN android-changed 9828+ AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, DERNull.INSTANCE); 9829+ // END android-changed 9830 params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48)); 9831 9832- AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull()); 9833+ // BEGIN android-changed 9834+ AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, DERNull.INSTANCE); 9835+ // END android-changed 9836 params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64)); 9837 } 9838 9839@@ -166,7 +202,9 @@ 9840 } 9841 else 9842 { 9843- return new AlgorithmIdentifier(sigOid, new DERNull()); 9844+ // BEGIN android-changed 9845+ return new AlgorithmIdentifier(sigOid, DERNull.INSTANCE); 9846+ // END android-changed 9847 } 9848 } 9849 9850diff -Naur bcprov-jdk15on-147.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java bcprov-jdk15on-147/org/bouncycastle/x509/extension/X509ExtensionUtil.java 9851--- bcprov-jdk15on-147.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java 2012-03-22 15:11:48.000000000 +0000 9852+++ bcprov-jdk15on-147/org/bouncycastle/x509/extension/X509ExtensionUtil.java 2012-09-19 21:17:12.000000000 +0000 9853@@ -62,7 +62,9 @@ 9854 { 9855 GeneralName genName = GeneralName.getInstance(it.nextElement()); 9856 List list = new ArrayList(); 9857- list.add(new Integer(genName.getTagNo())); 9858+ // BEGIN android-changed 9859+ list.add(Integer.valueOf(genName.getTagNo())); 9860+ // END android-changed 9861 switch (genName.getTagNo()) 9862 { 9863 case GeneralName.ediPartyName: 9864