1 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/ASN1Boolean.java bcprov-jdk15on-152/org/bouncycastle/asn1/ASN1Boolean.java 2 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/ASN1Boolean.java 2015-03-01 12:03:02.000000000 +0000 3 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/ASN1Boolean.java 2014-07-28 19:51:54.000000000 +0000 4 @@ -23,7 +23,9 @@ 5 private static final byte[] TRUE_VALUE = new byte[] { (byte)0xff }; 6 private static final byte[] FALSE_VALUE = new byte[] { 0 }; 7 8 - private byte[] value; 9 + // BEGIN android-changed 10 + final private byte[] value; 11 + // END android-changed 12 13 public static final ASN1Boolean FALSE = new ASN1Boolean(false); 14 public static final ASN1Boolean TRUE = new ASN1Boolean(true); 15 @@ -79,6 +81,17 @@ 16 return (value != 0 ? TRUE : FALSE); 17 } 18 19 + // BEGIN android-added 20 + /** 21 + * return a ASN1Boolean from the passed in array. 22 + */ 23 + public static ASN1Boolean getInstance( 24 + byte[] octets) 25 + { 26 + return (octets[0] != 0) ? TRUE : FALSE; 27 + } 28 + 29 + // END android-added 30 /** 31 * return a Boolean from a tagged object. 32 * 33 @@ -105,7 +118,9 @@ 34 } 35 } 36 37 - ASN1Boolean( 38 + // BEGIN android-changed 39 + protected ASN1Boolean( 40 + // END android-changed 41 byte[] value) 42 { 43 if (value.length != 1) 44 @@ -131,8 +146,10 @@ 45 * @deprecated use getInstance(boolean) method. 46 * @param value true or false. 47 */ 48 - public ASN1Boolean( 49 + // BEGIN android-changed 50 + protected ASN1Boolean( 51 boolean value) 52 + // END android-changed 53 { 54 this.value = (value) ? TRUE_VALUE : FALSE_VALUE; 55 } 56 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/ASN1Null.java bcprov-jdk15on-152/org/bouncycastle/asn1/ASN1Null.java 57 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/ASN1Null.java 2015-03-01 12:03:02.000000000 +0000 58 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/ASN1Null.java 2014-07-28 19:51:54.000000000 +0000 59 @@ -8,6 +8,12 @@ 60 public abstract class ASN1Null 61 extends ASN1Primitive 62 { 63 + // BEGIN android-added 64 + /*package*/ ASN1Null() 65 + { 66 + } 67 + 68 + // END android-added 69 /** 70 * Return an instance of ASN.1 NULL from the passed in object. 71 * <p> 72 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/ASN1ObjectIdentifier.java bcprov-jdk15on-152/org/bouncycastle/asn1/ASN1ObjectIdentifier.java 73 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/ASN1ObjectIdentifier.java 2015-03-01 12:03:02.000000000 +0000 74 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/ASN1ObjectIdentifier.java 2014-07-28 19:51:54.000000000 +0000 75 @@ -152,7 +152,13 @@ 76 } 77 } 78 79 - this.identifier = objId.toString(); 80 + // BEGIN android-changed 81 + /* 82 + * Intern the identifier so there aren't hundreds of duplicates 83 + * (in practice). 84 + */ 85 + this.identifier = objId.toString().intern(); 86 + // END android-changed 87 this.body = Arrays.clone(bytes); 88 } 89 90 @@ -173,7 +179,13 @@ 91 throw new IllegalArgumentException("string " + identifier + " not an OID"); 92 } 93 94 - this.identifier = identifier; 95 + // BEGIN android-changed 96 + /* 97 + * Intern the identifier so there aren't hundreds of duplicates 98 + * (in practice). 99 + */ 100 + this.identifier = identifier.intern(); 101 + // END android-changed 102 } 103 104 /** 105 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/DERNull.java bcprov-jdk15on-152/org/bouncycastle/asn1/DERNull.java 106 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/DERNull.java 2015-03-01 12:03:02.000000000 +0000 107 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/DERNull.java 2013-01-31 02:26:40.000000000 +0000 108 @@ -15,7 +15,9 @@ 109 /** 110 * @deprecated use DERNull.INSTANCE 111 */ 112 - public DERNull() 113 + // BEGIN android-changed 114 + protected DERNull() 115 + // END android-changed 116 { 117 } 118 119 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/DERPrintableString.java bcprov-jdk15on-152/org/bouncycastle/asn1/DERPrintableString.java 120 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/DERPrintableString.java 2015-03-01 12:03:02.000000000 +0000 121 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/DERPrintableString.java 2014-07-28 19:51:54.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. 133 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/StreamUtil.java bcprov-jdk15on-152/org/bouncycastle/asn1/StreamUtil.java 134 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/StreamUtil.java 2015-03-01 12:03:02.000000000 +0000 135 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/StreamUtil.java 2014-05-05 17:17:14.000000000 +0000 136 @@ -8,7 +8,9 @@ 137 138 class StreamUtil 139 { 140 - private static final long MAX_MEMORY = Runtime.getRuntime().maxMemory(); 141 + // BEGIN android-removed 142 + // private static final long MAX_MEMORY = Runtime.getRuntime().maxMemory(); 143 + // END android-removed 144 145 /** 146 * Find out possible longest length... 147 @@ -48,12 +50,15 @@ 148 } 149 } 150 151 - if (MAX_MEMORY > Integer.MAX_VALUE) 152 + // BEGIN android-changed 153 + long maxMemory = Runtime.getRuntime().maxMemory(); 154 + if (maxMemory > Integer.MAX_VALUE) 155 { 156 return Integer.MAX_VALUE; 157 } 158 159 - return (int)MAX_MEMORY; 160 + return (int) maxMemory; 161 + // END android-changed 162 } 163 164 static int calculateBodyLength( 165 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/cms/ContentInfo.java bcprov-jdk15on-152/org/bouncycastle/asn1/cms/ContentInfo.java 166 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/cms/ContentInfo.java 2015-03-01 12:03:02.000000000 +0000 167 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/cms/ContentInfo.java 2013-12-12 00:35:05.000000000 +0000 168 @@ -28,7 +28,9 @@ 169 */ 170 public class ContentInfo 171 extends ASN1Object 172 - implements CMSObjectIdentifiers 173 + // BEGIN android-removed 174 + // implements CMSObjectIdentifiers 175 + // END android-removed 176 { 177 private ASN1ObjectIdentifier contentType; 178 private ASN1Encodable content; 179 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java bcprov-jdk15on-152/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 180 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2015-03-01 12:03:02.000000000 +0000 181 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java 2013-12-12 00:35:05.000000000 +0000 182 @@ -13,10 +13,12 @@ 183 static final ASN1ObjectIdentifier pkcs_1 = new ASN1ObjectIdentifier("1.2.840.113549.1.1"); 184 /** PKCS#1: 1.2.840.113549.1.1.1 */ 185 static final ASN1ObjectIdentifier rsaEncryption = pkcs_1.branch("1"); 186 - /** PKCS#1: 1.2.840.113549.1.1.2 */ 187 - static final ASN1ObjectIdentifier md2WithRSAEncryption = pkcs_1.branch("2"); 188 - /** PKCS#1: 1.2.840.113549.1.1.3 */ 189 - static final ASN1ObjectIdentifier md4WithRSAEncryption = pkcs_1.branch("3"); 190 + // BEGIN android-removed 191 + // /** PKCS#1: 1.2.840.113549.1.1.2 */ 192 + // static final ASN1ObjectIdentifier md2WithRSAEncryption = pkcs_1.branch("2"); 193 + // /** PKCS#1: 1.2.840.113549.1.1.3 */ 194 + // static final ASN1ObjectIdentifier md4WithRSAEncryption = pkcs_1.branch("3"); 195 + // END android-removed 196 /** PKCS#1: 1.2.840.113549.1.1.4 */ 197 static final ASN1ObjectIdentifier md5WithRSAEncryption = pkcs_1.branch("4"); 198 /** PKCS#1: 1.2.840.113549.1.1.5 */ 199 @@ -96,15 +98,19 @@ 200 // md2 OBJECT IDENTIFIER ::= 201 // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 2} 202 // 203 - /** 1.2.840.113549.2.2 */ 204 - static final ASN1ObjectIdentifier md2 = digestAlgorithm.branch("2"); 205 + // BEGIN android-removed 206 + // /** 1.2.840.113549.2.2 */ 207 + // static final ASN1ObjectIdentifier md2 = digestAlgorithm.branch("2"); 208 + // END android-removed 209 210 // 211 // md4 OBJECT IDENTIFIER ::= 212 // {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 4} 213 // 214 - /** 1.2.840.113549.2.4 */ 215 - static final ASN1ObjectIdentifier md4 = digestAlgorithm.branch("4"); 216 + // BEGIN android-removed 217 + // /** 1.2.840.113549.2.4 */ 218 + // static final ASN1ObjectIdentifier md4 = digestAlgorithm.branch("4"); 219 + // END android-removed 220 221 // 222 // md5 OBJECT IDENTIFIER ::= 223 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java bcprov-jdk15on-152/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 224 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 2015-03-01 12:03:02.000000000 +0000 225 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/x509/AuthorityKeyIdentifier.java 2014-07-28 19:51:54.000000000 +0000 226 @@ -14,7 +14,9 @@ 227 import org.bouncycastle.asn1.DERSequence; 228 import org.bouncycastle.asn1.DERTaggedObject; 229 import org.bouncycastle.crypto.Digest; 230 -import org.bouncycastle.crypto.digests.SHA1Digest; 231 +// BEGIN android-changed 232 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 233 +// END android-changed 234 235 /** 236 * The AuthorityKeyIdentifier object. 237 @@ -106,7 +108,9 @@ 238 public AuthorityKeyIdentifier( 239 SubjectPublicKeyInfo spki) 240 { 241 - Digest digest = new SHA1Digest(); 242 + // BEGIN android-changed 243 + Digest digest = AndroidDigestFactory.getSHA1(); 244 + // END android-changed 245 byte[] resBuf = new byte[digest.getDigestSize()]; 246 247 byte[] bytes = spki.getPublicKeyData().getBytes(); 248 @@ -125,7 +129,9 @@ 249 GeneralNames name, 250 BigInteger serialNumber) 251 { 252 - Digest digest = new SHA1Digest(); 253 + // BEGIN android-changed 254 + Digest digest = AndroidDigestFactory.getSHA1(); 255 + // END android-changed 256 byte[] resBuf = new byte[digest.getDigestSize()]; 257 258 byte[] bytes = spki.getPublicKeyData().getBytes(); 259 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov-jdk15on-152/org/bouncycastle/asn1/x509/X509Name.java 260 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x509/X509Name.java 2015-03-01 12:03:02.000000000 +0000 261 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/x509/X509Name.java 2013-12-12 00:35:05.000000000 +0000 262 @@ -255,8 +255,10 @@ 263 */ 264 public static final Hashtable SymbolLookUp = DefaultLookUp; 265 266 - private static final Boolean TRUE = new Boolean(true); // for J2ME compatibility 267 - private static final Boolean FALSE = new Boolean(false); 268 + // BEGIN android-changed 269 + private static final Boolean TRUE = Boolean.TRUE; 270 + private static final Boolean FALSE = Boolean.FALSE; 271 + // END android-changed 272 273 static 274 { 275 @@ -446,7 +448,9 @@ 276 throw new IllegalArgumentException("cannot encode value"); 277 } 278 } 279 - added.addElement((i != 0) ? TRUE : FALSE); // to allow earlier JDK compatibility 280 + // BEGIN android-changed 281 + added.addElement(Boolean.valueOf(i != 0)); 282 + // END android-changed 283 } 284 } 285 } 286 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java bcprov-jdk15on-152/org/bouncycastle/asn1/x509/X509NameTokenizer.java 287 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2015-03-01 12:03:02.000000000 +0000 288 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/x509/X509NameTokenizer.java 2013-05-25 02:14:15.000000000 +0000 289 @@ -78,6 +78,17 @@ 290 } 291 else 292 { 293 + // BEGIN android-added 294 + // copied from a newer version of BouncyCastle 295 + if (c == '#' && buf.charAt(buf.length() - 1) == '=') 296 + { 297 + buf.append('\\'); 298 + } 299 + else if (c == '+' && separator != '+') 300 + { 301 + buf.append('\\'); 302 + } 303 + // END android-added 304 buf.append(c); 305 } 306 } 307 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x9/ECNamedCurveTable.java bcprov-jdk15on-152/org/bouncycastle/asn1/x9/ECNamedCurveTable.java 308 --- bcprov-jdk15on-152.orig/org/bouncycastle/asn1/x9/ECNamedCurveTable.java 2015-03-01 12:03:02.000000000 +0000 309 +++ bcprov-jdk15on-152/org/bouncycastle/asn1/x9/ECNamedCurveTable.java 2014-07-28 19:51:54.000000000 +0000 310 @@ -6,7 +6,9 @@ 311 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 312 import org.bouncycastle.asn1.nist.NISTNamedCurves; 313 import org.bouncycastle.asn1.sec.SECNamedCurves; 314 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 315 +// BEGIN android-removed 316 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 317 +// END android-removed 318 319 /** 320 * A general class that reads all X9.62 style EC curve tables. 321 @@ -30,10 +32,12 @@ 322 ecP = SECNamedCurves.getByName(name); 323 } 324 325 - if (ecP == null) 326 - { 327 - ecP = TeleTrusTNamedCurves.getByName(name); 328 - } 329 + // BEGIN android-removed 330 + // if (ecP == null) 331 + // { 332 + // ecP = TeleTrusTNamedCurves.getByName(name); 333 + // } 334 + // END android-removed 335 336 if (ecP == null) 337 { 338 @@ -59,10 +63,12 @@ 339 oid = SECNamedCurves.getOID(name); 340 } 341 342 - if (oid == null) 343 - { 344 - oid = TeleTrusTNamedCurves.getOID(name); 345 - } 346 + // BEGIN android-removed 347 + // if (oid == null) 348 + // { 349 + // oid = TeleTrusTNamedCurves.getOID(name); 350 + // } 351 + // END android-removed 352 353 if (oid == null) 354 { 355 @@ -89,10 +95,12 @@ 356 ecP = SECNamedCurves.getByOID(oid); 357 } 358 359 - if (ecP == null) 360 - { 361 - ecP = TeleTrusTNamedCurves.getByOID(oid); 362 - } 363 + // BEGIN android-removed 364 + // if (ecP == null) 365 + // { 366 + // ecP = TeleTrusTNamedCurves.getByOID(oid); 367 + // } 368 + // END android-removed 369 370 // NOTE: All the NIST curves are currently from SEC, so no point in redundant OID lookup 371 372 @@ -111,7 +119,9 @@ 373 addEnumeration(v, X962NamedCurves.getNames()); 374 addEnumeration(v, SECNamedCurves.getNames()); 375 addEnumeration(v, NISTNamedCurves.getNames()); 376 - addEnumeration(v, TeleTrusTNamedCurves.getNames()); 377 + // BEGIN android-removed 378 + // addEnumeration(v, TeleTrusTNamedCurves.getNames()); 379 + // END android-removed 380 381 return v.elements(); 382 } 383 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java bcprov-jdk15on-152/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java 384 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java 2015-03-01 12:03:02.000000000 +0000 385 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/agreement/ECDHBasicAgreement.java 2015-07-07 18:14:00.000000000 +0000 386 @@ -6,6 +6,9 @@ 387 import org.bouncycastle.crypto.CipherParameters; 388 import org.bouncycastle.crypto.params.ECPrivateKeyParameters; 389 import org.bouncycastle.crypto.params.ECPublicKeyParameters; 390 +// BEGIN android-added 391 +import org.bouncycastle.math.ec.ECCurve; 392 +// END android-added 393 import org.bouncycastle.math.ec.ECPoint; 394 395 /** 396 @@ -41,8 +44,23 @@ 397 public BigInteger calculateAgreement( 398 CipherParameters pubKey) 399 { 400 - ECPublicKeyParameters pub = (ECPublicKeyParameters)pubKey; 401 - ECPoint P = pub.getQ().multiply(key.getD()).normalize(); 402 + // BEGIN android-changed 403 + ECPoint peerPoint = ((ECPublicKeyParameters) pubKey).getQ(); 404 + ECCurve myCurve = key.getParameters().getCurve(); 405 + if (peerPoint.isInfinity()) { 406 + throw new IllegalStateException("Infinity is not a valid public key for ECDH"); 407 + } 408 + try { 409 + myCurve.validatePoint(peerPoint.getXCoord().toBigInteger(), 410 + peerPoint.getYCoord().toBigInteger()); 411 + } catch (IllegalArgumentException ex) { 412 + throw new IllegalStateException("The peer public key must be on the curve for ECDH"); 413 + } 414 + // Explicitly construct a public key using the private key's curve. 415 + ECPoint pubPoint = myCurve.createPoint(peerPoint.getXCoord().toBigInteger(), 416 + peerPoint.getYCoord().toBigInteger()); 417 + ECPoint P = pubPoint.multiply(key.getD()).normalize(); 418 + // END android-changed 419 420 if (P.isInfinity()) 421 { 422 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactory.java bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactory.java 423 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactory.java 1970-01-01 00:00:00.000000000 +0000 424 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactory.java 2013-09-26 18:06:21.000000000 +0000 425 @@ -0,0 +1,87 @@ 426 +/* 427 + * Copyright (C) 2012 The Android Open Source Project 428 + * 429 + * Licensed under the Apache License, Version 2.0 (the "License"); 430 + * you may not use this file except in compliance with the License. 431 + * You may obtain a copy of the License at 432 + * 433 + * http://www.apache.org/licenses/LICENSE-2.0 434 + * 435 + * Unless required by applicable law or agreed to in writing, software 436 + * distributed under the License is distributed on an "AS IS" BASIS, 437 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 438 + * See the License for the specific language governing permissions and 439 + * limitations under the License. 440 + */ 441 + 442 +package org.bouncycastle.crypto.digests; 443 + 444 +import org.bouncycastle.crypto.Digest; 445 + 446 +/** 447 + * Level of indirection to let us select OpenSSLDigest implementations 448 + * for libcore but fallback to BouncyCastle ones on the RI. 449 + */ 450 +public final class AndroidDigestFactory { 451 + private static final String OpenSSLFactoryClassName 452 + = AndroidDigestFactory.class.getName() + "OpenSSL"; 453 + private static final String BouncyCastleFactoryClassName 454 + = AndroidDigestFactory.class.getName() + "BouncyCastle"; 455 + 456 + private static final AndroidDigestFactoryInterface FACTORY; 457 + static { 458 + Class factoryImplementationClass; 459 + try { 460 + factoryImplementationClass = Class.forName(OpenSSLFactoryClassName); 461 + // Double check for NativeCrypto in case we are running on RI for testing 462 + Class.forName("com.android.org.conscrypt.NativeCrypto"); 463 + } catch (ClassNotFoundException e1) { 464 + try { 465 + factoryImplementationClass = Class.forName(BouncyCastleFactoryClassName); 466 + } catch (ClassNotFoundException e2) { 467 + AssertionError e = new AssertionError("Failed to load " 468 + + "AndroidDigestFactoryInterface " 469 + + "implementation. Looked for " 470 + + OpenSSLFactoryClassName + " and " 471 + + BouncyCastleFactoryClassName); 472 + e.initCause(e1); 473 + throw e; 474 + } 475 + } 476 + if (!AndroidDigestFactoryInterface.class.isAssignableFrom(factoryImplementationClass)) { 477 + throw new AssertionError(factoryImplementationClass 478 + + "does not implement AndroidDigestFactoryInterface"); 479 + } 480 + try { 481 + FACTORY = (AndroidDigestFactoryInterface) factoryImplementationClass.newInstance(); 482 + } catch (InstantiationException e) { 483 + throw new AssertionError(e); 484 + } catch (IllegalAccessException e) { 485 + throw new AssertionError(e); 486 + } 487 + } 488 + 489 + public static Digest getMD5() { 490 + return FACTORY.getMD5(); 491 + } 492 + 493 + public static Digest getSHA1() { 494 + return FACTORY.getSHA1(); 495 + } 496 + 497 + public static Digest getSHA224() { 498 + return FACTORY.getSHA224(); 499 + } 500 + 501 + public static Digest getSHA256() { 502 + return FACTORY.getSHA256(); 503 + } 504 + 505 + public static Digest getSHA384() { 506 + return FACTORY.getSHA384(); 507 + } 508 + 509 + public static Digest getSHA512() { 510 + return FACTORY.getSHA512(); 511 + } 512 +} 513 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java 514 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java 1970-01-01 00:00:00.000000000 +0000 515 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactoryBouncyCastle.java 2013-09-26 18:06:21.000000000 +0000 516 @@ -0,0 +1,40 @@ 517 +/* 518 + * Copyright (C) 2012 The Android Open Source Project 519 + * 520 + * Licensed under the Apache License, Version 2.0 (the "License"); 521 + * you may not use this file except in compliance with the License. 522 + * You may obtain a copy of the License at 523 + * 524 + * http://www.apache.org/licenses/LICENSE-2.0 525 + * 526 + * Unless required by applicable law or agreed to in writing, software 527 + * distributed under the License is distributed on an "AS IS" BASIS, 528 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 529 + * See the License for the specific language governing permissions and 530 + * limitations under the License. 531 + */ 532 + 533 +package org.bouncycastle.crypto.digests; 534 + 535 +import org.bouncycastle.crypto.Digest; 536 + 537 +public class AndroidDigestFactoryBouncyCastle implements AndroidDigestFactoryInterface { 538 + public Digest getMD5() { 539 + return new MD5Digest(); 540 + } 541 + public Digest getSHA1() { 542 + return new SHA1Digest(); 543 + } 544 + public Digest getSHA224() { 545 + return new SHA224Digest(); 546 + } 547 + public Digest getSHA256() { 548 + return new SHA256Digest(); 549 + } 550 + public Digest getSHA384() { 551 + return new SHA384Digest(); 552 + } 553 + public Digest getSHA512() { 554 + return new SHA512Digest(); 555 + } 556 +} 557 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java 558 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java 1970-01-01 00:00:00.000000000 +0000 559 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactoryInterface.java 2013-09-26 18:06:21.000000000 +0000 560 @@ -0,0 +1,28 @@ 561 +/* 562 + * Copyright (C) 2012 The Android Open Source Project 563 + * 564 + * Licensed under the Apache License, Version 2.0 (the "License"); 565 + * you may not use this file except in compliance with the License. 566 + * You may obtain a copy of the License at 567 + * 568 + * http://www.apache.org/licenses/LICENSE-2.0 569 + * 570 + * Unless required by applicable law or agreed to in writing, software 571 + * distributed under the License is distributed on an "AS IS" BASIS, 572 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 573 + * See the License for the specific language governing permissions and 574 + * limitations under the License. 575 + */ 576 + 577 +package org.bouncycastle.crypto.digests; 578 + 579 +import org.bouncycastle.crypto.Digest; 580 + 581 +interface AndroidDigestFactoryInterface { 582 + public Digest getMD5(); 583 + public Digest getSHA1(); 584 + public Digest getSHA224(); 585 + public Digest getSHA256(); 586 + public Digest getSHA384(); 587 + public Digest getSHA512(); 588 +} 589 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java 590 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java 1970-01-01 00:00:00.000000000 +0000 591 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/digests/AndroidDigestFactoryOpenSSL.java 2013-09-26 18:06:21.000000000 +0000 592 @@ -0,0 +1,40 @@ 593 +/* 594 + * Copyright (C) 2012 The Android Open Source Project 595 + * 596 + * Licensed under the Apache License, Version 2.0 (the "License"); 597 + * you may not use this file except in compliance with the License. 598 + * You may obtain a copy of the License at 599 + * 600 + * http://www.apache.org/licenses/LICENSE-2.0 601 + * 602 + * Unless required by applicable law or agreed to in writing, software 603 + * distributed under the License is distributed on an "AS IS" BASIS, 604 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 605 + * See the License for the specific language governing permissions and 606 + * limitations under the License. 607 + */ 608 + 609 +package org.bouncycastle.crypto.digests; 610 + 611 +import org.bouncycastle.crypto.Digest; 612 + 613 +public class AndroidDigestFactoryOpenSSL implements AndroidDigestFactoryInterface { 614 + public Digest getMD5() { 615 + return new OpenSSLDigest.MD5(); 616 + } 617 + public Digest getSHA1() { 618 + return new OpenSSLDigest.SHA1(); 619 + } 620 + public Digest getSHA224() { 621 + return new OpenSSLDigest.SHA224(); 622 + } 623 + public Digest getSHA256() { 624 + return new OpenSSLDigest.SHA256(); 625 + } 626 + public Digest getSHA384() { 627 + return new OpenSSLDigest.SHA384(); 628 + } 629 + public Digest getSHA512() { 630 + return new OpenSSLDigest.SHA512(); 631 + } 632 +} 633 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java bcprov-jdk15on-152/org/bouncycastle/crypto/digests/OpenSSLDigest.java 634 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java 1970-01-01 00:00:00.000000000 +0000 635 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/digests/OpenSSLDigest.java 2014-02-27 18:09:19.000000000 +0000 636 @@ -0,0 +1,97 @@ 637 +/* 638 + * Copyright (C) 2008 The Android Open Source Project 639 + * 640 + * Licensed under the Apache License, Version 2.0 (the "License"); 641 + * you may not use this file except in compliance with the License. 642 + * You may obtain a copy of the License at 643 + * 644 + * http://www.apache.org/licenses/LICENSE-2.0 645 + * 646 + * Unless required by applicable law or agreed to in writing, software 647 + * distributed under the License is distributed on an "AS IS" BASIS, 648 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 649 + * See the License for the specific language governing permissions and 650 + * limitations under the License. 651 + */ 652 + 653 +package org.bouncycastle.crypto.digests; 654 + 655 +import org.bouncycastle.crypto.ExtendedDigest; 656 +import org.bouncycastle.jcajce.provider.keystore.bc.BcKeyStoreSpi; 657 +import java.security.DigestException; 658 +import java.security.MessageDigest; 659 + 660 +/** 661 + * Implements the BouncyCastle Digest interface using OpenSSL's EVP API. This 662 + * must be an ExtendedDigest for {@link BcKeyStoreSpi} to be able to use it. 663 + */ 664 +public class OpenSSLDigest implements ExtendedDigest { 665 + private final MessageDigest delegate; 666 + 667 + private final int byteSize; 668 + 669 + public OpenSSLDigest(String algorithm, int byteSize) { 670 + try { 671 + delegate = MessageDigest.getInstance(algorithm, "AndroidOpenSSL"); 672 + this.byteSize = byteSize; 673 + } catch (Exception e) { 674 + throw new RuntimeException(e); 675 + } 676 + } 677 + 678 + public String getAlgorithmName() { 679 + return delegate.getAlgorithm(); 680 + } 681 + 682 + public int getDigestSize() { 683 + return delegate.getDigestLength(); 684 + } 685 + 686 + public int getByteLength() { 687 + return byteSize; 688 + } 689 + 690 + public void reset() { 691 + delegate.reset(); 692 + } 693 + 694 + public void update(byte in) { 695 + delegate.update(in); 696 + } 697 + 698 + public void update(byte[] in, int inOff, int len) { 699 + delegate.update(in, inOff, len); 700 + } 701 + 702 + public int doFinal(byte[] out, int outOff) { 703 + try { 704 + return delegate.digest(out, outOff, out.length - outOff); 705 + } catch (DigestException e) { 706 + throw new RuntimeException(e); 707 + } 708 + } 709 + 710 + public static class MD5 extends OpenSSLDigest { 711 + public MD5() { super("MD5", 64); } 712 + } 713 + 714 + public static class SHA1 extends OpenSSLDigest { 715 + public SHA1() { super("SHA-1", 64); } 716 + } 717 + 718 + public static class SHA224 extends OpenSSLDigest { 719 + public SHA224() { super("SHA-224", 64); } 720 + } 721 + 722 + public static class SHA256 extends OpenSSLDigest { 723 + public SHA256() { super("SHA-256", 64); } 724 + } 725 + 726 + public static class SHA384 extends OpenSSLDigest { 727 + public SHA384() { super("SHA-384", 128); } 728 + } 729 + 730 + public static class SHA512 extends OpenSSLDigest { 731 + public SHA512() { super("SHA-512", 128); } 732 + } 733 +} 734 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/ec/CustomNamedCurves.java bcprov-jdk15on-152/org/bouncycastle/crypto/ec/CustomNamedCurves.java 735 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/ec/CustomNamedCurves.java 2015-03-01 12:03:02.000000000 +0000 736 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/ec/CustomNamedCurves.java 2014-07-28 19:51:54.000000000 +0000 737 @@ -10,7 +10,9 @@ 738 import org.bouncycastle.asn1.x9.X9ECParametersHolder; 739 import org.bouncycastle.math.ec.ECCurve; 740 import org.bouncycastle.math.ec.ECPoint; 741 -import org.bouncycastle.math.ec.custom.djb.Curve25519; 742 +// BEGIN android-removed 743 +// import org.bouncycastle.math.ec.custom.djb.Curve25519; 744 +// END android-removed 745 import org.bouncycastle.math.ec.custom.sec.SecP192K1Curve; 746 import org.bouncycastle.math.ec.custom.sec.SecP192R1Curve; 747 import org.bouncycastle.math.ec.custom.sec.SecP224K1Curve; 748 @@ -36,32 +38,34 @@ 749 return c.configure().setEndomorphism(new GLVTypeBEndomorphism(c, p)).create(); 750 } 751 752 - /* 753 - * curve25519 754 - */ 755 - static X9ECParametersHolder curve25519 = new X9ECParametersHolder() 756 - { 757 - protected X9ECParameters createParameters() 758 - { 759 - byte[] S = null; 760 - ECCurve curve = configureCurve(new Curve25519()); 761 - 762 - /* 763 - * NOTE: Curve25519 was specified in Montgomery form. Rewriting in Weierstrass form 764 - * involves substitution of variables, so the base-point x coordinate is 9 + (486662 / 3). 765 - * 766 - * The Curve25519 paper doesn't say which of the two possible y values the base 767 - * point has. The choice here is guided by language in the Ed25519 paper. 768 - * 769 - * (The other possible y value is 5F51E65E475F794B1FE122D388B72EB36DC2B28192839E4DD6163A5D81312C14) 770 - */ 771 - ECPoint G = curve.decodePoint(Hex.decode("04" 772 - + "2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD245A" 773 - + "20AE19A1B8A086B4E01EDD2C7748D14C923D4D7E6D7C61B229E9C5A27ECED3D9")); 774 - 775 - return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 776 - } 777 - }; 778 + // BEGIN android-removed 779 + // /* 780 + // * curve25519 781 + // */ 782 + // static X9ECParametersHolder curve25519 = new X9ECParametersHolder() 783 + // { 784 + // protected X9ECParameters createParameters() 785 + // { 786 + // byte[] S = null; 787 + // ECCurve curve = configureCurve(new Curve25519()); 788 + // 789 + // /* 790 + // * NOTE: Curve25519 was specified in Montgomery form. Rewriting in Weierstrass form 791 + // * involves substitution of variables, so the base-point x coordinate is 9 + (486662 / 3). 792 + // * 793 + // * The Curve25519 paper doesn't say which of the two possible y values the base 794 + // * point has. The choice here is guided by language in the Ed25519 paper. 795 + // * 796 + // * (The other possible y value is 5F51E65E475F794B1FE122D388B72EB36DC2B28192839E4DD6163A5D81312C14) 797 + // */ 798 + // ECPoint G = curve.decodePoint(Hex.decode("04" 799 + // + "2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD245A" 800 + // + "20AE19A1B8A086B4E01EDD2C7748D14C923D4D7E6D7C61B229E9C5A27ECED3D9")); 801 + // 802 + // return new X9ECParameters(curve, G, curve.getOrder(), curve.getCofactor(), S); 803 + // } 804 + // }; 805 + // END android-removed 806 807 /* 808 * secp192k1 809 @@ -254,7 +258,9 @@ 810 811 static 812 { 813 - defineCurve("curve25519", curve25519); 814 + // BEGIN android-removed 815 + // defineCurve("curve25519", curve25519); 816 + // END android-removed 817 818 defineCurveWithOID("secp192k1", SECObjectIdentifiers.secp192k1, secp192k1); 819 defineCurveWithOID("secp192r1", SECObjectIdentifiers.secp192r1, secp192r1); 820 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/encodings/OAEPEncoding.java bcprov-jdk15on-152/org/bouncycastle/crypto/encodings/OAEPEncoding.java 821 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/encodings/OAEPEncoding.java 2015-03-01 12:03:02.000000000 +0000 822 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/encodings/OAEPEncoding.java 2013-05-25 02:14:15.000000000 +0000 823 @@ -6,7 +6,9 @@ 824 import org.bouncycastle.crypto.CipherParameters; 825 import org.bouncycastle.crypto.Digest; 826 import org.bouncycastle.crypto.InvalidCipherTextException; 827 -import org.bouncycastle.crypto.digests.SHA1Digest; 828 +// BEGIN android-changed 829 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 830 +// END android-changed 831 import org.bouncycastle.crypto.params.ParametersWithRandom; 832 833 /** 834 @@ -25,7 +27,9 @@ 835 public OAEPEncoding( 836 AsymmetricBlockCipher cipher) 837 { 838 - this(cipher, new SHA1Digest(), null); 839 + // BEGIN android-changed 840 + this(cipher, AndroidDigestFactory.getSHA1(), null); 841 + // END android-changed 842 } 843 844 public OAEPEncoding( 845 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/encodings/PKCS1Encoding.java bcprov-jdk15on-152/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 846 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 2015-03-01 12:03:02.000000000 +0000 847 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/encodings/PKCS1Encoding.java 2015-04-09 13:10:16.000000000 +0000 848 @@ -378,6 +378,12 @@ 849 throw new InvalidCipherTextException("unknown block type"); 850 } 851 } 852 + // BEGIN android-added 853 + if ((type == 1 && forPrivateKey) || (type == 2 && !forPrivateKey)) 854 + { 855 + throw new InvalidCipherTextException("invalid block type " + type); 856 + } 857 + // END android-added 858 859 if (useStrictLength && block.length != engine.getOutputBlockSize()) 860 { 861 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/engines/DESedeWrapEngine.java bcprov-jdk15on-152/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 862 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 2015-03-01 12:03:02.000000000 +0000 863 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/engines/DESedeWrapEngine.java 2014-07-28 19:51:54.000000000 +0000 864 @@ -6,7 +6,9 @@ 865 import org.bouncycastle.crypto.Digest; 866 import org.bouncycastle.crypto.InvalidCipherTextException; 867 import org.bouncycastle.crypto.Wrapper; 868 -import org.bouncycastle.crypto.digests.SHA1Digest; 869 +// BEGIN android-changed 870 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 871 +// END android-changed 872 import org.bouncycastle.crypto.modes.CBCBlockCipher; 873 import org.bouncycastle.crypto.params.KeyParameter; 874 import org.bouncycastle.crypto.params.ParametersWithIV; 875 @@ -52,7 +54,9 @@ 876 // 877 // checksum digest 878 // 879 - Digest sha1 = new SHA1Digest(); 880 + // BEGIN android-changed 881 + Digest sha1 = AndroidDigestFactory.getSHA1(); 882 + // END android-changed 883 byte[] digest = new byte[20]; 884 885 /** 886 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java bcprov-jdk15on-152/org/bouncycastle/crypto/generators/DHParametersHelper.java 887 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java 2015-03-01 12:03:02.000000000 +0000 888 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/generators/DHParametersHelper.java 2014-07-28 19:51:54.000000000 +0000 889 @@ -3,11 +3,18 @@ 890 import java.math.BigInteger; 891 import java.security.SecureRandom; 892 893 +// BEGIN android-added 894 +import java.util.logging.Logger; 895 +// END android-added 896 import org.bouncycastle.math.ec.WNafUtil; 897 import org.bouncycastle.util.BigIntegers; 898 899 class DHParametersHelper 900 { 901 + // BEGIN android-added 902 + private static final Logger logger = Logger.getLogger(DHParametersHelper.class.getName()); 903 + // END android-added 904 + 905 private static final BigInteger ONE = BigInteger.valueOf(1); 906 private static final BigInteger TWO = BigInteger.valueOf(2); 907 908 @@ -18,12 +25,20 @@ 909 */ 910 static BigInteger[] generateSafePrimes(int size, int certainty, SecureRandom random) 911 { 912 + // BEGIN android-added 913 + logger.info("Generating safe primes. This may take a long time."); 914 + long start = System.currentTimeMillis(); 915 + int tries = 0; 916 + // END android-added 917 BigInteger p, q; 918 int qLength = size - 1; 919 int minWeight = size >>> 2; 920 921 for (;;) 922 { 923 + // BEGIN android-added 924 + tries++; 925 + // END android-added 926 q = new BigInteger(qLength, 2, random); 927 928 // p <- 2q + 1 929 @@ -52,6 +67,11 @@ 930 931 break; 932 } 933 + // BEGIN android-added 934 + long end = System.currentTimeMillis(); 935 + long duration = end - start; 936 + logger.info("Generated safe primes: " + tries + " tries took " + duration + "ms"); 937 + // END android-added 938 939 return new BigInteger[] { p, q }; 940 } 941 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/DSAParametersGenerator.java bcprov-jdk15on-152/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 942 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 2015-03-01 12:03:02.000000000 +0000 943 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/generators/DSAParametersGenerator.java 2014-07-28 19:51:54.000000000 +0000 944 @@ -4,7 +4,9 @@ 945 import java.security.SecureRandom; 946 947 import org.bouncycastle.crypto.Digest; 948 -import org.bouncycastle.crypto.digests.SHA1Digest; 949 +// BEGIN android-changed 950 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 951 +// END android-changed 952 import org.bouncycastle.crypto.params.DSAParameterGenerationParameters; 953 import org.bouncycastle.crypto.params.DSAParameters; 954 import org.bouncycastle.crypto.params.DSAValidationParameters; 955 @@ -31,7 +33,9 @@ 956 957 public DSAParametersGenerator() 958 { 959 - this(new SHA1Digest()); 960 + // BEGIN android-changed 961 + this(AndroidDigestFactory.getSHA1()); 962 + // END android-changed 963 } 964 965 public DSAParametersGenerator(Digest digest) 966 @@ -122,7 +126,9 @@ 967 int n = (L - 1) / 160; 968 byte[] w = new byte[L / 8]; 969 970 - if (!(digest instanceof SHA1Digest)) 971 + // BEGIN android-changed 972 + if (!(digest.getAlgorithmName().equals("SHA-1"))) 973 + // END android-changed 974 { 975 throw new IllegalStateException("can only use SHA-1 for generating FIPS 186-2 parameters"); 976 } 977 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java bcprov-jdk15on-152/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 978 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 2015-03-01 12:03:02.000000000 +0000 979 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java 2012-09-17 23:04:47.000000000 +0000 980 @@ -3,7 +3,9 @@ 981 import org.bouncycastle.crypto.CipherParameters; 982 import org.bouncycastle.crypto.Digest; 983 import org.bouncycastle.crypto.PBEParametersGenerator; 984 -import org.bouncycastle.crypto.digests.MD5Digest; 985 +// BEGIN android-changed 986 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 987 +// END android-changed 988 import org.bouncycastle.crypto.params.KeyParameter; 989 import org.bouncycastle.crypto.params.ParametersWithIV; 990 991 @@ -17,7 +19,9 @@ 992 public class OpenSSLPBEParametersGenerator 993 extends PBEParametersGenerator 994 { 995 - private Digest digest = new MD5Digest(); 996 + // BEGIN android-changed 997 + private Digest digest = AndroidDigestFactory.getMD5(); 998 + // END android-changed 999 1000 /** 1001 * Construct a OpenSSL Parameters generator. 1002 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java bcprov-jdk15on-152/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 1003 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 2015-03-01 12:03:02.000000000 +0000 1004 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator.java 2013-12-12 00:35:05.000000000 +0000 1005 @@ -4,7 +4,9 @@ 1006 import org.bouncycastle.crypto.Digest; 1007 import org.bouncycastle.crypto.Mac; 1008 import org.bouncycastle.crypto.PBEParametersGenerator; 1009 -import org.bouncycastle.crypto.digests.SHA1Digest; 1010 +// BEGIN android-changed 1011 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 1012 +// END android-changed 1013 import org.bouncycastle.crypto.macs.HMac; 1014 import org.bouncycastle.crypto.params.KeyParameter; 1015 import org.bouncycastle.crypto.params.ParametersWithIV; 1016 @@ -28,7 +30,9 @@ 1017 */ 1018 public PKCS5S2ParametersGenerator() 1019 { 1020 - this(new SHA1Digest()); 1021 + // BEGIN android-changed 1022 + this(AndroidDigestFactory.getSHA1()); 1023 + // END android-changed 1024 } 1025 1026 public PKCS5S2ParametersGenerator(Digest digest) 1027 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/macs/HMac.java bcprov-jdk15on-152/org/bouncycastle/crypto/macs/HMac.java 1028 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/macs/HMac.java 2015-03-01 12:03:02.000000000 +0000 1029 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/macs/HMac.java 2013-09-26 18:06:21.000000000 +0000 1030 @@ -36,14 +36,18 @@ 1031 { 1032 blockLengths = new Hashtable(); 1033 1034 - blockLengths.put("GOST3411", Integers.valueOf(32)); 1035 - 1036 - blockLengths.put("MD2", Integers.valueOf(16)); 1037 - blockLengths.put("MD4", Integers.valueOf(64)); 1038 + // BEGIN android-removed 1039 + // blockLengths.put("GOST3411", Integers.valueOf(32)); 1040 + // 1041 + // blockLengths.put("MD2", Integers.valueOf(16)); 1042 + // blockLengths.put("MD4", Integers.valueOf(64)); 1043 + // END android-removed 1044 blockLengths.put("MD5", Integers.valueOf(64)); 1045 1046 - blockLengths.put("RIPEMD128", Integers.valueOf(64)); 1047 - blockLengths.put("RIPEMD160", Integers.valueOf(64)); 1048 + // BEGIN android-removed 1049 + // blockLengths.put("RIPEMD128", Integers.valueOf(64)); 1050 + // blockLengths.put("RIPEMD160", Integers.valueOf(64)); 1051 + // END android-removed 1052 1053 blockLengths.put("SHA-1", Integers.valueOf(64)); 1054 blockLengths.put("SHA-224", Integers.valueOf(64)); 1055 @@ -51,8 +55,10 @@ 1056 blockLengths.put("SHA-384", Integers.valueOf(128)); 1057 blockLengths.put("SHA-512", Integers.valueOf(128)); 1058 1059 - blockLengths.put("Tiger", Integers.valueOf(64)); 1060 - blockLengths.put("Whirlpool", Integers.valueOf(64)); 1061 + // BEGIN android-removed 1062 + // blockLengths.put("Tiger", Integers.valueOf(64)); 1063 + // blockLengths.put("Whirlpool", Integers.valueOf(64)); 1064 + // END android-removed 1065 } 1066 1067 private static int getByteLength( 1068 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/modes/GCMBlockCipher.java bcprov-jdk15on-152/org/bouncycastle/crypto/modes/GCMBlockCipher.java 1069 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/modes/GCMBlockCipher.java 2015-03-01 12:03:02.000000000 +0000 1070 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/modes/GCMBlockCipher.java 2015-11-12 22:10:47.000000000 +0000 1071 @@ -24,6 +24,11 @@ 1072 implements AEADBlockCipher 1073 { 1074 private static final int BLOCK_SIZE = 16; 1075 + // BEGIN android-added 1076 + // 2^36-32 : limitation imposed by NIST GCM as otherwise the counter is wrapped and it can leak 1077 + // plaintext and authentication key 1078 + private static final long MAX_INPUT_SIZE = 68719476704L; 1079 + // END android-added 1080 1081 // not final due to a compiler bug 1082 private BlockCipher cipher; 1083 @@ -202,6 +207,14 @@ 1084 return totalData < macSize ? 0 : totalData - macSize; 1085 } 1086 1087 + // BEGIN android-added 1088 + /** Helper used to ensure that {@link #MAX_INPUT_SIZE} is not exceeded. */ 1089 + private long getTotalInputSizeAfterNewInput(int newInputLen) 1090 + { 1091 + return totalLength + newInputLen + bufOff; 1092 + } 1093 + // END android-added 1094 + 1095 public int getUpdateOutputSize(int len) 1096 { 1097 int totalData = len + bufOff; 1098 @@ -218,6 +231,11 @@ 1099 1100 public void processAADByte(byte in) 1101 { 1102 + // BEGIN android-added 1103 + if (getTotalInputSizeAfterNewInput(1) > MAX_INPUT_SIZE) { 1104 + throw new DataLengthException("Input exceeded " + MAX_INPUT_SIZE + " bytes"); 1105 + } 1106 + // END android-added 1107 atBlock[atBlockPos] = in; 1108 if (++atBlockPos == BLOCK_SIZE) 1109 { 1110 @@ -230,6 +248,11 @@ 1111 1112 public void processAADBytes(byte[] in, int inOff, int len) 1113 { 1114 + // BEGIN android-added 1115 + if (getTotalInputSizeAfterNewInput(len) > MAX_INPUT_SIZE) { 1116 + throw new DataLengthException("Input exceeded " + MAX_INPUT_SIZE + " bytes"); 1117 + } 1118 + // END android-added 1119 for (int i = 0; i < len; ++i) 1120 { 1121 atBlock[atBlockPos] = in[inOff + i]; 1122 @@ -267,6 +290,11 @@ 1123 public int processByte(byte in, byte[] out, int outOff) 1124 throws DataLengthException 1125 { 1126 + // BEGIN android-added 1127 + if (getTotalInputSizeAfterNewInput(1) > MAX_INPUT_SIZE) { 1128 + throw new DataLengthException("Input exceeded " + MAX_INPUT_SIZE + " bytes"); 1129 + } 1130 + // END android-added 1131 bufBlock[bufOff] = in; 1132 if (++bufOff == bufBlock.length) 1133 { 1134 @@ -279,6 +307,11 @@ 1135 public int processBytes(byte[] in, int inOff, int len, byte[] out, int outOff) 1136 throws DataLengthException 1137 { 1138 + // BEGIN android-added 1139 + if (getTotalInputSizeAfterNewInput(len) > MAX_INPUT_SIZE) { 1140 + throw new DataLengthException("Input exceeded " + MAX_INPUT_SIZE + " bytes"); 1141 + } 1142 + // END android-added 1143 if (in.length < (inOff + len)) 1144 { 1145 throw new DataLengthException("Input buffer too short"); 1146 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java bcprov-jdk15on-152/org/bouncycastle/crypto/signers/RSADigestSigner.java 1147 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java 2015-03-01 12:03:02.000000000 +0000 1148 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/signers/RSADigestSigner.java 2015-04-09 13:10:16.000000000 +0000 1149 @@ -39,9 +39,11 @@ 1150 */ 1151 static 1152 { 1153 - oidMap.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128); 1154 - oidMap.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160); 1155 - oidMap.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256); 1156 + // BEGIN android-removed 1157 + // oidMap.put("RIPEMD128", TeleTrusTObjectIdentifiers.ripemd128); 1158 + // oidMap.put("RIPEMD160", TeleTrusTObjectIdentifiers.ripemd160); 1159 + // oidMap.put("RIPEMD256", TeleTrusTObjectIdentifiers.ripemd256); 1160 + // END android-removed 1161 1162 oidMap.put("SHA-1", X509ObjectIdentifiers.id_SHA1); 1163 oidMap.put("SHA-224", NISTObjectIdentifiers.id_sha224); 1164 @@ -51,8 +53,10 @@ 1165 oidMap.put("SHA-512/224", NISTObjectIdentifiers.id_sha512_224); 1166 oidMap.put("SHA-512/256", NISTObjectIdentifiers.id_sha512_256); 1167 1168 - oidMap.put("MD2", PKCSObjectIdentifiers.md2); 1169 - oidMap.put("MD4", PKCSObjectIdentifiers.md4); 1170 + // BEGIN android-removed 1171 + // oidMap.put("MD2", PKCSObjectIdentifiers.md2); 1172 + // oidMap.put("MD4", PKCSObjectIdentifiers.md4); 1173 + // END android-removed 1174 oidMap.put("MD5", PKCSObjectIdentifiers.md5); 1175 } 1176 1177 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java bcprov-jdk15on-152/org/bouncycastle/crypto/util/PrivateKeyFactory.java 1178 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2015-03-01 12:03:02.000000000 +0000 1179 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/util/PrivateKeyFactory.java 2014-07-28 19:51:54.000000000 +0000 1180 @@ -9,7 +9,9 @@ 1181 import org.bouncycastle.asn1.ASN1Integer; 1182 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 1183 import org.bouncycastle.asn1.ASN1Primitive; 1184 -import org.bouncycastle.asn1.oiw.ElGamalParameter; 1185 +// BEGIN android-removed 1186 +// import org.bouncycastle.asn1.oiw.ElGamalParameter; 1187 +// END android-removed 1188 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1189 import org.bouncycastle.asn1.pkcs.DHParameter; 1190 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1191 @@ -31,8 +33,10 @@ 1192 import org.bouncycastle.crypto.params.ECDomainParameters; 1193 import org.bouncycastle.crypto.params.ECNamedDomainParameters; 1194 import org.bouncycastle.crypto.params.ECPrivateKeyParameters; 1195 -import org.bouncycastle.crypto.params.ElGamalParameters; 1196 -import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; 1197 +// BEGIN android-removed 1198 +// import org.bouncycastle.crypto.params.ElGamalParameters; 1199 +// import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters; 1200 +// END android-removed 1201 import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; 1202 1203 /** 1204 @@ -98,14 +102,16 @@ 1205 1206 return new DHPrivateKeyParameters(derX.getValue(), dhParams); 1207 } 1208 - else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1209 - { 1210 - ElGamalParameter params = ElGamalParameter.getInstance(algId.getParameters()); 1211 - ASN1Integer derX = (ASN1Integer)keyInfo.parsePrivateKey(); 1212 - 1213 - return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters( 1214 - params.getP(), params.getG())); 1215 - } 1216 + // BEGIN android-removed 1217 + // else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1218 + // { 1219 + // ElGamalParameter params = ElGamalParameter.getInstance(algId.getParameters()); 1220 + // ASN1Integer derX = (ASN1Integer)keyInfo.parsePrivateKey(); 1221 + // 1222 + // return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters( 1223 + // params.getP(), params.getG())); 1224 + // } 1225 + // END android-removed 1226 else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa)) 1227 { 1228 ASN1Integer derX = (ASN1Integer)keyInfo.parsePrivateKey(); 1229 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java bcprov-jdk15on-152/org/bouncycastle/crypto/util/PublicKeyFactory.java 1230 --- bcprov-jdk15on-152.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java 2015-03-01 12:03:02.000000000 +0000 1231 +++ bcprov-jdk15on-152/org/bouncycastle/crypto/util/PublicKeyFactory.java 2014-07-28 19:51:54.000000000 +0000 1232 @@ -11,7 +11,9 @@ 1233 import org.bouncycastle.asn1.ASN1OctetString; 1234 import org.bouncycastle.asn1.ASN1Primitive; 1235 import org.bouncycastle.asn1.DEROctetString; 1236 -import org.bouncycastle.asn1.oiw.ElGamalParameter; 1237 +// BEGIN android-removed 1238 +// import org.bouncycastle.asn1.oiw.ElGamalParameter; 1239 +// END android-removed 1240 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1241 import org.bouncycastle.asn1.pkcs.DHParameter; 1242 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1243 @@ -38,8 +40,10 @@ 1244 import org.bouncycastle.crypto.params.ECDomainParameters; 1245 import org.bouncycastle.crypto.params.ECNamedDomainParameters; 1246 import org.bouncycastle.crypto.params.ECPublicKeyParameters; 1247 -import org.bouncycastle.crypto.params.ElGamalParameters; 1248 -import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; 1249 +// BEGIN android-removed 1250 +// import org.bouncycastle.crypto.params.ElGamalParameters; 1251 +// import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters; 1252 +// END android-removed 1253 import org.bouncycastle.crypto.params.RSAKeyParameters; 1254 1255 /** 1256 @@ -133,14 +137,16 @@ 1257 1258 return new DHPublicKeyParameters(derY.getValue(), dhParams); 1259 } 1260 - else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1261 - { 1262 - ElGamalParameter params = ElGamalParameter.getInstance(algId.getParameters()); 1263 - ASN1Integer derY = (ASN1Integer)keyInfo.parsePublicKey(); 1264 - 1265 - return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters( 1266 - params.getP(), params.getG())); 1267 - } 1268 + // BEGIN android-removed 1269 + // else if (algId.getAlgorithm().equals(OIWObjectIdentifiers.elGamalAlgorithm)) 1270 + // { 1271 + // ElGamalParameter params = ElGamalParameter.getInstance(algId.getParameters()); 1272 + // ASN1Integer derY = (ASN1Integer)keyInfo.parsePublicKey(); 1273 + // 1274 + // return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters( 1275 + // params.getP(), params.getG())); 1276 + // } 1277 + // END android-removed 1278 else if (algId.getAlgorithm().equals(X9ObjectIdentifiers.id_dsa) 1279 || algId.getAlgorithm().equals(OIWObjectIdentifiers.dsaWithSHA1)) 1280 { 1281 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/DH.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/DH.java 1282 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/DH.java 2015-03-01 12:03:02.000000000 +0000 1283 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/DH.java 2014-07-28 19:51:54.000000000 +0000 1284 @@ -35,10 +35,12 @@ 1285 1286 provider.addAlgorithm("AlgorithmParameterGenerator.DH", PREFIX + "AlgorithmParameterGeneratorSpi"); 1287 1288 - provider.addAlgorithm("Cipher.DHIES", PREFIX + "IESCipher$IES"); 1289 - provider.addAlgorithm("Cipher.DHIESwithAES", PREFIX + "IESCipher$IESwithAES"); 1290 - provider.addAlgorithm("Cipher.DHIESWITHAES", PREFIX + "IESCipher$IESwithAES"); 1291 - provider.addAlgorithm("Cipher.DHIESWITHDESEDE", PREFIX + "IESCipher$IESwithDESede"); 1292 + // BEGIN android-removed 1293 + // provider.addAlgorithm("Cipher.DHIES", PREFIX + "IESCipher$IES"); 1294 + // provider.addAlgorithm("Cipher.DHIESwithAES", PREFIX + "IESCipher$IESwithAES"); 1295 + // provider.addAlgorithm("Cipher.DHIESWITHAES", PREFIX + "IESCipher$IESwithAES"); 1296 + // provider.addAlgorithm("Cipher.DHIESWITHDESEDE", PREFIX + "IESCipher$IESwithDESede"); 1297 + // END android-removed 1298 1299 registerOid(provider, PKCSObjectIdentifiers.dhKeyAgreement, "DH", new KeyFactorySpi()); 1300 registerOid(provider, X9ObjectIdentifiers.dhpublicnumber, "DH", new KeyFactorySpi()); 1301 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/DSA.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 1302 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 2015-03-01 12:03:02.000000000 +0000 1303 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/DSA.java 2015-06-01 19:10:55.000000000 +0000 1304 @@ -27,40 +27,55 @@ 1305 provider.addAlgorithm("KeyPairGenerator.DSA", PREFIX + "KeyPairGeneratorSpi"); 1306 provider.addAlgorithm("KeyFactory.DSA", PREFIX + "KeyFactorySpi"); 1307 1308 - provider.addAlgorithm("Signature.DSA", PREFIX + "DSASigner$stdDSA"); 1309 + // BEGIN android-changed 1310 + provider.addAlgorithm("Signature.SHA1withDSA", PREFIX + "DSASigner$stdDSA"); 1311 + // END android-changed 1312 provider.addAlgorithm("Signature.NONEWITHDSA", PREFIX + "DSASigner$noneDSA"); 1313 1314 provider.addAlgorithm("Alg.Alias.Signature.RAWDSA", "NONEWITHDSA"); 1315 1316 - provider.addAlgorithm("Signature.DETDSA", PREFIX + "DSASigner$detDSA"); 1317 - provider.addAlgorithm("Signature.SHA1WITHDETDSA", PREFIX + "DSASigner$detDSA"); 1318 - provider.addAlgorithm("Signature.SHA224WITHDETDSA", PREFIX + "DSASigner$detDSA224"); 1319 - provider.addAlgorithm("Signature.SHA256WITHDETDSA", PREFIX + "DSASigner$detDSA256"); 1320 - provider.addAlgorithm("Signature.SHA384WITHDETDSA", PREFIX + "DSASigner$detDSA384"); 1321 - provider.addAlgorithm("Signature.SHA512WITHDETDSA", PREFIX + "DSASigner$detDSA512"); 1322 + // BEGIN android-removed 1323 + // provider.addAlgorithm("Signature.DETDSA", PREFIX + "DSASigner$detDSA"); 1324 + // provider.addAlgorithm("Signature.SHA1WITHDETDSA", PREFIX + "DSASigner$detDSA"); 1325 + // provider.addAlgorithm("Signature.SHA224WITHDETDSA", PREFIX + "DSASigner$detDSA224"); 1326 + // provider.addAlgorithm("Signature.SHA256WITHDETDSA", PREFIX + "DSASigner$detDSA256"); 1327 + // provider.addAlgorithm("Signature.SHA384WITHDETDSA", PREFIX + "DSASigner$detDSA384"); 1328 + // provider.addAlgorithm("Signature.SHA512WITHDETDSA", PREFIX + "DSASigner$detDSA512"); 1329 + // END android-removed 1330 1331 addSignatureAlgorithm(provider, "SHA224", "DSA", PREFIX + "DSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224); 1332 addSignatureAlgorithm(provider, "SHA256", "DSA", PREFIX + "DSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256); 1333 - addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384); 1334 - addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512); 1335 - 1336 - provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "DSA"); 1337 - provider.addAlgorithm("Alg.Alias.Signature.SHA1withDSA", "DSA"); 1338 - provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "DSA"); 1339 - provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "DSA"); 1340 - provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "DSA"); 1341 - provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "DSA"); 1342 - provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "DSA"); 1343 - provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "DSA"); 1344 - provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "DSA"); 1345 - 1346 - provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA"); 1347 + // BEGIN android-removed 1348 + // addSignatureAlgorithm(provider, "SHA384", "DSA", PREFIX + "DSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384); 1349 + // addSignatureAlgorithm(provider, "SHA512", "DSA", PREFIX + "DSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512); 1350 + // END android-removed 1351 + 1352 + // BEGIN android-added 1353 + provider.addAlgorithm("Alg.Alias.Signature.DSA", "SHA1withDSA"); 1354 + // END android-added 1355 + // BEGIN android-changed 1356 + provider.addAlgorithm("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA"); 1357 + provider.addAlgorithm("Alg.Alias.Signature.SHA1withDSA", "SHA1withDSA"); 1358 + provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHDSA", "SHA1withDSA"); 1359 + provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "SHA1withDSA"); 1360 + provider.addAlgorithm("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "SHA1withDSA"); 1361 + provider.addAlgorithm("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA"); 1362 + provider.addAlgorithm("Alg.Alias.Signature.DSAWITHSHA1", "SHA1withDSA"); 1363 + provider.addAlgorithm("Alg.Alias.Signature.SHA1WithDSA", "SHA1withDSA"); 1364 + provider.addAlgorithm("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA"); 1365 + // END android-changed 1366 + 1367 + // BEGIN android-removed 1368 + // provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA"); 1369 + // END android-removed 1370 1371 AsymmetricKeyInfoConverter keyFact = new KeyFactorySpi(); 1372 1373 for (int i = 0; i != DSAUtil.dsaOids.length; i++) 1374 { 1375 - provider.addAlgorithm("Alg.Alias.Signature." + DSAUtil.dsaOids[i], "DSA"); 1376 + // BEGIN android-changed 1377 + provider.addAlgorithm("Alg.Alias.Signature." + DSAUtil.dsaOids[i], "SHA1withDSA"); 1378 + // END android-changed 1379 1380 registerOid(provider, DSAUtil.dsaOids[i], "DSA", keyFact); 1381 registerOidAlgorithmParameters(provider, DSAUtil.dsaOids[i], "DSA"); 1382 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/EC.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/EC.java 1383 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/EC.java 2015-03-01 12:03:02.000000000 +0000 1384 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/EC.java 2015-04-09 13:10:16.000000000 +0000 1385 @@ -1,8 +1,10 @@ 1386 package org.bouncycastle.jcajce.provider.asymmetric; 1387 1388 -import org.bouncycastle.asn1.bsi.BSIObjectIdentifiers; 1389 -import org.bouncycastle.asn1.eac.EACObjectIdentifiers; 1390 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1391 +// BEGIN android-removed 1392 +// import org.bouncycastle.asn1.bsi.BSIObjectIdentifiers; 1393 +// import org.bouncycastle.asn1.eac.EACObjectIdentifiers; 1394 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1395 +// END android-removed 1396 import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; 1397 import org.bouncycastle.jcajce.provider.asymmetric.ec.KeyFactorySpi; 1398 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 1399 @@ -22,45 +24,59 @@ 1400 public void configure(ConfigurableProvider provider) 1401 { 1402 provider.addAlgorithm("KeyAgreement.ECDH", PREFIX + "KeyAgreementSpi$DH"); 1403 - provider.addAlgorithm("KeyAgreement.ECDHC", PREFIX + "KeyAgreementSpi$DHC"); 1404 - provider.addAlgorithm("KeyAgreement.ECMQV", PREFIX + "KeyAgreementSpi$MQV"); 1405 - provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$DHwithSHA1KDF"); 1406 - provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$MQVwithSHA1KDF"); 1407 - provider.addAlgorithm("KeyAgreement.ECDHWITHSHA1KDF", PREFIX + "KeyAgreementSpi$DHwithSHA1KDF"); 1408 + // BEGIN android-removed 1409 + // provider.addAlgorithm("KeyAgreement.ECDHC", PREFIX + "KeyAgreementSpi$DHC"); 1410 + // provider.addAlgorithm("KeyAgreement.ECMQV", PREFIX + "KeyAgreementSpi$MQV"); 1411 + // provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$DHwithSHA1KDF"); 1412 + // provider.addAlgorithm("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, PREFIX + "KeyAgreementSpi$MQVwithSHA1KDF"); 1413 + // provider.addAlgorithm("KeyAgreement.ECDHWITHSHA1KDF", PREFIX + "KeyAgreementSpi$DHwithSHA1KDF"); 1414 + // END android-removed 1415 1416 registerOid(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC", new KeyFactorySpi.EC()); 1417 // TODO Should this be an alias for ECDH? 1418 registerOid(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC", new KeyFactorySpi.EC()); 1419 - registerOid(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV", new KeyFactorySpi.ECMQV()); 1420 - 1421 - registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC"); 1422 + // BEGIN android-removed 1423 + // registerOid(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV", new KeyFactorySpi.ECMQV()); 1424 + // 1425 + // // Android comment: the registration below is causing CTS tests to fail and doesn't seem 1426 + // // to be implemented by bouncycastle (so looks like an bug in bouncycastle). 1427 + // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.id_ecPublicKey, "EC"); 1428 + // END android-removed 1429 // TODO Should this be an alias for ECDH? 1430 - registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC"); 1431 - registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "EC"); 1432 + // BEGIN android-removed 1433 + // // Android comment: the registration below is causing CTS tests to fail and doesn't seem 1434 + // // to be implemented by bouncycastle (so looks like an bug in bouncycastle). 1435 + // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC"); 1436 + // registerOidAlgorithmParameters(provider, X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "EC"); 1437 + // END android-removed 1438 1439 provider.addAlgorithm("KeyFactory.EC", PREFIX + "KeyFactorySpi$EC"); 1440 - provider.addAlgorithm("KeyFactory.ECDSA", PREFIX + "KeyFactorySpi$ECDSA"); 1441 - provider.addAlgorithm("KeyFactory.ECDH", PREFIX + "KeyFactorySpi$ECDH"); 1442 - provider.addAlgorithm("KeyFactory.ECDHC", PREFIX + "KeyFactorySpi$ECDHC"); 1443 - provider.addAlgorithm("KeyFactory.ECMQV", PREFIX + "KeyFactorySpi$ECMQV"); 1444 + // BEGIN android-removed 1445 + // provider.addAlgorithm("KeyFactory.ECDSA", PREFIX + "KeyFactorySpi$ECDSA"); 1446 + // provider.addAlgorithm("KeyFactory.ECDH", PREFIX + "KeyFactorySpi$ECDH"); 1447 + // provider.addAlgorithm("KeyFactory.ECDHC", PREFIX + "KeyFactorySpi$ECDHC"); 1448 + // provider.addAlgorithm("KeyFactory.ECMQV", PREFIX + "KeyFactorySpi$ECMQV"); 1449 + // END android-removed 1450 1451 provider.addAlgorithm("KeyPairGenerator.EC", PREFIX + "KeyPairGeneratorSpi$EC"); 1452 - provider.addAlgorithm("KeyPairGenerator.ECDSA", PREFIX + "KeyPairGeneratorSpi$ECDSA"); 1453 - provider.addAlgorithm("KeyPairGenerator.ECDH", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1454 - provider.addAlgorithm("KeyPairGenerator.ECDHWITHSHA1KDF", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1455 - provider.addAlgorithm("KeyPairGenerator.ECDHC", PREFIX + "KeyPairGeneratorSpi$ECDHC"); 1456 - provider.addAlgorithm("KeyPairGenerator.ECIES", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1457 - provider.addAlgorithm("KeyPairGenerator.ECMQV", PREFIX + "KeyPairGeneratorSpi$ECMQV"); 1458 - 1459 - provider.addAlgorithm("Cipher.ECIES", PREFIX + "IESCipher$ECIES"); 1460 - provider.addAlgorithm("Cipher.ECIESwithAES", PREFIX + "IESCipher$ECIESwithAES"); 1461 - provider.addAlgorithm("Cipher.ECIESWITHAES", PREFIX + "IESCipher$ECIESwithAES"); 1462 - provider.addAlgorithm("Cipher.ECIESwithDESEDE", PREFIX + "IESCipher$ECIESwithDESede"); 1463 - provider.addAlgorithm("Cipher.ECIESWITHDESEDE", PREFIX + "IESCipher$ECIESwithDESede"); 1464 - provider.addAlgorithm("Cipher.ECIESwithAES-CBC", PREFIX + "IESCipher$ECIESwithAESCBC"); 1465 - provider.addAlgorithm("Cipher.ECIESWITHAES-CBC", PREFIX + "IESCipher$ECIESwithAESCBC"); 1466 - provider.addAlgorithm("Cipher.ECIESwithDESEDE-CBC", PREFIX + "IESCipher$ECIESwithDESedeCBC"); 1467 - provider.addAlgorithm("Cipher.ECIESWITHDESEDE-CBC", PREFIX + "IESCipher$ECIESwithDESedeCBC"); 1468 + // BEGIN android-removed 1469 + // provider.addAlgorithm("KeyPairGenerator.ECDSA", PREFIX + "KeyPairGeneratorSpi$ECDSA"); 1470 + // provider.addAlgorithm("KeyPairGenerator.ECDH", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1471 + // provider.addAlgorithm("KeyPairGenerator.ECDHWITHSHA1KDF", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1472 + // provider.addAlgorithm("KeyPairGenerator.ECDHC", PREFIX + "KeyPairGeneratorSpi$ECDHC"); 1473 + // provider.addAlgorithm("KeyPairGenerator.ECIES", PREFIX + "KeyPairGeneratorSpi$ECDH"); 1474 + // provider.addAlgorithm("KeyPairGenerator.ECMQV", PREFIX + "KeyPairGeneratorSpi$ECMQV"); 1475 + // 1476 + // provider.addAlgorithm("Cipher.ECIES", PREFIX + "IESCipher$ECIES"); 1477 + // provider.addAlgorithm("Cipher.ECIESwithAES", PREFIX + "IESCipher$ECIESwithAES"); 1478 + // provider.addAlgorithm("Cipher.ECIESWITHAES", PREFIX + "IESCipher$ECIESwithAES"); 1479 + // provider.addAlgorithm("Cipher.ECIESwithDESEDE", PREFIX + "IESCipher$ECIESwithDESede"); 1480 + // provider.addAlgorithm("Cipher.ECIESWITHDESEDE", PREFIX + "IESCipher$ECIESwithDESede"); 1481 + // provider.addAlgorithm("Cipher.ECIESwithAES-CBC", PREFIX + "IESCipher$ECIESwithAESCBC"); 1482 + // provider.addAlgorithm("Cipher.ECIESWITHAES-CBC", PREFIX + "IESCipher$ECIESwithAESCBC"); 1483 + // provider.addAlgorithm("Cipher.ECIESwithDESEDE-CBC", PREFIX + "IESCipher$ECIESwithDESedeCBC"); 1484 + // provider.addAlgorithm("Cipher.ECIESWITHDESEDE-CBC", PREFIX + "IESCipher$ECIESwithDESedeCBC"); 1485 + // END android-removed 1486 1487 provider.addAlgorithm("Signature.ECDSA", PREFIX + "SignatureSpi$ecDSA"); 1488 provider.addAlgorithm("Signature.NONEwithECDSA", PREFIX + "SignatureSpi$ecDSAnone"); 1489 @@ -72,39 +88,43 @@ 1490 provider.addAlgorithm("Alg.Alias.Signature.SHA1WithECDSA", "ECDSA"); 1491 provider.addAlgorithm("Alg.Alias.Signature.ECDSAWithSHA1", "ECDSA"); 1492 provider.addAlgorithm("Alg.Alias.Signature.1.2.840.10045.4.1", "ECDSA"); 1493 - provider.addAlgorithm("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA"); 1494 - 1495 - provider.addAlgorithm("Signature.DETECDSA", PREFIX + "SignatureSpi$ecDetDSA"); 1496 - provider.addAlgorithm("Signature.SHA1WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA"); 1497 - provider.addAlgorithm("Signature.SHA224WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA224"); 1498 - provider.addAlgorithm("Signature.SHA256WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA256"); 1499 - provider.addAlgorithm("Signature.SHA384WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA384"); 1500 - provider.addAlgorithm("Signature.SHA512WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA512"); 1501 + // BEGIN android-removed 1502 + // provider.addAlgorithm("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA"); 1503 + // 1504 + // provider.addAlgorithm("Signature.DETECDSA", PREFIX + "SignatureSpi$ecDetDSA"); 1505 + // provider.addAlgorithm("Signature.SHA1WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA"); 1506 + // provider.addAlgorithm("Signature.SHA224WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA224"); 1507 + // provider.addAlgorithm("Signature.SHA256WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA256"); 1508 + // provider.addAlgorithm("Signature.SHA384WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA384"); 1509 + // provider.addAlgorithm("Signature.SHA512WITHDETECDSA", PREFIX + "SignatureSpi$ecDetDSA512"); 1510 + // END android-removed 1511 1512 addSignatureAlgorithm(provider, "SHA224", "ECDSA", PREFIX + "SignatureSpi$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224); 1513 addSignatureAlgorithm(provider, "SHA256", "ECDSA", PREFIX + "SignatureSpi$ecDSA256", X9ObjectIdentifiers.ecdsa_with_SHA256); 1514 addSignatureAlgorithm(provider, "SHA384", "ECDSA", PREFIX + "SignatureSpi$ecDSA384", X9ObjectIdentifiers.ecdsa_with_SHA384); 1515 addSignatureAlgorithm(provider, "SHA512", "ECDSA", PREFIX + "SignatureSpi$ecDSA512", X9ObjectIdentifiers.ecdsa_with_SHA512); 1516 - addSignatureAlgorithm(provider, "RIPEMD160", "ECDSA", PREFIX + "SignatureSpi$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160); 1517 - 1518 - provider.addAlgorithm("Signature.SHA1WITHECNR", PREFIX + "SignatureSpi$ecNR"); 1519 - provider.addAlgorithm("Signature.SHA224WITHECNR", PREFIX + "SignatureSpi$ecNR224"); 1520 - provider.addAlgorithm("Signature.SHA256WITHECNR", PREFIX + "SignatureSpi$ecNR256"); 1521 - provider.addAlgorithm("Signature.SHA384WITHECNR", PREFIX + "SignatureSpi$ecNR384"); 1522 - provider.addAlgorithm("Signature.SHA512WITHECNR", PREFIX + "SignatureSpi$ecNR512"); 1523 - 1524 - addSignatureAlgorithm(provider, "SHA1", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1); 1525 - addSignatureAlgorithm(provider, "SHA224", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224); 1526 - addSignatureAlgorithm(provider, "SHA256", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256); 1527 - addSignatureAlgorithm(provider, "SHA384", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA384", EACObjectIdentifiers.id_TA_ECDSA_SHA_384); 1528 - addSignatureAlgorithm(provider, "SHA512", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA512", EACObjectIdentifiers.id_TA_ECDSA_SHA_512); 1529 - 1530 - addSignatureAlgorithm(provider, "SHA1", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", BSIObjectIdentifiers.ecdsa_plain_SHA1); 1531 - addSignatureAlgorithm(provider, "SHA224", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", BSIObjectIdentifiers.ecdsa_plain_SHA224); 1532 - addSignatureAlgorithm(provider, "SHA256", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", BSIObjectIdentifiers.ecdsa_plain_SHA256); 1533 - addSignatureAlgorithm(provider, "SHA384", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA384", BSIObjectIdentifiers.ecdsa_plain_SHA384); 1534 - addSignatureAlgorithm(provider, "SHA512", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA512", BSIObjectIdentifiers.ecdsa_plain_SHA512); 1535 - addSignatureAlgorithm(provider, "RIPEMD160", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecPlainDSARP160", BSIObjectIdentifiers.ecdsa_plain_RIPEMD160); 1536 + // BEGIN android-removed 1537 + // addSignatureAlgorithm(provider, "RIPEMD160", "ECDSA", PREFIX + "SignatureSpi$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160); 1538 + // 1539 + // provider.addAlgorithm("Signature.SHA1WITHECNR", PREFIX + "SignatureSpi$ecNR"); 1540 + // provider.addAlgorithm("Signature.SHA224WITHECNR", PREFIX + "SignatureSpi$ecNR224"); 1541 + // provider.addAlgorithm("Signature.SHA256WITHECNR", PREFIX + "SignatureSpi$ecNR256"); 1542 + // provider.addAlgorithm("Signature.SHA384WITHECNR", PREFIX + "SignatureSpi$ecNR384"); 1543 + // provider.addAlgorithm("Signature.SHA512WITHECNR", PREFIX + "SignatureSpi$ecNR512"); 1544 + // 1545 + // addSignatureAlgorithm(provider, "SHA1", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1); 1546 + // addSignatureAlgorithm(provider, "SHA224", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224); 1547 + // addSignatureAlgorithm(provider, "SHA256", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256); 1548 + // addSignatureAlgorithm(provider, "SHA384", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA384", EACObjectIdentifiers.id_TA_ECDSA_SHA_384); 1549 + // addSignatureAlgorithm(provider, "SHA512", "CVC-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA512", EACObjectIdentifiers.id_TA_ECDSA_SHA_512); 1550 + // 1551 + // addSignatureAlgorithm(provider, "SHA1", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA", BSIObjectIdentifiers.ecdsa_plain_SHA1); 1552 + // addSignatureAlgorithm(provider, "SHA224", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA224", BSIObjectIdentifiers.ecdsa_plain_SHA224); 1553 + // addSignatureAlgorithm(provider, "SHA256", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA256", BSIObjectIdentifiers.ecdsa_plain_SHA256); 1554 + // addSignatureAlgorithm(provider, "SHA384", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA384", BSIObjectIdentifiers.ecdsa_plain_SHA384); 1555 + // addSignatureAlgorithm(provider, "SHA512", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecCVCDSA512", BSIObjectIdentifiers.ecdsa_plain_SHA512); 1556 + // addSignatureAlgorithm(provider, "RIPEMD160", "PLAIN-ECDSA", PREFIX + "SignatureSpi$ecPlainDSARP160", BSIObjectIdentifiers.ecdsa_plain_RIPEMD160); 1557 + // END android-removed 1558 } 1559 } 1560 } 1561 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/RSA.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 1562 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 2015-03-01 12:03:02.000000000 +0000 1563 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/RSA.java 2015-04-09 13:10:16.000000000 +0000 1564 @@ -3,7 +3,9 @@ 1565 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 1566 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 1567 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 1568 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1569 +// BEGIN android-removed 1570 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 1571 +// END android-removed 1572 import org.bouncycastle.asn1.x509.X509ObjectIdentifiers; 1573 import org.bouncycastle.jcajce.provider.asymmetric.rsa.KeyFactorySpi; 1574 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 1575 @@ -26,39 +28,47 @@ 1576 provider.addAlgorithm("AlgorithmParameters.OAEP", PREFIX + "AlgorithmParametersSpi$OAEP"); 1577 provider.addAlgorithm("AlgorithmParameters.PSS", PREFIX + "AlgorithmParametersSpi$PSS"); 1578 1579 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS"); 1580 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS"); 1581 - 1582 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS"); 1583 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS"); 1584 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS"); 1585 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS"); 1586 - 1587 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS"); 1588 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS"); 1589 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS"); 1590 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS"); 1591 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS"); 1592 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS"); 1593 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS"); 1594 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAANDMGF1", "PSS"); 1595 + // BEGIN android-removed 1596 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS"); 1597 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS"); 1598 + // 1599 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS"); 1600 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS"); 1601 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS"); 1602 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS"); 1603 + // 1604 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS"); 1605 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS"); 1606 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS"); 1607 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS"); 1608 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS"); 1609 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS"); 1610 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS"); 1611 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.NONEWITHRSAANDMGF1", "PSS"); 1612 + // END android-removed 1613 1614 provider.addAlgorithm("Cipher.RSA", PREFIX + "CipherSpi$NoPadding"); 1615 - provider.addAlgorithm("Cipher.RSA/RAW", PREFIX + "CipherSpi$NoPadding"); 1616 - provider.addAlgorithm("Cipher.RSA/PKCS1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1617 - provider.addAlgorithm("Cipher.1.2.840.113549.1.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1618 - provider.addAlgorithm("Cipher.2.5.8.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1619 - provider.addAlgorithm("Cipher.RSA/1", PREFIX + "CipherSpi$PKCS1v1_5Padding_PrivateOnly"); 1620 - provider.addAlgorithm("Cipher.RSA/2", PREFIX + "CipherSpi$PKCS1v1_5Padding_PublicOnly"); 1621 - provider.addAlgorithm("Cipher.RSA/OAEP", PREFIX + "CipherSpi$OAEPPadding"); 1622 - provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, PREFIX + "CipherSpi$OAEPPadding"); 1623 - provider.addAlgorithm("Cipher.RSA/ISO9796-1", PREFIX + "CipherSpi$ISO9796d1Padding"); 1624 + // BEGIN android-changed 1625 + provider.addAlgorithm("Alg.Alias.Cipher.RSA/RAW", "RSA"); 1626 + // END android-changed 1627 + // BEGIN android-removed 1628 + // provider.addAlgorithm("Cipher.RSA/PKCS1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1629 + // provider.addAlgorithm("Cipher.1.2.840.113549.1.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1630 + // provider.addAlgorithm("Cipher.2.5.8.1.1", PREFIX + "CipherSpi$PKCS1v1_5Padding"); 1631 + // provider.addAlgorithm("Cipher.RSA/1", PREFIX + "CipherSpi$PKCS1v1_5Padding_PrivateOnly"); 1632 + // provider.addAlgorithm("Cipher.RSA/2", PREFIX + "CipherSpi$PKCS1v1_5Padding_PublicOnly"); 1633 + // provider.addAlgorithm("Cipher.RSA/OAEP", PREFIX + "CipherSpi$OAEPPadding"); 1634 + // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, PREFIX + "CipherSpi$OAEPPadding"); 1635 + // provider.addAlgorithm("Cipher.RSA/ISO9796-1", PREFIX + "CipherSpi$ISO9796d1Padding"); 1636 + // END android-removed 1637 1638 provider.addAlgorithm("Alg.Alias.Cipher.RSA//RAW", "RSA"); 1639 provider.addAlgorithm("Alg.Alias.Cipher.RSA//NOPADDING", "RSA"); 1640 - provider.addAlgorithm("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1"); 1641 - provider.addAlgorithm("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP"); 1642 - provider.addAlgorithm("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1"); 1643 + // BEGIN android-removed 1644 + // provider.addAlgorithm("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1"); 1645 + // provider.addAlgorithm("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP"); 1646 + // provider.addAlgorithm("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1"); 1647 + // END android-removed 1648 1649 provider.addAlgorithm("KeyFactory.RSA", PREFIX + "KeyFactorySpi"); 1650 provider.addAlgorithm("KeyPairGenerator.RSA", PREFIX + "KeyPairGeneratorSpi"); 1651 @@ -68,79 +78,89 @@ 1652 registerOid(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA", keyFact); 1653 registerOid(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA", keyFact); 1654 registerOid(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "RSA", keyFact); 1655 - registerOid(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "RSA", keyFact); 1656 - 1657 - registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA"); 1658 - registerOidAlgorithmParameters(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA"); 1659 - registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP"); 1660 - registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS"); 1661 - 1662 - 1663 - provider.addAlgorithm("Signature.RSASSA-PSS", PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1664 - provider.addAlgorithm("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1665 - provider.addAlgorithm("Signature.OID." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1666 - 1667 - provider.addAlgorithm("Signature.SHA224WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA224withRSA"); 1668 - provider.addAlgorithm("Signature.SHA256WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA256withRSA"); 1669 - provider.addAlgorithm("Signature.SHA384WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA384withRSA"); 1670 - provider.addAlgorithm("Signature.SHA512WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA512withRSA"); 1671 - provider.addAlgorithm("Signature.SHA224withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA224withRSA"); 1672 - provider.addAlgorithm("Signature.SHA256withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA256withRSA"); 1673 - provider.addAlgorithm("Signature.SHA384withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA384withRSA"); 1674 - provider.addAlgorithm("Signature.SHA512withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA512withRSA"); 1675 - 1676 - provider.addAlgorithm("Signature.RSA", PREFIX + "DigestSignatureSpi$noneRSA"); 1677 - provider.addAlgorithm("Signature.RAWRSASSA-PSS", PREFIX + "PSSSignatureSpi$nonePSS"); 1678 - 1679 - provider.addAlgorithm("Alg.Alias.Signature.RAWRSA", "RSA"); 1680 - provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSA", "RSA"); 1681 - provider.addAlgorithm("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS"); 1682 - provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS"); 1683 - provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS"); 1684 - provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAANDMGF1", "RAWRSASSA-PSS"); 1685 - provider.addAlgorithm("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS"); 1686 - 1687 - 1688 - provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS"); 1689 - provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS"); 1690 - provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS"); 1691 - provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS"); 1692 - 1693 - if (provider.hasAlgorithm("MessageDigest", "MD2")) 1694 - { 1695 - addDigestSignature(provider, "MD2", PREFIX + "DigestSignatureSpi$MD2", PKCSObjectIdentifiers.md2WithRSAEncryption); 1696 - } 1697 - 1698 - if (provider.hasAlgorithm("MessageDigest", "MD4")) 1699 - { 1700 - addDigestSignature(provider, "MD4", PREFIX + "DigestSignatureSpi$MD4", PKCSObjectIdentifiers.md4WithRSAEncryption); 1701 - } 1702 + // BEGIN android-removed 1703 + // registerOid(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "RSA", keyFact); 1704 + // 1705 + // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.rsaEncryption, "RSA"); 1706 + // registerOidAlgorithmParameters(provider, X509ObjectIdentifiers.id_ea_rsa, "RSA"); 1707 + // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP"); 1708 + // registerOidAlgorithmParameters(provider, PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS"); 1709 + // 1710 + // 1711 + // provider.addAlgorithm("Signature.RSASSA-PSS", PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1712 + // provider.addAlgorithm("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1713 + // provider.addAlgorithm("Signature.OID." + PKCSObjectIdentifiers.id_RSASSA_PSS, PREFIX + "PSSSignatureSpi$PSSwithRSA"); 1714 + // 1715 + // provider.addAlgorithm("Signature.SHA224WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA224withRSA"); 1716 + // provider.addAlgorithm("Signature.SHA256WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA256withRSA"); 1717 + // provider.addAlgorithm("Signature.SHA384WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA384withRSA"); 1718 + // provider.addAlgorithm("Signature.SHA512WITHRSAANDMGF1", PREFIX + "PSSSignatureSpi$SHA512withRSA"); 1719 + // provider.addAlgorithm("Signature.SHA224withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA224withRSA"); 1720 + // provider.addAlgorithm("Signature.SHA256withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA256withRSA"); 1721 + // provider.addAlgorithm("Signature.SHA384withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA384withRSA"); 1722 + // provider.addAlgorithm("Signature.SHA512withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA512withRSA"); 1723 + // 1724 + // provider.addAlgorithm("Signature.RSA", PREFIX + "DigestSignatureSpi$noneRSA"); 1725 + // provider.addAlgorithm("Signature.RAWRSASSA-PSS", PREFIX + "PSSSignatureSpi$nonePSS"); 1726 + // 1727 + // provider.addAlgorithm("Alg.Alias.Signature.RAWRSA", "RSA"); 1728 + // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSA", "RSA"); 1729 + // provider.addAlgorithm("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS"); 1730 + // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS"); 1731 + // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS"); 1732 + // provider.addAlgorithm("Alg.Alias.Signature.NONEWITHRSAANDMGF1", "RAWRSASSA-PSS"); 1733 + // provider.addAlgorithm("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS"); 1734 + // 1735 + // 1736 + // provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS"); 1737 + // provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS"); 1738 + // provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS"); 1739 + // provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS"); 1740 + // 1741 + // if (provider.hasAlgorithm("MessageDigest", "MD2")) 1742 + // { 1743 + // addDigestSignature(provider, "MD2", PREFIX + "DigestSignatureSpi$MD2", PKCSObjectIdentifiers.md2WithRSAEncryption); 1744 + // } 1745 + // 1746 + // if (provider.hasAlgorithm("MessageDigest", "MD4")) 1747 + // { 1748 + // addDigestSignature(provider, "MD4", PREFIX + "DigestSignatureSpi$MD4", PKCSObjectIdentifiers.md4WithRSAEncryption); 1749 + // } 1750 + // END android-removed 1751 1752 if (provider.hasAlgorithm("MessageDigest", "MD5")) 1753 { 1754 addDigestSignature(provider, "MD5", PREFIX + "DigestSignatureSpi$MD5", PKCSObjectIdentifiers.md5WithRSAEncryption); 1755 - provider.addAlgorithm("Signature.MD5withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$MD5WithRSAEncryption"); 1756 - provider.addAlgorithm("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2"); 1757 + // END android-removed 1758 + // provider.addAlgorithm("Signature.MD5withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$MD5WithRSAEncryption"); 1759 + // provider.addAlgorithm("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2"); 1760 + // END android-removed 1761 } 1762 1763 if (provider.hasAlgorithm("MessageDigest", "SHA1")) 1764 { 1765 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS"); 1766 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS"); 1767 - provider.addAlgorithm("Signature.SHA1withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA1withRSA"); 1768 - provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS"); 1769 - provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHRSAANDMGF1", "SHA1withRSA/PSS"); 1770 + // BEGIN android-removed 1771 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS"); 1772 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS"); 1773 + // provider.addAlgorithm("Signature.SHA1withRSA/PSS", PREFIX + "PSSSignatureSpi$SHA1withRSA"); 1774 + // provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS"); 1775 + // provider.addAlgorithm("Alg.Alias.Signature.SHA1WITHRSAANDMGF1", "SHA1withRSA/PSS"); 1776 + // END android-removed 1777 1778 addDigestSignature(provider, "SHA1", PREFIX + "DigestSignatureSpi$SHA1", PKCSObjectIdentifiers.sha1WithRSAEncryption); 1779 1780 - provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2"); 1781 - provider.addAlgorithm("Signature.SHA1withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$SHA1WithRSAEncryption"); 1782 + // BEGIN android-removed 1783 + // provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2"); 1784 + // provider.addAlgorithm("Signature.SHA1withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$SHA1WithRSAEncryption"); 1785 + // END android-removed 1786 provider.addAlgorithm("Alg.Alias.Signature." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA"); 1787 provider.addAlgorithm("Alg.Alias.Signature.OID." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA"); 1788 1789 - provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSA/X9.31", "SHA1WITHRSA/X9.31"); 1790 - provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/X9.31", "SHA1WITHRSA/X9.31"); 1791 - provider.addAlgorithm("Signature.SHA1WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA1WithRSAEncryption"); 1792 + // BEGIN android-removed 1793 + // provider.addAlgorithm("Alg.Alias.Signature.SHA1withRSA/X9.31", "SHA1WITHRSA/X9.31"); 1794 + // provider.addAlgorithm("Alg.Alias.Signature.SHA1WithRSA/X9.31", "SHA1WITHRSA/X9.31"); 1795 + // provider.addAlgorithm("Signature.SHA1WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA1WithRSAEncryption"); 1796 + // END android-removed 1797 } 1798 1799 addDigestSignature(provider, "SHA224", PREFIX + "DigestSignatureSpi$SHA224", PKCSObjectIdentifiers.sha224WithRSAEncryption); 1800 @@ -148,52 +168,54 @@ 1801 addDigestSignature(provider, "SHA384", PREFIX + "DigestSignatureSpi$SHA384", PKCSObjectIdentifiers.sha384WithRSAEncryption); 1802 addDigestSignature(provider, "SHA512", PREFIX + "DigestSignatureSpi$SHA512", PKCSObjectIdentifiers.sha512WithRSAEncryption); 1803 1804 - provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSA/X9.31", "SHA224WITHRSA/X9.31"); 1805 - provider.addAlgorithm("Alg.Alias.Signature.SHA224WithRSA/X9.31", "SHA224WITHRSA/X9.31"); 1806 - provider.addAlgorithm("Signature.SHA224WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA224WithRSAEncryption"); 1807 - provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSA/X9.31", "SHA256WITHRSA/X9.31"); 1808 - provider.addAlgorithm("Alg.Alias.Signature.SHA256WithRSA/X9.31", "SHA256WITHRSA/X9.31"); 1809 - provider.addAlgorithm("Signature.SHA256WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA256WithRSAEncryption"); 1810 - provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSA/X9.31", "SHA384WITHRSA/X9.31"); 1811 - provider.addAlgorithm("Alg.Alias.Signature.SHA384WithRSA/X9.31", "SHA384WITHRSA/X9.31"); 1812 - provider.addAlgorithm("Signature.SHA384WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA384WithRSAEncryption"); 1813 - provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSA/X9.31", "SHA512WITHRSA/X9.31"); 1814 - provider.addAlgorithm("Alg.Alias.Signature.SHA512WithRSA/X9.31", "SHA512WITHRSA/X9.31"); 1815 - provider.addAlgorithm("Signature.SHA512WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA512WithRSAEncryption"); 1816 - 1817 - if (provider.hasAlgorithm("MessageDigest", "RIPEMD128")) 1818 - { 1819 - addDigestSignature(provider, "RIPEMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 1820 - addDigestSignature(provider, "RMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", null); 1821 - provider.addAlgorithm("Alg.Alias.Signature.RIPEMD128withRSA/X9.31", "RIPEMD128WITHRSA/X9.31"); 1822 - provider.addAlgorithm("Alg.Alias.Signature.RIPEMD128WithRSA/X9.31", "RIPEMD128WITHRSA/X9.31"); 1823 - provider.addAlgorithm("Signature.RIPEMD128WITHRSA/X9.31", PREFIX + "X931SignatureSpi$RIPEMD128WithRSAEncryption"); 1824 - } 1825 - 1826 - if (provider.hasAlgorithm("MessageDigest", "RIPEMD160")) 1827 - { 1828 - addDigestSignature(provider, "RIPEMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 1829 - addDigestSignature(provider, "RMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", null); 1830 - provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2"); 1831 - provider.addAlgorithm("Signature.RIPEMD160withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$RIPEMD160WithRSAEncryption"); 1832 - provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160withRSA/X9.31", "RIPEMD160WITHRSA/X9.31"); 1833 - provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/X9.31", "RIPEMD160WITHRSA/X9.31"); 1834 - provider.addAlgorithm("Signature.RIPEMD160WITHRSA/X9.31", PREFIX + "X931SignatureSpi$RIPEMD160WithRSAEncryption"); 1835 - } 1836 - 1837 - if (provider.hasAlgorithm("MessageDigest", "RIPEMD256")) 1838 - { 1839 - addDigestSignature(provider, "RIPEMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 1840 - addDigestSignature(provider, "RMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", null); 1841 - } 1842 - 1843 - if (provider.hasAlgorithm("MessageDigest", "WHIRLPOOL")) 1844 - { 1845 - provider.addAlgorithm("Alg.Alias.Signature.WhirlpoolWithRSA/X9.31", "WHIRLPOOLWITHRSA/X9.31"); 1846 - provider.addAlgorithm("Alg.Alias.Signature.WHIRLPOOLwithRSA/X9.31", "WHIRLPOOLWITHRSA/X9.31"); 1847 - provider.addAlgorithm("Alg.Alias.Signature.WHIRLPOOLWithRSA/X9.31", "WHIRLPOOLWITHRSA/X9.31"); 1848 - provider.addAlgorithm("Signature.WHIRLPOOLWITHRSA/X9.31", PREFIX + "X931SignatureSpi$WhirlpoolWithRSAEncryption"); 1849 - } 1850 + // BEGIN android-removed 1851 + // provider.addAlgorithm("Alg.Alias.Signature.SHA224withRSA/X9.31", "SHA224WITHRSA/X9.31"); 1852 + // provider.addAlgorithm("Alg.Alias.Signature.SHA224WithRSA/X9.31", "SHA224WITHRSA/X9.31"); 1853 + // provider.addAlgorithm("Signature.SHA224WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA224WithRSAEncryption"); 1854 + // provider.addAlgorithm("Alg.Alias.Signature.SHA256withRSA/X9.31", "SHA256WITHRSA/X9.31"); 1855 + // provider.addAlgorithm("Alg.Alias.Signature.SHA256WithRSA/X9.31", "SHA256WITHRSA/X9.31"); 1856 + // provider.addAlgorithm("Signature.SHA256WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA256WithRSAEncryption"); 1857 + // provider.addAlgorithm("Alg.Alias.Signature.SHA384withRSA/X9.31", "SHA384WITHRSA/X9.31"); 1858 + // provider.addAlgorithm("Alg.Alias.Signature.SHA384WithRSA/X9.31", "SHA384WITHRSA/X9.31"); 1859 + // provider.addAlgorithm("Signature.SHA384WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA384WithRSAEncryption"); 1860 + // provider.addAlgorithm("Alg.Alias.Signature.SHA512withRSA/X9.31", "SHA512WITHRSA/X9.31"); 1861 + // provider.addAlgorithm("Alg.Alias.Signature.SHA512WithRSA/X9.31", "SHA512WITHRSA/X9.31"); 1862 + // provider.addAlgorithm("Signature.SHA512WITHRSA/X9.31", PREFIX + "X931SignatureSpi$SHA512WithRSAEncryption"); 1863 + // 1864 + // if (provider.hasAlgorithm("MessageDigest", "RIPEMD128")) 1865 + // { 1866 + // addDigestSignature(provider, "RIPEMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 1867 + // addDigestSignature(provider, "RMD128", PREFIX + "DigestSignatureSpi$RIPEMD128", null); 1868 + // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD128withRSA/X9.31", "RIPEMD128WITHRSA/X9.31"); 1869 + // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD128WithRSA/X9.31", "RIPEMD128WITHRSA/X9.31"); 1870 + // provider.addAlgorithm("Signature.RIPEMD128WITHRSA/X9.31", PREFIX + "X931SignatureSpi$RIPEMD128WithRSAEncryption"); 1871 + // } 1872 + // 1873 + // if (provider.hasAlgorithm("MessageDigest", "RIPEMD160")) 1874 + // { 1875 + // addDigestSignature(provider, "RIPEMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 1876 + // addDigestSignature(provider, "RMD160", PREFIX + "DigestSignatureSpi$RIPEMD160", null); 1877 + // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2"); 1878 + // provider.addAlgorithm("Signature.RIPEMD160withRSA/ISO9796-2", PREFIX + "ISOSignatureSpi$RIPEMD160WithRSAEncryption"); 1879 + // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160withRSA/X9.31", "RIPEMD160WITHRSA/X9.31"); 1880 + // provider.addAlgorithm("Alg.Alias.Signature.RIPEMD160WithRSA/X9.31", "RIPEMD160WITHRSA/X9.31"); 1881 + // provider.addAlgorithm("Signature.RIPEMD160WITHRSA/X9.31", PREFIX + "X931SignatureSpi$RIPEMD160WithRSAEncryption"); 1882 + // } 1883 + // 1884 + // if (provider.hasAlgorithm("MessageDigest", "RIPEMD256")) 1885 + // { 1886 + // addDigestSignature(provider, "RIPEMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 1887 + // addDigestSignature(provider, "RMD256", PREFIX + "DigestSignatureSpi$RIPEMD256", null); 1888 + // } 1889 + // 1890 + // if (provider.hasAlgorithm("MessageDigest", "WHIRLPOOL")) 1891 + // { 1892 + // provider.addAlgorithm("Alg.Alias.Signature.WhirlpoolWithRSA/X9.31", "WHIRLPOOLWITHRSA/X9.31"); 1893 + // provider.addAlgorithm("Alg.Alias.Signature.WHIRLPOOLwithRSA/X9.31", "WHIRLPOOLWITHRSA/X9.31"); 1894 + // provider.addAlgorithm("Alg.Alias.Signature.WHIRLPOOLWithRSA/X9.31", "WHIRLPOOLWITHRSA/X9.31"); 1895 + // provider.addAlgorithm("Signature.WHIRLPOOLWITHRSA/X9.31", PREFIX + "X931SignatureSpi$WhirlpoolWithRSAEncryption"); 1896 + // } 1897 + // END android-removed 1898 } 1899 1900 private void addDigestSignature( 1901 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/X509.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/X509.java 1902 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/X509.java 2015-03-01 12:03:02.000000000 +0000 1903 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/X509.java 2012-09-17 23:04:47.000000000 +0000 1904 @@ -18,8 +18,10 @@ 1905 1906 public void configure(ConfigurableProvider provider) 1907 { 1908 - provider.addAlgorithm("KeyFactory.X.509", "org.bouncycastle.jcajce.provider.asymmetric.x509.KeyFactory"); 1909 - provider.addAlgorithm("Alg.Alias.KeyFactory.X509", "X.509"); 1910 + // BEGIN android-removed 1911 + // provider.addAlgorithm("KeyFactory.X.509", "org.bouncycastle.jcajce.provider.asymmetric.x509.KeyFactory"); 1912 + // provider.addAlgorithm("Alg.Alias.KeyFactory.X509", "X.509"); 1913 + // END android-removed 1914 1915 // 1916 // certificate factories. 1917 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 1918 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 2015-03-01 12:03:02.000000000 +0000 1919 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSASigner.java 2015-07-21 14:37:00.000000000 +0000 1920 @@ -23,13 +23,24 @@ 1921 import org.bouncycastle.crypto.DSA; 1922 import org.bouncycastle.crypto.Digest; 1923 import org.bouncycastle.crypto.digests.NullDigest; 1924 -import org.bouncycastle.crypto.digests.SHA1Digest; 1925 -import org.bouncycastle.crypto.digests.SHA224Digest; 1926 -import org.bouncycastle.crypto.digests.SHA256Digest; 1927 -import org.bouncycastle.crypto.digests.SHA384Digest; 1928 -import org.bouncycastle.crypto.digests.SHA512Digest; 1929 +// BEGIN android-added 1930 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 1931 +// END android-added 1932 +// BEGIN android-removed 1933 +// import org.bouncycastle.crypto.digests.SHA1Digest; 1934 +// import org.bouncycastle.crypto.digests.SHA224Digest; 1935 +// import org.bouncycastle.crypto.digests.SHA256Digest; 1936 +// import org.bouncycastle.crypto.digests.SHA384Digest; 1937 +// import org.bouncycastle.crypto.digests.SHA512Digest; 1938 +// END android-removed 1939 +// BEGIN android-added 1940 +import org.bouncycastle.crypto.params.DSAKeyParameters; 1941 +import org.bouncycastle.crypto.params.DSAParameters; 1942 +// END android-added 1943 import org.bouncycastle.crypto.params.ParametersWithRandom; 1944 -import org.bouncycastle.crypto.signers.HMacDSAKCalculator; 1945 +// BEGIN android-removed 1946 +// import org.bouncycastle.crypto.signers.HMacDSAKCalculator; 1947 +// END android-removed 1948 1949 public class DSASigner 1950 extends SignatureSpi 1951 @@ -79,6 +90,10 @@ 1952 throw new InvalidKeyException("can't recognise key type in DSA based signer"); 1953 } 1954 } 1955 + // BEGIN android-added 1956 + DSAParameters dsaParam = ((DSAKeyParameters) param).getParameters(); 1957 + checkKey(dsaParam); 1958 + // END android-added 1959 1960 digest.reset(); 1961 signer.init(false, param); 1962 @@ -100,6 +115,10 @@ 1963 CipherParameters param; 1964 1965 param = DSAUtil.generatePrivateKeyParameter(privateKey); 1966 + // BEGIN android-added 1967 + DSAParameters dsaParam = ((DSAKeyParameters) param).getParameters(); 1968 + checkKey(dsaParam); 1969 + // END android-added 1970 1971 if (random != null) 1972 { 1973 @@ -173,6 +192,28 @@ 1974 throw new UnsupportedOperationException("engineSetParameter unsupported"); 1975 } 1976 1977 + // BEGIN android-added 1978 + protected void checkKey(DSAParameters params) throws InvalidKeyException { 1979 + int valueL = params.getP().bitLength(); 1980 + int valueN = params.getQ().bitLength(); 1981 + int digestSize = digest.getDigestSize(); 1982 + 1983 + // The checks are consistent with DSAParametersGenerator's init method. 1984 + if ((valueL < 1024 || valueL > 3072) || valueL % 1024 != 0) { 1985 + throw new InvalidKeyException("valueL values must be between 1024 and 3072 and a multiple of 1024"); 1986 + } else if (valueL == 1024 && valueN != 160) { 1987 + throw new InvalidKeyException("valueN must be 160 for valueL = 1024"); 1988 + } else if (valueL == 2048 && (valueN != 224 && valueN != 256)) { 1989 + throw new InvalidKeyException("valueN must be 224 or 256 for valueL = 2048"); 1990 + } else if (valueL == 3072 && valueN != 256) { 1991 + throw new InvalidKeyException("valueN must be 256 for valueL = 3072"); 1992 + } 1993 + if (valueN > digestSize * 8) { 1994 + throw new InvalidKeyException("Key is too strong for this signature algorithm"); 1995 + } 1996 + } 1997 + 1998 + // END android-added 1999 /** 2000 * @deprecated replaced with <a href = "#engineSetParameter(java.security.spec.AlgorithmParameterSpec)"> 2001 */ 2002 @@ -217,90 +258,102 @@ 2003 { 2004 public stdDSA() 2005 { 2006 - super(new SHA1Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2007 + // BEGIN android-changed 2008 + super(AndroidDigestFactory.getSHA1(), new org.bouncycastle.crypto.signers.DSASigner()); 2009 + // END android-changed 2010 } 2011 } 2012 2013 - static public class detDSA 2014 - extends DSASigner 2015 - { 2016 - public detDSA() 2017 - { 2018 - super(new SHA1Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA1Digest()))); 2019 - } 2020 - } 2021 + // BEGIN android-removed 2022 + // static public class detDSA 2023 + // extends DSASigner 2024 + // { 2025 + // public detDSA() 2026 + // { 2027 + // super(new SHA1Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA1Digest()))); 2028 + // } 2029 + // } 2030 + // END android-removed 2031 2032 static public class dsa224 2033 extends DSASigner 2034 { 2035 public dsa224() 2036 { 2037 - super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2038 + // BEGIN android-changed 2039 + super(AndroidDigestFactory.getSHA224(), new org.bouncycastle.crypto.signers.DSASigner()); 2040 + // END android-changed 2041 } 2042 } 2043 2044 - static public class detDSA224 2045 - extends DSASigner 2046 - { 2047 - public detDSA224() 2048 - { 2049 - super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA224Digest()))); 2050 - } 2051 - } 2052 + // BEGIN android-removed 2053 + // static public class detDSA224 2054 + // extends DSASigner 2055 + // { 2056 + // public detDSA224() 2057 + // { 2058 + // super(new SHA224Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA224Digest()))); 2059 + // } 2060 + // } 2061 + // END android-removed 2062 2063 static public class dsa256 2064 extends DSASigner 2065 { 2066 public dsa256() 2067 { 2068 - super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2069 + // BEGIN android-changed 2070 + super(AndroidDigestFactory.getSHA256(), new org.bouncycastle.crypto.signers.DSASigner()); 2071 + // END android-changed 2072 } 2073 } 2074 2075 - static public class detDSA256 2076 - extends DSASigner 2077 - { 2078 - public detDSA256() 2079 - { 2080 - super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA256Digest()))); 2081 - } 2082 - } 2083 - 2084 - static public class dsa384 2085 - extends DSASigner 2086 - { 2087 - public dsa384() 2088 - { 2089 - super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2090 - } 2091 - } 2092 - 2093 - static public class detDSA384 2094 - extends DSASigner 2095 - { 2096 - public detDSA384() 2097 - { 2098 - super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA384Digest()))); 2099 - } 2100 - } 2101 - 2102 - static public class dsa512 2103 - extends DSASigner 2104 - { 2105 - public dsa512() 2106 - { 2107 - super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2108 - } 2109 - } 2110 - 2111 - static public class detDSA512 2112 - extends DSASigner 2113 - { 2114 - public detDSA512() 2115 - { 2116 - super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA512Digest()))); 2117 - } 2118 - } 2119 + // BEGIN android-removed 2120 + // static public class detDSA256 2121 + // extends DSASigner 2122 + // { 2123 + // public detDSA256() 2124 + // { 2125 + // super(new SHA256Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA256Digest()))); 2126 + // } 2127 + // } 2128 + // 2129 + // static public class dsa384 2130 + // extends DSASigner 2131 + // { 2132 + // public dsa384() 2133 + // { 2134 + // super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2135 + // } 2136 + // } 2137 + // 2138 + // static public class detDSA384 2139 + // extends DSASigner 2140 + // { 2141 + // public detDSA384() 2142 + // { 2143 + // super(new SHA384Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA384Digest()))); 2144 + // } 2145 + // } 2146 + // 2147 + // static public class dsa512 2148 + // extends DSASigner 2149 + // { 2150 + // public dsa512() 2151 + // { 2152 + // super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner()); 2153 + // } 2154 + // } 2155 + // 2156 + // static public class detDSA512 2157 + // extends DSASigner 2158 + // { 2159 + // public detDSA512() 2160 + // { 2161 + // super(new SHA512Digest(), new org.bouncycastle.crypto.signers.DSASigner(new HMacDSAKCalculator(new SHA512Digest()))); 2162 + // } 2163 + // } 2164 + // END android-removed 2165 2166 static public class noneDSA 2167 extends DSASigner 2168 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java 2169 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java 2015-03-01 12:03:02.000000000 +0000 2170 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java 2015-06-01 19:10:55.000000000 +0000 2171 @@ -23,6 +23,9 @@ 2172 public static final ASN1ObjectIdentifier[] dsaOids = 2173 { 2174 X9ObjectIdentifiers.id_dsa, 2175 + // BEGIN android-added 2176 + X9ObjectIdentifiers.id_dsa_with_sha1, 2177 + // END android-added 2178 OIWObjectIdentifiers.dsaWithSHA1 2179 }; 2180 2181 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2182 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2015-03-01 12:03:02.000000000 +0000 2183 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyAgreementSpi.java 2015-07-07 18:14:00.000000000 +0000 2184 @@ -24,22 +24,28 @@ 2185 import org.bouncycastle.crypto.CipherParameters; 2186 import org.bouncycastle.crypto.DerivationFunction; 2187 import org.bouncycastle.crypto.agreement.ECDHBasicAgreement; 2188 -import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement; 2189 -import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement; 2190 -import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters; 2191 -import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator; 2192 +// BEGIN android-removed 2193 +// import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement; 2194 +// import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement; 2195 +// import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters; 2196 +// import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator; 2197 +// END android-removed 2198 import org.bouncycastle.crypto.digests.SHA1Digest; 2199 import org.bouncycastle.crypto.params.DESParameters; 2200 import org.bouncycastle.crypto.params.ECDomainParameters; 2201 import org.bouncycastle.crypto.params.ECPrivateKeyParameters; 2202 import org.bouncycastle.crypto.params.ECPublicKeyParameters; 2203 -import org.bouncycastle.crypto.params.MQVPrivateParameters; 2204 -import org.bouncycastle.crypto.params.MQVPublicParameters; 2205 +// BEGIN android-removed 2206 +// import org.bouncycastle.crypto.params.MQVPrivateParameters; 2207 +// import org.bouncycastle.crypto.params.MQVPublicParameters; 2208 +// END android-removed 2209 import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil; 2210 import org.bouncycastle.jce.interfaces.ECPrivateKey; 2211 import org.bouncycastle.jce.interfaces.ECPublicKey; 2212 -import org.bouncycastle.jce.interfaces.MQVPrivateKey; 2213 -import org.bouncycastle.jce.interfaces.MQVPublicKey; 2214 +// BEGIN android-removed 2215 +// import org.bouncycastle.jce.interfaces.MQVPrivateKey; 2216 +// import org.bouncycastle.jce.interfaces.MQVPublicKey; 2217 +// END android-removed 2218 import org.bouncycastle.util.Integers; 2219 import org.bouncycastle.util.Strings; 2220 2221 @@ -89,7 +95,9 @@ 2222 private BigInteger result; 2223 private ECDomainParameters parameters; 2224 private BasicAgreement agreement; 2225 - private DerivationFunction kdf; 2226 + // BEGIN android-removed 2227 + // private DerivationFunction kdf; 2228 + // END android-removed 2229 2230 private byte[] bigIntToBytes( 2231 BigInteger r) 2232 @@ -104,7 +112,9 @@ 2233 { 2234 this.kaAlgorithm = kaAlgorithm; 2235 this.agreement = agreement; 2236 - this.kdf = kdf; 2237 + // BEGIN android-removed 2238 + // this.kdf = kdf; 2239 + // END android-removed 2240 } 2241 2242 protected Key engineDoPhase( 2243 @@ -123,25 +133,27 @@ 2244 } 2245 2246 CipherParameters pubKey; 2247 - if (agreement instanceof ECMQVBasicAgreement) 2248 - { 2249 - if (!(key instanceof MQVPublicKey)) 2250 - { 2251 - throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2252 - + getSimpleName(MQVPublicKey.class) + " for doPhase"); 2253 - } 2254 - 2255 - MQVPublicKey mqvPubKey = (MQVPublicKey)key; 2256 - ECPublicKeyParameters staticKey = (ECPublicKeyParameters) 2257 - ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey()); 2258 - ECPublicKeyParameters ephemKey = (ECPublicKeyParameters) 2259 - ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey()); 2260 - 2261 - pubKey = new MQVPublicParameters(staticKey, ephemKey); 2262 - 2263 - // TODO Validate that all the keys are using the same parameters? 2264 - } 2265 - else 2266 + // BEGIN android-removed 2267 + // if (agreement instanceof ECMQVBasicAgreement) 2268 + // { 2269 + // if (!(key instanceof MQVPublicKey)) 2270 + // { 2271 + // throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2272 + // + getSimpleName(MQVPublicKey.class) + " for doPhase"); 2273 + // } 2274 + // 2275 + // MQVPublicKey mqvPubKey = (MQVPublicKey)key; 2276 + // ECPublicKeyParameters staticKey = (ECPublicKeyParameters) 2277 + // ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey()); 2278 + // ECPublicKeyParameters ephemKey = (ECPublicKeyParameters) 2279 + // ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey()); 2280 + // 2281 + // pubKey = new MQVPublicParameters(staticKey, ephemKey); 2282 + // 2283 + // // TODO Validate that all the keys are using the same parameters? 2284 + // } 2285 + // else 2286 + // END android-removed 2287 { 2288 if (!(key instanceof PublicKey)) 2289 { 2290 @@ -154,7 +166,15 @@ 2291 // TODO Validate that all the keys are using the same parameters? 2292 } 2293 2294 + // BEGIN android-added 2295 + try { 2296 + // END android-added 2297 result = agreement.calculateAgreement(pubKey); 2298 + // BEGIN android-added 2299 + } catch (IllegalStateException e) { 2300 + throw new InvalidKeyException("Invalid public key"); 2301 + } 2302 + // END android-added 2303 2304 return null; 2305 } 2306 @@ -162,11 +182,13 @@ 2307 protected byte[] engineGenerateSecret() 2308 throws IllegalStateException 2309 { 2310 - if (kdf != null) 2311 - { 2312 - throw new UnsupportedOperationException( 2313 - "KDF can only be used when algorithm is known"); 2314 - } 2315 + // BEGIN android-removed 2316 + // if (kdf != null) 2317 + // { 2318 + // throw new UnsupportedOperationException( 2319 + // "KDF can only be used when algorithm is known"); 2320 + // } 2321 + // END android-removed 2322 2323 return bigIntToBytes(result); 2324 } 2325 @@ -201,23 +223,25 @@ 2326 oidAlgorithm = ((ASN1ObjectIdentifier)oids.get(algKey)).getId(); 2327 } 2328 2329 - if (kdf != null) 2330 - { 2331 - if (!algorithms.containsKey(oidAlgorithm)) 2332 - { 2333 - throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm); 2334 - } 2335 - 2336 - int keySize = ((Integer)algorithms.get(oidAlgorithm)).intValue(); 2337 - 2338 - DHKDFParameters params = new DHKDFParameters(new ASN1ObjectIdentifier(oidAlgorithm), keySize, secret); 2339 - 2340 - byte[] keyBytes = new byte[keySize / 8]; 2341 - kdf.init(params); 2342 - kdf.generateBytes(keyBytes, 0, keyBytes.length); 2343 - secret = keyBytes; 2344 - } 2345 - else 2346 + // BEGIN android-removed 2347 + // if (kdf != null) 2348 + // { 2349 + // if (!algorithms.containsKey(oidAlgorithm)) 2350 + // { 2351 + // throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm); 2352 + // } 2353 + // 2354 + // int keySize = ((Integer)algorithms.get(oidAlgorithm)).intValue(); 2355 + // 2356 + // DHKDFParameters params = new DHKDFParameters(new ASN1ObjectIdentifier(oidAlgorithm), keySize, secret); 2357 + // 2358 + // byte[] keyBytes = new byte[keySize / 8]; 2359 + // kdf.init(params); 2360 + // kdf.generateBytes(keyBytes, 0, keyBytes.length); 2361 + // secret = keyBytes; 2362 + // } 2363 + // else 2364 + // END android-removed 2365 { 2366 if (algorithms.containsKey(oidAlgorithm)) 2367 { 2368 @@ -264,35 +288,37 @@ 2369 private void initFromKey(Key key) 2370 throws InvalidKeyException 2371 { 2372 - if (agreement instanceof ECMQVBasicAgreement) 2373 - { 2374 - if (!(key instanceof MQVPrivateKey)) 2375 - { 2376 - throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2377 - + getSimpleName(MQVPrivateKey.class) + " for initialisation"); 2378 - } 2379 - 2380 - MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key; 2381 - ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters) 2382 - ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey()); 2383 - ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters) 2384 - ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey()); 2385 - 2386 - ECPublicKeyParameters ephemPubKey = null; 2387 - if (mqvPrivKey.getEphemeralPublicKey() != null) 2388 - { 2389 - ephemPubKey = (ECPublicKeyParameters) 2390 - ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey()); 2391 - } 2392 - 2393 - MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey); 2394 - this.parameters = staticPrivKey.getParameters(); 2395 - 2396 - // TODO Validate that all the keys are using the same parameters? 2397 - 2398 - agreement.init(localParams); 2399 - } 2400 - else 2401 + // BEGIN android-removed 2402 + // if (agreement instanceof ECMQVBasicAgreement) 2403 + // { 2404 + // if (!(key instanceof MQVPrivateKey)) 2405 + // { 2406 + // throw new InvalidKeyException(kaAlgorithm + " key agreement requires " 2407 + // + getSimpleName(MQVPrivateKey.class) + " for initialisation"); 2408 + // } 2409 + // 2410 + // MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key; 2411 + // ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters) 2412 + // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey()); 2413 + // ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters) 2414 + // ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey()); 2415 + // 2416 + // ECPublicKeyParameters ephemPubKey = null; 2417 + // if (mqvPrivKey.getEphemeralPublicKey() != null) 2418 + // { 2419 + // ephemPubKey = (ECPublicKeyParameters) 2420 + // ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey()); 2421 + // } 2422 + // 2423 + // MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey); 2424 + // this.parameters = staticPrivKey.getParameters(); 2425 + // 2426 + // // TODO Validate that all the keys are using the same parameters? 2427 + // 2428 + // agreement.init(localParams); 2429 + // } 2430 + // else 2431 + // END android-removed 2432 { 2433 if (!(key instanceof PrivateKey)) 2434 { 2435 @@ -323,39 +349,41 @@ 2436 } 2437 } 2438 2439 - public static class DHC 2440 - extends KeyAgreementSpi 2441 - { 2442 - public DHC() 2443 - { 2444 - super("ECDHC", new ECDHCBasicAgreement(), null); 2445 - } 2446 - } 2447 - 2448 - public static class MQV 2449 - extends KeyAgreementSpi 2450 - { 2451 - public MQV() 2452 - { 2453 - super("ECMQV", new ECMQVBasicAgreement(), null); 2454 - } 2455 - } 2456 - 2457 - public static class DHwithSHA1KDF 2458 - extends KeyAgreementSpi 2459 - { 2460 - public DHwithSHA1KDF() 2461 - { 2462 - super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2463 - } 2464 - } 2465 - 2466 - public static class MQVwithSHA1KDF 2467 - extends KeyAgreementSpi 2468 - { 2469 - public MQVwithSHA1KDF() 2470 - { 2471 - super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2472 - } 2473 - } 2474 + // BEGIN android-removed 2475 + // public static class DHC 2476 + // extends KeyAgreementSpi 2477 + // { 2478 + // public DHC() 2479 + // { 2480 + // super("ECDHC", new ECDHCBasicAgreement(), null); 2481 + // } 2482 + // } 2483 + // 2484 + // public static class MQV 2485 + // extends KeyAgreementSpi 2486 + // { 2487 + // public MQV() 2488 + // { 2489 + // super("ECMQV", new ECMQVBasicAgreement(), null); 2490 + // } 2491 + // } 2492 + // 2493 + // public static class DHwithSHA1KDF 2494 + // extends KeyAgreementSpi 2495 + // { 2496 + // public DHwithSHA1KDF() 2497 + // { 2498 + // super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2499 + // } 2500 + // } 2501 + // 2502 + // public static class MQVwithSHA1KDF 2503 + // extends KeyAgreementSpi 2504 + // { 2505 + // public MQVwithSHA1KDF() 2506 + // { 2507 + // super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest())); 2508 + // } 2509 + // } 2510 + // END android-removed 2511 } 2512 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2513 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2015-03-01 12:03:02.000000000 +0000 2514 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi.java 2013-05-25 02:14:15.000000000 +0000 2515 @@ -201,14 +201,16 @@ 2516 } 2517 } 2518 2519 - public static class ECGOST3410 2520 - extends KeyFactorySpi 2521 - { 2522 - public ECGOST3410() 2523 - { 2524 - super("ECGOST3410", BouncyCastleProvider.CONFIGURATION); 2525 - } 2526 - } 2527 + // BEGIN android-removed 2528 + // public static class ECGOST3410 2529 + // extends KeyFactorySpi 2530 + // { 2531 + // public ECGOST3410() 2532 + // { 2533 + // super("ECGOST3410", BouncyCastleProvider.CONFIGURATION); 2534 + // } 2535 + // } 2536 + // END android-removed 2537 2538 public static class ECDH 2539 extends KeyFactorySpi 2540 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2541 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2015-03-01 12:03:02.000000000 +0000 2542 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/KeyPairGeneratorSpi.java 2015-05-12 17:22:22.000000000 +0000 2543 @@ -42,7 +42,9 @@ 2544 ECKeyGenerationParameters param; 2545 ECKeyPairGenerator engine = new ECKeyPairGenerator(); 2546 Object ecParams = null; 2547 - int strength = 239; 2548 + // BEGIN android-changed 2549 + int strength = 256; 2550 + // BEGIN android-changed 2551 int certainty = 50; 2552 SecureRandom random = new SecureRandom(); 2553 boolean initialised = false; 2554 @@ -84,7 +86,13 @@ 2555 SecureRandom random) 2556 { 2557 this.strength = strength; 2558 + // BEGIN android-added 2559 + if (random != null) { 2560 + // END android-added 2561 this.random = random; 2562 + // BEGIN android-added 2563 + } 2564 + // END android-added 2565 2566 ECGenParameterSpec ecParams = (ECGenParameterSpec)ecParameters.get(Integers.valueOf(strength)); 2567 if (ecParams == null) 2568 @@ -107,6 +115,11 @@ 2569 SecureRandom random) 2570 throws InvalidAlgorithmParameterException 2571 { 2572 + // BEGIN android-added 2573 + if (random == null) { 2574 + random = this.random; 2575 + } 2576 + // END android-added 2577 if (params == null) 2578 { 2579 ECParameterSpec implicitCA = configuration.getEcImplicitlyCa(); 2580 @@ -267,4 +280,4 @@ 2581 super("ECMQV", BouncyCastleProvider.CONFIGURATION); 2582 } 2583 } 2584 -} 2585 \ No newline at end of file 2586 +} 2587 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2588 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2015-03-01 12:03:02.000000000 +0000 2589 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/ec/SignatureSpi.java 2014-07-28 19:51:54.000000000 +0000 2590 @@ -16,16 +16,23 @@ 2591 import org.bouncycastle.crypto.DSA; 2592 import org.bouncycastle.crypto.Digest; 2593 import org.bouncycastle.crypto.digests.NullDigest; 2594 -import org.bouncycastle.crypto.digests.RIPEMD160Digest; 2595 -import org.bouncycastle.crypto.digests.SHA1Digest; 2596 -import org.bouncycastle.crypto.digests.SHA224Digest; 2597 -import org.bouncycastle.crypto.digests.SHA256Digest; 2598 -import org.bouncycastle.crypto.digests.SHA384Digest; 2599 -import org.bouncycastle.crypto.digests.SHA512Digest; 2600 +// BEGIN android-added 2601 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 2602 +// END android-added 2603 +// BEGIN android-removed 2604 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 2605 +// import org.bouncycastle.crypto.digests.SHA1Digest; 2606 +// import org.bouncycastle.crypto.digests.SHA224Digest; 2607 +// import org.bouncycastle.crypto.digests.SHA256Digest; 2608 +// import org.bouncycastle.crypto.digests.SHA384Digest; 2609 +// import org.bouncycastle.crypto.digests.SHA512Digest; 2610 +// END android-removed 2611 import org.bouncycastle.crypto.params.ParametersWithRandom; 2612 import org.bouncycastle.crypto.signers.ECDSASigner; 2613 -import org.bouncycastle.crypto.signers.ECNRSigner; 2614 -import org.bouncycastle.crypto.signers.HMacDSAKCalculator; 2615 +// BEGIN android-removed 2616 +// import org.bouncycastle.crypto.signers.ECNRSigner; 2617 +// import org.bouncycastle.crypto.signers.HMacDSAKCalculator; 2618 +// END android-removed 2619 import org.bouncycastle.jcajce.provider.asymmetric.util.DSABase; 2620 import org.bouncycastle.jcajce.provider.asymmetric.util.DSAEncoder; 2621 import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil; 2622 @@ -70,18 +77,22 @@ 2623 { 2624 public ecDSA() 2625 { 2626 - super(new SHA1Digest(), new ECDSASigner(), new StdDSAEncoder()); 2627 + // BEGIN android-changed 2628 + super(AndroidDigestFactory.getSHA1(), new ECDSASigner(), new StdDSAEncoder()); 2629 + // END android-changed 2630 } 2631 } 2632 2633 - static public class ecDetDSA 2634 - extends SignatureSpi 2635 - { 2636 - public ecDetDSA() 2637 - { 2638 - super(new SHA1Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA1Digest())), new StdDSAEncoder()); 2639 - } 2640 - } 2641 + // BEGIN android-removed 2642 + // static public class ecDetDSA 2643 + // extends SignatureSpi 2644 + // { 2645 + // public ecDetDSA() 2646 + // { 2647 + // super(new SHA1Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA1Digest())), new StdDSAEncoder()); 2648 + // } 2649 + // } 2650 + // END android-removed 2651 2652 static public class ecDSAnone 2653 extends SignatureSpi 2654 @@ -97,180 +108,196 @@ 2655 { 2656 public ecDSA224() 2657 { 2658 - super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder()); 2659 + // BEGIN android-changed 2660 + super(AndroidDigestFactory.getSHA224(), new ECDSASigner(), new StdDSAEncoder()); 2661 + // END android-changed 2662 } 2663 } 2664 2665 - static public class ecDetDSA224 2666 - extends SignatureSpi 2667 - { 2668 - public ecDetDSA224() 2669 - { 2670 - super(new SHA224Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA224Digest())), new StdDSAEncoder()); 2671 - } 2672 - } 2673 + // BEGIN android-removed 2674 + // static public class ecDetDSA224 2675 + // extends SignatureSpi 2676 + // { 2677 + // public ecDetDSA224() 2678 + // { 2679 + // super(new SHA224Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA224Digest())), new StdDSAEncoder()); 2680 + // } 2681 + // } 2682 + // END android-removed 2683 2684 static public class ecDSA256 2685 extends SignatureSpi 2686 { 2687 public ecDSA256() 2688 { 2689 - super(new SHA256Digest(), new ECDSASigner(), new StdDSAEncoder()); 2690 + // BEGIN android-changed 2691 + super(AndroidDigestFactory.getSHA256(), new ECDSASigner(), new StdDSAEncoder()); 2692 + // END android-changed 2693 } 2694 } 2695 2696 - static public class ecDetDSA256 2697 - extends SignatureSpi 2698 - { 2699 - public ecDetDSA256() 2700 - { 2701 - super(new SHA256Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest())), new StdDSAEncoder()); 2702 - } 2703 - } 2704 + // BEGIN android-removed 2705 + // static public class ecDetDSA256 2706 + // extends SignatureSpi 2707 + // { 2708 + // public ecDetDSA256() 2709 + // { 2710 + // super(new SHA256Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA256Digest())), new StdDSAEncoder()); 2711 + // } 2712 + // } 2713 + // END android-removed 2714 2715 static public class ecDSA384 2716 extends SignatureSpi 2717 { 2718 public ecDSA384() 2719 { 2720 - super(new SHA384Digest(), new ECDSASigner(), new StdDSAEncoder()); 2721 + // BEGIN android-changed 2722 + super(AndroidDigestFactory.getSHA384(), new ECDSASigner(), new StdDSAEncoder()); 2723 + // END android-changed 2724 } 2725 } 2726 2727 - static public class ecDetDSA384 2728 - extends SignatureSpi 2729 - { 2730 - public ecDetDSA384() 2731 - { 2732 - super(new SHA384Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA384Digest())), new StdDSAEncoder()); 2733 - } 2734 - } 2735 + // BEGIN android-removed 2736 + // static public class ecDetDSA384 2737 + // extends SignatureSpi 2738 + // { 2739 + // public ecDetDSA384() 2740 + // { 2741 + // super(new SHA384Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA384Digest())), new StdDSAEncoder()); 2742 + // } 2743 + // } 2744 + // END android-removed 2745 2746 static public class ecDSA512 2747 extends SignatureSpi 2748 { 2749 public ecDSA512() 2750 { 2751 - super(new SHA512Digest(), new ECDSASigner(), new StdDSAEncoder()); 2752 - } 2753 - } 2754 - 2755 - static public class ecDetDSA512 2756 - extends SignatureSpi 2757 - { 2758 - public ecDetDSA512() 2759 - { 2760 - super(new SHA512Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA512Digest())), new StdDSAEncoder()); 2761 - } 2762 - } 2763 - 2764 - static public class ecDSARipeMD160 2765 - extends SignatureSpi 2766 - { 2767 - public ecDSARipeMD160() 2768 - { 2769 - super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder()); 2770 - } 2771 - } 2772 - 2773 - static public class ecNR 2774 - extends SignatureSpi 2775 - { 2776 - public ecNR() 2777 - { 2778 - super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder()); 2779 - } 2780 - } 2781 - 2782 - static public class ecNR224 2783 - extends SignatureSpi 2784 - { 2785 - public ecNR224() 2786 - { 2787 - super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder()); 2788 - } 2789 - } 2790 - 2791 - static public class ecNR256 2792 - extends SignatureSpi 2793 - { 2794 - public ecNR256() 2795 - { 2796 - super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder()); 2797 - } 2798 - } 2799 - 2800 - static public class ecNR384 2801 - extends SignatureSpi 2802 - { 2803 - public ecNR384() 2804 - { 2805 - super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder()); 2806 - } 2807 - } 2808 - 2809 - static public class ecNR512 2810 - extends SignatureSpi 2811 - { 2812 - public ecNR512() 2813 - { 2814 - super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder()); 2815 - } 2816 - } 2817 - 2818 - static public class ecCVCDSA 2819 - extends SignatureSpi 2820 - { 2821 - public ecCVCDSA() 2822 - { 2823 - super(new SHA1Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2824 - } 2825 - } 2826 - 2827 - static public class ecCVCDSA224 2828 - extends SignatureSpi 2829 - { 2830 - public ecCVCDSA224() 2831 - { 2832 - super(new SHA224Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2833 - } 2834 - } 2835 - 2836 - static public class ecCVCDSA256 2837 - extends SignatureSpi 2838 - { 2839 - public ecCVCDSA256() 2840 - { 2841 - super(new SHA256Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2842 - } 2843 - } 2844 - 2845 - static public class ecCVCDSA384 2846 - extends SignatureSpi 2847 - { 2848 - public ecCVCDSA384() 2849 - { 2850 - super(new SHA384Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2851 - } 2852 - } 2853 - 2854 - static public class ecCVCDSA512 2855 - extends SignatureSpi 2856 - { 2857 - public ecCVCDSA512() 2858 - { 2859 - super(new SHA512Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2860 - } 2861 - } 2862 - 2863 - static public class ecPlainDSARP160 2864 - extends SignatureSpi 2865 - { 2866 - public ecPlainDSARP160() 2867 - { 2868 - super(new RIPEMD160Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2869 - } 2870 - } 2871 + // BEGIN android-changed 2872 + super(AndroidDigestFactory.getSHA512(), new ECDSASigner(), new StdDSAEncoder()); 2873 + // END android-changed 2874 + } 2875 + } 2876 + 2877 + // BEGIN android-removed 2878 + // static public class ecDetDSA512 2879 + // extends SignatureSpi 2880 + // { 2881 + // public ecDetDSA512() 2882 + // { 2883 + // super(new SHA512Digest(), new ECDSASigner(new HMacDSAKCalculator(new SHA512Digest())), new StdDSAEncoder()); 2884 + // } 2885 + // } 2886 + // 2887 + // static public class ecDSARipeMD160 2888 + // extends SignatureSpi 2889 + // { 2890 + // public ecDSARipeMD160() 2891 + // { 2892 + // super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder()); 2893 + // } 2894 + // } 2895 + // 2896 + // static public class ecNR 2897 + // extends SignatureSpi 2898 + // { 2899 + // public ecNR() 2900 + // { 2901 + // super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder()); 2902 + // } 2903 + // } 2904 + // 2905 + // static public class ecNR224 2906 + // extends SignatureSpi 2907 + // { 2908 + // public ecNR224() 2909 + // { 2910 + // super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder()); 2911 + // } 2912 + // } 2913 + // 2914 + // static public class ecNR256 2915 + // extends SignatureSpi 2916 + // { 2917 + // public ecNR256() 2918 + // { 2919 + // super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder()); 2920 + // } 2921 + // } 2922 + // 2923 + // static public class ecNR384 2924 + // extends SignatureSpi 2925 + // { 2926 + // public ecNR384() 2927 + // { 2928 + // super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder()); 2929 + // } 2930 + // } 2931 + // 2932 + // static public class ecNR512 2933 + // extends SignatureSpi 2934 + // { 2935 + // public ecNR512() 2936 + // { 2937 + // super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder()); 2938 + // } 2939 + // } 2940 + // 2941 + // static public class ecCVCDSA 2942 + // extends SignatureSpi 2943 + // { 2944 + // public ecCVCDSA() 2945 + // { 2946 + // super(new SHA1Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2947 + // } 2948 + // } 2949 + // 2950 + // static public class ecCVCDSA224 2951 + // extends SignatureSpi 2952 + // { 2953 + // public ecCVCDSA224() 2954 + // { 2955 + // super(new SHA224Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2956 + // } 2957 + // } 2958 + // 2959 + // static public class ecCVCDSA256 2960 + // extends SignatureSpi 2961 + // { 2962 + // public ecCVCDSA256() 2963 + // { 2964 + // super(new SHA256Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2965 + // } 2966 + // } 2967 + // 2968 + // static public class ecCVCDSA384 2969 + // extends SignatureSpi 2970 + // { 2971 + // public ecCVCDSA384() 2972 + // { 2973 + // super(new SHA384Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2974 + // } 2975 + // } 2976 + // 2977 + // static public class ecCVCDSA512 2978 + // extends SignatureSpi 2979 + // { 2980 + // public ecCVCDSA512() 2981 + // { 2982 + // super(new SHA512Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2983 + // } 2984 + // } 2985 + // 2986 + // static public class ecPlainDSARP160 2987 + // extends SignatureSpi 2988 + // { 2989 + // public ecPlainDSARP160() 2990 + // { 2991 + // super(new RIPEMD160Digest(), new ECDSASigner(), new PlainDSAEncoder()); 2992 + // } 2993 + // } 2994 + // END android-removed 2995 2996 private static class StdDSAEncoder 2997 implements DSAEncoder 2998 @@ -302,66 +329,68 @@ 2999 } 3000 } 3001 3002 - private static class PlainDSAEncoder 3003 - implements DSAEncoder 3004 - { 3005 - public byte[] encode( 3006 - BigInteger r, 3007 - BigInteger s) 3008 - throws IOException 3009 - { 3010 - byte[] first = makeUnsigned(r); 3011 - byte[] second = makeUnsigned(s); 3012 - byte[] res; 3013 - 3014 - if (first.length > second.length) 3015 - { 3016 - res = new byte[first.length * 2]; 3017 - } 3018 - else 3019 - { 3020 - res = new byte[second.length * 2]; 3021 - } 3022 - 3023 - System.arraycopy(first, 0, res, res.length / 2 - first.length, first.length); 3024 - System.arraycopy(second, 0, res, res.length - second.length, second.length); 3025 - 3026 - return res; 3027 - } 3028 - 3029 - 3030 - private byte[] makeUnsigned(BigInteger val) 3031 - { 3032 - byte[] res = val.toByteArray(); 3033 - 3034 - if (res[0] == 0) 3035 - { 3036 - byte[] tmp = new byte[res.length - 1]; 3037 - 3038 - System.arraycopy(res, 1, tmp, 0, tmp.length); 3039 - 3040 - return tmp; 3041 - } 3042 - 3043 - return res; 3044 - } 3045 - 3046 - public BigInteger[] decode( 3047 - byte[] encoding) 3048 - throws IOException 3049 - { 3050 - BigInteger[] sig = new BigInteger[2]; 3051 - 3052 - byte[] first = new byte[encoding.length / 2]; 3053 - byte[] second = new byte[encoding.length / 2]; 3054 - 3055 - System.arraycopy(encoding, 0, first, 0, first.length); 3056 - System.arraycopy(encoding, first.length, second, 0, second.length); 3057 - 3058 - sig[0] = new BigInteger(1, first); 3059 - sig[1] = new BigInteger(1, second); 3060 - 3061 - return sig; 3062 - } 3063 - } 3064 -} 3065 \ No newline at end of file 3066 + // BEGIN android-removed 3067 + // private static class PlainDSAEncoder 3068 + // implements DSAEncoder 3069 + // { 3070 + // public byte[] encode( 3071 + // BigInteger r, 3072 + // BigInteger s) 3073 + // throws IOException 3074 + // { 3075 + // byte[] first = makeUnsigned(r); 3076 + // byte[] second = makeUnsigned(s); 3077 + // byte[] res; 3078 + // 3079 + // if (first.length > second.length) 3080 + // { 3081 + // res = new byte[first.length * 2]; 3082 + // } 3083 + // else 3084 + // { 3085 + // res = new byte[second.length * 2]; 3086 + // } 3087 + // 3088 + // System.arraycopy(first, 0, res, res.length / 2 - first.length, first.length); 3089 + // System.arraycopy(second, 0, res, res.length - second.length, second.length); 3090 + // 3091 + // return res; 3092 + // } 3093 + // 3094 + // 3095 + // private byte[] makeUnsigned(BigInteger val) 3096 + // { 3097 + // byte[] res = val.toByteArray(); 3098 + // 3099 + // if (res[0] == 0) 3100 + // { 3101 + // byte[] tmp = new byte[res.length - 1]; 3102 + // 3103 + // System.arraycopy(res, 1, tmp, 0, tmp.length); 3104 + // 3105 + // return tmp; 3106 + // } 3107 + // 3108 + // return res; 3109 + // } 3110 + // 3111 + // public BigInteger[] decode( 3112 + // byte[] encoding) 3113 + // throws IOException 3114 + // { 3115 + // BigInteger[] sig = new BigInteger[2]; 3116 + // 3117 + // byte[] first = new byte[encoding.length / 2]; 3118 + // byte[] second = new byte[encoding.length / 2]; 3119 + // 3120 + // System.arraycopy(encoding, 0, first, 0, first.length); 3121 + // System.arraycopy(encoding, first.length, second, 0, second.length); 3122 + // 3123 + // sig[0] = new BigInteger(1, first); 3124 + // sig[1] = new BigInteger(1, second); 3125 + // 3126 + // return sig; 3127 + // } 3128 + // } 3129 + // END android-removed 3130 +} 3131 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 3132 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2015-03-01 12:03:02.000000000 +0000 3133 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/rsa/CipherSpi.java 2015-04-09 13:10:16.000000000 +0000 3134 @@ -26,7 +26,9 @@ 3135 import org.bouncycastle.crypto.CipherParameters; 3136 import org.bouncycastle.crypto.Digest; 3137 import org.bouncycastle.crypto.InvalidCipherTextException; 3138 -import org.bouncycastle.crypto.encodings.ISO9796d1Encoding; 3139 +// BEGIN android-removed 3140 +// import org.bouncycastle.crypto.encodings.ISO9796d1Encoding; 3141 +// END android-removed 3142 import org.bouncycastle.crypto.encodings.OAEPEncoding; 3143 import org.bouncycastle.crypto.encodings.PKCS1Encoding; 3144 import org.bouncycastle.crypto.engines.RSABlindedEngine; 3145 @@ -201,10 +203,12 @@ 3146 { 3147 cipher = new PKCS1Encoding(new RSABlindedEngine()); 3148 } 3149 - else if (pad.equals("ISO9796-1PADDING")) 3150 - { 3151 - cipher = new ISO9796d1Encoding(new RSABlindedEngine()); 3152 - } 3153 + // BEGIN android-removed 3154 + // else if (pad.equals("ISO9796-1PADDING")) 3155 + // { 3156 + // cipher = new ISO9796d1Encoding(new RSABlindedEngine()); 3157 + // } 3158 + // END android-removed 3159 else if (pad.equals("OAEPWITHMD5ANDMGF1PADDING")) 3160 { 3161 initFromSpec(new OAEPParameterSpec("MD5", "MGF1", new MGF1ParameterSpec("MD5"), PSource.PSpecified.DEFAULT)); 3162 @@ -543,48 +547,50 @@ 3163 } 3164 } 3165 3166 - static public class PKCS1v1_5Padding 3167 - extends CipherSpi 3168 - { 3169 - public PKCS1v1_5Padding() 3170 - { 3171 - super(new PKCS1Encoding(new RSABlindedEngine())); 3172 - } 3173 - } 3174 - 3175 - static public class PKCS1v1_5Padding_PrivateOnly 3176 - extends CipherSpi 3177 - { 3178 - public PKCS1v1_5Padding_PrivateOnly() 3179 - { 3180 - super(false, true, new PKCS1Encoding(new RSABlindedEngine())); 3181 - } 3182 - } 3183 - 3184 - static public class PKCS1v1_5Padding_PublicOnly 3185 - extends CipherSpi 3186 - { 3187 - public PKCS1v1_5Padding_PublicOnly() 3188 - { 3189 - super(true, false, new PKCS1Encoding(new RSABlindedEngine())); 3190 - } 3191 - } 3192 - 3193 - static public class OAEPPadding 3194 - extends CipherSpi 3195 - { 3196 - public OAEPPadding() 3197 - { 3198 - super(OAEPParameterSpec.DEFAULT); 3199 - } 3200 - } 3201 - 3202 - static public class ISO9796d1Padding 3203 - extends CipherSpi 3204 - { 3205 - public ISO9796d1Padding() 3206 - { 3207 - super(new ISO9796d1Encoding(new RSABlindedEngine())); 3208 - } 3209 - } 3210 + // BEGIN android-removed 3211 + // static public class PKCS1v1_5Padding 3212 + // extends CipherSpi 3213 + // { 3214 + // public PKCS1v1_5Padding() 3215 + // { 3216 + // super(new PKCS1Encoding(new RSABlindedEngine())); 3217 + // } 3218 + // } 3219 + // 3220 + // static public class PKCS1v1_5Padding_PrivateOnly 3221 + // extends CipherSpi 3222 + // { 3223 + // public PKCS1v1_5Padding_PrivateOnly() 3224 + // { 3225 + // super(false, true, new PKCS1Encoding(new RSABlindedEngine())); 3226 + // } 3227 + // } 3228 + // 3229 + // static public class PKCS1v1_5Padding_PublicOnly 3230 + // extends CipherSpi 3231 + // { 3232 + // public PKCS1v1_5Padding_PublicOnly() 3233 + // { 3234 + // super(true, false, new PKCS1Encoding(new RSABlindedEngine())); 3235 + // } 3236 + // } 3237 + // 3238 + // static public class OAEPPadding 3239 + // extends CipherSpi 3240 + // { 3241 + // public OAEPPadding() 3242 + // { 3243 + // super(OAEPParameterSpec.DEFAULT); 3244 + // } 3245 + // } 3246 + // 3247 + // static public class ISO9796d1Padding 3248 + // extends CipherSpi 3249 + // { 3250 + // public ISO9796d1Padding() 3251 + // { 3252 + // super(new ISO9796d1Encoding(new RSABlindedEngine())); 3253 + // } 3254 + // } 3255 + // END android-removed 3256 } 3257 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 3258 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 2015-03-01 12:03:02.000000000 +0000 3259 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/rsa/DigestSignatureSpi.java 2015-04-09 13:10:16.000000000 +0000 3260 @@ -17,24 +17,31 @@ 3261 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 3262 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 3263 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 3264 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 3265 +// BEGIN android-removed 3266 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 3267 +// END android-removed 3268 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 3269 import org.bouncycastle.asn1.x509.DigestInfo; 3270 import org.bouncycastle.crypto.AsymmetricBlockCipher; 3271 import org.bouncycastle.crypto.CipherParameters; 3272 import org.bouncycastle.crypto.Digest; 3273 -import org.bouncycastle.crypto.digests.MD2Digest; 3274 -import org.bouncycastle.crypto.digests.MD4Digest; 3275 -import org.bouncycastle.crypto.digests.MD5Digest; 3276 -import org.bouncycastle.crypto.digests.NullDigest; 3277 -import org.bouncycastle.crypto.digests.RIPEMD128Digest; 3278 -import org.bouncycastle.crypto.digests.RIPEMD160Digest; 3279 -import org.bouncycastle.crypto.digests.RIPEMD256Digest; 3280 -import org.bouncycastle.crypto.digests.SHA1Digest; 3281 -import org.bouncycastle.crypto.digests.SHA224Digest; 3282 -import org.bouncycastle.crypto.digests.SHA256Digest; 3283 -import org.bouncycastle.crypto.digests.SHA384Digest; 3284 -import org.bouncycastle.crypto.digests.SHA512Digest; 3285 +// BEGIN android-removed 3286 +// import org.bouncycastle.crypto.digests.MD2Digest; 3287 +// import org.bouncycastle.crypto.digests.MD4Digest; 3288 +// import org.bouncycastle.crypto.digests.MD5Digest; 3289 +// import org.bouncycastle.crypto.digests.NullDigest; 3290 +// import org.bouncycastle.crypto.digests.RIPEMD128Digest; 3291 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 3292 +// import org.bouncycastle.crypto.digests.RIPEMD256Digest; 3293 +// import org.bouncycastle.crypto.digests.SHA1Digest; 3294 +// import org.bouncycastle.crypto.digests.SHA224Digest; 3295 +// import org.bouncycastle.crypto.digests.SHA256Digest; 3296 +// import org.bouncycastle.crypto.digests.SHA384Digest; 3297 +// import org.bouncycastle.crypto.digests.SHA512Digest; 3298 +// END android-removed 3299 +// BEGIN android-added 3300 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 3301 +// END android-added 3302 import org.bouncycastle.crypto.encodings.PKCS1Encoding; 3303 import org.bouncycastle.crypto.engines.RSABlindedEngine; 3304 import org.bouncycastle.util.Arrays; 3305 @@ -254,7 +261,9 @@ 3306 { 3307 public SHA1() 3308 { 3309 - super(OIWObjectIdentifiers.idSHA1, new SHA1Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3310 + // BEGIN android-changed 3311 + super(OIWObjectIdentifiers.idSHA1, AndroidDigestFactory.getSHA1(), new PKCS1Encoding(new RSABlindedEngine())); 3312 + // END android-changed 3313 } 3314 } 3315 3316 @@ -263,7 +272,9 @@ 3317 { 3318 public SHA224() 3319 { 3320 - super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3321 + // BEGIN android-changed 3322 + super(NISTObjectIdentifiers.id_sha224, AndroidDigestFactory.getSHA224(), new PKCS1Encoding(new RSABlindedEngine())); 3323 + // END android-changed 3324 } 3325 } 3326 3327 @@ -272,7 +283,9 @@ 3328 { 3329 public SHA256() 3330 { 3331 - super(NISTObjectIdentifiers.id_sha256, new SHA256Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3332 + // BEGIN android-changed 3333 + super(NISTObjectIdentifiers.id_sha256, AndroidDigestFactory.getSHA256(), new PKCS1Encoding(new RSABlindedEngine())); 3334 + // END android-changed 3335 } 3336 } 3337 3338 @@ -281,7 +294,9 @@ 3339 { 3340 public SHA384() 3341 { 3342 - super(NISTObjectIdentifiers.id_sha384, new SHA384Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3343 + // BEGIN android-changed 3344 + super(NISTObjectIdentifiers.id_sha384, AndroidDigestFactory.getSHA384(), new PKCS1Encoding(new RSABlindedEngine())); 3345 + // END android-changed 3346 } 3347 } 3348 3349 @@ -290,70 +305,78 @@ 3350 { 3351 public SHA512() 3352 { 3353 - super(NISTObjectIdentifiers.id_sha512, new SHA512Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3354 + // BEGIN android-changed 3355 + super(NISTObjectIdentifiers.id_sha512, AndroidDigestFactory.getSHA512(), new PKCS1Encoding(new RSABlindedEngine())); 3356 + // END android-changed 3357 } 3358 } 3359 3360 - static public class MD2 3361 - extends DigestSignatureSpi 3362 - { 3363 - public MD2() 3364 - { 3365 - super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3366 - } 3367 - } 3368 - 3369 - static public class MD4 3370 - extends DigestSignatureSpi 3371 - { 3372 - public MD4() 3373 - { 3374 - super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3375 - } 3376 - } 3377 + // BEGIN android-removed 3378 + // static public class MD2 3379 + // extends DigestSignatureSpi 3380 + // { 3381 + // public MD2() 3382 + // { 3383 + // super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3384 + // } 3385 + // } 3386 + // 3387 + // static public class MD4 3388 + // extends DigestSignatureSpi 3389 + // { 3390 + // public MD4() 3391 + // { 3392 + // super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3393 + // } 3394 + // } 3395 + // END android-removed 3396 3397 static public class MD5 3398 extends DigestSignatureSpi 3399 { 3400 public MD5() 3401 { 3402 - super(PKCSObjectIdentifiers.md5, new MD5Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3403 - } 3404 - } 3405 - 3406 - static public class RIPEMD160 3407 - extends DigestSignatureSpi 3408 - { 3409 - public RIPEMD160() 3410 - { 3411 - super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3412 + // BEGIN android-changed 3413 + super(PKCSObjectIdentifiers.md5, AndroidDigestFactory.getMD5(), new PKCS1Encoding(new RSABlindedEngine())); 3414 + // END android-changed 3415 } 3416 } 3417 3418 - static public class RIPEMD128 3419 - extends DigestSignatureSpi 3420 - { 3421 - public RIPEMD128() 3422 - { 3423 - super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3424 - } 3425 - } 3426 - 3427 - static public class RIPEMD256 3428 - extends DigestSignatureSpi 3429 - { 3430 - public RIPEMD256() 3431 - { 3432 - super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3433 - } 3434 - } 3435 - 3436 - static public class noneRSA 3437 - extends DigestSignatureSpi 3438 - { 3439 - public noneRSA() 3440 - { 3441 - super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine())); 3442 - } 3443 - } 3444 + // BEGIN android-removed 3445 + // static public class RIPEMD160 3446 + // extends DigestSignatureSpi 3447 + // { 3448 + // public RIPEMD160() 3449 + // { 3450 + // super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3451 + // } 3452 + // } 3453 + // 3454 + // static public class RIPEMD128 3455 + // extends DigestSignatureSpi 3456 + // { 3457 + // public RIPEMD128() 3458 + // { 3459 + // super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3460 + // } 3461 + // } 3462 + // 3463 + // static public class RIPEMD256 3464 + // extends DigestSignatureSpi 3465 + // { 3466 + // public RIPEMD256() 3467 + // { 3468 + // super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine())); 3469 + // } 3470 + // } 3471 + // 3472 + // static public class noneRSA 3473 + // extends DigestSignatureSpi 3474 + // { 3475 + // public noneRSA() 3476 + // { 3477 + // super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine())); 3478 + // } 3479 + // } 3480 + // END android-removed 3481 } 3482 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 3483 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 2015-03-01 12:03:02.000000000 +0000 3484 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/util/BaseCipherSpi.java 2015-04-09 13:10:16.000000000 +0000 3485 @@ -18,8 +18,10 @@ 3486 import javax.crypto.NoSuchPaddingException; 3487 import javax.crypto.spec.IvParameterSpec; 3488 import javax.crypto.spec.PBEParameterSpec; 3489 -import javax.crypto.spec.RC2ParameterSpec; 3490 -import javax.crypto.spec.RC5ParameterSpec; 3491 +// BEGIN android-removed 3492 +// import javax.crypto.spec.RC2ParameterSpec; 3493 +// import javax.crypto.spec.RC5ParameterSpec; 3494 +// END android-removed 3495 import javax.crypto.spec.SecretKeySpec; 3496 3497 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 3498 @@ -39,8 +41,10 @@ 3499 { 3500 IvParameterSpec.class, 3501 PBEParameterSpec.class, 3502 - RC2ParameterSpec.class, 3503 - RC5ParameterSpec.class 3504 + // BEGIN android-removed 3505 + // RC2ParameterSpec.class, 3506 + // RC5ParameterSpec.class 3507 + // END android-removed 3508 }; 3509 3510 private final JcaJceHelper helper = new BCJcaJceHelper(); 3511 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.java 3512 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.java 2015-03-01 12:03:02.000000000 +0000 3513 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/util/ECUtil.java 2015-04-09 13:10:16.000000000 +0000 3514 @@ -6,11 +6,15 @@ 3515 import java.security.PublicKey; 3516 3517 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 3518 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 3519 +// BEGIN android-removed 3520 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 3521 +// END android-removed 3522 import org.bouncycastle.asn1.nist.NISTNamedCurves; 3523 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 3524 import org.bouncycastle.asn1.sec.SECNamedCurves; 3525 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 3526 +// BEGIN android-removed 3527 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves; 3528 +// END android-removed 3529 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 3530 import org.bouncycastle.asn1.x9.X962NamedCurves; 3531 import org.bouncycastle.asn1.x9.X962Parameters; 3532 @@ -247,14 +251,16 @@ 3533 { 3534 oid = NISTNamedCurves.getOID(name); 3535 } 3536 - if (oid == null) 3537 - { 3538 - oid = TeleTrusTNamedCurves.getOID(name); 3539 - } 3540 - if (oid == null) 3541 - { 3542 - oid = ECGOST3410NamedCurves.getOID(name); 3543 - } 3544 + // BEGIN android-removed 3545 + // if (oid == null) 3546 + // { 3547 + // oid = TeleTrusTNamedCurves.getOID(name); 3548 + // } 3549 + // if (oid == null) 3550 + // { 3551 + // oid = ECGOST3410NamedCurves.getOID(name); 3552 + // } 3553 + // END android-removed 3554 } 3555 3556 return oid; 3557 @@ -276,10 +282,12 @@ 3558 { 3559 params = NISTNamedCurves.getByOID(oid); 3560 } 3561 - if (params == null) 3562 - { 3563 - params = TeleTrusTNamedCurves.getByOID(oid); 3564 - } 3565 + // BEGIN android-removed 3566 + // if (params == null) 3567 + // { 3568 + // params = TeleTrusTNamedCurves.getByOID(oid); 3569 + // } 3570 + // END android-removed 3571 } 3572 3573 return params; 3574 @@ -297,14 +305,16 @@ 3575 { 3576 name = NISTNamedCurves.getName(oid); 3577 } 3578 - if (name == null) 3579 - { 3580 - name = TeleTrusTNamedCurves.getName(oid); 3581 - } 3582 - if (name == null) 3583 - { 3584 - name = ECGOST3410NamedCurves.getName(oid); 3585 - } 3586 + // BEGIN android-removed 3587 + // if (name == null) 3588 + // { 3589 + // name = TeleTrusTNamedCurves.getName(oid); 3590 + // } 3591 + // if (name == null) 3592 + // { 3593 + // name = ECGOST3410NamedCurves.getName(oid); 3594 + // } 3595 + // END android-removed 3596 } 3597 3598 return name; 3599 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 3600 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 2015-03-01 12:03:02.000000000 +0000 3601 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/x509/PKIXCertPath.java 2015-04-09 13:10:16.000000000 +0000 3602 @@ -37,7 +37,9 @@ 3603 import org.bouncycastle.jcajce.util.BCJcaJceHelper; 3604 import org.bouncycastle.jcajce.util.JcaJceHelper; 3605 import org.bouncycastle.util.io.pem.PemObject; 3606 -import org.bouncycastle.util.io.pem.PemWriter; 3607 +// BEGIN android-removed 3608 +// import org.bouncycastle.util.io.pem.PemWriter; 3609 +// END android-removed 3610 3611 /** 3612 * CertPath implementation for X.509 certificates. 3613 @@ -54,7 +56,9 @@ 3614 { 3615 List encodings = new ArrayList(); 3616 encodings.add("PkiPath"); 3617 - encodings.add("PEM"); 3618 + // BEGIN android-removed 3619 + // encodings.add("PEM"); 3620 + // END android-removed 3621 encodings.add("PKCS7"); 3622 certPathEncodings = Collections.unmodifiableList(encodings); 3623 } 3624 @@ -301,27 +305,29 @@ 3625 return toDEREncoded(new ContentInfo( 3626 PKCSObjectIdentifiers.signedData, sd)); 3627 } 3628 - else if (encoding.equalsIgnoreCase("PEM")) 3629 - { 3630 - ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 3631 - PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut)); 3632 - 3633 - try 3634 - { 3635 - for (int i = 0; i != certificates.size(); i++) 3636 - { 3637 - pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded())); 3638 - } 3639 - 3640 - pWrt.close(); 3641 - } 3642 - catch (Exception e) 3643 - { 3644 - throw new CertificateEncodingException("can't encode certificate for PEM encoded path"); 3645 - } 3646 - 3647 - return bOut.toByteArray(); 3648 - } 3649 + // BEGIN android-removed 3650 + // else if (encoding.equalsIgnoreCase("PEM")) 3651 + // { 3652 + // ByteArrayOutputStream bOut = new ByteArrayOutputStream(); 3653 + // PemWriter pWrt = new PemWriter(new OutputStreamWriter(bOut)); 3654 + // 3655 + // try 3656 + // { 3657 + // for (int i = 0; i != certificates.size(); i++) 3658 + // { 3659 + // pWrt.writeObject(new PemObject("CERTIFICATE", ((X509Certificate)certificates.get(i)).getEncoded())); 3660 + // } 3661 + // 3662 + // pWrt.close(); 3663 + // } 3664 + // catch (Exception e) 3665 + // { 3666 + // throw new CertificateEncodingException("can't encode certificate for PEM encoded path"); 3667 + // } 3668 + // 3669 + // return bOut.toByteArray(); 3670 + // } 3671 + // END android-removed 3672 else 3673 { 3674 throw new CertificateEncodingException("unsupported encoding: " + encoding); 3675 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java 3676 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java 2015-03-01 12:03:02.000000000 +0000 3677 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/x509/X509CertificateObject.java 2015-04-09 13:10:16.000000000 +0000 3678 @@ -55,6 +55,9 @@ 3679 import org.bouncycastle.asn1.x509.Extensions; 3680 import org.bouncycastle.asn1.x509.GeneralName; 3681 import org.bouncycastle.asn1.x509.KeyUsage; 3682 +// BEGIN android-added 3683 +import org.bouncycastle.asn1.x509.X509Name; 3684 +// END android-added 3685 import org.bouncycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl; 3686 import org.bouncycastle.jce.X509Principal; 3687 import org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier; 3688 @@ -534,12 +537,20 @@ 3689 } 3690 } 3691 3692 + // BEGIN android-changed 3693 + private byte[] encoded; 3694 + // END android-changed 3695 public byte[] getEncoded() 3696 throws CertificateEncodingException 3697 { 3698 try 3699 { 3700 - return c.getEncoded(ASN1Encoding.DER); 3701 + // BEGIN android-changed 3702 + if (encoded == null) { 3703 + encoded = c.getEncoded(ASN1Encoding.DER); 3704 + } 3705 + return encoded; 3706 + // END android-changed 3707 } 3708 catch (IOException e) 3709 { 3710 @@ -839,7 +850,9 @@ 3711 list.add(genName.getEncoded()); 3712 break; 3713 case GeneralName.directoryName: 3714 - list.add(X500Name.getInstance(RFC4519Style.INSTANCE, genName.getName()).toString()); 3715 + // BEGIN android-changed 3716 + list.add(X509Name.getInstance(genName.getName()).toString(true, X509Name.DefaultSymbols)); 3717 + // END android-changed 3718 break; 3719 case GeneralName.dNSName: 3720 case GeneralName.rfc822Name: 3721 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java 3722 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java 2015-03-01 12:03:02.000000000 +0000 3723 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/asymmetric/x509/X509SignatureUtil.java 2015-04-09 13:10:16.000000000 +0000 3724 @@ -16,12 +16,16 @@ 3725 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 3726 import org.bouncycastle.asn1.ASN1Sequence; 3727 import org.bouncycastle.asn1.DERNull; 3728 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 3729 +// BEGIN android-removed 3730 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 3731 +// END android-removed 3732 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 3733 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 3734 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 3735 import org.bouncycastle.asn1.pkcs.RSASSAPSSparams; 3736 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 3737 +// BEGIN android-removed 3738 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 3739 +// END android-removed 3740 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 3741 import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; 3742 import org.bouncycastle.jce.provider.BouncyCastleProvider; 3743 @@ -143,22 +147,24 @@ 3744 { 3745 return "SHA512"; 3746 } 3747 - else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 3748 - { 3749 - return "RIPEMD128"; 3750 - } 3751 - else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 3752 - { 3753 - return "RIPEMD160"; 3754 - } 3755 - else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 3756 - { 3757 - return "RIPEMD256"; 3758 - } 3759 - else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 3760 - { 3761 - return "GOST3411"; 3762 - } 3763 + // BEGIN android-removed 3764 + // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 3765 + // { 3766 + // return "RIPEMD128"; 3767 + // } 3768 + // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 3769 + // { 3770 + // return "RIPEMD160"; 3771 + // } 3772 + // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 3773 + // { 3774 + // return "RIPEMD256"; 3775 + // } 3776 + // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 3777 + // { 3778 + // return "GOST3411"; 3779 + // } 3780 + // END android-removed 3781 else 3782 { 3783 return digestAlgOID.getId(); 3784 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/digest/SHA256.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/digest/SHA256.java 3785 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/digest/SHA256.java 2015-03-01 12:03:02.000000000 +0000 3786 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/digest/SHA256.java 2013-05-25 02:14:15.000000000 +0000 3787 @@ -45,17 +45,19 @@ 3788 } 3789 } 3790 3791 - /** 3792 - * PBEWithHmacSHA 3793 - */ 3794 - public static class PBEWithMacKeyFactory 3795 - extends PBESecretKeyFactory 3796 - { 3797 - public PBEWithMacKeyFactory() 3798 - { 3799 - super("PBEwithHmacSHA256", null, false, PKCS12, SHA256, 256, 0); 3800 - } 3801 - } 3802 + // BEGIN android-removed 3803 + // /** 3804 + // * PBEWithHmacSHA 3805 + // */ 3806 + // public static class PBEWithMacKeyFactory 3807 + // extends PBESecretKeyFactory 3808 + // { 3809 + // public PBEWithMacKeyFactory() 3810 + // { 3811 + // super("PBEwithHmacSHA256", null, false, PKCS12, SHA256, 256, 0); 3812 + // } 3813 + // } 3814 + // END android-removed 3815 3816 /** 3817 * HMACSHA256 3818 @@ -84,9 +86,11 @@ 3819 provider.addAlgorithm("Alg.Alias.MessageDigest.SHA256", "SHA-256"); 3820 provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha256, "SHA-256"); 3821 3822 - provider.addAlgorithm("SecretKeyFactory.PBEWITHHMACSHA256", PREFIX + "$PBEWithMacKeyFactory"); 3823 - provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHHMACSHA-256", "PBEWITHHMACSHA256"); 3824 - provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + NISTObjectIdentifiers.id_sha256, "PBEWITHHMACSHA256"); 3825 + // BEGIN android-removed 3826 + // provider.addAlgorithm("SecretKeyFactory.PBEWITHHMACSHA256", PREFIX + "$PBEWithMacKeyFactory"); 3827 + // provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHHMACSHA-256", "PBEWITHHMACSHA256"); 3828 + // provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + NISTObjectIdentifiers.id_sha256, "PBEWITHHMACSHA256"); 3829 + // END android-removed 3830 3831 addHMACAlgorithm(provider, "SHA256", PREFIX + "$HashMac", PREFIX + "$KeyGenerator"); 3832 addHMACAlias(provider, "SHA256", PKCSObjectIdentifiers.id_hmacWithSHA256); 3833 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/digest/SHA384.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/digest/SHA384.java 3834 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/digest/SHA384.java 2015-03-01 12:03:02.000000000 +0000 3835 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/digest/SHA384.java 2013-05-25 02:14:15.000000000 +0000 3836 @@ -5,7 +5,9 @@ 3837 import org.bouncycastle.crypto.CipherKeyGenerator; 3838 import org.bouncycastle.crypto.digests.SHA384Digest; 3839 import org.bouncycastle.crypto.macs.HMac; 3840 -import org.bouncycastle.crypto.macs.OldHMac; 3841 +// BEGIN android-removed 3842 +// import org.bouncycastle.crypto.macs.OldHMac; 3843 +// END android-removed 3844 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 3845 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 3846 import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 3847 @@ -57,14 +59,16 @@ 3848 } 3849 } 3850 3851 - public static class OldSHA384 3852 - extends BaseMac 3853 - { 3854 - public OldSHA384() 3855 - { 3856 - super(new OldHMac(new SHA384Digest())); 3857 - } 3858 - } 3859 + // BEGIN android-removed 3860 + // public static class OldSHA384 3861 + // extends BaseMac 3862 + // { 3863 + // public OldSHA384() 3864 + // { 3865 + // super(new OldHMac(new SHA384Digest())); 3866 + // } 3867 + // } 3868 + // END android-removed 3869 3870 public static class Mappings 3871 extends DigestAlgorithmProvider 3872 @@ -80,7 +84,9 @@ 3873 provider.addAlgorithm("MessageDigest.SHA-384", PREFIX + "$Digest"); 3874 provider.addAlgorithm("Alg.Alias.MessageDigest.SHA384", "SHA-384"); 3875 provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha384, "SHA-384"); 3876 - provider.addAlgorithm("Mac.OLDHMACSHA384", PREFIX + "$OldSHA384"); 3877 + // BEGIN android-removed 3878 + // provider.addAlgorithm("Mac.OLDHMACSHA384", PREFIX + "$OldSHA384"); 3879 + // END android-removed 3880 3881 addHMACAlgorithm(provider, "SHA384", PREFIX + "$HashMac", PREFIX + "$KeyGenerator"); 3882 addHMACAlias(provider, "SHA384", PKCSObjectIdentifiers.id_hmacWithSHA384); 3883 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/digest/SHA512.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/digest/SHA512.java 3884 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/digest/SHA512.java 2015-03-01 12:03:02.000000000 +0000 3885 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/digest/SHA512.java 2013-05-25 02:14:15.000000000 +0000 3886 @@ -4,9 +4,13 @@ 3887 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 3888 import org.bouncycastle.crypto.CipherKeyGenerator; 3889 import org.bouncycastle.crypto.digests.SHA512Digest; 3890 -import org.bouncycastle.crypto.digests.SHA512tDigest; 3891 +// BEGIN android-removed 3892 +// import org.bouncycastle.crypto.digests.SHA512tDigest; 3893 +// END android-removed 3894 import org.bouncycastle.crypto.macs.HMac; 3895 -import org.bouncycastle.crypto.macs.OldHMac; 3896 +// BEGIN android-removed 3897 +// import org.bouncycastle.crypto.macs.OldHMac; 3898 +// END android-removed 3899 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 3900 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 3901 import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 3902 @@ -37,42 +41,44 @@ 3903 } 3904 } 3905 3906 - static public class DigestT 3907 - extends BCMessageDigest 3908 - implements Cloneable 3909 - { 3910 - public DigestT(int bitLength) 3911 - { 3912 - super(new SHA512tDigest(bitLength)); 3913 - } 3914 - 3915 - public Object clone() 3916 - throws CloneNotSupportedException 3917 - { 3918 - DigestT d = (DigestT)super.clone(); 3919 - d.digest = new SHA512tDigest((SHA512tDigest)digest); 3920 - 3921 - return d; 3922 - } 3923 - } 3924 - 3925 - static public class DigestT224 3926 - extends DigestT 3927 - { 3928 - public DigestT224() 3929 - { 3930 - super(224); 3931 - } 3932 - } 3933 - 3934 - static public class DigestT256 3935 - extends DigestT 3936 - { 3937 - public DigestT256() 3938 - { 3939 - super(256); 3940 - } 3941 - } 3942 + // BEGIN android-removed 3943 + // static public class DigestT 3944 + // extends BCMessageDigest 3945 + // implements Cloneable 3946 + // { 3947 + // public DigestT(int bitLength) 3948 + // { 3949 + // super(new SHA512tDigest(bitLength)); 3950 + // } 3951 + // 3952 + // public Object clone() 3953 + // throws CloneNotSupportedException 3954 + // { 3955 + // DigestT d = (DigestT)super.clone(); 3956 + // d.digest = new SHA512tDigest((SHA512tDigest)digest); 3957 + // 3958 + // return d; 3959 + // } 3960 + // } 3961 + // 3962 + // static public class DigestT224 3963 + // extends DigestT 3964 + // { 3965 + // public DigestT224() 3966 + // { 3967 + // super(224); 3968 + // } 3969 + // } 3970 + // 3971 + // static public class DigestT256 3972 + // extends DigestT 3973 + // { 3974 + // public DigestT256() 3975 + // { 3976 + // super(256); 3977 + // } 3978 + // } 3979 + // END android-removed 3980 3981 public static class HashMac 3982 extends BaseMac 3983 @@ -83,35 +89,37 @@ 3984 } 3985 } 3986 3987 - public static class HashMacT224 3988 - extends BaseMac 3989 - { 3990 - public HashMacT224() 3991 - { 3992 - super(new HMac(new SHA512tDigest(224))); 3993 - } 3994 - } 3995 - 3996 - public static class HashMacT256 3997 - extends BaseMac 3998 - { 3999 - public HashMacT256() 4000 - { 4001 - super(new HMac(new SHA512tDigest(256))); 4002 - } 4003 - } 4004 - 4005 - /** 4006 - * SHA-512 HMac 4007 - */ 4008 - public static class OldSHA512 4009 - extends BaseMac 4010 - { 4011 - public OldSHA512() 4012 - { 4013 - super(new OldHMac(new SHA512Digest())); 4014 - } 4015 - } 4016 + // BEGIN android-removed 4017 + // public static class HashMacT224 4018 + // extends BaseMac 4019 + // { 4020 + // public HashMacT224() 4021 + // { 4022 + // super(new HMac(new SHA512tDigest(224))); 4023 + // } 4024 + // } 4025 + // 4026 + // public static class HashMacT256 4027 + // extends BaseMac 4028 + // { 4029 + // public HashMacT256() 4030 + // { 4031 + // super(new HMac(new SHA512tDigest(256))); 4032 + // } 4033 + // } 4034 + // 4035 + // /** 4036 + // * SHA-512 HMac 4037 + // */ 4038 + // public static class OldSHA512 4039 + // extends BaseMac 4040 + // { 4041 + // public OldSHA512() 4042 + // { 4043 + // super(new OldHMac(new SHA512Digest())); 4044 + // } 4045 + // } 4046 + // END android-removed 4047 4048 /** 4049 * HMACSHA512 4050 @@ -125,23 +133,25 @@ 4051 } 4052 } 4053 4054 - public static class KeyGeneratorT224 4055 - extends BaseKeyGenerator 4056 - { 4057 - public KeyGeneratorT224() 4058 - { 4059 - super("HMACSHA512/224", 224, new CipherKeyGenerator()); 4060 - } 4061 - } 4062 - 4063 - public static class KeyGeneratorT256 4064 - extends BaseKeyGenerator 4065 - { 4066 - public KeyGeneratorT256() 4067 - { 4068 - super("HMACSHA512/256", 256, new CipherKeyGenerator()); 4069 - } 4070 - } 4071 + // BEGIN android-removed 4072 + // public static class KeyGeneratorT224 4073 + // extends BaseKeyGenerator 4074 + // { 4075 + // public KeyGeneratorT224() 4076 + // { 4077 + // super("HMACSHA512/224", 224, new CipherKeyGenerator()); 4078 + // } 4079 + // } 4080 + // 4081 + // public static class KeyGeneratorT256 4082 + // extends BaseKeyGenerator 4083 + // { 4084 + // public KeyGeneratorT256() 4085 + // { 4086 + // super("HMACSHA512/256", 256, new CipherKeyGenerator()); 4087 + // } 4088 + // } 4089 + // END android-removed 4090 4091 public static class Mappings 4092 extends DigestAlgorithmProvider 4093 @@ -158,21 +168,25 @@ 4094 provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512", "SHA-512"); 4095 provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512, "SHA-512"); 4096 4097 - provider.addAlgorithm("MessageDigest.SHA-512/224", PREFIX + "$DigestT224"); 4098 - provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512/224", "SHA-512/224"); 4099 - provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_224, "SHA-512/224"); 4100 - 4101 - provider.addAlgorithm("MessageDigest.SHA-512/256", PREFIX + "$DigestT256"); 4102 - provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512256", "SHA-512/256"); 4103 - provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_256, "SHA-512/256"); 4104 - 4105 - provider.addAlgorithm("Mac.OLDHMACSHA512", PREFIX + "$OldSHA512"); 4106 + // BEGIN android-removed 4107 + // provider.addAlgorithm("MessageDigest.SHA-512/224", PREFIX + "$DigestT224"); 4108 + // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512/224", "SHA-512/224"); 4109 + // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_224, "SHA-512/224"); 4110 + // 4111 + // provider.addAlgorithm("MessageDigest.SHA-512/256", PREFIX + "$DigestT256"); 4112 + // provider.addAlgorithm("Alg.Alias.MessageDigest.SHA512256", "SHA-512/256"); 4113 + // provider.addAlgorithm("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512_256, "SHA-512/256"); 4114 + // 4115 + // provider.addAlgorithm("Mac.OLDHMACSHA512", PREFIX + "$OldSHA512"); 4116 + // END android-removed 4117 4118 addHMACAlgorithm(provider, "SHA512", PREFIX + "$HashMac", PREFIX + "$KeyGenerator"); 4119 addHMACAlias(provider, "SHA512", PKCSObjectIdentifiers.id_hmacWithSHA512); 4120 4121 - addHMACAlgorithm(provider, "SHA512/224", PREFIX + "$HashMacT224", PREFIX + "$KeyGeneratorT224"); 4122 - addHMACAlgorithm(provider, "SHA512/256", PREFIX + "$HashMacT256", PREFIX + "$KeyGeneratorT256"); 4123 + // BEGIN android-removed 4124 + // addHMACAlgorithm(provider, "SHA512/224", PREFIX + "$HashMacT224", PREFIX + "$KeyGeneratorT224"); 4125 + // addHMACAlgorithm(provider, "SHA512/256", PREFIX + "$HashMacT256", PREFIX + "$KeyGeneratorT256"); 4126 + // END android-removed 4127 } 4128 } 4129 4130 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/keystore/BC.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/keystore/BC.java 4131 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/keystore/BC.java 2015-03-01 12:03:02.000000000 +0000 4132 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/keystore/BC.java 2013-05-25 02:14:15.000000000 +0000 4133 @@ -17,7 +17,9 @@ 4134 public void configure(ConfigurableProvider provider) 4135 { 4136 provider.addAlgorithm("KeyStore.BKS", PREFIX + "BcKeyStoreSpi$Std"); 4137 - provider.addAlgorithm("KeyStore.BKS-V1", PREFIX + "BcKeyStoreSpi$Version1"); 4138 + // BEGIN android-removed 4139 + // provider.addAlgorithm("KeyStore.BKS-V1", PREFIX + "BcKeyStoreSpi$Version1"); 4140 + // END android-removed 4141 provider.addAlgorithm("KeyStore.BouncyCastle", PREFIX + "BcKeyStoreSpi$BouncyCastleStore"); 4142 provider.addAlgorithm("Alg.Alias.KeyStore.UBER", "BouncyCastle"); 4143 provider.addAlgorithm("Alg.Alias.KeyStore.BOUNCYCASTLE", "BouncyCastle"); 4144 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/keystore/PKCS12.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/keystore/PKCS12.java 4145 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/keystore/PKCS12.java 2015-03-01 12:03:02.000000000 +0000 4146 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/keystore/PKCS12.java 2013-05-25 02:14:15.000000000 +0000 4147 @@ -17,14 +17,16 @@ 4148 public void configure(ConfigurableProvider provider) 4149 { 4150 provider.addAlgorithm("KeyStore.PKCS12", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore"); 4151 - provider.addAlgorithm("KeyStore.BCPKCS12", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore"); 4152 - provider.addAlgorithm("KeyStore.PKCS12-DEF", PREFIX + "PKCS12KeyStoreSpi$DefPKCS12KeyStore"); 4153 - 4154 - provider.addAlgorithm("KeyStore.PKCS12-3DES-40RC2", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore"); 4155 - provider.addAlgorithm("KeyStore.PKCS12-3DES-3DES", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore3DES"); 4156 - 4157 - provider.addAlgorithm("KeyStore.PKCS12-DEF-3DES-40RC2", PREFIX + "PKCS12KeyStoreSpi$DefPKCS12KeyStore"); 4158 - provider.addAlgorithm("KeyStore.PKCS12-DEF-3DES-3DES", PREFIX + "PKCS12KeyStoreSpi$DefPKCS12KeyStore3DES"); 4159 + // BEGIN android-removed 4160 + // provider.addAlgorithm("KeyStore.BCPKCS12", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore"); 4161 + // provider.addAlgorithm("KeyStore.PKCS12-DEF", PREFIX + "PKCS12KeyStoreSpi$DefPKCS12KeyStore"); 4162 + // 4163 + // provider.addAlgorithm("KeyStore.PKCS12-3DES-40RC2", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore"); 4164 + // provider.addAlgorithm("KeyStore.PKCS12-3DES-3DES", PREFIX + "PKCS12KeyStoreSpi$BCPKCS12KeyStore3DES"); 4165 + // 4166 + // provider.addAlgorithm("KeyStore.PKCS12-DEF-3DES-40RC2", PREFIX + "PKCS12KeyStoreSpi$DefPKCS12KeyStore"); 4167 + // provider.addAlgorithm("KeyStore.PKCS12-DEF-3DES-3DES", PREFIX + "PKCS12KeyStoreSpi$DefPKCS12KeyStore3DES"); 4168 + // END android-removed 4169 } 4170 } 4171 } 4172 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java 4173 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java 2015-03-01 12:03:02.000000000 +0000 4174 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/keystore/pkcs12/PKCS12KeyStoreSpi.java 2015-04-09 13:10:16.000000000 +0000 4175 @@ -62,8 +62,10 @@ 4176 import org.bouncycastle.asn1.DEROutputStream; 4177 import org.bouncycastle.asn1.DERSequence; 4178 import org.bouncycastle.asn1.DERSet; 4179 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 4180 -import org.bouncycastle.asn1.cryptopro.GOST28147Parameters; 4181 +// BEGIN android-removed 4182 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 4183 +// import org.bouncycastle.asn1.cryptopro.GOST28147Parameters; 4184 +// END android-removed 4185 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 4186 import org.bouncycastle.asn1.ntt.NTTObjectIdentifiers; 4187 import org.bouncycastle.asn1.pkcs.AuthenticatedSafe; 4188 @@ -89,7 +91,9 @@ 4189 import org.bouncycastle.crypto.digests.SHA1Digest; 4190 import org.bouncycastle.jcajce.PKCS12StoreParameter; 4191 import org.bouncycastle.jcajce.provider.symmetric.util.BCPBEKey; 4192 -import org.bouncycastle.jcajce.spec.GOST28147ParameterSpec; 4193 +// BEGIN android-removed 4194 +// import org.bouncycastle.jcajce.spec.GOST28147ParameterSpec; 4195 +// END android-removed 4196 import org.bouncycastle.jcajce.spec.PBKDF2KeySpec; 4197 import org.bouncycastle.jcajce.util.BCJcaJceHelper; 4198 import org.bouncycastle.jcajce.util.JcaJceHelper; 4199 @@ -753,13 +757,15 @@ 4200 { 4201 cipher.init(mode, key, new IvParameterSpec(ASN1OctetString.getInstance(encParams).getOctets())); 4202 } 4203 - else 4204 - { 4205 - // TODO: at the moment it's just GOST, but... 4206 - GOST28147Parameters gParams = GOST28147Parameters.getInstance(encParams); 4207 - 4208 - cipher.init(mode, key, new GOST28147ParameterSpec(gParams.getEncryptionParamSet(), gParams.getIV())); 4209 - } 4210 + // BEGIN android-removed 4211 + // else 4212 + // { 4213 + // // TODO: at the moment it's just GOST, but... 4214 + // GOST28147Parameters gParams = GOST28147Parameters.getInstance(encParams); 4215 + // 4216 + // cipher.init(mode, key, new GOST28147ParameterSpec(gParams.getEncryptionParamSet(), gParams.getIV())); 4217 + // } 4218 + // END android-removed 4219 return cipher; 4220 } 4221 4222 @@ -1680,33 +1686,34 @@ 4223 super(new BouncyCastleProvider(), pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC); 4224 } 4225 } 4226 - 4227 - public static class BCPKCS12KeyStore3DES 4228 - extends PKCS12KeyStoreSpi 4229 - { 4230 - public BCPKCS12KeyStore3DES() 4231 - { 4232 - super(new BouncyCastleProvider(), pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 4233 - } 4234 - } 4235 - 4236 - public static class DefPKCS12KeyStore 4237 - extends PKCS12KeyStoreSpi 4238 - { 4239 - public DefPKCS12KeyStore() 4240 - { 4241 - super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC); 4242 - } 4243 - } 4244 - 4245 - public static class DefPKCS12KeyStore3DES 4246 - extends PKCS12KeyStoreSpi 4247 - { 4248 - public DefPKCS12KeyStore3DES() 4249 - { 4250 - super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 4251 - } 4252 - } 4253 + // BEGIN android-removed 4254 + // public static class BCPKCS12KeyStore3DES 4255 + // extends PKCS12KeyStoreSpi 4256 + // { 4257 + // public BCPKCS12KeyStore3DES() 4258 + // { 4259 + // super(new BouncyCastleProvider(), pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 4260 + // } 4261 + // } 4262 + // 4263 + // public static class DefPKCS12KeyStore 4264 + // extends PKCS12KeyStoreSpi 4265 + // { 4266 + // public DefPKCS12KeyStore() 4267 + // { 4268 + // super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd40BitRC2_CBC); 4269 + // } 4270 + // } 4271 + // 4272 + // public static class DefPKCS12KeyStore3DES 4273 + // extends PKCS12KeyStoreSpi 4274 + // { 4275 + // public DefPKCS12KeyStore3DES() 4276 + // { 4277 + // super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC); 4278 + // } 4279 + // } 4280 + // END android-removed 4281 4282 private static class IgnoresCaseHashtable 4283 { 4284 @@ -1779,7 +1786,9 @@ 4285 keySizes.put(NTTObjectIdentifiers.id_camellia192_cbc, Integers.valueOf(192)); 4286 keySizes.put(NTTObjectIdentifiers.id_camellia256_cbc, Integers.valueOf(256)); 4287 4288 - keySizes.put(CryptoProObjectIdentifiers.gostR28147_gcfb, Integers.valueOf(256)); 4289 + // BEGIN android-removed 4290 + // keySizes.put(CryptoProObjectIdentifiers.gostR28147_gcfb, Integers.valueOf(256)); 4291 + // END android-removed 4292 4293 KEY_SIZES = Collections.unmodifiableMap(keySizes); 4294 } 4295 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/AES.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/AES.java 4296 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/AES.java 2015-03-01 12:03:02.000000000 +0000 4297 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/AES.java 2015-07-22 00:42:46.000000000 +0000 4298 @@ -3,16 +3,28 @@ 4299 import java.io.IOException; 4300 import java.lang.reflect.Constructor; 4301 import java.lang.reflect.Method; 4302 -import java.security.AlgorithmParameters; 4303 -import java.security.InvalidAlgorithmParameterException; 4304 +// BEGIN android-added 4305 +import java.security.NoSuchAlgorithmException; 4306 +// END android-added 4307 +// BEGIN android-removed 4308 +// import java.security.AlgorithmParameters; 4309 +// import java.security.InvalidAlgorithmParameterException; 4310 +// END android-removed 4311 import java.security.SecureRandom; 4312 import java.security.spec.AlgorithmParameterSpec; 4313 import java.security.spec.InvalidParameterSpecException; 4314 4315 -import javax.crypto.spec.IvParameterSpec; 4316 - 4317 +// BEGIN android-removed 4318 +// import javax.crypto.spec.IvParameterSpec; 4319 +// END android-removed 4320 + 4321 +// BEGIN android-added 4322 +import javax.crypto.NoSuchPaddingException; 4323 +// END android-added 4324 import org.bouncycastle.asn1.bc.BCObjectIdentifiers; 4325 -import org.bouncycastle.asn1.cms.CCMParameters; 4326 +// BEGIN android-removed 4327 +// import org.bouncycastle.asn1.cms.CCMParameters; 4328 +// END android-removed 4329 import org.bouncycastle.asn1.cms.GCMParameters; 4330 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 4331 import org.bouncycastle.crypto.BlockCipher; 4332 @@ -20,22 +32,30 @@ 4333 import org.bouncycastle.crypto.CipherKeyGenerator; 4334 import org.bouncycastle.crypto.engines.AESFastEngine; 4335 import org.bouncycastle.crypto.engines.AESWrapEngine; 4336 -import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 4337 -import org.bouncycastle.crypto.engines.RFC5649WrapEngine; 4338 -import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; 4339 -import org.bouncycastle.crypto.macs.CMac; 4340 -import org.bouncycastle.crypto.macs.GMac; 4341 +// BEGIN android-removed 4342 +// import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 4343 +// import org.bouncycastle.crypto.engines.RFC5649WrapEngine; 4344 +// import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; 4345 +// import org.bouncycastle.crypto.macs.CMac; 4346 +// import org.bouncycastle.crypto.macs.GMac; 4347 +// END android-removed 4348 import org.bouncycastle.crypto.modes.CBCBlockCipher; 4349 -import org.bouncycastle.crypto.modes.CCMBlockCipher; 4350 +// BEGIN android-removed 4351 +// import org.bouncycastle.crypto.modes.CCMBlockCipher; 4352 +// END android-removed 4353 import org.bouncycastle.crypto.modes.CFBBlockCipher; 4354 import org.bouncycastle.crypto.modes.GCMBlockCipher; 4355 import org.bouncycastle.crypto.modes.OFBBlockCipher; 4356 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 4357 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 4358 +// BEGIN android-removed 4359 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 4360 +// END android-removed 4361 import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters; 4362 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 4363 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 4364 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 4365 +// BEGIN android-removed 4366 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 4367 +// END android-removed 4368 import org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher; 4369 import org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider; 4370 import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters; 4371 @@ -98,53 +118,64 @@ 4372 public GCM() 4373 { 4374 super(new GCMBlockCipher(new AESFastEngine())); 4375 + // BEGIN android-added 4376 + try { 4377 + engineSetMode("GCM"); 4378 + engineSetPadding("NoPadding"); 4379 + } catch (NoSuchAlgorithmException | NoSuchPaddingException e) { 4380 + // this should not be possible 4381 + throw new RuntimeException("Could not set mode or padding for GCM mode", e); 4382 + } 4383 + // END android-added 4384 } 4385 } 4386 4387 - static public class CCM 4388 - extends BaseBlockCipher 4389 - { 4390 - public CCM() 4391 - { 4392 - super(new CCMBlockCipher(new AESFastEngine())); 4393 - } 4394 - } 4395 - 4396 - public static class AESCMAC 4397 - extends BaseMac 4398 - { 4399 - public AESCMAC() 4400 - { 4401 - super(new CMac(new AESFastEngine())); 4402 - } 4403 - } 4404 - 4405 - public static class AESGMAC 4406 - extends BaseMac 4407 - { 4408 - public AESGMAC() 4409 - { 4410 - super(new GMac(new GCMBlockCipher(new AESFastEngine()))); 4411 - } 4412 - } 4413 - 4414 - public static class Poly1305 4415 - extends BaseMac 4416 - { 4417 - public Poly1305() 4418 - { 4419 - super(new org.bouncycastle.crypto.macs.Poly1305(new AESFastEngine())); 4420 - } 4421 - } 4422 - 4423 - public static class Poly1305KeyGen 4424 - extends BaseKeyGenerator 4425 - { 4426 - public Poly1305KeyGen() 4427 - { 4428 - super("Poly1305-AES", 256, new Poly1305KeyGenerator()); 4429 - } 4430 - } 4431 + // BEGIN android-removed 4432 + // static public class CCM 4433 + // extends BaseBlockCipher 4434 + // { 4435 + // public CCM() 4436 + // { 4437 + // super(new CCMBlockCipher(new AESFastEngine())); 4438 + // } 4439 + // } 4440 + // 4441 + // public static class AESCMAC 4442 + // extends BaseMac 4443 + // { 4444 + // public AESCMAC() 4445 + // { 4446 + // super(new CMac(new AESFastEngine())); 4447 + // } 4448 + // } 4449 + // 4450 + // public static class AESGMAC 4451 + // extends BaseMac 4452 + // { 4453 + // public AESGMAC() 4454 + // { 4455 + // super(new GMac(new GCMBlockCipher(new AESFastEngine()))); 4456 + // } 4457 + // } 4458 + // 4459 + // public static class Poly1305 4460 + // extends BaseMac 4461 + // { 4462 + // public Poly1305() 4463 + // { 4464 + // super(new org.bouncycastle.crypto.macs.Poly1305(new AESFastEngine())); 4465 + // } 4466 + // } 4467 + // 4468 + // public static class Poly1305KeyGen 4469 + // extends BaseKeyGenerator 4470 + // { 4471 + // public Poly1305KeyGen() 4472 + // { 4473 + // super("Poly1305-AES", 256, new Poly1305KeyGenerator()); 4474 + // } 4475 + // } 4476 + // END android-removed 4477 4478 static public class Wrap 4479 extends BaseWrapCipher 4480 @@ -155,23 +186,25 @@ 4481 } 4482 } 4483 4484 - public static class RFC3211Wrap 4485 - extends BaseWrapCipher 4486 - { 4487 - public RFC3211Wrap() 4488 - { 4489 - super(new RFC3211WrapEngine(new AESFastEngine()), 16); 4490 - } 4491 - } 4492 - 4493 - public static class RFC5649Wrap 4494 - extends BaseWrapCipher 4495 - { 4496 - public RFC5649Wrap() 4497 - { 4498 - super(new RFC5649WrapEngine(new AESFastEngine())); 4499 - } 4500 - } 4501 + // BEGIN android-removed 4502 + // public static class RFC3211Wrap 4503 + // extends BaseWrapCipher 4504 + // { 4505 + // public RFC3211Wrap() 4506 + // { 4507 + // super(new RFC3211WrapEngine(new AESFastEngine()), 16); 4508 + // } 4509 + // } 4510 + // 4511 + // public static class RFC5649Wrap 4512 + // extends BaseWrapCipher 4513 + // { 4514 + // public RFC5649Wrap() 4515 + // { 4516 + // super(new RFC5649WrapEngine(new AESFastEngine())); 4517 + // } 4518 + // } 4519 + // END android-removed 4520 4521 /** 4522 * PBEWithAES-CBC 4523 @@ -190,7 +223,9 @@ 4524 { 4525 public KeyGen() 4526 { 4527 - this(192); 4528 + // BEGIN android-changed 4529 + this(128); 4530 + // END android-changed 4531 } 4532 4533 public KeyGen(int keySize) 4534 @@ -199,32 +234,34 @@ 4535 } 4536 } 4537 4538 - public static class KeyGen128 4539 - extends KeyGen 4540 - { 4541 - public KeyGen128() 4542 - { 4543 - super(128); 4544 - } 4545 - } 4546 - 4547 - public static class KeyGen192 4548 - extends KeyGen 4549 - { 4550 - public KeyGen192() 4551 - { 4552 - super(192); 4553 - } 4554 - } 4555 - 4556 - public static class KeyGen256 4557 - extends KeyGen 4558 - { 4559 - public KeyGen256() 4560 - { 4561 - super(256); 4562 - } 4563 - } 4564 + // BEGIN android-removed 4565 + // public static class KeyGen128 4566 + // extends KeyGen 4567 + // { 4568 + // public KeyGen128() 4569 + // { 4570 + // super(128); 4571 + // } 4572 + // } 4573 + // 4574 + // public static class KeyGen192 4575 + // extends KeyGen 4576 + // { 4577 + // public KeyGen192() 4578 + // { 4579 + // super(192); 4580 + // } 4581 + // } 4582 + // 4583 + // public static class KeyGen256 4584 + // extends KeyGen 4585 + // { 4586 + // public KeyGen256() 4587 + // { 4588 + // super(256); 4589 + // } 4590 + // } 4591 + // END android-removed 4592 4593 /** 4594 * PBEWithSHA1And128BitAES-BC 4595 @@ -334,119 +371,121 @@ 4596 } 4597 } 4598 4599 - public static class AlgParamGen 4600 - extends BaseAlgorithmParameterGenerator 4601 - { 4602 - protected void engineInit( 4603 - AlgorithmParameterSpec genParamSpec, 4604 - SecureRandom random) 4605 - throws InvalidAlgorithmParameterException 4606 - { 4607 - throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 4608 - } 4609 - 4610 - protected AlgorithmParameters engineGenerateParameters() 4611 - { 4612 - byte[] iv = new byte[16]; 4613 - 4614 - if (random == null) 4615 - { 4616 - random = new SecureRandom(); 4617 - } 4618 - 4619 - random.nextBytes(iv); 4620 - 4621 - AlgorithmParameters params; 4622 - 4623 - try 4624 - { 4625 - params = createParametersInstance("AES"); 4626 - params.init(new IvParameterSpec(iv)); 4627 - } 4628 - catch (Exception e) 4629 - { 4630 - throw new RuntimeException(e.getMessage()); 4631 - } 4632 - 4633 - return params; 4634 - } 4635 - } 4636 - 4637 - public static class AlgParamGenCCM 4638 - extends BaseAlgorithmParameterGenerator 4639 - { 4640 - protected void engineInit( 4641 - AlgorithmParameterSpec genParamSpec, 4642 - SecureRandom random) 4643 - throws InvalidAlgorithmParameterException 4644 - { 4645 - throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 4646 - } 4647 - 4648 - protected AlgorithmParameters engineGenerateParameters() 4649 - { 4650 - byte[] iv = new byte[12]; 4651 - 4652 - if (random == null) 4653 - { 4654 - random = new SecureRandom(); 4655 - } 4656 - 4657 - random.nextBytes(iv); 4658 - 4659 - AlgorithmParameters params; 4660 - 4661 - try 4662 - { 4663 - params = createParametersInstance("CCM"); 4664 - params.init(new CCMParameters(iv, 12).getEncoded()); 4665 - } 4666 - catch (Exception e) 4667 - { 4668 - throw new RuntimeException(e.getMessage()); 4669 - } 4670 - 4671 - return params; 4672 - } 4673 - } 4674 - 4675 - public static class AlgParamGenGCM 4676 - extends BaseAlgorithmParameterGenerator 4677 - { 4678 - protected void engineInit( 4679 - AlgorithmParameterSpec genParamSpec, 4680 - SecureRandom random) 4681 - throws InvalidAlgorithmParameterException 4682 - { 4683 - throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 4684 - } 4685 - 4686 - protected AlgorithmParameters engineGenerateParameters() 4687 - { 4688 - byte[] nonce = new byte[12]; 4689 - 4690 - if (random == null) 4691 - { 4692 - random = new SecureRandom(); 4693 - } 4694 - 4695 - random.nextBytes(nonce); 4696 - 4697 - AlgorithmParameters params; 4698 - 4699 - try 4700 - { 4701 - params = createParametersInstance("GCM"); 4702 - params.init(new GCMParameters(nonce, 12).getEncoded()); 4703 - } 4704 - catch (Exception e) 4705 - { 4706 - throw new RuntimeException(e.getMessage()); 4707 - } 4708 - 4709 - return params; 4710 - } 4711 - } 4712 + // BEGIN android-removed 4713 + // public static class AlgParamGen 4714 + // extends BaseAlgorithmParameterGenerator 4715 + // { 4716 + // protected void engineInit( 4717 + // AlgorithmParameterSpec genParamSpec, 4718 + // SecureRandom random) 4719 + // throws InvalidAlgorithmParameterException 4720 + // { 4721 + // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 4722 + // } 4723 + // 4724 + // protected AlgorithmParameters engineGenerateParameters() 4725 + // { 4726 + // byte[] iv = new byte[16]; 4727 + // 4728 + // if (random == null) 4729 + // { 4730 + // random = new SecureRandom(); 4731 + // } 4732 + // 4733 + // random.nextBytes(iv); 4734 + // 4735 + // AlgorithmParameters params; 4736 + // 4737 + // try 4738 + // { 4739 + // params = createParametersInstance("AES"); 4740 + // params.init(new IvParameterSpec(iv)); 4741 + // } 4742 + // catch (Exception e) 4743 + // { 4744 + // throw new RuntimeException(e.getMessage()); 4745 + // } 4746 + // 4747 + // return params; 4748 + // } 4749 + // } 4750 + // 4751 + // public static class AlgParamGenCCM 4752 + // extends BaseAlgorithmParameterGenerator 4753 + // { 4754 + // protected void engineInit( 4755 + // AlgorithmParameterSpec genParamSpec, 4756 + // SecureRandom random) 4757 + // throws InvalidAlgorithmParameterException 4758 + // { 4759 + // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 4760 + // } 4761 + // 4762 + // protected AlgorithmParameters engineGenerateParameters() 4763 + // { 4764 + // byte[] iv = new byte[12]; 4765 + // 4766 + // if (random == null) 4767 + // { 4768 + // random = new SecureRandom(); 4769 + // } 4770 + // 4771 + // random.nextBytes(iv); 4772 + // 4773 + // AlgorithmParameters params; 4774 + // 4775 + // try 4776 + // { 4777 + // params = createParametersInstance("CCM"); 4778 + // params.init(new CCMParameters(iv, 12).getEncoded()); 4779 + // } 4780 + // catch (Exception e) 4781 + // { 4782 + // throw new RuntimeException(e.getMessage()); 4783 + // } 4784 + // 4785 + // return params; 4786 + // } 4787 + // } 4788 + // 4789 + // public static class AlgParamGenGCM 4790 + // extends BaseAlgorithmParameterGenerator 4791 + // { 4792 + // protected void engineInit( 4793 + // AlgorithmParameterSpec genParamSpec, 4794 + // SecureRandom random) 4795 + // throws InvalidAlgorithmParameterException 4796 + // { 4797 + // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation."); 4798 + // } 4799 + // 4800 + // protected AlgorithmParameters engineGenerateParameters() 4801 + // { 4802 + // byte[] nonce = new byte[12]; 4803 + // 4804 + // if (random == null) 4805 + // { 4806 + // random = new SecureRandom(); 4807 + // } 4808 + // 4809 + // random.nextBytes(nonce); 4810 + // 4811 + // AlgorithmParameters params; 4812 + // 4813 + // try 4814 + // { 4815 + // params = createParametersInstance("GCM"); 4816 + // params.init(new GCMParameters(nonce, 12).getEncoded()); 4817 + // } 4818 + // catch (Exception e) 4819 + // { 4820 + // throw new RuntimeException(e.getMessage()); 4821 + // } 4822 + // 4823 + // return params; 4824 + // } 4825 + // } 4826 + // END android-removed 4827 4828 public static class AlgParams 4829 extends IvAlgorithmParameters 4830 @@ -545,80 +584,82 @@ 4831 } 4832 } 4833 4834 - public static class AlgParamsCCM 4835 - extends BaseAlgorithmParameters 4836 - { 4837 - private CCMParameters ccmParams; 4838 - 4839 - protected void engineInit(AlgorithmParameterSpec paramSpec) 4840 - throws InvalidParameterSpecException 4841 - { 4842 - throw new InvalidParameterSpecException("No supported AlgorithmParameterSpec for AES parameter generation."); 4843 - } 4844 - 4845 - protected void engineInit(byte[] params) 4846 - throws IOException 4847 - { 4848 - ccmParams = CCMParameters.getInstance(params); 4849 - } 4850 - 4851 - protected void engineInit(byte[] params, String format) 4852 - throws IOException 4853 - { 4854 - if (!isASN1FormatString(format)) 4855 - { 4856 - throw new IOException("unknown format specified"); 4857 - } 4858 - 4859 - ccmParams = CCMParameters.getInstance(params); 4860 - } 4861 - 4862 - protected byte[] engineGetEncoded() 4863 - throws IOException 4864 - { 4865 - return ccmParams.getEncoded(); 4866 - } 4867 - 4868 - protected byte[] engineGetEncoded(String format) 4869 - throws IOException 4870 - { 4871 - if (!isASN1FormatString(format)) 4872 - { 4873 - throw new IOException("unknown format specified"); 4874 - } 4875 - 4876 - return ccmParams.getEncoded(); 4877 - } 4878 - 4879 - protected String engineToString() 4880 - { 4881 - return "CCM"; 4882 - } 4883 - 4884 - protected AlgorithmParameterSpec localEngineGetParameterSpec(Class paramSpec) 4885 - throws InvalidParameterSpecException 4886 - { 4887 - if (gcmSpecClass != null) 4888 - { 4889 - try 4890 - { 4891 - Constructor constructor = gcmSpecClass.getConstructor(new Class[] { Integer.TYPE, byte[].class }); 4892 - 4893 - return (AlgorithmParameterSpec)constructor.newInstance(new Object[] { Integers.valueOf(ccmParams.getIcvLen() * 8), ccmParams.getNonce() }); 4894 - } 4895 - catch (NoSuchMethodException e) 4896 - { 4897 - throw new InvalidParameterSpecException("no constructor found!"); // should never happen 4898 - } 4899 - catch (Exception e) 4900 - { 4901 - throw new InvalidParameterSpecException("construction failed: " + e.getMessage()); // should never happen 4902 - } 4903 - } 4904 - 4905 - throw new InvalidParameterSpecException("unknown parameter spec: " + paramSpec.getName()); 4906 - } 4907 - } 4908 + // BEGIN android-removed 4909 + // public static class AlgParamsCCM 4910 + // extends BaseAlgorithmParameters 4911 + // { 4912 + // private CCMParameters ccmParams; 4913 + // 4914 + // protected void engineInit(AlgorithmParameterSpec paramSpec) 4915 + // throws InvalidParameterSpecException 4916 + // { 4917 + // throw new InvalidParameterSpecException("No supported AlgorithmParameterSpec for AES parameter generation."); 4918 + // } 4919 + // 4920 + // protected void engineInit(byte[] params) 4921 + // throws IOException 4922 + // { 4923 + // ccmParams = CCMParameters.getInstance(params); 4924 + // } 4925 + // 4926 + // protected void engineInit(byte[] params, String format) 4927 + // throws IOException 4928 + // { 4929 + // if (!isASN1FormatString(format)) 4930 + // { 4931 + // throw new IOException("unknown format specified"); 4932 + // } 4933 + // 4934 + // ccmParams = CCMParameters.getInstance(params); 4935 + // } 4936 + // 4937 + // protected byte[] engineGetEncoded() 4938 + // throws IOException 4939 + // { 4940 + // return ccmParams.getEncoded(); 4941 + // } 4942 + // 4943 + // protected byte[] engineGetEncoded(String format) 4944 + // throws IOException 4945 + // { 4946 + // if (!isASN1FormatString(format)) 4947 + // { 4948 + // throw new IOException("unknown format specified"); 4949 + // } 4950 + // 4951 + // return ccmParams.getEncoded(); 4952 + // } 4953 + // 4954 + // protected String engineToString() 4955 + // { 4956 + // return "CCM"; 4957 + // } 4958 + // 4959 + // protected AlgorithmParameterSpec localEngineGetParameterSpec(Class paramSpec) 4960 + // throws InvalidParameterSpecException 4961 + // { 4962 + // if (gcmSpecClass != null) 4963 + // { 4964 + // try 4965 + // { 4966 + // Constructor constructor = gcmSpecClass.getConstructor(new Class[] { Integer.TYPE, byte[].class }); 4967 + // 4968 + // return (AlgorithmParameterSpec)constructor.newInstance(new Object[] { Integers.valueOf(ccmParams.getIcvLen() * 8), ccmParams.getNonce() }); 4969 + // } 4970 + // catch (NoSuchMethodException e) 4971 + // { 4972 + // throw new InvalidParameterSpecException("no constructor found!"); // should never happen 4973 + // } 4974 + // catch (Exception e) 4975 + // { 4976 + // throw new InvalidParameterSpecException("construction failed: " + e.getMessage()); // should never happen 4977 + // } 4978 + // } 4979 + // 4980 + // throw new InvalidParameterSpecException("unknown parameter spec: " + paramSpec.getName()); 4981 + // } 4982 + // } 4983 + // END android-removed 4984 4985 public static class Mappings 4986 extends SymmetricAlgorithmProvider 4987 @@ -652,92 +693,101 @@ 4988 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes128_GCM, "GCM"); 4989 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_GCM, "GCM"); 4990 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_GCM, "GCM"); 4991 - 4992 - provider.addAlgorithm("AlgorithmParameters.CCM", PREFIX + "$AlgParamsCCM"); 4993 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes128_CCM, "CCM"); 4994 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CCM, "CCM"); 4995 - provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CCM, "CCM"); 4996 - 4997 - provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen"); 4998 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES"); 4999 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES"); 5000 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES"); 5001 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES"); 5002 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES"); 5003 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES"); 5004 + // BEGIN android-removed 5005 + // provider.addAlgorithm("AlgorithmParameters.CCM", PREFIX + "$AlgParamsCCM"); 5006 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes128_CCM, "CCM"); 5007 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CCM, "CCM"); 5008 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CCM, "CCM"); 5009 + // 5010 + // provider.addAlgorithm("AlgorithmParameterGenerator.AES", PREFIX + "$AlgParamGen"); 5011 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES"); 5012 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES"); 5013 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES"); 5014 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES"); 5015 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES"); 5016 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES"); 5017 + // END android-removed 5018 5019 provider.addAlgorithm("Cipher.AES", PREFIX + "$ECB"); 5020 provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES128, "AES"); 5021 provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES192, "AES"); 5022 provider.addAlgorithm("Alg.Alias.Cipher." + wrongAES256, "AES"); 5023 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB"); 5024 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB"); 5025 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB"); 5026 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC"); 5027 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC"); 5028 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC"); 5029 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB"); 5030 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB"); 5031 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB"); 5032 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB"); 5033 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB"); 5034 - provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB"); 5035 + // BEGIN android-removed 5036 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$ECB"); 5037 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$ECB"); 5038 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$ECB"); 5039 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$CBC"); 5040 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$CBC"); 5041 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$CBC"); 5042 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$OFB"); 5043 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$OFB"); 5044 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$OFB"); 5045 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$CFB"); 5046 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$CFB"); 5047 + // provider.addAlgorithm("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$CFB"); 5048 + // END android-removed 5049 provider.addAlgorithm("Cipher.AESWRAP", PREFIX + "$Wrap"); 5050 provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_wrap, "AESWRAP"); 5051 provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_wrap, "AESWRAP"); 5052 provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_wrap, "AESWRAP"); 5053 5054 - provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap"); 5055 - provider.addAlgorithm("Cipher.AESRFC5649WRAP", PREFIX + "$RFC5649Wrap"); 5056 - 5057 - provider.addAlgorithm("AlgorithmParameterGenerator.CCM", PREFIX + "$AlgParamGenCCM"); 5058 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CCM, "CCM"); 5059 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CCM, "CCM"); 5060 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CCM, "CCM"); 5061 - 5062 - provider.addAlgorithm("Cipher.CCM", PREFIX + "$CCM"); 5063 - provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_CCM, "CCM"); 5064 - provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_CCM, "CCM"); 5065 - provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_CCM, "CCM"); 5066 - 5067 - provider.addAlgorithm("AlgorithmParameterGenerator.GCM", PREFIX + "$AlgParamGenGCM"); 5068 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_GCM, "GCM"); 5069 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_GCM, "GCM"); 5070 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_GCM, "GCM"); 5071 - 5072 - provider.addAlgorithm("Cipher.GCM", PREFIX + "$GCM"); 5073 - provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_GCM, "GCM"); 5074 - provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_GCM, "GCM"); 5075 - provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_GCM, "GCM"); 5076 + // BEGIN android-removed 5077 + // provider.addAlgorithm("Cipher.AESRFC3211WRAP", PREFIX + "$RFC3211Wrap"); 5078 + // provider.addAlgorithm("Cipher.AESRFC5649WRAP", PREFIX + "$RFC5649Wrap"); 5079 + // 5080 + // provider.addAlgorithm("AlgorithmParameterGenerator.CCM", PREFIX + "$AlgParamGenCCM"); 5081 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CCM, "CCM"); 5082 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CCM, "CCM"); 5083 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CCM, "CCM"); 5084 + // 5085 + // provider.addAlgorithm("Cipher.CCM", PREFIX + "$CCM"); 5086 + // provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_CCM, "CCM"); 5087 + // provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_CCM, "CCM"); 5088 + // provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_CCM, "CCM"); 5089 + // 5090 + // provider.addAlgorithm("AlgorithmParameterGenerator.GCM", PREFIX + "$AlgParamGenGCM"); 5091 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_GCM, "GCM"); 5092 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_GCM, "GCM"); 5093 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_GCM, "GCM"); 5094 + // END android-removed 5095 + 5096 + // BEGIN android-changed 5097 + provider.addAlgorithm("Cipher.AES/GCM/NOPADDING", PREFIX + "$GCM"); 5098 + provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_GCM, "AES/GCM/NOPADDING"); 5099 + provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_GCM, "AES/GCM/NOPADDING"); 5100 + provider.addAlgorithm("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_GCM, "AES/GCM/NOPADDING"); 5101 + // END android-changed 5102 5103 provider.addAlgorithm("KeyGenerator.AES", PREFIX + "$KeyGen"); 5104 - provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128"); 5105 - provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192"); 5106 - provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256"); 5107 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128"); 5108 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128"); 5109 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128"); 5110 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128"); 5111 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192"); 5112 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192"); 5113 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192"); 5114 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192"); 5115 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256"); 5116 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256"); 5117 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256"); 5118 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256"); 5119 - provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen"); 5120 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128"); 5121 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192"); 5122 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256"); 5123 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_GCM, PREFIX + "$KeyGen128"); 5124 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_GCM, PREFIX + "$KeyGen192"); 5125 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_GCM, PREFIX + "$KeyGen256"); 5126 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CCM, PREFIX + "$KeyGen128"); 5127 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CCM, PREFIX + "$KeyGen192"); 5128 - provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CCM, PREFIX + "$KeyGen256"); 5129 - 5130 - provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC"); 5131 + // BEGIN android-removed 5132 + // provider.addAlgorithm("KeyGenerator." + wrongAES128, PREFIX + "$KeyGen128"); 5133 + // provider.addAlgorithm("KeyGenerator." + wrongAES192, PREFIX + "$KeyGen192"); 5134 + // provider.addAlgorithm("KeyGenerator." + wrongAES256, PREFIX + "$KeyGen256"); 5135 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, PREFIX + "$KeyGen128"); 5136 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, PREFIX + "$KeyGen128"); 5137 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, PREFIX + "$KeyGen128"); 5138 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, PREFIX + "$KeyGen128"); 5139 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, PREFIX + "$KeyGen192"); 5140 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, PREFIX + "$KeyGen192"); 5141 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, PREFIX + "$KeyGen192"); 5142 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, PREFIX + "$KeyGen192"); 5143 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, PREFIX + "$KeyGen256"); 5144 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, PREFIX + "$KeyGen256"); 5145 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, PREFIX + "$KeyGen256"); 5146 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, PREFIX + "$KeyGen256"); 5147 + // provider.addAlgorithm("KeyGenerator.AESWRAP", PREFIX + "$KeyGen"); 5148 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, PREFIX + "$KeyGen128"); 5149 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, PREFIX + "$KeyGen192"); 5150 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, PREFIX + "$KeyGen256"); 5151 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_GCM, PREFIX + "$KeyGen128"); 5152 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_GCM, PREFIX + "$KeyGen192"); 5153 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_GCM, PREFIX + "$KeyGen256"); 5154 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CCM, PREFIX + "$KeyGen128"); 5155 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CCM, PREFIX + "$KeyGen192"); 5156 + // provider.addAlgorithm("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CCM, PREFIX + "$KeyGen256"); 5157 + // 5158 + // provider.addAlgorithm("Mac.AESCMAC", PREFIX + "$AESCMAC"); 5159 + // END android-removed 5160 5161 provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PBEWITHSHAAND128BITAES-CBC-BC"); 5162 provider.addAlgorithm("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PBEWITHSHAAND192BITAES-CBC-BC"); 5163 @@ -816,8 +866,10 @@ 5164 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PKCS12PBE"); 5165 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PKCS12PBE"); 5166 5167 - addGMacAlgorithm(provider, "AES", PREFIX + "$AESGMAC", PREFIX + "$KeyGen128"); 5168 - addPoly1305Algorithm(provider, "AES", PREFIX + "$Poly1305", PREFIX + "$Poly1305KeyGen"); 5169 + // BEGIN android-removed 5170 + // addGMacAlgorithm(provider, "AES", PREFIX + "$AESGMAC", PREFIX + "$KeyGen128"); 5171 + // addPoly1305Algorithm(provider, "AES", PREFIX + "$Poly1305", PREFIX + "$Poly1305KeyGen"); 5172 + // END android-removed 5173 } 5174 } 5175 5176 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/ARC4.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 5177 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 2015-03-01 12:03:02.000000000 +0000 5178 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/ARC4.java 2013-05-25 02:14:15.000000000 +0000 5179 @@ -29,7 +29,9 @@ 5180 { 5181 public KeyGen() 5182 { 5183 - super("RC4", 128, new CipherKeyGenerator()); 5184 + // BEGIN android-changed 5185 + super("ARC4", 128, new CipherKeyGenerator()); 5186 + // END android-changed 5187 } 5188 } 5189 5190 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 5191 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 2015-03-01 12:03:02.000000000 +0000 5192 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/Blowfish.java 2012-09-17 23:04:47.000000000 +0000 5193 @@ -64,7 +64,9 @@ 5194 { 5195 5196 provider.addAlgorithm("Cipher.BLOWFISH", PREFIX + "$ECB"); 5197 - provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC"); 5198 + // BEGIN android-removed 5199 + // provider.addAlgorithm("Cipher.1.3.6.1.4.1.3029.1.2", PREFIX + "$CBC"); 5200 + // END android-removed 5201 provider.addAlgorithm("KeyGenerator.BLOWFISH", PREFIX + "$KeyGen"); 5202 provider.addAlgorithm("Alg.Alias.KeyGenerator.1.3.6.1.4.1.3029.1.2", "BLOWFISH"); 5203 provider.addAlgorithm("AlgorithmParameters.BLOWFISH", PREFIX + "$AlgParams"); 5204 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/DES.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/DES.java 5205 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/DES.java 2015-03-01 12:03:02.000000000 +0000 5206 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/DES.java 2015-04-09 13:10:16.000000000 +0000 5207 @@ -19,12 +19,16 @@ 5208 import org.bouncycastle.crypto.CipherParameters; 5209 import org.bouncycastle.crypto.KeyGenerationParameters; 5210 import org.bouncycastle.crypto.engines.DESEngine; 5211 -import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 5212 +// BEGIN android-removed 5213 +// import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 5214 +// END android-removed 5215 import org.bouncycastle.crypto.generators.DESKeyGenerator; 5216 import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 5217 -import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5218 -import org.bouncycastle.crypto.macs.CMac; 5219 -import org.bouncycastle.crypto.macs.ISO9797Alg3Mac; 5220 +// BEGIN android-removed 5221 +// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5222 +// import org.bouncycastle.crypto.macs.CMac; 5223 +// import org.bouncycastle.crypto.macs.ISO9797Alg3Mac; 5224 +// END android-removed 5225 import org.bouncycastle.crypto.modes.CBCBlockCipher; 5226 import org.bouncycastle.crypto.paddings.ISO7816d4Padding; 5227 import org.bouncycastle.crypto.params.DESParameters; 5228 @@ -65,17 +69,19 @@ 5229 } 5230 } 5231 5232 - /** 5233 - * DES CFB8 5234 - */ 5235 - public static class DESCFB8 5236 - extends BaseMac 5237 - { 5238 - public DESCFB8() 5239 - { 5240 - super(new CFBBlockCipherMac(new DESEngine())); 5241 - } 5242 - } 5243 + // BEGIN android-removed 5244 + // /** 5245 + // * DES CFB8 5246 + // */ 5247 + // public static class DESCFB8 5248 + // extends BaseMac 5249 + // { 5250 + // public DESCFB8() 5251 + // { 5252 + // super(new CFBBlockCipherMac(new DESEngine())); 5253 + // } 5254 + // } 5255 + // END android-removed 5256 5257 /** 5258 * DES64 5259 @@ -110,47 +116,49 @@ 5260 } 5261 } 5262 5263 - static public class CMAC 5264 - extends BaseMac 5265 - { 5266 - public CMAC() 5267 - { 5268 - super(new CMac(new DESEngine())); 5269 - } 5270 - } 5271 - 5272 - /** 5273 - * DES9797Alg3with7816-4Padding 5274 - */ 5275 - public static class DES9797Alg3with7816d4 5276 - extends BaseMac 5277 - { 5278 - public DES9797Alg3with7816d4() 5279 - { 5280 - super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding())); 5281 - } 5282 - } 5283 - 5284 - /** 5285 - * DES9797Alg3 5286 - */ 5287 - public static class DES9797Alg3 5288 - extends BaseMac 5289 - { 5290 - public DES9797Alg3() 5291 - { 5292 - super(new ISO9797Alg3Mac(new DESEngine())); 5293 - } 5294 - } 5295 - 5296 - public static class RFC3211 5297 - extends BaseWrapCipher 5298 - { 5299 - public RFC3211() 5300 - { 5301 - super(new RFC3211WrapEngine(new DESEngine()), 8); 5302 - } 5303 - } 5304 + // BEGIN android-removed 5305 + // static public class CMAC 5306 + // extends BaseMac 5307 + // { 5308 + // public CMAC() 5309 + // { 5310 + // super(new CMac(new DESEngine())); 5311 + // } 5312 + // } 5313 + // 5314 + // /** 5315 + // * DES9797Alg3with7816-4Padding 5316 + // */ 5317 + // public static class DES9797Alg3with7816d4 5318 + // extends BaseMac 5319 + // { 5320 + // public DES9797Alg3with7816d4() 5321 + // { 5322 + // super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding())); 5323 + // } 5324 + // } 5325 + // 5326 + // /** 5327 + // * DES9797Alg3 5328 + // */ 5329 + // public static class DES9797Alg3 5330 + // extends BaseMac 5331 + // { 5332 + // public DES9797Alg3() 5333 + // { 5334 + // super(new ISO9797Alg3Mac(new DESEngine())); 5335 + // } 5336 + // } 5337 + // 5338 + // public static class RFC3211 5339 + // extends BaseWrapCipher 5340 + // { 5341 + // public RFC3211() 5342 + // { 5343 + // super(new RFC3211WrapEngine(new DESEngine()), 8); 5344 + // } 5345 + // } 5346 + // END android-removed 5347 5348 public static class AlgParamGen 5349 extends BaseAlgorithmParameterGenerator 5350 @@ -350,17 +358,19 @@ 5351 } 5352 } 5353 5354 - /** 5355 - * PBEWithMD2AndDES 5356 - */ 5357 - static public class PBEWithMD2KeyFactory 5358 - extends DESPBEKeyFactory 5359 - { 5360 - public PBEWithMD2KeyFactory() 5361 - { 5362 - super("PBEwithMD2andDES", PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, true, PKCS5S1, MD2, 64, 64); 5363 - } 5364 - } 5365 + // BEGIN android-removed 5366 + // /** 5367 + // * PBEWithMD2AndDES 5368 + // */ 5369 + // static public class PBEWithMD2KeyFactory 5370 + // extends DESPBEKeyFactory 5371 + // { 5372 + // public PBEWithMD2KeyFactory() 5373 + // { 5374 + // super("PBEwithMD2andDES", PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, true, PKCS5S1, MD2, 64, 64); 5375 + // } 5376 + // } 5377 + // END android-removed 5378 5379 /** 5380 * PBEWithMD5AndDES 5381 @@ -386,17 +396,19 @@ 5382 } 5383 } 5384 5385 - /** 5386 - * PBEWithMD2AndDES 5387 - */ 5388 - static public class PBEWithMD2 5389 - extends BaseBlockCipher 5390 - { 5391 - public PBEWithMD2() 5392 - { 5393 - super(new CBCBlockCipher(new DESEngine())); 5394 - } 5395 - } 5396 + // BEGIN android-removed 5397 + // /** 5398 + // * PBEWithMD2AndDES 5399 + // */ 5400 + // static public class PBEWithMD2 5401 + // extends BaseBlockCipher 5402 + // { 5403 + // public PBEWithMD2() 5404 + // { 5405 + // super(new CBCBlockCipher(new DESEngine())); 5406 + // } 5407 + // } 5408 + // END android-removed 5409 5410 /** 5411 * PBEWithMD5AndDES 5412 @@ -436,61 +448,75 @@ 5413 { 5414 5415 provider.addAlgorithm("Cipher.DES", PREFIX + "$ECB"); 5416 - provider.addAlgorithm("Cipher." + OIWObjectIdentifiers.desCBC, PREFIX + "$CBC"); 5417 - 5418 - addAlias(provider, OIWObjectIdentifiers.desCBC, "DES"); 5419 - 5420 - provider.addAlgorithm("Cipher.DESRFC3211WRAP", PREFIX + "$RFC3211"); 5421 + // BEGIN android-removed 5422 + // provider.addAlgorithm("Cipher." + OIWObjectIdentifiers.desCBC, PREFIX + "$CBC"); 5423 + // 5424 + // addAlias(provider, OIWObjectIdentifiers.desCBC, "DES"); 5425 + // 5426 + // provider.addAlgorithm("Cipher.DESRFC3211WRAP", PREFIX + "$RFC3211"); 5427 + // END android-removed 5428 5429 provider.addAlgorithm("KeyGenerator.DES", PREFIX + "$KeyGenerator"); 5430 5431 provider.addAlgorithm("SecretKeyFactory.DES", PREFIX + "$KeyFactory"); 5432 5433 - provider.addAlgorithm("Mac.DESCMAC", PREFIX + "$CMAC"); 5434 - provider.addAlgorithm("Mac.DESMAC", PREFIX + "$CBCMAC"); 5435 - provider.addAlgorithm("Alg.Alias.Mac.DES", "DESMAC"); 5436 - 5437 - provider.addAlgorithm("Mac.DESMAC/CFB8", PREFIX + "$DESCFB8"); 5438 - provider.addAlgorithm("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8"); 5439 - 5440 - provider.addAlgorithm("Mac.DESMAC64", PREFIX + "$DES64"); 5441 - provider.addAlgorithm("Alg.Alias.Mac.DES64", "DESMAC64"); 5442 - 5443 - provider.addAlgorithm("Mac.DESMAC64WITHISO7816-4PADDING", PREFIX + "$DES64with7816d4"); 5444 - provider.addAlgorithm("Alg.Alias.Mac.DES64WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 5445 - provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1MACWITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 5446 - provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 5447 - 5448 - provider.addAlgorithm("Mac.DESWITHISO9797", PREFIX + "$DES9797Alg3"); 5449 - provider.addAlgorithm("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797"); 5450 - 5451 - provider.addAlgorithm("Mac.ISO9797ALG3MAC", PREFIX + "$DES9797Alg3"); 5452 - provider.addAlgorithm("Alg.Alias.Mac.ISO9797ALG3", "ISO9797ALG3MAC"); 5453 - provider.addAlgorithm("Mac.ISO9797ALG3WITHISO7816-4PADDING", PREFIX + "$DES9797Alg3with7816d4"); 5454 - provider.addAlgorithm("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING"); 5455 + // BEGIN android-removed 5456 + // provider.addAlgorithm("Mac.DESCMAC", PREFIX + "$CMAC"); 5457 + // provider.addAlgorithm("Mac.DESMAC", PREFIX + "$CBCMAC"); 5458 + // provider.addAlgorithm("Alg.Alias.Mac.DES", "DESMAC"); 5459 + // 5460 + // provider.addAlgorithm("Mac.DESMAC/CFB8", PREFIX + "$DESCFB8"); 5461 + // provider.addAlgorithm("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8"); 5462 + // 5463 + // provider.addAlgorithm("Mac.DESMAC64", PREFIX + "$DES64"); 5464 + // provider.addAlgorithm("Alg.Alias.Mac.DES64", "DESMAC64"); 5465 + // 5466 + // provider.addAlgorithm("Mac.DESMAC64WITHISO7816-4PADDING", PREFIX + "$DES64with7816d4"); 5467 + // provider.addAlgorithm("Alg.Alias.Mac.DES64WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 5468 + // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1MACWITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 5469 + // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797ALG1WITHISO7816-4PADDING", "DESMAC64WITHISO7816-4PADDING"); 5470 + // 5471 + // provider.addAlgorithm("Mac.DESWITHISO9797", PREFIX + "$DES9797Alg3"); 5472 + // provider.addAlgorithm("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797"); 5473 + // 5474 + // provider.addAlgorithm("Mac.ISO9797ALG3MAC", PREFIX + "$DES9797Alg3"); 5475 + // provider.addAlgorithm("Alg.Alias.Mac.ISO9797ALG3", "ISO9797ALG3MAC"); 5476 + // provider.addAlgorithm("Mac.ISO9797ALG3WITHISO7816-4PADDING", PREFIX + "$DES9797Alg3with7816d4"); 5477 + // provider.addAlgorithm("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING"); 5478 + // END android-removed 5479 5480 provider.addAlgorithm("AlgorithmParameters.DES", PACKAGE + ".util.IvAlgorithmParameters"); 5481 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + OIWObjectIdentifiers.desCBC, "DES"); 5482 5483 - provider.addAlgorithm("AlgorithmParameterGenerator.DES", PREFIX + "$AlgParamGen"); 5484 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "DES"); 5485 - 5486 - provider.addAlgorithm("Cipher.PBEWITHMD2ANDDES", PREFIX + "$PBEWithMD2"); 5487 + // BEGIN android-removed 5488 + // provider.addAlgorithm("AlgorithmParameterGenerator.DES", PREFIX + "$AlgParamGen"); 5489 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "DES"); 5490 + // 5491 + // provider.addAlgorithm("Cipher.PBEWITHMD2ANDDES", PREFIX + "$PBEWithMD2"); 5492 + // END android-removed 5493 provider.addAlgorithm("Cipher.PBEWITHMD5ANDDES", PREFIX + "$PBEWithMD5"); 5494 provider.addAlgorithm("Cipher.PBEWITHSHA1ANDDES", PREFIX + "$PBEWithSHA1"); 5495 5496 - provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 5497 + // BEGIN android-removed 5498 + // provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 5499 + // END android-removed 5500 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES"); 5501 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES"); 5502 5503 - provider.addAlgorithm("SecretKeyFactory.PBEWITHMD2ANDDES", PREFIX + "$PBEWithMD2KeyFactory"); 5504 + // BEGIN android-removed 5505 + // provider.addAlgorithm("SecretKeyFactory.PBEWITHMD2ANDDES", PREFIX + "$PBEWithMD2KeyFactory"); 5506 + // END android-removed 5507 provider.addAlgorithm("SecretKeyFactory.PBEWITHMD5ANDDES", PREFIX + "$PBEWithMD5KeyFactory"); 5508 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHA1ANDDES", PREFIX + "$PBEWithSHA1KeyFactory"); 5509 5510 - provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES"); 5511 + // BEGIN android-removed 5512 + // provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES"); 5513 + // END android-removed 5514 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDDES-CBC", "PBEWITHMD5ANDDES"); 5515 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDDES-CBC", "PBEWITHSHA1ANDDES"); 5516 - provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 5517 + // BEGIN android-removed 5518 + // provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES"); 5519 + // END android-removed 5520 provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES"); 5521 provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES"); 5522 } 5523 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/DESede.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/DESede.java 5524 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/DESede.java 2015-03-01 12:03:02.000000000 +0000 5525 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/DESede.java 2015-04-09 13:10:16.000000000 +0000 5526 @@ -1,30 +1,42 @@ 5527 package org.bouncycastle.jcajce.provider.symmetric; 5528 5529 -import java.security.AlgorithmParameters; 5530 -import java.security.InvalidAlgorithmParameterException; 5531 +// BEGIN android-removed 5532 +// import java.security.AlgorithmParameters; 5533 +// import java.security.InvalidAlgorithmParameterException; 5534 +// END android-removed 5535 import java.security.SecureRandom; 5536 -import java.security.spec.AlgorithmParameterSpec; 5537 +// BEGIN android-removed 5538 +// import java.security.spec.AlgorithmParameterSpec; 5539 +// END android-removed 5540 import java.security.spec.InvalidKeySpecException; 5541 import java.security.spec.KeySpec; 5542 5543 import javax.crypto.SecretKey; 5544 import javax.crypto.spec.DESedeKeySpec; 5545 -import javax.crypto.spec.IvParameterSpec; 5546 +// BEGIN android-removed 5547 +// import javax.crypto.spec.IvParameterSpec; 5548 +// END android-removed 5549 import javax.crypto.spec.SecretKeySpec; 5550 5551 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 5552 import org.bouncycastle.crypto.KeyGenerationParameters; 5553 import org.bouncycastle.crypto.engines.DESedeEngine; 5554 import org.bouncycastle.crypto.engines.DESedeWrapEngine; 5555 -import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 5556 +// BEGIN android-removed 5557 +// import org.bouncycastle.crypto.engines.RFC3211WrapEngine; 5558 +// END android-removed 5559 import org.bouncycastle.crypto.generators.DESedeKeyGenerator; 5560 import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 5561 -import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5562 -import org.bouncycastle.crypto.macs.CMac; 5563 +// BEGIN android-removed 5564 +// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5565 +// import org.bouncycastle.crypto.macs.CMac; 5566 +// END android-removed 5567 import org.bouncycastle.crypto.modes.CBCBlockCipher; 5568 import org.bouncycastle.crypto.paddings.ISO7816d4Padding; 5569 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 5570 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 5571 +// BEGIN android-removed 5572 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 5573 +// END android-removed 5574 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 5575 import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 5576 import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 5577 @@ -56,17 +68,19 @@ 5578 } 5579 } 5580 5581 - /** 5582 - * DESede CFB8 5583 - */ 5584 - public static class DESedeCFB8 5585 - extends BaseMac 5586 - { 5587 - public DESedeCFB8() 5588 - { 5589 - super(new CFBBlockCipherMac(new DESedeEngine())); 5590 - } 5591 - } 5592 + // BEGIN android-removed 5593 + // /** 5594 + // * DESede CFB8 5595 + // */ 5596 + // public static class DESedeCFB8 5597 + // extends BaseMac 5598 + // { 5599 + // public DESedeCFB8() 5600 + // { 5601 + // super(new CFBBlockCipherMac(new DESedeEngine())); 5602 + // } 5603 + // } 5604 + // END android-removed 5605 5606 /** 5607 * DESede64 5608 @@ -101,15 +115,17 @@ 5609 } 5610 } 5611 5612 - static public class CMAC 5613 - extends BaseMac 5614 - { 5615 - public CMAC() 5616 - { 5617 - super(new CMac(new DESedeEngine())); 5618 - } 5619 - } 5620 - 5621 + // BEGIN android-removed 5622 + // static public class CMAC 5623 + // extends BaseMac 5624 + // { 5625 + // public CMAC() 5626 + // { 5627 + // super(new CMac(new DESedeEngine())); 5628 + // } 5629 + // } 5630 + // END android-removed 5631 + 5632 public static class Wrap 5633 extends BaseWrapCipher 5634 { 5635 @@ -118,15 +134,17 @@ 5636 super(new DESedeWrapEngine()); 5637 } 5638 } 5639 - 5640 - public static class RFC3211 5641 - extends BaseWrapCipher 5642 - { 5643 - public RFC3211() 5644 - { 5645 - super(new RFC3211WrapEngine(new DESedeEngine()), 8); 5646 - } 5647 - } 5648 + 5649 + // BEGIN android-removed 5650 + // public static class RFC3211 5651 + // extends BaseWrapCipher 5652 + // { 5653 + // public RFC3211() 5654 + // { 5655 + // super(new RFC3211WrapEngine(new DESedeEngine()), 8); 5656 + // } 5657 + // } 5658 + // END android-removed 5659 5660 /** 5661 * DESede - the default for this is to generate a key in 5662 @@ -240,43 +258,45 @@ 5663 } 5664 } 5665 5666 - public static class AlgParamGen 5667 - extends BaseAlgorithmParameterGenerator 5668 - { 5669 - protected void engineInit( 5670 - AlgorithmParameterSpec genParamSpec, 5671 - SecureRandom random) 5672 - throws InvalidAlgorithmParameterException 5673 - { 5674 - throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 5675 - } 5676 - 5677 - protected AlgorithmParameters engineGenerateParameters() 5678 - { 5679 - byte[] iv = new byte[8]; 5680 - 5681 - if (random == null) 5682 - { 5683 - random = new SecureRandom(); 5684 - } 5685 - 5686 - random.nextBytes(iv); 5687 - 5688 - AlgorithmParameters params; 5689 - 5690 - try 5691 - { 5692 - params = createParametersInstance("DES"); 5693 - params.init(new IvParameterSpec(iv)); 5694 - } 5695 - catch (Exception e) 5696 - { 5697 - throw new RuntimeException(e.getMessage()); 5698 - } 5699 - 5700 - return params; 5701 - } 5702 - } 5703 + // BEGIN android-removed 5704 + // public static class AlgParamGen 5705 + // extends BaseAlgorithmParameterGenerator 5706 + // { 5707 + // protected void engineInit( 5708 + // AlgorithmParameterSpec genParamSpec, 5709 + // SecureRandom random) 5710 + // throws InvalidAlgorithmParameterException 5711 + // { 5712 + // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation."); 5713 + // } 5714 + 5715 + // protected AlgorithmParameters engineGenerateParameters() 5716 + // { 5717 + // byte[] iv = new byte[8]; 5718 + 5719 + // if (random == null) 5720 + // { 5721 + // random = new SecureRandom(); 5722 + // } 5723 + 5724 + // random.nextBytes(iv); 5725 + 5726 + // AlgorithmParameters params; 5727 + 5728 + // try 5729 + // { 5730 + // params = createParametersInstance("DES"); 5731 + // params.init(new IvParameterSpec(iv)); 5732 + // } 5733 + // catch (Exception e) 5734 + // { 5735 + // throw new RuntimeException(e.getMessage()); 5736 + // } 5737 + 5738 + // return params; 5739 + // } 5740 + // } 5741 + // END android-removed 5742 5743 static public class KeyFactory 5744 extends BaseSecretKeyFactory 5745 @@ -360,25 +380,37 @@ 5746 public void configure(ConfigurableProvider provider) 5747 { 5748 provider.addAlgorithm("Cipher.DESEDE", PREFIX + "$ECB"); 5749 - provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC"); 5750 + // BEGIN android-removed 5751 + // provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$CBC"); 5752 + // END android-removed 5753 provider.addAlgorithm("Cipher.DESEDEWRAP", PREFIX + "$Wrap"); 5754 - provider.addAlgorithm("Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, PREFIX + "$Wrap"); 5755 - provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211"); 5756 + // BEGIN android-changed 5757 + provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWRAP"); 5758 + // END android-changed 5759 + // BEGIN android-removed 5760 + // provider.addAlgorithm("Cipher.DESEDERFC3211WRAP", PREFIX + "$RFC3211"); 5761 + // END android-removed 5762 5763 provider.addAlgorithm("Alg.Alias.Cipher.TDEA", "DESEDE"); 5764 provider.addAlgorithm("Alg.Alias.Cipher.TDEAWRAP", "DESEDEWRAP"); 5765 provider.addAlgorithm("Alg.Alias.KeyGenerator.TDEA", "DESEDE"); 5766 provider.addAlgorithm("Alg.Alias.AlgorithmParameters.TDEA", "DESEDE"); 5767 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator.TDEA", "DESEDE"); 5768 + // BEGIN android-removed 5769 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator.TDEA", "DESEDE"); 5770 + // END android-removed 5771 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.TDEA", "DESEDE"); 5772 5773 if (provider.hasAlgorithm("MessageDigest", "SHA-1")) 5774 { 5775 provider.addAlgorithm("Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES3Key"); 5776 - provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key"); 5777 - provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key"); 5778 + // BEGIN android-removed 5779 + // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES3Key"); 5780 + // provider.addAlgorithm("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$OldPBEWithSHAAndDES3Key"); 5781 + // END android-removed 5782 provider.addAlgorithm("Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES2Key"); 5783 - provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key"); 5784 + // BEGIN android-removed 5785 + // provider.addAlgorithm("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$BrokePBEWithSHAAndDES2Key"); 5786 + // END android-removed 5787 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd3_KeyTripleDES_CBC, "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"); 5788 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHAAnd2_KeyTripleDES_CBC, "PBEWITHSHAAND2-KEYTRIPLEDES-CBC"); 5789 provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1ANDDESEDE", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC"); 5790 @@ -387,31 +419,37 @@ 5791 } 5792 5793 provider.addAlgorithm("KeyGenerator.DESEDE", PREFIX + "$KeyGenerator"); 5794 - provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3"); 5795 - provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator"); 5796 + // BEGIN android-removed 5797 + // provider.addAlgorithm("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, PREFIX + "$KeyGenerator3"); 5798 + // provider.addAlgorithm("KeyGenerator.DESEDEWRAP", PREFIX + "$KeyGenerator"); 5799 + // END android-removed 5800 5801 provider.addAlgorithm("SecretKeyFactory.DESEDE", PREFIX + "$KeyFactory"); 5802 5803 - provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC"); 5804 - provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC"); 5805 - provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC"); 5806 - 5807 - provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8"); 5808 - provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8"); 5809 - 5810 - provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64"); 5811 - provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64"); 5812 - 5813 - provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4"); 5814 - provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 5815 - provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 5816 - provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 5817 + // BEGIN android-removed 5818 + // provider.addAlgorithm("Mac.DESEDECMAC", PREFIX + "$CMAC"); 5819 + // provider.addAlgorithm("Mac.DESEDEMAC", PREFIX + "$CBCMAC"); 5820 + // provider.addAlgorithm("Alg.Alias.Mac.DESEDE", "DESEDEMAC"); 5821 + // 5822 + // provider.addAlgorithm("Mac.DESEDEMAC/CFB8", PREFIX + "$DESedeCFB8"); 5823 + // provider.addAlgorithm("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8"); 5824 + // 5825 + // provider.addAlgorithm("Mac.DESEDEMAC64", PREFIX + "$DESede64"); 5826 + // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64"); 5827 + // 5828 + // provider.addAlgorithm("Mac.DESEDEMAC64WITHISO7816-4PADDING", PREFIX + "$DESede64with7816d4"); 5829 + // provider.addAlgorithm("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 5830 + // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 5831 + // provider.addAlgorithm("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING"); 5832 + // END android-removed 5833 5834 provider.addAlgorithm("AlgorithmParameters.DESEDE", PACKAGE + ".util.IvAlgorithmParameters"); 5835 provider.addAlgorithm("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE"); 5836 5837 - provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE", PREFIX + "$AlgParamGen"); 5838 - provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE"); 5839 + // BEGIN android-removed 5840 + // provider.addAlgorithm("AlgorithmParameterGenerator.DESEDE", PREFIX + "$AlgParamGen"); 5841 + // provider.addAlgorithm("Alg.Alias.AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE"); 5842 + // END android-removed 5843 5844 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES3KeyFactory"); 5845 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", PREFIX + "$PBEWithSHAAndDES2KeyFactory"); 5846 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/RC2.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/RC2.java 5847 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/RC2.java 2015-03-01 12:03:02.000000000 +0000 5848 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/RC2.java 2015-04-09 13:10:16.000000000 +0000 5849 @@ -12,20 +12,28 @@ 5850 5851 import org.bouncycastle.asn1.ASN1Primitive; 5852 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 5853 -import org.bouncycastle.asn1.pkcs.RC2CBCParameter; 5854 -import org.bouncycastle.crypto.CipherKeyGenerator; 5855 +// BEGIN android-removed 5856 +// import org.bouncycastle.asn1.pkcs.RC2CBCParameter; 5857 +// import org.bouncycastle.crypto.CipherKeyGenerator; 5858 +// END android-removed 5859 import org.bouncycastle.crypto.engines.RC2Engine; 5860 -import org.bouncycastle.crypto.engines.RC2WrapEngine; 5861 -import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 5862 -import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5863 +// BEGIN android-removed 5864 +// import org.bouncycastle.crypto.engines.RC2WrapEngine; 5865 +// import org.bouncycastle.crypto.macs.CBCBlockCipherMac; 5866 +// import org.bouncycastle.crypto.macs.CFBBlockCipherMac; 5867 +// END android-removed 5868 import org.bouncycastle.crypto.modes.CBCBlockCipher; 5869 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 5870 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 5871 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters; 5872 +// BEGIN android-removed 5873 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator; 5874 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters; 5875 +// END android-removed 5876 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 5877 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 5878 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 5879 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher; 5880 +// BEGIN android-removed 5881 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 5882 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 5883 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher; 5884 +// END android-removed 5885 import org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory; 5886 import org.bouncycastle.jcajce.provider.util.AlgorithmProvider; 5887 import org.bouncycastle.util.Arrays; 5888 @@ -36,59 +44,61 @@ 5889 { 5890 } 5891 5892 - /** 5893 - * RC2 5894 - */ 5895 - static public class ECB 5896 - extends BaseBlockCipher 5897 - { 5898 - public ECB() 5899 - { 5900 - super(new RC2Engine()); 5901 - } 5902 - } 5903 - 5904 - /** 5905 - * RC2CBC 5906 - */ 5907 - static public class CBC 5908 - extends BaseBlockCipher 5909 - { 5910 - public CBC() 5911 - { 5912 - super(new CBCBlockCipher(new RC2Engine()), 64); 5913 - } 5914 - } 5915 - 5916 - public static class Wrap 5917 - extends BaseWrapCipher 5918 - { 5919 - public Wrap() 5920 - { 5921 - super(new RC2WrapEngine()); 5922 - } 5923 - } 5924 - 5925 - /** 5926 - * RC2 5927 - */ 5928 - public static class CBCMAC 5929 - extends BaseMac 5930 - { 5931 - public CBCMAC() 5932 - { 5933 - super(new CBCBlockCipherMac(new RC2Engine())); 5934 - } 5935 - } 5936 - 5937 - public static class CFB8MAC 5938 - extends BaseMac 5939 - { 5940 - public CFB8MAC() 5941 - { 5942 - super(new CFBBlockCipherMac(new RC2Engine())); 5943 - } 5944 - } 5945 + // BEGIN android-removed 5946 + // /** 5947 + // * RC2 5948 + // */ 5949 + // static public class ECB 5950 + // extends BaseBlockCipher 5951 + // { 5952 + // public ECB() 5953 + // { 5954 + // super(new RC2Engine()); 5955 + // } 5956 + // } 5957 + // 5958 + // /** 5959 + // * RC2CBC 5960 + // */ 5961 + // static public class CBC 5962 + // extends BaseBlockCipher 5963 + // { 5964 + // public CBC() 5965 + // { 5966 + // super(new CBCBlockCipher(new RC2Engine()), 64); 5967 + // } 5968 + // } 5969 + // 5970 + // public static class Wrap 5971 + // extends BaseWrapCipher 5972 + // { 5973 + // public Wrap() 5974 + // { 5975 + // super(new RC2WrapEngine()); 5976 + // } 5977 + // } 5978 + // 5979 + // /** 5980 + // * RC2 5981 + // */ 5982 + // public static class CBCMAC 5983 + // extends BaseMac 5984 + // { 5985 + // public CBCMAC() 5986 + // { 5987 + // super(new CBCBlockCipherMac(new RC2Engine())); 5988 + // } 5989 + // } 5990 + // 5991 + // public static class CFB8MAC 5992 + // extends BaseMac 5993 + // { 5994 + // public CFB8MAC() 5995 + // { 5996 + // super(new CFBBlockCipherMac(new RC2Engine())); 5997 + // } 5998 + // } 5999 + // END android-removed 6000 6001 /** 6002 * PBEWithSHA1AndRC2 6003 @@ -174,17 +184,19 @@ 6004 } 6005 } 6006 6007 - /** 6008 - * PBEWithMD2AndRC2 6009 - */ 6010 - static public class PBEWithMD2KeyFactory 6011 - extends PBESecretKeyFactory 6012 - { 6013 - public PBEWithMD2KeyFactory() 6014 - { 6015 - super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64); 6016 - } 6017 - } 6018 + // BEGIN android-removed 6019 + // /** 6020 + // * PBEWithMD2AndRC2 6021 + // */ 6022 + // static public class PBEWithMD2KeyFactory 6023 + // extends PBESecretKeyFactory 6024 + // { 6025 + // public PBEWithMD2KeyFactory() 6026 + // { 6027 + // super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64); 6028 + // } 6029 + // } 6030 + // END android-removed 6031 6032 /** 6033 * PBEWithMD5AndRC2 6034 @@ -198,247 +210,249 @@ 6035 } 6036 } 6037 6038 - public static class AlgParamGen 6039 - extends BaseAlgorithmParameterGenerator 6040 - { 6041 - RC2ParameterSpec spec = null; 6042 - 6043 - protected void engineInit( 6044 - AlgorithmParameterSpec genParamSpec, 6045 - SecureRandom random) 6046 - throws InvalidAlgorithmParameterException 6047 - { 6048 - if (genParamSpec instanceof RC2ParameterSpec) 6049 - { 6050 - spec = (RC2ParameterSpec)genParamSpec; 6051 - return; 6052 - } 6053 - 6054 - throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation."); 6055 - } 6056 - 6057 - protected AlgorithmParameters engineGenerateParameters() 6058 - { 6059 - AlgorithmParameters params; 6060 - 6061 - if (spec == null) 6062 - { 6063 - byte[] iv = new byte[8]; 6064 - 6065 - if (random == null) 6066 - { 6067 - random = new SecureRandom(); 6068 - } 6069 - 6070 - random.nextBytes(iv); 6071 - 6072 - try 6073 - { 6074 - params = createParametersInstance("RC2"); 6075 - params.init(new IvParameterSpec(iv)); 6076 - } 6077 - catch (Exception e) 6078 - { 6079 - throw new RuntimeException(e.getMessage()); 6080 - } 6081 - } 6082 - else 6083 - { 6084 - try 6085 - { 6086 - params = createParametersInstance("RC2"); 6087 - params.init(spec); 6088 - } 6089 - catch (Exception e) 6090 - { 6091 - throw new RuntimeException(e.getMessage()); 6092 - } 6093 - } 6094 - 6095 - return params; 6096 - } 6097 - } 6098 - 6099 - public static class KeyGenerator 6100 - extends BaseKeyGenerator 6101 - { 6102 - public KeyGenerator() 6103 - { 6104 - super("RC2", 128, new CipherKeyGenerator()); 6105 - } 6106 - } 6107 - 6108 - public static class AlgParams 6109 - extends BaseAlgorithmParameters 6110 - { 6111 - private static final short[] table = { 6112 - 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, 6113 - 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, 6114 - 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, 6115 - 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, 6116 - 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, 6117 - 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, 6118 - 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, 6119 - 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, 6120 - 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, 6121 - 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, 6122 - 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, 6123 - 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, 6124 - 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, 6125 - 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, 6126 - 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, 6127 - 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab 6128 - }; 6129 - 6130 - private static final short[] ekb = { 6131 - 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, 6132 - 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, 6133 - 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, 6134 - 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, 6135 - 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, 6136 - 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, 6137 - 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, 6138 - 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, 6139 - 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, 6140 - 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, 6141 - 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, 6142 - 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, 6143 - 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, 6144 - 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, 6145 - 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, 6146 - 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd 6147 - }; 6148 - 6149 - private byte[] iv; 6150 - private int parameterVersion = 58; 6151 - 6152 - protected byte[] engineGetEncoded() 6153 - { 6154 - return Arrays.clone(iv); 6155 - } 6156 - 6157 - protected byte[] engineGetEncoded( 6158 - String format) 6159 - throws IOException 6160 - { 6161 - if (this.isASN1FormatString(format)) 6162 - { 6163 - if (parameterVersion == -1) 6164 - { 6165 - return new RC2CBCParameter(engineGetEncoded()).getEncoded(); 6166 - } 6167 - else 6168 - { 6169 - return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded(); 6170 - } 6171 - } 6172 - 6173 - if (format.equals("RAW")) 6174 - { 6175 - return engineGetEncoded(); 6176 - } 6177 - 6178 - return null; 6179 - } 6180 - 6181 - protected AlgorithmParameterSpec localEngineGetParameterSpec( 6182 - Class paramSpec) 6183 - throws InvalidParameterSpecException 6184 - { 6185 - if (paramSpec == RC2ParameterSpec.class) 6186 - { 6187 - if (parameterVersion != -1) 6188 - { 6189 - if (parameterVersion < 256) 6190 - { 6191 - return new RC2ParameterSpec(ekb[parameterVersion], iv); 6192 - } 6193 - else 6194 - { 6195 - return new RC2ParameterSpec(parameterVersion, iv); 6196 - } 6197 - } 6198 - } 6199 - 6200 - if (paramSpec == IvParameterSpec.class) 6201 - { 6202 - return new IvParameterSpec(iv); 6203 - } 6204 - 6205 - throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object."); 6206 - } 6207 - 6208 - protected void engineInit( 6209 - AlgorithmParameterSpec paramSpec) 6210 - throws InvalidParameterSpecException 6211 - { 6212 - if (paramSpec instanceof IvParameterSpec) 6213 - { 6214 - this.iv = ((IvParameterSpec)paramSpec).getIV(); 6215 - } 6216 - else if (paramSpec instanceof RC2ParameterSpec) 6217 - { 6218 - int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits(); 6219 - if (effKeyBits != -1) 6220 - { 6221 - if (effKeyBits < 256) 6222 - { 6223 - parameterVersion = table[effKeyBits]; 6224 - } 6225 - else 6226 - { 6227 - parameterVersion = effKeyBits; 6228 - } 6229 - } 6230 - 6231 - this.iv = ((RC2ParameterSpec)paramSpec).getIV(); 6232 - } 6233 - else 6234 - { 6235 - throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object"); 6236 - } 6237 - } 6238 - 6239 - protected void engineInit( 6240 - byte[] params) 6241 - throws IOException 6242 - { 6243 - this.iv = Arrays.clone(params); 6244 - } 6245 - 6246 - protected void engineInit( 6247 - byte[] params, 6248 - String format) 6249 - throws IOException 6250 - { 6251 - if (this.isASN1FormatString(format)) 6252 - { 6253 - RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params)); 6254 - 6255 - if (p.getRC2ParameterVersion() != null) 6256 - { 6257 - parameterVersion = p.getRC2ParameterVersion().intValue(); 6258 - } 6259 - 6260 - iv = p.getIV(); 6261 - 6262 - return; 6263 - } 6264 - 6265 - if (format.equals("RAW")) 6266 - { 6267 - engineInit(params); 6268 - return; 6269 - } 6270 - 6271 - throw new IOException("Unknown parameters format in IV parameters object"); 6272 - } 6273 - 6274 - protected String engineToString() 6275 - { 6276 - return "RC2 Parameters"; 6277 - } 6278 - } 6279 + // BEGIN android-removed 6280 + // public static class AlgParamGen 6281 + // extends BaseAlgorithmParameterGenerator 6282 + // { 6283 + // RC2ParameterSpec spec = null; 6284 + // 6285 + // protected void engineInit( 6286 + // AlgorithmParameterSpec genParamSpec, 6287 + // SecureRandom random) 6288 + // throws InvalidAlgorithmParameterException 6289 + // { 6290 + // if (genParamSpec instanceof RC2ParameterSpec) 6291 + // { 6292 + // spec = (RC2ParameterSpec)genParamSpec; 6293 + // return; 6294 + // } 6295 + // 6296 + // throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation."); 6297 + // } 6298 + // 6299 + // protected AlgorithmParameters engineGenerateParameters() 6300 + // { 6301 + // AlgorithmParameters params; 6302 + // 6303 + // if (spec == null) 6304 + // { 6305 + // byte[] iv = new byte[8]; 6306 + // 6307 + // if (random == null) 6308 + // { 6309 + // random = new SecureRandom(); 6310 + // } 6311 + // 6312 + // random.nextBytes(iv); 6313 + // 6314 + // try 6315 + // { 6316 + // params = createParametersInstance("RC2"); 6317 + // params.init(new IvParameterSpec(iv)); 6318 + // } 6319 + // catch (Exception e) 6320 + // { 6321 + // throw new RuntimeException(e.getMessage()); 6322 + // } 6323 + // } 6324 + // else 6325 + // { 6326 + // try 6327 + // { 6328 + // params = createParametersInstance("RC2"); 6329 + // params.init(spec); 6330 + // } 6331 + // catch (Exception e) 6332 + // { 6333 + // throw new RuntimeException(e.getMessage()); 6334 + // } 6335 + // } 6336 + // 6337 + // return params; 6338 + // } 6339 + // } 6340 + // 6341 + // public static class KeyGenerator 6342 + // extends BaseKeyGenerator 6343 + // { 6344 + // public KeyGenerator() 6345 + // { 6346 + // super("RC2", 128, new CipherKeyGenerator()); 6347 + // } 6348 + // } 6349 + // 6350 + // public static class AlgParams 6351 + // extends BaseAlgorithmParameters 6352 + // { 6353 + // private static final short[] table = { 6354 + // 0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0, 6355 + // 0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a, 6356 + // 0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36, 6357 + // 0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c, 6358 + // 0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60, 6359 + // 0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa, 6360 + // 0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e, 6361 + // 0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf, 6362 + // 0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6, 6363 + // 0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3, 6364 + // 0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c, 6365 + // 0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2, 6366 + // 0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5, 6367 + // 0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5, 6368 + // 0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f, 6369 + // 0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab 6370 + // }; 6371 + // 6372 + // private static final short[] ekb = { 6373 + // 0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5, 6374 + // 0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5, 6375 + // 0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef, 6376 + // 0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d, 6377 + // 0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb, 6378 + // 0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d, 6379 + // 0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3, 6380 + // 0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61, 6381 + // 0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1, 6382 + // 0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21, 6383 + // 0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42, 6384 + // 0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f, 6385 + // 0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7, 6386 + // 0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15, 6387 + // 0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7, 6388 + // 0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd 6389 + // }; 6390 + // 6391 + // private byte[] iv; 6392 + // private int parameterVersion = 58; 6393 + // 6394 + // protected byte[] engineGetEncoded() 6395 + // { 6396 + // return Arrays.clone(iv); 6397 + // } 6398 + // 6399 + // protected byte[] engineGetEncoded( 6400 + // String format) 6401 + // throws IOException 6402 + // { 6403 + // if (this.isASN1FormatString(format)) 6404 + // { 6405 + // if (parameterVersion == -1) 6406 + // { 6407 + // return new RC2CBCParameter(engineGetEncoded()).getEncoded(); 6408 + // } 6409 + // else 6410 + // { 6411 + // return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded(); 6412 + // } 6413 + // } 6414 + // 6415 + // if (format.equals("RAW")) 6416 + // { 6417 + // return engineGetEncoded(); 6418 + // } 6419 + // 6420 + // return null; 6421 + // } 6422 + // 6423 + // protected AlgorithmParameterSpec localEngineGetParameterSpec( 6424 + // Class paramSpec) 6425 + // throws InvalidParameterSpecException 6426 + // { 6427 + // if (paramSpec == RC2ParameterSpec.class) 6428 + // { 6429 + // if (parameterVersion != -1) 6430 + // { 6431 + // if (parameterVersion < 256) 6432 + // { 6433 + // return new RC2ParameterSpec(ekb[parameterVersion], iv); 6434 + // } 6435 + // else 6436 + // { 6437 + // return new RC2ParameterSpec(parameterVersion, iv); 6438 + // } 6439 + // } 6440 + // } 6441 + // 6442 + // if (paramSpec == IvParameterSpec.class) 6443 + // { 6444 + // return new IvParameterSpec(iv); 6445 + // } 6446 + // 6447 + // throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object."); 6448 + // } 6449 + // 6450 + // protected void engineInit( 6451 + // AlgorithmParameterSpec paramSpec) 6452 + // throws InvalidParameterSpecException 6453 + // { 6454 + // if (paramSpec instanceof IvParameterSpec) 6455 + // { 6456 + // this.iv = ((IvParameterSpec)paramSpec).getIV(); 6457 + // } 6458 + // else if (paramSpec instanceof RC2ParameterSpec) 6459 + // { 6460 + // int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits(); 6461 + // if (effKeyBits != -1) 6462 + // { 6463 + // if (effKeyBits < 256) 6464 + // { 6465 + // parameterVersion = table[effKeyBits]; 6466 + // } 6467 + // else 6468 + // { 6469 + // parameterVersion = effKeyBits; 6470 + // } 6471 + // } 6472 + // 6473 + // this.iv = ((RC2ParameterSpec)paramSpec).getIV(); 6474 + // } 6475 + // else 6476 + // { 6477 + // throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object"); 6478 + // } 6479 + // } 6480 + // 6481 + // protected void engineInit( 6482 + // byte[] params) 6483 + // throws IOException 6484 + // { 6485 + // this.iv = Arrays.clone(params); 6486 + // } 6487 + // 6488 + // protected void engineInit( 6489 + // byte[] params, 6490 + // String format) 6491 + // throws IOException 6492 + // { 6493 + // if (this.isASN1FormatString(format)) 6494 + // { 6495 + // RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params)); 6496 + // 6497 + // if (p.getRC2ParameterVersion() != null) 6498 + // { 6499 + // parameterVersion = p.getRC2ParameterVersion().intValue(); 6500 + // } 6501 + // 6502 + // iv = p.getIV(); 6503 + // 6504 + // return; 6505 + // } 6506 + // 6507 + // if (format.equals("RAW")) 6508 + // { 6509 + // engineInit(params); 6510 + // return; 6511 + // } 6512 + // 6513 + // throw new IOException("Unknown parameters format in IV parameters object"); 6514 + // } 6515 + // 6516 + // protected String engineToString() 6517 + // { 6518 + // return "RC2 Parameters"; 6519 + // } 6520 + // } 6521 + // END android-removed 6522 6523 public static class Mappings 6524 extends AlgorithmProvider 6525 @@ -452,32 +466,36 @@ 6526 public void configure(ConfigurableProvider provider) 6527 { 6528 6529 - provider.addAlgorithm("AlgorithmParameterGenerator.RC2", PREFIX + "$AlgParamGen"); 6530 - provider.addAlgorithm("AlgorithmParameterGenerator.1.2.840.113549.3.2", PREFIX + "$AlgParamGen"); 6531 - 6532 - provider.addAlgorithm("KeyGenerator.RC2", PREFIX + "$KeyGenerator"); 6533 - provider.addAlgorithm("KeyGenerator.1.2.840.113549.3.2", PREFIX + "$KeyGenerator"); 6534 - 6535 - provider.addAlgorithm("AlgorithmParameters.RC2", PREFIX + "$AlgParams"); 6536 - provider.addAlgorithm("AlgorithmParameters.1.2.840.113549.3.2", PREFIX + "$AlgParams"); 6537 - 6538 - provider.addAlgorithm("Cipher.RC2", PREFIX + "$ECB"); 6539 - provider.addAlgorithm("Cipher.RC2WRAP", PREFIX + "$Wrap"); 6540 - provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMSRC2wrap, "RC2WRAP"); 6541 - provider.addAlgorithm("Cipher.1.2.840.113549.3.2", PREFIX + "$CBC"); 6542 - 6543 - provider.addAlgorithm("Mac.RC2MAC", PREFIX + "$CBCMAC"); 6544 - provider.addAlgorithm("Alg.Alias.Mac.RC2", "RC2MAC"); 6545 - provider.addAlgorithm("Mac.RC2MAC/CFB8", PREFIX + "$CFB8MAC"); 6546 - provider.addAlgorithm("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8"); 6547 - 6548 - provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2"); 6549 + // BEGIN android-removed 6550 + // provider.addAlgorithm("AlgorithmParameterGenerator.RC2", PREFIX + "$AlgParamGen"); 6551 + // provider.addAlgorithm("AlgorithmParameterGenerator.1.2.840.113549.3.2", PREFIX + "$AlgParamGen"); 6552 + // 6553 + // provider.addAlgorithm("KeyGenerator.RC2", PREFIX + "$KeyGenerator"); 6554 + // provider.addAlgorithm("KeyGenerator.1.2.840.113549.3.2", PREFIX + "$KeyGenerator"); 6555 + // 6556 + // provider.addAlgorithm("AlgorithmParameters.RC2", PREFIX + "$AlgParams"); 6557 + // provider.addAlgorithm("AlgorithmParameters.1.2.840.113549.3.2", PREFIX + "$AlgParams"); 6558 + // 6559 + // provider.addAlgorithm("Cipher.RC2", PREFIX + "$ECB"); 6560 + // provider.addAlgorithm("Cipher.RC2WRAP", PREFIX + "$Wrap"); 6561 + // provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMSRC2wrap, "RC2WRAP"); 6562 + // provider.addAlgorithm("Cipher.1.2.840.113549.3.2", PREFIX + "$CBC"); 6563 + // 6564 + // provider.addAlgorithm("Mac.RC2MAC", PREFIX + "$CBCMAC"); 6565 + // provider.addAlgorithm("Alg.Alias.Mac.RC2", "RC2MAC"); 6566 + // provider.addAlgorithm("Mac.RC2MAC/CFB8", PREFIX + "$CFB8MAC"); 6567 + // provider.addAlgorithm("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8"); 6568 + // 6569 + // provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2"); 6570 + // END android-removed 6571 6572 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDRC2-CBC", "PBEWITHMD5ANDRC2"); 6573 6574 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDRC2-CBC", "PBEWITHSHA1ANDRC2"); 6575 6576 - provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6577 + // BEGIN android-removed 6578 + // provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6579 + // END android-removed 6580 6581 provider.addAlgorithm("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2"); 6582 6583 @@ -485,14 +503,18 @@ 6584 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.5", "PBEWITHSHAAND128BITRC2-CBC"); 6585 provider.addAlgorithm("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.6", "PBEWITHSHAAND40BITRC2-CBC"); 6586 6587 - provider.addAlgorithm("SecretKeyFactory.PBEWITHMD2ANDRC2", PREFIX + "$PBEWithMD2KeyFactory"); 6588 + // BEGIN android-removed 6589 + // provider.addAlgorithm("SecretKeyFactory.PBEWITHMD2ANDRC2", PREFIX + "$PBEWithMD2KeyFactory"); 6590 + // END android-removed 6591 provider.addAlgorithm("SecretKeyFactory.PBEWITHMD5ANDRC2", PREFIX + "$PBEWithMD5KeyFactory"); 6592 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHA1ANDRC2", PREFIX + "$PBEWithSHA1KeyFactory"); 6593 6594 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND128BITRC2-CBC", PREFIX + "$PBEWithSHAAnd128BitKeyFactory"); 6595 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND40BITRC2-CBC", PREFIX + "$PBEWithSHAAnd40BitKeyFactory"); 6596 6597 - provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6598 + // BEGIN android-removed 6599 + // provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2"); 6600 + // END android-removed 6601 6602 provider.addAlgorithm("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2"); 6603 6604 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider.java 6605 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider.java 2015-03-01 12:03:02.000000000 +0000 6606 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider.java 2013-12-12 00:35:05.000000000 +0000 6607 @@ -6,29 +6,31 @@ 6608 abstract class SymmetricAlgorithmProvider 6609 extends AlgorithmProvider 6610 { 6611 - protected void addGMacAlgorithm( 6612 - ConfigurableProvider provider, 6613 - String algorithm, 6614 - String algorithmClassName, 6615 - String keyGeneratorClassName) 6616 - { 6617 - provider.addAlgorithm("Mac." + algorithm + "-GMAC", algorithmClassName); 6618 - provider.addAlgorithm("Alg.Alias.Mac." + algorithm + "GMAC", algorithm + "-GMAC"); 6619 - 6620 - provider.addAlgorithm("KeyGenerator." + algorithm + "-GMAC", keyGeneratorClassName); 6621 - provider.addAlgorithm("Alg.Alias.KeyGenerator." + algorithm + "GMAC", algorithm + "-GMAC"); 6622 - } 6623 - 6624 - protected void addPoly1305Algorithm(ConfigurableProvider provider, 6625 - String algorithm, 6626 - String algorithmClassName, 6627 - String keyGeneratorClassName) 6628 - { 6629 - provider.addAlgorithm("Mac.POLY1305-" + algorithm, algorithmClassName); 6630 - provider.addAlgorithm("Alg.Alias.Mac.POLY1305" + algorithm, "POLY1305-" + algorithm); 6631 - 6632 - provider.addAlgorithm("KeyGenerator.POLY1305-" + algorithm, keyGeneratorClassName); 6633 - provider.addAlgorithm("Alg.Alias.KeyGenerator.POLY1305" + algorithm, "POLY1305-" + algorithm); 6634 - } 6635 + // BEGIN android-removed 6636 + // protected void addGMacAlgorithm( 6637 + // ConfigurableProvider provider, 6638 + // String algorithm, 6639 + // String algorithmClassName, 6640 + // String keyGeneratorClassName) 6641 + // { 6642 + // provider.addAlgorithm("Mac." + algorithm + "-GMAC", algorithmClassName); 6643 + // provider.addAlgorithm("Alg.Alias.Mac." + algorithm + "GMAC", algorithm + "-GMAC"); 6644 + // 6645 + // provider.addAlgorithm("KeyGenerator." + algorithm + "-GMAC", keyGeneratorClassName); 6646 + // provider.addAlgorithm("Alg.Alias.KeyGenerator." + algorithm + "GMAC", algorithm + "-GMAC"); 6647 + // } 6648 + // 6649 + // protected void addPoly1305Algorithm(ConfigurableProvider provider, 6650 + // String algorithm, 6651 + // String algorithmClassName, 6652 + // String keyGeneratorClassName) 6653 + // { 6654 + // provider.addAlgorithm("Mac.POLY1305-" + algorithm, algorithmClassName); 6655 + // provider.addAlgorithm("Alg.Alias.Mac.POLY1305" + algorithm, "POLY1305-" + algorithm); 6656 + // 6657 + // provider.addAlgorithm("KeyGenerator.POLY1305-" + algorithm, keyGeneratorClassName); 6658 + // provider.addAlgorithm("Alg.Alias.KeyGenerator.POLY1305" + algorithm, "POLY1305-" + algorithm); 6659 + // } 6660 + // END android-removed 6661 6662 } 6663 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/Twofish.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/Twofish.java 6664 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/Twofish.java 2015-03-01 12:03:02.000000000 +0000 6665 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/Twofish.java 2013-12-12 00:35:05.000000000 +0000 6666 @@ -1,18 +1,26 @@ 6667 package org.bouncycastle.jcajce.provider.symmetric; 6668 6669 -import org.bouncycastle.crypto.BlockCipher; 6670 -import org.bouncycastle.crypto.CipherKeyGenerator; 6671 +// BEGIN android-removed 6672 +// import org.bouncycastle.crypto.BlockCipher; 6673 +// import org.bouncycastle.crypto.CipherKeyGenerator; 6674 +// END android-removed 6675 import org.bouncycastle.crypto.engines.TwofishEngine; 6676 -import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; 6677 -import org.bouncycastle.crypto.macs.GMac; 6678 +// BEGIN android-removed 6679 +// import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; 6680 +// import org.bouncycastle.crypto.macs.GMac; 6681 +// END android-removed 6682 import org.bouncycastle.crypto.modes.CBCBlockCipher; 6683 -import org.bouncycastle.crypto.modes.GCMBlockCipher; 6684 +// BEGIN android-removed 6685 +// import org.bouncycastle.crypto.modes.GCMBlockCipher; 6686 +// END android-removed 6687 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider; 6688 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher; 6689 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 6690 -import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 6691 -import org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider; 6692 -import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters; 6693 +// BEGIN android-removed 6694 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator; 6695 +// import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac; 6696 +// import org.bouncycastle.jcajce.provider.symmetric.util.BlockCipherProvider; 6697 +// import org.bouncycastle.jcajce.provider.symmetric.util.IvAlgorithmParameters; 6698 +// END android-removed 6699 import org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory; 6700 6701 public final class Twofish 6702 @@ -21,56 +29,58 @@ 6703 { 6704 } 6705 6706 - public static class ECB 6707 - extends BaseBlockCipher 6708 - { 6709 - public ECB() 6710 - { 6711 - super(new BlockCipherProvider() 6712 - { 6713 - public BlockCipher get() 6714 - { 6715 - return new TwofishEngine(); 6716 - } 6717 - }); 6718 - } 6719 - } 6720 - 6721 - public static class KeyGen 6722 - extends BaseKeyGenerator 6723 - { 6724 - public KeyGen() 6725 - { 6726 - super("Twofish", 256, new CipherKeyGenerator()); 6727 - } 6728 - } 6729 - 6730 - public static class GMAC 6731 - extends BaseMac 6732 - { 6733 - public GMAC() 6734 - { 6735 - super(new GMac(new GCMBlockCipher(new TwofishEngine()))); 6736 - } 6737 - } 6738 - 6739 - public static class Poly1305 6740 - extends BaseMac 6741 - { 6742 - public Poly1305() 6743 - { 6744 - super(new org.bouncycastle.crypto.macs.Poly1305(new TwofishEngine())); 6745 - } 6746 - } 6747 - 6748 - public static class Poly1305KeyGen 6749 - extends BaseKeyGenerator 6750 - { 6751 - public Poly1305KeyGen() 6752 - { 6753 - super("Poly1305-Twofish", 256, new Poly1305KeyGenerator()); 6754 - } 6755 - } 6756 + // BEGIN android-removed 6757 + // public static class ECB 6758 + // extends BaseBlockCipher 6759 + // { 6760 + // public ECB() 6761 + // { 6762 + // super(new BlockCipherProvider() 6763 + // { 6764 + // public BlockCipher get() 6765 + // { 6766 + // return new TwofishEngine(); 6767 + // } 6768 + // }); 6769 + // } 6770 + // } 6771 + // 6772 + // public static class KeyGen 6773 + // extends BaseKeyGenerator 6774 + // { 6775 + // public KeyGen() 6776 + // { 6777 + // super("Twofish", 256, new CipherKeyGenerator()); 6778 + // } 6779 + // } 6780 + // 6781 + // public static class GMAC 6782 + // extends BaseMac 6783 + // { 6784 + // public GMAC() 6785 + // { 6786 + // super(new GMac(new GCMBlockCipher(new TwofishEngine()))); 6787 + // } 6788 + // } 6789 + // 6790 + // public static class Poly1305 6791 + // extends BaseMac 6792 + // { 6793 + // public Poly1305() 6794 + // { 6795 + // super(new org.bouncycastle.crypto.macs.Poly1305(new TwofishEngine())); 6796 + // } 6797 + // } 6798 + // 6799 + // public static class Poly1305KeyGen 6800 + // extends BaseKeyGenerator 6801 + // { 6802 + // public Poly1305KeyGen() 6803 + // { 6804 + // super("Poly1305-Twofish", 256, new Poly1305KeyGenerator()); 6805 + // } 6806 + // } 6807 + // END android-removed 6808 6809 /** 6810 * PBEWithSHAAndTwofish-CBC 6811 @@ -96,14 +106,16 @@ 6812 } 6813 } 6814 6815 - public static class AlgParams 6816 - extends IvAlgorithmParameters 6817 - { 6818 - protected String engineToString() 6819 - { 6820 - return "Twofish IV"; 6821 - } 6822 - } 6823 + // BEGIN android-removed 6824 + // public static class AlgParams 6825 + // extends IvAlgorithmParameters 6826 + // { 6827 + // protected String engineToString() 6828 + // { 6829 + // return "Twofish IV"; 6830 + // } 6831 + // } 6832 + // END android-removed 6833 6834 public static class Mappings 6835 extends SymmetricAlgorithmProvider 6836 @@ -116,17 +128,21 @@ 6837 6838 public void configure(ConfigurableProvider provider) 6839 { 6840 - provider.addAlgorithm("Cipher.Twofish", PREFIX + "$ECB"); 6841 - provider.addAlgorithm("KeyGenerator.Twofish", PREFIX + "$KeyGen"); 6842 - provider.addAlgorithm("AlgorithmParameters.Twofish", PREFIX + "$AlgParams"); 6843 + // BEGIN android-removed 6844 + // provider.addAlgorithm("Cipher.Twofish", PREFIX + "$ECB"); 6845 + // provider.addAlgorithm("KeyGenerator.Twofish", PREFIX + "$KeyGen"); 6846 + // provider.addAlgorithm("AlgorithmParameters.Twofish", PREFIX + "$AlgParams"); 6847 + // END android-removed 6848 6849 provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE"); 6850 provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH-CBC", "PKCS12PBE"); 6851 provider.addAlgorithm("Cipher.PBEWITHSHAANDTWOFISH-CBC", PREFIX + "$PBEWithSHA"); 6852 provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAANDTWOFISH-CBC", PREFIX + "$PBEWithSHAKeyFactory"); 6853 6854 - addGMacAlgorithm(provider, "Twofish", PREFIX + "$GMAC", PREFIX + "$KeyGen"); 6855 - addPoly1305Algorithm(provider, "Twofish", PREFIX + "$Poly1305", PREFIX + "$Poly1305KeyGen"); 6856 + // BEGIN android-removed 6857 + // addGMacAlgorithm(provider, "Twofish", PREFIX + "$GMAC", PREFIX + "$KeyGen"); 6858 + // addPoly1305Algorithm(provider, "Twofish", PREFIX + "$Poly1305", PREFIX + "$Poly1305KeyGen"); 6859 + // END android-removed 6860 } 6861 } 6862 } 6863 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 6864 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 2015-03-01 12:03:02.000000000 +0000 6865 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseBlockCipher.java 2015-04-09 13:10:16.000000000 +0000 6866 @@ -20,8 +20,10 @@ 6867 import javax.crypto.ShortBufferException; 6868 import javax.crypto.spec.IvParameterSpec; 6869 import javax.crypto.spec.PBEParameterSpec; 6870 -import javax.crypto.spec.RC2ParameterSpec; 6871 -import javax.crypto.spec.RC5ParameterSpec; 6872 +// BEGIN android-removed 6873 +// import javax.crypto.spec.RC2ParameterSpec; 6874 +// import javax.crypto.spec.RC5ParameterSpec; 6875 +// END android-removed 6876 6877 import org.bouncycastle.asn1.cms.GCMParameters; 6878 import org.bouncycastle.crypto.BlockCipher; 6879 @@ -35,14 +37,20 @@ 6880 import org.bouncycastle.crypto.modes.CCMBlockCipher; 6881 import org.bouncycastle.crypto.modes.CFBBlockCipher; 6882 import org.bouncycastle.crypto.modes.CTSBlockCipher; 6883 -import org.bouncycastle.crypto.modes.EAXBlockCipher; 6884 -import org.bouncycastle.crypto.modes.GCFBBlockCipher; 6885 +// BEGIN android-removed 6886 +// import org.bouncycastle.crypto.modes.EAXBlockCipher; 6887 +// import org.bouncycastle.crypto.modes.GCFBBlockCipher; 6888 +// END android-removed 6889 import org.bouncycastle.crypto.modes.GCMBlockCipher; 6890 -import org.bouncycastle.crypto.modes.GOFBBlockCipher; 6891 -import org.bouncycastle.crypto.modes.OCBBlockCipher; 6892 +// BEGIN android-removed 6893 +// import org.bouncycastle.crypto.modes.GOFBBlockCipher; 6894 +// import org.bouncycastle.crypto.modes.OCBBlockCipher; 6895 +// END android-removed 6896 import org.bouncycastle.crypto.modes.OFBBlockCipher; 6897 -import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher; 6898 -import org.bouncycastle.crypto.modes.PGPCFBBlockCipher; 6899 +// BEGIN android-removed 6900 +// import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher; 6901 +// import org.bouncycastle.crypto.modes.PGPCFBBlockCipher; 6902 +// END android-removed 6903 import org.bouncycastle.crypto.modes.SICBlockCipher; 6904 import org.bouncycastle.crypto.paddings.BlockCipherPadding; 6905 import org.bouncycastle.crypto.paddings.ISO10126d2Padding; 6906 @@ -55,11 +63,15 @@ 6907 import org.bouncycastle.crypto.params.KeyParameter; 6908 import org.bouncycastle.crypto.params.ParametersWithIV; 6909 import org.bouncycastle.crypto.params.ParametersWithRandom; 6910 -import org.bouncycastle.crypto.params.ParametersWithSBox; 6911 +// BEGIN android-removed 6912 +// import org.bouncycastle.crypto.params.ParametersWithSBox; 6913 +// END android-removed 6914 import org.bouncycastle.crypto.params.RC2Parameters; 6915 -import org.bouncycastle.crypto.params.RC5Parameters; 6916 -import org.bouncycastle.jcajce.spec.GOST28147ParameterSpec; 6917 -import org.bouncycastle.jcajce.spec.RepeatedSecretKeySpec; 6918 +// BEGIN android-removed 6919 +// import org.bouncycastle.crypto.params.RC5Parameters; 6920 +// import org.bouncycastle.jcajce.spec.GOST28147ParameterSpec; 6921 +// import org.bouncycastle.jcajce.spec.RepeatedSecretKeySpec; 6922 +// END android-removed 6923 import org.bouncycastle.jce.provider.BouncyCastleProvider; 6924 import org.bouncycastle.util.Strings; 6925 6926 @@ -74,11 +86,15 @@ 6927 // 6928 private Class[] availableSpecs = 6929 { 6930 - RC2ParameterSpec.class, 6931 - RC5ParameterSpec.class, 6932 + // BEGIN android-removed 6933 + // RC2ParameterSpec.class, 6934 + // RC5ParameterSpec.class, 6935 + // END android-removed 6936 IvParameterSpec.class, 6937 PBEParameterSpec.class, 6938 - GOST28147ParameterSpec.class, 6939 + // BEGIN android-removed 6940 + // GOST28147ParameterSpec.class, 6941 + // END android-removed 6942 gcmSpecClass 6943 }; 6944 6945 @@ -284,48 +300,52 @@ 6946 new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize())); 6947 } 6948 } 6949 - else if (modeName.startsWith("PGP")) 6950 - { 6951 - boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV"); 6952 - 6953 - ivLength = baseEngine.getBlockSize(); 6954 - cipher = new BufferedGenericBlockCipher( 6955 - new PGPCFBBlockCipher(baseEngine, inlineIV)); 6956 - } 6957 - else if (modeName.equalsIgnoreCase("OpenPGPCFB")) 6958 - { 6959 - ivLength = 0; 6960 - cipher = new BufferedGenericBlockCipher( 6961 - new OpenPGPCFBBlockCipher(baseEngine)); 6962 - } 6963 - else if (modeName.startsWith("SIC")) 6964 - { 6965 - ivLength = baseEngine.getBlockSize(); 6966 - if (ivLength < 16) 6967 - { 6968 - throw new IllegalArgumentException("Warning: SIC-Mode can become a twotime-pad if the blocksize of the cipher is too small. Use a cipher with a block size of at least 128 bits (e.g. AES)"); 6969 - } 6970 - cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 6971 - new SICBlockCipher(baseEngine))); 6972 - } 6973 + // BEGIN android-removed 6974 + // else if (modeName.startsWith("PGP")) 6975 + // { 6976 + // boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV"); 6977 + // 6978 + // ivLength = baseEngine.getBlockSize(); 6979 + // cipher = new BufferedGenericBlockCipher( 6980 + // new PGPCFBBlockCipher(baseEngine, inlineIV)); 6981 + // } 6982 + // else if (modeName.equalsIgnoreCase("OpenPGPCFB")) 6983 + // { 6984 + // ivLength = 0; 6985 + // cipher = new BufferedGenericBlockCipher( 6986 + // new OpenPGPCFBBlockCipher(baseEngine)); 6987 + // } 6988 + // else if (modeName.startsWith("SIC")) 6989 + // { 6990 + // ivLength = baseEngine.getBlockSize(); 6991 + // if (ivLength < 16) 6992 + // { 6993 + // throw new IllegalArgumentException("Warning: SIC-Mode can become a twotime-pad if the blocksize of the cipher is too small. Use a cipher with a block size of at least 128 bits (e.g. AES)"); 6994 + // } 6995 + // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 6996 + // new SICBlockCipher(baseEngine))); 6997 + // } 6998 + // END android-removed 6999 else if (modeName.startsWith("CTR")) 7000 { 7001 ivLength = baseEngine.getBlockSize(); 7002 cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7003 new SICBlockCipher(baseEngine))); 7004 } 7005 - else if (modeName.startsWith("GOFB")) 7006 - { 7007 - ivLength = baseEngine.getBlockSize(); 7008 - cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7009 - new GOFBBlockCipher(baseEngine))); 7010 - } 7011 - else if (modeName.startsWith("GCFB")) 7012 - { 7013 - ivLength = baseEngine.getBlockSize(); 7014 - cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7015 - new GCFBBlockCipher(baseEngine))); 7016 - } 7017 + // BEGIN android-removed 7018 + // else if (modeName.startsWith("GOFB")) 7019 + // { 7020 + // ivLength = baseEngine.getBlockSize(); 7021 + // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7022 + // new GOFBBlockCipher(baseEngine))); 7023 + // } 7024 + // else if (modeName.startsWith("GCFB")) 7025 + // { 7026 + // ivLength = baseEngine.getBlockSize(); 7027 + // cipher = new BufferedGenericBlockCipher(new BufferedBlockCipher( 7028 + // new GCFBBlockCipher(baseEngine))); 7029 + // } 7030 + // END android-removed 7031 else if (modeName.startsWith("CTS")) 7032 { 7033 ivLength = baseEngine.getBlockSize(); 7034 @@ -336,26 +356,28 @@ 7035 ivLength = 13; // CCM nonce 7..13 bytes 7036 cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine)); 7037 } 7038 - else if (modeName.startsWith("OCB")) 7039 - { 7040 - if (engineProvider != null) 7041 - { 7042 - /* 7043 - * RFC 7253 4.2. Nonce is a string of no more than 120 bits 7044 - */ 7045 - ivLength = 15; 7046 - cipher = new AEADGenericBlockCipher(new OCBBlockCipher(baseEngine, engineProvider.get())); 7047 - } 7048 - else 7049 - { 7050 - throw new NoSuchAlgorithmException("can't support mode " + mode); 7051 - } 7052 - } 7053 - else if (modeName.startsWith("EAX")) 7054 - { 7055 - ivLength = baseEngine.getBlockSize(); 7056 - cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine)); 7057 - } 7058 + // BEGIN android-removed 7059 + // else if (modeName.startsWith("OCB")) 7060 + // { 7061 + // if (engineProvider != null) 7062 + // { 7063 + // /* 7064 + // * RFC 7253 4.2. Nonce is a string of no more than 120 bits 7065 + // */ 7066 + // ivLength = 15; 7067 + // cipher = new AEADGenericBlockCipher(new OCBBlockCipher(baseEngine, engineProvider.get())); 7068 + // } 7069 + // else 7070 + // { 7071 + // throw new NoSuchAlgorithmException("can't support mode " + mode); 7072 + // } 7073 + // } 7074 + // else if (modeName.startsWith("EAX")) 7075 + // { 7076 + // ivLength = baseEngine.getBlockSize(); 7077 + // cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine)); 7078 + // } 7079 + // END android-removed 7080 else if (modeName.startsWith("GCM")) 7081 { 7082 ivLength = baseEngine.getBlockSize(); 7083 @@ -478,18 +500,20 @@ 7084 7085 param = new ParametersWithIV(param, iv.getIV()); 7086 } 7087 - else if (params instanceof GOST28147ParameterSpec) 7088 - { 7089 - // need to pick up IV and SBox. 7090 - GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 7091 - 7092 - param = new ParametersWithSBox(param, gost28147Param.getSbox()); 7093 - 7094 - if (gost28147Param.getIV() != null && ivLength != 0) 7095 - { 7096 - param = new ParametersWithIV(param, gost28147Param.getIV()); 7097 - } 7098 - } 7099 + // BEGIN android-removed 7100 + // else if (params instanceof GOST28147ParameterSpec) 7101 + // { 7102 + // // need to pick up IV and SBox. 7103 + // GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 7104 + // 7105 + // param = new ParametersWithSBox(param, gost28147Param.getSbox()); 7106 + // 7107 + // if (gost28147Param.getIV() != null && ivLength != 0) 7108 + // { 7109 + // param = new ParametersWithIV(param, gost28147Param.getIV()); 7110 + // } 7111 + // } 7112 + // END android-removed 7113 } 7114 else if (params instanceof PBEParameterSpec) 7115 { 7116 @@ -521,12 +545,14 @@ 7117 throw new InvalidAlgorithmParameterException("IV must be " + ivLength + " bytes long."); 7118 } 7119 7120 - if (key instanceof RepeatedSecretKeySpec) 7121 - { 7122 - param = new ParametersWithIV(null, p.getIV()); 7123 - ivParam = (ParametersWithIV)param; 7124 - } 7125 - else 7126 + // BEGIN android-removed 7127 + // if (key instanceof RepeatedSecretKeySpec) 7128 + // { 7129 + // param = new ParametersWithIV(null, p.getIV()); 7130 + // ivParam = (ParametersWithIV)param; 7131 + // } 7132 + // else 7133 + // END android-removed 7134 { 7135 param = new ParametersWithIV(new KeyParameter(key.getEncoded()), p.getIV()); 7136 ivParam = (ParametersWithIV)param; 7137 @@ -542,63 +568,65 @@ 7138 param = new KeyParameter(key.getEncoded()); 7139 } 7140 } 7141 - else if (params instanceof GOST28147ParameterSpec) 7142 - { 7143 - GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 7144 - 7145 - param = new ParametersWithSBox( 7146 - new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox()); 7147 - 7148 - if (gost28147Param.getIV() != null && ivLength != 0) 7149 - { 7150 - param = new ParametersWithIV(param, gost28147Param.getIV()); 7151 - ivParam = (ParametersWithIV)param; 7152 - } 7153 - } 7154 - else if (params instanceof RC2ParameterSpec) 7155 - { 7156 - RC2ParameterSpec rc2Param = (RC2ParameterSpec)params; 7157 - 7158 - param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits()); 7159 - 7160 - if (rc2Param.getIV() != null && ivLength != 0) 7161 - { 7162 - param = new ParametersWithIV(param, rc2Param.getIV()); 7163 - ivParam = (ParametersWithIV)param; 7164 - } 7165 - } 7166 - else if (params instanceof RC5ParameterSpec) 7167 - { 7168 - RC5ParameterSpec rc5Param = (RC5ParameterSpec)params; 7169 - 7170 - param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds()); 7171 - if (baseEngine.getAlgorithmName().startsWith("RC5")) 7172 - { 7173 - if (baseEngine.getAlgorithmName().equals("RC5-32")) 7174 - { 7175 - if (rc5Param.getWordSize() != 32) 7176 - { 7177 - throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + "."); 7178 - } 7179 - } 7180 - else if (baseEngine.getAlgorithmName().equals("RC5-64")) 7181 - { 7182 - if (rc5Param.getWordSize() != 64) 7183 - { 7184 - throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + "."); 7185 - } 7186 - } 7187 - } 7188 - else 7189 - { 7190 - throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5."); 7191 - } 7192 - if ((rc5Param.getIV() != null) && (ivLength != 0)) 7193 - { 7194 - param = new ParametersWithIV(param, rc5Param.getIV()); 7195 - ivParam = (ParametersWithIV)param; 7196 - } 7197 - } 7198 + // BEGIN android-removed 7199 + // else if (params instanceof GOST28147ParameterSpec) 7200 + // { 7201 + // GOST28147ParameterSpec gost28147Param = (GOST28147ParameterSpec)params; 7202 + // 7203 + // param = new ParametersWithSBox( 7204 + // new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox()); 7205 + // 7206 + // if (gost28147Param.getIV() != null && ivLength != 0) 7207 + // { 7208 + // param = new ParametersWithIV(param, gost28147Param.getIV()); 7209 + // ivParam = (ParametersWithIV)param; 7210 + // } 7211 + // } 7212 + // else if (params instanceof RC2ParameterSpec) 7213 + // { 7214 + // RC2ParameterSpec rc2Param = (RC2ParameterSpec)params; 7215 + // 7216 + // param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits()); 7217 + // 7218 + // if (rc2Param.getIV() != null && ivLength != 0) 7219 + // { 7220 + // param = new ParametersWithIV(param, rc2Param.getIV()); 7221 + // ivParam = (ParametersWithIV)param; 7222 + // } 7223 + // } 7224 + // else if (params instanceof RC5ParameterSpec) 7225 + // { 7226 + // RC5ParameterSpec rc5Param = (RC5ParameterSpec)params; 7227 + // 7228 + // param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds()); 7229 + // if (baseEngine.getAlgorithmName().startsWith("RC5")) 7230 + // { 7231 + // if (baseEngine.getAlgorithmName().equals("RC5-32")) 7232 + // { 7233 + // if (rc5Param.getWordSize() != 32) 7234 + // { 7235 + // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + "."); 7236 + // } 7237 + // } 7238 + // else if (baseEngine.getAlgorithmName().equals("RC5-64")) 7239 + // { 7240 + // if (rc5Param.getWordSize() != 64) 7241 + // { 7242 + // throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + "."); 7243 + // } 7244 + // } 7245 + // } 7246 + // else 7247 + // { 7248 + // throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5."); 7249 + // } 7250 + // if ((rc5Param.getIV() != null) && (ivLength != 0)) 7251 + // { 7252 + // param = new ParametersWithIV(param, rc5Param.getIV()); 7253 + // ivParam = (ParametersWithIV)param; 7254 + // } 7255 + // } 7256 + // END android-removed 7257 else if (gcmSpecClass != null && gcmSpecClass.isInstance(params)) 7258 { 7259 if (!isAEADModeName(modeName) && !(cipher instanceof AEADGenericBlockCipher)) 7260 @@ -611,11 +639,13 @@ 7261 Method tLen = gcmSpecClass.getDeclaredMethod("getTLen", new Class[0]); 7262 Method iv= gcmSpecClass.getDeclaredMethod("getIV", new Class[0]); 7263 7264 - if (key instanceof RepeatedSecretKeySpec) 7265 - { 7266 - param = aeadParams = new AEADParameters(null, ((Integer)tLen.invoke(params, new Object[0])).intValue(), (byte[])iv.invoke(params, new Object[0])); 7267 - } 7268 - else 7269 + // BEGIN android-removed 7270 + // if (key instanceof RepeatedSecretKeySpec) 7271 + // { 7272 + // param = aeadParams = new AEADParameters(null, ((Integer)tLen.invoke(params, new Object[0])).intValue(), (byte[])iv.invoke(params, new Object[0])); 7273 + // } 7274 + // else 7275 + // END android-removed 7276 { 7277 param = aeadParams = new AEADParameters(new KeyParameter(key.getEncoded()), ((Integer)tLen.invoke(params, new Object[0])).intValue(), (byte[])iv.invoke(params, new Object[0])); 7278 } 7279 @@ -867,7 +897,9 @@ 7280 private boolean isAEADModeName( 7281 String modeName) 7282 { 7283 - return "CCM".equals(modeName) || "EAX".equals(modeName) || "GCM".equals(modeName) || "OCB".equals(modeName); 7284 + // BEGIN android-changed 7285 + return "CCM".equals(modeName) || "GCM".equals(modeName); 7286 + // END android-changed 7287 } 7288 7289 /* 7290 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 7291 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 2015-03-01 12:03:02.000000000 +0000 7292 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseMac.java 2013-12-12 00:35:05.000000000 +0000 7293 @@ -16,8 +16,10 @@ 7294 import org.bouncycastle.crypto.Mac; 7295 import org.bouncycastle.crypto.params.KeyParameter; 7296 import org.bouncycastle.crypto.params.ParametersWithIV; 7297 -import org.bouncycastle.crypto.params.SkeinParameters; 7298 -import org.bouncycastle.jcajce.spec.SkeinParameterSpec; 7299 +// BEGIN android-removed 7300 +// import org.bouncycastle.crypto.params.SkeinParameters; 7301 +// import org.bouncycastle.jcajce.spec.SkeinParameterSpec; 7302 +// END android-removed 7303 7304 public class BaseMac 7305 extends MacSpi implements PBE 7306 @@ -79,10 +81,12 @@ 7307 { 7308 param = new ParametersWithIV(new KeyParameter(key.getEncoded()), ((IvParameterSpec)params).getIV()); 7309 } 7310 - else if (params instanceof SkeinParameterSpec) 7311 - { 7312 - param = new SkeinParameters.Builder(copyMap(((SkeinParameterSpec)params).getParameters())).setKey(key.getEncoded()).build(); 7313 - } 7314 + // BEGIN android-removed 7315 + // else if (params instanceof SkeinParameterSpec) 7316 + // { 7317 + // param = new SkeinParameters.Builder(copyMap(((SkeinParameterSpec)params).getParameters())).setKey(key.getEncoded()).build(); 7318 + // } 7319 + // END android-removed 7320 else if (params == null) 7321 { 7322 param = new KeyParameter(key.getEncoded()); 7323 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 7324 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 2015-03-01 12:03:02.000000000 +0000 7325 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseStreamCipher.java 2015-04-09 13:10:16.000000000 +0000 7326 @@ -15,8 +15,10 @@ 7327 import javax.crypto.ShortBufferException; 7328 import javax.crypto.spec.IvParameterSpec; 7329 import javax.crypto.spec.PBEParameterSpec; 7330 -import javax.crypto.spec.RC2ParameterSpec; 7331 -import javax.crypto.spec.RC5ParameterSpec; 7332 +// BEGIN android-removed 7333 +// import javax.crypto.spec.RC2ParameterSpec; 7334 +// import javax.crypto.spec.RC5ParameterSpec; 7335 +// END android-removed 7336 7337 import org.bouncycastle.crypto.CipherParameters; 7338 import org.bouncycastle.crypto.DataLengthException; 7339 @@ -34,8 +36,10 @@ 7340 // 7341 private Class[] availableSpecs = 7342 { 7343 - RC2ParameterSpec.class, 7344 - RC5ParameterSpec.class, 7345 + // BEGIN android-removed 7346 + // RC2ParameterSpec.class, 7347 + // RC5ParameterSpec.class, 7348 + // END android-removed 7349 IvParameterSpec.class, 7350 PBEParameterSpec.class 7351 }; 7352 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 7353 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 2015-03-01 12:03:02.000000000 +0000 7354 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/BaseWrapCipher.java 2015-04-09 13:10:16.000000000 +0000 7355 @@ -24,8 +24,10 @@ 7356 import javax.crypto.ShortBufferException; 7357 import javax.crypto.spec.IvParameterSpec; 7358 import javax.crypto.spec.PBEParameterSpec; 7359 -import javax.crypto.spec.RC2ParameterSpec; 7360 -import javax.crypto.spec.RC5ParameterSpec; 7361 +// BEGIN android-removed 7362 +// import javax.crypto.spec.RC2ParameterSpec; 7363 +// import javax.crypto.spec.RC5ParameterSpec; 7364 +// END android-removed 7365 import javax.crypto.spec.SecretKeySpec; 7366 7367 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 7368 @@ -50,8 +52,10 @@ 7369 { 7370 IvParameterSpec.class, 7371 PBEParameterSpec.class, 7372 - RC2ParameterSpec.class, 7373 - RC5ParameterSpec.class 7374 + // BEGIN android-removed 7375 + // RC2ParameterSpec.class, 7376 + // RC5ParameterSpec.class 7377 + // END android-removed 7378 }; 7379 7380 protected int pbeType = PKCS12; 7381 @@ -276,6 +280,8 @@ 7382 return null; 7383 } 7384 7385 + // BEGIN android-changed 7386 + // added ShortBufferException to throws statement 7387 protected int engineDoFinal( 7388 byte[] input, 7389 int inputOffset, 7390 @@ -286,6 +292,7 @@ 7391 { 7392 return 0; 7393 } 7394 + // END android-changed 7395 7396 protected byte[] engineWrap( 7397 Key key) 7398 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 7399 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 2015-03-01 12:03:02.000000000 +0000 7400 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/symmetric/util/PBE.java 2013-12-12 00:35:05.000000000 +0000 7401 @@ -7,13 +7,18 @@ 7402 7403 import org.bouncycastle.crypto.CipherParameters; 7404 import org.bouncycastle.crypto.PBEParametersGenerator; 7405 -import org.bouncycastle.crypto.digests.GOST3411Digest; 7406 -import org.bouncycastle.crypto.digests.MD2Digest; 7407 -import org.bouncycastle.crypto.digests.MD5Digest; 7408 -import org.bouncycastle.crypto.digests.RIPEMD160Digest; 7409 -import org.bouncycastle.crypto.digests.SHA1Digest; 7410 -import org.bouncycastle.crypto.digests.SHA256Digest; 7411 -import org.bouncycastle.crypto.digests.TigerDigest; 7412 +// BEGIN android-removed 7413 +// import org.bouncycastle.crypto.digests.GOST3411Digest; 7414 +// import org.bouncycastle.crypto.digests.MD2Digest; 7415 +// import org.bouncycastle.crypto.digests.MD5Digest; 7416 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest; 7417 +// import org.bouncycastle.crypto.digests.SHA1Digest; 7418 +// import org.bouncycastle.crypto.digests.SHA256Digest; 7419 +// import org.bouncycastle.crypto.digests.TigerDigest; 7420 +// END android-removed 7421 +// BEGIN android-added 7422 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 7423 +// END android-added 7424 import org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator; 7425 import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator; 7426 import org.bouncycastle.crypto.generators.PKCS5S1ParametersGenerator; 7427 @@ -29,11 +34,15 @@ 7428 // 7429 static final int MD5 = 0; 7430 static final int SHA1 = 1; 7431 - static final int RIPEMD160 = 2; 7432 - static final int TIGER = 3; 7433 + // BEGIN android-removed 7434 + // static final int RIPEMD160 = 2; 7435 + // static final int TIGER = 3; 7436 + // END android-removed 7437 static final int SHA256 = 4; 7438 - static final int MD2 = 5; 7439 - static final int GOST3411 = 6; 7440 + // BEGIN android-removed 7441 + // static final int MD2 = 5; 7442 + // static final int GOST3411 = 6; 7443 + // END android-removed 7444 7445 static final int PKCS5S1 = 0; 7446 static final int PKCS5S2 = 1; 7447 @@ -57,14 +66,20 @@ 7448 { 7449 switch (hash) 7450 { 7451 - case MD2: 7452 - generator = new PKCS5S1ParametersGenerator(new MD2Digest()); 7453 - break; 7454 + // BEGIN android-removed 7455 + // case MD2: 7456 + // generator = new PKCS5S1ParametersGenerator(new MD2Digest()); 7457 + // break; 7458 + // END android-removed 7459 case MD5: 7460 - generator = new PKCS5S1ParametersGenerator(new MD5Digest()); 7461 + // BEGIN android-changed 7462 + generator = new PKCS5S1ParametersGenerator(AndroidDigestFactory.getMD5()); 7463 + // END android-changed 7464 break; 7465 case SHA1: 7466 - generator = new PKCS5S1ParametersGenerator(new SHA1Digest()); 7467 + // BEGIN android-changed 7468 + generator = new PKCS5S1ParametersGenerator(AndroidDigestFactory.getSHA1()); 7469 + // END android-changed 7470 break; 7471 default: 7472 throw new IllegalStateException("PKCS5 scheme 1 only supports MD2, MD5 and SHA1."); 7473 @@ -74,27 +89,39 @@ 7474 { 7475 switch (hash) 7476 { 7477 - case MD2: 7478 - generator = new PKCS5S2ParametersGenerator(new MD2Digest()); 7479 - break; 7480 + // BEGIN android-removed 7481 + // case MD2: 7482 + // generator = new PKCS5S2ParametersGenerator(new MD2Digest()); 7483 + // break; 7484 + // END android-removed 7485 case MD5: 7486 - generator = new PKCS5S2ParametersGenerator(new MD5Digest()); 7487 + // BEGIN android-changed 7488 + generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getMD5()); 7489 + // END android-changed 7490 break; 7491 case SHA1: 7492 - generator = new PKCS5S2ParametersGenerator(new SHA1Digest()); 7493 - break; 7494 - case RIPEMD160: 7495 - generator = new PKCS5S2ParametersGenerator(new RIPEMD160Digest()); 7496 - break; 7497 - case TIGER: 7498 - generator = new PKCS5S2ParametersGenerator(new TigerDigest()); 7499 - break; 7500 + // BEGIN android-changed 7501 + generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getSHA1()); 7502 + // END android-changed 7503 + break; 7504 + // BEGIN android-removed 7505 + // case RIPEMD160: 7506 + // generator = new PKCS5S2ParametersGenerator(new RIPEMD160Digest()); 7507 + // break; 7508 + // case TIGER: 7509 + // generator = new PKCS5S2ParametersGenerator(new TigerDigest()); 7510 + // break; 7511 + // END android-removed 7512 case SHA256: 7513 - generator = new PKCS5S2ParametersGenerator(new SHA256Digest()); 7514 - break; 7515 - case GOST3411: 7516 - generator = new PKCS5S2ParametersGenerator(new GOST3411Digest()); 7517 - break; 7518 + // BEGIN android-changed 7519 + generator = new PKCS5S2ParametersGenerator(AndroidDigestFactory.getSHA256()); 7520 + // END android-changed 7521 + break; 7522 + // BEGIN android-removed 7523 + // case GOST3411: 7524 + // generator = new PKCS5S2ParametersGenerator(new GOST3411Digest()); 7525 + // break; 7526 + // END android-removed 7527 default: 7528 throw new IllegalStateException("unknown digest scheme for PBE PKCS5S2 encryption."); 7529 } 7530 @@ -103,27 +130,39 @@ 7531 { 7532 switch (hash) 7533 { 7534 - case MD2: 7535 - generator = new PKCS12ParametersGenerator(new MD2Digest()); 7536 - break; 7537 + // BEGIN android-removed 7538 + // case MD2: 7539 + // generator = new PKCS12ParametersGenerator(new MD2Digest()); 7540 + // break; 7541 + // END android-removed 7542 case MD5: 7543 - generator = new PKCS12ParametersGenerator(new MD5Digest()); 7544 + // BEGIN android-changed 7545 + generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getMD5()); 7546 + // END android-changed 7547 break; 7548 case SHA1: 7549 - generator = new PKCS12ParametersGenerator(new SHA1Digest()); 7550 - break; 7551 - case RIPEMD160: 7552 - generator = new PKCS12ParametersGenerator(new RIPEMD160Digest()); 7553 - break; 7554 - case TIGER: 7555 - generator = new PKCS12ParametersGenerator(new TigerDigest()); 7556 - break; 7557 + // BEGIN android-changed 7558 + generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA1()); 7559 + // END android-changed 7560 + break; 7561 + // BEGIN android-removed 7562 + // case RIPEMD160: 7563 + // generator = new PKCS12ParametersGenerator(new RIPEMD160Digest()); 7564 + // break; 7565 + // case TIGER: 7566 + // generator = new PKCS12ParametersGenerator(new TigerDigest()); 7567 + // break; 7568 + // END android-removed 7569 case SHA256: 7570 - generator = new PKCS12ParametersGenerator(new SHA256Digest()); 7571 - break; 7572 - case GOST3411: 7573 - generator = new PKCS12ParametersGenerator(new GOST3411Digest()); 7574 - break; 7575 + // BEGIN android-changed 7576 + generator = new PKCS12ParametersGenerator(AndroidDigestFactory.getSHA256()); 7577 + // END android-changed 7578 + break; 7579 + // BEGIN android-removed 7580 + // case GOST3411: 7581 + // generator = new PKCS12ParametersGenerator(new GOST3411Digest()); 7582 + // break; 7583 + // END android-removed 7584 default: 7585 throw new IllegalStateException("unknown digest scheme for PBE encryption."); 7586 } 7587 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/util/DigestFactory.java bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/util/DigestFactory.java 7588 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/provider/util/DigestFactory.java 2015-03-01 12:03:02.000000000 +0000 7589 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/provider/util/DigestFactory.java 2013-09-26 18:06:21.000000000 +0000 7590 @@ -10,12 +10,17 @@ 7591 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 7592 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 7593 import org.bouncycastle.crypto.Digest; 7594 -import org.bouncycastle.crypto.digests.MD5Digest; 7595 -import org.bouncycastle.crypto.digests.SHA1Digest; 7596 -import org.bouncycastle.crypto.digests.SHA224Digest; 7597 -import org.bouncycastle.crypto.digests.SHA256Digest; 7598 -import org.bouncycastle.crypto.digests.SHA384Digest; 7599 -import org.bouncycastle.crypto.digests.SHA512Digest; 7600 +// BEGIN android-removed 7601 +// import org.bouncycastle.crypto.digests.MD5Digest; 7602 +// import org.bouncycastle.crypto.digests.SHA1Digest; 7603 +// import org.bouncycastle.crypto.digests.SHA224Digest; 7604 +// import org.bouncycastle.crypto.digests.SHA256Digest; 7605 +// import org.bouncycastle.crypto.digests.SHA384Digest; 7606 +// import org.bouncycastle.crypto.digests.SHA512Digest; 7607 +// END android-removed 7608 +// BEGIN android-added 7609 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 7610 +// END android-added 7611 import org.bouncycastle.util.Strings; 7612 7613 public class DigestFactory 7614 @@ -85,27 +90,39 @@ 7615 7616 if (sha1.contains(digestName)) 7617 { 7618 - return new SHA1Digest(); 7619 + // BEGIN android-changed 7620 + return AndroidDigestFactory.getSHA1(); 7621 + // END android-changed 7622 } 7623 if (md5.contains(digestName)) 7624 { 7625 - return new MD5Digest(); 7626 + // BEGIN android-changed 7627 + return AndroidDigestFactory.getMD5(); 7628 + // END android-changed 7629 } 7630 if (sha224.contains(digestName)) 7631 { 7632 - return new SHA224Digest(); 7633 + // BEGIN android-changed 7634 + return AndroidDigestFactory.getSHA224(); 7635 + // END android-changed 7636 } 7637 if (sha256.contains(digestName)) 7638 { 7639 - return new SHA256Digest(); 7640 + // BEGIN android-changed 7641 + return AndroidDigestFactory.getSHA256(); 7642 + // END android-changed 7643 } 7644 if (sha384.contains(digestName)) 7645 { 7646 - return new SHA384Digest(); 7647 + // BEGIN android-changed 7648 + return AndroidDigestFactory.getSHA384(); 7649 + // END android-changed 7650 } 7651 if (sha512.contains(digestName)) 7652 { 7653 - return new SHA512Digest(); 7654 + // BEGIN android-changed 7655 + return AndroidDigestFactory.getSHA512(); 7656 + // END android-changed 7657 } 7658 7659 return null; 7660 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/util/JcaJceUtils.java bcprov-jdk15on-152/org/bouncycastle/jcajce/util/JcaJceUtils.java 7661 --- bcprov-jdk15on-152.orig/org/bouncycastle/jcajce/util/JcaJceUtils.java 2015-03-01 12:03:02.000000000 +0000 7662 +++ bcprov-jdk15on-152/org/bouncycastle/jcajce/util/JcaJceUtils.java 2014-07-28 19:51:54.000000000 +0000 7663 @@ -6,11 +6,15 @@ 7664 import org.bouncycastle.asn1.ASN1Encodable; 7665 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 7666 import org.bouncycastle.asn1.ASN1Primitive; 7667 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7668 +// BEGIN android-removed 7669 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7670 +// END android-removed 7671 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 7672 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 7673 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 7674 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 7675 +// BEGIN android-removed 7676 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 7677 +// END android-removed 7678 7679 /** 7680 * General JCA/JCE utility methods. 7681 @@ -100,22 +104,24 @@ 7682 { 7683 return "SHA512"; 7684 } 7685 - else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 7686 - { 7687 - return "RIPEMD128"; 7688 - } 7689 - else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 7690 - { 7691 - return "RIPEMD160"; 7692 - } 7693 - else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 7694 - { 7695 - return "RIPEMD256"; 7696 - } 7697 - else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 7698 - { 7699 - return "GOST3411"; 7700 - } 7701 + // BEGIN android-removed 7702 + // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 7703 + // { 7704 + // return "RIPEMD128"; 7705 + // } 7706 + // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 7707 + // { 7708 + // return "RIPEMD160"; 7709 + // } 7710 + // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 7711 + // { 7712 + // return "RIPEMD256"; 7713 + // } 7714 + // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 7715 + // { 7716 + // return "GOST3411"; 7717 + // } 7718 + // END android-removed 7719 else 7720 { 7721 return digestAlgOID.getId(); 7722 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java bcprov-jdk15on-152/org/bouncycastle/jce/PKCS10CertificationRequest.java 7723 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java 2015-03-01 12:03:02.000000000 +0000 7724 +++ bcprov-jdk15on-152/org/bouncycastle/jce/PKCS10CertificationRequest.java 2014-07-28 19:51:54.000000000 +0000 7725 @@ -30,14 +30,18 @@ 7726 import org.bouncycastle.asn1.ASN1Set; 7727 import org.bouncycastle.asn1.DERBitString; 7728 import org.bouncycastle.asn1.DERNull; 7729 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7730 +// BEGIN android-removed 7731 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 7732 +// END android-removed 7733 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 7734 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 7735 import org.bouncycastle.asn1.pkcs.CertificationRequest; 7736 import org.bouncycastle.asn1.pkcs.CertificationRequestInfo; 7737 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 7738 import org.bouncycastle.asn1.pkcs.RSASSAPSSparams; 7739 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 7740 +// BEGIN android-removed 7741 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 7742 +// END android-removed 7743 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 7744 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 7745 import org.bouncycastle.asn1.x509.X509Name; 7746 @@ -81,8 +85,11 @@ 7747 7748 static 7749 { 7750 - algorithms.put("MD2WITHRSAENCRYPTION", new ASN1ObjectIdentifier("1.2.840.113549.1.1.2")); 7751 - algorithms.put("MD2WITHRSA", new ASN1ObjectIdentifier("1.2.840.113549.1.1.2")); 7752 + // BEGIN android-removed 7753 + // Dropping MD2 7754 + // algorithms.put("MD2WITHRSAENCRYPTION", new ASN1ObjectIdentifier("1.2.840.113549.1.1.2")); 7755 + // algorithms.put("MD2WITHRSA", new ASN1ObjectIdentifier("1.2.840.113549.1.1.2")); 7756 + // END android-removed 7757 algorithms.put("MD5WITHRSAENCRYPTION", new ASN1ObjectIdentifier("1.2.840.113549.1.1.4")); 7758 algorithms.put("MD5WITHRSA", new ASN1ObjectIdentifier("1.2.840.113549.1.1.4")); 7759 algorithms.put("RSAWITHMD5", new ASN1ObjectIdentifier("1.2.840.113549.1.1.4")); 7760 @@ -102,12 +109,14 @@ 7761 algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 7762 algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 7763 algorithms.put("RSAWITHSHA1", new ASN1ObjectIdentifier("1.2.840.113549.1.1.5")); 7764 - algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 7765 - algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 7766 - algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 7767 - algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 7768 - algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 7769 - algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 7770 + // BEGIN android-removed 7771 + // algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 7772 + // algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 7773 + // algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 7774 + // algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 7775 + // algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 7776 + // algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 7777 + // END android-removed 7778 algorithms.put("SHA1WITHDSA", new ASN1ObjectIdentifier("1.2.840.10040.4.3")); 7779 algorithms.put("DSAWITHSHA1", new ASN1ObjectIdentifier("1.2.840.10040.4.3")); 7780 algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 7781 @@ -120,11 +129,13 @@ 7782 algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384); 7783 algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512); 7784 algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1); 7785 - algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 7786 - algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 7787 - algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7788 - algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7789 - algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7790 + // BEGIN android-removed 7791 + // algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 7792 + // algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 7793 + // algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7794 + // algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7795 + // algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7796 + // END android-removed 7797 7798 // 7799 // reverse mappings 7800 @@ -134,11 +145,15 @@ 7801 oids.put(PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WITHRSA"); 7802 oids.put(PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WITHRSA"); 7803 oids.put(PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WITHRSA"); 7804 - oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410"); 7805 - oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410"); 7806 + // BEGIN android-removed 7807 + // oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410"); 7808 + // oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410"); 7809 + // END android-removed 7810 7811 oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.4"), "MD5WITHRSA"); 7812 - oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA"); 7813 + // BEGIN android-removed 7814 + // oids.put(new ASN1ObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA"); 7815 + // END android-removed 7816 oids.put(new ASN1ObjectIdentifier("1.2.840.10040.4.3"), "SHA1WITHDSA"); 7817 oids.put(X9ObjectIdentifiers.ecdsa_with_SHA1, "SHA1WITHECDSA"); 7818 oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA"); 7819 @@ -172,8 +187,10 @@ 7820 // 7821 // RFC 4491 7822 // 7823 - noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 7824 - noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7825 + // BEGIN android-removed 7826 + // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 7827 + // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 7828 + // END android-removed 7829 // 7830 // explicit params 7831 // 7832 @@ -616,22 +633,24 @@ 7833 { 7834 return "SHA512"; 7835 } 7836 - else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 7837 - { 7838 - return "RIPEMD128"; 7839 - } 7840 - else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 7841 - { 7842 - return "RIPEMD160"; 7843 - } 7844 - else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 7845 - { 7846 - return "RIPEMD256"; 7847 - } 7848 - else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 7849 - { 7850 - return "GOST3411"; 7851 - } 7852 + // BEGIN android-removed 7853 + // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 7854 + // { 7855 + // return "RIPEMD128"; 7856 + // } 7857 + // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 7858 + // { 7859 + // return "RIPEMD160"; 7860 + // } 7861 + // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 7862 + // { 7863 + // return "RIPEMD256"; 7864 + // } 7865 + // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 7866 + // { 7867 + // return "GOST3411"; 7868 + // } 7869 + // END android-removed 7870 else 7871 { 7872 return digestAlgOID.getId(); 7873 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/BouncyCastleProvider.java 7874 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2015-03-01 12:03:02.000000000 +0000 7875 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/BouncyCastleProvider.java 2015-04-09 13:10:16.000000000 +0000 7876 @@ -64,15 +64,22 @@ 7877 7878 private static final String[] SYMMETRIC_MACS = 7879 { 7880 - "SipHash" 7881 + // BEGIN android-removed 7882 + // "SipHash" 7883 + // END android-removed 7884 }; 7885 7886 private static final String[] SYMMETRIC_CIPHERS = 7887 { 7888 - "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "ChaCha", "DES", "DESede", 7889 - "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA", "Noekeon", "RC2", "RC5", 7890 - "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Shacal2", "Skipjack", "TEA", "Twofish", "Threefish", 7891 - "VMPC", "VMPCKSA3", "XTEA", "XSalsa20" 7892 + // BEGIN android-removed 7893 + // "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "ChaCha", "DES", "DESede", 7894 + // "GOST28147", "Grainv1", "Grain128", "HC128", "HC256", "IDEA", "Noekeon", "RC2", "RC5", 7895 + // "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Shacal2", "Skipjack", "TEA", "Twofish", "Threefish", 7896 + // "VMPC", "VMPCKSA3", "XTEA", "XSalsa20" 7897 + // END android-removed 7898 + // BEGIN android-added 7899 + "AES", "ARC4", "Blowfish", "DES", "DESede", "RC2", "Twofish", 7900 + // END android-added 7901 }; 7902 7903 /* 7904 @@ -84,12 +91,22 @@ 7905 // later ones configure it. 7906 private static final String[] ASYMMETRIC_GENERIC = 7907 { 7908 - "X509", "IES" 7909 + // BEGIN android-removed 7910 + // "X509", "IES" 7911 + // END android-removed 7912 + // BEGIN android-added 7913 + "X509" 7914 + // END android-added 7915 }; 7916 7917 private static final String[] ASYMMETRIC_CIPHERS = 7918 { 7919 - "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal", "DSTU4145" 7920 + // BEGIN android-removed 7921 + // "DSA", "DH", "EC", "RSA", "GOST", "ECGOST", "ElGamal", "DSTU4145" 7922 + // END android-removed 7923 + // BEGIN android-added 7924 + "DSA", "DH", "EC", "RSA", 7925 + // END android-added 7926 }; 7927 7928 /* 7929 @@ -98,7 +115,12 @@ 7930 private static final String DIGEST_PACKAGE = "org.bouncycastle.jcajce.provider.digest."; 7931 private static final String[] DIGESTS = 7932 { 7933 - "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "SHA3", "Skein", "SM3", "Tiger", "Whirlpool" 7934 + // BEGIN android-removed 7935 + // "GOST3411", "MD2", "MD4", "MD5", "SHA1", "RIPEMD128", "RIPEMD160", "RIPEMD256", "RIPEMD320", "SHA224", "SHA256", "SHA384", "SHA512", "SHA3", "Skein", "SM3", "Tiger", "Whirlpool" 7936 + // END android-removed 7937 + // BEGIN android-added 7938 + "MD5", "SHA1", "SHA224", "SHA256", "SHA384", "SHA512", 7939 + // END android-added 7940 }; 7941 7942 /* 7943 @@ -145,48 +167,52 @@ 7944 7945 loadAlgorithms(KEYSTORE_PACKAGE, KEYSTORES); 7946 7947 - // 7948 - // X509Store 7949 - // 7950 - put("X509Store.CERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertCollection"); 7951 - put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreAttrCertCollection"); 7952 - put("X509Store.CRL/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCRLCollection"); 7953 - put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertPairCollection"); 7954 - 7955 - put("X509Store.CERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCerts"); 7956 - put("X509Store.CRL/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCRLs"); 7957 - put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPAttrCerts"); 7958 - put("X509Store.CERTIFICATEPAIR/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCertPairs"); 7959 - 7960 - // 7961 - // X509StreamParser 7962 - // 7963 - put("X509StreamParser.CERTIFICATE", "org.bouncycastle.jce.provider.X509CertParser"); 7964 - put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.bouncycastle.jce.provider.X509AttrCertParser"); 7965 - put("X509StreamParser.CRL", "org.bouncycastle.jce.provider.X509CRLParser"); 7966 - put("X509StreamParser.CERTIFICATEPAIR", "org.bouncycastle.jce.provider.X509CertPairParser"); 7967 - 7968 - // 7969 - // cipher engines 7970 - // 7971 - put("Cipher.BROKENPBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES"); 7972 - 7973 - put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES"); 7974 - 7975 - 7976 - put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish"); 7977 - 7978 - // Certification Path API 7979 - put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi"); 7980 - put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi"); 7981 - put("CertPathValidator.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi"); 7982 - put("CertPathBuilder.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi"); 7983 + // BEGIN android-removed 7984 + // // 7985 + // // X509Store 7986 + // // 7987 + // put("X509Store.CERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertCollection"); 7988 + // put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreAttrCertCollection"); 7989 + // put("X509Store.CRL/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCRLCollection"); 7990 + // put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertPairCollection"); 7991 + // 7992 + // put("X509Store.CERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCerts"); 7993 + // put("X509Store.CRL/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCRLs"); 7994 + // put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPAttrCerts"); 7995 + // put("X509Store.CERTIFICATEPAIR/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCertPairs"); 7996 + // 7997 + // // 7998 + // // X509StreamParser 7999 + // // 8000 + // put("X509StreamParser.CERTIFICATE", "org.bouncycastle.jce.provider.X509CertParser"); 8001 + // put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.bouncycastle.jce.provider.X509AttrCertParser"); 8002 + // put("X509StreamParser.CRL", "org.bouncycastle.jce.provider.X509CRLParser"); 8003 + // put("X509StreamParser.CERTIFICATEPAIR", "org.bouncycastle.jce.provider.X509CertPairParser"); 8004 + // 8005 + // // 8006 + // // cipher engines 8007 + // // 8008 + // put("Cipher.BROKENPBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES"); 8009 + // 8010 + // put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES"); 8011 + // 8012 + // 8013 + // put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish"); 8014 + // 8015 + // // Certification Path API 8016 + // put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi"); 8017 + // put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi"); 8018 + // put("CertPathValidator.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi"); 8019 + // put("CertPathBuilder.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi"); 8020 + // END android-removed 8021 put("CertPathValidator.PKIX", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi"); 8022 put("CertPathBuilder.PKIX", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi"); 8023 put("CertStore.Collection", "org.bouncycastle.jce.provider.CertStoreCollectionSpi"); 8024 - put("CertStore.LDAP", "org.bouncycastle.jce.provider.X509LDAPCertStoreSpi"); 8025 - put("CertStore.Multi", "org.bouncycastle.jce.provider.MultiCertStoreSpi"); 8026 - put("Alg.Alias.CertStore.X509LDAP", "LDAP"); 8027 + // BEGIN android-removed 8028 + // put("CertStore.LDAP", "org.bouncycastle.jce.provider.X509LDAPCertStoreSpi"); 8029 + // put("CertStore.Multi", "org.bouncycastle.jce.provider.MultiCertStoreSpi"); 8030 + // put("Alg.Alias.CertStore.X509LDAP", "LDAP"); 8031 + // END android-removed 8032 } 8033 8034 private void loadAlgorithms(String packageName, String[] names) 8035 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/CertBlacklist.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/CertBlacklist.java 8036 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/CertBlacklist.java 1970-01-01 00:00:00.000000000 +0000 8037 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/CertBlacklist.java 2015-06-10 22:51:41.000000000 +0000 8038 @@ -0,0 +1,233 @@ 8039 +/* 8040 + * Copyright (C) 2012 The Android Open Source Project 8041 + * 8042 + * Licensed under the Apache License, Version 2.0 (the "License"); 8043 + * you may not use this file except in compliance with the License. 8044 + * You may obtain a copy of the License at 8045 + * 8046 + * http://www.apache.org/licenses/LICENSE-2.0 8047 + * 8048 + * Unless required by applicable law or agreed to in writing, software 8049 + * distributed under the License is distributed on an "AS IS" BASIS, 8050 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 8051 + * See the License for the specific language governing permissions and 8052 + * limitations under the License. 8053 + */ 8054 + 8055 +package org.bouncycastle.jce.provider; 8056 + 8057 +import java.io.Closeable; 8058 +import java.io.ByteArrayOutputStream; 8059 +import java.io.FileNotFoundException; 8060 +import java.io.IOException; 8061 +import java.io.RandomAccessFile; 8062 +import java.math.BigInteger; 8063 +import java.security.PublicKey; 8064 +import java.util.Arrays; 8065 +import java.util.Collections; 8066 +import java.util.HashSet; 8067 +import java.util.Set; 8068 +import java.util.logging.Level; 8069 +import java.util.logging.Logger; 8070 +import org.bouncycastle.crypto.Digest; 8071 +import org.bouncycastle.crypto.digests.AndroidDigestFactory; 8072 +import org.bouncycastle.util.encoders.Hex; 8073 + 8074 +public class CertBlacklist { 8075 + private static final Logger logger = Logger.getLogger(CertBlacklist.class.getName()); 8076 + 8077 + // public for testing 8078 + public final Set<BigInteger> serialBlacklist; 8079 + public final Set<byte[]> pubkeyBlacklist; 8080 + 8081 + public CertBlacklist() { 8082 + String androidData = System.getenv("ANDROID_DATA"); 8083 + String blacklistRoot = androidData + "/misc/keychain/"; 8084 + String defaultPubkeyBlacklistPath = blacklistRoot + "pubkey_blacklist.txt"; 8085 + String defaultSerialBlacklistPath = blacklistRoot + "serial_blacklist.txt"; 8086 + 8087 + pubkeyBlacklist = readPublicKeyBlackList(defaultPubkeyBlacklistPath); 8088 + serialBlacklist = readSerialBlackList(defaultSerialBlacklistPath); 8089 + } 8090 + 8091 + /** Test only interface, not for public use */ 8092 + public CertBlacklist(String pubkeyBlacklistPath, String serialBlacklistPath) { 8093 + pubkeyBlacklist = readPublicKeyBlackList(pubkeyBlacklistPath); 8094 + serialBlacklist = readSerialBlackList(serialBlacklistPath); 8095 + } 8096 + 8097 + private static boolean isHex(String value) { 8098 + try { 8099 + new BigInteger(value, 16); 8100 + return true; 8101 + } catch (NumberFormatException e) { 8102 + logger.log(Level.WARNING, "Could not parse hex value " + value, e); 8103 + return false; 8104 + } 8105 + } 8106 + 8107 + private static boolean isPubkeyHash(String value) { 8108 + if (value.length() != 40) { 8109 + logger.log(Level.WARNING, "Invalid pubkey hash length: " + value.length()); 8110 + return false; 8111 + } 8112 + return isHex(value); 8113 + } 8114 + 8115 + private static String readBlacklist(String path) { 8116 + try { 8117 + return readFileAsString(path); 8118 + } catch (FileNotFoundException ignored) { 8119 + } catch (IOException e) { 8120 + logger.log(Level.WARNING, "Could not read blacklist", e); 8121 + } 8122 + return ""; 8123 + } 8124 + 8125 + // From IoUtils.readFileAsString 8126 + private static String readFileAsString(String path) throws IOException { 8127 + return readFileAsBytes(path).toString("UTF-8"); 8128 + } 8129 + 8130 + // Based on IoUtils.readFileAsBytes 8131 + private static ByteArrayOutputStream readFileAsBytes(String path) throws IOException { 8132 + RandomAccessFile f = null; 8133 + try { 8134 + f = new RandomAccessFile(path, "r"); 8135 + ByteArrayOutputStream bytes = new ByteArrayOutputStream((int) f.length()); 8136 + byte[] buffer = new byte[8192]; 8137 + while (true) { 8138 + int byteCount = f.read(buffer); 8139 + if (byteCount == -1) { 8140 + return bytes; 8141 + } 8142 + bytes.write(buffer, 0, byteCount); 8143 + } 8144 + } finally { 8145 + closeQuietly(f); 8146 + } 8147 + } 8148 + 8149 + // Base on IoUtils.closeQuietly 8150 + private static void closeQuietly(Closeable closeable) { 8151 + if (closeable != null) { 8152 + try { 8153 + closeable.close(); 8154 + } catch (RuntimeException rethrown) { 8155 + throw rethrown; 8156 + } catch (Exception ignored) { 8157 + } 8158 + } 8159 + } 8160 + 8161 + private static final Set<BigInteger> readSerialBlackList(String path) { 8162 + 8163 + /* Start out with a base set of known bad values. 8164 + * 8165 + * WARNING: Do not add short serials to this list! 8166 + * 8167 + * Since this currently doesn't compare the serial + issuer, you 8168 + * should only add serials that have enough entropy here. Short 8169 + * serials may inadvertently match a certificate that was issued 8170 + * not in compliance with the Baseline Requirements. 8171 + */ 8172 + Set<BigInteger> bl = new HashSet<BigInteger>(Arrays.asList( 8173 + // From http://src.chromium.org/viewvc/chrome/trunk/src/net/base/x509_certificate.cc?revision=78748&view=markup 8174 + // Not a real certificate. For testing only. 8175 + new BigInteger("077a59bcd53459601ca6907267a6dd1c", 16), 8176 + new BigInteger("047ecbe9fca55f7bd09eae36e10cae1e", 16), 8177 + new BigInteger("d8f35f4eb7872b2dab0692e315382fb0", 16), 8178 + new BigInteger("b0b7133ed096f9b56fae91c874bd3ac0", 16), 8179 + new BigInteger("9239d5348f40d1695a745470e1f23f43", 16), 8180 + new BigInteger("e9028b9578e415dc1a710a2b88154447", 16), 8181 + new BigInteger("d7558fdaf5f1105bb213282b707729a3", 16), 8182 + new BigInteger("f5c86af36162f13a64f54f6dc9587c06", 16), 8183 + new BigInteger("392a434f0e07df1f8aa305de34e0c229", 16), 8184 + new BigInteger("3e75ced46b693021218830ae86a82a71", 16) 8185 + )); 8186 + 8187 + // attempt to augment it with values taken from gservices 8188 + String serialBlacklist = readBlacklist(path); 8189 + if (!serialBlacklist.equals("")) { 8190 + for(String value : serialBlacklist.split(",")) { 8191 + try { 8192 + bl.add(new BigInteger(value, 16)); 8193 + } catch (NumberFormatException e) { 8194 + logger.log(Level.WARNING, "Tried to blacklist invalid serial number " + value, e); 8195 + } 8196 + } 8197 + } 8198 + 8199 + // whether that succeeds or fails, send it on its merry way 8200 + return Collections.unmodifiableSet(bl); 8201 + } 8202 + 8203 + private static final Set<byte[]> readPublicKeyBlackList(String path) { 8204 + 8205 + // start out with a base set of known bad values 8206 + Set<byte[]> bl = new HashSet<byte[]>(Arrays.asList( 8207 + // From http://src.chromium.org/viewvc/chrome/branches/782/src/net/base/x509_certificate.cc?r1=98750&r2=98749&pathrev=98750 8208 + // C=NL, O=DigiNotar, CN=DigiNotar Root CA/emailAddress=info (a] diginotar.nl 8209 + "410f36363258f30b347d12ce4863e433437806a8".getBytes(), 8210 + // Subject: CN=DigiNotar Cyber CA 8211 + // Issuer: CN=GTE CyberTrust Global Root 8212 + "ba3e7bd38cd7e1e6b9cd4c219962e59d7a2f4e37".getBytes(), 8213 + // Subject: CN=DigiNotar Services 1024 CA 8214 + // Issuer: CN=Entrust.net 8215 + "e23b8d105f87710a68d9248050ebefc627be4ca6".getBytes(), 8216 + // Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2 8217 + // Issuer: CN=Staat der Nederlanden Organisatie CA - G2 8218 + "7b2e16bc39bcd72b456e9f055d1de615b74945db".getBytes(), 8219 + // Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven 8220 + // Issuer: CN=Staat der Nederlanden Overheid CA 8221 + "e8f91200c65cee16e039b9f883841661635f81c5".getBytes(), 8222 + // From http://src.chromium.org/viewvc/chrome?view=rev&revision=108479 8223 + // Subject: O=Digicert Sdn. Bhd. 8224 + // Issuer: CN=GTE CyberTrust Global Root 8225 + "0129bcd5b448ae8d2496d1c3e19723919088e152".getBytes(), 8226 + // Subject: CN=e-islem.kktcmerkezbankasi.org/emailAddress=ileti (a] kktcmerkezbankasi.org 8227 + // Issuer: CN=T\xC3\x9CRKTRUST Elektronik Sunucu Sertifikas\xC4\xB1 Hizmetleri 8228 + "5f3ab33d55007054bc5e3e5553cd8d8465d77c61".getBytes(), 8229 + // Subject: CN=*.EGO.GOV.TR 93 8230 + // Issuer: CN=T\xC3\x9CRKTRUST Elektronik Sunucu Sertifikas\xC4\xB1 Hizmetleri 8231 + "783333c9687df63377efceddd82efa9101913e8e".getBytes(), 8232 + // Subject: Subject: C=FR, O=DG Tr\xC3\xA9sor, CN=AC DG Tr\xC3\xA9sor SSL 8233 + // Issuer: C=FR, O=DGTPE, CN=AC DGTPE Signature Authentification 8234 + "3ecf4bbbe46096d514bb539bb913d77aa4ef31bf".getBytes() 8235 + )); 8236 + 8237 + // attempt to augment it with values taken from gservices 8238 + String pubkeyBlacklist = readBlacklist(path); 8239 + if (!pubkeyBlacklist.equals("")) { 8240 + for (String value : pubkeyBlacklist.split(",")) { 8241 + value = value.trim(); 8242 + if (isPubkeyHash(value)) { 8243 + bl.add(value.getBytes()); 8244 + } else { 8245 + logger.log(Level.WARNING, "Tried to blacklist invalid pubkey " + value); 8246 + } 8247 + } 8248 + } 8249 + 8250 + return bl; 8251 + } 8252 + 8253 + public boolean isPublicKeyBlackListed(PublicKey publicKey) { 8254 + byte[] encoded = publicKey.getEncoded(); 8255 + Digest digest = AndroidDigestFactory.getSHA1(); 8256 + digest.update(encoded, 0, encoded.length); 8257 + byte[] out = new byte[digest.getDigestSize()]; 8258 + digest.doFinal(out, 0); 8259 + for (byte[] blacklisted : pubkeyBlacklist) { 8260 + if (Arrays.equals(blacklisted, Hex.encode(out))) { 8261 + return true; 8262 + } 8263 + } 8264 + return false; 8265 + } 8266 + 8267 + public boolean isSerialNumberBlackListed(BigInteger serial) { 8268 + return serialBlacklist.contains(serial); 8269 + } 8270 + 8271 +} 8272 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 8273 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2015-03-01 12:03:02.000000000 +0000 8274 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java 2015-04-09 13:10:16.000000000 +0000 8275 @@ -35,6 +35,7 @@ 8276 import java.util.List; 8277 import java.util.Map; 8278 import java.util.Set; 8279 +import javax.security.auth.x500.X500Principal; 8280 8281 import org.bouncycastle.asn1.ASN1Encodable; 8282 import org.bouncycastle.asn1.ASN1Enumerated; 8283 @@ -73,7 +74,9 @@ 8284 import org.bouncycastle.util.Store; 8285 import org.bouncycastle.util.StoreException; 8286 import org.bouncycastle.x509.X509AttributeCertificate; 8287 -import org.bouncycastle.x509.extension.X509ExtensionUtil; 8288 +// BEGIN android-removed 8289 +// import org.bouncycastle.x509.extension.X509ExtensionUtil; 8290 +// END android-removed 8291 8292 class CertPathValidatorUtilities 8293 { 8294 @@ -653,20 +656,22 @@ 8295 { 8296 Object obj = iter.next(); 8297 8298 - if (obj instanceof Store) 8299 - { 8300 - Store certStore = (Store)obj; 8301 - try 8302 - { 8303 - certs.addAll(certStore.getMatches(certSelect)); 8304 - } 8305 - catch (StoreException e) 8306 - { 8307 - throw new AnnotatedException( 8308 - "Problem while picking certificates from X.509 store.", e); 8309 - } 8310 - } 8311 - else 8312 + // BEGIN android-removed 8313 + // if (obj instanceof X509Store) 8314 + // { 8315 + // X509Store certStore = (X509Store)obj; 8316 + // try 8317 + // { 8318 + // certs.addAll(certStore.getMatches(certSelect)); 8319 + // } 8320 + // catch (StoreException e) 8321 + // { 8322 + // throw new AnnotatedException( 8323 + // "Problem while picking certificates from X.509 store.", e); 8324 + // } 8325 + // } 8326 + // else 8327 + // END android-removed 8328 { 8329 CertStore certStore = (CertStore)obj; 8330 8331 @@ -715,7 +720,14 @@ 8332 8333 for (int j = 0; j < genNames.length; j++) 8334 { 8335 - PKIXCRLStore store = namedCRLStoreMap.get(genNames[i]); 8336 + // BEGIN android-removed 8337 + // PKIXCRLStore store = namedCRLStoreMap.get(genNames[i]); 8338 + // END android-removed 8339 + // BEGIN android-added 8340 + // Seems like a bug, unless there should be a guarantee that j < i, 8341 + // However, it's breaking the tests. 8342 + PKIXCRLStore store = namedCRLStoreMap.get(genNames[j]); 8343 + // END android-added 8344 if (store != null) 8345 { 8346 stores.add(store); 8347 @@ -888,8 +900,20 @@ 8348 { 8349 return; 8350 } 8351 - 8352 - X500Name certIssuer = X500Name.getInstance(crl_entry.getCertificateIssuer().getEncoded()); 8353 + // BEGIN android-removed 8354 + // X500Name certIssuer = X500Name.getInstance(crl_entry.getCertificateIssuer().getEncoded()); 8355 + // END android-removed 8356 + // BEGIN android-added 8357 + // The original code throws null pointer exception for OpenSSLX509CRL, 8358 + // which uses the implementation for getCertificateIssuer() in X509CRL, method 8359 + // whose reference implementation has the following JavaDoc: "If the certificate 8360 + // issuer is also the CRL issuer, this method returns null." 8361 + X500Name certIssuer = null; 8362 + X500Principal certificateIssuerPrincipal = crl_entry.getCertificateIssuer(); 8363 + if (certificateIssuerPrincipal != null) { 8364 + certIssuer = X500Name.getInstance(certificateIssuerPrincipal.getEncoded()); 8365 + } 8366 + // END android-added 8367 8368 if (certIssuer == null) 8369 { 8370 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/JCEECPrivateKey.java 8371 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2015-03-01 12:03:02.000000000 +0000 8372 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/JCEECPrivateKey.java 2014-07-28 19:51:54.000000000 +0000 8373 @@ -19,8 +19,10 @@ 8374 import org.bouncycastle.asn1.ASN1Sequence; 8375 import org.bouncycastle.asn1.DERBitString; 8376 import org.bouncycastle.asn1.DERNull; 8377 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8378 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 8379 +// BEGIN android-removed 8380 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8381 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 8382 +// END android-removed 8383 import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 8384 import org.bouncycastle.asn1.sec.ECPrivateKeyStructure; 8385 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 8386 @@ -202,21 +204,23 @@ 8387 ASN1ObjectIdentifier oid = ASN1ObjectIdentifier.getInstance(params.getParameters()); 8388 X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid); 8389 8390 - if (ecP == null) // GOST Curve 8391 - { 8392 - ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid); 8393 - EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed()); 8394 - 8395 - ecSpec = new ECNamedCurveSpec( 8396 - ECGOST3410NamedCurves.getName(oid), 8397 - ellipticCurve, 8398 - new ECPoint( 8399 - gParam.getG().getAffineXCoord().toBigInteger(), 8400 - gParam.getG().getAffineYCoord().toBigInteger()), 8401 - gParam.getN(), 8402 - gParam.getH()); 8403 - } 8404 - else 8405 + // BEGIN android-removed 8406 + // if (ecP == null) // GOST Curve 8407 + // { 8408 + // ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid); 8409 + // EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed()); 8410 + // 8411 + // ecSpec = new ECNamedCurveSpec( 8412 + // ECGOST3410NamedCurves.getName(oid), 8413 + // ellipticCurve, 8414 + // new ECPoint( 8415 + // gParam.getG().getAffineXCoord().toBigInteger(), 8416 + // gParam.getG().getAffineYCoord().toBigInteger()), 8417 + // gParam.getN(), 8418 + // gParam.getH()); 8419 + // } 8420 + // else 8421 + // END android-removed 8422 { 8423 EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed()); 8424 8425 @@ -330,11 +334,13 @@ 8426 8427 try 8428 { 8429 - if (algorithm.equals("ECGOST3410")) 8430 - { 8431 - info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 8432 - } 8433 - else 8434 + // BEGIN android-removed 8435 + // if (algorithm.equals("ECGOST3410")) 8436 + // { 8437 + // info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 8438 + // } 8439 + // else 8440 + // END android-removed 8441 { 8442 8443 info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.toASN1Primitive()), keyStructure.toASN1Primitive()); 8444 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/JCEECPublicKey.java 8445 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java 2015-03-01 12:03:02.000000000 +0000 8446 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/JCEECPublicKey.java 2014-07-28 19:51:54.000000000 +0000 8447 @@ -18,9 +18,11 @@ 8448 import org.bouncycastle.asn1.DERBitString; 8449 import org.bouncycastle.asn1.DERNull; 8450 import org.bouncycastle.asn1.DEROctetString; 8451 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8452 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 8453 -import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters; 8454 +// BEGIN android-removed 8455 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8456 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves; 8457 +// import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters; 8458 +// END android-removed 8459 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 8460 import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 8461 import org.bouncycastle.asn1.x9.X962Parameters; 8462 @@ -33,9 +35,13 @@ 8463 import org.bouncycastle.jcajce.provider.asymmetric.util.EC5Util; 8464 import org.bouncycastle.jcajce.provider.asymmetric.util.ECUtil; 8465 import org.bouncycastle.jcajce.provider.asymmetric.util.KeyUtil; 8466 -import org.bouncycastle.jce.ECGOST3410NamedCurveTable; 8467 +// BEGIN android-removed 8468 +// import org.bouncycastle.jce.ECGOST3410NamedCurveTable; 8469 +// END android-removed 8470 import org.bouncycastle.jce.interfaces.ECPointEncoder; 8471 -import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec; 8472 +// BEGIN android-removed 8473 +// import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec; 8474 +// END android-removed 8475 import org.bouncycastle.jce.spec.ECNamedCurveSpec; 8476 import org.bouncycastle.math.ec.ECCurve; 8477 import org.bouncycastle.math.ec.custom.sec.SecP256K1Point; 8478 @@ -48,7 +54,9 @@ 8479 private org.bouncycastle.math.ec.ECPoint q; 8480 private ECParameterSpec ecSpec; 8481 private boolean withCompression; 8482 - private GOST3410PublicKeyAlgParameters gostParams; 8483 + // BEGIN android-removed 8484 + // private GOST3410PublicKeyAlgParameters gostParams; 8485 + // END android-removed 8486 8487 public JCEECPublicKey( 8488 String algorithm, 8489 @@ -58,7 +66,9 @@ 8490 this.q = key.q; 8491 this.ecSpec = key.ecSpec; 8492 this.withCompression = key.withCompression; 8493 - this.gostParams = key.gostParams; 8494 + // BEGIN android-removed 8495 + // this.gostParams = key.gostParams; 8496 + // END android-removed 8497 } 8498 8499 public JCEECPublicKey( 8500 @@ -181,54 +191,55 @@ 8501 8502 private void populateFromPubKeyInfo(SubjectPublicKeyInfo info) 8503 { 8504 - if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001)) 8505 - { 8506 - DERBitString bits = info.getPublicKeyData(); 8507 - ASN1OctetString key; 8508 - this.algorithm = "ECGOST3410"; 8509 - 8510 - try 8511 - { 8512 - key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes()); 8513 - } 8514 - catch (IOException ex) 8515 - { 8516 - throw new IllegalArgumentException("error recovering public key"); 8517 - } 8518 - 8519 - byte[] keyEnc = key.getOctets(); 8520 - byte[] x = new byte[32]; 8521 - byte[] y = new byte[32]; 8522 - 8523 - for (int i = 0; i != x.length; i++) 8524 - { 8525 - x[i] = keyEnc[32 - 1 - i]; 8526 - } 8527 - 8528 - for (int i = 0; i != y.length; i++) 8529 - { 8530 - y[i] = keyEnc[64 - 1 - i]; 8531 - } 8532 - 8533 - gostParams = new GOST3410PublicKeyAlgParameters((ASN1Sequence)info.getAlgorithmId().getParameters()); 8534 - 8535 - ECNamedCurveParameterSpec spec = ECGOST3410NamedCurveTable.getParameterSpec(ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet())); 8536 - 8537 - ECCurve curve = spec.getCurve(); 8538 - EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed()); 8539 - 8540 - this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false); 8541 - 8542 - ecSpec = new ECNamedCurveSpec( 8543 - ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()), 8544 - ellipticCurve, 8545 - new ECPoint( 8546 - spec.getG().getAffineXCoord().toBigInteger(), 8547 - spec.getG().getAffineYCoord().toBigInteger()), 8548 - spec.getN(), spec.getH()); 8549 - 8550 - } 8551 - else 8552 + // if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001)) 8553 + // { 8554 + // DERBitString bits = info.getPublicKeyData(); 8555 + // ASN1OctetString key; 8556 + // this.algorithm = "ECGOST3410"; 8557 + // 8558 + // try 8559 + // { 8560 + // key = (ASN1OctetString) ASN1Primitive.fromByteArray(bits.getBytes()); 8561 + // } 8562 + // catch (IOException ex) 8563 + // { 8564 + // throw new IllegalArgumentException("error recovering public key"); 8565 + // } 8566 + // 8567 + // byte[] keyEnc = key.getOctets(); 8568 + // byte[] x = new byte[32]; 8569 + // byte[] y = new byte[32]; 8570 + // 8571 + // for (int i = 0; i != x.length; i++) 8572 + // { 8573 + // x[i] = keyEnc[32 - 1 - i]; 8574 + // } 8575 + // 8576 + // for (int i = 0; i != y.length; i++) 8577 + // { 8578 + // y[i] = keyEnc[64 - 1 - i]; 8579 + // } 8580 + // 8581 + // gostParams = new GOST3410PublicKeyAlgParameters((ASN1Sequence)info.getAlgorithmId().getParameters()); 8582 + // 8583 + // ECNamedCurveParameterSpec spec = ECGOST3410NamedCurveTable.getParameterSpec(ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet())); 8584 + // 8585 + // ECCurve curve = spec.getCurve(); 8586 + // EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed()); 8587 + // 8588 + // this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false); 8589 + // 8590 + // ecSpec = new ECNamedCurveSpec( 8591 + // ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()), 8592 + // ellipticCurve, 8593 + // new ECPoint( 8594 + // spec.getG().getAffineXCoord().toBigInteger(), 8595 + // spec.getG().getAffineYCoord().toBigInteger()), 8596 + // spec.getN(), spec.getH()); 8597 + // 8598 + // } 8599 + // else 8600 + // END android-removed 8601 { 8602 X962Parameters params = new X962Parameters((ASN1Primitive)info.getAlgorithmId().getParameters()); 8603 ECCurve curve; 8604 @@ -317,52 +328,54 @@ 8605 ASN1Encodable params; 8606 SubjectPublicKeyInfo info; 8607 8608 - if (algorithm.equals("ECGOST3410")) 8609 - { 8610 - if (gostParams != null) 8611 - { 8612 - params = gostParams; 8613 - } 8614 - else 8615 - { 8616 - if (ecSpec instanceof ECNamedCurveSpec) 8617 - { 8618 - params = new GOST3410PublicKeyAlgParameters( 8619 - ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()), 8620 - CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet); 8621 - } 8622 - else 8623 - { // strictly speaking this may not be applicable... 8624 - ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve()); 8625 - 8626 - X9ECParameters ecP = new X9ECParameters( 8627 - curve, 8628 - EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression), 8629 - ecSpec.getOrder(), 8630 - BigInteger.valueOf(ecSpec.getCofactor()), 8631 - ecSpec.getCurve().getSeed()); 8632 - 8633 - params = new X962Parameters(ecP); 8634 - } 8635 - } 8636 - 8637 - BigInteger bX = this.q.getAffineXCoord().toBigInteger(); 8638 - BigInteger bY = this.q.getAffineYCoord().toBigInteger(); 8639 - byte[] encKey = new byte[64]; 8640 - 8641 - extractBytes(encKey, 0, bX); 8642 - extractBytes(encKey, 32, bY); 8643 - 8644 - try 8645 - { 8646 - info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params), new DEROctetString(encKey)); 8647 - } 8648 - catch (IOException e) 8649 - { 8650 - return null; 8651 - } 8652 - } 8653 - else 8654 + // BEGIN android-removed 8655 + // if (algorithm.equals("ECGOST3410")) 8656 + // { 8657 + // if (gostParams != null) 8658 + // { 8659 + // params = gostParams; 8660 + // } 8661 + // else 8662 + // { 8663 + // if (ecSpec instanceof ECNamedCurveSpec) 8664 + // { 8665 + // params = new GOST3410PublicKeyAlgParameters( 8666 + // ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()), 8667 + // CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet); 8668 + // } 8669 + // else 8670 + // { // strictly speaking this may not be applicable... 8671 + // ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve()); 8672 + // 8673 + // X9ECParameters ecP = new X9ECParameters( 8674 + // curve, 8675 + // EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression), 8676 + // ecSpec.getOrder(), 8677 + // BigInteger.valueOf(ecSpec.getCofactor()), 8678 + // ecSpec.getCurve().getSeed()); 8679 + // 8680 + // params = new X962Parameters(ecP); 8681 + // } 8682 + // } 8683 + // 8684 + // BigInteger bX = this.q.getAffineXCoord().toBigInteger(); 8685 + // BigInteger bY = this.q.getAffineYCoord().toBigInteger(); 8686 + // byte[] encKey = new byte[64]; 8687 + // 8688 + // extractBytes(encKey, 0, bX); 8689 + // extractBytes(encKey, 32, bY); 8690 + // 8691 + // try 8692 + // { 8693 + // info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params), new DEROctetString(encKey)); 8694 + // } 8695 + // catch (IOException e) 8696 + // { 8697 + // return null; 8698 + // } 8699 + // } 8700 + // else 8701 + // END android-removed 8702 { 8703 if (ecSpec instanceof ECNamedCurveSpec) 8704 { 8705 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/PKIXCRLUtil.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/PKIXCRLUtil.java 8706 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/PKIXCRLUtil.java 2015-03-01 12:03:02.000000000 +0000 8707 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/PKIXCRLUtil.java 2015-04-09 13:10:16.000000000 +0000 8708 @@ -88,22 +88,24 @@ 8709 { 8710 Object obj = iter.next(); 8711 8712 - if (obj instanceof Store) 8713 - { 8714 - Store store = (Store)obj; 8715 + // BEGIN android-removed 8716 + // if (obj instanceof Store) 8717 + // { 8718 + // Store store = (Store)obj; 8719 8720 - try 8721 - { 8722 - crls.addAll(store.getMatches(crlSelect)); 8723 - foundValidStore = true; 8724 - } 8725 - catch (StoreException e) 8726 - { 8727 - lastException = new AnnotatedException( 8728 - "Exception searching in X.509 CRL store.", e); 8729 - } 8730 - } 8731 - else 8732 + // try 8733 + // { 8734 + // crls.addAll(store.getMatches(crlSelect)); 8735 + // foundValidStore = true; 8736 + // } 8737 + // catch (StoreException e) 8738 + // { 8739 + // lastException = new AnnotatedException( 8740 + // "Exception searching in X.509 CRL store.", e); 8741 + // } 8742 + // } 8743 + // else 8744 + // END android-removed 8745 { 8746 CertStore store = (CertStore)obj; 8747 8748 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 8749 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2015-03-01 12:03:02.000000000 +0000 8750 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java 2015-04-24 13:59:41.000000000 +0000 8751 @@ -1,5 +1,8 @@ 8752 package org.bouncycastle.jce.provider; 8753 8754 +// BEGIN android-added 8755 +import java.math.BigInteger; 8756 +// END android-added 8757 import java.security.InvalidAlgorithmParameterException; 8758 import java.security.PublicKey; 8759 import java.security.cert.CertPath; 8760 @@ -41,6 +44,11 @@ 8761 public PKIXCertPathValidatorSpi() 8762 { 8763 } 8764 + // BEGIN android-added 8765 + private static class NoPreloadHolder { 8766 + private final static CertBlacklist blacklist = new CertBlacklist(); 8767 + } 8768 + // END android-added 8769 8770 public CertPathValidatorResult engineValidate( 8771 CertPath certPath, 8772 @@ -73,10 +81,18 @@ 8773 { 8774 paramsPKIX = ((PKIXExtendedBuilderParameters)params).getBaseParameters(); 8775 } 8776 - else 8777 + // BEGIN android-changed 8778 + // else 8779 + else if (params instanceof PKIXExtendedParameters) 8780 + // END android-changed 8781 { 8782 paramsPKIX = (PKIXExtendedParameters)params; 8783 } 8784 + // BEGIN android-added 8785 + else { 8786 + throw new InvalidAlgorithmParameterException("Expecting PKIX algorithm parameters"); 8787 + } 8788 + // END android-added 8789 8790 if (paramsPKIX.getTrustAnchors() == null) 8791 { 8792 @@ -98,6 +114,22 @@ 8793 { 8794 throw new CertPathValidatorException("Certification path is empty.", null, certPath, 0); 8795 } 8796 + // BEGIN android-added 8797 + { 8798 + X509Certificate cert = (X509Certificate) certs.get(0); 8799 + 8800 + if (cert != null) { 8801 + BigInteger serial = cert.getSerialNumber(); 8802 + if (NoPreloadHolder.blacklist.isSerialNumberBlackListed(serial)) { 8803 + // emulate CRL exception message in RFC3280CertPathUtilities.checkCRLs 8804 + String message = "Certificate revocation of serial 0x" + serial.toString(16); 8805 + System.out.println(message); 8806 + AnnotatedException e = new AnnotatedException(message); 8807 + throw new CertPathValidatorException(e.getMessage(), e, certPath, 0); 8808 + } 8809 + } 8810 + } 8811 + // END android-added 8812 8813 // 8814 // (b) 8815 @@ -277,6 +309,15 @@ 8816 8817 for (index = certs.size() - 1; index >= 0; index--) 8818 { 8819 + // BEGIN android-added 8820 + if (NoPreloadHolder.blacklist.isPublicKeyBlackListed(workingPublicKey)) { 8821 + // emulate CRL exception message in RFC3280CertPathUtilities.checkCRLs 8822 + String message = "Certificate revocation of public key " + workingPublicKey; 8823 + System.out.println(message); 8824 + AnnotatedException e = new AnnotatedException(message); 8825 + throw new CertPathValidatorException(e.getMessage(), e, certPath, index); 8826 + } 8827 + // END android-added 8828 // try 8829 // { 8830 // 8831 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/X509CertificateObject.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/X509CertificateObject.java 8832 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/X509CertificateObject.java 2015-03-01 12:03:02.000000000 +0000 8833 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/X509CertificateObject.java 2013-01-31 02:26:40.000000000 +0000 8834 @@ -57,6 +57,9 @@ 8835 import org.bouncycastle.asn1.x509.Extensions; 8836 import org.bouncycastle.asn1.x509.GeneralName; 8837 import org.bouncycastle.asn1.x509.KeyUsage; 8838 +// BEGIN android-added 8839 +import org.bouncycastle.asn1.x509.X509Name; 8840 +// END android-added 8841 import org.bouncycastle.jcajce.provider.asymmetric.util.PKCS12BagAttributeCarrierImpl; 8842 import org.bouncycastle.jce.X509Principal; 8843 import org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier; 8844 @@ -562,12 +565,20 @@ 8845 } 8846 } 8847 8848 + // BEGIN android-changed 8849 + private byte[] encoded; 8850 + // END android-changed 8851 public byte[] getEncoded() 8852 throws CertificateEncodingException 8853 { 8854 try 8855 { 8856 - return c.getEncoded(ASN1Encoding.DER); 8857 + // BEGIN android-changed 8858 + if (encoded == null) { 8859 + encoded = c.getEncoded(ASN1Encoding.DER); 8860 + } 8861 + return encoded; 8862 + // END android-changed 8863 } 8864 catch (IOException e) 8865 { 8866 @@ -858,7 +869,9 @@ 8867 list.add(genName.getEncoded()); 8868 break; 8869 case GeneralName.directoryName: 8870 - list.add(X500Name.getInstance(RFC4519Style.INSTANCE, genName.getName()).toString()); 8871 + // BEGIN android-changed 8872 + list.add(X509Name.getInstance(genName.getName()).toString(true, X509Name.DefaultSymbols)); 8873 + // END android-changed 8874 break; 8875 case GeneralName.dNSName: 8876 case GeneralName.rfc822Name: 8877 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java bcprov-jdk15on-152/org/bouncycastle/jce/provider/X509SignatureUtil.java 8878 --- bcprov-jdk15on-152.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java 2015-03-01 12:03:02.000000000 +0000 8879 +++ bcprov-jdk15on-152/org/bouncycastle/jce/provider/X509SignatureUtil.java 2014-07-28 19:51:54.000000000 +0000 8880 @@ -14,7 +14,9 @@ 8881 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 8882 import org.bouncycastle.asn1.ASN1Sequence; 8883 import org.bouncycastle.asn1.DERNull; 8884 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8885 +// BEGIN android-removed 8886 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8887 +// END android-removed 8888 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 8889 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 8890 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 8891 @@ -66,12 +68,14 @@ 8892 8893 if (params != null && !derNull.equals(params)) 8894 { 8895 - if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS)) 8896 - { 8897 - RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params); 8898 - 8899 - return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "withRSAandMGF1"; 8900 - } 8901 + // BEGIN android-removed 8902 + // if (sigAlgId.getAlgorithm().equals(PKCSObjectIdentifiers.id_RSASSA_PSS)) 8903 + // { 8904 + // RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params); 8905 + // 8906 + // return getDigestAlgName(rsaParams.getHashAlgorithm().getAlgorithm()) + "withRSAandMGF1"; 8907 + // } 8908 + // END android-removed 8909 if (sigAlgId.getAlgorithm().equals(X9ObjectIdentifiers.ecdsa_with_SHA2)) 8910 { 8911 ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params); 8912 @@ -114,22 +118,24 @@ 8913 { 8914 return "SHA512"; 8915 } 8916 - else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 8917 - { 8918 - return "RIPEMD128"; 8919 - } 8920 - else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 8921 - { 8922 - return "RIPEMD160"; 8923 - } 8924 - else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 8925 - { 8926 - return "RIPEMD256"; 8927 - } 8928 - else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 8929 - { 8930 - return "GOST3411"; 8931 - } 8932 + // BEGIN android-removed 8933 + // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID)) 8934 + // { 8935 + // return "RIPEMD128"; 8936 + // } 8937 + // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID)) 8938 + // { 8939 + // return "RIPEMD160"; 8940 + // } 8941 + // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID)) 8942 + // { 8943 + // return "RIPEMD256"; 8944 + // } 8945 + // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID)) 8946 + // { 8947 + // return "GOST3411"; 8948 + // } 8949 + // END android-removed 8950 else 8951 { 8952 return digestAlgOID.getId(); 8953 diff -Naur bcprov-jdk15on-152.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk15on-152/org/bouncycastle/x509/X509Util.java 8954 --- bcprov-jdk15on-152.orig/org/bouncycastle/x509/X509Util.java 2015-03-01 12:03:02.000000000 +0000 8955 +++ bcprov-jdk15on-152/org/bouncycastle/x509/X509Util.java 2014-07-28 19:51:54.000000000 +0000 8956 @@ -25,12 +25,16 @@ 8957 import org.bouncycastle.asn1.ASN1Integer; 8958 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 8959 import org.bouncycastle.asn1.DERNull; 8960 -import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8961 +// BEGIN android-removed 8962 +// import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 8963 +// END android-removed 8964 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 8965 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 8966 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 8967 import org.bouncycastle.asn1.pkcs.RSASSAPSSparams; 8968 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 8969 +// BEGIN android-removed 8970 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers; 8971 +// END android-removed 8972 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 8973 import org.bouncycastle.asn1.x9.X9ObjectIdentifiers; 8974 import org.bouncycastle.jce.X509Principal; 8975 @@ -44,8 +48,10 @@ 8976 8977 static 8978 { 8979 - algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption); 8980 - algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption); 8981 + // BEGIN android-removed 8982 + // algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption); 8983 + // algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption); 8984 + // END android-removed 8985 algorithms.put("MD5WITHRSAENCRYPTION", PKCSObjectIdentifiers.md5WithRSAEncryption); 8986 algorithms.put("MD5WITHRSA", PKCSObjectIdentifiers.md5WithRSAEncryption); 8987 algorithms.put("SHA1WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha1WithRSAEncryption); 8988 @@ -63,12 +69,14 @@ 8989 algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 8990 algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 8991 algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS); 8992 - algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 8993 - algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 8994 - algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 8995 - algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 8996 - algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 8997 - algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 8998 + // BEGIN android-removed 8999 + // algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 9000 + // algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160); 9001 + // algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 9002 + // algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128); 9003 + // algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 9004 + // algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256); 9005 + // END android-removed 9006 algorithms.put("SHA1WITHDSA", X9ObjectIdentifiers.id_dsa_with_sha1); 9007 algorithms.put("DSAWITHSHA1", X9ObjectIdentifiers.id_dsa_with_sha1); 9008 algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224); 9009 @@ -81,11 +89,13 @@ 9010 algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256); 9011 algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384); 9012 algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512); 9013 - algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9014 - algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9015 - algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9016 - algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9017 - algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9018 + // BEGIN android-removed 9019 + // algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9020 + // algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9021 + // algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9022 + // algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9023 + // algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9024 + // END android-removed 9025 9026 // 9027 // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. 9028 @@ -105,8 +115,10 @@ 9029 // 9030 // RFC 4491 9031 // 9032 - noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9033 - noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9034 + // BEGIN android-removed 9035 + // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94); 9036 + // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001); 9037 + // END android-removed 9038 9039 // 9040 // explicit params 9041