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