Home | History | Annotate | Download | only in patches
      1 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1InputStream.java bcprov-jdk16-146/org/bouncycastle/asn1/ASN1InputStream.java
      2 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1InputStream.java	2011-02-23 20:08:56.000000000 +0000
      3 +++ bcprov-jdk16-146/org/bouncycastle/asn1/ASN1InputStream.java	2011-09-08 21:28:50.000000000 +0000
      4 @@ -363,7 +363,9 @@
      5              case BMP_STRING:
      6                  return new DERBMPString(bytes);
      7              case BOOLEAN:
      8 -                return new ASN1Boolean(bytes);
      9 +                // BEGIN android-changed
     10 +                return DERBoolean.getInstance(bytes);
     11 +                // END android-changed
     12              case ENUMERATED:
     13                  return new ASN1Enumerated(bytes);
     14              case GENERALIZED_TIME:
     15 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1Null.java bcprov-jdk16-146/org/bouncycastle/asn1/ASN1Null.java
     16 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/ASN1Null.java	2011-02-23 20:08:56.000000000 +0000
     17 +++ bcprov-jdk16-146/org/bouncycastle/asn1/ASN1Null.java	2011-09-08 21:28:50.000000000 +0000
     18 @@ -8,9 +8,11 @@
     19  public abstract class ASN1Null
     20      extends ASN1Object
     21  {
     22 -    public ASN1Null()
     23 +    // BEGIN android-changed
     24 +    /*package*/ ASN1Null()
     25      {
     26      }
     27 +    // END android-changed
     28  
     29      public int hashCode()
     30      {
     31 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERBoolean.java bcprov-jdk16-146/org/bouncycastle/asn1/DERBoolean.java
     32 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERBoolean.java	2011-02-23 20:08:56.000000000 +0000
     33 +++ bcprov-jdk16-146/org/bouncycastle/asn1/DERBoolean.java	2011-09-08 21:28:50.000000000 +0000
     34 @@ -5,7 +5,9 @@
     35  public class DERBoolean
     36      extends ASN1Object
     37  {
     38 -    byte         value;
     39 +    // BEGIN android-changed
     40 +    private final byte  value;
     41 +    // END android-changed
     42  
     43      public static final DERBoolean FALSE = new DERBoolean(false);
     44      public static final DERBoolean TRUE  = new DERBoolean(true);
     45 @@ -35,6 +37,17 @@
     46          return (value ? TRUE : FALSE);
     47      }
     48  
     49 +    // BEGIN android-added
     50 +    /**
     51 +     * return a DERBoolean from the passed in array.
     52 +     */
     53 +    public static DERBoolean getInstance(
     54 +        byte[] octets)
     55 +    {
     56 +        return (octets[0] != 0) ? TRUE : FALSE;
     57 +    }
     58 +    // END android-added
     59 +
     60      /**
     61       * return a Boolean from a tagged object.
     62       *
     63 @@ -56,23 +69,29 @@
     64          }
     65          else
     66          {
     67 -            return new DERBoolean(((ASN1OctetString)o).getOctets());
     68 +            // BEGIN android-changed
     69 +            return getInstance(((ASN1OctetString)o).getOctets());
     70 +            // END android-changed
     71          }
     72      }
     73      
     74 -    public DERBoolean(
     75 -        byte[]       value)
     76 -    {
     77 -        if (value.length != 1)
     78 -        {
     79 -            throw new IllegalArgumentException("byte value should have 1 byte in it");
     80 -        }
     81 -        
     82 -        this.value = value[0];
     83 -    }
     84 +    // BEGIN android-removed
     85 +    // public DERBoolean(
     86 +    //     byte[]       value)
     87 +    // {
     88 +    //     if (value.length != 1)
     89 +    //     {
     90 +    //         throw new IllegalArgumentException("byte value should have 1 byte in it");
     91 +    //     }
     92 +    //
     93 +    //     this.value = value[0];
     94 +    // }
     95 +    // END android-removed
     96  
     97 -    public DERBoolean(
     98 +    // BEGIN android-changed
     99 +    protected DERBoolean(
    100          boolean     value)
    101 +    // END android-changed
    102      {
    103          this.value = (value) ? (byte)0xff : (byte)0;
    104      }
    105 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERNull.java bcprov-jdk16-146/org/bouncycastle/asn1/DERNull.java
    106 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERNull.java	2011-02-23 20:08:56.000000000 +0000
    107 +++ bcprov-jdk16-146/org/bouncycastle/asn1/DERNull.java	2011-09-08 21:28:50.000000000 +0000
    108 @@ -10,9 +10,13 @@
    109  {
    110      public static final DERNull INSTANCE = new DERNull();
    111  
    112 -    byte[]  zeroBytes = new byte[0];
    113 +    // BEGIN android-changed
    114 +    private static final byte[]  zeroBytes = new byte[0];
    115 +    // END android-changed
    116  
    117 -    public DERNull()
    118 +    // BEGIN android-changed
    119 +    protected DERNull()
    120 +    // END android-changed
    121      {
    122      }
    123  
    124 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERObjectIdentifier.java bcprov-jdk16-146/org/bouncycastle/asn1/DERObjectIdentifier.java
    125 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERObjectIdentifier.java	2011-02-23 20:08:56.000000000 +0000
    126 +++ bcprov-jdk16-146/org/bouncycastle/asn1/DERObjectIdentifier.java	2011-09-08 21:28:50.000000000 +0000
    127 @@ -110,7 +110,13 @@
    128              }
    129          }
    130  
    131 -        this.identifier = objId.toString();
    132 +        // BEGIN android-changed
    133 +        /*
    134 +         * Intern the identifier so there aren't hundreds of duplicates
    135 +         * (in practice).
    136 +         */
    137 +        this.identifier = objId.toString().intern();
    138 +        // END android-changed
    139      }
    140  
    141      public DERObjectIdentifier(
    142 @@ -121,7 +127,13 @@
    143              throw new IllegalArgumentException("string " + identifier + " not an OID");
    144          }
    145  
    146 -        this.identifier = identifier;
    147 +        // BEGIN android-changed
    148 +        /*
    149 +         * Intern the identifier so there aren't hundreds of duplicates
    150 +         * (in practice).
    151 +         */
    152 +        this.identifier = identifier.intern();
    153 +        // END android-changed
    154      }
    155  
    156      public String getId()
    157 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERPrintableString.java bcprov-jdk16-146/org/bouncycastle/asn1/DERPrintableString.java
    158 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/DERPrintableString.java	2011-02-23 20:08:56.000000000 +0000
    159 +++ bcprov-jdk16-146/org/bouncycastle/asn1/DERPrintableString.java	2011-09-08 21:28:50.000000000 +0000
    160 @@ -9,7 +9,9 @@
    161      extends ASN1Object
    162      implements DERString
    163  {
    164 -    String  string;
    165 +    // BEGIN android-changed
    166 +    private final String string;
    167 +    // END android-changed
    168  
    169      /**
    170       * return a printable string from the passed in object.
    171 @@ -65,7 +67,9 @@
    172              cs[i] = (char)(string[i] & 0xff);
    173          }
    174  
    175 -        this.string = new String(cs);
    176 +        // BEGIN android-changed
    177 +        this.string = new String(cs).intern();
    178 +        // END android-changed
    179      }
    180  
    181      /**
    182 @@ -94,7 +98,9 @@
    183              throw new IllegalArgumentException("string contains illegal characters");
    184          }
    185  
    186 -        this.string = string;
    187 +        // BEGIN android-changed
    188 +        this.string = string.intern();
    189 +        // END android-changed
    190      }
    191  
    192      public String getString()
    193 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/cms/ContentInfo.java bcprov-jdk16-146/org/bouncycastle/asn1/cms/ContentInfo.java
    194 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/cms/ContentInfo.java	2011-02-23 20:08:56.000000000 +0000
    195 +++ bcprov-jdk16-146/org/bouncycastle/asn1/cms/ContentInfo.java	2011-09-08 21:28:50.000000000 +0000
    196 @@ -12,7 +12,9 @@
    197  
    198  public class ContentInfo
    199      extends ASN1Encodable
    200 -    implements CMSObjectIdentifiers
    201 +    // BEGIN android-removed
    202 +    // implements CMSObjectIdentifiers
    203 +    // END android-removed
    204  {
    205      private ASN1ObjectIdentifier contentType;
    206      private DEREncodable        content;
    207 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java
    208 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java	2011-02-23 20:08:56.000000000 +0000
    209 +++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/EncryptedPrivateKeyInfo.java	2011-09-08 21:28:50.000000000 +0000
    210 @@ -37,10 +37,13 @@
    211      public static EncryptedPrivateKeyInfo getInstance(
    212          Object  obj)
    213      {
    214 -        if (obj instanceof EncryptedData)
    215 +        // BEGIN android-changed
    216 +        //     fix copy and paste error in instanceof call
    217 +        if (obj instanceof EncryptedPrivateKeyInfo)
    218          {
    219              return (EncryptedPrivateKeyInfo)obj;
    220          }
    221 +        // END android-changed
    222          else if (obj instanceof ASN1Sequence)
    223          { 
    224              return new EncryptedPrivateKeyInfo((ASN1Sequence)obj);
    225 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java
    226 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java	2011-02-23 20:08:56.000000000 +0000
    227 +++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers.java	2011-09-08 21:28:50.000000000 +0000
    228 @@ -10,8 +10,10 @@
    229      //
    230      static final ASN1ObjectIdentifier    pkcs_1                    = new ASN1ObjectIdentifier("1.2.840.113549.1.1");
    231      static final ASN1ObjectIdentifier    rsaEncryption             = pkcs_1.branch("1");
    232 -    static final ASN1ObjectIdentifier    md2WithRSAEncryption      = pkcs_1.branch("2");
    233 -    static final ASN1ObjectIdentifier    md4WithRSAEncryption      = pkcs_1.branch("3");
    234 +    // BEGIN android-removed
    235 +    // static final ASN1ObjectIdentifier    md2WithRSAEncryption      = pkcs_1.branch("2");
    236 +    // static final ASN1ObjectIdentifier    md4WithRSAEncryption      = pkcs_1.branch("3");
    237 +    // END android-removed
    238      static final ASN1ObjectIdentifier    md5WithRSAEncryption      = pkcs_1.branch("4");
    239      static final ASN1ObjectIdentifier    sha1WithRSAEncryption     = pkcs_1.branch("5");
    240      static final ASN1ObjectIdentifier    srsaOAEPEncryptionSET     = pkcs_1.branch("6");
    241 @@ -22,7 +24,9 @@
    242      static final ASN1ObjectIdentifier    sha256WithRSAEncryption   = pkcs_1.branch("11");
    243      static final ASN1ObjectIdentifier    sha384WithRSAEncryption   = pkcs_1.branch("12");
    244      static final ASN1ObjectIdentifier    sha512WithRSAEncryption   = pkcs_1.branch("13");
    245 -    static final ASN1ObjectIdentifier    sha224WithRSAEncryption   = pkcs_1.branch("14");
    246 +    // BEGIN android-removed
    247 +    // static final ASN1ObjectIdentifier    sha224WithRSAEncryption   = pkcs_1.branch("14");
    248 +    // END android-removed
    249  
    250      //
    251      // pkcs-3 OBJECT IDENTIFIER ::= {
    252 @@ -65,13 +69,17 @@
    253      // md2 OBJECT IDENTIFIER ::=
    254      //      {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 2}
    255      //
    256 -    static final ASN1ObjectIdentifier    md2                    = digestAlgorithm.branch("2");
    257 +    // BEGIN android-removed
    258 +    // static final ASN1ObjectIdentifier    md2                    = digestAlgorithm.branch("2");
    259 +    // END android-removed
    260  
    261      //
    262      // md4 OBJECT IDENTIFIER ::=
    263      //      {iso(1) member-body(2) US(840) rsadsi(113549) digestAlgorithm(2) 4}
    264      //
    265 -    static final ASN1ObjectIdentifier    md4 = digestAlgorithm.branch("4");
    266 +    // BEGIN android-removed
    267 +    // static final ASN1ObjectIdentifier    md4 = digestAlgorithm.branch("4");
    268 +    // END android-removed
    269  
    270      //
    271      // md5 OBJECT IDENTIFIER ::=
    272 @@ -80,7 +88,9 @@
    273      static final ASN1ObjectIdentifier    md5                     = digestAlgorithm.branch("5");
    274  
    275      static final ASN1ObjectIdentifier    id_hmacWithSHA1         = digestAlgorithm.branch("7");
    276 -    static final ASN1ObjectIdentifier    id_hmacWithSHA224       = digestAlgorithm.branch("8");
    277 +    // BEGIN android-removed
    278 +    // static final ASN1ObjectIdentifier    id_hmacWithSHA224       = digestAlgorithm.branch("8");
    279 +    // END android-removed
    280      static final ASN1ObjectIdentifier    id_hmacWithSHA256       = digestAlgorithm.branch("9");
    281      static final ASN1ObjectIdentifier    id_hmacWithSHA384       = digestAlgorithm.branch("10");
    282      static final ASN1ObjectIdentifier    id_hmacWithSHA512       = digestAlgorithm.branch("11");
    283 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java
    284 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java	2011-02-23 20:08:56.000000000 +0000
    285 +++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSAESOAEPparams.java	2011-09-08 21:28:50.000000000 +0000
    286 @@ -19,7 +19,9 @@
    287      private AlgorithmIdentifier maskGenAlgorithm;
    288      private AlgorithmIdentifier pSourceAlgorithm;
    289      
    290 -    public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
    291 +    // BEGIN android-changed
    292 +    public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
    293 +    // END android-changed
    294      public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
    295      public final static AlgorithmIdentifier DEFAULT_P_SOURCE_ALGORITHM = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(new byte[0]));
    296      
    297 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java
    298 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java	2011-02-23 20:08:56.000000000 +0000
    299 +++ bcprov-jdk16-146/org/bouncycastle/asn1/pkcs/RSASSAPSSparams.java	2011-09-08 21:28:50.000000000 +0000
    300 @@ -20,7 +20,9 @@
    301      private DERInteger          saltLength;
    302      private DERInteger          trailerField;
    303      
    304 -    public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
    305 +    // BEGIN android-changed
    306 +    public final static AlgorithmIdentifier DEFAULT_HASH_ALGORITHM = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
    307 +    // END android-changed
    308      public final static AlgorithmIdentifier DEFAULT_MASK_GEN_FUNCTION = new AlgorithmIdentifier(PKCSObjectIdentifiers.id_mgf1, DEFAULT_HASH_ALGORITHM);
    309      public final static DERInteger          DEFAULT_SALT_LENGTH = new DERInteger(20);
    310      public final static DERInteger          DEFAULT_TRAILER_FIELD = new DERInteger(1);
    311 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/util/ASN1Dump.java bcprov-jdk16-146/org/bouncycastle/asn1/util/ASN1Dump.java
    312 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/util/ASN1Dump.java	2011-02-23 20:08:56.000000000 +0000
    313 +++ bcprov-jdk16-146/org/bouncycastle/asn1/util/ASN1Dump.java	2011-09-08 21:28:50.000000000 +0000
    314 @@ -79,7 +79,9 @@
    315              {
    316                  Object  o = e.nextElement();
    317  
    318 -                if (o == null || o.equals(new DERNull()))
    319 +                // BEGIN android-changed
    320 +                if (o == null || o.equals(DERNull.INSTANCE))
    321 +                // END android-changed
    322                  {
    323                      buf.append(tab);
    324                      buf.append("NULL");
    325 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/AttCertIssuer.java
    326 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/AttCertIssuer.java	2011-02-23 20:08:56.000000000 +0000
    327 +++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/AttCertIssuer.java	2011-09-08 21:28:50.000000000 +0000
    328 @@ -45,7 +45,7 @@
    329          ASN1TaggedObject obj,
    330          boolean          explicit)
    331      {
    332 -        return getInstance(obj.getObject()); // must be explictly tagged
    333 +        return getInstance(obj.getObject()); // must be explicitly tagged
    334      }
    335  
    336      /**
    337 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/BasicConstraints.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/BasicConstraints.java
    338 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/BasicConstraints.java	2011-02-23 20:08:56.000000000 +0000
    339 +++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/BasicConstraints.java	2011-09-08 21:28:50.000000000 +0000
    340 @@ -14,7 +14,9 @@
    341  public class BasicConstraints
    342      extends ASN1Encodable
    343  {
    344 -    DERBoolean  cA = new DERBoolean(false);
    345 +    // BEGIN android-changed
    346 +    DERBoolean  cA = DERBoolean.FALSE;
    347 +    // END android-changed
    348      DERInteger  pathLenConstraint = null;
    349  
    350      public static BasicConstraints getInstance(
    351 @@ -89,7 +91,9 @@
    352      {
    353          if (cA)
    354          {
    355 -            this.cA = new DERBoolean(cA);
    356 +            // BEGIN android-changed
    357 +            this.cA = DERBoolean.getInstance(cA);
    358 +            // END android-changed
    359              this.pathLenConstraint = new DERInteger(pathLenConstraint);
    360          }
    361          else
    362 @@ -104,7 +108,9 @@
    363      {
    364          if (cA)
    365          {
    366 -            this.cA = new DERBoolean(true);
    367 +            // BEGIN android-changed
    368 +            this.cA = DERBoolean.TRUE;
    369 +            // END android-changed
    370          }
    371          else
    372          {
    373 @@ -121,7 +127,9 @@
    374      public BasicConstraints(
    375          int     pathLenConstraint)
    376      {
    377 -        this.cA = new DERBoolean(true);
    378 +        // BEGIN android-changed
    379 +        this.cA = DERBoolean.TRUE;
    380 +        // END android-changed
    381          this.pathLenConstraint = new DERInteger(pathLenConstraint);
    382      }
    383  
    384 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java
    385 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java	2011-02-23 20:08:56.000000000 +0000
    386 +++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/IssuingDistributionPoint.java	2011-09-08 21:28:50.000000000 +0000
    387 @@ -96,11 +96,15 @@
    388          }
    389          if (onlyContainsUserCerts)
    390          {
    391 -            vec.add(new DERTaggedObject(false, 1, new DERBoolean(true)));
    392 +            // BEGIN android-changed
    393 +            vec.add(new DERTaggedObject(false, 1, DERBoolean.TRUE));
    394 +            // END android-changed
    395          }
    396          if (onlyContainsCACerts)
    397          {
    398 -            vec.add(new DERTaggedObject(false, 2, new DERBoolean(true)));
    399 +            // BEGIN android-changed
    400 +            vec.add(new DERTaggedObject(false, 2, DERBoolean.TRUE));
    401 +            // END android-changed
    402          }
    403          if (onlySomeReasons != null)
    404          {
    405 @@ -108,11 +112,15 @@
    406          }
    407          if (indirectCRL)
    408          {
    409 -            vec.add(new DERTaggedObject(false, 4, new DERBoolean(true)));
    410 +            // BEGIN android-changed
    411 +            vec.add(new DERTaggedObject(false, 4, DERBoolean.TRUE));
    412 +            // END android-changed
    413          }
    414          if (onlyContainsAttributeCerts)
    415          {
    416 -            vec.add(new DERTaggedObject(false, 5, new DERBoolean(true)));
    417 +            // BEGIN android-changed
    418 +            vec.add(new DERTaggedObject(false, 5, DERBoolean.TRUE));
    419 +            // END android-changed
    420          }
    421  
    422          seq = new DERSequence(vec);
    423 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Extensions.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Extensions.java
    424 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Extensions.java	2011-02-23 20:08:56.000000000 +0000
    425 +++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Extensions.java	2011-09-08 21:28:50.000000000 +0000
    426 @@ -400,7 +400,9 @@
    427  
    428              if (ext.isCritical())
    429              {
    430 -                v.add(new DERBoolean(true));
    431 +                // BEGIN android-changed
    432 +                v.add(DERBoolean.TRUE);
    433 +                // END android-changed
    434              }
    435  
    436              v.add(ext.getValue());
    437 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Name.java
    438 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509Name.java	2011-02-23 20:08:56.000000000 +0000
    439 +++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509Name.java	2011-09-08 21:28:50.000000000 +0000
    440 @@ -249,8 +249,10 @@
    441       */
    442      public static final Hashtable SymbolLookUp = DefaultLookUp;
    443  
    444 -    private static final Boolean TRUE = new Boolean(true); // for J2ME compatibility
    445 -    private static final Boolean FALSE = new Boolean(false);
    446 +    // BEGIN android-changed
    447 +    private static final Boolean TRUE = Boolean.TRUE;
    448 +    private static final Boolean FALSE = Boolean.FALSE;
    449 +    // END android-changed
    450  
    451      static
    452      {
    453 @@ -432,7 +434,9 @@
    454                     {
    455                         values.addElement("#" + bytesToString(Hex.encode(value.getDERObject().getDEREncoded())));
    456                     }
    457 -                   added.addElement((i != 0) ? TRUE : FALSE);  // to allow earlier JDK compatibility
    458 +                   // BEGIN android-changed
    459 +                   added.addElement(Boolean.valueOf(i != 0));
    460 +                   // END android-changed
    461              }
    462          }
    463      }
    464 @@ -689,7 +693,9 @@
    465  
    466              if (index == -1)
    467              {
    468 -                throw new IllegalArgumentException("badly formated directory string");
    469 +                // BEGIN android-changed
    470 +                throw new IllegalArgumentException("badly formatted directory string");
    471 +                // END android-changed
    472              }
    473  
    474              String              name = token.substring(0, index);
    475 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509NameTokenizer.java
    476 --- bcprov-jdk16-146.orig/org/bouncycastle/asn1/x509/X509NameTokenizer.java	2011-02-23 20:08:56.000000000 +0000
    477 +++ bcprov-jdk16-146/org/bouncycastle/asn1/x509/X509NameTokenizer.java	2011-09-08 21:28:50.000000000 +0000
    478 @@ -58,6 +58,17 @@
    479                  }
    480                  else
    481                  {
    482 +                    // BEGIN android-added
    483 +                    // copied from a newer version of BouncyCastle
    484 +                    if (c == '#' && buf.charAt(buf.length() - 1) == '=')
    485 +                    {
    486 +                        buf.append('\\');
    487 +                    }
    488 +                    else if (c == '+' && seperator != '+')
    489 +                    {
    490 +                        buf.append('\\');
    491 +                    }
    492 +                    // END android-added
    493                      buf.append(c);
    494                  }
    495                  escaped = false;
    496 @@ -96,4 +107,4 @@
    497          index = end;
    498          return buf.toString().trim();
    499      }
    500 -}
    501 +}
    502 \ No newline at end of file
    503 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/PBEParametersGenerator.java bcprov-jdk16-146/org/bouncycastle/crypto/PBEParametersGenerator.java
    504 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/PBEParametersGenerator.java	2011-02-23 20:08:56.000000000 +0000
    505 +++ bcprov-jdk16-146/org/bouncycastle/crypto/PBEParametersGenerator.java	2011-09-08 21:28:49.000000000 +0000
    506 @@ -136,7 +136,8 @@
    507      public static byte[] PKCS12PasswordToBytes(
    508          char[]  password)
    509      {
    510 -        if (password.length > 0)
    511 +        // BEGIN android-changed
    512 +        if (password != null && password.length > 0)
    513          {
    514                                         // +1 for extra 2 pad bytes.
    515              byte[]  bytes = new byte[(password.length + 1) * 2];
    516 @@ -153,5 +154,6 @@
    517          {
    518              return new byte[0];
    519          }
    520 +        // END android-changed
    521      }
    522  }
    523 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java bcprov-jdk16-146/org/bouncycastle/crypto/digests/OpenSSLDigest.java
    524 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/digests/OpenSSLDigest.java	1970-01-01 00:00:00.000000000 +0000
    525 +++ bcprov-jdk16-146/org/bouncycastle/crypto/digests/OpenSSLDigest.java	2011-09-08 21:28:49.000000000 +0000
    526 @@ -0,0 +1,159 @@
    527 +/*
    528 + * Copyright (C) 2008 The Android Open Source Project
    529 + *
    530 + * Licensed under the Apache License, Version 2.0 (the "License");
    531 + * you may not use this file except in compliance with the License.
    532 + * You may obtain a copy of the License at
    533 + *
    534 + *      http://www.apache.org/licenses/LICENSE-2.0
    535 + *
    536 + * Unless required by applicable law or agreed to in writing, software
    537 + * distributed under the License is distributed on an "AS IS" BASIS,
    538 + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    539 + * See the License for the specific language governing permissions and
    540 + * limitations under the License.
    541 + */
    542 +
    543 +package org.bouncycastle.crypto.digests;
    544 +
    545 +import org.apache.harmony.xnet.provider.jsse.NativeCrypto;
    546 +import org.bouncycastle.crypto.ExtendedDigest;
    547 +
    548 +/**
    549 + * Implements the BouncyCastle Digest interface using OpenSSL's EVP API.
    550 + */
    551 +public class OpenSSLDigest implements ExtendedDigest {
    552 +
    553 +    /**
    554 +     * Holds the standard name of the hashing algorithm, e.g. "SHA-1";
    555 +     */
    556 +    private final String algorithm;
    557 +
    558 +    /**
    559 +     * Holds the EVP_MD for the hashing algorithm, e.g. EVP_get_digestbyname("sha1");
    560 +     */
    561 +    private final int evp_md;
    562 +
    563 +    /**
    564 +     * Holds the output size of the message digest.
    565 +     */
    566 +    private final int size;
    567 +
    568 +    /**
    569 +     * Holds the block size of the message digest.
    570 +     */
    571 +    private final int blockSize;
    572 +
    573 +    /**
    574 +     * Holds a pointer to the native message digest context. It is
    575 +     * lazily initialized to avoid having to reallocate on reset when
    576 +     * its unlikely to be reused.
    577 +     */
    578 +    private int ctx;
    579 +
    580 +    /**
    581 +     * Holds a dummy buffer for writing single bytes to the digest.
    582 +     */
    583 +    private final byte[] singleByte = new byte[1];
    584 +
    585 +    /**
    586 +     * Creates a new OpenSSLMessageDigest instance for the given algorithm
    587 +     * name.
    588 +     */
    589 +    private OpenSSLDigest(String algorithm, int evp_md, int size, int blockSize) {
    590 +        this.algorithm = algorithm;
    591 +        this.evp_md = evp_md;
    592 +        this.size = size;
    593 +        this.blockSize = blockSize;
    594 +    }
    595 +
    596 +    public String getAlgorithmName() {
    597 +        return algorithm;
    598 +    }
    599 +
    600 +    public int getDigestSize() {
    601 +        return size;
    602 +    }
    603 +
    604 +    public int getByteLength() {
    605 +        return blockSize;
    606 +    }
    607 +
    608 +    public void reset() {
    609 +        free();
    610 +    }
    611 +
    612 +    public void update(byte in) {
    613 +        singleByte[0] = in;
    614 +        update(singleByte, 0, 1);
    615 +    }
    616 +
    617 +    public void update(byte[] in, int inOff, int len) {
    618 +        NativeCrypto.EVP_DigestUpdate(getCtx(), in, inOff, len);
    619 +    }
    620 +
    621 +    public int doFinal(byte[] out, int outOff) {
    622 +        int i = NativeCrypto.EVP_DigestFinal(getCtx(), out, outOff);
    623 +        ctx = 0; // EVP_DigestFinal frees the context as a side effect
    624 +        reset();
    625 +        return i;
    626 +    }
    627 +
    628 +    private int getCtx() {
    629 +        if (ctx == 0) {
    630 +            ctx = NativeCrypto.EVP_DigestInit(evp_md);
    631 +        }
    632 +        return ctx;
    633 +    }
    634 +
    635 +    private void free() {
    636 +        if (ctx != 0) {
    637 +            NativeCrypto.EVP_MD_CTX_destroy(ctx);
    638 +            ctx = 0;
    639 +        }
    640 +    }
    641 +
    642 +    @Override
    643 +    protected void finalize() throws Throwable {
    644 +        try {
    645 +            free();
    646 +        } finally {
    647 +            super.finalize();
    648 +        }
    649 +    }
    650 +
    651 +    public static class MD5 extends OpenSSLDigest {
    652 +        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("md5");
    653 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
    654 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
    655 +        public MD5() { super("MD5", EVP_MD, SIZE, BLOCK_SIZE); }
    656 +    }
    657 +
    658 +    public static class SHA1 extends OpenSSLDigest {
    659 +        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha1");
    660 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
    661 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
    662 +        public SHA1() { super("SHA-1", EVP_MD, SIZE, BLOCK_SIZE); }
    663 +    }
    664 +
    665 +    public static class SHA256 extends OpenSSLDigest {
    666 +        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha256");
    667 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
    668 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
    669 +        public SHA256() { super("SHA-256", EVP_MD, SIZE, BLOCK_SIZE); }
    670 +    }
    671 +
    672 +    public static class SHA384 extends OpenSSLDigest {
    673 +        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha384");
    674 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
    675 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
    676 +        public SHA384() { super("SHA-384", EVP_MD, SIZE, BLOCK_SIZE); }
    677 +    }
    678 +
    679 +    public static class SHA512 extends OpenSSLDigest {
    680 +        private static final int EVP_MD = NativeCrypto.EVP_get_digestbyname("sha512");
    681 +        private static final int SIZE = NativeCrypto.EVP_MD_size(EVP_MD);
    682 +        private static final int BLOCK_SIZE = NativeCrypto.EVP_MD_block_size(EVP_MD);
    683 +        public SHA512() { super("SHA-512", EVP_MD, SIZE, BLOCK_SIZE); }
    684 +    }
    685 +}
    686 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/engines/RC2Engine.java bcprov-jdk16-146/org/bouncycastle/crypto/engines/RC2Engine.java
    687 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/engines/RC2Engine.java	2011-02-23 20:08:56.000000000 +0000
    688 +++ bcprov-jdk16-146/org/bouncycastle/crypto/engines/RC2Engine.java	2011-09-08 21:28:49.000000000 +0000
    689 @@ -313,4 +313,4 @@
    690          out[outOff + 6] = (byte)x76;
    691          out[outOff + 7] = (byte)(x76 >> 8);
    692      }
    693 -}
    694 +}
    695 \ No newline at end of file
    696 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java bcprov-jdk16-146/org/bouncycastle/crypto/generators/DHParametersHelper.java
    697 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/generators/DHParametersHelper.java	2011-02-23 20:08:56.000000000 +0000
    698 +++ bcprov-jdk16-146/org/bouncycastle/crypto/generators/DHParametersHelper.java	2011-09-08 21:28:49.000000000 +0000
    699 @@ -3,10 +3,17 @@
    700  import java.math.BigInteger;
    701  import java.security.SecureRandom;
    702  
    703 +// BEGIN android-added
    704 +import java.util.logging.Logger;
    705 +// END android-added
    706  import org.bouncycastle.util.BigIntegers;
    707  
    708  class DHParametersHelper
    709  {
    710 +    // BEGIN android-added
    711 +    private static final Logger logger = Logger.getLogger(DHParametersHelper.class.getName());
    712 +    // END android-added
    713 +
    714      private static final BigInteger ONE = BigInteger.valueOf(1);
    715      private static final BigInteger TWO = BigInteger.valueOf(2);
    716  
    717 @@ -17,11 +24,19 @@
    718       */
    719      static BigInteger[] generateSafePrimes(int size, int certainty, SecureRandom random)
    720      {
    721 +        // BEGIN android-added
    722 +        logger.info("Generating safe primes. This may take a long time.");
    723 +        long start = System.currentTimeMillis();
    724 +        int tries = 0;
    725 +        // END android-added
    726          BigInteger p, q;
    727          int qLength = size - 1;
    728  
    729          for (;;)
    730          {
    731 +            // BEGIN android-added
    732 +            tries++;
    733 +            // END android-added
    734              q = new BigInteger(qLength, 2, random);
    735  
    736              // p <- 2q + 1
    737 @@ -32,6 +47,11 @@
    738                  break;
    739              }
    740          }
    741 +        // BEGIN android-added
    742 +        long end = System.currentTimeMillis();
    743 +        long duration = end - start;
    744 +        logger.info("Generated safe primes: " + tries + " tries took " + duration + "ms");
    745 +        // END android-added
    746  
    747          return new BigInteger[] { p, q };
    748      }
    749 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/macs/HMac.java bcprov-jdk16-146/org/bouncycastle/crypto/macs/HMac.java
    750 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/macs/HMac.java	2011-02-23 20:08:56.000000000 +0000
    751 +++ bcprov-jdk16-146/org/bouncycastle/crypto/macs/HMac.java	2011-09-08 21:28:49.000000000 +0000
    752 @@ -32,23 +32,23 @@
    753      {
    754          blockLengths = new Hashtable();
    755          
    756 -        blockLengths.put("GOST3411", new Integer(32));
    757 +        blockLengths.put("GOST3411", Integer.valueOf(32));
    758          
    759 -        blockLengths.put("MD2", new Integer(16));
    760 -        blockLengths.put("MD4", new Integer(64));
    761 -        blockLengths.put("MD5", new Integer(64));
    762 -        
    763 -        blockLengths.put("RIPEMD128", new Integer(64));
    764 -        blockLengths.put("RIPEMD160", new Integer(64));
    765 -        
    766 -        blockLengths.put("SHA-1", new Integer(64));
    767 -        blockLengths.put("SHA-224", new Integer(64));
    768 -        blockLengths.put("SHA-256", new Integer(64));
    769 -        blockLengths.put("SHA-384", new Integer(128));
    770 -        blockLengths.put("SHA-512", new Integer(128));
    771 +        blockLengths.put("MD2", Integer.valueOf(16));
    772 +        blockLengths.put("MD4", Integer.valueOf(64));
    773 +        blockLengths.put("MD5", Integer.valueOf(64));
    774 +        
    775 +        blockLengths.put("RIPEMD128", Integer.valueOf(64));
    776 +        blockLengths.put("RIPEMD160", Integer.valueOf(64));
    777 +        
    778 +        blockLengths.put("SHA-1", Integer.valueOf(64));
    779 +        blockLengths.put("SHA-224", Integer.valueOf(64));
    780 +        blockLengths.put("SHA-256", Integer.valueOf(64));
    781 +        blockLengths.put("SHA-384", Integer.valueOf(128));
    782 +        blockLengths.put("SHA-512", Integer.valueOf(128));
    783          
    784 -        blockLengths.put("Tiger", new Integer(64));
    785 -        blockLengths.put("Whirlpool", new Integer(64));
    786 +        blockLengths.put("Tiger", Integer.valueOf(64));
    787 +        blockLengths.put("Whirlpool", Integer.valueOf(64));
    788      }
    789      
    790      private static int getByteLength(
    791 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java bcprov-jdk16-146/org/bouncycastle/crypto/signers/RSADigestSigner.java
    792 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/signers/RSADigestSigner.java	2011-02-23 20:08:56.000000000 +0000
    793 +++ bcprov-jdk16-146/org/bouncycastle/crypto/signers/RSADigestSigner.java	2011-09-08 21:28:49.000000000 +0000
    794 @@ -46,8 +46,10 @@
    795          oidMap.put("SHA-384", NISTObjectIdentifiers.id_sha384);
    796          oidMap.put("SHA-512", NISTObjectIdentifiers.id_sha512);
    797  
    798 -        oidMap.put("MD2", PKCSObjectIdentifiers.md2);
    799 -        oidMap.put("MD4", PKCSObjectIdentifiers.md4);
    800 +        // BEGIN android-removed
    801 +        // oidMap.put("MD2", PKCSObjectIdentifiers.md2);
    802 +        // oidMap.put("MD4", PKCSObjectIdentifiers.md4);
    803 +        // END android-removed
    804          oidMap.put("MD5", PKCSObjectIdentifiers.md5);
    805      }
    806  
    807 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java bcprov-jdk16-146/org/bouncycastle/crypto/util/PrivateKeyFactory.java
    808 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PrivateKeyFactory.java	2011-02-23 20:08:56.000000000 +0000
    809 +++ bcprov-jdk16-146/org/bouncycastle/crypto/util/PrivateKeyFactory.java	2011-09-08 21:28:49.000000000 +0000
    810 @@ -12,7 +12,9 @@
    811  import org.bouncycastle.asn1.DERObject;
    812  import org.bouncycastle.asn1.DERObjectIdentifier;
    813  import org.bouncycastle.asn1.nist.NISTNamedCurves;
    814 -import org.bouncycastle.asn1.oiw.ElGamalParameter;
    815 +// BEGIN android-removed
    816 +// import org.bouncycastle.asn1.oiw.ElGamalParameter;
    817 +// END android-removed
    818  import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
    819  import org.bouncycastle.asn1.pkcs.DHParameter;
    820  import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
    821 @@ -20,7 +22,9 @@
    822  import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;
    823  import org.bouncycastle.asn1.sec.ECPrivateKeyStructure;
    824  import org.bouncycastle.asn1.sec.SECNamedCurves;
    825 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
    826 +// BEGIN android-removed
    827 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
    828 +// END android-removed
    829  import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
    830  import org.bouncycastle.asn1.x509.DSAParameter;
    831  import org.bouncycastle.asn1.x9.X962NamedCurves;
    832 @@ -34,8 +38,10 @@
    833  import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
    834  import org.bouncycastle.crypto.params.ECDomainParameters;
    835  import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
    836 -import org.bouncycastle.crypto.params.ElGamalParameters;
    837 -import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;
    838 +// BEGIN android-removed
    839 +// import org.bouncycastle.crypto.params.ElGamalParameters;
    840 +// import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;
    841 +// END android-removed
    842  import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
    843  
    844  /**
    845 @@ -103,15 +109,17 @@
    846  
    847              return new DHPrivateKeyParameters(derX.getValue(), dhParams);
    848          }
    849 -        else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
    850 -        {
    851 -            ElGamalParameter params = new ElGamalParameter(
    852 -                (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
    853 -            DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
    854 -
    855 -            return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters(
    856 -                params.getP(), params.getG()));
    857 -        }
    858 +        // BEGIN android-removed
    859 +        // else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
    860 +        // {
    861 +        //     ElGamalParameter params = new ElGamalParameter(
    862 +        //         (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
    863 +        //     DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
    864 +        //
    865 +        //     return new ElGamalPrivateKeyParameters(derX.getValue(), new ElGamalParameters(
    866 +        //         params.getP(), params.getG()));
    867 +        // }
    868 +        // END android-removed
    869          else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa))
    870          {
    871              DERInteger derX = (DERInteger)keyInfo.getPrivateKey();
    872 @@ -145,10 +153,12 @@
    873                      {
    874                          ecP = NISTNamedCurves.getByOID(oid);
    875  
    876 -                        if (ecP == null)
    877 -                        {
    878 -                            ecP = TeleTrusTNamedCurves.getByOID(oid);
    879 -                        }
    880 +                        // BEGIN android-removed
    881 +                        // if (ecP == null)
    882 +                        // {
    883 +                        //     ecP = TeleTrusTNamedCurves.getByOID(oid);
    884 +                        // }
    885 +                        // END android-removed
    886                      }
    887                  }
    888  
    889 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java bcprov-jdk16-146/org/bouncycastle/crypto/util/PublicKeyFactory.java
    890 --- bcprov-jdk16-146.orig/org/bouncycastle/crypto/util/PublicKeyFactory.java	2011-02-23 20:08:56.000000000 +0000
    891 +++ bcprov-jdk16-146/org/bouncycastle/crypto/util/PublicKeyFactory.java	2011-09-08 21:28:49.000000000 +0000
    892 @@ -15,12 +15,16 @@
    893  import org.bouncycastle.asn1.DERObjectIdentifier;
    894  import org.bouncycastle.asn1.DEROctetString;
    895  import org.bouncycastle.asn1.nist.NISTNamedCurves;
    896 -import org.bouncycastle.asn1.oiw.ElGamalParameter;
    897 +// BEGIN android-removed
    898 +// import org.bouncycastle.asn1.oiw.ElGamalParameter;
    899 +// END android-removed
    900  import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
    901  import org.bouncycastle.asn1.pkcs.DHParameter;
    902  import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
    903  import org.bouncycastle.asn1.sec.SECNamedCurves;
    904 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
    905 +// BEGIN android-removed
    906 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
    907 +// END android-removed
    908  import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
    909  import org.bouncycastle.asn1.x509.DSAParameter;
    910  import org.bouncycastle.asn1.x509.RSAPublicKeyStructure;
    911 @@ -42,8 +46,10 @@
    912  import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
    913  import org.bouncycastle.crypto.params.ECDomainParameters;
    914  import org.bouncycastle.crypto.params.ECPublicKeyParameters;
    915 -import org.bouncycastle.crypto.params.ElGamalParameters;
    916 -import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
    917 +// BEGIN android-removed
    918 +// import org.bouncycastle.crypto.params.ElGamalParameters;
    919 +// import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
    920 +// END android-removed
    921  import org.bouncycastle.crypto.params.RSAKeyParameters;
    922  
    923  /**
    924 @@ -139,15 +145,17 @@
    925  
    926              return new DHPublicKeyParameters(derY.getValue(), dhParams);
    927          }
    928 -        else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
    929 -        {
    930 -            ElGamalParameter params = new ElGamalParameter(
    931 -                (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
    932 -            DERInteger derY = (DERInteger)keyInfo.getPublicKey();
    933 -
    934 -            return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(
    935 -                params.getP(), params.getG()));
    936 -        }
    937 +        // BEGIN android-removed
    938 +        // else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm))
    939 +        // {
    940 +        //     ElGamalParameter params = new ElGamalParameter(
    941 +        //         (ASN1Sequence)keyInfo.getAlgorithmId().getParameters());
    942 +        //     DERInteger derY = (DERInteger)keyInfo.getPublicKey();
    943 +        //
    944 +        //     return new ElGamalPublicKeyParameters(derY.getValue(), new ElGamalParameters(
    945 +        //         params.getP(), params.getG()));
    946 +        // }
    947 +        // END android-removed
    948          else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa)
    949              || algId.getObjectId().equals(OIWObjectIdentifiers.dsaWithSHA1))
    950          {
    951 @@ -182,10 +190,12 @@
    952                      {
    953                          ecP = NISTNamedCurves.getByOID(oid);
    954  
    955 -                        if (ecP == null)
    956 -                        {
    957 -                            ecP = TeleTrusTNamedCurves.getByOID(oid);
    958 -                        }
    959 +                        // BEGIN android-removed
    960 +                        // if (ecP == null)
    961 +                        // {
    962 +                        //     ecP = TeleTrusTNamedCurves.getByOID(oid);
    963 +                        // }
    964 +                        // END android-removed
    965                      }
    966                  }
    967  
    968 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java bcprov-jdk16-146/org/bouncycastle/jce/ECNamedCurveTable.java
    969 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/ECNamedCurveTable.java	2011-02-23 20:08:56.000000000 +0000
    970 +++ bcprov-jdk16-146/org/bouncycastle/jce/ECNamedCurveTable.java	2011-09-08 21:28:49.000000000 +0000
    971 @@ -3,7 +3,9 @@
    972  import org.bouncycastle.asn1.DERObjectIdentifier;
    973  import org.bouncycastle.asn1.nist.NISTNamedCurves;
    974  import org.bouncycastle.asn1.sec.SECNamedCurves;
    975 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
    976 +// BEGIN android-removed
    977 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
    978 +// END android-removed
    979  import org.bouncycastle.asn1.x9.X962NamedCurves;
    980  import org.bouncycastle.asn1.x9.X9ECParameters;
    981  import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
    982 @@ -55,21 +57,23 @@
    983              }
    984          }
    985  
    986 -        if (ecP == null)
    987 -        {
    988 -            ecP = TeleTrusTNamedCurves.getByName(name);
    989 -            if (ecP == null)
    990 -            {
    991 -                try
    992 -                {
    993 -                    ecP = TeleTrusTNamedCurves.getByOID(new DERObjectIdentifier(name));
    994 -                }
    995 -                catch (IllegalArgumentException e)
    996 -                {
    997 -                    // ignore - not an oid
    998 -                }
    999 -            }
   1000 -        }
   1001 +        // BEGIN android-removed
   1002 +        // if (ecP == null)
   1003 +        // {
   1004 +        //     ecP = TeleTrusTNamedCurves.getByName(name);
   1005 +        //     if (ecP == null)
   1006 +        //     {
   1007 +        //         try
   1008 +        //         {
   1009 +        //             ecP = TeleTrusTNamedCurves.getByOID(new DERObjectIdentifier(name));
   1010 +        //         }
   1011 +        //         catch (IllegalArgumentException e)
   1012 +        //         {
   1013 +        //             // ignore - not an oid
   1014 +        //         }
   1015 +        //     }
   1016 +        // }
   1017 +        // END android-removed
   1018  
   1019          if (ecP == null)
   1020          {
   1021 @@ -102,7 +106,9 @@
   1022          addEnumeration(v, X962NamedCurves.getNames());
   1023          addEnumeration(v, SECNamedCurves.getNames());
   1024          addEnumeration(v, NISTNamedCurves.getNames());
   1025 -        addEnumeration(v, TeleTrusTNamedCurves.getNames());
   1026 +        // BEGIN android-removed
   1027 +        // addEnumeration(v, TeleTrusTNamedCurves.getNames());
   1028 +        // END android-removed
   1029  
   1030          return v.elements();
   1031      }
   1032 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java bcprov-jdk16-146/org/bouncycastle/jce/PKCS10CertificationRequest.java
   1033 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/PKCS10CertificationRequest.java	2011-02-23 20:08:56.000000000 +0000
   1034 +++ bcprov-jdk16-146/org/bouncycastle/jce/PKCS10CertificationRequest.java	2011-09-08 21:28:49.000000000 +0000
   1035 @@ -80,15 +80,20 @@
   1036  
   1037      static
   1038      {
   1039 -        algorithms.put("MD2WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.2"));
   1040 -        algorithms.put("MD2WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.2"));
   1041 +        // BEGIN android-removed
   1042 +        // Dropping MD2
   1043 +        // algorithms.put("MD2WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.2"));
   1044 +        // algorithms.put("MD2WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.2"));
   1045 +        // END android-removed
   1046          algorithms.put("MD5WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.4"));
   1047          algorithms.put("MD5WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.4"));
   1048          algorithms.put("RSAWITHMD5", new DERObjectIdentifier("1.2.840.113549.1.1.4"));
   1049          algorithms.put("SHA1WITHRSAENCRYPTION", new DERObjectIdentifier("1.2.840.113549.1.1.5"));
   1050          algorithms.put("SHA1WITHRSA", new DERObjectIdentifier("1.2.840.113549.1.1.5"));
   1051 -        algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   1052 -        algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   1053 +        // BEGIN android-removed
   1054 +        // algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   1055 +        // algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   1056 +        // END android-removed
   1057          algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
   1058          algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
   1059          algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
   1060 @@ -96,57 +101,78 @@
   1061          algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
   1062          algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
   1063          algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   1064 -        algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   1065 +        // BEGIN android-removed
   1066 +        // algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   1067 +        // END android-removed
   1068          algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   1069          algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   1070          algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   1071          algorithms.put("RSAWITHSHA1", new DERObjectIdentifier("1.2.840.113549.1.1.5"));
   1072 -        algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   1073 -        algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   1074 -        algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   1075 -        algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   1076 -        algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   1077 -        algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   1078 +        // BEGIN android-removed
   1079 +        // algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   1080 +        // algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   1081 +        // algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   1082 +        // algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   1083 +        // algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   1084 +        // algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   1085 +        // END android-removed
   1086          algorithms.put("SHA1WITHDSA", new DERObjectIdentifier("1.2.840.10040.4.3"));
   1087          algorithms.put("DSAWITHSHA1", new DERObjectIdentifier("1.2.840.10040.4.3"));
   1088 -        algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
   1089 +        // BEGIN android-removed
   1090 +        // algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
   1091 +        // END android-removed
   1092          algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256);
   1093          algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384);
   1094          algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512);
   1095          algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1);
   1096 -        algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
   1097 +        // BEGIN android-removed
   1098 +        // algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
   1099 +        // END android-removed
   1100          algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256);
   1101          algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384);
   1102          algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512);
   1103          algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1);
   1104 -        algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   1105 -        algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   1106 -        algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1107 -        algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1108 -        algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1109 +        // BEGIN android-removed
   1110 +        // algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   1111 +        // algorithms.put("GOST3410WITHGOST3411", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   1112 +        // algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1113 +        // algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1114 +        // algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1115 +        // END android-removed
   1116  
   1117          //
   1118          // reverse mappings
   1119          //
   1120          oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.5"), "SHA1WITHRSA");
   1121 -        oids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WITHRSA");
   1122 +        // BEGIN android-removed
   1123 +        // oids.put(PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WITHRSA");
   1124 +        // END android-removed
   1125          oids.put(PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WITHRSA");
   1126          oids.put(PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WITHRSA");
   1127          oids.put(PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WITHRSA");
   1128 -        oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410");
   1129 -        oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410");
   1130 +        // BEGIN android-removed
   1131 +        // oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3411WITHGOST3410");
   1132 +        // oids.put(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "GOST3411WITHECGOST3410");
   1133 +        // END android-removed
   1134          
   1135          oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.4"), "MD5WITHRSA");
   1136 -        oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA");
   1137 +        // BEGIN android-removed
   1138 +        // Dropping MD2
   1139 +        // oids.put(new DERObjectIdentifier("1.2.840.113549.1.1.2"), "MD2WITHRSA");
   1140 +        // END android-removed
   1141          oids.put(new DERObjectIdentifier("1.2.840.10040.4.3"), "SHA1WITHDSA");
   1142          oids.put(X9ObjectIdentifiers.ecdsa_with_SHA1, "SHA1WITHECDSA");
   1143 -        oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA");
   1144 +        // BEGIN android-removed
   1145 +        // oids.put(X9ObjectIdentifiers.ecdsa_with_SHA224, "SHA224WITHECDSA");
   1146 +        // END android-removed
   1147          oids.put(X9ObjectIdentifiers.ecdsa_with_SHA256, "SHA256WITHECDSA");
   1148          oids.put(X9ObjectIdentifiers.ecdsa_with_SHA384, "SHA384WITHECDSA");
   1149          oids.put(X9ObjectIdentifiers.ecdsa_with_SHA512, "SHA512WITHECDSA");
   1150          oids.put(OIWObjectIdentifiers.sha1WithRSA, "SHA1WITHRSA");
   1151          oids.put(OIWObjectIdentifiers.dsaWithSHA1, "SHA1WITHDSA");
   1152 -        oids.put(NISTObjectIdentifiers.dsa_with_sha224, "SHA224WITHDSA");
   1153 +        // BEGIN android-removed
   1154 +        // oids.put(NISTObjectIdentifiers.dsa_with_sha224, "SHA224WITHDSA");
   1155 +        // END android-removed
   1156          oids.put(NISTObjectIdentifiers.dsa_with_sha256, "SHA256WITHDSA");
   1157          
   1158          //
   1159 @@ -160,35 +186,53 @@
   1160          // The parameters field SHALL be NULL for RSA based signature algorithms.
   1161          //
   1162          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1);
   1163 -        noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
   1164 +        // BEGIN android-removed
   1165 +        // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
   1166 +        // END android-removed
   1167          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256);
   1168          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384);
   1169          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512);
   1170          noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1);
   1171 -        noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
   1172 +        // BEGIN android-removed
   1173 +        // noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
   1174 +        // END android-removed
   1175          noParams.add(NISTObjectIdentifiers.dsa_with_sha256);
   1176  
   1177          //
   1178          // RFC 4491
   1179          //
   1180 -        noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   1181 -        noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1182 +        // BEGIN android-removed
   1183 +        // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   1184 +        // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   1185 +        // END android-removed
   1186          //
   1187          // explicit params
   1188          //
   1189 -        AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
   1190 +        // BEGIN android-changed
   1191 +        AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
   1192 +        // END android-changed
   1193          params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20));
   1194  
   1195 -        AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull());
   1196 -        params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
   1197 -
   1198 -        AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull());
   1199 +        // BEGIN android-removed
   1200 +        // // BEGIN android-changed
   1201 +        // AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, DERNull.INSTANCE);
   1202 +        // // END android-changed
   1203 +        // params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
   1204 +        // END android-removed
   1205 +
   1206 +        // BEGIN android-changed
   1207 +        AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, DERNull.INSTANCE);
   1208 +        // END android-changed
   1209          params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32));
   1210  
   1211 -        AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull());
   1212 +        // BEGIN android-changed
   1213 +        AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, DERNull.INSTANCE);
   1214 +        // END android-changed
   1215          params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48));
   1216  
   1217 -        AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull());
   1218 +        // BEGIN android-changed
   1219 +        AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, DERNull.INSTANCE);
   1220 +        // END android-changed
   1221          params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
   1222      }
   1223  
   1224 @@ -594,10 +638,12 @@
   1225          {
   1226              return "SHA1";
   1227          }
   1228 -        else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
   1229 -        {
   1230 -            return "SHA224";
   1231 -        }
   1232 +        // BEGIN android-removed
   1233 +        // else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
   1234 +        // {
   1235 +        //     return "SHA224";
   1236 +        // }
   1237 +        // END android-removed
   1238          else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
   1239          {
   1240              return "SHA256";
   1241 @@ -610,22 +656,24 @@
   1242          {
   1243              return "SHA512";
   1244          }
   1245 -        else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
   1246 -        {
   1247 -            return "RIPEMD128";
   1248 -        }
   1249 -        else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
   1250 -        {
   1251 -            return "RIPEMD160";
   1252 -        }
   1253 -        else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
   1254 -        {
   1255 -            return "RIPEMD256";
   1256 -        }
   1257 -        else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
   1258 -        {
   1259 -            return "GOST3411";
   1260 -        }
   1261 +        // BEGIN android-removed
   1262 +        // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
   1263 +        // {
   1264 +        //     return "RIPEMD128";
   1265 +        // }
   1266 +        // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
   1267 +        // {
   1268 +        //     return "RIPEMD160";
   1269 +        // }
   1270 +        // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
   1271 +        // {
   1272 +        //     return "RIPEMD256";
   1273 +        // }
   1274 +        // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
   1275 +        // {
   1276 +        //     return "GOST3411";
   1277 +        // }
   1278 +        // END android-removed
   1279          else
   1280          {
   1281              return digestAlgOID.getId();            
   1282 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java bcprov-jdk16-146/org/bouncycastle/jce/provider/BouncyCastleProvider.java
   1283 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/BouncyCastleProvider.java	2011-02-23 20:08:56.000000000 +0000
   1284 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/BouncyCastleProvider.java	2011-09-08 21:28:49.000000000 +0000
   1285 @@ -45,7 +45,10 @@
   1286  {
   1287      private static String info = "BouncyCastle Security Provider v1.46";
   1288  
   1289 -    public static String PROVIDER_NAME = "BC";
   1290 +    // BEGIN android-changed
   1291 +    //     this constant should be final
   1292 +    public static final String PROVIDER_NAME = "BC";
   1293 +    // END android-changed
   1294  
   1295      /*
   1296       * Configurable symmetric ciphers
   1297 @@ -53,8 +56,14 @@
   1298      private static final String SYMMETRIC_CIPHER_PACKAGE = "org.bouncycastle.jce.provider.symmetric.";
   1299      private static final String[] SYMMETRIC_CIPHERS =
   1300      {
   1301 -        "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DESede", "Grainv1", "Grain128", "HC128", "HC256", "IDEA",
   1302 -        "Noekeon", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA"
   1303 +        // BEGIN android-removed
   1304 +        // "AES", "ARC4", "Blowfish", "Camellia", "CAST5", "CAST6", "DESede", "Grainv1", "Grain128", "HC128", "HC256", "IDEA",
   1305 +        // "Noekeon", "RC5", "RC6", "Rijndael", "Salsa20", "SEED", "Serpent", "Skipjack", "TEA", "Twofish", "VMPC", "VMPCKSA3", "XTEA"
   1306 +        // END android-removed
   1307 +        // BEGIN android-added
   1308 +        "AES", "ARC4", "Blowfish", "DESede",
   1309 +        // END android-added
   1310 +
   1311      };
   1312  
   1313      /*
   1314 @@ -90,26 +99,28 @@
   1315          loadAlgorithms(SYMMETRIC_CIPHER_PACKAGE, SYMMETRIC_CIPHERS);
   1316          loadAlgorithms(ASYMMETRIC_CIPHER_PACKAGE, ASYMMETRIC_CIPHERS);
   1317  
   1318 -        //
   1319 -        // X509Store
   1320 -        //
   1321 -        put("X509Store.CERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertCollection");
   1322 -        put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreAttrCertCollection");
   1323 -        put("X509Store.CRL/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCRLCollection");
   1324 -        put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertPairCollection");
   1325 -
   1326 -        put("X509Store.CERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCerts");
   1327 -        put("X509Store.CRL/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCRLs");
   1328 -        put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPAttrCerts");
   1329 -        put("X509Store.CERTIFICATEPAIR/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCertPairs");
   1330 -        
   1331 -        //
   1332 -        // X509StreamParser
   1333 -        //
   1334 -        put("X509StreamParser.CERTIFICATE", "org.bouncycastle.jce.provider.X509CertParser");
   1335 -        put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.bouncycastle.jce.provider.X509AttrCertParser");
   1336 -        put("X509StreamParser.CRL", "org.bouncycastle.jce.provider.X509CRLParser");
   1337 -        put("X509StreamParser.CERTIFICATEPAIR", "org.bouncycastle.jce.provider.X509CertPairParser");
   1338 +        // BEGIN android-removed
   1339 +        // //
   1340 +        // // X509Store
   1341 +        // //
   1342 +        // put("X509Store.CERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertCollection");
   1343 +        // put("X509Store.ATTRIBUTECERTIFICATE/COLLECTION", "org.bouncycastle.jce.provider.X509StoreAttrCertCollection");
   1344 +        // put("X509Store.CRL/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCRLCollection");
   1345 +        // put("X509Store.CERTIFICATEPAIR/COLLECTION", "org.bouncycastle.jce.provider.X509StoreCertPairCollection");
   1346 +        //
   1347 +        // put("X509Store.CERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCerts");
   1348 +        // put("X509Store.CRL/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCRLs");
   1349 +        // put("X509Store.ATTRIBUTECERTIFICATE/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPAttrCerts");
   1350 +        // put("X509Store.CERTIFICATEPAIR/LDAP", "org.bouncycastle.jce.provider.X509StoreLDAPCertPairs");
   1351 +        //
   1352 +        // //
   1353 +        // // X509StreamParser
   1354 +        // //
   1355 +        // put("X509StreamParser.CERTIFICATE", "org.bouncycastle.jce.provider.X509CertParser");
   1356 +        // put("X509StreamParser.ATTRIBUTECERTIFICATE", "org.bouncycastle.jce.provider.X509AttrCertParser");
   1357 +        // put("X509StreamParser.CRL", "org.bouncycastle.jce.provider.X509CRLParser");
   1358 +        // put("X509StreamParser.CERTIFICATEPAIR", "org.bouncycastle.jce.provider.X509CertPairParser");
   1359 +        // END android-removed
   1360  
   1361  
   1362          //
   1363 @@ -118,14 +129,24 @@
   1364          put("KeyStore.BKS", "org.bouncycastle.jce.provider.JDKKeyStore");
   1365          put("KeyStore.BouncyCastle", "org.bouncycastle.jce.provider.JDKKeyStore$BouncyCastleStore");
   1366          put("KeyStore.PKCS12", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore");
   1367 -        put("KeyStore.BCPKCS12", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore");
   1368 -        put("KeyStore.PKCS12-DEF", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore");
   1369 -
   1370 -        put("KeyStore.PKCS12-3DES-40RC2", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore");
   1371 -        put("KeyStore.PKCS12-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore3DES");
   1372 -
   1373 -        put("KeyStore.PKCS12-DEF-3DES-40RC2", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore");
   1374 -        put("KeyStore.PKCS12-DEF-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore3DES");
   1375 +        // BEGIN android-changed
   1376 +        put("Alg.Alias.KeyStore.BCPKCS12", "PKCS12");
   1377 +        // END android-changed
   1378 +        // BEGIN android-removed
   1379 +        // put("KeyStore.PKCS12-DEF", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore");
   1380 +        // END android-removed
   1381 +
   1382 +        // BEGIN android-changed
   1383 +        put("Alg.Alias.KeyStore.PKCS12-3DES-40RC2", "PKCS12");
   1384 +        // END android-changed
   1385 +        // BEGIN android-removed
   1386 +        // put("KeyStore.PKCS12-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$BCPKCS12KeyStore3DES");
   1387 +        // END android-removed
   1388 +
   1389 +        // BEGIN android-removed
   1390 +        // put("KeyStore.PKCS12-DEF-3DES-40RC2", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore");
   1391 +        // put("KeyStore.PKCS12-DEF-3DES-3DES", "org.bouncycastle.jce.provider.JDKPKCS12KeyStore$DefPKCS12KeyStore3DES");
   1392 +        // END android-removed
   1393  
   1394          put("Alg.Alias.KeyStore.UBER", "BouncyCastle");
   1395          put("Alg.Alias.KeyStore.BOUNCYCASTLE", "BouncyCastle");
   1396 @@ -142,44 +163,63 @@
   1397          //
   1398          put("AlgorithmParameterGenerator.DH", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DH");
   1399          put("AlgorithmParameterGenerator.DSA", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DSA");
   1400 -        put("AlgorithmParameterGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$GOST3410");
   1401 -        put("AlgorithmParameterGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$ElGamal");
   1402 -        put("AlgorithmParameterGenerator.DES", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1403 -        put("AlgorithmParameterGenerator.DESEDE", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1404 -        put("AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1405 -        put("AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1406 -        put("AlgorithmParameterGenerator.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
   1407 -        put("AlgorithmParameterGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
   1408 +        // BEGIN android-removed
   1409 +        // put("AlgorithmParameterGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$GOST3410");
   1410 +        // put("AlgorithmParameterGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$ElGamal");
   1411 +        // put("AlgorithmParameterGenerator.DES", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1412 +        // put("AlgorithmParameterGenerator.DESEDE", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1413 +        // put("AlgorithmParameterGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1414 +        // put("AlgorithmParameterGenerator." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$DES");
   1415 +        // put("AlgorithmParameterGenerator.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
   1416 +        // put("AlgorithmParameterGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameterGenerator$RC2");
   1417 +        // END android-removed
   1418  
   1419          put("Alg.Alias.AlgorithmParameterGenerator.DIFFIEHELLMAN", "DH");
   1420 -        put("Alg.Alias.AlgorithmParameterGenerator.GOST-3410", "GOST3410");
   1421 +        // BEGIN android-removed
   1422 +        // put("Alg.Alias.AlgorithmParameterGenerator.GOST-3410", "GOST3410");
   1423 +        // END android-removed
   1424          //
   1425          // algorithm parameters
   1426          //
   1427          put("AlgorithmParameters.OAEP", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$OAEP");
   1428 -        put("AlgorithmParameters.PSS", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PSS");
   1429 +        // BEGIN android-removed
   1430 +        // put("AlgorithmParameters.PSS", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PSS");
   1431 +        // END android-removed
   1432          put("AlgorithmParameters.DH", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$DH");
   1433          put("Alg.Alias.AlgorithmParameters.DIFFIEHELLMAN", "DH");
   1434          put("AlgorithmParameters.DSA", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$DSA");
   1435 -        put("AlgorithmParameters.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$ElGamal");
   1436 -        put("AlgorithmParameters.IES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IES");
   1437 +        // BEGIN android-removed
   1438 +        // put("AlgorithmParameters.ELGAMAL", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$ElGamal");
   1439 +        // put("AlgorithmParameters.IES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IES");
   1440 +        // END android-removed
   1441          put("AlgorithmParameters.PKCS12PBE", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PKCS12PBE");
   1442 -        put("AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
   1443 -        put("AlgorithmParameters." + PKCSObjectIdentifiers.id_PBKDF2, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PBKDF2");
   1444 -
   1445 -        put("AlgorithmParameters.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$GOST3410");
   1446 -        put("Alg.Alias.AlgorithmParameters.GOST-3410", "GOST3410");
   1447 +        // BEGIN android-changed
   1448 +        // redundant with below
   1449 +        // put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESede");
   1450 +        // END android-changed
   1451 +        // BEGIN android-removed
   1452 +        // put("AlgorithmParameters." + PKCSObjectIdentifiers.id_PBKDF2, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$PBKDF2");
   1453 +        //
   1454 +        // put("AlgorithmParameters.GOST3410", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$GOST3410");
   1455 +        // put("Alg.Alias.AlgorithmParameters.GOST-3410", "GOST3410");
   1456 +        // END android-removed
   1457          put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2", "PKCS12PBE");
   1458 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES", "PKCS12PBE");
   1459 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES", "PKCS12PBE");
   1460 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC2", "PKCS12PBE");
   1461 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC4", "PKCS12PBE");
   1462 +        // BEGIN android-removed
   1463 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES", "PKCS12PBE");
   1464 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES", "PKCS12PBE");
   1465 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC2", "PKCS12PBE");
   1466 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC4", "PKCS12PBE");
   1467 +        // END android-removed
   1468          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDTWOFISH", "PKCS12PBE");
   1469 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2-CBC", "PKCS12PBE");
   1470 +        // BEGIN android-removed
   1471 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2-CBC", "PKCS12PBE");
   1472 +        // END android-removed
   1473          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PKCS12PBE");
   1474          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PKCS12PBE");
   1475 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES3KEY-CBC", "PKCS12PBE");
   1476 -        put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES2KEY-CBC", "PKCS12PBE");
   1477 +        // BEGIN android-removed
   1478 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES3KEY-CBC", "PKCS12PBE");
   1479 +        // put("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDDES2KEY-CBC", "PKCS12PBE");
   1480 +        // END android-removed
   1481          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC2-CBC", "PKCS12PBE");
   1482          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC4", "PKCS12PBE");
   1483          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC2-CBC", "PKCS12PBE");
   1484 @@ -193,7 +233,7 @@
   1485          put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.5", "PKCS12PBE");
   1486          put("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.6", "PKCS12PBE");
   1487          put("Alg.Alias.AlgorithmParameters.PBEWithSHAAnd3KeyTripleDES", "PKCS12PBE");
   1488 -
   1489 +        
   1490          put("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PKCS12PBE");
   1491          put("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PKCS12PBE");
   1492          put("Alg.Alias.AlgorithmParameters." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes256_cbc.getId(), "PKCS12PBE");
   1493 @@ -203,22 +243,24 @@
   1494  
   1495          put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.id_RSAES_OAEP, "OAEP");
   1496          
   1497 -        put("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS");
   1498 -        put("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS");
   1499 -        put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS");
   1500 -        put("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS");
   1501 -        put("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS");
   1502 -        put("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS");
   1503 -        put("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS");
   1504 -        put("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS");
   1505 -        put("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS");
   1506 -        put("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS");
   1507 -        put("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS");
   1508 -        put("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS");
   1509 -        put("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS");
   1510 -        put("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS");
   1511 -        put("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS");
   1512 -        put("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS");
   1513 +        // BEGIN android-removed
   1514 +        // put("Alg.Alias.AlgorithmParameters.RSAPSS", "PSS");
   1515 +        // put("Alg.Alias.AlgorithmParameters.RSASSA-PSS", "PSS");
   1516 +        // put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.id_RSASSA_PSS, "PSS");
   1517 +        // put("Alg.Alias.AlgorithmParameters.SHA1withRSA/PSS", "PSS");
   1518 +        // put("Alg.Alias.AlgorithmParameters.SHA224withRSA/PSS", "PSS");
   1519 +        // put("Alg.Alias.AlgorithmParameters.SHA256withRSA/PSS", "PSS");
   1520 +        // put("Alg.Alias.AlgorithmParameters.SHA384withRSA/PSS", "PSS");
   1521 +        // put("Alg.Alias.AlgorithmParameters.SHA512withRSA/PSS", "PSS");
   1522 +        // put("Alg.Alias.AlgorithmParameters.SHA1WITHRSAANDMGF1", "PSS");
   1523 +        // put("Alg.Alias.AlgorithmParameters.SHA224WITHRSAANDMGF1", "PSS");
   1524 +        // put("Alg.Alias.AlgorithmParameters.SHA256WITHRSAANDMGF1", "PSS");
   1525 +        // put("Alg.Alias.AlgorithmParameters.SHA384WITHRSAANDMGF1", "PSS");
   1526 +        // put("Alg.Alias.AlgorithmParameters.SHA512WITHRSAANDMGF1", "PSS");
   1527 +        // put("Alg.Alias.AlgorithmParameters.RAWRSAPSS", "PSS");
   1528 +        // put("Alg.Alias.AlgorithmParameters.NONEWITHRSAPSS", "PSS");
   1529 +        // put("Alg.Alias.AlgorithmParameters.NONEWITHRSASSA-PSS", "PSS");
   1530 +        // END android-removed
   1531          
   1532          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITAES-CBC-BC", "PKCS12PBE");
   1533          put("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND192BITAES-CBC-BC", "PKCS12PBE");
   1534 @@ -235,12 +277,14 @@
   1535          put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND128BITAES-CBC-BC","PKCS12PBE");
   1536          put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND192BITAES-CBC-BC","PKCS12PBE");
   1537          put("Alg.Alias.AlgorithmParameters.PBEWITHSHA-256AND256BITAES-CBC-BC","PKCS12PBE");
   1538 -
   1539 -        put("AlgorithmParameters.SHA1WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1540 -        put("AlgorithmParameters.SHA224WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1541 -        put("AlgorithmParameters.SHA256WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1542 -        put("AlgorithmParameters.SHA384WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1543 -        put("AlgorithmParameters.SHA512WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1544 +        
   1545 +        // BEGIN android-removed
   1546 +        // put("AlgorithmParameters.SHA1WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1547 +        // put("AlgorithmParameters.SHA224WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1548 +        // put("AlgorithmParameters.SHA256WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1549 +        // put("AlgorithmParameters.SHA384WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1550 +        // put("AlgorithmParameters.SHA512WITHECDSA", "org.bouncycastle.jce.provider.JDKECDSAAlgParameters$SigAlgParameters");
   1551 +        // END android-removed
   1552          
   1553          //
   1554          // key agreement
   1555 @@ -252,71 +296,91 @@
   1556          // cipher engines
   1557          //
   1558          put("Cipher.DES", "org.bouncycastle.jce.provider.JCEBlockCipher$DES");
   1559 -        put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JCEBlockCipher$DESCBC");
   1560 -
   1561 -        put("Cipher.RC2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2");
   1562 -        put("Cipher.RC2WRAP", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
   1563 -        put("Cipher.1.2.840.113549.1.9.16.3.7", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
   1564 -
   1565 -        put("Cipher.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2CBC");
   1566 +        // BEGIN android-removed
   1567 +        // put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.JCEBlockCipher$DESCBC");
   1568 +        //
   1569 +        // put("Cipher.RC2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2");
   1570 +        // put("Cipher.RC2WRAP", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
   1571 +        // put("Cipher.1.2.840.113549.1.9.16.3.7", "org.bouncycastle.jce.provider.WrapCipherSpi$RC2Wrap");
   1572 +        //
   1573 +        // put("Cipher.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEBlockCipher$RC2CBC");
   1574 +        // END android-removed
   1575          
   1576          put("Alg.Alias.Cipher.PBEWithSHAAnd3KeyTripleDES",  "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
   1577          
   1578 -        put("Cipher.GOST28147", "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147");
   1579 -        put("Alg.Alias.Cipher.GOST", "GOST28147");
   1580 -        put("Alg.Alias.Cipher.GOST-28147", "GOST28147");
   1581 -        put("Cipher." + CryptoProObjectIdentifiers.gostR28147_cbc, "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147cbc");
   1582 +        // BEGIN android-removed
   1583 +        // put("Cipher.GOST28147", "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147");
   1584 +        // put("Alg.Alias.Cipher.GOST", "GOST28147");
   1585 +        // put("Alg.Alias.Cipher.GOST-28147", "GOST28147");
   1586 +        // put("Cipher." + CryptoProObjectIdentifiers.gostR28147_cbc, "org.bouncycastle.jce.provider.JCEBlockCipher$GOST28147cbc");
   1587 +        // END android-removed
   1588  
   1589          put("Cipher.RSA", "org.bouncycastle.jce.provider.JCERSACipher$NoPadding");
   1590 -        put("Cipher.RSA/RAW", "org.bouncycastle.jce.provider.JCERSACipher$NoPadding");
   1591 -        put("Cipher.RSA/PKCS1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
   1592 -        put("Cipher.1.2.840.113549.1.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
   1593 -        put("Cipher.2.5.8.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
   1594 -        put("Cipher.RSA/1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PrivateOnly");
   1595 -        put("Cipher.RSA/2", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PublicOnly");
   1596 -        put("Cipher.RSA/OAEP", "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
   1597 -        put("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
   1598 -        put("Cipher.RSA/ISO9796-1", "org.bouncycastle.jce.provider.JCERSACipher$ISO9796d1Padding");
   1599 -
   1600 -        put("Cipher.ECIES", "org.bouncycastle.jce.provider.JCEIESCipher$ECIES");
   1601 -        put("Cipher.BrokenECIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenECIES");
   1602 -        put("Cipher.IES", "org.bouncycastle.jce.provider.JCEIESCipher$IES");
   1603 -        put("Cipher.BrokenIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenIES");
   1604 -        put("Cipher.ELGAMAL", "org.bouncycastle.jce.provider.JCEElGamalCipher$NoPadding");
   1605 -        put("Cipher.ELGAMAL/PKCS1", "org.bouncycastle.jce.provider.JCEElGamalCipher$PKCS1v1_5Padding");
   1606 +        // BEGIN android-changed
   1607 +        put("Alg.Alias.Cipher.RSA/RAW", "RSA");
   1608 +        // END android-changed
   1609 +        // BEGIN android-removed
   1610 +        // put("Cipher.RSA/PKCS1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
   1611 +        // put("Cipher.1.2.840.113549.1.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
   1612 +        // put("Cipher.2.5.8.1.1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding");
   1613 +        // put("Cipher.RSA/1", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PrivateOnly");
   1614 +        // put("Cipher.RSA/2", "org.bouncycastle.jce.provider.JCERSACipher$PKCS1v1_5Padding_PublicOnly");
   1615 +        // put("Cipher.RSA/OAEP", "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
   1616 +        // put("Cipher." + PKCSObjectIdentifiers.id_RSAES_OAEP, "org.bouncycastle.jce.provider.JCERSACipher$OAEPPadding");
   1617 +        // put("Cipher.RSA/ISO9796-1", "org.bouncycastle.jce.provider.JCERSACipher$ISO9796d1Padding");
   1618 +        //
   1619 +        // put("Cipher.ECIES", "org.bouncycastle.jce.provider.JCEIESCipher$ECIES");
   1620 +        // put("Cipher.BrokenECIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenECIES");
   1621 +        // put("Cipher.IES", "org.bouncycastle.jce.provider.JCEIESCipher$IES");
   1622 +        // put("Cipher.BrokenIES", "org.bouncycastle.jce.provider.JCEIESCipher$BrokenIES");
   1623 +        // put("Cipher.ELGAMAL", "org.bouncycastle.jce.provider.JCEElGamalCipher$NoPadding");
   1624 +        // put("Cipher.ELGAMAL/PKCS1", "org.bouncycastle.jce.provider.JCEElGamalCipher$PKCS1v1_5Padding");
   1625 +        // END android-removed
   1626  
   1627          put("Alg.Alias.Cipher.RSA//RAW", "RSA");
   1628          put("Alg.Alias.Cipher.RSA//NOPADDING", "RSA");
   1629 -        put("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1");
   1630 -        put("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP");
   1631 -        put("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1");
   1632 -        
   1633 -        put("Alg.Alias.Cipher.ELGAMAL/ECB/PKCS1PADDING", "ELGAMAL/PKCS1");
   1634 -        put("Alg.Alias.Cipher.ELGAMAL/NONE/PKCS1PADDING", "ELGAMAL/PKCS1");
   1635 -        put("Alg.Alias.Cipher.ELGAMAL/NONE/NOPADDING", "ELGAMAL");
   1636 +        // BEGIN android-removed
   1637 +        // put("Alg.Alias.Cipher.RSA//PKCS1PADDING", "RSA/PKCS1");
   1638 +        // put("Alg.Alias.Cipher.RSA//OAEPPADDING", "RSA/OAEP");
   1639 +        // put("Alg.Alias.Cipher.RSA//ISO9796-1PADDING", "RSA/ISO9796-1");
   1640 +        //
   1641 +        // put("Alg.Alias.Cipher.ELGAMAL/ECB/PKCS1PADDING", "ELGAMAL/PKCS1");
   1642 +        // put("Alg.Alias.Cipher.ELGAMAL/NONE/PKCS1PADDING", "ELGAMAL/PKCS1");
   1643 +        // put("Alg.Alias.Cipher.ELGAMAL/NONE/NOPADDING", "ELGAMAL");
   1644 +        // END android-removed
   1645  
   1646          put("Cipher.PBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithMD5AndDES");
   1647 -        put("Cipher.BROKENPBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES");
   1648 +        // BEGIN android-removed
   1649 +        // put("Cipher.BROKENPBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithMD5AndDES");
   1650 +        // END android-removed
   1651          put("Cipher.PBEWITHMD5ANDRC2", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithMD5AndRC2");
   1652          put("Cipher.PBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHA1AndDES");
   1653 -        put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES");
   1654 +        // BEGIN android-removed
   1655 +        // put("Cipher.BROKENPBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHA1AndDES");
   1656 +        // END android-removed
   1657          put("Cipher.PBEWITHSHA1ANDRC2", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHA1AndRC2");
   1658          put("Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndDES3Key");
   1659 -        put("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES3Key");
   1660 -        put("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndDES3Key");
   1661 +        // BEGIN android-removed
   1662 +        // put("Cipher.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES3Key");
   1663 +        // put("Cipher.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndDES3Key");
   1664 +        // END android-removed
   1665          put("Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndDES2Key");
   1666 -        put("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES2Key");
   1667 +        // BEGIN android-removed
   1668 +        // put("Cipher.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$BrokePBEWithSHAAndDES2Key");
   1669 +        // END android-removed
   1670          put("Cipher.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAnd128BitRC2");
   1671          put("Cipher.PBEWITHSHAAND40BITRC2-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAnd40BitRC2");
   1672          put("Cipher.PBEWITHSHAAND128BITRC4", "org.bouncycastle.jce.provider.JCEStreamCipher$PBEWithSHAAnd128BitRC4");
   1673          put("Cipher.PBEWITHSHAAND40BITRC4", "org.bouncycastle.jce.provider.JCEStreamCipher$PBEWithSHAAnd40BitRC4");
   1674  
   1675 -        put("Alg.Alias.Cipher.PBEWITHSHA1AND3-KEYTRIPLEDES-CBC", "Cipher.PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
   1676 -        put("Alg.Alias.Cipher.PBEWITHSHA1AND2-KEYTRIPLEDES-CBC", "Cipher.PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
   1677 -        put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC2-CBC", "Cipher.PBEWITHSHAAND128BITRC2-CBC");
   1678 -        put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC2-CBC", "Cipher.PBEWITHSHAAND40BITRC2-CBC");
   1679 -        put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC4", "Cipher.PBEWITHSHAAND128BITRC4");
   1680 -        put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC4", "Cipher.PBEWITHSHAAND40BITRC4");
   1681 +        // BEGIN android-changed
   1682 +        put("Alg.Alias.Cipher.PBEWITHSHA1AND3-KEYTRIPLEDES-CBC", "PBEWITHSHAAND3-KEYTRIPLEDES-CBC");
   1683 +        put("Alg.Alias.Cipher.PBEWITHSHA1AND2-KEYTRIPLEDES-CBC", "PBEWITHSHAAND2-KEYTRIPLEDES-CBC");
   1684 +        put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC2-CBC", "PBEWITHSHAAND128BITRC2-CBC");
   1685 +        put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC2-CBC", "PBEWITHSHAAND40BITRC2-CBC");
   1686 +        put("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC4", "PBEWITHSHAAND128BITRC4");
   1687 +        put("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC4", "PBEWITHSHAAND40BITRC4");
   1688 +        // END android-changed
   1689  
   1690          put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes128_cbc.getId(), "PBEWITHSHAAND128BITAES-CBC-BC");
   1691          put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha1_pkcs12_aes192_cbc.getId(), "PBEWITHSHAAND192BITAES-CBC-BC");
   1692 @@ -324,7 +388,7 @@
   1693          put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC");
   1694          put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC");
   1695          put("Alg.Alias.Cipher." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC");
   1696 -
   1697 +        
   1698          put("Cipher.PBEWITHSHAAND128BITAES-CBC-BC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
   1699          put("Cipher.PBEWITHSHAAND192BITAES-CBC-BC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
   1700          put("Cipher.PBEWITHSHAAND256BITAES-CBC-BC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
   1701 @@ -346,10 +410,12 @@
   1702          put("Cipher.PBEWITHMD5AND256BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithAESCBC");
   1703          
   1704          put("Cipher.PBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.JCEBlockCipher$PBEWithSHAAndTwofish");
   1705 -        put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish");
   1706 -
   1707 -        put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
   1708 -        put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
   1709 +        // BEGIN android-removed
   1710 +        // put("Cipher.OLDPBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.BrokenJCEBlockCipher$OldPBEWithSHAAndTwofish");
   1711 +        //
   1712 +        // put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
   1713 +        // put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
   1714 +        // END android-removed
   1715          put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES");
   1716          put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDDES");
   1717          put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES");
   1718 @@ -368,13 +434,15 @@
   1719          put("KeyGenerator.DES", "org.bouncycastle.jce.provider.JCEKeyGenerator$DES");
   1720          put("Alg.Alias.KeyGenerator." + OIWObjectIdentifiers.desCBC, "DES");
   1721  
   1722 -        put("KeyGenerator.RC2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
   1723 -        put("KeyGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
   1724 -
   1725 -        put("KeyGenerator.GOST28147", "org.bouncycastle.jce.provider.JCEKeyGenerator$GOST28147");
   1726 -        put("Alg.Alias.KeyGenerator.GOST", "GOST28147");
   1727 -        put("Alg.Alias.KeyGenerator.GOST-28147", "GOST28147");
   1728 -        put("Alg.Alias.KeyGenerator." + CryptoProObjectIdentifiers.gostR28147_cbc, "GOST28147");
   1729 +        // BEGIN android-removed
   1730 +        // put("KeyGenerator.RC2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
   1731 +        // put("KeyGenerator.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JCEKeyGenerator$RC2");
   1732 +        //
   1733 +        // put("KeyGenerator.GOST28147", "org.bouncycastle.jce.provider.JCEKeyGenerator$GOST28147");
   1734 +        // put("Alg.Alias.KeyGenerator.GOST", "GOST28147");
   1735 +        // put("Alg.Alias.KeyGenerator.GOST-28147", "GOST28147");
   1736 +        // put("Alg.Alias.KeyGenerator." + CryptoProObjectIdentifiers.gostR28147_cbc, "GOST28147");
   1737 +        // END android-removed
   1738  
   1739          //
   1740          // key pair generators.
   1741 @@ -382,14 +450,18 @@
   1742          put("KeyPairGenerator.RSA", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$RSA");
   1743          put("KeyPairGenerator.DH", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$DH");
   1744          put("KeyPairGenerator.DSA", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$DSA");
   1745 -        put("KeyPairGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$ElGamal");
   1746 +        // BEGIN android-removed
   1747 +        // put("KeyPairGenerator.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$ElGamal");
   1748 +        // END android-removed
   1749  
   1750          put("Alg.Alias.KeyPairGenerator.1.2.840.113549.1.1.1", "RSA");
   1751          put("Alg.Alias.KeyPairGenerator.DIFFIEHELLMAN", "DH");
   1752          
   1753 -        put("KeyPairGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$GOST3410");
   1754 -        put("Alg.Alias.KeyPairGenerator.GOST-3410", "GOST3410");
   1755 -        put("Alg.Alias.KeyPairGenerator.GOST-3410-94", "GOST3410");
   1756 +        // BEGIN android-removed
   1757 +        // put("KeyPairGenerator.GOST3410", "org.bouncycastle.jce.provider.JDKKeyPairGenerator$GOST3410");
   1758 +        // put("Alg.Alias.KeyPairGenerator.GOST-3410", "GOST3410");
   1759 +        // put("Alg.Alias.KeyPairGenerator.GOST-3410-94", "GOST3410");
   1760 +        // END android-removed
   1761  
   1762          //
   1763          // key factories
   1764 @@ -397,20 +469,24 @@
   1765          put("KeyFactory.RSA", "org.bouncycastle.jce.provider.JDKKeyFactory$RSA");
   1766          put("KeyFactory.DH", "org.bouncycastle.jce.provider.JDKKeyFactory$DH");
   1767          put("KeyFactory.DSA", "org.bouncycastle.jce.provider.JDKKeyFactory$DSA");
   1768 -        put("KeyFactory.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
   1769 -        put("KeyFactory.ElGamal", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
   1770 -
   1771 -        put("KeyFactory.X.509", "org.bouncycastle.jce.provider.JDKKeyFactory$X509");
   1772 +        // BEGIN android-removed
   1773 +        // put("KeyFactory.ELGAMAL", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
   1774 +        // put("KeyFactory.ElGamal", "org.bouncycastle.jce.provider.JDKKeyFactory$ElGamal");
   1775 +        //
   1776 +        // put("KeyFactory.X.509", "org.bouncycastle.jce.provider.JDKKeyFactory$X509");
   1777 +        // END android-removed
   1778          
   1779          put("Alg.Alias.KeyFactory.1.2.840.113549.1.1.1", "RSA");
   1780          put("Alg.Alias.KeyFactory.1.2.840.10040.4.1", "DSA");
   1781  
   1782          put("Alg.Alias.KeyFactory.DIFFIEHELLMAN", "DH");
   1783  
   1784 -        put("KeyFactory.GOST3410", "org.bouncycastle.jce.provider.JDKKeyFactory$GOST3410");
   1785 -        put("Alg.Alias.KeyFactory.GOST-3410", "GOST3410");
   1786 -        put("Alg.Alias.KeyFactory.GOST-3410-94", "GOST3410");
   1787 -        put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_94, "GOST3410");
   1788 +        // BEGIN android-removed
   1789 +        // put("KeyFactory.GOST3410", "org.bouncycastle.jce.provider.JDKKeyFactory$GOST3410");
   1790 +        // put("Alg.Alias.KeyFactory.GOST-3410", "GOST3410");
   1791 +        // put("Alg.Alias.KeyFactory.GOST-3410-94", "GOST3410");
   1792 +        // put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_94, "GOST3410");
   1793 +        // END android-removed
   1794  
   1795          //
   1796          // Algorithm parameters
   1797 @@ -418,24 +494,34 @@
   1798          put("AlgorithmParameters.DES", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
   1799          put("Alg.Alias.AlgorithmParameters." + OIWObjectIdentifiers.desCBC, "DES");
   1800          put("AlgorithmParameters.DESEDE", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
   1801 -        put("AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.JDKAlgorithmParameters$IVAlgorithmParameters");
   1802 -        put("AlgorithmParameters.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
   1803 -        put("AlgorithmParameters.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
   1804 +        // BEGIN android-changed
   1805 +        put("Alg.Alias.AlgorithmParameters." + PKCSObjectIdentifiers.des_EDE3_CBC, "DESEDE");
   1806 +        // END android-changed
   1807 +        // BEGIN android-removed
   1808 +        // put("AlgorithmParameters.RC2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
   1809 +        // put("AlgorithmParameters.1.2.840.113549.3.2", "org.bouncycastle.jce.provider.JDKAlgorithmParameters$RC2AlgorithmParameters");
   1810 +        // END android-removed
   1811          
   1812          //
   1813          // secret key factories.
   1814          //
   1815          put("SecretKeyFactory.DES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$DES");
   1816 -        put("SecretKeyFactory.PBEWITHMD2ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndDES");
   1817 -
   1818 -        put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
   1819 -        put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
   1820 +        // BEGIN android-removed
   1821 +        // put("SecretKeyFactory.PBEWITHMD2ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndDES");
   1822 +        // END android-removed
   1823 +
   1824 +        // BEGIN android-removed
   1825 +        // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
   1826 +        // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
   1827 +        // END android-removed
   1828          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES");
   1829          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDDES");
   1830          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES");
   1831          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndRC2_CBC, "PBEWITHSHA1ANDRC2");
   1832  
   1833 -        put("SecretKeyFactory.PBEWITHMD2ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndRC2");
   1834 +        // BEGIN android-removed
   1835 +        // put("SecretKeyFactory.PBEWITHMD2ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD2AndRC2");
   1836 +        // END android-removed
   1837          put("SecretKeyFactory.PBEWITHMD5ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5AndDES");
   1838          put("SecretKeyFactory.PBEWITHMD5ANDRC2", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5AndRC2");
   1839          put("SecretKeyFactory.PBEWITHSHA1ANDDES", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHA1AndDES");
   1840 @@ -447,31 +533,41 @@
   1841          put("SecretKeyFactory.PBEWITHSHAAND128BITRC2-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAnd128BitRC2");
   1842          put("SecretKeyFactory.PBEWITHSHAAND40BITRC2-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAnd40BitRC2");
   1843          put("SecretKeyFactory.PBEWITHSHAANDTWOFISH-CBC", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHAAndTwofish");
   1844 -        put("SecretKeyFactory.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithRIPEMD160");
   1845 +        // BEGIN android-removed
   1846 +        // put("SecretKeyFactory.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithRIPEMD160");
   1847 +        // END android-removed
   1848          put("SecretKeyFactory.PBEWITHHMACSHA1", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithSHA");
   1849 -        put("SecretKeyFactory.PBEWITHHMACTIGER", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithTiger");
   1850 +        // BEGIN android-removed
   1851 +        // put("SecretKeyFactory.PBEWITHHMACTIGER", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithTiger");
   1852 +        // END android-removed
   1853          
   1854          put("SecretKeyFactory.PBEWITHMD5AND128BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5And128BitAESCBCOpenSSL");
   1855          put("SecretKeyFactory.PBEWITHMD5AND192BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5And192BitAESCBCOpenSSL");
   1856          put("SecretKeyFactory.PBEWITHMD5AND256BITAES-CBC-OPENSSL", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBEWithMD5And256BitAESCBCOpenSSL");
   1857  
   1858 -        put("Alg.Alias.SecretKeyFactory.PBE", "PBE/PKCS5");
   1859 -
   1860 -        put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHMD5ANDDES", "PBE/PKCS5");
   1861 -        put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHA1ANDDES", "PBE/PKCS5");
   1862 -        put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12");
   1863 -        put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12");
   1864 -        put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PBE/PKCS12");
   1865 -        put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAANDTWOFISH-CBC", "PBE/PKCS12");
   1866 -
   1867 -        put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES");
   1868 -        put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2");
   1869 +        // BEGIN android-removed
   1870 +        // put("Alg.Alias.SecretKeyFactory.PBE", "PBE/PKCS5");
   1871 +        //
   1872 +        // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHMD5ANDDES", "PBE/PKCS5");
   1873 +        // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHA1ANDDES", "PBE/PKCS5");
   1874 +        // put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12");
   1875 +        // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND3-KEYTRIPLEDES-CBC", "PBE/PKCS12");
   1876 +        // put("Alg.Alias.SecretKeyFactory.BROKENPBEWITHSHAAND2-KEYTRIPLEDES-CBC", "PBE/PKCS12");
   1877 +        // put("Alg.Alias.SecretKeyFactory.OLDPBEWITHSHAANDTWOFISH-CBC", "PBE/PKCS12");
   1878 +        // END android-removed
   1879 +
   1880 +        // BEGIN android-removed
   1881 +        // put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDDES-CBC", "PBEWITHMD2ANDDES");
   1882 +        // put("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2");
   1883 +        // END android-removed
   1884          put("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDDES-CBC", "PBEWITHMD5ANDDES");
   1885          put("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDRC2-CBC", "PBEWITHMD5ANDRC2");
   1886          put("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDDES-CBC", "PBEWITHSHA1ANDDES");
   1887          put("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDRC2-CBC", "PBEWITHSHA1ANDRC2");
   1888 -        put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
   1889 -        put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
   1890 +        // BEGIN android-removed
   1891 +        // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, "PBEWITHMD2ANDDES");
   1892 +        // put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
   1893 +        // END android-removed
   1894          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, "PBEWITHMD5ANDDES");
   1895          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2");
   1896          put("Alg.Alias.SecretKeyFactory." + PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, "PBEWITHSHA1ANDDES");
   1897 @@ -508,6 +604,10 @@
   1898          put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes128_cbc.getId(), "PBEWITHSHA256AND128BITAES-CBC-BC");
   1899          put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes192_cbc.getId(), "PBEWITHSHA256AND192BITAES-CBC-BC");
   1900          put("Alg.Alias.SecretKeyFactory." + BCObjectIdentifiers.bc_pbe_sha256_pkcs12_aes256_cbc.getId(), "PBEWITHSHA256AND256BITAES-CBC-BC");
   1901 +        // BEGIN android-added
   1902 +
   1903 +        put("SecretKeyFactory.PBKDF2WithHmacSHA1", "org.bouncycastle.jce.provider.JCESecretKeyFactory$PBKDF2WithHmacSHA1");
   1904 +        // END android-added
   1905  
   1906          addMacAlgorithms();
   1907  
   1908 @@ -516,16 +616,23 @@
   1909          addSignatureAlgorithms();
   1910  
   1911      // Certification Path API
   1912 -        put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi");
   1913 -        put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi");
   1914 -        put("CertPathValidator.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi");
   1915 -        put("CertPathBuilder.RFC3280", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi");
   1916 +        // BEGIN android-removed
   1917 +        // put("CertPathValidator.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathValidatorSpi");
   1918 +        // put("CertPathBuilder.RFC3281", "org.bouncycastle.jce.provider.PKIXAttrCertPathBuilderSpi");
   1919 +        // END android-removed
   1920 +        // BEGIN android-changed
   1921 +        // Use Alg.Alias so RFC3280 doesn't show up when iterating provider services, only PKIX
   1922 +        put("Alg.Alias.CertPathValidator.RFC3280", "PKIX");
   1923 +        put("Alg.Alias.CertPathBuilder.RFC3280", "PKIX");
   1924 +        // END android-changed
   1925          put("CertPathValidator.PKIX", "org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi");
   1926          put("CertPathBuilder.PKIX", "org.bouncycastle.jce.provider.PKIXCertPathBuilderSpi");
   1927          put("CertStore.Collection", "org.bouncycastle.jce.provider.CertStoreCollectionSpi");
   1928 -        put("CertStore.LDAP", "org.bouncycastle.jce.provider.X509LDAPCertStoreSpi");
   1929 -        put("CertStore.Multi", "org.bouncycastle.jce.provider.MultiCertStoreSpi");
   1930 -        put("Alg.Alias.CertStore.X509LDAP", "LDAP");
   1931 +        // BEGIN android-removed
   1932 +        // put("CertStore.LDAP", "org.bouncycastle.jce.provider.X509LDAPCertStoreSpi");
   1933 +        // put("CertStore.Multi", "org.bouncycastle.jce.provider.MultiCertStoreSpi");
   1934 +        // put("Alg.Alias.CertStore.X509LDAP", "LDAP");
   1935 +        // END android-removed
   1936      }
   1937  
   1938      private void loadAlgorithms(String packageName, String[] names)
   1939 @@ -586,42 +693,46 @@
   1940      //
   1941      private void addMacAlgorithms()
   1942      {
   1943 -        put("Mac.DESMAC", "org.bouncycastle.jce.provider.JCEMac$DES");
   1944 -        put("Alg.Alias.Mac.DES", "DESMAC");
   1945 -        put("Mac.DESMAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$DESCFB8");
   1946 -        put("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8");
   1947 -
   1948 -        put("Mac.DESWITHISO9797", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3");
   1949 -        put("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797");
   1950 -
   1951 -        put("Mac.ISO9797ALG3MAC", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3");
   1952 -        put("Alg.Alias.Mac.ISO9797ALG3", "ISO9797ALG3MAC");
   1953 -        put("Mac.ISO9797ALG3WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4");
   1954 -        put("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING");
   1955 -
   1956 -        put("Mac.RC2MAC", "org.bouncycastle.jce.provider.JCEMac$RC2");
   1957 -        put("Alg.Alias.Mac.RC2", "RC2MAC");
   1958 -        put("Mac.RC2MAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$RC2CFB8");
   1959 -        put("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8");
   1960 -
   1961 -
   1962 -        put("Mac.GOST28147MAC", "org.bouncycastle.jce.provider.JCEMac$GOST28147");
   1963 -        put("Alg.Alias.Mac.GOST28147", "GOST28147MAC");
   1964 -
   1965 -        put("Mac.OLDHMACSHA384", "org.bouncycastle.jce.provider.JCEMac$OldSHA384");
   1966 -
   1967 -        put("Mac.OLDHMACSHA512", "org.bouncycastle.jce.provider.JCEMac$OldSHA512");
   1968 -
   1969 -        addHMACAlgorithm("MD2", "org.bouncycastle.jce.provider.JCEMac$MD2", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD2HMAC");
   1970 -        addHMACAlgorithm("MD4", "org.bouncycastle.jce.provider.JCEMac$MD4", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD4HMAC");
   1971 +        // BEGIN android-removed
   1972 +        // put("Mac.DESMAC", "org.bouncycastle.jce.provider.JCEMac$DES");
   1973 +        // put("Alg.Alias.Mac.DES", "DESMAC");
   1974 +        // put("Mac.DESMAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$DESCFB8");
   1975 +        // put("Alg.Alias.Mac.DES/CFB8", "DESMAC/CFB8");
   1976 +        //
   1977 +        // put("Mac.DESWITHISO9797", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3");
   1978 +        // put("Alg.Alias.Mac.DESISO9797MAC", "DESWITHISO9797");
   1979 +        //
   1980 +        // put("Mac.ISO9797ALG3MAC", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3");
   1981 +        // put("Alg.Alias.Mac.ISO9797ALG3", "ISO9797ALG3MAC");
   1982 +        // put("Mac.ISO9797ALG3WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.JCEMac$DES9797Alg3with7816d4");
   1983 +        // put("Alg.Alias.Mac.ISO9797ALG3MACWITHISO7816-4PADDING", "ISO9797ALG3WITHISO7816-4PADDING");
   1984 +        //
   1985 +        // put("Mac.RC2MAC", "org.bouncycastle.jce.provider.JCEMac$RC2");
   1986 +        // put("Alg.Alias.Mac.RC2", "RC2MAC");
   1987 +        // put("Mac.RC2MAC/CFB8", "org.bouncycastle.jce.provider.JCEMac$RC2CFB8");
   1988 +        // put("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8");
   1989 +        //
   1990 +        //
   1991 +        // put("Mac.GOST28147MAC", "org.bouncycastle.jce.provider.JCEMac$GOST28147");
   1992 +        // put("Alg.Alias.Mac.GOST28147", "GOST28147MAC");
   1993 +        //
   1994 +        // put("Mac.OLDHMACSHA384", "org.bouncycastle.jce.provider.JCEMac$OldSHA384");
   1995 +        //
   1996 +        // put("Mac.OLDHMACSHA512", "org.bouncycastle.jce.provider.JCEMac$OldSHA512");
   1997 +        //
   1998 +        // addHMACAlgorithm("MD2", "org.bouncycastle.jce.provider.JCEMac$MD2", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD2HMAC");
   1999 +        // addHMACAlgorithm("MD4", "org.bouncycastle.jce.provider.JCEMac$MD4", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD4HMAC");
   2000 +        // END android-removed
   2001          addHMACAlgorithm("MD5", "org.bouncycastle.jce.provider.JCEMac$MD5", "org.bouncycastle.jce.provider.JCEKeyGenerator$MD5HMAC");
   2002          addHMACAlias("MD5", IANAObjectIdentifiers.hmacMD5);
   2003  
   2004          addHMACAlgorithm("SHA1", "org.bouncycastle.jce.provider.JCEMac$SHA1", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA1");
   2005          addHMACAlias("SHA1", PKCSObjectIdentifiers.id_hmacWithSHA1);
   2006          addHMACAlias("SHA1", IANAObjectIdentifiers.hmacSHA1);
   2007 -        addHMACAlgorithm("SHA224", "org.bouncycastle.jce.provider.JCEMac$SHA224", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA224");
   2008 -        addHMACAlias("SHA224", PKCSObjectIdentifiers.id_hmacWithSHA224);
   2009 +        // BEGIN android-removed
   2010 +        // addHMACAlgorithm("SHA224", "org.bouncycastle.jce.provider.JCEMac$SHA224", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA224");
   2011 +        // addHMACAlias("SHA224", PKCSObjectIdentifiers.id_hmacWithSHA224);
   2012 +        // END android-removed
   2013          addHMACAlgorithm("SHA256", "org.bouncycastle.jce.provider.JCEMac$SHA256", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA256");
   2014          addHMACAlias("SHA256", PKCSObjectIdentifiers.id_hmacWithSHA256);
   2015          addHMACAlgorithm("SHA384", "org.bouncycastle.jce.provider.JCEMac$SHA384", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA384");
   2016 @@ -629,16 +740,20 @@
   2017          addHMACAlgorithm("SHA512", "org.bouncycastle.jce.provider.JCEMac$SHA512", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACSHA512");
   2018          addHMACAlias("SHA512", PKCSObjectIdentifiers.id_hmacWithSHA512);
   2019  
   2020 -        addHMACAlgorithm("RIPEMD128", "org.bouncycastle.jce.provider.JCEMac$RIPEMD128", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD128HMAC");
   2021 -        addHMACAlgorithm("RIPEMD160", "org.bouncycastle.jce.provider.JCEMac$RIPEMD160", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD160HMAC");
   2022 -        addHMACAlias("RIPEMD160", IANAObjectIdentifiers.hmacRIPEMD160);
   2023 -
   2024 -        addHMACAlgorithm("TIGER", "org.bouncycastle.jce.provider.JCEMac$Tiger", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACTIGER");
   2025 -        addHMACAlias("TIGER", IANAObjectIdentifiers.hmacTIGER);
   2026 +        // BEGIN android-removed
   2027 +        // addHMACAlgorithm("RIPEMD128", "org.bouncycastle.jce.provider.JCEMac$RIPEMD128", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD128HMAC");
   2028 +        // addHMACAlgorithm("RIPEMD160", "org.bouncycastle.jce.provider.JCEMac$RIPEMD160", "org.bouncycastle.jce.provider.JCEKeyGenerator$RIPEMD160HMAC");
   2029 +        // addHMACAlias("RIPEMD160", IANAObjectIdentifiers.hmacRIPEMD160);
   2030 +        //
   2031 +        // addHMACAlgorithm("TIGER", "org.bouncycastle.jce.provider.JCEMac$Tiger", "org.bouncycastle.jce.provider.JCEKeyGenerator$HMACTIGER");
   2032 +        // addHMACAlias("TIGER", IANAObjectIdentifiers.hmacTIGER);
   2033 +        // END android-removed
   2034  
   2035          put("Mac.PBEWITHHMACSHA", "org.bouncycastle.jce.provider.JCEMac$PBEWithSHA");
   2036          put("Mac.PBEWITHHMACSHA1", "org.bouncycastle.jce.provider.JCEMac$PBEWithSHA");
   2037 -        put("Mac.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCEMac$PBEWithRIPEMD160");
   2038 +        // BEGIN android-removed
   2039 +        // put("Mac.PBEWITHHMACRIPEMD160", "org.bouncycastle.jce.provider.JCEMac$PBEWithRIPEMD160");
   2040 +        // END android-removed
   2041          put("Alg.Alias.Mac.1.3.14.3.2.26", "PBEWITHHMACSHA");
   2042      }
   2043  
   2044 @@ -676,9 +791,11 @@
   2045          put("Alg.Alias.MessageDigest.SHA1", "SHA-1");
   2046          put("Alg.Alias.MessageDigest.SHA", "SHA-1");
   2047          put("Alg.Alias.MessageDigest." + OIWObjectIdentifiers.idSHA1, "SHA-1");
   2048 -        put("MessageDigest.SHA-224", "org.bouncycastle.jce.provider.JDKMessageDigest$SHA224");
   2049 -        put("Alg.Alias.MessageDigest.SHA224", "SHA-224");
   2050 -        put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha224, "SHA-224");
   2051 +        // BEGIN android-removed
   2052 +        // put("MessageDigest.SHA-224", "org.bouncycastle.jce.provider.JDKMessageDigest$SHA224");
   2053 +        // put("Alg.Alias.MessageDigest.SHA224", "SHA-224");
   2054 +        // put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha224, "SHA-224");
   2055 +        // END android-removed
   2056          put("MessageDigest.SHA-256", "org.bouncycastle.jce.provider.JDKMessageDigest$SHA256");
   2057          put("Alg.Alias.MessageDigest.SHA256", "SHA-256");
   2058          put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha256, "SHA-256");
   2059 @@ -689,27 +806,31 @@
   2060          put("Alg.Alias.MessageDigest.SHA512", "SHA-512");
   2061          put("Alg.Alias.MessageDigest." + NISTObjectIdentifiers.id_sha512, "SHA-512");
   2062          
   2063 -        put("MessageDigest.MD2", "org.bouncycastle.jce.provider.JDKMessageDigest$MD2");
   2064 -        put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md2, "MD2");
   2065 -        put("MessageDigest.MD4", "org.bouncycastle.jce.provider.JDKMessageDigest$MD4");
   2066 -        put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md4, "MD4");
   2067 +        // BEGIN android-removed
   2068 +        // put("MessageDigest.MD2", "org.bouncycastle.jce.provider.JDKMessageDigest$MD2");
   2069 +        // put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md2, "MD2");
   2070 +        // put("MessageDigest.MD4", "org.bouncycastle.jce.provider.JDKMessageDigest$MD4");
   2071 +        // put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md4, "MD4");
   2072 +        // END android-removed
   2073          put("MessageDigest.MD5", "org.bouncycastle.jce.provider.JDKMessageDigest$MD5");
   2074          put("Alg.Alias.MessageDigest." + PKCSObjectIdentifiers.md5, "MD5");
   2075 -        put("MessageDigest.RIPEMD128", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD128");
   2076 -        put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd128, "RIPEMD128");
   2077 -        put("MessageDigest.RIPEMD160", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD160");
   2078 -        put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd160, "RIPEMD160");
   2079 -        put("MessageDigest.RIPEMD256", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD256");
   2080 -        put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd256, "RIPEMD256");
   2081 -        put("MessageDigest.RIPEMD320", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD320");
   2082 -        put("MessageDigest.Tiger", "org.bouncycastle.jce.provider.JDKMessageDigest$Tiger");
   2083 -        
   2084 -        put("MessageDigest.WHIRLPOOL", "org.bouncycastle.jce.provider.JDKMessageDigest$Whirlpool");
   2085 -        
   2086 -        put("MessageDigest.GOST3411", "org.bouncycastle.jce.provider.JDKMessageDigest$GOST3411");
   2087 -        put("Alg.Alias.MessageDigest.GOST", "GOST3411");
   2088 -        put("Alg.Alias.MessageDigest.GOST-3411", "GOST3411");
   2089 -        put("Alg.Alias.MessageDigest." + CryptoProObjectIdentifiers.gostR3411, "GOST3411");
   2090 +        // BEGIN android-removed
   2091 +        // put("MessageDigest.RIPEMD128", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD128");
   2092 +        // put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd128, "RIPEMD128");
   2093 +        // put("MessageDigest.RIPEMD160", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD160");
   2094 +        // put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd160, "RIPEMD160");
   2095 +        // put("MessageDigest.RIPEMD256", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD256");
   2096 +        // put("Alg.Alias.MessageDigest." + TeleTrusTObjectIdentifiers.ripemd256, "RIPEMD256");
   2097 +        // put("MessageDigest.RIPEMD320", "org.bouncycastle.jce.provider.JDKMessageDigest$RIPEMD320");
   2098 +        // put("MessageDigest.Tiger", "org.bouncycastle.jce.provider.JDKMessageDigest$Tiger");
   2099 +        
   2100 +        // put("MessageDigest.WHIRLPOOL", "org.bouncycastle.jce.provider.JDKMessageDigest$Whirlpool");
   2101 +        
   2102 +        // put("MessageDigest.GOST3411", "org.bouncycastle.jce.provider.JDKMessageDigest$GOST3411");
   2103 +        // put("Alg.Alias.MessageDigest.GOST", "GOST3411");
   2104 +        // put("Alg.Alias.MessageDigest.GOST-3411", "GOST3411");
   2105 +        // put("Alg.Alias.MessageDigest." + CryptoProObjectIdentifiers.gostR3411, "GOST3411");
   2106 +        // END android-removed
   2107      }
   2108      
   2109      //
   2110 @@ -717,55 +838,70 @@
   2111      //
   2112      private void addSignatureAlgorithms()
   2113      {
   2114 -        put("Signature.MD2WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD2WithRSAEncryption");
   2115 -        put("Signature.MD4WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD4WithRSAEncryption");
   2116 +        // BEGIN android-removed
   2117 +        // Dropping MD2
   2118 +        // put("Signature.MD2WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD2WithRSAEncryption");
   2119 +        // put("Signature.MD4WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD4WithRSAEncryption");
   2120 +        // END android-removed
   2121          put("Signature.MD5WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$MD5WithRSAEncryption");
   2122          put("Signature.SHA1WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA1WithRSAEncryption");
   2123 -        put("Signature.SHA224WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA224WithRSAEncryption");
   2124 +        // BEGIN android-removed
   2125 +        // put("Signature.SHA224WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA224WithRSAEncryption");
   2126 +        // END android-removed
   2127          put("Signature.SHA256WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA256WithRSAEncryption");
   2128          put("Signature.SHA384WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA384WithRSAEncryption");
   2129          put("Signature.SHA512WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$SHA512WithRSAEncryption");
   2130 -        put("Signature.RIPEMD160WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD160WithRSAEncryption");
   2131 -        put("Signature.RIPEMD128WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD128WithRSAEncryption");
   2132 -        put("Signature.RIPEMD256WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD256WithRSAEncryption");
   2133 -        put("Signature.DSA", "org.bouncycastle.jce.provider.JDKDSASigner$stdDSA");
   2134 +        // BEGIN android-removed
   2135 +        // put("Signature.RIPEMD160WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD160WithRSAEncryption");
   2136 +        // put("Signature.RIPEMD128WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD128WithRSAEncryption");
   2137 +        // put("Signature.RIPEMD256WithRSAEncryption", "org.bouncycastle.jce.provider.JDKDigestSignature$RIPEMD256WithRSAEncryption");
   2138 +        // END android-removed
   2139 +        // BEGIN android-changed
   2140 +        put("Signature.SHA1withDSA", "org.bouncycastle.jce.provider.JDKDSASigner$stdDSA");
   2141 +        // END android-changed
   2142          put("Signature.NONEWITHDSA", "org.bouncycastle.jce.provider.JDKDSASigner$noneDSA");
   2143 -        put("Signature.SHA1withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$SHA1WithRSAEncryption");
   2144 -        put("Signature.MD5withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$MD5WithRSAEncryption");
   2145 -        put("Signature.RIPEMD160withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$RIPEMD160WithRSAEncryption");
   2146 -
   2147 -        put("Signature.RSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
   2148 -        put("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
   2149 -        put("Signature.SHA1withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA1withRSA");
   2150 -        put("Signature.SHA224withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA224withRSA");
   2151 -        put("Signature.SHA256withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA256withRSA");
   2152 -        put("Signature.SHA384withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA384withRSA");
   2153 -        put("Signature.SHA512withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA512withRSA");
   2154 -
   2155 -        put("Signature.RSA", "org.bouncycastle.jce.provider.JDKDigestSignature$noneRSA");
   2156 -        put("Signature.RAWRSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$nonePSS");
   2157 +        // BEGIN android-removed
   2158 +        // put("Signature.SHA1withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$SHA1WithRSAEncryption");
   2159 +        // put("Signature.MD5withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$MD5WithRSAEncryption");
   2160 +        // put("Signature.RIPEMD160withRSA/ISO9796-2", "org.bouncycastle.jce.provider.JDKISOSignature$RIPEMD160WithRSAEncryption");
   2161 +        //
   2162 +        // put("Signature.RSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
   2163 +        // put("Signature." + PKCSObjectIdentifiers.id_RSASSA_PSS, "org.bouncycastle.jce.provider.JDKPSSSigner$PSSwithRSA");
   2164 +        // put("Signature.SHA1withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA1withRSA");
   2165 +        // put("Signature.SHA224withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA224withRSA");
   2166 +        // put("Signature.SHA256withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA256withRSA");
   2167 +        // put("Signature.SHA384withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA384withRSA");
   2168 +        // put("Signature.SHA512withRSA/PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$SHA512withRSA");
   2169 +        //
   2170 +        // put("Signature.RSA", "org.bouncycastle.jce.provider.JDKDigestSignature$noneRSA");
   2171 +        // put("Signature.RAWRSASSA-PSS", "org.bouncycastle.jce.provider.JDKPSSSigner$nonePSS");
   2172 +        // END android-removed
   2173  
   2174          put("Alg.Alias.Signature.RAWDSA", "NONEWITHDSA");
   2175  
   2176 -        put("Alg.Alias.Signature.RAWRSA", "RSA");
   2177 -        put("Alg.Alias.Signature.NONEWITHRSA", "RSA");
   2178 -        put("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS");
   2179 -        put("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS");
   2180 -        put("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS");
   2181 -
   2182 -        put("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS");
   2183 -
   2184 -        put("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS");
   2185 -        put("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS");
   2186 -        put("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS");
   2187 -        put("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS");
   2188 -        put("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS");
   2189 -        
   2190 -        put("Alg.Alias.Signature.MD2withRSAEncryption", "MD2WithRSAEncryption");
   2191 -        put("Alg.Alias.Signature.MD4withRSAEncryption", "MD4WithRSAEncryption");
   2192 +        // BEGIN android-removed
   2193 +        // put("Alg.Alias.Signature.RAWRSA", "RSA");
   2194 +        // put("Alg.Alias.Signature.NONEWITHRSA", "RSA");
   2195 +        // put("Alg.Alias.Signature.RAWRSAPSS", "RAWRSASSA-PSS");
   2196 +        // put("Alg.Alias.Signature.NONEWITHRSAPSS", "RAWRSASSA-PSS");
   2197 +        // put("Alg.Alias.Signature.NONEWITHRSASSA-PSS", "RAWRSASSA-PSS");
   2198 +        //
   2199 +        // put("Alg.Alias.Signature.RSAPSS", "RSASSA-PSS");
   2200 +        //
   2201 +        // put("Alg.Alias.Signature.SHA1withRSAandMGF1", "SHA1withRSA/PSS");
   2202 +        // put("Alg.Alias.Signature.SHA224withRSAandMGF1", "SHA224withRSA/PSS");
   2203 +        // put("Alg.Alias.Signature.SHA256withRSAandMGF1", "SHA256withRSA/PSS");
   2204 +        // put("Alg.Alias.Signature.SHA384withRSAandMGF1", "SHA384withRSA/PSS");
   2205 +        // put("Alg.Alias.Signature.SHA512withRSAandMGF1", "SHA512withRSA/PSS");
   2206 +        //
   2207 +        // put("Alg.Alias.Signature.MD2withRSAEncryption", "MD2WithRSAEncryption");
   2208 +        // put("Alg.Alias.Signature.MD4withRSAEncryption", "MD4WithRSAEncryption");
   2209 +        // END android-removed
   2210          put("Alg.Alias.Signature.MD5withRSAEncryption", "MD5WithRSAEncryption");
   2211          put("Alg.Alias.Signature.SHA1withRSAEncryption", "SHA1WithRSAEncryption");
   2212 -        put("Alg.Alias.Signature.SHA224withRSAEncryption", "SHA224WithRSAEncryption");
   2213 +        // BEGIN android-removed
   2214 +        // put("Alg.Alias.Signature.SHA224withRSAEncryption", "SHA224WithRSAEncryption");
   2215 +        // END android-removed
   2216  
   2217          put("Alg.Alias.Signature.SHA256withRSAEncryption", "SHA256WithRSAEncryption");
   2218          put("Alg.Alias.Signature.SHA384withRSAEncryption", "SHA384WithRSAEncryption");
   2219 @@ -779,24 +915,30 @@
   2220          put("Alg.Alias.Signature.SHA384WITHRSAENCRYPTION", "SHA384WithRSAEncryption");
   2221          put("Alg.Alias.Signature.SHA512WITHRSAENCRYPTION", "SHA512WithRSAEncryption");
   2222  
   2223 -        put("Alg.Alias.Signature.RIPEMD160withRSAEncryption", "RIPEMD160WithRSAEncryption");
   2224 -
   2225 -        put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md2WithRSAEncryption, "MD2WithRSAEncryption");
   2226 -        put("Alg.Alias.Signature.MD2WithRSA", "MD2WithRSAEncryption");
   2227 -        put("Alg.Alias.Signature.MD2withRSA", "MD2WithRSAEncryption");
   2228 -        put("Alg.Alias.Signature.MD2/RSA", "MD2WithRSAEncryption");
   2229 +        // BEGIN android-removed
   2230 +        // Dropping MD2
   2231 +        // put("Alg.Alias.Signature.RIPEMD160withRSAEncryption", "RIPEMD160WithRSAEncryption");
   2232 +        // put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md2WithRSAEncryption, "MD2WithRSAEncryption");
   2233 +        // put("Alg.Alias.Signature.MD2WithRSA", "MD2WithRSAEncryption");
   2234 +        // put("Alg.Alias.Signature.MD2withRSA", "MD2WithRSAEncryption");
   2235 +        // put("Alg.Alias.Signature.MD2/RSA", "MD2WithRSAEncryption");
   2236 +        // END android-removed
   2237          put("Alg.Alias.Signature.MD5WithRSA", "MD5WithRSAEncryption");
   2238          put("Alg.Alias.Signature.MD5withRSA", "MD5WithRSAEncryption");
   2239          put("Alg.Alias.Signature.MD5/RSA", "MD5WithRSAEncryption");
   2240          put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md5WithRSAEncryption, "MD5WithRSAEncryption");
   2241 -        put("Alg.Alias.Signature.MD4WithRSA", "MD4WithRSAEncryption");
   2242 -        put("Alg.Alias.Signature.MD4withRSA", "MD4WithRSAEncryption");
   2243 -        put("Alg.Alias.Signature.MD4/RSA", "MD4WithRSAEncryption");
   2244 -        put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md4WithRSAEncryption, "MD4WithRSAEncryption");
   2245 +        // BEGIN android-removed
   2246 +        // put("Alg.Alias.Signature.MD4WithRSA", "MD4WithRSAEncryption");
   2247 +        // put("Alg.Alias.Signature.MD4withRSA", "MD4WithRSAEncryption");
   2248 +        // put("Alg.Alias.Signature.MD4/RSA", "MD4WithRSAEncryption");
   2249 +        // put("Alg.Alias.Signature." + PKCSObjectIdentifiers.md4WithRSAEncryption, "MD4WithRSAEncryption");
   2250 +        // END android-removed
   2251          put("Alg.Alias.Signature.SHA1WithRSA", "SHA1WithRSAEncryption");
   2252          put("Alg.Alias.Signature.SHA1withRSA", "SHA1WithRSAEncryption");
   2253 -        put("Alg.Alias.Signature.SHA224WithRSA", "SHA224WithRSAEncryption");
   2254 -        put("Alg.Alias.Signature.SHA224withRSA", "SHA224WithRSAEncryption");
   2255 +        // BEGIN android-removed
   2256 +        // put("Alg.Alias.Signature.SHA224WithRSA", "SHA224WithRSAEncryption");
   2257 +        // put("Alg.Alias.Signature.SHA224withRSA", "SHA224WithRSAEncryption");
   2258 +        // END android-removed
   2259          put("Alg.Alias.Signature.SHA256WithRSA", "SHA256WithRSAEncryption");
   2260          put("Alg.Alias.Signature.SHA256withRSA", "SHA256WithRSAEncryption");
   2261          put("Alg.Alias.Signature.SHA384WithRSA", "SHA384WithRSAEncryption");
   2262 @@ -806,92 +948,110 @@
   2263          put("Alg.Alias.Signature.SHA1/RSA", "SHA1WithRSAEncryption");
   2264          put("Alg.Alias.Signature.SHA-1/RSA", "SHA1WithRSAEncryption");
   2265          put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha1WithRSAEncryption, "SHA1WithRSAEncryption");
   2266 -        put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WithRSAEncryption");
   2267 +        // BEGIN android-removed
   2268 +        // put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha224WithRSAEncryption, "SHA224WithRSAEncryption");
   2269 +        // END android-removed
   2270          put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha256WithRSAEncryption, "SHA256WithRSAEncryption");
   2271          put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha384WithRSAEncryption, "SHA384WithRSAEncryption");
   2272          put("Alg.Alias.Signature." + PKCSObjectIdentifiers.sha512WithRSAEncryption, "SHA512WithRSAEncryption");
   2273          put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.113549.1.1.1", "SHA1WithRSAEncryption");
   2274          put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.113549.1.1.5", "SHA1WithRSAEncryption");
   2275          put("Alg.Alias.Signature.1.2.840.113549.2.5with1.2.840.113549.1.1.1", "MD5WithRSAEncryption");
   2276 -        put("Alg.Alias.Signature.RIPEMD160WithRSA", "RIPEMD160WithRSAEncryption");
   2277 -        put("Alg.Alias.Signature.RIPEMD160withRSA", "RIPEMD160WithRSAEncryption");
   2278 -        put("Alg.Alias.Signature.RIPEMD128WithRSA", "RIPEMD128WithRSAEncryption");
   2279 -        put("Alg.Alias.Signature.RIPEMD128withRSA", "RIPEMD128WithRSAEncryption");
   2280 -        put("Alg.Alias.Signature.RIPEMD256WithRSA", "RIPEMD256WithRSAEncryption");
   2281 -        put("Alg.Alias.Signature.RIPEMD256withRSA", "RIPEMD256WithRSAEncryption");
   2282 -        put("Alg.Alias.Signature.RIPEMD-160/RSA", "RIPEMD160WithRSAEncryption");
   2283 -        put("Alg.Alias.Signature.RMD160withRSA", "RIPEMD160WithRSAEncryption");
   2284 -        put("Alg.Alias.Signature.RMD160/RSA", "RIPEMD160WithRSAEncryption");
   2285 -        put("Alg.Alias.Signature.1.3.36.3.3.1.2", "RIPEMD160WithRSAEncryption");
   2286 -        put("Alg.Alias.Signature.1.3.36.3.3.1.3", "RIPEMD128WithRSAEncryption");
   2287 -        put("Alg.Alias.Signature.1.3.36.3.3.1.4", "RIPEMD256WithRSAEncryption");
   2288 +        // BEGIN android-removed
   2289 +        // put("Alg.Alias.Signature.RIPEMD160WithRSA", "RIPEMD160WithRSAEncryption");
   2290 +        // put("Alg.Alias.Signature.RIPEMD160withRSA", "RIPEMD160WithRSAEncryption");
   2291 +        // put("Alg.Alias.Signature.RIPEMD128WithRSA", "RIPEMD128WithRSAEncryption");
   2292 +        // put("Alg.Alias.Signature.RIPEMD128withRSA", "RIPEMD128WithRSAEncryption");
   2293 +        // put("Alg.Alias.Signature.RIPEMD256WithRSA", "RIPEMD256WithRSAEncryption");
   2294 +        // put("Alg.Alias.Signature.RIPEMD256withRSA", "RIPEMD256WithRSAEncryption");
   2295 +        // put("Alg.Alias.Signature.RIPEMD-160/RSA", "RIPEMD160WithRSAEncryption");
   2296 +        // put("Alg.Alias.Signature.RMD160withRSA", "RIPEMD160WithRSAEncryption");
   2297 +        // put("Alg.Alias.Signature.RMD160/RSA", "RIPEMD160WithRSAEncryption");
   2298 +        // put("Alg.Alias.Signature.1.3.36.3.3.1.2", "RIPEMD160WithRSAEncryption");
   2299 +        // put("Alg.Alias.Signature.1.3.36.3.3.1.3", "RIPEMD128WithRSAEncryption");
   2300 +        // put("Alg.Alias.Signature.1.3.36.3.3.1.4", "RIPEMD256WithRSAEncryption");
   2301 +        // END android-removed
   2302          put("Alg.Alias.Signature." + OIWObjectIdentifiers.sha1WithRSA, "SHA1WithRSAEncryption");
   2303          
   2304 -        put("Alg.Alias.Signature.MD2WITHRSAENCRYPTION", "MD2WithRSAEncryption");
   2305 +        // BEGIN android-removed
   2306 +        // put("Alg.Alias.Signature.MD2WITHRSAENCRYPTION", "MD2WithRSAEncryption");
   2307 +        // END android-removed
   2308          put("Alg.Alias.Signature.MD5WITHRSAENCRYPTION", "MD5WithRSAEncryption");
   2309          put("Alg.Alias.Signature.SHA1WITHRSAENCRYPTION", "SHA1WithRSAEncryption");
   2310 -        put("Alg.Alias.Signature.RIPEMD160WITHRSAENCRYPTION", "RIPEMD160WithRSAEncryption");
   2311 +        // BEGIN android-removed
   2312 +        // put("Alg.Alias.Signature.RIPEMD160WITHRSAENCRYPTION", "RIPEMD160WithRSAEncryption");
   2313 +        // END android-removed
   2314  
   2315          put("Alg.Alias.Signature.MD5WITHRSA", "MD5WithRSAEncryption");
   2316          put("Alg.Alias.Signature.SHA1WITHRSA", "SHA1WithRSAEncryption");
   2317 -        put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
   2318 -        put("Alg.Alias.Signature.RMD160WITHRSA", "RIPEMD160WithRSAEncryption");
   2319 -        put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
   2320 -
   2321 -        addSignatureAlgorithm("SHA224", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
   2322 -        addSignatureAlgorithm("SHA256", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
   2323 -        addSignatureAlgorithm("SHA384", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
   2324 -        addSignatureAlgorithm("SHA512", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
   2325 -
   2326 -        put("Alg.Alias.Signature.SHA/DSA", "DSA");
   2327 -        put("Alg.Alias.Signature.SHA1withDSA", "DSA");
   2328 -        put("Alg.Alias.Signature.SHA1WITHDSA", "DSA");
   2329 -        put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "DSA");
   2330 -        put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "DSA");
   2331 -        put("Alg.Alias.Signature.DSAwithSHA1", "DSA");
   2332 -        put("Alg.Alias.Signature.DSAWITHSHA1", "DSA");
   2333 -        put("Alg.Alias.Signature.SHA1WithDSA", "DSA");
   2334 -        put("Alg.Alias.Signature.DSAWithSHA1", "DSA");
   2335 -        put("Alg.Alias.Signature.1.2.840.10040.4.3", "DSA");
   2336 -        put("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2");
   2337 -        put("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2");
   2338 -        put("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2");
   2339 -        
   2340 -        put("Signature.ECGOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$ecgost3410");
   2341 -        put("Alg.Alias.Signature.ECGOST-3410", "ECGOST3410");
   2342 -        put("Alg.Alias.Signature.GOST-3410-2001", "ECGOST3410");
   2343 -        put("Alg.Alias.Signature.GOST3411withECGOST3410", "ECGOST3410");
   2344 -        put("Alg.Alias.Signature.GOST3411WITHECGOST3410", "ECGOST3410");
   2345 -        put("Alg.Alias.Signature.GOST3411WithECGOST3410", "ECGOST3410");
   2346 -        put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "ECGOST3410");
   2347 -        
   2348 -        put("Signature.GOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$gost3410");
   2349 -        put("Alg.Alias.Signature.GOST-3410", "GOST3410");
   2350 -        put("Alg.Alias.Signature.GOST-3410-94", "GOST3410");
   2351 -        put("Alg.Alias.Signature.GOST3411withGOST3410", "GOST3410");
   2352 -        put("Alg.Alias.Signature.GOST3411WITHGOST3410", "GOST3410");
   2353 -        put("Alg.Alias.Signature.GOST3411WithGOST3410", "GOST3410");
   2354 -        put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3410");
   2355 -    }
   2356 -
   2357 -    private void addSignatureAlgorithm(
   2358 -        String digest,
   2359 -        String algorithm,
   2360 -        String className,
   2361 -        DERObjectIdentifier oid)
   2362 -    {
   2363 -        String mainName = digest + "WITH" + algorithm;
   2364 -        String jdk11Variation1 = digest + "with" + algorithm;
   2365 -        String jdk11Variation2 = digest + "With" + algorithm;
   2366 -        String alias = digest + "/" + algorithm;
   2367 -
   2368 -        put("Signature." + mainName, className);
   2369 -        put("Alg.Alias.Signature." + jdk11Variation1, mainName);
   2370 -        put("Alg.Alias.Signature." + jdk11Variation2, mainName);
   2371 -        put("Alg.Alias.Signature." + alias, mainName);
   2372 -        put("Alg.Alias.Signature." + oid, mainName);
   2373 -        put("Alg.Alias.Signature.OID." + oid, mainName);
   2374 -    }
   2375 +        // BEGIN android-removed
   2376 +        // put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
   2377 +        // put("Alg.Alias.Signature.RMD160WITHRSA", "RIPEMD160WithRSAEncryption");
   2378 +        // put("Alg.Alias.Signature.RIPEMD160WITHRSA", "RIPEMD160WithRSAEncryption");
   2379 +        // END android-removed
   2380 +
   2381 +        // BEGIN android-removed
   2382 +        // addSignatureAlgorithm("SHA224", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa224", NISTObjectIdentifiers.dsa_with_sha224);
   2383 +        // addSignatureAlgorithm("SHA256", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa256", NISTObjectIdentifiers.dsa_with_sha256);
   2384 +        // addSignatureAlgorithm("SHA384", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa384", NISTObjectIdentifiers.dsa_with_sha384);
   2385 +        // addSignatureAlgorithm("SHA512", "DSA", "org.bouncycastle.jce.provider.JDKDSASigner$dsa512", NISTObjectIdentifiers.dsa_with_sha512);
   2386 +        // END android-removed
   2387 +
   2388 +        // BEGIN android-changed
   2389 +        put("Alg.Alias.Signature.SHA/DSA", "SHA1withDSA");
   2390 +        put("Alg.Alias.Signature.DSA", "SHA1withDSA");
   2391 +        put("Alg.Alias.Signature.SHA1WITHDSA", "SHA1withDSA");
   2392 +        put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.1", "SHA1withDSA");
   2393 +        put("Alg.Alias.Signature.1.3.14.3.2.26with1.2.840.10040.4.3", "SHA1withDSA");
   2394 +        put("Alg.Alias.Signature.DSAwithSHA1", "SHA1withDSA");
   2395 +        put("Alg.Alias.Signature.DSAWITHSHA1", "SHA1withDSA");
   2396 +        put("Alg.Alias.Signature.SHA1WithDSA", "SHA1withDSA");
   2397 +        put("Alg.Alias.Signature.DSAWithSHA1", "SHA1withDSA");
   2398 +        put("Alg.Alias.Signature.1.2.840.10040.4.3", "SHA1withDSA");
   2399 +        // END android-changed
   2400 +        // BEGIN android-removed
   2401 +        // put("Alg.Alias.Signature.MD5WithRSA/ISO9796-2", "MD5withRSA/ISO9796-2");
   2402 +        // put("Alg.Alias.Signature.SHA1WithRSA/ISO9796-2", "SHA1withRSA/ISO9796-2");
   2403 +        // put("Alg.Alias.Signature.RIPEMD160WithRSA/ISO9796-2", "RIPEMD160withRSA/ISO9796-2");
   2404 +        //
   2405 +        // put("Signature.ECGOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$ecgost3410");
   2406 +        // put("Alg.Alias.Signature.ECGOST-3410", "ECGOST3410");
   2407 +        // put("Alg.Alias.Signature.GOST-3410-2001", "ECGOST3410");
   2408 +        // put("Alg.Alias.Signature.GOST3411withECGOST3410", "ECGOST3410");
   2409 +        // put("Alg.Alias.Signature.GOST3411WITHECGOST3410", "ECGOST3410");
   2410 +        // put("Alg.Alias.Signature.GOST3411WithECGOST3410", "ECGOST3410");
   2411 +        // put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001, "ECGOST3410");
   2412 +        //
   2413 +        // put("Signature.GOST3410", "org.bouncycastle.jce.provider.JDKGOST3410Signer$gost3410");
   2414 +        // put("Alg.Alias.Signature.GOST-3410", "GOST3410");
   2415 +        // put("Alg.Alias.Signature.GOST-3410-94", "GOST3410");
   2416 +        // put("Alg.Alias.Signature.GOST3411withGOST3410", "GOST3410");
   2417 +        // put("Alg.Alias.Signature.GOST3411WITHGOST3410", "GOST3410");
   2418 +        // put("Alg.Alias.Signature.GOST3411WithGOST3410", "GOST3410");
   2419 +        // put("Alg.Alias.Signature." + CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94, "GOST3410");
   2420 +        // END android-removed
   2421 +    }
   2422 +
   2423 +    // BEGIN android-removed
   2424 +    // private void addSignatureAlgorithm(
   2425 +    //     String digest,
   2426 +    //     String algorithm,
   2427 +    //     String className,
   2428 +    //     DERObjectIdentifier oid)
   2429 +    // {
   2430 +    //     String mainName = digest + "WITH" + algorithm;
   2431 +    //     String jdk11Variation1 = digest + "with" + algorithm;
   2432 +    //     String jdk11Variation2 = digest + "With" + algorithm;
   2433 +    //     String alias = digest + "/" + algorithm;
   2434 +    //
   2435 +    //     put("Signature." + mainName, className);
   2436 +    //     put("Alg.Alias.Signature." + jdk11Variation1, mainName);
   2437 +    //     put("Alg.Alias.Signature." + jdk11Variation2, mainName);
   2438 +    //     put("Alg.Alias.Signature." + alias, mainName);
   2439 +    //     put("Alg.Alias.Signature." + oid, mainName);
   2440 +    //     put("Alg.Alias.Signature.OID." + oid, mainName);
   2441 +    // }
   2442 +    // END android-removed
   2443  
   2444      public void setParameter(String parameterName, Object parameter)
   2445      {
   2446 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java bcprov-jdk16-146/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java
   2447 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java	2011-02-23 20:08:56.000000000 +0000
   2448 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/CertPathValidatorUtilities.java	2011-09-08 21:28:49.000000000 +0000
   2449 @@ -24,6 +24,7 @@
   2450  import java.security.spec.DSAPublicKeySpec;
   2451  import java.text.ParseException;
   2452  import java.util.ArrayList;
   2453 +import java.util.Arrays;
   2454  import java.util.Collection;
   2455  import java.util.Date;
   2456  import java.util.Enumeration;
   2457 @@ -59,13 +60,17 @@
   2458  import org.bouncycastle.asn1.x509.PolicyInformation;
   2459  import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
   2460  import org.bouncycastle.asn1.x509.X509Extensions;
   2461 -import org.bouncycastle.jce.X509LDAPCertStoreParameters;
   2462 +// BEGIN android-removed
   2463 +// import org.bouncycastle.jce.X509LDAPCertStoreParameters;
   2464 +// END android-removed
   2465  import org.bouncycastle.jce.exception.ExtCertPathValidatorException;
   2466  import org.bouncycastle.util.Selector;
   2467  import org.bouncycastle.util.StoreException;
   2468  import org.bouncycastle.x509.ExtendedPKIXBuilderParameters;
   2469  import org.bouncycastle.x509.ExtendedPKIXParameters;
   2470 -import org.bouncycastle.x509.X509AttributeCertStoreSelector;
   2471 +// BEGIN android-removed
   2472 +// import org.bouncycastle.x509.X509AttributeCertStoreSelector;
   2473 +// END android-removed
   2474  import org.bouncycastle.x509.X509AttributeCertificate;
   2475  import org.bouncycastle.x509.X509CRLStoreSelector;
   2476  import org.bouncycastle.x509.X509CertStoreSelector;
   2477 @@ -250,7 +255,9 @@
   2478              {
   2479                  // look for URI
   2480                  List list = (List) it.next();
   2481 -                if (list.get(0).equals(new Integer(GeneralName.uniformResourceIdentifier)))
   2482 +                // BEGIN android-changed
   2483 +                if (list.get(0).equals(Integer.valueOf(GeneralName.uniformResourceIdentifier)))
   2484 +                // END android-changed
   2485                  {
   2486                      // found
   2487                      String temp = (String) list.get(1);
   2488 @@ -660,38 +667,40 @@
   2489          {
   2490              try
   2491              {
   2492 -                if (location.startsWith("ldap://"))
   2493 -                {
   2494 -                    // ldap://directory.d-trust.net/CN=D-TRUST
   2495 -                    // Qualified CA 2003 1:PN,O=D-Trust GmbH,C=DE
   2496 -                    // skip "ldap://"
   2497 -                    location = location.substring(7);
   2498 -                    // after first / baseDN starts
   2499 -                    String base = null;
   2500 -                    String url = null;
   2501 -                    if (location.indexOf("/") != -1)
   2502 -                    {
   2503 -                        base = location.substring(location.indexOf("/"));
   2504 -                        // URL
   2505 -                        url = "ldap://"
   2506 -                            + location.substring(0, location.indexOf("/"));
   2507 -                    }
   2508 -                    else
   2509 -                    {
   2510 -                        url = "ldap://" + location;
   2511 -                    }
   2512 -                    // use all purpose parameters
   2513 -                    X509LDAPCertStoreParameters params = new X509LDAPCertStoreParameters.Builder(
   2514 -                        url, base).build();
   2515 -                    pkixParams.addAdditionalStore(X509Store.getInstance(
   2516 -                        "CERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2517 -                    pkixParams.addAdditionalStore(X509Store.getInstance(
   2518 -                        "CRL/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2519 -                    pkixParams.addAdditionalStore(X509Store.getInstance(
   2520 -                        "ATTRIBUTECERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2521 -                    pkixParams.addAdditionalStore(X509Store.getInstance(
   2522 -                        "CERTIFICATEPAIR/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2523 -                }
   2524 +                // BEGIN android-removed
   2525 +                // if (location.startsWith("ldap://"))
   2526 +                // {
   2527 +                //     // ldap://directory.d-trust.net/CN=D-TRUST
   2528 +                //     // Qualified CA 2003 1:PN,O=D-Trust GmbH,C=DE
   2529 +                //     // skip "ldap://"
   2530 +                //     location = location.substring(7);
   2531 +                //     // after first / baseDN starts
   2532 +                //     String base = null;
   2533 +                //     String url = null;
   2534 +                //     if (location.indexOf("/") != -1)
   2535 +                //     {
   2536 +                //         base = location.substring(location.indexOf("/"));
   2537 +                //         // URL
   2538 +                //         url = "ldap://"
   2539 +                //             + location.substring(0, location.indexOf("/"));
   2540 +                //     }
   2541 +                //     else
   2542 +                //     {
   2543 +                //         url = "ldap://" + location;
   2544 +                //     }
   2545 +                //     // use all purpose parameters
   2546 +                //     X509LDAPCertStoreParameters params = new X509LDAPCertStoreParameters.Builder(
   2547 +                //         url, base).build();
   2548 +                //     pkixParams.addAdditionalStore(X509Store.getInstance(
   2549 +                //         "CERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2550 +                //     pkixParams.addAdditionalStore(X509Store.getInstance(
   2551 +                //         "CRL/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2552 +                //     pkixParams.addAdditionalStore(X509Store.getInstance(
   2553 +                //         "ATTRIBUTECERTIFICATE/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2554 +                //     pkixParams.addAdditionalStore(X509Store.getInstance(
   2555 +                //         "CERTIFICATEPAIR/LDAP", params, BouncyCastleProvider.PROVIDER_NAME));
   2556 +                // }
   2557 +                // END android-removed
   2558              }
   2559              catch (Exception e)
   2560              {
   2561 @@ -758,35 +767,37 @@
   2562          return certs;
   2563      }
   2564  
   2565 -    protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect,
   2566 -                                                 List certStores)
   2567 -    throws AnnotatedException
   2568 -    {
   2569 -        Set certs = new HashSet();
   2570 -        Iterator iter = certStores.iterator();
   2571 -
   2572 -        while (iter.hasNext())
   2573 -        {
   2574 -            Object obj = iter.next();
   2575 -
   2576 -            if (obj instanceof X509Store)
   2577 -            {
   2578 -                X509Store certStore = (X509Store)obj;
   2579 -                try
   2580 -                {
   2581 -                    certs.addAll(certStore.getMatches(certSelect));
   2582 -                }
   2583 -                catch (StoreException e)
   2584 -                {
   2585 -                    throw
   2586 -
   2587 -                        new AnnotatedException(
   2588 -                            "Problem while picking certificates from X.509 store.", e);
   2589 -                }
   2590 -            }
   2591 -        }
   2592 -        return certs;
   2593 -    }
   2594 +    // BEGIN android-removed
   2595 +    // protected static Collection findCertificates(X509AttributeCertStoreSelector certSelect,
   2596 +    //                                              List certStores)
   2597 +    // throws AnnotatedException
   2598 +    // {
   2599 +    //     Set certs = new HashSet();
   2600 +    //     Iterator iter = certStores.iterator();
   2601 +    //
   2602 +    //     while (iter.hasNext())
   2603 +    //     {
   2604 +    //         Object obj = iter.next();
   2605 +    //
   2606 +    //         if (obj instanceof X509Store)
   2607 +    //         {
   2608 +    //             X509Store certStore = (X509Store)obj;
   2609 +    //             try
   2610 +    //             {
   2611 +    //                 certs.addAll(certStore.getMatches(certSelect));
   2612 +    //             }
   2613 +    //             catch (StoreException e)
   2614 +    //             {
   2615 +    //                 throw
   2616 +    //
   2617 +    //                     new AnnotatedException(
   2618 +    //                         "Problem while picking certificates from X.509 store.", e);
   2619 +    //             }
   2620 +    //         }
   2621 +    //     }
   2622 +    //     return certs;
   2623 +    // }
   2624 +    // END android-removed
   2625  
   2626      protected static void addAdditionalStoresFromCRLDistributionPoint(
   2627          CRLDistPoint crldp, ExtendedPKIXParameters pkixParams)
   2628 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEBlockCipher.java
   2629 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEBlockCipher.java	2011-02-23 20:08:56.000000000 +0000
   2630 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEBlockCipher.java	2011-09-08 21:28:49.000000000 +0000
   2631 @@ -17,8 +17,10 @@
   2632  import javax.crypto.ShortBufferException;
   2633  import javax.crypto.spec.IvParameterSpec;
   2634  import javax.crypto.spec.PBEParameterSpec;
   2635 -import javax.crypto.spec.RC2ParameterSpec;
   2636 -import javax.crypto.spec.RC5ParameterSpec;
   2637 +// BEGIN android-removed
   2638 +// import javax.crypto.spec.RC2ParameterSpec;
   2639 +// import javax.crypto.spec.RC5ParameterSpec;
   2640 +// END android-removed
   2641  
   2642  import org.bouncycastle.crypto.BlockCipher;
   2643  import org.bouncycastle.crypto.BufferedBlockCipher;
   2644 @@ -28,7 +30,9 @@
   2645  import org.bouncycastle.crypto.engines.AESFastEngine;
   2646  import org.bouncycastle.crypto.engines.DESEngine;
   2647  import org.bouncycastle.crypto.engines.DESedeEngine;
   2648 -import org.bouncycastle.crypto.engines.GOST28147Engine;
   2649 +// BEGIN android-removed
   2650 +// import org.bouncycastle.crypto.engines.GOST28147Engine;
   2651 +// END android-removed
   2652  import org.bouncycastle.crypto.engines.RC2Engine;
   2653  import org.bouncycastle.crypto.engines.TwofishEngine;
   2654  import org.bouncycastle.crypto.modes.AEADBlockCipher;
   2655 @@ -36,12 +40,16 @@
   2656  import org.bouncycastle.crypto.modes.CCMBlockCipher;
   2657  import org.bouncycastle.crypto.modes.CFBBlockCipher;
   2658  import org.bouncycastle.crypto.modes.CTSBlockCipher;
   2659 -import org.bouncycastle.crypto.modes.EAXBlockCipher;
   2660 +// BEGIN android-removed
   2661 +// import org.bouncycastle.crypto.modes.EAXBlockCipher;
   2662 +// END android-removed
   2663  import org.bouncycastle.crypto.modes.GCMBlockCipher;
   2664  import org.bouncycastle.crypto.modes.GOFBBlockCipher;
   2665  import org.bouncycastle.crypto.modes.OFBBlockCipher;
   2666 -import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher;
   2667 -import org.bouncycastle.crypto.modes.PGPCFBBlockCipher;
   2668 +// BEGIN android-removed
   2669 +// import org.bouncycastle.crypto.modes.OpenPGPCFBBlockCipher;
   2670 +// import org.bouncycastle.crypto.modes.PGPCFBBlockCipher;
   2671 +// END android-removed
   2672  import org.bouncycastle.crypto.modes.SICBlockCipher;
   2673  import org.bouncycastle.crypto.paddings.BlockCipherPadding;
   2674  import org.bouncycastle.crypto.paddings.ISO10126d2Padding;
   2675 @@ -53,10 +61,12 @@
   2676  import org.bouncycastle.crypto.params.KeyParameter;
   2677  import org.bouncycastle.crypto.params.ParametersWithIV;
   2678  import org.bouncycastle.crypto.params.ParametersWithRandom;
   2679 -import org.bouncycastle.crypto.params.ParametersWithSBox;
   2680 -import org.bouncycastle.crypto.params.RC2Parameters;
   2681 -import org.bouncycastle.crypto.params.RC5Parameters;
   2682 -import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
   2683 +// BEGIN android-removed
   2684 +// import org.bouncycastle.crypto.params.ParametersWithSBox;
   2685 +// import org.bouncycastle.crypto.params.RC2Parameters;
   2686 +// import org.bouncycastle.crypto.params.RC5Parameters;
   2687 +// import org.bouncycastle.jce.spec.GOST28147ParameterSpec;
   2688 +// END android-removed
   2689  import org.bouncycastle.util.Strings;
   2690  
   2691  public class JCEBlockCipher extends WrapCipherSpi
   2692 @@ -67,11 +77,15 @@
   2693      //
   2694      private Class[]                 availableSpecs =
   2695                                      {
   2696 -                                        RC2ParameterSpec.class,
   2697 -                                        RC5ParameterSpec.class,
   2698 +                                        // BEGIN android-removed
   2699 +                                        // RC2ParameterSpec.class,
   2700 +                                        // RC5ParameterSpec.class,
   2701 +                                        // END android-removed
   2702                                          IvParameterSpec.class,
   2703                                          PBEParameterSpec.class,
   2704 -                                        GOST28147ParameterSpec.class
   2705 +                                        // BEGIN android-removed
   2706 +                                        // GOST28147ParameterSpec.class
   2707 +                                        // END android-removed
   2708                                      };
   2709   
   2710      private BlockCipher             baseEngine;
   2711 @@ -226,20 +240,22 @@
   2712                          new CFBBlockCipher(baseEngine, 8 * baseEngine.getBlockSize()));
   2713              }
   2714          }
   2715 -        else if (modeName.startsWith("PGP"))
   2716 -        {
   2717 -            boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV");
   2718 -
   2719 -            ivLength = baseEngine.getBlockSize();
   2720 -            cipher = new BufferedGenericBlockCipher(
   2721 -                new PGPCFBBlockCipher(baseEngine, inlineIV));
   2722 -        }
   2723 -        else if (modeName.equalsIgnoreCase("OpenPGPCFB"))
   2724 -        {
   2725 -            ivLength = 0;
   2726 -            cipher = new BufferedGenericBlockCipher(
   2727 -                new OpenPGPCFBBlockCipher(baseEngine));
   2728 -        }
   2729 +        // BEGIN android-removed
   2730 +        // else if (modeName.startsWith("PGP"))
   2731 +        // {
   2732 +        //     boolean inlineIV = modeName.equalsIgnoreCase("PGPCFBwithIV");
   2733 +        //
   2734 +        //     ivLength = baseEngine.getBlockSize();
   2735 +        //     cipher = new BufferedGenericBlockCipher(
   2736 +        //         new PGPCFBBlockCipher(baseEngine, inlineIV));
   2737 +        // }
   2738 +        // else if (modeName.equalsIgnoreCase("OpenPGPCFB"))
   2739 +        // {
   2740 +        //     ivLength = 0;
   2741 +        //     cipher = new BufferedGenericBlockCipher(
   2742 +        //         new OpenPGPCFBBlockCipher(baseEngine));
   2743 +        // }
   2744 +        // END android-removed
   2745          else if (modeName.startsWith("SIC"))
   2746          {
   2747              ivLength = baseEngine.getBlockSize();
   2748 @@ -272,11 +288,13 @@
   2749              ivLength = baseEngine.getBlockSize();
   2750              cipher = new AEADGenericBlockCipher(new CCMBlockCipher(baseEngine));
   2751          }
   2752 -        else if (modeName.startsWith("EAX"))
   2753 -        {
   2754 -            ivLength = baseEngine.getBlockSize();
   2755 -            cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine));
   2756 -        }
   2757 +        // BEGIN android-removed
   2758 +        // else if (modeName.startsWith("EAX"))
   2759 +        // {
   2760 +        //     ivLength = baseEngine.getBlockSize();
   2761 +        //     cipher = new AEADGenericBlockCipher(new EAXBlockCipher(baseEngine));
   2762 +        // }
   2763 +        // END android-removed
   2764          else if (modeName.startsWith("GCM"))
   2765          {
   2766              ivLength = baseEngine.getBlockSize();
   2767 @@ -365,13 +383,15 @@
   2768              throw new InvalidKeyException("Key for algorithm " + key.getAlgorithm() + " not suitable for symmetric enryption.");
   2769          }
   2770          
   2771 -        //
   2772 -        // for RC5-64 we must have some default parameters
   2773 -        //
   2774 -        if (params == null && baseEngine.getAlgorithmName().startsWith("RC5-64"))
   2775 -        {
   2776 -            throw new InvalidAlgorithmParameterException("RC5 requires an RC5ParametersSpec to be passed in.");
   2777 -        }
   2778 +        // BEGIN android-removed
   2779 +        // //
   2780 +        // // for RC5-64 we must have some default parameters
   2781 +        // //
   2782 +        // if (params == null && baseEngine.getAlgorithmName().startsWith("RC5-64"))
   2783 +        // {
   2784 +        //     throw new InvalidAlgorithmParameterException("RC5 requires an RC5ParametersSpec to be passed in.");
   2785 +        // }
   2786 +        // END android-removed
   2787  
   2788          //
   2789          // a note on iv's - if ivLength is zero the IV gets ignored (we don't use it).
   2790 @@ -437,63 +457,65 @@
   2791                  param = new KeyParameter(key.getEncoded());
   2792              }
   2793          }
   2794 -        else if (params instanceof GOST28147ParameterSpec)
   2795 -        {
   2796 -            GOST28147ParameterSpec    gost28147Param = (GOST28147ParameterSpec)params;
   2797 -
   2798 -            param = new ParametersWithSBox(
   2799 -                       new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox());
   2800 -
   2801 -            if (gost28147Param.getIV() != null && ivLength != 0)
   2802 -            {
   2803 -                param = new ParametersWithIV(param, gost28147Param.getIV());
   2804 -                ivParam = (ParametersWithIV)param;
   2805 -            }
   2806 -        }
   2807 -        else if (params instanceof RC2ParameterSpec)
   2808 -        {
   2809 -            RC2ParameterSpec    rc2Param = (RC2ParameterSpec)params;
   2810 -
   2811 -            param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits());
   2812 -
   2813 -            if (rc2Param.getIV() != null && ivLength != 0)
   2814 -            {
   2815 -                param = new ParametersWithIV(param, rc2Param.getIV());
   2816 -                ivParam = (ParametersWithIV)param;
   2817 -            }
   2818 -        }
   2819 -        else if (params instanceof RC5ParameterSpec)
   2820 -        {
   2821 -            RC5ParameterSpec    rc5Param = (RC5ParameterSpec)params;
   2822 -
   2823 -            param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds());
   2824 -            if (baseEngine.getAlgorithmName().startsWith("RC5"))
   2825 -            {
   2826 -                if (baseEngine.getAlgorithmName().equals("RC5-32"))
   2827 -                {
   2828 -                    if (rc5Param.getWordSize() != 32)
   2829 -                    {
   2830 -                        throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + ".");
   2831 -                    }
   2832 -                }
   2833 -                else if (baseEngine.getAlgorithmName().equals("RC5-64"))
   2834 -                {
   2835 -                    if (rc5Param.getWordSize() != 64)
   2836 -                    {
   2837 -                        throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + ".");
   2838 -                    }
   2839 -                }
   2840 -            }
   2841 -            else
   2842 -            {
   2843 -                throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5.");
   2844 -            }
   2845 -            if ((rc5Param.getIV() != null) && (ivLength != 0))
   2846 -            {
   2847 -                param = new ParametersWithIV(param, rc5Param.getIV());
   2848 -                ivParam = (ParametersWithIV)param;
   2849 -            }
   2850 -        }
   2851 +        // BEGIN android-removed
   2852 +        // else if (params instanceof GOST28147ParameterSpec)
   2853 +        // {
   2854 +        //     GOST28147ParameterSpec    gost28147Param = (GOST28147ParameterSpec)params;
   2855 +        //
   2856 +        //     param = new ParametersWithSBox(
   2857 +        //                new KeyParameter(key.getEncoded()), ((GOST28147ParameterSpec)params).getSbox());
   2858 +        //
   2859 +        //     if (gost28147Param.getIV() != null && ivLength != 0)
   2860 +        //     {
   2861 +        //         param = new ParametersWithIV(param, gost28147Param.getIV());
   2862 +        //         ivParam = (ParametersWithIV)param;
   2863 +        //     }
   2864 +        // }
   2865 +        // else if (params instanceof RC2ParameterSpec)
   2866 +        // {
   2867 +        //     RC2ParameterSpec    rc2Param = (RC2ParameterSpec)params;
   2868 +        //
   2869 +        //     param = new RC2Parameters(key.getEncoded(), ((RC2ParameterSpec)params).getEffectiveKeyBits());
   2870 +        //
   2871 +        //     if (rc2Param.getIV() != null && ivLength != 0)
   2872 +        //     {
   2873 +        //         param = new ParametersWithIV(param, rc2Param.getIV());
   2874 +        //         ivParam = (ParametersWithIV)param;
   2875 +        //     }
   2876 +        // }
   2877 +        // else if (params instanceof RC5ParameterSpec)
   2878 +        // {
   2879 +        //     RC5ParameterSpec    rc5Param = (RC5ParameterSpec)params;
   2880 +        //
   2881 +        //     param = new RC5Parameters(key.getEncoded(), ((RC5ParameterSpec)params).getRounds());
   2882 +        //     if (baseEngine.getAlgorithmName().startsWith("RC5"))
   2883 +        //     {
   2884 +        //         if (baseEngine.getAlgorithmName().equals("RC5-32"))
   2885 +        //         {
   2886 +        //             if (rc5Param.getWordSize() != 32)
   2887 +        //             {
   2888 +        //                 throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 32 not " + rc5Param.getWordSize() + ".");
   2889 +        //             }
   2890 +        //         }
   2891 +        //         else if (baseEngine.getAlgorithmName().equals("RC5-64"))
   2892 +        //         {
   2893 +        //             if (rc5Param.getWordSize() != 64)
   2894 +        //             {
   2895 +        //                 throw new InvalidAlgorithmParameterException("RC5 already set up for a word size of 64 not " + rc5Param.getWordSize() + ".");
   2896 +        //             }
   2897 +        //         }
   2898 +        //     }
   2899 +        //     else
   2900 +        //     {
   2901 +        //         throw new InvalidAlgorithmParameterException("RC5 parameters passed to a cipher that is not RC5.");
   2902 +        //     }
   2903 +        //     if ((rc5Param.getIV() != null) && (ivLength != 0))
   2904 +        //     {
   2905 +        //         param = new ParametersWithIV(param, rc5Param.getIV());
   2906 +        //         ivParam = (ParametersWithIV)param;
   2907 +        //     }
   2908 +        // }
   2909 +        // END android-removed
   2910          else
   2911          {
   2912              throw new InvalidAlgorithmParameterException("unknown parameter type.");
   2913 @@ -697,10 +719,21 @@
   2914          int     inputLen,
   2915          byte[]  output,
   2916          int     outputOffset) 
   2917 -        throws IllegalBlockSizeException, BadPaddingException
   2918 +        throws IllegalBlockSizeException, BadPaddingException, ShortBufferException
   2919      {
   2920 +        // BEGIN android-note
   2921 +        // added ShortBufferException to the throws statement
   2922 +        // END android-note
   2923          int     len = 0;
   2924  
   2925 +        // BEGIN android-added
   2926 +        int outputLen = cipher.getOutputSize(inputLen);
   2927 +
   2928 +        if (outputLen + outputOffset > output.length) {
   2929 +            throw new ShortBufferException("need at least " + outputLen + " bytes");
   2930 +        }
   2931 +        // BEGIN android-added
   2932 +
   2933          if (inputLen != 0)
   2934          {
   2935                  len = cipher.processBytes(input, inputOffset, inputLen, output, outputOffset);
   2936 @@ -742,62 +775,64 @@
   2937          }
   2938      }
   2939  
   2940 -    /**
   2941 -     * DESCBC
   2942 -     */
   2943 -    static public class DESCBC
   2944 -        extends JCEBlockCipher
   2945 -    {
   2946 -        public DESCBC()
   2947 -        {
   2948 -            super(new CBCBlockCipher(new DESEngine()), 64);
   2949 -        }
   2950 -    }
   2951 -
   2952 -    /**
   2953 -     *  GOST28147
   2954 -     */
   2955 -    static public class GOST28147
   2956 -        extends JCEBlockCipher
   2957 -    {
   2958 -        public GOST28147()
   2959 -        {
   2960 -            super(new GOST28147Engine());
   2961 -        }
   2962 -    }
   2963 -    
   2964 -    static public class GOST28147cbc
   2965 -        extends JCEBlockCipher
   2966 -    {
   2967 -        public GOST28147cbc()
   2968 -        {
   2969 -            super(new CBCBlockCipher(new GOST28147Engine()), 64);
   2970 -        }
   2971 -    }
   2972 -
   2973 -    /**
   2974 -     * RC2
   2975 -     */
   2976 -    static public class RC2
   2977 -        extends JCEBlockCipher
   2978 -    {
   2979 -        public RC2()
   2980 -        {
   2981 -            super(new RC2Engine());
   2982 -        }
   2983 -    }
   2984 -
   2985 -    /**
   2986 -     * RC2CBC
   2987 -     */
   2988 -    static public class RC2CBC
   2989 -        extends JCEBlockCipher
   2990 -    {
   2991 -        public RC2CBC()
   2992 -        {
   2993 -            super(new CBCBlockCipher(new RC2Engine()), 64);
   2994 -        }
   2995 -    }
   2996 +    // BEGIN android-removed
   2997 +    // /**
   2998 +    //  * DESCBC
   2999 +    //  */
   3000 +    // static public class DESCBC
   3001 +    //     extends JCEBlockCipher
   3002 +    // {
   3003 +    //     public DESCBC()
   3004 +    //     {
   3005 +    //         super(new CBCBlockCipher(new DESEngine()), 64);
   3006 +    //     }
   3007 +    // }
   3008 +    //
   3009 +    // /**
   3010 +    //  *  GOST28147
   3011 +    //  */
   3012 +    // static public class GOST28147
   3013 +    //     extends JCEBlockCipher
   3014 +    // {
   3015 +    //     public GOST28147()
   3016 +    //     {
   3017 +    //         super(new GOST28147Engine());
   3018 +    //     }
   3019 +    // }
   3020 +    //
   3021 +    // static public class GOST28147cbc
   3022 +    //     extends JCEBlockCipher
   3023 +    // {
   3024 +    //     public GOST28147cbc()
   3025 +    //     {
   3026 +    //         super(new CBCBlockCipher(new GOST28147Engine()), 64);
   3027 +    //     }
   3028 +    // }
   3029 +    //
   3030 +    // /**
   3031 +    //  * RC2
   3032 +    //  */
   3033 +    // static public class RC2
   3034 +    //     extends JCEBlockCipher
   3035 +    // {
   3036 +    //     public RC2()
   3037 +    //     {
   3038 +    //         super(new RC2Engine());
   3039 +    //     }
   3040 +    // }
   3041 +    //
   3042 +    // /**
   3043 +    //  * RC2CBC
   3044 +    //  */
   3045 +    // static public class RC2CBC
   3046 +    //     extends JCEBlockCipher
   3047 +    // {
   3048 +    //     public RC2CBC()
   3049 +    //     {
   3050 +    //         super(new CBCBlockCipher(new RC2Engine()), 64);
   3051 +    //     }
   3052 +    // }
   3053 +    // END android-removed
   3054  
   3055      /**
   3056       * PBEWithMD5AndDES
   3057 @@ -822,7 +857,7 @@
   3058              super(new CBCBlockCipher(new RC2Engine()));
   3059          }
   3060      }
   3061 -
   3062 +    
   3063      /**
   3064       * PBEWithSHA1AndDES
   3065       */
   3066 @@ -870,7 +905,7 @@
   3067              super(new CBCBlockCipher(new DESedeEngine()));
   3068          }
   3069      }
   3070 -
   3071 +    
   3072      /**
   3073       * PBEWithSHAAnd128BitRC2-CBC
   3074       */
   3075 @@ -894,7 +929,7 @@
   3076              super(new CBCBlockCipher(new RC2Engine()));
   3077          }
   3078      }
   3079 -
   3080 +    
   3081      /**
   3082       * PBEWithSHAAndTwofish-CBC
   3083       */
   3084 @@ -906,7 +941,7 @@
   3085              super(new CBCBlockCipher(new TwofishEngine()));
   3086          }
   3087      }
   3088 -
   3089 +    
   3090      /**
   3091       * PBEWithAES-CBC
   3092       */
   3093 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java
   3094 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java	2011-02-23 20:08:56.000000000 +0000
   3095 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDHKeyAgreement.java	2011-09-08 21:28:49.000000000 +0000
   3096 @@ -36,10 +36,12 @@
   3097  
   3098      static
   3099      {
   3100 -        Integer i64 = new Integer(64);
   3101 -        Integer i192 = new Integer(192);
   3102 -        Integer i128 = new Integer(128);
   3103 -        Integer i256 = new Integer(256);
   3104 +        // BEGIN android-changed
   3105 +        Integer i64 = Integer.valueOf(64);
   3106 +        Integer i192 = Integer.valueOf(192);
   3107 +        Integer i128 = Integer.valueOf(128);
   3108 +        Integer i256 = Integer.valueOf(256);
   3109 +        // END android-changed
   3110  
   3111          algorithms.put("DES", i64);
   3112          algorithms.put("DESEDE", i192);
   3113 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDigestUtil.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDigestUtil.java
   3114 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEDigestUtil.java	2011-02-23 20:08:56.000000000 +0000
   3115 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEDigestUtil.java	2011-09-08 21:28:49.000000000 +0000
   3116 @@ -12,7 +12,9 @@
   3117  import org.bouncycastle.crypto.Digest;
   3118  import org.bouncycastle.crypto.digests.MD5Digest;
   3119  import org.bouncycastle.crypto.digests.SHA1Digest;
   3120 -import org.bouncycastle.crypto.digests.SHA224Digest;
   3121 +// BEGIN android-removed
   3122 +// import org.bouncycastle.crypto.digests.SHA224Digest;
   3123 +// END android-removed
   3124  import org.bouncycastle.crypto.digests.SHA256Digest;
   3125  import org.bouncycastle.crypto.digests.SHA384Digest;
   3126  import org.bouncycastle.crypto.digests.SHA512Digest;
   3127 @@ -22,7 +24,9 @@
   3128  {
   3129      private static Set md5 = new HashSet();
   3130      private static Set sha1 = new HashSet();
   3131 -    private static Set sha224 = new HashSet();
   3132 +    // BEGIN android-removed
   3133 +    // private static Set sha224 = new HashSet();
   3134 +    // END android-removed
   3135      private static Set sha256 = new HashSet();
   3136      private static Set sha384 = new HashSet();
   3137      private static Set sha512 = new HashSet();
   3138 @@ -38,9 +42,11 @@
   3139          sha1.add("SHA-1");
   3140          sha1.add(OIWObjectIdentifiers.idSHA1.getId());
   3141          
   3142 -        sha224.add("SHA224");
   3143 -        sha224.add("SHA-224");
   3144 -        sha224.add(NISTObjectIdentifiers.id_sha224.getId());
   3145 +        // BEGIN android-removed
   3146 +        // sha224.add("SHA224");
   3147 +        // sha224.add("SHA-224");
   3148 +        // sha224.add(NISTObjectIdentifiers.id_sha224.getId());
   3149 +        // END android-removed
   3150          
   3151          sha256.add("SHA256");
   3152          sha256.add("SHA-256");
   3153 @@ -61,9 +67,11 @@
   3154          oids.put("SHA-1", OIWObjectIdentifiers.idSHA1);
   3155          oids.put(OIWObjectIdentifiers.idSHA1.getId(), OIWObjectIdentifiers.idSHA1);
   3156          
   3157 -        oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
   3158 -        oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
   3159 -        oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
   3160 +        // BEGIN android-removed
   3161 +        // oids.put("SHA224", NISTObjectIdentifiers.id_sha224);
   3162 +        // oids.put("SHA-224", NISTObjectIdentifiers.id_sha224);
   3163 +        // oids.put(NISTObjectIdentifiers.id_sha224.getId(), NISTObjectIdentifiers.id_sha224);
   3164 +        // END android-removed
   3165          
   3166          oids.put("SHA256", NISTObjectIdentifiers.id_sha256);
   3167          oids.put("SHA-256", NISTObjectIdentifiers.id_sha256);
   3168 @@ -91,10 +99,12 @@
   3169          {
   3170              return new MD5Digest();
   3171          }
   3172 -        if (sha224.contains(digestName))
   3173 -        {
   3174 -            return new SHA224Digest();
   3175 -        }
   3176 +        // BEGIN android-removed
   3177 +        // if (sha224.contains(digestName))
   3178 +        // {
   3179 +        //     return new SHA224Digest();
   3180 +        // }
   3181 +        // END android-removed
   3182          if (sha256.contains(digestName))
   3183          {
   3184              return new SHA256Digest();
   3185 @@ -116,7 +126,9 @@
   3186          String digest2)
   3187      {
   3188          return (sha1.contains(digest1) && sha1.contains(digest2))
   3189 -            || (sha224.contains(digest1) && sha224.contains(digest2))
   3190 +            // BEGIN android-removed
   3191 +            // || (sha224.contains(digest1) && sha224.contains(digest2))
   3192 +            // END android-removed
   3193              || (sha256.contains(digest1) && sha256.contains(digest2))
   3194              || (sha384.contains(digest1) && sha384.contains(digest2))
   3195              || (sha512.contains(digest1) && sha512.contains(digest2))
   3196 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPrivateKey.java
   3197 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPrivateKey.java	2011-02-23 20:08:56.000000000 +0000
   3198 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPrivateKey.java	2011-09-08 21:28:49.000000000 +0000
   3199 @@ -20,7 +20,9 @@
   3200  import org.bouncycastle.asn1.DERObject;
   3201  import org.bouncycastle.asn1.DERObjectIdentifier;
   3202  import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
   3203 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   3204 +// BEGIN android-removed
   3205 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   3206 +// END android-removed
   3207  import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
   3208  import org.bouncycastle.asn1.sec.ECPrivateKeyStructure;
   3209  import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
   3210 @@ -199,21 +201,23 @@
   3211              DERObjectIdentifier oid = (DERObjectIdentifier)params.getParameters();
   3212              X9ECParameters ecP = ECUtil.getNamedCurveByOid(oid);
   3213  
   3214 -            if (ecP == null) // GOST Curve
   3215 -            {
   3216 -                ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid);
   3217 -                EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed());
   3218 -
   3219 -                ecSpec = new ECNamedCurveSpec(
   3220 -                        ECGOST3410NamedCurves.getName(oid),
   3221 -                        ellipticCurve,
   3222 -                        new ECPoint(
   3223 -                                gParam.getG().getX().toBigInteger(),
   3224 -                                gParam.getG().getY().toBigInteger()),
   3225 -                        gParam.getN(),
   3226 -                        gParam.getH());
   3227 -            }
   3228 -            else
   3229 +            // BEGIN android-removed
   3230 +            // if (ecP == null) // GOST Curve
   3231 +            // {
   3232 +            //     ECDomainParameters gParam = ECGOST3410NamedCurves.getByOID(oid);
   3233 +            //     EllipticCurve ellipticCurve = EC5Util.convertCurve(gParam.getCurve(), gParam.getSeed());
   3234 +            //
   3235 +            //     ecSpec = new ECNamedCurveSpec(
   3236 +            //             ECGOST3410NamedCurves.getName(oid),
   3237 +            //             ellipticCurve,
   3238 +            //             new ECPoint(
   3239 +            //                     gParam.getG().getX().toBigInteger(),
   3240 +            //                     gParam.getG().getY().toBigInteger()),
   3241 +            //             gParam.getN(),
   3242 +            //             gParam.getH());
   3243 +            // }
   3244 +            // else
   3245 +            // END android-removed
   3246              {
   3247                  EllipticCurve ellipticCurve = EC5Util.convertCurve(ecP.getCurve(), ecP.getSeed());
   3248  
   3249 @@ -324,11 +328,13 @@
   3250              keyStructure = new ECPrivateKeyStructure(this.getS(), params);
   3251          }
   3252  
   3253 -        if (algorithm.equals("ECGOST3410"))
   3254 -        {
   3255 -            info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), keyStructure.getDERObject());
   3256 -        }
   3257 -        else
   3258 +        // BEGIN android-removed
   3259 +        // if (algorithm.equals("ECGOST3410"))
   3260 +        // {
   3261 +        //     info = new PrivateKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), keyStructure.getDERObject());
   3262 +        // }
   3263 +        // else
   3264 +        // END android-removed
   3265          {
   3266  
   3267              info = new PrivateKeyInfo(new AlgorithmIdentifier(X9ObjectIdentifiers.id_ecPublicKey, params.getDERObject()), keyStructure.getDERObject());
   3268 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPublicKey.java
   3269 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEECPublicKey.java	2011-02-23 20:08:56.000000000 +0000
   3270 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEECPublicKey.java	2011-09-08 21:28:49.000000000 +0000
   3271 @@ -20,8 +20,10 @@
   3272  import org.bouncycastle.asn1.DERObjectIdentifier;
   3273  import org.bouncycastle.asn1.DEROctetString;
   3274  import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
   3275 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   3276 -import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
   3277 +// BEGIN android-removed
   3278 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   3279 +// import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
   3280 +// END android-removed
   3281  import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
   3282  import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
   3283  import org.bouncycastle.asn1.x9.X962Parameters;
   3284 @@ -31,11 +33,15 @@
   3285  import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
   3286  import org.bouncycastle.crypto.params.ECDomainParameters;
   3287  import org.bouncycastle.crypto.params.ECPublicKeyParameters;
   3288 -import org.bouncycastle.jce.ECGOST3410NamedCurveTable;
   3289 +// BEGIN android-removed
   3290 +// import org.bouncycastle.jce.ECGOST3410NamedCurveTable;
   3291 +// END android-removed
   3292  import org.bouncycastle.jce.interfaces.ECPointEncoder;
   3293  import org.bouncycastle.jce.provider.asymmetric.ec.EC5Util;
   3294  import org.bouncycastle.jce.provider.asymmetric.ec.ECUtil;
   3295 -import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
   3296 +// BEGIN android-removed
   3297 +// import org.bouncycastle.jce.spec.ECNamedCurveParameterSpec;
   3298 +// END android-removed
   3299  import org.bouncycastle.jce.spec.ECNamedCurveSpec;
   3300  import org.bouncycastle.math.ec.ECCurve;
   3301  
   3302 @@ -46,7 +52,9 @@
   3303      private org.bouncycastle.math.ec.ECPoint q;
   3304      private ECParameterSpec         ecSpec;
   3305      private boolean                 withCompression;
   3306 -    private GOST3410PublicKeyAlgParameters       gostParams;
   3307 +    // BEGIN android-removed
   3308 +    // private GOST3410PublicKeyAlgParameters       gostParams;
   3309 +    // END android-removed
   3310  
   3311      public JCEECPublicKey(
   3312          String              algorithm,
   3313 @@ -56,7 +64,9 @@
   3314          this.q = key.q;
   3315          this.ecSpec = key.ecSpec;
   3316          this.withCompression = key.withCompression;
   3317 -        this.gostParams = key.gostParams;
   3318 +        // BEGIN android-removed
   3319 +        // this.gostParams = key.gostParams;
   3320 +        // END android-removed
   3321      }
   3322      
   3323      public JCEECPublicKey(
   3324 @@ -179,54 +189,56 @@
   3325  
   3326      private void populateFromPubKeyInfo(SubjectPublicKeyInfo info)
   3327      {
   3328 -        if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001))
   3329 -        {
   3330 -            DERBitString bits = info.getPublicKeyData();
   3331 -            ASN1OctetString key;
   3332 -            this.algorithm = "ECGOST3410";
   3333 -
   3334 -            try
   3335 -            {
   3336 -                key = (ASN1OctetString) ASN1Object.fromByteArray(bits.getBytes());
   3337 -            }
   3338 -            catch (IOException ex)
   3339 -            {
   3340 -                throw new IllegalArgumentException("error recovering public key");
   3341 -            }
   3342 -
   3343 -            byte[]          keyEnc = key.getOctets();
   3344 -            byte[]          x = new byte[32];
   3345 -            byte[]          y = new byte[32];
   3346 -
   3347 -            for (int i = 0; i != x.length; i++)
   3348 -            {
   3349 -                x[i] = keyEnc[32 - 1 - i];
   3350 -            }
   3351 -
   3352 -            for (int i = 0; i != y.length; i++)
   3353 -            {
   3354 -                y[i] = keyEnc[64 - 1 - i];
   3355 -            }
   3356 -
   3357 -            gostParams = new GOST3410PublicKeyAlgParameters((ASN1Sequence)info.getAlgorithmId().getParameters());
   3358 -
   3359 -            ECNamedCurveParameterSpec spec = ECGOST3410NamedCurveTable.getParameterSpec(ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()));
   3360 -
   3361 -            ECCurve curve = spec.getCurve();
   3362 -            EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed());
   3363 -
   3364 -            this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false);
   3365 -
   3366 -            ecSpec = new ECNamedCurveSpec(
   3367 -                    ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()),
   3368 -                    ellipticCurve,
   3369 -                    new ECPoint(
   3370 -                            spec.getG().getX().toBigInteger(),
   3371 -                            spec.getG().getY().toBigInteger()),
   3372 -                            spec.getN(), spec.getH());
   3373 -
   3374 -        }
   3375 -        else
   3376 +        // BEGIN android-removed
   3377 +        // if (info.getAlgorithmId().getObjectId().equals(CryptoProObjectIdentifiers.gostR3410_2001))
   3378 +        // {
   3379 +        //     DERBitString bits = info.getPublicKeyData();
   3380 +        //     ASN1OctetString key;
   3381 +        //     this.algorithm = "ECGOST3410";
   3382 +        //
   3383 +        //     try
   3384 +        //     {
   3385 +        //         key = (ASN1OctetString) ASN1Object.fromByteArray(bits.getBytes());
   3386 +        //     }
   3387 +        //     catch (IOException ex)
   3388 +        //     {
   3389 +        //         throw new IllegalArgumentException("error recovering public key");
   3390 +        //     }
   3391 +        //
   3392 +        //     byte[]          keyEnc = key.getOctets();
   3393 +        //     byte[]          x = new byte[32];
   3394 +        //     byte[]          y = new byte[32];
   3395 +        //
   3396 +        //     for (int i = 0; i != x.length; i++)
   3397 +        //     {
   3398 +        //         x[i] = keyEnc[32 - 1 - i];
   3399 +        //     }
   3400 +        //
   3401 +        //     for (int i = 0; i != y.length; i++)
   3402 +        //     {
   3403 +        //         y[i] = keyEnc[64 - 1 - i];
   3404 +        //     }
   3405 +        //
   3406 +        //     gostParams = new GOST3410PublicKeyAlgParameters((ASN1Sequence)info.getAlgorithmId().getParameters());
   3407 +        //
   3408 +        //     ECNamedCurveParameterSpec spec = ECGOST3410NamedCurveTable.getParameterSpec(ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()));
   3409 +        //
   3410 +        //     ECCurve curve = spec.getCurve();
   3411 +        //     EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, spec.getSeed());
   3412 +        //
   3413 +        //     this.q = curve.createPoint(new BigInteger(1, x), new BigInteger(1, y), false);
   3414 +        //
   3415 +        //     ecSpec = new ECNamedCurveSpec(
   3416 +        //             ECGOST3410NamedCurves.getName(gostParams.getPublicKeyParamSet()),
   3417 +        //             ellipticCurve,
   3418 +        //             new ECPoint(
   3419 +        //                     spec.getG().getX().toBigInteger(),
   3420 +        //                     spec.getG().getY().toBigInteger()),
   3421 +        //                     spec.getN(), spec.getH());
   3422 +        //
   3423 +        // }
   3424 +        // else
   3425 +        // END android-removed
   3426          {
   3427              X962Parameters params = new X962Parameters((DERObject)info.getAlgorithmId().getParameters());
   3428              ECCurve                 curve;
   3429 @@ -315,45 +327,47 @@
   3430          ASN1Encodable        params;
   3431          SubjectPublicKeyInfo info;
   3432  
   3433 -        if (algorithm.equals("ECGOST3410"))
   3434 -        {
   3435 -            if (gostParams != null)
   3436 -            {
   3437 -                params = gostParams;
   3438 -            }
   3439 -            else
   3440 -            {
   3441 -                if (ecSpec instanceof ECNamedCurveSpec)
   3442 -                {
   3443 -                    params = new GOST3410PublicKeyAlgParameters(
   3444 -                                   ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()),
   3445 -                                   CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet);
   3446 -                }
   3447 -                else
   3448 -                {   // strictly speaking this may not be applicable...
   3449 -                    ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve());
   3450 -
   3451 -                    X9ECParameters ecP = new X9ECParameters(
   3452 -                        curve,
   3453 -                        EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression),
   3454 -                        ecSpec.getOrder(),
   3455 -                        BigInteger.valueOf(ecSpec.getCofactor()),
   3456 -                        ecSpec.getCurve().getSeed());
   3457 -
   3458 -                    params = new X962Parameters(ecP);
   3459 -                }
   3460 -            }
   3461 -
   3462 -            BigInteger      bX = this.q.getX().toBigInteger();
   3463 -            BigInteger      bY = this.q.getY().toBigInteger();
   3464 -            byte[]          encKey = new byte[64];
   3465 -
   3466 -            extractBytes(encKey, 0, bX);
   3467 -            extractBytes(encKey, 32, bY);
   3468 -
   3469 -            info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), new DEROctetString(encKey));
   3470 -        }
   3471 -        else
   3472 +        // BEGIN android-removed
   3473 +        // if (algorithm.equals("ECGOST3410"))
   3474 +        // {
   3475 +        //     if (gostParams != null)
   3476 +        //     {
   3477 +        //         params = gostParams;
   3478 +        //     }
   3479 +        //     else
   3480 +        //     {
   3481 +        //         if (ecSpec instanceof ECNamedCurveSpec)
   3482 +        //         {
   3483 +        //             params = new GOST3410PublicKeyAlgParameters(
   3484 +        //                            ECGOST3410NamedCurves.getOID(((ECNamedCurveSpec)ecSpec).getName()),
   3485 +        //                            CryptoProObjectIdentifiers.gostR3411_94_CryptoProParamSet);
   3486 +        //         }
   3487 +        //         else
   3488 +        //         {   // strictly speaking this may not be applicable...
   3489 +        //             ECCurve curve = EC5Util.convertCurve(ecSpec.getCurve());
   3490 +        //
   3491 +        //             X9ECParameters ecP = new X9ECParameters(
   3492 +        //                 curve,
   3493 +        //                 EC5Util.convertPoint(curve, ecSpec.getGenerator(), withCompression),
   3494 +        //                 ecSpec.getOrder(),
   3495 +        //                 BigInteger.valueOf(ecSpec.getCofactor()),
   3496 +        //                 ecSpec.getCurve().getSeed());
   3497 +        //
   3498 +        //             params = new X962Parameters(ecP);
   3499 +        //         }
   3500 +        //     }
   3501 +        //
   3502 +        //     BigInteger      bX = this.q.getX().toBigInteger();
   3503 +        //     BigInteger      bY = this.q.getY().toBigInteger();
   3504 +        //     byte[]          encKey = new byte[64];
   3505 +        //
   3506 +        //     extractBytes(encKey, 0, bX);
   3507 +        //     extractBytes(encKey, 32, bY);
   3508 +        //
   3509 +        //     info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(CryptoProObjectIdentifiers.gostR3410_2001, params.getDERObject()), new DEROctetString(encKey));
   3510 +        // }
   3511 +        // else
   3512 +        // END android-removed
   3513          {
   3514              if (ecSpec instanceof ECNamedCurveSpec)
   3515              {
   3516 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEKeyGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEKeyGenerator.java
   3517 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEKeyGenerator.java	2011-02-23 20:08:56.000000000 +0000
   3518 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEKeyGenerator.java	2011-09-08 21:28:49.000000000 +0000
   3519 @@ -57,6 +57,11 @@
   3520      {
   3521          try
   3522          {
   3523 +            // BEGIN android-added
   3524 +            if (random == null) {
   3525 +                random = new SecureRandom();
   3526 +            }
   3527 +            // END android-added
   3528              engine.init(new KeyGenerationParameters(random, keySize));
   3529              uninitialised = false;
   3530          }
   3531 @@ -93,56 +98,60 @@
   3532          }
   3533      }
   3534  
   3535 -    /**
   3536 -     * RC2
   3537 -     */
   3538 -    public static class RC2
   3539 -        extends JCEKeyGenerator
   3540 -    {
   3541 -        public RC2()
   3542 -        {
   3543 -            super("RC2", 128, new CipherKeyGenerator());
   3544 -        }
   3545 -    }
   3546 -
   3547 -    /**
   3548 -     * GOST28147
   3549 -     */
   3550 -    public static class GOST28147
   3551 -        extends JCEKeyGenerator
   3552 -    {
   3553 -        public GOST28147()
   3554 -        {
   3555 -            super("GOST28147", 256, new CipherKeyGenerator());
   3556 -        }
   3557 -    }
   3558 +    // BEGIN android-removed
   3559 +    // /**
   3560 +    //  * RC2
   3561 +    //  */
   3562 +    // public static class RC2
   3563 +    //     extends JCEKeyGenerator
   3564 +    // {
   3565 +    //     public RC2()
   3566 +    //     {
   3567 +    //         super("RC2", 128, new CipherKeyGenerator());
   3568 +    //     }
   3569 +    // }
   3570 +    //
   3571 +    // /**
   3572 +    //  * GOST28147
   3573 +    //  */
   3574 +    // public static class GOST28147
   3575 +    //     extends JCEKeyGenerator
   3576 +    // {
   3577 +    //     public GOST28147()
   3578 +    //     {
   3579 +    //         super("GOST28147", 256, new CipherKeyGenerator());
   3580 +    //     }
   3581 +    // }
   3582 +    // END android-removed
   3583  
   3584      // HMAC Related secret keys..
   3585    
   3586 -    /**
   3587 -     * MD2HMAC
   3588 -     */
   3589 -    public static class MD2HMAC
   3590 -        extends JCEKeyGenerator
   3591 -    {
   3592 -        public MD2HMAC()
   3593 -        {
   3594 -            super("HMACMD2", 128, new CipherKeyGenerator());
   3595 -        }
   3596 -    }
   3597 -
   3598 -
   3599 -    /**
   3600 -     * MD4HMAC
   3601 -     */
   3602 -    public static class MD4HMAC
   3603 -        extends JCEKeyGenerator
   3604 -    {
   3605 -        public MD4HMAC()
   3606 -        {
   3607 -            super("HMACMD4", 128, new CipherKeyGenerator());
   3608 -        }
   3609 -    }
   3610 +    // BEGIN android-removed
   3611 +    // /**
   3612 +    //  * MD2HMAC
   3613 +    //  */
   3614 +    // public static class MD2HMAC
   3615 +    //     extends JCEKeyGenerator
   3616 +    // {
   3617 +    //     public MD2HMAC()
   3618 +    //     {
   3619 +    //         super("HMACMD2", 128, new CipherKeyGenerator());
   3620 +    //     }
   3621 +    // }
   3622 +    //
   3623 +    //
   3624 +    // /**
   3625 +    //  * MD4HMAC
   3626 +    //  */
   3627 +    // public static class MD4HMAC
   3628 +    //     extends JCEKeyGenerator
   3629 +    // {
   3630 +    //     public MD4HMAC()
   3631 +    //     {
   3632 +    //         super("HMACMD4", 128, new CipherKeyGenerator());
   3633 +    //     }
   3634 +    // }
   3635 +    // END android-removed
   3636  
   3637      /**
   3638       * MD5HMAC
   3639 @@ -157,29 +166,29 @@
   3640      }
   3641  
   3642  
   3643 -    /**
   3644 -     * RIPE128HMAC
   3645 -     */
   3646 -    public static class RIPEMD128HMAC
   3647 -        extends JCEKeyGenerator
   3648 -    {
   3649 -        public RIPEMD128HMAC()
   3650 -        {
   3651 -            super("HMACRIPEMD128", 128, new CipherKeyGenerator());
   3652 -        }
   3653 -    }
   3654 -
   3655 -    /**
   3656 -     * RIPE160HMAC
   3657 -     */
   3658 -    public static class RIPEMD160HMAC
   3659 -        extends JCEKeyGenerator
   3660 -    {
   3661 -        public RIPEMD160HMAC()
   3662 -        {
   3663 -            super("HMACRIPEMD160", 160, new CipherKeyGenerator());
   3664 -        }
   3665 -    }
   3666 +    // /**
   3667 +    //  * RIPE128HMAC
   3668 +    //  */
   3669 +    // public static class RIPEMD128HMAC
   3670 +    //     extends JCEKeyGenerator
   3671 +    // {
   3672 +    //     public RIPEMD128HMAC()
   3673 +    //     {
   3674 +    //         super("HMACRIPEMD128", 128, new CipherKeyGenerator());
   3675 +    //     }
   3676 +    // }
   3677 +
   3678 +    // /**
   3679 +    //  * RIPE160HMAC
   3680 +    //  */
   3681 +    // public static class RIPEMD160HMAC
   3682 +    //     extends JCEKeyGenerator
   3683 +    // {
   3684 +    //     public RIPEMD160HMAC()
   3685 +    //     {
   3686 +    //         super("HMACRIPEMD160", 160, new CipherKeyGenerator());
   3687 +    //     }
   3688 +    // }
   3689  
   3690  
   3691      /**
   3692 @@ -194,17 +203,19 @@
   3693          }
   3694      }
   3695  
   3696 -    /**
   3697 -     * HMACSHA224
   3698 -     */
   3699 -    public static class HMACSHA224
   3700 -        extends JCEKeyGenerator
   3701 -    {
   3702 -        public HMACSHA224()
   3703 -        {
   3704 -            super("HMACSHA224", 224, new CipherKeyGenerator());
   3705 -        }
   3706 -    }
   3707 +    // BEGIN android-removed
   3708 +    // /**
   3709 +    //  * HMACSHA224
   3710 +    //  */
   3711 +    // public static class HMACSHA224
   3712 +    //     extends JCEKeyGenerator
   3713 +    // {
   3714 +    //     public HMACSHA224()
   3715 +    //     {
   3716 +    //         super("HMACSHA224", 224, new CipherKeyGenerator());
   3717 +    //     }
   3718 +    // }
   3719 +    // END android-removed
   3720      
   3721      /**
   3722       * HMACSHA256
   3723 @@ -242,15 +253,17 @@
   3724          }
   3725      }
   3726      
   3727 -    /**
   3728 -     * HMACTIGER
   3729 -     */
   3730 -    public static class HMACTIGER
   3731 -        extends JCEKeyGenerator
   3732 -    {
   3733 -        public HMACTIGER()
   3734 -        {
   3735 -            super("HMACTIGER", 192, new CipherKeyGenerator());
   3736 -        }
   3737 -    }
   3738 +    // BEGIN android-removed
   3739 +    // /**
   3740 +    //  * HMACTIGER
   3741 +    //  */
   3742 +    // public static class HMACTIGER
   3743 +    //     extends JCEKeyGenerator
   3744 +    // {
   3745 +    //     public HMACTIGER()
   3746 +    //     {
   3747 +    //         super("HMACTIGER", 192, new CipherKeyGenerator());
   3748 +    //     }
   3749 +    // }
   3750 +    // END android-removed
   3751  }
   3752 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEMac.java
   3753 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEMac.java	2011-02-23 20:08:56.000000000 +0000
   3754 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEMac.java	2011-09-08 21:28:49.000000000 +0000
   3755 @@ -11,25 +11,39 @@
   3756  
   3757  import org.bouncycastle.crypto.CipherParameters;
   3758  import org.bouncycastle.crypto.Mac;
   3759 -import org.bouncycastle.crypto.digests.MD2Digest;
   3760 -import org.bouncycastle.crypto.digests.MD4Digest;
   3761 +// BEGIN android-removed
   3762 +// import org.bouncycastle.crypto.digests.MD2Digest;
   3763 +// import org.bouncycastle.crypto.digests.MD4Digest;
   3764 +// END android-removed
   3765  import org.bouncycastle.crypto.digests.MD5Digest;
   3766 -import org.bouncycastle.crypto.digests.RIPEMD128Digest;
   3767 -import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   3768 +// BEGIN android-removed
   3769 +// import org.bouncycastle.crypto.digests.RIPEMD128Digest;
   3770 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   3771 +// END android-removed
   3772  import org.bouncycastle.crypto.digests.SHA1Digest;
   3773 -import org.bouncycastle.crypto.digests.SHA224Digest;
   3774 +// BEGIN android-removed
   3775 +// import org.bouncycastle.crypto.digests.SHA224Digest;
   3776 +// END android-removed
   3777  import org.bouncycastle.crypto.digests.SHA256Digest;
   3778  import org.bouncycastle.crypto.digests.SHA384Digest;
   3779  import org.bouncycastle.crypto.digests.SHA512Digest;
   3780 -import org.bouncycastle.crypto.digests.TigerDigest;
   3781 +// BEGIN android-removed
   3782 +// import org.bouncycastle.crypto.digests.TigerDigest;
   3783 +// END android-removed
   3784  import org.bouncycastle.crypto.engines.DESEngine;
   3785 -import org.bouncycastle.crypto.engines.RC2Engine;
   3786 +// BEGIN android-removed
   3787 +// import org.bouncycastle.crypto.engines.RC2Engine;
   3788 +// END android-removed
   3789  import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
   3790 -import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
   3791 -import org.bouncycastle.crypto.macs.GOST28147Mac;
   3792 +// BEGIN android-removed
   3793 +// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
   3794 +// import org.bouncycastle.crypto.macs.GOST28147Mac;
   3795 +// END android-removed
   3796  import org.bouncycastle.crypto.macs.HMac;
   3797 -import org.bouncycastle.crypto.macs.ISO9797Alg3Mac;
   3798 -import org.bouncycastle.crypto.macs.OldHMac;
   3799 +// BEGIN android-removed
   3800 +// import org.bouncycastle.crypto.macs.ISO9797Alg3Mac;
   3801 +// import org.bouncycastle.crypto.macs.OldHMac;
   3802 +// END android-removed
   3803  import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
   3804  import org.bouncycastle.crypto.params.KeyParameter;
   3805  import org.bouncycastle.crypto.params.ParametersWithIV;
   3806 @@ -143,115 +157,117 @@
   3807       * the classes that extend directly off us.
   3808       */
   3809  
   3810 -    /**
   3811 -     * DES
   3812 -     */
   3813 -    public static class DES
   3814 -        extends JCEMac
   3815 -    {
   3816 -        public DES()
   3817 -        {
   3818 -            super(new CBCBlockCipherMac(new DESEngine()));
   3819 -        }
   3820 -    }
   3821 -
   3822 -    /**
   3823 -     * RC2
   3824 -     */
   3825 -    public static class RC2
   3826 -        extends JCEMac
   3827 -    {
   3828 -        public RC2()
   3829 -        {
   3830 -            super(new CBCBlockCipherMac(new RC2Engine()));
   3831 -        }
   3832 -    }
   3833 -
   3834 -    /**
   3835 -     * GOST28147
   3836 -     */
   3837 -    public static class GOST28147
   3838 -        extends JCEMac
   3839 -    {
   3840 -        public GOST28147()
   3841 -        {
   3842 -            super(new GOST28147Mac());
   3843 -        }
   3844 -    }
   3845 -
   3846 -    
   3847 -
   3848 -    /**
   3849 -     * DES
   3850 -     */
   3851 -    public static class DESCFB8
   3852 -        extends JCEMac
   3853 -    {
   3854 -        public DESCFB8()
   3855 -        {
   3856 -            super(new CFBBlockCipherMac(new DESEngine()));
   3857 -        }
   3858 -    }
   3859 -
   3860 -    /**
   3861 -     * RC2CFB8
   3862 -     */
   3863 -    public static class RC2CFB8
   3864 -        extends JCEMac
   3865 -    {
   3866 -        public RC2CFB8()
   3867 -        {
   3868 -            super(new CFBBlockCipherMac(new RC2Engine()));
   3869 -        }
   3870 -    }
   3871 -
   3872 -    /**
   3873 -     * DES9797Alg3with7816-4Padding
   3874 -     */
   3875 -    public static class DES9797Alg3with7816d4
   3876 -        extends JCEMac
   3877 -    {
   3878 -        public DES9797Alg3with7816d4()
   3879 -        {
   3880 -            super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding()));
   3881 -        }
   3882 -    }
   3883 -
   3884 -    /**
   3885 -     * DES9797Alg3
   3886 -     */
   3887 -    public static class DES9797Alg3
   3888 -        extends JCEMac
   3889 -    {
   3890 -        public DES9797Alg3()
   3891 -        {
   3892 -            super(new ISO9797Alg3Mac(new DESEngine()));
   3893 -        }
   3894 -    }
   3895 -
   3896 -    /**
   3897 -     * MD2 HMac
   3898 -     */
   3899 -    public static class MD2
   3900 -        extends JCEMac
   3901 -    {
   3902 -        public MD2()
   3903 -        {
   3904 -            super(new HMac(new MD2Digest()));
   3905 -        }
   3906 -    }
   3907 -
   3908 -    /**
   3909 -     * MD4 HMac
   3910 -     */
   3911 -    public static class MD4
   3912 -        extends JCEMac
   3913 -    {
   3914 -        public MD4()
   3915 -        {
   3916 -            super(new HMac(new MD4Digest()));
   3917 -        }
   3918 -    }
   3919 +    // BEGIN android-removed
   3920 +    // /**
   3921 +    //  * DES
   3922 +    //  */
   3923 +    // public static class DES
   3924 +    //     extends JCEMac
   3925 +    // {
   3926 +    //     public DES()
   3927 +    //     {
   3928 +    //         super(new CBCBlockCipherMac(new DESEngine()));
   3929 +    //     }
   3930 +    // }
   3931 +    //
   3932 +    // /**
   3933 +    //  * RC2
   3934 +    //  */
   3935 +    // public static class RC2
   3936 +    //     extends JCEMac
   3937 +    // {
   3938 +    //     public RC2()
   3939 +    //     {
   3940 +    //         super(new CBCBlockCipherMac(new RC2Engine()));
   3941 +    //     }
   3942 +    // }
   3943 +    //
   3944 +    // /**
   3945 +    //  * GOST28147
   3946 +    //  */
   3947 +    // public static class GOST28147
   3948 +    //     extends JCEMac
   3949 +    // {
   3950 +    //     public GOST28147()
   3951 +    //     {
   3952 +    //         super(new GOST28147Mac());
   3953 +    //     }
   3954 +    // }
   3955 +    //
   3956 +    //
   3957 +    //
   3958 +    // /**
   3959 +    //  * DES
   3960 +    //  */
   3961 +    // public static class DESCFB8
   3962 +    //     extends JCEMac
   3963 +    // {
   3964 +    //     public DESCFB8()
   3965 +    //     {
   3966 +    //         super(new CFBBlockCipherMac(new DESEngine()));
   3967 +    //     }
   3968 +    // }
   3969 +    //
   3970 +    // /**
   3971 +    //  * RC2CFB8
   3972 +    //  */
   3973 +    // public static class RC2CFB8
   3974 +    //     extends JCEMac
   3975 +    // {
   3976 +    //     public RC2CFB8()
   3977 +    //     {
   3978 +    //         super(new CFBBlockCipherMac(new RC2Engine()));
   3979 +    //     }
   3980 +    // }
   3981 +    //
   3982 +    // /**
   3983 +    //  * DES9797Alg3with7816-4Padding
   3984 +    //  */
   3985 +    // public static class DES9797Alg3with7816d4
   3986 +    //     extends JCEMac
   3987 +    // {
   3988 +    //     public DES9797Alg3with7816d4()
   3989 +    //     {
   3990 +    //         super(new ISO9797Alg3Mac(new DESEngine(), new ISO7816d4Padding()));
   3991 +    //     }
   3992 +    // }
   3993 +    //
   3994 +    // /**
   3995 +    //  * DES9797Alg3
   3996 +    //  */
   3997 +    // public static class DES9797Alg3
   3998 +    //     extends JCEMac
   3999 +    // {
   4000 +    //     public DES9797Alg3()
   4001 +    //     {
   4002 +    //         super(new ISO9797Alg3Mac(new DESEngine()));
   4003 +    //     }
   4004 +    // }
   4005 +    //
   4006 +    // /**
   4007 +    //  * MD2 HMac
   4008 +    //  */
   4009 +    // public static class MD2
   4010 +    //     extends JCEMac
   4011 +    // {
   4012 +    //     public MD2()
   4013 +    //     {
   4014 +    //         super(new HMac(new MD2Digest()));
   4015 +    //     }
   4016 +    // }
   4017 +    //
   4018 +    // /**
   4019 +    //  * MD4 HMac
   4020 +    //  */
   4021 +    // public static class MD4
   4022 +    //     extends JCEMac
   4023 +    // {
   4024 +    //     public MD4()
   4025 +    //     {
   4026 +    //         super(new HMac(new MD4Digest()));
   4027 +    //     }
   4028 +    // }
   4029 +    // END android-removed
   4030  
   4031      /**
   4032       * MD5 HMac
   4033 @@ -264,7 +280,7 @@
   4034              super(new HMac(new MD5Digest()));
   4035          }
   4036      }
   4037 -
   4038 +    
   4039      /**
   4040       * SHA1 HMac
   4041       */
   4042 @@ -276,18 +292,20 @@
   4043              super(new HMac(new SHA1Digest()));
   4044          }
   4045      }
   4046 -
   4047 -    /**
   4048 -     * SHA-224 HMac
   4049 -     */
   4050 -    public static class SHA224
   4051 -        extends JCEMac
   4052 -    {
   4053 -        public SHA224()
   4054 -        {
   4055 -            super(new HMac(new SHA224Digest()));
   4056 -        }
   4057 -    }
   4058 +    
   4059 +    // BEGIN android-removed
   4060 +    // /**
   4061 +    //  * SHA-224 HMac
   4062 +    //  */
   4063 +    // public static class SHA224
   4064 +    //     extends JCEMac
   4065 +    // {
   4066 +    //     public SHA224()
   4067 +    //     {
   4068 +    //         super(new HMac(new SHA224Digest()));
   4069 +    //     }
   4070 +    // }
   4071 +    // END android-removed
   4072      
   4073      /**
   4074       * SHA-256 HMac
   4075 @@ -300,7 +318,7 @@
   4076              super(new HMac(new SHA256Digest()));
   4077          }
   4078      }
   4079 -
   4080 +    
   4081      /**
   4082       * SHA-384 HMac
   4083       */
   4084 @@ -312,15 +330,17 @@
   4085              super(new HMac(new SHA384Digest()));
   4086          }
   4087      }
   4088 -
   4089 -    public static class OldSHA384
   4090 -        extends JCEMac
   4091 -    {
   4092 -        public OldSHA384()
   4093 -        {
   4094 -            super(new OldHMac(new SHA384Digest()));
   4095 -        }
   4096 -    }
   4097 +    
   4098 +    // BEGIN android-removed
   4099 +    // public static class OldSHA384
   4100 +    //     extends JCEMac
   4101 +    // {
   4102 +    //     public OldSHA384()
   4103 +    //     {
   4104 +    //         super(new OldHMac(new SHA384Digest()));
   4105 +    //     }
   4106 +    // }
   4107 +    // END android-removed
   4108      
   4109      /**
   4110       * SHA-512 HMac
   4111 @@ -333,73 +353,75 @@
   4112              super(new HMac(new SHA512Digest()));
   4113          }
   4114      }
   4115 -
   4116 -    /**
   4117 -     * SHA-512 HMac
   4118 -     */
   4119 -    public static class OldSHA512
   4120 -        extends JCEMac
   4121 -    {
   4122 -        public OldSHA512()
   4123 -        {
   4124 -            super(new OldHMac(new SHA512Digest()));
   4125 -        }
   4126 -    }
   4127      
   4128 -    /**
   4129 -     * RIPEMD128 HMac
   4130 -     */
   4131 -    public static class RIPEMD128
   4132 -        extends JCEMac
   4133 -    {
   4134 -        public RIPEMD128()
   4135 -        {
   4136 -            super(new HMac(new RIPEMD128Digest()));
   4137 -        }
   4138 -    }
   4139 -
   4140 -    /**
   4141 -     * RIPEMD160 HMac
   4142 -     */
   4143 -    public static class RIPEMD160
   4144 -        extends JCEMac
   4145 -    {
   4146 -        public RIPEMD160()
   4147 -        {
   4148 -            super(new HMac(new RIPEMD160Digest()));
   4149 -        }
   4150 -    }
   4151 -
   4152 -    /**
   4153 -     * Tiger HMac
   4154 -     */
   4155 -    public static class Tiger
   4156 -        extends JCEMac
   4157 -    {
   4158 -        public Tiger()
   4159 -        {
   4160 -            super(new HMac(new TigerDigest()));
   4161 -        }
   4162 -    }
   4163 -
   4164 +    // BEGIN android-removed
   4165 +    // /**
   4166 +    //  * SHA-512 HMac
   4167 +    //  */
   4168 +    // public static class OldSHA512
   4169 +    //     extends JCEMac
   4170 +    // {
   4171 +    //     public OldSHA512()
   4172 +    //     {
   4173 +    //         super(new OldHMac(new SHA512Digest()));
   4174 +    //     }
   4175 +    // }
   4176      //
   4177 -    // PKCS12 states that the same algorithm should be used
   4178 -    // for the key generation as is used in the HMAC, so that
   4179 -    // is what we do here.
   4180 +    // /**
   4181 +    //  * RIPEMD128 HMac
   4182 +    //  */
   4183 +    // public static class RIPEMD128
   4184 +    //     extends JCEMac
   4185 +    // {
   4186 +    //     public RIPEMD128()
   4187 +    //     {
   4188 +    //        super(new HMac(new RIPEMD128Digest()));
   4189 +    //     }
   4190 +    // }
   4191      //
   4192 -
   4193 -    /**
   4194 -     * PBEWithHmacRIPEMD160
   4195 -     */
   4196 -    public static class PBEWithRIPEMD160
   4197 -        extends JCEMac
   4198 -    {
   4199 -        public PBEWithRIPEMD160()
   4200 -        {
   4201 -            super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160);
   4202 -        }
   4203 -    }
   4204 -
   4205 +    // /**
   4206 +    //  * RIPEMD160 HMac
   4207 +    //  */
   4208 +    // public static class RIPEMD160
   4209 +    //     extends JCEMac
   4210 +    // {
   4211 +    //     public RIPEMD160()
   4212 +    //     {
   4213 +    //        super(new HMac(new RIPEMD160Digest()));
   4214 +    //     }
   4215 +    // }
   4216 +    //
   4217 +    // /**
   4218 +    //  * Tiger HMac
   4219 +    //  */
   4220 +    // public static class Tiger
   4221 +    //     extends JCEMac
   4222 +    // {
   4223 +    //     public Tiger()
   4224 +    //     {
   4225 +    //         super(new HMac(new TigerDigest()));
   4226 +    //     }
   4227 +    // }
   4228 +    //
   4229 +    // //
   4230 +    // // PKCS12 states that the same algorithm should be used
   4231 +    // // for the key generation as is used in the HMAC, so that
   4232 +    // // is what we do here.
   4233 +    // //
   4234 +    //
   4235 +    // /**
   4236 +    //  * PBEWithHmacRIPEMD160
   4237 +    //  */
   4238 +    // public static class PBEWithRIPEMD160
   4239 +    //     extends JCEMac
   4240 +    // {
   4241 +    //     public PBEWithRIPEMD160()
   4242 +    //     {
   4243 +    //         super(new HMac(new RIPEMD160Digest()), PKCS12, RIPEMD160, 160);
   4244 +    //     }
   4245 +    // }
   4246 +    // END android-removed
   4247 +    
   4248      /**
   4249       * PBEWithHmacSHA
   4250       */
   4251 @@ -411,16 +433,18 @@
   4252              super(new HMac(new SHA1Digest()), PKCS12, SHA1, 160);
   4253          }
   4254      }
   4255 -
   4256 -    /**
   4257 -     * PBEWithHmacTiger
   4258 -     */
   4259 -    public static class PBEWithTiger
   4260 -        extends JCEMac
   4261 -    {
   4262 -        public PBEWithTiger()
   4263 -        {
   4264 -            super(new HMac(new TigerDigest()), PKCS12, TIGER, 192);
   4265 -        }
   4266 -    }
   4267 +    
   4268 +    // BEGIN android-removed
   4269 +    //  /**
   4270 +    //   * PBEWithHmacTiger
   4271 +    //   */
   4272 +    // public static class PBEWithTiger
   4273 +    //     extends JCEMac
   4274 +    // {
   4275 +    //     public PBEWithTiger()
   4276 +    //     {
   4277 +    //         super(new HMac(new TigerDigest()), PKCS12, TIGER, 192);
   4278 +    //     }
   4279 +    // }
   4280 +    // END android-removed
   4281  }
   4282 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSACipher.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSACipher.java
   4283 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSACipher.java	2011-02-23 20:08:56.000000000 +0000
   4284 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSACipher.java	2011-09-08 21:28:49.000000000 +0000
   4285 @@ -535,48 +535,50 @@
   4286          }
   4287      }
   4288  
   4289 -    static public class PKCS1v1_5Padding
   4290 -        extends JCERSACipher
   4291 -    {
   4292 -        public PKCS1v1_5Padding()
   4293 -        {
   4294 -            super(new PKCS1Encoding(new RSABlindedEngine()));
   4295 -        }
   4296 -    }
   4297 -
   4298 -    static public class PKCS1v1_5Padding_PrivateOnly
   4299 -        extends JCERSACipher
   4300 -    {
   4301 -        public PKCS1v1_5Padding_PrivateOnly()
   4302 -        {
   4303 -            super(false, true, new PKCS1Encoding(new RSABlindedEngine()));
   4304 -        }
   4305 -    }
   4306 -
   4307 -    static public class PKCS1v1_5Padding_PublicOnly
   4308 -        extends JCERSACipher
   4309 -    {
   4310 -        public PKCS1v1_5Padding_PublicOnly()
   4311 -        {
   4312 -            super(true, false, new PKCS1Encoding(new RSABlindedEngine()));
   4313 -        }
   4314 -    }
   4315 -
   4316 -    static public class OAEPPadding
   4317 -        extends JCERSACipher
   4318 -    {
   4319 -        public OAEPPadding()
   4320 -        {
   4321 -            super(OAEPParameterSpec.DEFAULT);
   4322 -        }
   4323 -    }
   4324 -    
   4325 -    static public class ISO9796d1Padding
   4326 -        extends JCERSACipher
   4327 -    {
   4328 -        public ISO9796d1Padding()
   4329 -        {
   4330 -            super(new ISO9796d1Encoding(new RSABlindedEngine()));
   4331 -        }
   4332 -    }
   4333 +    // BEGIN android-removed
   4334 +    // static public class PKCS1v1_5Padding
   4335 +    //     extends JCERSACipher
   4336 +    // {
   4337 +    //     public PKCS1v1_5Padding()
   4338 +    //     {
   4339 +    //         super(new PKCS1Encoding(new RSABlindedEngine()));
   4340 +    //     }
   4341 +    // }
   4342 +    //
   4343 +    // static public class PKCS1v1_5Padding_PrivateOnly
   4344 +    //     extends JCERSACipher
   4345 +    // {
   4346 +    //     public PKCS1v1_5Padding_PrivateOnly()
   4347 +    //     {
   4348 +    //         super(false, true, new PKCS1Encoding(new RSABlindedEngine()));
   4349 +    //     }
   4350 +    // }
   4351 +    //
   4352 +    // static public class PKCS1v1_5Padding_PublicOnly
   4353 +    //     extends JCERSACipher
   4354 +    // {
   4355 +    //     public PKCS1v1_5Padding_PublicOnly()
   4356 +    //     {
   4357 +    //         super(true, false, new PKCS1Encoding(new RSABlindedEngine()));
   4358 +    //     }
   4359 +    // }
   4360 +    //
   4361 +    // static public class OAEPPadding
   4362 +    //     extends JCERSACipher
   4363 +    // {
   4364 +    //     public OAEPPadding()
   4365 +    //     {
   4366 +    //         super(OAEPParameterSpec.DEFAULT);
   4367 +    //     }
   4368 +    // }
   4369 +    //
   4370 +    // static public class ISO9796d1Padding
   4371 +    //     extends JCERSACipher
   4372 +    // {
   4373 +    //     public ISO9796d1Padding()
   4374 +    //     {
   4375 +    //         super(new ISO9796d1Encoding(new RSABlindedEngine()));
   4376 +    //     }
   4377 +    // }
   4378 +    // END android-removed
   4379  }
   4380 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java
   4381 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java	2011-02-23 20:08:56.000000000 +0000
   4382 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateCrtKey.java	2011-09-08 21:28:49.000000000 +0000
   4383 @@ -125,7 +125,9 @@
   4384       */
   4385      public byte[] getEncoded()
   4386      {
   4387 -        PrivateKeyInfo          info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKeyStructure(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()).getDERObject());
   4388 +        // BEGIN android-changed
   4389 +        PrivateKeyInfo          info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKeyStructure(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()).getDERObject());
   4390 +        // END android-changed
   4391  
   4392          return info.getDEREncoded();
   4393      }
   4394 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateKey.java
   4395 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPrivateKey.java	2011-02-23 20:08:56.000000000 +0000
   4396 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPrivateKey.java	2011-09-08 21:28:49.000000000 +0000
   4397 @@ -77,7 +77,9 @@
   4398  
   4399      public byte[] getEncoded()
   4400      {
   4401 -        PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPrivateKeyStructure(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO).getDERObject());
   4402 +        // BEGIN android-changed
   4403 +        PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPrivateKeyStructure(getModulus(), ZERO, getPrivateExponent(), ZERO, ZERO, ZERO, ZERO, ZERO).getDERObject());
   4404 +        // END android-changed
   4405  
   4406          return info.getDEREncoded();
   4407      }
   4408 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPublicKey.java
   4409 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCERSAPublicKey.java	2011-02-23 20:08:56.000000000 +0000
   4410 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCERSAPublicKey.java	2011-09-08 21:28:49.000000000 +0000
   4411 @@ -90,7 +90,9 @@
   4412  
   4413      public byte[] getEncoded()
   4414      {
   4415 -        SubjectPublicKeyInfo    info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, new DERNull()), new RSAPublicKeyStructure(getModulus(), getPublicExponent()).getDERObject());
   4416 +        // BEGIN android-changed
   4417 +        SubjectPublicKeyInfo    info = new SubjectPublicKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.INSTANCE), new RSAPublicKeyStructure(getModulus(), getPublicExponent()).getDERObject());
   4418 +        // END android-changed
   4419  
   4420          return info.getDEREncoded();
   4421      }
   4422 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCESecretKeyFactory.java
   4423 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCESecretKeyFactory.java	2011-02-23 20:08:56.000000000 +0000
   4424 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCESecretKeyFactory.java	2011-09-08 21:28:49.000000000 +0000
   4425 @@ -250,29 +250,31 @@
   4426          }
   4427      }
   4428  
   4429 -    /**
   4430 -     * PBEWithMD2AndDES
   4431 -     */
   4432 -    static public class PBEWithMD2AndDES
   4433 -        extends DESPBEKeyFactory
   4434 -    {
   4435 -        public PBEWithMD2AndDES()
   4436 -        {
   4437 -            super("PBEwithMD2andDES", PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, true, PKCS5S1, MD2, 64, 64);
   4438 -        }
   4439 -    }
   4440 -
   4441 -    /**
   4442 -     * PBEWithMD2AndRC2
   4443 -     */
   4444 -    static public class PBEWithMD2AndRC2
   4445 -        extends PBEKeyFactory
   4446 -    {
   4447 -        public PBEWithMD2AndRC2()
   4448 -        {
   4449 -            super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64);
   4450 -        }
   4451 -    }
   4452 +    // BEGIN android-removed
   4453 +    // /**
   4454 +    //  * PBEWithMD2AndDES
   4455 +    //  */
   4456 +    // static public class PBEWithMD2AndDES
   4457 +    //     extends DESPBEKeyFactory
   4458 +    // {
   4459 +    //     public PBEWithMD2AndDES()
   4460 +    //     {
   4461 +    //         super("PBEwithMD2andDES", PKCSObjectIdentifiers.pbeWithMD2AndDES_CBC, true, PKCS5S1, MD2, 64, 64);
   4462 +    //     }
   4463 +    // }
   4464 +    //
   4465 +    // /**
   4466 +    //  * PBEWithMD2AndRC2
   4467 +    //  */
   4468 +    // static public class PBEWithMD2AndRC2
   4469 +    //     extends PBEKeyFactory
   4470 +    // {
   4471 +    //     public PBEWithMD2AndRC2()
   4472 +    //     {
   4473 +    //         super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64);
   4474 +    //     }
   4475 +    // }
   4476 +    // END android-removed
   4477  
   4478     /**
   4479      * PBEWithMD5AndDES
   4480 @@ -406,17 +408,19 @@
   4481         }
   4482     }
   4483     
   4484 -   /**
   4485 -    * PBEWithHmacRIPEMD160
   4486 -    */
   4487 -   public static class PBEWithRIPEMD160
   4488 -       extends PBEKeyFactory
   4489 -   {
   4490 -       public PBEWithRIPEMD160()
   4491 -       {
   4492 -           super("PBEwithHmacRIPEMD160", null, false, PKCS12, RIPEMD160, 160, 0);
   4493 -       }
   4494 -   }
   4495 +   // BEGIN android-removed
   4496 +   // /**
   4497 +   //  * PBEWithHmacRIPEMD160
   4498 +   //  */
   4499 +   // public static class PBEWithRIPEMD160
   4500 +   //     extends PBEKeyFactory
   4501 +   // {
   4502 +   //     public PBEWithRIPEMD160()
   4503 +   //     {
   4504 +   //         super("PBEwithHmacRIPEMD160", null, false, PKCS12, RIPEMD160, 160, 0);
   4505 +   //     }
   4506 +   // }
   4507 +   // END android-removed
   4508  
   4509     /**
   4510      * PBEWithHmacSHA
   4511 @@ -430,17 +434,19 @@
   4512         }
   4513     }
   4514  
   4515 -   /**
   4516 -    * PBEWithHmacTiger
   4517 -    */
   4518 -   public static class PBEWithTiger
   4519 -       extends PBEKeyFactory
   4520 -   {
   4521 -       public PBEWithTiger()
   4522 -       {
   4523 -           super("PBEwithHmacTiger", null, false, PKCS12, TIGER, 192, 0);
   4524 -       }
   4525 -   }
   4526 +   // BEGIN android-removed
   4527 +   // /**
   4528 +   //  * PBEWithHmacTiger
   4529 +   //  */
   4530 +   // public static class PBEWithTiger
   4531 +   //     extends PBEKeyFactory
   4532 +   // {
   4533 +   //     public PBEWithTiger()
   4534 +   //     {
   4535 +   //         super("PBEwithHmacTiger", null, false, PKCS12, TIGER, 192, 0);
   4536 +   //     }
   4537 +   // }
   4538 +   // END android-removed
   4539     
   4540     /**
   4541      * PBEWithSHA1And128BitAES-BC
   4542 @@ -549,4 +555,56 @@
   4543             super("PBEWithMD5And256BitAES-CBC-OpenSSL", null, true, OPENSSL, MD5, 256, 128);
   4544         }
   4545     }
   4546 +    // BEGIN android-added
   4547 +    static public class PBKDF2WithHmacSHA1
   4548 +        extends JCESecretKeyFactory
   4549 +    {
   4550 +        public PBKDF2WithHmacSHA1()
   4551 +        {
   4552 +            super("PBKDF2WithHmacSHA1", PKCSObjectIdentifiers.id_PBKDF2);
   4553 +        }
   4554 +
   4555 +        protected SecretKey engineGenerateSecret(
   4556 +            KeySpec keySpec)
   4557 +            throws InvalidKeySpecException
   4558 +        {
   4559 +            if (keySpec instanceof PBEKeySpec)
   4560 +            {
   4561 +                PBEKeySpec          pbeSpec = (PBEKeySpec)keySpec;
   4562 +                
   4563 +                if (pbeSpec.getSalt() == null)
   4564 +                {
   4565 +                    throw new InvalidKeySpecException("missing required salt");
   4566 +                }
   4567 +
   4568 +                if (pbeSpec.getIterationCount() <= 0)
   4569 +                {
   4570 +                    throw new InvalidKeySpecException("positive iteration count required: "
   4571 +                                                      + pbeSpec.getIterationCount());
   4572 +                }
   4573 +                
   4574 +                if (pbeSpec.getKeyLength() <= 0)
   4575 +                {
   4576 +                    throw new InvalidKeySpecException("positive key length required: "
   4577 +                                                      + pbeSpec.getKeyLength());
   4578 +                }
   4579 +                
   4580 +                if (pbeSpec.getPassword().length == 0)
   4581 +                {
   4582 +                    throw new IllegalArgumentException("password empty");
   4583 +                }
   4584 +
   4585 +                int scheme = PKCS5S2;
   4586 +                int digest = SHA1;
   4587 +                int keySize = pbeSpec.getKeyLength();
   4588 +                int ivSize = -1;
   4589 +                CipherParameters param = Util.makePBEMacParameters(pbeSpec, scheme, digest, keySize);
   4590 +                
   4591 +                return new JCEPBEKey(this.algName, this.algOid, scheme, digest, keySize, ivSize, pbeSpec, param);
   4592 +            }
   4593 +            
   4594 +            throw new InvalidKeySpecException("Invalid KeySpec");
   4595 +        }
   4596 +    }
   4597 +    // END android-added
   4598  }
   4599 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEStreamCipher.java
   4600 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JCEStreamCipher.java	2011-02-23 20:08:56.000000000 +0000
   4601 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JCEStreamCipher.java	2011-09-08 21:28:49.000000000 +0000
   4602 @@ -13,20 +13,26 @@
   4603  import javax.crypto.ShortBufferException;
   4604  import javax.crypto.spec.IvParameterSpec;
   4605  import javax.crypto.spec.PBEParameterSpec;
   4606 -import javax.crypto.spec.RC2ParameterSpec;
   4607 -import javax.crypto.spec.RC5ParameterSpec;
   4608 +// BEGIN android-removed
   4609 +// import javax.crypto.spec.RC2ParameterSpec;
   4610 +// import javax.crypto.spec.RC5ParameterSpec;
   4611 +// END android-removed
   4612  
   4613  import org.bouncycastle.crypto.BlockCipher;
   4614  import org.bouncycastle.crypto.CipherParameters;
   4615  import org.bouncycastle.crypto.DataLengthException;
   4616  import org.bouncycastle.crypto.StreamBlockCipher;
   4617  import org.bouncycastle.crypto.StreamCipher;
   4618 -import org.bouncycastle.crypto.engines.BlowfishEngine;
   4619 -import org.bouncycastle.crypto.engines.DESEngine;
   4620 -import org.bouncycastle.crypto.engines.DESedeEngine;
   4621 +// BEGIN android-removed
   4622 +// import org.bouncycastle.crypto.engines.BlowfishEngine;
   4623 +// import org.bouncycastle.crypto.engines.DESEngine;
   4624 +// import org.bouncycastle.crypto.engines.DESedeEngine;
   4625 +// END android-removed
   4626  import org.bouncycastle.crypto.engines.RC4Engine;
   4627 -import org.bouncycastle.crypto.engines.SkipjackEngine;
   4628 -import org.bouncycastle.crypto.engines.TwofishEngine;
   4629 +// BEGIN android-removed
   4630 +// import org.bouncycastle.crypto.engines.SkipjackEngine;
   4631 +// import org.bouncycastle.crypto.engines.TwofishEngine;
   4632 +// END android-removed
   4633  import org.bouncycastle.crypto.modes.CFBBlockCipher;
   4634  import org.bouncycastle.crypto.modes.OFBBlockCipher;
   4635  import org.bouncycastle.crypto.params.KeyParameter;
   4636 @@ -40,8 +46,10 @@
   4637      //
   4638      private Class[]                 availableSpecs =
   4639                                      {
   4640 -                                        RC2ParameterSpec.class,
   4641 -                                        RC5ParameterSpec.class,
   4642 +                                        // BEGIN android-removed
   4643 +                                        // RC2ParameterSpec.class,
   4644 +                                        // RC5ParameterSpec.class,
   4645 +                                        // END android-removed
   4646                                          IvParameterSpec.class,
   4647                                          PBEParameterSpec.class
   4648                                      };
   4649 @@ -370,125 +378,127 @@
   4650       * The ciphers that inherit from us.
   4651       */
   4652  
   4653 -    /**
   4654 -     * DES
   4655 -     */
   4656 -    static public class DES_CFB8
   4657 -        extends JCEStreamCipher
   4658 -    {
   4659 -        public DES_CFB8()
   4660 -        {
   4661 -            super(new CFBBlockCipher(new DESEngine(), 8), 64);
   4662 -        }
   4663 -    }
   4664 -
   4665 -    /**
   4666 -     * DESede
   4667 -     */
   4668 -    static public class DESede_CFB8
   4669 -        extends JCEStreamCipher
   4670 -    {
   4671 -        public DESede_CFB8()
   4672 -        {
   4673 -            super(new CFBBlockCipher(new DESedeEngine(), 8), 64);
   4674 -        }
   4675 -    }
   4676 -
   4677 -    /**
   4678 -     * SKIPJACK
   4679 -     */
   4680 -    static public class Skipjack_CFB8
   4681 -        extends JCEStreamCipher
   4682 -    {
   4683 -        public Skipjack_CFB8()
   4684 -        {
   4685 -            super(new CFBBlockCipher(new SkipjackEngine(), 8), 64);
   4686 -        }
   4687 -    }
   4688 -
   4689 -    /**
   4690 -     * Blowfish
   4691 -     */
   4692 -    static public class Blowfish_CFB8
   4693 -        extends JCEStreamCipher
   4694 -    {
   4695 -        public Blowfish_CFB8()
   4696 -        {
   4697 -            super(new CFBBlockCipher(new BlowfishEngine(), 8), 64);
   4698 -        }
   4699 -    }
   4700 -
   4701 -    /**
   4702 -     * Twofish
   4703 -     */
   4704 -    static public class Twofish_CFB8
   4705 -        extends JCEStreamCipher
   4706 -    {
   4707 -        public Twofish_CFB8()
   4708 -        {
   4709 -            super(new CFBBlockCipher(new TwofishEngine(), 8), 128);
   4710 -        }
   4711 -    }
   4712 -
   4713 -    /**
   4714 -     * DES
   4715 -     */
   4716 -    static public class DES_OFB8
   4717 -        extends JCEStreamCipher
   4718 -    {
   4719 -        public DES_OFB8()
   4720 -        {
   4721 -            super(new OFBBlockCipher(new DESEngine(), 8), 64);
   4722 -        }
   4723 -    }
   4724 -
   4725 -    /**
   4726 -     * DESede
   4727 -     */
   4728 -    static public class DESede_OFB8
   4729 -        extends JCEStreamCipher
   4730 -    {
   4731 -        public DESede_OFB8()
   4732 -        {
   4733 -            super(new OFBBlockCipher(new DESedeEngine(), 8), 64);
   4734 -        }
   4735 -    }
   4736 -
   4737 -    /**
   4738 -     * SKIPJACK
   4739 -     */
   4740 -    static public class Skipjack_OFB8
   4741 -        extends JCEStreamCipher
   4742 -    {
   4743 -        public Skipjack_OFB8()
   4744 -        {
   4745 -            super(new OFBBlockCipher(new SkipjackEngine(), 8), 64);
   4746 -        }
   4747 -    }
   4748 -
   4749 -    /**
   4750 -     * Blowfish
   4751 -     */
   4752 -    static public class Blowfish_OFB8
   4753 -        extends JCEStreamCipher
   4754 -    {
   4755 -        public Blowfish_OFB8()
   4756 -        {
   4757 -            super(new OFBBlockCipher(new BlowfishEngine(), 8), 64);
   4758 -        }
   4759 -    }
   4760 -
   4761 -    /**
   4762 -     * Twofish
   4763 -     */
   4764 -    static public class Twofish_OFB8
   4765 -        extends JCEStreamCipher
   4766 -    {
   4767 -        public Twofish_OFB8()
   4768 -        {
   4769 -            super(new OFBBlockCipher(new TwofishEngine(), 8), 128);
   4770 -        }
   4771 -    }
   4772 +    // BEGIN android-removed
   4773 +    // /**
   4774 +    //  * DES
   4775 +    //  */
   4776 +    // static public class DES_CFB8
   4777 +    //     extends JCEStreamCipher
   4778 +    // {
   4779 +    //     public DES_CFB8()
   4780 +    //     {
   4781 +    //         super(new CFBBlockCipher(new DESEngine(), 8), 64);
   4782 +    //     }
   4783 +    // }
   4784 +    //
   4785 +    // /**
   4786 +    //  * DESede
   4787 +    //  */
   4788 +    // static public class DESede_CFB8
   4789 +    //     extends JCEStreamCipher
   4790 +    // {
   4791 +    //     public DESede_CFB8()
   4792 +    //     {
   4793 +    //         super(new CFBBlockCipher(new DESedeEngine(), 8), 64);
   4794 +    //     }
   4795 +    // }
   4796 +    //
   4797 +    // /**
   4798 +    //  * SKIPJACK
   4799 +    //  */
   4800 +    // static public class Skipjack_CFB8
   4801 +    //     extends JCEStreamCipher
   4802 +    // {
   4803 +    //     public Skipjack_CFB8()
   4804 +    //     {
   4805 +    //         super(new CFBBlockCipher(new SkipjackEngine(), 8), 64);
   4806 +    //     }
   4807 +    // }
   4808 +    //
   4809 +    // /**
   4810 +    //  * Blowfish
   4811 +    //  */
   4812 +    // static public class Blowfish_CFB8
   4813 +    //     extends JCEStreamCipher
   4814 +    // {
   4815 +    //     public Blowfish_CFB8()
   4816 +    //     {
   4817 +    //         super(new CFBBlockCipher(new BlowfishEngine(), 8), 64);
   4818 +    //     }
   4819 +    // }
   4820 +    //
   4821 +    // /**
   4822 +    //  * Twofish
   4823 +    //  */
   4824 +    // static public class Twofish_CFB8
   4825 +    //     extends JCEStreamCipher
   4826 +    // {
   4827 +    //     public Twofish_CFB8()
   4828 +    //     {
   4829 +    //         super(new CFBBlockCipher(new TwofishEngine(), 8), 128);
   4830 +    //     }
   4831 +    // }
   4832 +    //
   4833 +    // /**
   4834 +    //  * DES
   4835 +    //  */
   4836 +    // static public class DES_OFB8
   4837 +    //     extends JCEStreamCipher
   4838 +    // {
   4839 +    //     public DES_OFB8()
   4840 +    //     {
   4841 +    //         super(new OFBBlockCipher(new DESEngine(), 8), 64);
   4842 +    //     }
   4843 +    // }
   4844 +    //
   4845 +    // /**
   4846 +    //  * DESede
   4847 +    //  */
   4848 +    // static public class DESede_OFB8
   4849 +    //     extends JCEStreamCipher
   4850 +    // {
   4851 +    //     public DESede_OFB8()
   4852 +    //     {
   4853 +    //         super(new OFBBlockCipher(new DESedeEngine(), 8), 64);
   4854 +    //     }
   4855 +    // }
   4856 +    //
   4857 +    // /**
   4858 +    //  * SKIPJACK
   4859 +    //  */
   4860 +    // static public class Skipjack_OFB8
   4861 +    //     extends JCEStreamCipher
   4862 +    // {
   4863 +    //     public Skipjack_OFB8()
   4864 +    //     {
   4865 +    //         super(new OFBBlockCipher(new SkipjackEngine(), 8), 64);
   4866 +    //     }
   4867 +    // }
   4868 +    //
   4869 +    // /**
   4870 +    //  * Blowfish
   4871 +    //  */
   4872 +    // static public class Blowfish_OFB8
   4873 +    //     extends JCEStreamCipher
   4874 +    // {
   4875 +    //     public Blowfish_OFB8()
   4876 +    //     {
   4877 +    //         super(new OFBBlockCipher(new BlowfishEngine(), 8), 64);
   4878 +    //     }
   4879 +    // }
   4880 +    //
   4881 +    // /**
   4882 +    //  * Twofish
   4883 +    //  */
   4884 +    // static public class Twofish_OFB8
   4885 +    //     extends JCEStreamCipher
   4886 +    // {
   4887 +    //     public Twofish_OFB8()
   4888 +    //     {
   4889 +    //         super(new OFBBlockCipher(new TwofishEngine(), 8), 128);
   4890 +    //     }
   4891 +    // }
   4892 +    // END android-removed
   4893  
   4894      /**
   4895       * PBEWithSHAAnd128BitRC4
   4896 @@ -501,7 +511,7 @@
   4897              super(new RC4Engine(), 0);
   4898          }
   4899      }
   4900 -
   4901 +    
   4902      /**
   4903       * PBEWithSHAAnd40BitRC4
   4904       */
   4905 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java
   4906 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java	2011-02-23 20:08:56.000000000 +0000
   4907 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameterGenerator.java	2011-09-08 21:28:49.000000000 +0000
   4908 @@ -11,18 +11,24 @@
   4909  import javax.crypto.spec.DHGenParameterSpec;
   4910  import javax.crypto.spec.DHParameterSpec;
   4911  import javax.crypto.spec.IvParameterSpec;
   4912 -import javax.crypto.spec.RC2ParameterSpec;
   4913 +// BEGIN android-removed
   4914 +// import javax.crypto.spec.RC2ParameterSpec;
   4915 +// END android-removed
   4916  
   4917  import org.bouncycastle.crypto.generators.DHParametersGenerator;
   4918  import org.bouncycastle.crypto.generators.DSAParametersGenerator;
   4919 -import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
   4920 -import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator;
   4921 +// BEGIN android-removed
   4922 +// import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
   4923 +// import org.bouncycastle.crypto.generators.GOST3410ParametersGenerator;
   4924 +// END android-removed
   4925  import org.bouncycastle.crypto.params.DHParameters;
   4926  import org.bouncycastle.crypto.params.DSAParameters;
   4927 -import org.bouncycastle.crypto.params.ElGamalParameters;
   4928 -import org.bouncycastle.crypto.params.GOST3410Parameters;
   4929 -import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
   4930 -import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
   4931 +// BEGIN android-removed
   4932 +// import org.bouncycastle.crypto.params.ElGamalParameters;
   4933 +// import org.bouncycastle.crypto.params.GOST3410Parameters;
   4934 +// import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
   4935 +// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
   4936 +// END android-removed
   4937  
   4938  public abstract class JDKAlgorithmParameterGenerator
   4939      extends AlgorithmParameterGeneratorSpi
   4940 @@ -145,196 +151,198 @@
   4941          }
   4942      }
   4943  
   4944 -    public static class GOST3410
   4945 -        extends JDKAlgorithmParameterGenerator
   4946 -    {
   4947 -        protected void engineInit(
   4948 -                AlgorithmParameterSpec  genParamSpec,
   4949 -                SecureRandom            random)
   4950 -        throws InvalidAlgorithmParameterException
   4951 -        {
   4952 -            throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for GOST3410 parameter generation.");
   4953 -        }
   4954 -        
   4955 -        protected AlgorithmParameters engineGenerateParameters()
   4956 -        {
   4957 -            GOST3410ParametersGenerator pGen = new GOST3410ParametersGenerator();
   4958 -            
   4959 -            if (random != null)
   4960 -            {
   4961 -                pGen.init(strength, 2, random);
   4962 -            }
   4963 -            else
   4964 -            {
   4965 -                pGen.init(strength, 2, new SecureRandom());
   4966 -            }
   4967 -            
   4968 -            GOST3410Parameters p = pGen.generateParameters();
   4969 -            
   4970 -            AlgorithmParameters params;
   4971 -            
   4972 -            try
   4973 -            {
   4974 -                params = AlgorithmParameters.getInstance("GOST3410", BouncyCastleProvider.PROVIDER_NAME);
   4975 -                params.init(new GOST3410ParameterSpec(new GOST3410PublicKeyParameterSetSpec(p.getP(), p.getQ(), p.getA())));
   4976 -            }
   4977 -            catch (Exception e)
   4978 -            {
   4979 -                throw new RuntimeException(e.getMessage());
   4980 -            }
   4981 -            
   4982 -            return params;
   4983 -        }
   4984 -    }
   4985 -    
   4986 -    public static class ElGamal
   4987 -        extends JDKAlgorithmParameterGenerator
   4988 -    {
   4989 -        private int l = 0;
   4990 -        
   4991 -        protected void engineInit(
   4992 -            AlgorithmParameterSpec  genParamSpec,
   4993 -            SecureRandom            random)
   4994 -            throws InvalidAlgorithmParameterException
   4995 -        {
   4996 -            if (!(genParamSpec instanceof DHGenParameterSpec))
   4997 -            {
   4998 -                throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation");
   4999 -            }
   5000 -            DHGenParameterSpec  spec = (DHGenParameterSpec)genParamSpec;
   5001 -
   5002 -            this.strength = spec.getPrimeSize();
   5003 -            this.l = spec.getExponentSize();
   5004 -            this.random = random;
   5005 -        }
   5006 -
   5007 -        protected AlgorithmParameters engineGenerateParameters()
   5008 -        {
   5009 -            ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
   5010 -
   5011 -            if (random != null)
   5012 -            {
   5013 -                pGen.init(strength, 20, random);
   5014 -            }
   5015 -            else
   5016 -            {
   5017 -                pGen.init(strength, 20, new SecureRandom());
   5018 -            }
   5019 -
   5020 -            ElGamalParameters p = pGen.generateParameters();
   5021 -
   5022 -            AlgorithmParameters params;
   5023 -
   5024 -            try
   5025 -            {
   5026 -                params = AlgorithmParameters.getInstance("ElGamal", BouncyCastleProvider.PROVIDER_NAME);
   5027 -                params.init(new DHParameterSpec(p.getP(), p.getG(), l));
   5028 -            }
   5029 -            catch (Exception e)
   5030 -            {
   5031 -                throw new RuntimeException(e.getMessage());
   5032 -            }
   5033 -
   5034 -            return params;
   5035 -        }
   5036 -    }
   5037 -
   5038 -    public static class DES
   5039 -        extends JDKAlgorithmParameterGenerator
   5040 -    {
   5041 -        protected void engineInit(
   5042 -            AlgorithmParameterSpec  genParamSpec,
   5043 -            SecureRandom            random)
   5044 -            throws InvalidAlgorithmParameterException
   5045 -        {
   5046 -            throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
   5047 -        }
   5048 -
   5049 -        protected AlgorithmParameters engineGenerateParameters()
   5050 -        {
   5051 -            byte[]  iv = new byte[8];
   5052 -
   5053 -            if (random == null)
   5054 -            {
   5055 -                random = new SecureRandom();
   5056 -            }
   5057 -
   5058 -            random.nextBytes(iv);
   5059 -
   5060 -            AlgorithmParameters params;
   5061 -
   5062 -            try
   5063 -            {
   5064 -                params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
   5065 -                params.init(new IvParameterSpec(iv));
   5066 -            }
   5067 -            catch (Exception e)
   5068 -            {
   5069 -                throw new RuntimeException(e.getMessage());
   5070 -            }
   5071 -
   5072 -            return params;
   5073 -        }
   5074 -    }
   5075 -
   5076 -    public static class RC2
   5077 -        extends JDKAlgorithmParameterGenerator
   5078 -    {
   5079 -        RC2ParameterSpec    spec = null;
   5080 -
   5081 -        protected void engineInit(
   5082 -            AlgorithmParameterSpec  genParamSpec,
   5083 -            SecureRandom            random)
   5084 -            throws InvalidAlgorithmParameterException
   5085 -        {
   5086 -            if (genParamSpec instanceof RC2ParameterSpec)
   5087 -            {
   5088 -                spec = (RC2ParameterSpec)genParamSpec;
   5089 -                return;
   5090 -            }
   5091 -
   5092 -            throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
   5093 -        }
   5094 -
   5095 -        protected AlgorithmParameters engineGenerateParameters()
   5096 -        {
   5097 -            AlgorithmParameters params;
   5098 -
   5099 -            if (spec == null)
   5100 -            {
   5101 -                byte[]  iv = new byte[8];
   5102 -
   5103 -                if (random == null)
   5104 -                {
   5105 -                    random = new SecureRandom();
   5106 -                }
   5107 -
   5108 -                random.nextBytes(iv);
   5109 -
   5110 -                try
   5111 -                {
   5112 -                    params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
   5113 -                    params.init(new IvParameterSpec(iv));
   5114 -                }
   5115 -                catch (Exception e)
   5116 -                {
   5117 -                    throw new RuntimeException(e.getMessage());
   5118 -                }
   5119 -            }
   5120 -            else
   5121 -            {
   5122 -                try
   5123 -                {
   5124 -                    params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
   5125 -                    params.init(spec);
   5126 -                }
   5127 -                catch (Exception e)
   5128 -                {
   5129 -                    throw new RuntimeException(e.getMessage());
   5130 -                }
   5131 -            }
   5132 -
   5133 -            return params;
   5134 -        }
   5135 -    }
   5136 +    // BEGIN android-removed
   5137 +    // public static class GOST3410
   5138 +    //     extends JDKAlgorithmParameterGenerator
   5139 +    // {
   5140 +    //     protected void engineInit(
   5141 +    //             AlgorithmParameterSpec  genParamSpec,
   5142 +    //             SecureRandom            random)
   5143 +    //     throws InvalidAlgorithmParameterException
   5144 +    //     {
   5145 +    //         throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for GOST3410 parameter generation.");
   5146 +    //     }
   5147 +    //    
   5148 +    //     protected AlgorithmParameters engineGenerateParameters()
   5149 +    //     {
   5150 +    //         GOST3410ParametersGenerator pGen = new GOST3410ParametersGenerator();
   5151 +    //        
   5152 +    //         if (random != null)
   5153 +    //         {
   5154 +    //             pGen.init(strength, 2, random);
   5155 +    //         }
   5156 +    //         else
   5157 +    //         {
   5158 +    //             pGen.init(strength, 2, new SecureRandom());
   5159 +    //         }
   5160 +    //        
   5161 +    //         GOST3410Parameters p = pGen.generateParameters();
   5162 +    //        
   5163 +    //         AlgorithmParameters params;
   5164 +    //
   5165 +    //         try
   5166 +    //         {
   5167 +    //             params = AlgorithmParameters.getInstance("GOST3410", BouncyCastleProvider.PROVIDER_NAME);
   5168 +    //             params.init(new GOST3410ParameterSpec(new GOST3410PublicKeyParameterSetSpec(p.getP(), p.getQ(), p.getA())));
   5169 +    //         }
   5170 +    //         catch (Exception e)
   5171 +    //         {
   5172 +    //             throw new RuntimeException(e.getMessage());
   5173 +    //         }
   5174 +    //
   5175 +    //         return params;
   5176 +    //     }
   5177 +    // }
   5178 +    //
   5179 +    // public static class ElGamal
   5180 +    //     extends JDKAlgorithmParameterGenerator
   5181 +    // {
   5182 +    //     private int l = 0;
   5183 +    //
   5184 +    //     protected void engineInit(
   5185 +    //         AlgorithmParameterSpec  genParamSpec,
   5186 +    //         SecureRandom            random)
   5187 +    //         throws InvalidAlgorithmParameterException
   5188 +    //     {
   5189 +    //         if (!(genParamSpec instanceof DHGenParameterSpec))
   5190 +    //         {
   5191 +    //             throw new InvalidAlgorithmParameterException("DH parameter generator requires a DHGenParameterSpec for initialisation");
   5192 +    //         }
   5193 +    //         DHGenParameterSpec  spec = (DHGenParameterSpec)genParamSpec;
   5194 +    //
   5195 +    //         this.strength = spec.getPrimeSize();
   5196 +    //         this.l = spec.getExponentSize();
   5197 +    //         this.random = random;
   5198 +    //     }
   5199 +    //
   5200 +    //     protected AlgorithmParameters engineGenerateParameters()
   5201 +    //     {
   5202 +    //         ElGamalParametersGenerator pGen = new ElGamalParametersGenerator();
   5203 +    //
   5204 +    //         if (random != null)
   5205 +    //         {
   5206 +    //             pGen.init(strength, 20, random);
   5207 +    //         }
   5208 +    //         else
   5209 +    //         {
   5210 +    //             pGen.init(strength, 20, new SecureRandom());
   5211 +    //         }
   5212 +    //
   5213 +    //         ElGamalParameters p = pGen.generateParameters();
   5214 +    //
   5215 +    //         AlgorithmParameters params;
   5216 +    //
   5217 +    //         try
   5218 +    //         {
   5219 +    //             params = AlgorithmParameters.getInstance("ElGamal", BouncyCastleProvider.PROVIDER_NAME);
   5220 +    //             params.init(new DHParameterSpec(p.getP(), p.getG(), l));
   5221 +    //         }
   5222 +    //         catch (Exception e)
   5223 +    //         {
   5224 +    //             throw new RuntimeException(e.getMessage());
   5225 +    //         }
   5226 +    //
   5227 +    //         return params;
   5228 +    //     }
   5229 +    // }
   5230 +    //
   5231 +    // public static class DES
   5232 +    //     extends JDKAlgorithmParameterGenerator
   5233 +    // {
   5234 +    //     protected void engineInit(
   5235 +    //         AlgorithmParameterSpec  genParamSpec,
   5236 +    //         SecureRandom            random)
   5237 +    //         throws InvalidAlgorithmParameterException
   5238 +    //     {
   5239 +    //         throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for DES parameter generation.");
   5240 +    //     }
   5241 +    //
   5242 +    //     protected AlgorithmParameters engineGenerateParameters()
   5243 +    //     {
   5244 +    //         byte[]  iv = new byte[8];
   5245 +    //
   5246 +    //         if (random == null)
   5247 +    //         {
   5248 +    //             random = new SecureRandom();
   5249 +    //         }
   5250 +    //
   5251 +    //         random.nextBytes(iv);
   5252 +    //
   5253 +    //         AlgorithmParameters params;
   5254 +    //
   5255 +    //         try
   5256 +    //         {
   5257 +    //             params = AlgorithmParameters.getInstance("DES", BouncyCastleProvider.PROVIDER_NAME);
   5258 +    //             params.init(new IvParameterSpec(iv));
   5259 +    //         }
   5260 +    //         catch (Exception e)
   5261 +    //         {
   5262 +    //             throw new RuntimeException(e.getMessage());
   5263 +    //         }
   5264 +    //
   5265 +    //         return params;
   5266 +    //     }
   5267 +    // }
   5268 +    //
   5269 +    // public static class RC2
   5270 +    //     extends JDKAlgorithmParameterGenerator
   5271 +    // {
   5272 +    //     RC2ParameterSpec    spec = null;
   5273 +    //
   5274 +    //     protected void engineInit(
   5275 +    //         AlgorithmParameterSpec  genParamSpec,
   5276 +    //         SecureRandom            random)
   5277 +    //         throws InvalidAlgorithmParameterException
   5278 +    //     {
   5279 +    //         if (genParamSpec instanceof RC2ParameterSpec)
   5280 +    //         {
   5281 +    //             spec = (RC2ParameterSpec)genParamSpec;
   5282 +    //             return;
   5283 +    //         }
   5284 +    //
   5285 +    //         throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
   5286 +    //     }
   5287 +    //
   5288 +    //     protected AlgorithmParameters engineGenerateParameters()
   5289 +    //     {
   5290 +    //         AlgorithmParameters params;
   5291 +    //
   5292 +    //         if (spec == null)
   5293 +    //         {
   5294 +    //             byte[]  iv = new byte[8];
   5295 +    //
   5296 +    //             if (random == null)
   5297 +    //             {
   5298 +    //                 random = new SecureRandom();
   5299 +    //             }
   5300 +    //
   5301 +    //             random.nextBytes(iv);
   5302 +    //
   5303 +    //             try
   5304 +    //             {
   5305 +    //                 params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
   5306 +    //                 params.init(new IvParameterSpec(iv));
   5307 +    //             }
   5308 +    //             catch (Exception e)
   5309 +    //             {
   5310 +    //                 throw new RuntimeException(e.getMessage());
   5311 +    //             }
   5312 +    //         }
   5313 +    //         else
   5314 +    //         {
   5315 +    //             try
   5316 +    //             {
   5317 +    //                 params = AlgorithmParameters.getInstance("RC2", BouncyCastleProvider.PROVIDER_NAME);
   5318 +    //                 params.init(spec);
   5319 +    //             }
   5320 +    //             catch (Exception e)
   5321 +    //             {
   5322 +    //                 throw new RuntimeException(e.getMessage());
   5323 +    //             }
   5324 +    //         }
   5325 +    //
   5326 +    //         return params;
   5327 +    //     }
   5328 +    // }
   5329 +    // END android-removed
   5330  }
   5331 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java
   5332 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java	2011-02-23 20:08:56.000000000 +0000
   5333 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKAlgorithmParameters.java	2011-09-08 21:28:49.000000000 +0000
   5334 @@ -10,21 +10,27 @@
   5335  import org.bouncycastle.asn1.DERObjectIdentifier;
   5336  import org.bouncycastle.asn1.DEROctetString;
   5337  import org.bouncycastle.asn1.DERSequence;
   5338 -import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
   5339 -import org.bouncycastle.asn1.oiw.ElGamalParameter;
   5340 +// BEGIN android-removed
   5341 +// import org.bouncycastle.asn1.cryptopro.GOST3410PublicKeyAlgParameters;
   5342 +// import org.bouncycastle.asn1.oiw.ElGamalParameter;
   5343 +// END android-removed
   5344  import org.bouncycastle.asn1.pkcs.DHParameter;
   5345  import org.bouncycastle.asn1.pkcs.PKCS12PBEParams;
   5346  import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
   5347 -import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
   5348 +// BEGIN android-removed
   5349 +// import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
   5350 +// END android-removed
   5351  import org.bouncycastle.asn1.pkcs.RSAESOAEPparams;
   5352  import org.bouncycastle.asn1.pkcs.RSASSAPSSparams;
   5353  import org.bouncycastle.asn1.pkcs.PBKDF2Params;
   5354  import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
   5355  import org.bouncycastle.asn1.x509.DSAParameter;
   5356 -import org.bouncycastle.jce.spec.ElGamalParameterSpec;
   5357 -import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
   5358 -import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
   5359 -import org.bouncycastle.jce.spec.IESParameterSpec;
   5360 +// BEGIN android-removed
   5361 +// import org.bouncycastle.jce.spec.ElGamalParameterSpec;
   5362 +// import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
   5363 +// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
   5364 +// import org.bouncycastle.jce.spec.IESParameterSpec;
   5365 +// END android-removed
   5366  import org.bouncycastle.util.Arrays;
   5367  
   5368  import javax.crypto.spec.DHParameterSpec;
   5369 @@ -32,7 +38,9 @@
   5370  import javax.crypto.spec.OAEPParameterSpec;
   5371  import javax.crypto.spec.PBEParameterSpec;
   5372  import javax.crypto.spec.PSource;
   5373 -import javax.crypto.spec.RC2ParameterSpec;
   5374 +// BEGIN android-removed
   5375 +// import javax.crypto.spec.RC2ParameterSpec;
   5376 +// END android-removed
   5377  import java.io.IOException;
   5378  import java.security.AlgorithmParametersSpi;
   5379  import java.security.spec.AlgorithmParameterSpec;
   5380 @@ -68,13 +76,13 @@
   5381          extends JDKAlgorithmParameters
   5382      {
   5383          private byte[]  iv;
   5384 -
   5385 +    
   5386          protected byte[] engineGetEncoded() 
   5387              throws IOException
   5388          {
   5389              return engineGetEncoded("ASN.1");
   5390          }
   5391 -
   5392 +    
   5393          protected byte[] engineGetEncoded(
   5394              String format) 
   5395              throws IOException
   5396 @@ -83,15 +91,15 @@
   5397              {
   5398                   return new DEROctetString(engineGetEncoded("RAW")).getEncoded();
   5399              }
   5400 -            
   5401 +    
   5402              if (format.equals("RAW"))
   5403              {
   5404                  return Arrays.clone(iv);
   5405              }
   5406 -
   5407 +    
   5408              return null;
   5409          }
   5410 -
   5411 +    
   5412          protected AlgorithmParameterSpec localEngineGetParameterSpec(
   5413              Class paramSpec) 
   5414              throws InvalidParameterSpecException
   5415 @@ -100,10 +108,10 @@
   5416              {
   5417                  return new IvParameterSpec(iv);
   5418              }
   5419 -
   5420 +    
   5421              throw new InvalidParameterSpecException("unknown parameter spec passed to IV parameters object.");
   5422          }
   5423 -
   5424 +    
   5425          protected void engineInit(
   5426              AlgorithmParameterSpec paramSpec) 
   5427              throws InvalidParameterSpecException
   5428 @@ -112,10 +120,10 @@
   5429              {
   5430                  throw new InvalidParameterSpecException("IvParameterSpec required to initialise a IV parameters algorithm parameters object");
   5431              }
   5432 -
   5433 +    
   5434              this.iv = ((IvParameterSpec)paramSpec).getIV();
   5435          }
   5436 -
   5437 +    
   5438          protected void engineInit(
   5439              byte[] params) 
   5440              throws IOException
   5441 @@ -127,13 +135,13 @@
   5442                      && params[0] == 0x04 && params[1] == params.length - 2)
   5443              {
   5444                  ASN1OctetString oct = (ASN1OctetString)ASN1Object.fromByteArray(params);
   5445 -
   5446 +    
   5447                  params = oct.getOctets();
   5448              }
   5449 -
   5450 +    
   5451              this.iv = Arrays.clone(params);
   5452          }
   5453 -
   5454 +    
   5455          protected void engineInit(
   5456              byte[] params,
   5457              String format) 
   5458 @@ -144,204 +152,206 @@
   5459                  try
   5460                  {
   5461                      ASN1OctetString oct = (ASN1OctetString)ASN1Object.fromByteArray(params);
   5462 -
   5463 +    
   5464                      engineInit(oct.getOctets());
   5465                  }
   5466                  catch (Exception e)
   5467                  {
   5468                      throw new IOException("Exception decoding: " + e);
   5469                  }
   5470 -                
   5471 +    
   5472                  return;
   5473              }
   5474 -
   5475 +    
   5476              if (format.equals("RAW"))
   5477              {
   5478                  engineInit(params);
   5479                  return;
   5480              }
   5481 -
   5482 +    
   5483              throw new IOException("Unknown parameters format in IV parameters object");
   5484          }
   5485 -
   5486 +    
   5487          protected String engineToString() 
   5488          {
   5489              return "IV Parameters";
   5490          }
   5491      }
   5492 -
   5493 -    public static class RC2AlgorithmParameters
   5494 -        extends JDKAlgorithmParameters
   5495 -    {
   5496 -        private static final short[] table = {
   5497 -           0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
   5498 -           0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
   5499 -           0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
   5500 -           0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
   5501 -           0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
   5502 -           0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
   5503 -           0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
   5504 -           0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
   5505 -           0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
   5506 -           0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
   5507 -           0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
   5508 -           0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
   5509 -           0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
   5510 -           0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
   5511 -           0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
   5512 -           0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
   5513 -        };
   5514 -
   5515 -        private static final short[] ekb = {
   5516 -           0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
   5517 -           0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
   5518 -           0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
   5519 -           0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
   5520 -           0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
   5521 -           0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
   5522 -           0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
   5523 -           0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
   5524 -           0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
   5525 -           0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
   5526 -           0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
   5527 -           0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
   5528 -           0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
   5529 -           0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
   5530 -           0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
   5531 -           0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
   5532 -        };
   5533 -
   5534 -        private byte[]  iv;
   5535 -        private int     parameterVersion = 58;
   5536 -
   5537 -        protected byte[] engineGetEncoded() 
   5538 -        {
   5539 -            return Arrays.clone(iv);
   5540 -        }
   5541 -
   5542 -        protected byte[] engineGetEncoded(
   5543 -            String format) 
   5544 -            throws IOException
   5545 -        {
   5546 -            if (isASN1FormatString(format))
   5547 -            {
   5548 -                if (parameterVersion == -1)
   5549 -                {
   5550 -                    return new RC2CBCParameter(engineGetEncoded()).getEncoded();
   5551 -                }
   5552 -                else
   5553 -                {
   5554 -                    return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
   5555 -                }
   5556 -            }
   5557 -
   5558 -            if (format.equals("RAW"))
   5559 -            {
   5560 -                return engineGetEncoded();
   5561 -            }
   5562 -
   5563 -            return null;
   5564 -        }
   5565 -
   5566 -        protected AlgorithmParameterSpec localEngineGetParameterSpec(
   5567 -            Class paramSpec) 
   5568 -            throws InvalidParameterSpecException
   5569 -        {
   5570 -            if (paramSpec == RC2ParameterSpec.class)
   5571 -            {
   5572 -                if (parameterVersion != -1)
   5573 -                {
   5574 -                    if (parameterVersion < 256)
   5575 -                    {
   5576 -                        return new RC2ParameterSpec(ekb[parameterVersion], iv);
   5577 -                    }
   5578 -                    else
   5579 -                    {
   5580 -                        return new RC2ParameterSpec(parameterVersion, iv);
   5581 -                    }
   5582 -                }
   5583 -            }
   5584 -
   5585 -            if (paramSpec == IvParameterSpec.class)
   5586 -            {
   5587 -                return new IvParameterSpec(iv);
   5588 -            }
   5589 -
   5590 -            throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
   5591 -        }
   5592 -
   5593 -        protected void engineInit(
   5594 -            AlgorithmParameterSpec paramSpec) 
   5595 -            throws InvalidParameterSpecException
   5596 -        {
   5597 -            if (paramSpec instanceof IvParameterSpec)
   5598 -            {
   5599 -                this.iv = ((IvParameterSpec)paramSpec).getIV();
   5600 -            }
   5601 -            else if (paramSpec instanceof RC2ParameterSpec)
   5602 -            {
   5603 -                int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
   5604 -                if (effKeyBits != -1)
   5605 -                {
   5606 -                    if (effKeyBits < 256)
   5607 -                    {
   5608 -                        parameterVersion = table[effKeyBits];
   5609 -                    }
   5610 -                    else
   5611 -                    {
   5612 -                        parameterVersion = effKeyBits;
   5613 -                    }
   5614 -                }
   5615 -
   5616 -                this.iv = ((RC2ParameterSpec)paramSpec).getIV();
   5617 -            }
   5618 -            else
   5619 -            {
   5620 -                throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
   5621 -            }
   5622 -        }
   5623 -
   5624 -        protected void engineInit(
   5625 -            byte[] params) 
   5626 -            throws IOException
   5627 -        {
   5628 -            this.iv = Arrays.clone(params);
   5629 -        }
   5630 -
   5631 -        protected void engineInit(
   5632 -            byte[] params,
   5633 -            String format) 
   5634 -            throws IOException
   5635 -        {
   5636 -            if (isASN1FormatString(format))
   5637 -            {
   5638 -                RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Object.fromByteArray(params));
   5639 -
   5640 -                if (p.getRC2ParameterVersion() != null)
   5641 -                {
   5642 -                    parameterVersion = p.getRC2ParameterVersion().intValue();
   5643 -                }
   5644 -
   5645 -                iv = p.getIV();
   5646 -
   5647 -                return;
   5648 -            }
   5649 -
   5650 -            if (format.equals("RAW"))
   5651 -            {
   5652 -                engineInit(params);
   5653 -                return;
   5654 -            }
   5655 -
   5656 -            throw new IOException("Unknown parameters format in IV parameters object");
   5657 -        }
   5658 -
   5659 -        protected String engineToString() 
   5660 -        {
   5661 -            return "RC2 Parameters";
   5662 -        }
   5663 -    }
   5664 -
   5665 +    
   5666 +    // BEGIN android-removed
   5667 +    // public static class RC2AlgorithmParameters
   5668 +    //     extends JDKAlgorithmParameters
   5669 +    // {
   5670 +    //     private static final short[] table = {
   5671 +    //        0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
   5672 +    //        0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
   5673 +    //        0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
   5674 +    //        0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
   5675 +    //        0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
   5676 +    //        0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
   5677 +    //        0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
   5678 +    //        0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
   5679 +    //        0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
   5680 +    //        0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
   5681 +    //        0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
   5682 +    //        0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
   5683 +    //        0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
   5684 +    //        0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
   5685 +    //        0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
   5686 +    //        0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
   5687 +    //     };
   5688 +    //
   5689 +    //     private static final short[] ekb = {
   5690 +    //        0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
   5691 +    //        0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
   5692 +    //        0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
   5693 +    //        0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
   5694 +    //        0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
   5695 +    //        0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
   5696 +    //        0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
   5697 +    //        0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
   5698 +    //        0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
   5699 +    //        0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
   5700 +    //        0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
   5701 +    //        0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
   5702 +    //        0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
   5703 +    //        0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
   5704 +    //        0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
   5705 +    //        0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
   5706 +    //     };
   5707 +    //
   5708 +    //     private byte[]  iv;
   5709 +    //     private int     parameterVersion = 58;
   5710 +    //
   5711 +    //     protected byte[] engineGetEncoded() 
   5712 +    //     {
   5713 +    //         return Arrays.clone(iv);
   5714 +    //     }
   5715 +    //
   5716 +    //     protected byte[] engineGetEncoded(
   5717 +    //         String format) 
   5718 +    //         throws IOException
   5719 +    //     {
   5720 +    //         if (isASN1FormatString(format))
   5721 +    //         {
   5722 +    //             if (parameterVersion == -1)
   5723 +    //             {
   5724 +    //                 return new RC2CBCParameter(engineGetEncoded()).getEncoded();
   5725 +    //             }
   5726 +    //             else
   5727 +    //             {
   5728 +    //                 return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
   5729 +    //             }
   5730 +    //         }
   5731 +    //
   5732 +    //         if (format.equals("RAW"))
   5733 +    //         {
   5734 +    //             return engineGetEncoded();
   5735 +    //         }
   5736 +    //
   5737 +    //         return null;
   5738 +    //     }
   5739 +    //
   5740 +    //     protected AlgorithmParameterSpec localEngineGetParameterSpec(
   5741 +    //         Class paramSpec) 
   5742 +    //         throws InvalidParameterSpecException
   5743 +    //     {
   5744 +    //         if (paramSpec == RC2ParameterSpec.class)
   5745 +    //         {
   5746 +    //             if (parameterVersion != -1)
   5747 +    //             {
   5748 +    //                 if (parameterVersion < 256)
   5749 +    //                 {
   5750 +    //                     return new RC2ParameterSpec(ekb[parameterVersion], iv);
   5751 +    //                 }
   5752 +    //                 else
   5753 +    //                 {
   5754 +    //                     return new RC2ParameterSpec(parameterVersion, iv);
   5755 +    //                 }
   5756 +    //             }
   5757 +    //         }
   5758 +    //
   5759 +    //         if (paramSpec == IvParameterSpec.class)
   5760 +    //         {
   5761 +    //             return new IvParameterSpec(iv);
   5762 +    //         }
   5763 +    //
   5764 +    //         throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
   5765 +    //     }
   5766 +    //
   5767 +    //     protected void engineInit(
   5768 +    //         AlgorithmParameterSpec paramSpec) 
   5769 +    //         throws InvalidParameterSpecException
   5770 +    //     {
   5771 +    //         if (paramSpec instanceof IvParameterSpec)
   5772 +    //         {
   5773 +    //             this.iv = ((IvParameterSpec)paramSpec).getIV();
   5774 +    //         }
   5775 +    //         else if (paramSpec instanceof RC2ParameterSpec)
   5776 +    //         {
   5777 +    //             int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
   5778 +    //             if (effKeyBits != -1)
   5779 +    //             {
   5780 +    //                 if (effKeyBits < 256)
   5781 +    //                 {
   5782 +    //                     parameterVersion = table[effKeyBits];
   5783 +    //                 }
   5784 +    //                 else
   5785 +    //                 {
   5786 +    //                     parameterVersion = effKeyBits;
   5787 +    //                 }
   5788 +    //             }
   5789 +    //
   5790 +    //             this.iv = ((RC2ParameterSpec)paramSpec).getIV();
   5791 +    //         }
   5792 +    //         else
   5793 +    //         {
   5794 +    //             throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
   5795 +    //         }
   5796 +    //     }
   5797 +    //
   5798 +    //     protected void engineInit(
   5799 +    //         byte[] params) 
   5800 +    //         throws IOException
   5801 +    //     {
   5802 +    //         this.iv = Arrays.clone(params);
   5803 +    //     }
   5804 +    //
   5805 +    //     protected void engineInit(
   5806 +    //         byte[] params,
   5807 +    //         String format) 
   5808 +    //         throws IOException
   5809 +    //     {
   5810 +    //         if (isASN1FormatString(format))
   5811 +    //         {
   5812 +    //             RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Object.fromByteArray(params));
   5813 +    //
   5814 +    //             if (p.getRC2ParameterVersion() != null)
   5815 +    //             {
   5816 +    //                 parameterVersion = p.getRC2ParameterVersion().intValue();
   5817 +    //             }
   5818 +    //
   5819 +    //             iv = p.getIV();
   5820 +    //
   5821 +    //             return;
   5822 +    //         }
   5823 +    //
   5824 +    //         if (format.equals("RAW"))
   5825 +    //         {
   5826 +    //             engineInit(params);
   5827 +    //             return;
   5828 +    //         }
   5829 +    //
   5830 +    //         throw new IOException("Unknown parameters format in IV parameters object");
   5831 +    //     }
   5832 +    //
   5833 +    //     protected String engineToString() 
   5834 +    //     {
   5835 +    //         return "RC2 Parameters";
   5836 +    //     }
   5837 +    // }
   5838 +    // END android-removed
   5839 +    
   5840      public static class PBKDF2
   5841          extends JDKAlgorithmParameters
   5842      {
   5843 @@ -429,7 +439,7 @@
   5844          extends JDKAlgorithmParameters
   5845      {
   5846          PKCS12PBEParams params;
   5847 -
   5848 +    
   5849          protected byte[] engineGetEncoded() 
   5850          {
   5851              try
   5852 @@ -441,7 +451,7 @@
   5853                  throw new RuntimeException("Oooops! " + e.toString());
   5854              }
   5855          }
   5856 -
   5857 +    
   5858          protected byte[] engineGetEncoded(
   5859              String format) 
   5860          {
   5861 @@ -449,10 +459,10 @@
   5862              {
   5863                  return engineGetEncoded();
   5864              }
   5865 -
   5866 +    
   5867              return null;
   5868          }
   5869 -
   5870 +    
   5871          protected AlgorithmParameterSpec localEngineGetParameterSpec(
   5872              Class paramSpec) 
   5873              throws InvalidParameterSpecException
   5874 @@ -462,10 +472,10 @@
   5875                  return new PBEParameterSpec(params.getIV(),
   5876                                  params.getIterations().intValue());
   5877              }
   5878 -
   5879 +    
   5880              throw new InvalidParameterSpecException("unknown parameter spec passed to PKCS12 PBE parameters object.");
   5881          }
   5882 -
   5883 +    
   5884          protected void engineInit(
   5885              AlgorithmParameterSpec paramSpec) 
   5886              throws InvalidParameterSpecException
   5887 @@ -474,20 +484,20 @@
   5888              {
   5889                  throw new InvalidParameterSpecException("PBEParameterSpec required to initialise a PKCS12 PBE parameters algorithm parameters object");
   5890              }
   5891 -
   5892 +    
   5893              PBEParameterSpec    pbeSpec = (PBEParameterSpec)paramSpec;
   5894 -
   5895 +    
   5896              this.params = new PKCS12PBEParams(pbeSpec.getSalt(),
   5897                                  pbeSpec.getIterationCount());
   5898          }
   5899 -
   5900 +    
   5901          protected void engineInit(
   5902              byte[] params) 
   5903              throws IOException
   5904          {
   5905              this.params = PKCS12PBEParams.getInstance(ASN1Object.fromByteArray(params));
   5906          }
   5907 -
   5908 +    
   5909          protected void engineInit(
   5910              byte[] params,
   5911              String format) 
   5912 @@ -498,10 +508,10 @@
   5913                  engineInit(params);
   5914                  return;
   5915              }
   5916 -
   5917 +    
   5918              throw new IOException("Unknown parameters format in PKCS12 PBE parameters object");
   5919          }
   5920 -
   5921 +    
   5922          protected String engineToString() 
   5923          {
   5924              return "PKCS12 PBE Parameters";
   5925 @@ -725,334 +735,336 @@
   5926          }
   5927      }
   5928      
   5929 -    public static class GOST3410
   5930 -        extends JDKAlgorithmParameters
   5931 -    {
   5932 -        GOST3410ParameterSpec     currentSpec;
   5933 -        
   5934 -        /**
   5935 -         * Return the X.509 ASN.1 structure GOST3410Parameter.
   5936 -         * <p>
   5937 -         * <pre>
   5938 -         *  GOST3410Parameter ::= SEQUENCE {
   5939 -         *                   prime INTEGER, -- p
   5940 -         *                   subprime INTEGER, -- q
   5941 -         *                   base INTEGER, -- a}
   5942 -         * </pre>
   5943 -         */
   5944 -        protected byte[] engineGetEncoded()
   5945 -        {
   5946 -            GOST3410PublicKeyAlgParameters gost3410P = new GOST3410PublicKeyAlgParameters(new DERObjectIdentifier(currentSpec.getPublicKeyParamSetOID()), new DERObjectIdentifier(currentSpec.getDigestParamSetOID()), new DERObjectIdentifier(currentSpec.getEncryptionParamSetOID()));
   5947 -
   5948 -            try
   5949 -            {
   5950 -                return gost3410P.getEncoded(ASN1Encodable.DER);
   5951 -            }
   5952 -            catch (IOException e)
   5953 -            {
   5954 -                throw new RuntimeException("Error encoding GOST3410Parameters");
   5955 -            }
   5956 -        }
   5957 -        
   5958 -        protected byte[] engineGetEncoded(
   5959 -                String format)
   5960 -        {
   5961 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   5962 -            {
   5963 -                return engineGetEncoded();
   5964 -            }
   5965 -            
   5966 -            return null;
   5967 -        }
   5968 -        
   5969 -        protected AlgorithmParameterSpec localEngineGetParameterSpec(
   5970 -                Class paramSpec)
   5971 -        throws InvalidParameterSpecException
   5972 -        {
   5973 -            if (paramSpec == GOST3410PublicKeyParameterSetSpec.class)
   5974 -            {
   5975 -                return currentSpec;
   5976 -            }
   5977 -            
   5978 -            throw new InvalidParameterSpecException("unknown parameter spec passed to GOST3410 parameters object.");
   5979 -        }
   5980 -        
   5981 -        protected void engineInit(
   5982 -                AlgorithmParameterSpec paramSpec)
   5983 -        throws InvalidParameterSpecException
   5984 -        {
   5985 -            if (!(paramSpec instanceof GOST3410ParameterSpec))
   5986 -            {
   5987 -                throw new InvalidParameterSpecException("GOST3410ParameterSpec required to initialise a GOST3410 algorithm parameters object");
   5988 -            }
   5989 -            
   5990 -            this.currentSpec = (GOST3410ParameterSpec)paramSpec;
   5991 -        }
   5992 -        
   5993 -        protected void engineInit(
   5994 -                byte[] params)
   5995 -        throws IOException
   5996 -        {
   5997 -            try
   5998 -            {
   5999 -                ASN1Sequence seq = (ASN1Sequence) ASN1Object.fromByteArray(params);
   6000 -
   6001 -                this.currentSpec = GOST3410ParameterSpec.fromPublicKeyAlg(
   6002 -                    new GOST3410PublicKeyAlgParameters(seq));
   6003 -            }
   6004 -            catch (ClassCastException e)
   6005 -            {
   6006 -                throw new IOException("Not a valid GOST3410 Parameter encoding.");
   6007 -            }
   6008 -            catch (ArrayIndexOutOfBoundsException e)
   6009 -            {
   6010 -                throw new IOException("Not a valid GOST3410 Parameter encoding.");
   6011 -            }
   6012 -        }
   6013 -        
   6014 -        protected void engineInit(
   6015 -                byte[] params,
   6016 -                String format)
   6017 -        throws IOException
   6018 -        {
   6019 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6020 -            {
   6021 -                engineInit(params);
   6022 -            }
   6023 -            else
   6024 -            {
   6025 -                throw new IOException("Unknown parameter format " + format);
   6026 -            }
   6027 -        }
   6028 -        
   6029 -        protected String engineToString()
   6030 -        {
   6031 -            return "GOST3410 Parameters";
   6032 -        }
   6033 -    }
   6034 -
   6035 -    public static class ElGamal
   6036 -        extends JDKAlgorithmParameters
   6037 -    {
   6038 -        ElGamalParameterSpec     currentSpec;
   6039 -
   6040 -        /**
   6041 -         * Return the X.509 ASN.1 structure ElGamalParameter.
   6042 -         * <p>
   6043 -         * <pre>
   6044 -         *  ElGamalParameter ::= SEQUENCE {
   6045 -         *                   prime INTEGER, -- p
   6046 -         *                   base INTEGER, -- g}
   6047 -         * </pre>
   6048 -         */
   6049 -        protected byte[] engineGetEncoded() 
   6050 -        {
   6051 -            ElGamalParameter elP = new ElGamalParameter(currentSpec.getP(), currentSpec.getG());
   6052 -
   6053 -            try
   6054 -            {
   6055 -                return elP.getEncoded(ASN1Encodable.DER);
   6056 -            }
   6057 -            catch (IOException e)
   6058 -            {
   6059 -                throw new RuntimeException("Error encoding ElGamalParameters");
   6060 -            }
   6061 -        }
   6062 -
   6063 -        protected byte[] engineGetEncoded(
   6064 -            String format) 
   6065 -        {
   6066 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6067 -            {
   6068 -                return engineGetEncoded();
   6069 -            }
   6070 -
   6071 -            return null;
   6072 -        }
   6073 -
   6074 -        protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6075 -            Class paramSpec) 
   6076 -            throws InvalidParameterSpecException
   6077 -        {
   6078 -            if (paramSpec == ElGamalParameterSpec.class)
   6079 -            {
   6080 -                return currentSpec;
   6081 -            }
   6082 -            else if (paramSpec == DHParameterSpec.class)
   6083 -            {
   6084 -                return new DHParameterSpec(currentSpec.getP(), currentSpec.getG());
   6085 -            }
   6086 -
   6087 -            throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
   6088 -        }
   6089 -
   6090 -        protected void engineInit(
   6091 -            AlgorithmParameterSpec paramSpec) 
   6092 -            throws InvalidParameterSpecException
   6093 -        {
   6094 -            if (!(paramSpec instanceof ElGamalParameterSpec) && !(paramSpec instanceof DHParameterSpec))
   6095 -            {
   6096 -                throw new InvalidParameterSpecException("DHParameterSpec required to initialise a ElGamal algorithm parameters object");
   6097 -            }
   6098 -
   6099 -            if (paramSpec instanceof ElGamalParameterSpec)
   6100 -            {
   6101 -                this.currentSpec = (ElGamalParameterSpec)paramSpec;
   6102 -            }
   6103 -            else
   6104 -            {
   6105 -                DHParameterSpec s = (DHParameterSpec)paramSpec;
   6106 -                
   6107 -                this.currentSpec = new ElGamalParameterSpec(s.getP(), s.getG());
   6108 -            }
   6109 -        }
   6110 -
   6111 -        protected void engineInit(
   6112 -            byte[] params) 
   6113 -            throws IOException
   6114 -        {
   6115 -            try
   6116 -            {
   6117 -                ElGamalParameter elP = new ElGamalParameter((ASN1Sequence)ASN1Object.fromByteArray(params));
   6118 -
   6119 -                currentSpec = new ElGamalParameterSpec(elP.getP(), elP.getG());
   6120 -            }
   6121 -            catch (ClassCastException e)
   6122 -            {
   6123 -                throw new IOException("Not a valid ElGamal Parameter encoding.");
   6124 -            }
   6125 -            catch (ArrayIndexOutOfBoundsException e)
   6126 -            {
   6127 -                throw new IOException("Not a valid ElGamal Parameter encoding.");
   6128 -            }
   6129 -        }
   6130 -
   6131 -        protected void engineInit(
   6132 -            byte[] params,
   6133 -            String format) 
   6134 -            throws IOException
   6135 -        {
   6136 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6137 -            {
   6138 -                engineInit(params);
   6139 -            }
   6140 -            else
   6141 -            {
   6142 -                throw new IOException("Unknown parameter format " + format);
   6143 -            }
   6144 -        }
   6145 -
   6146 -        protected String engineToString() 
   6147 -        {
   6148 -            return "ElGamal Parameters";
   6149 -        }
   6150 -    }
   6151 -
   6152 -    public static class IES
   6153 -        extends JDKAlgorithmParameters
   6154 -    {
   6155 -        IESParameterSpec     currentSpec;
   6156 -
   6157 -        /**
   6158 -         * in the absence of a standard way of doing it this will do for
   6159 -         * now...
   6160 -         */
   6161 -        protected byte[] engineGetEncoded() 
   6162 -        {
   6163 -            try
   6164 -            {
   6165 -                ASN1EncodableVector v = new ASN1EncodableVector();
   6166 -
   6167 -                v.add(new DEROctetString(currentSpec.getDerivationV()));
   6168 -                v.add(new DEROctetString(currentSpec.getEncodingV()));
   6169 -                v.add(new DERInteger(currentSpec.getMacKeySize()));
   6170 -
   6171 -                return new DERSequence(v).getEncoded(ASN1Encodable.DER);
   6172 -            }
   6173 -            catch (IOException e)
   6174 -            {
   6175 -                throw new RuntimeException("Error encoding IESParameters");
   6176 -            }
   6177 -        }
   6178 -
   6179 -        protected byte[] engineGetEncoded(
   6180 -            String format) 
   6181 -        {
   6182 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6183 -            {
   6184 -                return engineGetEncoded();
   6185 -            }
   6186 -
   6187 -            return null;
   6188 -        }
   6189 -
   6190 -        protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6191 -            Class paramSpec) 
   6192 -            throws InvalidParameterSpecException
   6193 -        {
   6194 -            if (paramSpec == IESParameterSpec.class)
   6195 -            {
   6196 -                return currentSpec;
   6197 -            }
   6198 -
   6199 -            throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
   6200 -        }
   6201 -
   6202 -        protected void engineInit(
   6203 -            AlgorithmParameterSpec paramSpec) 
   6204 -            throws InvalidParameterSpecException
   6205 -        {
   6206 -            if (!(paramSpec instanceof IESParameterSpec))
   6207 -            {
   6208 -                throw new InvalidParameterSpecException("IESParameterSpec required to initialise a IES algorithm parameters object");
   6209 -            }
   6210 -
   6211 -            this.currentSpec = (IESParameterSpec)paramSpec;
   6212 -        }
   6213 -
   6214 -        protected void engineInit(
   6215 -            byte[] params) 
   6216 -            throws IOException
   6217 -        {
   6218 -            try
   6219 -            {
   6220 -                ASN1Sequence s = (ASN1Sequence)ASN1Object.fromByteArray(params);
   6221 -
   6222 -                this.currentSpec = new IESParameterSpec(
   6223 -                                        ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
   6224 -                                        ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
   6225 -                                        ((DERInteger)s.getObjectAt(0)).getValue().intValue());
   6226 -            }
   6227 -            catch (ClassCastException e)
   6228 -            {
   6229 -                throw new IOException("Not a valid IES Parameter encoding.");
   6230 -            }
   6231 -            catch (ArrayIndexOutOfBoundsException e)
   6232 -            {
   6233 -                throw new IOException("Not a valid IES Parameter encoding.");
   6234 -            }
   6235 -        }
   6236 -
   6237 -        protected void engineInit(
   6238 -            byte[] params,
   6239 -            String format) 
   6240 -            throws IOException
   6241 -        {
   6242 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6243 -            {
   6244 -                engineInit(params);
   6245 -            }
   6246 -            else
   6247 -            {
   6248 -                throw new IOException("Unknown parameter format " + format);
   6249 -            }
   6250 -        }
   6251 -
   6252 -        protected String engineToString() 
   6253 -        {
   6254 -            return "IES Parameters";
   6255 -        }
   6256 -    }
   6257 +    // BEGIN android-removed
   6258 +    // public static class GOST3410
   6259 +    //     extends JDKAlgorithmParameters
   6260 +    // {
   6261 +    //     GOST3410ParameterSpec     currentSpec;
   6262 +    //
   6263 +    //     /**
   6264 +    //      * Return the X.509 ASN.1 structure GOST3410Parameter.
   6265 +    //      * <p>
   6266 +    //      * <pre>
   6267 +    //      *  GOST3410Parameter ::= SEQUENCE {
   6268 +    //      *                   prime INTEGER, -- p
   6269 +    //      *                   subprime INTEGER, -- q
   6270 +    //      *                   base INTEGER, -- a}
   6271 +    //      * </pre>
   6272 +    //      */
   6273 +    //     protected byte[] engineGetEncoded()
   6274 +    //     {
   6275 +    //         GOST3410PublicKeyAlgParameters gost3410P = new GOST3410PublicKeyAlgParameters(new DERObjectIdentifier(currentSpec.getPublicKeyParamSetOID()), new DERObjectIdentifier(currentSpec.getDigestParamSetOID()), new DERObjectIdentifier(currentSpec.getEncryptionParamSetOID()));
   6276 +    //
   6277 +    //         try
   6278 +    //         {
   6279 +    //             return gost3410P.getEncoded(ASN1Encodable.DER);
   6280 +    //         }
   6281 +    //         catch (IOException e)
   6282 +    //         {
   6283 +    //             throw new RuntimeException("Error encoding GOST3410Parameters");
   6284 +    //         }
   6285 +    //     }
   6286 +    //
   6287 +    //     protected byte[] engineGetEncoded(
   6288 +    //             String format)
   6289 +    //     {
   6290 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6291 +    //         {
   6292 +    //             return engineGetEncoded();
   6293 +    //         }
   6294 +    //
   6295 +    //         return null;
   6296 +    //     }
   6297 +    //
   6298 +    //     protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6299 +    //             Class paramSpec)
   6300 +    //     throws InvalidParameterSpecException
   6301 +    //     {
   6302 +    //         if (paramSpec == GOST3410PublicKeyParameterSetSpec.class)
   6303 +    //         {
   6304 +    //             return currentSpec;
   6305 +    //         }
   6306 +    //
   6307 +    //         throw new InvalidParameterSpecException("unknown parameter spec passed to GOST3410 parameters object.");
   6308 +    //     }
   6309 +    //
   6310 +    //     protected void engineInit(
   6311 +    //             AlgorithmParameterSpec paramSpec)
   6312 +    //     throws InvalidParameterSpecException
   6313 +    //     {
   6314 +    //         if (!(paramSpec instanceof GOST3410ParameterSpec))
   6315 +    //         {
   6316 +    //             throw new InvalidParameterSpecException("GOST3410ParameterSpec required to initialise a GOST3410 algorithm parameters object");
   6317 +    //         }
   6318 +    //
   6319 +    //         this.currentSpec = (GOST3410ParameterSpec)paramSpec;
   6320 +    //     }
   6321 +    //
   6322 +    //     protected void engineInit(
   6323 +    //             byte[] params)
   6324 +    //     throws IOException
   6325 +    //     {
   6326 +    //         try
   6327 +    //         {
   6328 +    //             ASN1Sequence seq = (ASN1Sequence) ASN1Object.fromByteArray(params);
   6329 +    //
   6330 +    //             this.currentSpec = GOST3410ParameterSpec.fromPublicKeyAlg(
   6331 +    //                 new GOST3410PublicKeyAlgParameters(seq));
   6332 +    //         }
   6333 +    //         catch (ClassCastException e)
   6334 +    //         {
   6335 +    //             throw new IOException("Not a valid GOST3410 Parameter encoding.");
   6336 +    //         }
   6337 +    //         catch (ArrayIndexOutOfBoundsException e)
   6338 +    //         {
   6339 +    //             throw new IOException("Not a valid GOST3410 Parameter encoding.");
   6340 +    //         }
   6341 +    //     }
   6342 +    //
   6343 +    //     protected void engineInit(
   6344 +    //             byte[] params,
   6345 +    //             String format)
   6346 +    //     throws IOException
   6347 +    //     {
   6348 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6349 +    //         {
   6350 +    //             engineInit(params);
   6351 +    //         }
   6352 +    //         else
   6353 +    //         {
   6354 +    //             throw new IOException("Unknown parameter format " + format);
   6355 +    //         }
   6356 +    //     }
   6357 +    //
   6358 +    //     protected String engineToString()
   6359 +    //     {
   6360 +    //         return "GOST3410 Parameters";
   6361 +    //     }
   6362 +    // }
   6363 +
   6364 +    // public static class ElGamal
   6365 +    //     extends JDKAlgorithmParameters
   6366 +    // {
   6367 +    //     ElGamalParameterSpec     currentSpec;
   6368 +    //
   6369 +    //     /**
   6370 +    //      * Return the X.509 ASN.1 structure ElGamalParameter.
   6371 +    //      * <p>
   6372 +    //      * <pre>
   6373 +    //      *  ElGamalParameter ::= SEQUENCE {
   6374 +    //      *                   prime INTEGER, -- p
   6375 +    //      *                   base INTEGER, -- g}
   6376 +    //      * </pre>
   6377 +    //      */
   6378 +    //     protected byte[] engineGetEncoded() 
   6379 +    //     {
   6380 +    //         ElGamalParameter elP = new ElGamalParameter(currentSpec.getP(), currentSpec.getG());
   6381 +    //
   6382 +    //         try
   6383 +    //         {
   6384 +    //             return elP.getEncoded(ASN1Encodable.DER);
   6385 +    //         }
   6386 +    //         catch (IOException e)
   6387 +    //         {
   6388 +    //             throw new RuntimeException("Error encoding ElGamalParameters");
   6389 +    //         }
   6390 +    //     }
   6391 +    //
   6392 +    //     protected byte[] engineGetEncoded(
   6393 +    //         String format) 
   6394 +    //     {
   6395 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6396 +    //         {
   6397 +    //             return engineGetEncoded();
   6398 +    //         }
   6399 +    //
   6400 +    //         return null;
   6401 +    //     }
   6402 +    //
   6403 +    //     protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6404 +    //         Class paramSpec) 
   6405 +    //         throws InvalidParameterSpecException
   6406 +    //     {
   6407 +    //         if (paramSpec == ElGamalParameterSpec.class)
   6408 +    //         {
   6409 +    //             return currentSpec;
   6410 +    //         }
   6411 +    //         else if (paramSpec == DHParameterSpec.class)
   6412 +    //         {
   6413 +    //             return new DHParameterSpec(currentSpec.getP(), currentSpec.getG());
   6414 +    //         }
   6415 +    //
   6416 +    //         throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
   6417 +    //     }
   6418 +    //
   6419 +    //     protected void engineInit(
   6420 +    //         AlgorithmParameterSpec paramSpec) 
   6421 +    //         throws InvalidParameterSpecException
   6422 +    //     {
   6423 +    //         if (!(paramSpec instanceof ElGamalParameterSpec) && !(paramSpec instanceof DHParameterSpec))
   6424 +    //         {
   6425 +    //             throw new InvalidParameterSpecException("DHParameterSpec required to initialise a ElGamal algorithm parameters object");
   6426 +    //         }
   6427 +    //
   6428 +    //         if (paramSpec instanceof ElGamalParameterSpec)
   6429 +    //         {
   6430 +    //             this.currentSpec = (ElGamalParameterSpec)paramSpec;
   6431 +    //         }
   6432 +    //         else
   6433 +    //         {
   6434 +    //             DHParameterSpec s = (DHParameterSpec)paramSpec;
   6435 +    //
   6436 +    //             this.currentSpec = new ElGamalParameterSpec(s.getP(), s.getG());
   6437 +    //         }
   6438 +    //     }
   6439 +    //
   6440 +    //     protected void engineInit(
   6441 +    //         byte[] params) 
   6442 +    //         throws IOException
   6443 +    //     {
   6444 +    //         try
   6445 +    //         {
   6446 +    //             ElGamalParameter elP = new ElGamalParameter((ASN1Sequence)ASN1Object.fromByteArray(params));
   6447 +    //
   6448 +    //             currentSpec = new ElGamalParameterSpec(elP.getP(), elP.getG());
   6449 +    //         }
   6450 +    //         catch (ClassCastException e)
   6451 +    //         {
   6452 +    //             throw new IOException("Not a valid ElGamal Parameter encoding.");
   6453 +    //         }
   6454 +    //         catch (ArrayIndexOutOfBoundsException e)
   6455 +    //         {
   6456 +    //             throw new IOException("Not a valid ElGamal Parameter encoding.");
   6457 +    //         }
   6458 +    //     }
   6459 +    //
   6460 +    //     protected void engineInit(
   6461 +    //         byte[] params,
   6462 +    //         String format) 
   6463 +    //         throws IOException
   6464 +    //     {
   6465 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6466 +    //         {
   6467 +    //             engineInit(params);
   6468 +    //         }
   6469 +    //         else
   6470 +    //         {
   6471 +    //             throw new IOException("Unknown parameter format " + format);
   6472 +    //         }
   6473 +    //     }
   6474 +    //
   6475 +    //     protected String engineToString() 
   6476 +    //     {
   6477 +    //         return "ElGamal Parameters";
   6478 +    //     }
   6479 +    // }
   6480 +    //
   6481 +    // public static class IES
   6482 +    //     extends JDKAlgorithmParameters
   6483 +    // {
   6484 +    //     IESParameterSpec     currentSpec;
   6485 +    //
   6486 +    //     /**
   6487 +    //      * in the absence of a standard way of doing it this will do for
   6488 +    //      * now...
   6489 +    //      */
   6490 +    //     protected byte[] engineGetEncoded() 
   6491 +    //     {
   6492 +    //         try
   6493 +    //         {
   6494 +    //             ASN1EncodableVector v = new ASN1EncodableVector();
   6495 +    //
   6496 +    //             v.add(new DEROctetString(currentSpec.getDerivationV()));
   6497 +    //             v.add(new DEROctetString(currentSpec.getEncodingV()));
   6498 +    //             v.add(new DERInteger(currentSpec.getMacKeySize()));
   6499 +    //
   6500 +    //             return new DERSequence(v).getEncoded(ASN1Encodable.DER);
   6501 +    //         }
   6502 +    //         catch (IOException e)
   6503 +    //         {
   6504 +    //             throw new RuntimeException("Error encoding IESParameters");
   6505 +    //         }
   6506 +    //     }
   6507 +    //
   6508 +    //     protected byte[] engineGetEncoded(
   6509 +    //         String format) 
   6510 +    //     {
   6511 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6512 +    //         {
   6513 +    //             return engineGetEncoded();
   6514 +    //         }
   6515 +    //
   6516 +    //         return null;
   6517 +    //     }
   6518 +    //
   6519 +    //     protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6520 +    //         Class paramSpec) 
   6521 +    //         throws InvalidParameterSpecException
   6522 +    //     {
   6523 +    //         if (paramSpec == IESParameterSpec.class)
   6524 +    //         {
   6525 +    //             return currentSpec;
   6526 +    //         }
   6527 +    //
   6528 +    //         throw new InvalidParameterSpecException("unknown parameter spec passed to ElGamal parameters object.");
   6529 +    //     }
   6530 +    //
   6531 +    //     protected void engineInit(
   6532 +    //         AlgorithmParameterSpec paramSpec) 
   6533 +    //         throws InvalidParameterSpecException
   6534 +    //     {
   6535 +    //         if (!(paramSpec instanceof IESParameterSpec))
   6536 +    //         {
   6537 +    //             throw new InvalidParameterSpecException("IESParameterSpec required to initialise a IES algorithm parameters object");
   6538 +    //         }
   6539 +    //
   6540 +    //         this.currentSpec = (IESParameterSpec)paramSpec;
   6541 +    //     }
   6542 +    //
   6543 +    //     protected void engineInit(
   6544 +    //         byte[] params) 
   6545 +    //         throws IOException
   6546 +    //     {
   6547 +    //         try
   6548 +    //         {
   6549 +    //             ASN1Sequence s = (ASN1Sequence)ASN1Object.fromByteArray(params);
   6550 +    //
   6551 +    //             this.currentSpec = new IESParameterSpec(
   6552 +    //                                     ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
   6553 +    //                                     ((ASN1OctetString)s.getObjectAt(0)).getOctets(),
   6554 +    //                                     ((DERInteger)s.getObjectAt(0)).getValue().intValue());
   6555 +    //         }
   6556 +    //         catch (ClassCastException e)
   6557 +    //         {
   6558 +    //             throw new IOException("Not a valid IES Parameter encoding.");
   6559 +    //         }
   6560 +    //         catch (ArrayIndexOutOfBoundsException e)
   6561 +    //         {
   6562 +    //             throw new IOException("Not a valid IES Parameter encoding.");
   6563 +    //         }
   6564 +    //     }
   6565 +    //
   6566 +    //     protected void engineInit(
   6567 +    //         byte[] params,
   6568 +    //         String format) 
   6569 +    //         throws IOException
   6570 +    //     {
   6571 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6572 +    //         {
   6573 +    //             engineInit(params);
   6574 +    //         }
   6575 +    //         else
   6576 +    //         {
   6577 +    //             throw new IOException("Unknown parameter format " + format);
   6578 +    //         }
   6579 +    //     }
   6580 +    //
   6581 +    //     protected String engineToString() 
   6582 +    //     {
   6583 +    //         return "IES Parameters";
   6584 +    //     }
   6585 +    // }
   6586 +    // END android-removed
   6587      
   6588      public static class OAEP
   6589          extends JDKAlgorithmParameters
   6590 @@ -1066,11 +1078,15 @@
   6591          {
   6592              AlgorithmIdentifier     hashAlgorithm = new AlgorithmIdentifier(
   6593                                                              JCEDigestUtil.getOID(currentSpec.getDigestAlgorithm()),
   6594 -                                                            new DERNull());
   6595 +                                                            // BEGIN android-changed
   6596 +                                                            DERNull.INSTANCE);
   6597 +                                                            // END android-changed
   6598              MGF1ParameterSpec       mgfSpec = (MGF1ParameterSpec)currentSpec.getMGFParameters();
   6599              AlgorithmIdentifier     maskGenAlgorithm = new AlgorithmIdentifier(
   6600                                                              PKCSObjectIdentifiers.id_mgf1, 
   6601 -                                                            new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), new DERNull()));
   6602 +                                                            // BEGIN android-changed
   6603 +                                                            new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE));
   6604 +                                                            // END android-changed
   6605              PSource.PSpecified      pSource = (PSource.PSpecified)currentSpec.getPSource();
   6606              AlgorithmIdentifier     pSourceAlgorithm = new AlgorithmIdentifier(
   6607                                                              PKCSObjectIdentifiers.id_pSpecified, new DEROctetString(pSource.getValue()));
   6608 @@ -1167,110 +1183,116 @@
   6609          }
   6610      }
   6611      
   6612 -    public static class PSS
   6613 -        extends JDKAlgorithmParameters
   6614 -    {  
   6615 -        PSSParameterSpec     currentSpec;
   6616 -    
   6617 -        /**
   6618 -         * Return the PKCS#1 ASN.1 structure RSASSA-PSS-params.
   6619 -         */
   6620 -        protected byte[] engineGetEncoded() 
   6621 -            throws IOException
   6622 -        {
   6623 -            PSSParameterSpec    pssSpec = currentSpec;
   6624 -            AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
   6625 -                                                JCEDigestUtil.getOID(pssSpec.getDigestAlgorithm()),
   6626 -                                                new DERNull());
   6627 -            MGF1ParameterSpec   mgfSpec = (MGF1ParameterSpec)pssSpec.getMGFParameters();
   6628 -            AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
   6629 -                                                PKCSObjectIdentifiers.id_mgf1, 
   6630 -                                                new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), new DERNull()));
   6631 -            RSASSAPSSparams     pssP = new RSASSAPSSparams(hashAlgorithm, maskGenAlgorithm, new DERInteger(pssSpec.getSaltLength()), new DERInteger(pssSpec.getTrailerField()));
   6632 -            
   6633 -            return pssP.getEncoded("DER");
   6634 -        }
   6635 -    
   6636 -        protected byte[] engineGetEncoded(
   6637 -            String format) 
   6638 -            throws IOException
   6639 -        {
   6640 -            if (format.equalsIgnoreCase("X.509")
   6641 -                    || format.equalsIgnoreCase("ASN.1"))
   6642 -            {
   6643 -                return engineGetEncoded();
   6644 -            }
   6645 -    
   6646 -            return null;
   6647 -        }
   6648 -    
   6649 -        protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6650 -            Class paramSpec) 
   6651 -            throws InvalidParameterSpecException
   6652 -        {
   6653 -            if (paramSpec == PSSParameterSpec.class && currentSpec != null)
   6654 -            {
   6655 -                return currentSpec;
   6656 -            }
   6657 -    
   6658 -            throw new InvalidParameterSpecException("unknown parameter spec passed to PSS parameters object.");
   6659 -        }
   6660 -    
   6661 -        protected void engineInit(
   6662 -            AlgorithmParameterSpec paramSpec) 
   6663 -            throws InvalidParameterSpecException
   6664 -        {
   6665 -            if (!(paramSpec instanceof PSSParameterSpec))
   6666 -            {
   6667 -                throw new InvalidParameterSpecException("PSSParameterSpec required to initialise an PSS algorithm parameters object");
   6668 -            }
   6669 -    
   6670 -            this.currentSpec = (PSSParameterSpec)paramSpec;
   6671 -        }
   6672 -    
   6673 -        protected void engineInit(
   6674 -            byte[] params) 
   6675 -            throws IOException
   6676 -        {
   6677 -            try
   6678 -            {
   6679 -                RSASSAPSSparams pssP = new RSASSAPSSparams((ASN1Sequence)ASN1Object.fromByteArray(params));
   6680 -
   6681 -                currentSpec = new PSSParameterSpec(
   6682 -                                       pssP.getHashAlgorithm().getObjectId().getId(), 
   6683 -                                       pssP.getMaskGenAlgorithm().getObjectId().getId(), 
   6684 -                                       new MGF1ParameterSpec(AlgorithmIdentifier.getInstance(pssP.getMaskGenAlgorithm().getParameters()).getObjectId().getId()),
   6685 -                                       pssP.getSaltLength().getValue().intValue(),
   6686 -                                       pssP.getTrailerField().getValue().intValue());
   6687 -            }
   6688 -            catch (ClassCastException e)
   6689 -            {
   6690 -                throw new IOException("Not a valid PSS Parameter encoding.");
   6691 -            }
   6692 -            catch (ArrayIndexOutOfBoundsException e)
   6693 -            {
   6694 -                throw new IOException("Not a valid PSS Parameter encoding.");
   6695 -            }
   6696 -        }
   6697 -    
   6698 -        protected void engineInit(
   6699 -            byte[] params,
   6700 -            String format) 
   6701 -            throws IOException
   6702 -        {
   6703 -            if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6704 -            {
   6705 -                engineInit(params);
   6706 -            }
   6707 -            else
   6708 -            {
   6709 -                throw new IOException("Unknown parameter format " + format);
   6710 -            }
   6711 -        }
   6712 -    
   6713 -        protected String engineToString() 
   6714 -        {
   6715 -            return "PSS Parameters";
   6716 -        }
   6717 -    }
   6718 +    // BEGIN android-removed
   6719 +    // public static class PSS
   6720 +    //     extends JDKAlgorithmParameters
   6721 +    // {  
   6722 +    //     PSSParameterSpec     currentSpec;
   6723 +    //
   6724 +    //     /**
   6725 +    //      * Return the PKCS#1 ASN.1 structure RSASSA-PSS-params.
   6726 +    //      */
   6727 +    //     protected byte[] engineGetEncoded() 
   6728 +    //         throws IOException
   6729 +    //     {
   6730 +    //         PSSParameterSpec    pssSpec = currentSpec;
   6731 +    //         AlgorithmIdentifier hashAlgorithm = new AlgorithmIdentifier(
   6732 +    //                                             JCEDigestUtil.getOID(pssSpec.getDigestAlgorithm()),
   6733 +    //                                             // BEGIN android-changed
   6734 +    //                                             DERNull.INSTANCE);
   6735 +    //                                             // END android-changed
   6736 +    //         MGF1ParameterSpec   mgfSpec = (MGF1ParameterSpec)pssSpec.getMGFParameters();
   6737 +    //         AlgorithmIdentifier maskGenAlgorithm = new AlgorithmIdentifier(
   6738 +    //                                             PKCSObjectIdentifiers.id_mgf1, 
   6739 +    //                                             // BEGIN android-changed
   6740 +    //                                             new AlgorithmIdentifier(JCEDigestUtil.getOID(mgfSpec.getDigestAlgorithm()), DERNull.INSTANCE));
   6741 +    //                                             // END android-changed
   6742 +    //         RSASSAPSSparams     pssP = new RSASSAPSSparams(hashAlgorithm, maskGenAlgorithm, new DERInteger(pssSpec.getSaltLength()), new DERInteger(pssSpec.getTrailerField()));
   6743 +    //
   6744 +    //         return pssP.getEncoded("DER");
   6745 +    //     }
   6746 +    //
   6747 +    //     protected byte[] engineGetEncoded(
   6748 +    //         String format) 
   6749 +    //         throws IOException
   6750 +    //     {
   6751 +    //         if (format.equalsIgnoreCase("X.509")
   6752 +    //                 || format.equalsIgnoreCase("ASN.1"))
   6753 +    //         {
   6754 +    //             return engineGetEncoded();
   6755 +    //         }
   6756 +    //
   6757 +    //         return null;
   6758 +    //     }
   6759 +    //
   6760 +    //     protected AlgorithmParameterSpec localEngineGetParameterSpec(
   6761 +    //         Class paramSpec) 
   6762 +    //         throws InvalidParameterSpecException
   6763 +    //     {
   6764 +    //         if (paramSpec == PSSParameterSpec.class && currentSpec != null)
   6765 +    //         {
   6766 +    //             return currentSpec;
   6767 +    //         }
   6768 +    //
   6769 +    //         throw new InvalidParameterSpecException("unknown parameter spec passed to PSS parameters object.");
   6770 +    //     }
   6771 +    //
   6772 +    //     protected void engineInit(
   6773 +    //         AlgorithmParameterSpec paramSpec) 
   6774 +    //         throws InvalidParameterSpecException
   6775 +    //     {
   6776 +    //         if (!(paramSpec instanceof PSSParameterSpec))
   6777 +    //         {
   6778 +    //             throw new InvalidParameterSpecException("PSSParameterSpec required to initialise an PSS algorithm parameters object");
   6779 +    //         }
   6780 +    //
   6781 +    //         this.currentSpec = (PSSParameterSpec)paramSpec;
   6782 +    //     }
   6783 +    //
   6784 +    //     protected void engineInit(
   6785 +    //         byte[] params) 
   6786 +    //         throws IOException
   6787 +    //     {
   6788 +    //         try
   6789 +    //         {
   6790 +    //             RSASSAPSSparams pssP = new RSASSAPSSparams((ASN1Sequence)ASN1Object.fromByteArray(params));
   6791 +    //
   6792 +    //             currentSpec = new PSSParameterSpec(
   6793 +    //                                    pssP.getHashAlgorithm().getObjectId().getId(), 
   6794 +    //                                    pssP.getMaskGenAlgorithm().getObjectId().getId(), 
   6795 +    //                                    new MGF1ParameterSpec(AlgorithmIdentifier.getInstance(pssP.getMaskGenAlgorithm().getParameters()).getObjectId().getId()),
   6796 +    //                                    pssP.getSaltLength().getValue().intValue(),
   6797 +    //                                    pssP.getTrailerField().getValue().intValue());
   6798 +    //         }
   6799 +    //         catch (ClassCastException e)
   6800 +    //         {
   6801 +    //             throw new IOException("Not a valid PSS Parameter encoding.");
   6802 +    //         }
   6803 +    //         catch (ArrayIndexOutOfBoundsException e)
   6804 +    //         {
   6805 +    //             throw new IOException("Not a valid PSS Parameter encoding.");
   6806 +    //         }
   6807 +    //     }
   6808 +    //
   6809 +    //     protected void engineInit(
   6810 +    //         byte[] params,
   6811 +    //         String format) 
   6812 +    //         throws IOException
   6813 +    //     {
   6814 +    //         if (isASN1FormatString(format) || format.equalsIgnoreCase("X.509"))
   6815 +    //         {
   6816 +    //             engineInit(params);
   6817 +    //         }
   6818 +    //         else
   6819 +    //         {
   6820 +    //             throw new IOException("Unknown parameter format " + format);
   6821 +    //         }
   6822 +    //     }
   6823 +    //
   6824 +    //     protected String engineToString() 
   6825 +    //     {
   6826 +    //         return "PSS Parameters";
   6827 +    //     }
   6828 +    // }
   6829 +    // END android-removed
   6830  }
   6831 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDSASigner.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDSASigner.java
   6832 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDSASigner.java	2011-02-23 20:08:56.000000000 +0000
   6833 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDSASigner.java	2011-09-08 21:28:49.000000000 +0000
   6834 @@ -23,13 +23,17 @@
   6835  import org.bouncycastle.crypto.Digest;
   6836  import org.bouncycastle.crypto.digests.NullDigest;
   6837  import org.bouncycastle.crypto.digests.SHA1Digest;
   6838 -import org.bouncycastle.crypto.digests.SHA224Digest;
   6839 +// BEGIN android-removed
   6840 +// import org.bouncycastle.crypto.digests.SHA224Digest;
   6841 +// END android-removed
   6842  import org.bouncycastle.crypto.digests.SHA256Digest;
   6843  import org.bouncycastle.crypto.digests.SHA384Digest;
   6844  import org.bouncycastle.crypto.digests.SHA512Digest;
   6845  import org.bouncycastle.crypto.params.ParametersWithRandom;
   6846  import org.bouncycastle.crypto.signers.DSASigner;
   6847 -import org.bouncycastle.jce.interfaces.GOST3410Key;
   6848 +// BEGIN android-removed
   6849 +// import org.bouncycastle.jce.interfaces.GOST3410Key;
   6850 +// END android-removed
   6851  
   6852  public class JDKDSASigner
   6853      extends SignatureSpi
   6854 @@ -53,11 +57,16 @@
   6855      {
   6856          CipherParameters    param;
   6857  
   6858 -        if (publicKey instanceof GOST3410Key)
   6859 -        {
   6860 -            param = GOST3410Util.generatePublicKeyParameter(publicKey);
   6861 -        }
   6862 -        else if (publicKey instanceof DSAKey)
   6863 +        // BEGIN android-removed
   6864 +        // if (publicKey instanceof GOST3410Key)
   6865 +        // {
   6866 +        //     param = GOST3410Util.generatePublicKeyParameter(publicKey);
   6867 +        // }
   6868 +        // else if (publicKey instanceof DSAKey)
   6869 +        // END android-removed
   6870 +        // BEGIN android-added
   6871 +        if (publicKey instanceof DSAKey)
   6872 +        // END android-added
   6873          {
   6874              param = DSAUtil.generatePublicKeyParameter(publicKey);
   6875          }
   6876 @@ -103,14 +112,18 @@
   6877      {
   6878          CipherParameters    param;
   6879  
   6880 -        if (privateKey instanceof GOST3410Key)
   6881 -        {
   6882 -            param = GOST3410Util.generatePrivateKeyParameter(privateKey);
   6883 -        }
   6884 -        else
   6885 -        {
   6886 +        // BEGIN android-removed
   6887 +        // if (privateKey instanceof GOST3410Key)
   6888 +        // {
   6889 +        //     param = GOST3410Util.generatePrivateKeyParameter(privateKey);
   6890 +        // }
   6891 +        // else
   6892 +        // {
   6893 +        // END android-removed
   6894              param = DSAUtil.generatePrivateKeyParameter(privateKey);
   6895 -        }
   6896 +        // BEGIN android-removed
   6897 +        // }
   6898 +        // END android-removed
   6899  
   6900          if (random != null)
   6901          {
   6902 @@ -231,42 +244,44 @@
   6903              super(new SHA1Digest(), new DSASigner());
   6904          }
   6905      }
   6906 -
   6907 -    static public class dsa224
   6908 -        extends JDKDSASigner
   6909 -    {
   6910 -        public dsa224()
   6911 -        {
   6912 -            super(new SHA224Digest(), new DSASigner());
   6913 -        }
   6914 -    }
   6915 -    
   6916 -    static public class dsa256
   6917 -        extends JDKDSASigner
   6918 -    {
   6919 -        public dsa256()
   6920 -        {
   6921 -            super(new SHA256Digest(), new DSASigner());
   6922 -        }
   6923 -    }
   6924      
   6925 -    static public class dsa384
   6926 -        extends JDKDSASigner
   6927 -    {
   6928 -        public dsa384()
   6929 -        {
   6930 -            super(new SHA384Digest(), new DSASigner());
   6931 -        }
   6932 -    }
   6933 -    
   6934 -    static public class dsa512
   6935 -        extends JDKDSASigner
   6936 -    {
   6937 -        public dsa512()
   6938 -        {
   6939 -            super(new SHA512Digest(), new DSASigner());
   6940 -        }
   6941 -    }
   6942 +    // BEGIN android-removed
   6943 +    // static public class dsa224
   6944 +    //     extends JDKDSASigner
   6945 +    // {
   6946 +    //     public dsa224()
   6947 +    //     {
   6948 +    //         super(new SHA224Digest(), new DSASigner());
   6949 +    //     }
   6950 +    // }
   6951 +    //
   6952 +    // static public class dsa256
   6953 +    //     extends JDKDSASigner
   6954 +    // {
   6955 +    //     public dsa256()
   6956 +    //     {
   6957 +    //         super(new SHA256Digest(), new DSASigner());
   6958 +    //     }
   6959 +    // }
   6960 +    //
   6961 +    // static public class dsa384
   6962 +    //     extends JDKDSASigner
   6963 +    // {
   6964 +    //     public dsa384()
   6965 +    //     {
   6966 +    //         super(new SHA384Digest(), new DSASigner());
   6967 +    //     }
   6968 +    // }
   6969 +    //
   6970 +    // static public class dsa512
   6971 +    //     extends JDKDSASigner
   6972 +    // {
   6973 +    //     public dsa512()
   6974 +    //     {
   6975 +    //         super(new SHA512Digest(), new DSASigner());
   6976 +    //     }
   6977 +    // }
   6978 +    // END android-removed
   6979  
   6980      static public class noneDSA
   6981          extends JDKDSASigner
   6982 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDigestSignature.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDigestSignature.java
   6983 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKDigestSignature.java	2011-02-23 20:08:56.000000000 +0000
   6984 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKDigestSignature.java	2011-09-08 21:28:49.000000000 +0000
   6985 @@ -23,15 +23,21 @@
   6986  import org.bouncycastle.crypto.AsymmetricBlockCipher;
   6987  import org.bouncycastle.crypto.CipherParameters;
   6988  import org.bouncycastle.crypto.Digest;
   6989 -import org.bouncycastle.crypto.digests.MD2Digest;
   6990 -import org.bouncycastle.crypto.digests.MD4Digest;
   6991 +// BEGIN android-removed
   6992 +// import org.bouncycastle.crypto.digests.MD2Digest;
   6993 +// import org.bouncycastle.crypto.digests.MD4Digest;
   6994 +// END android-removed
   6995  import org.bouncycastle.crypto.digests.MD5Digest;
   6996  import org.bouncycastle.crypto.digests.NullDigest;
   6997 -import org.bouncycastle.crypto.digests.RIPEMD128Digest;
   6998 -import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   6999 -import org.bouncycastle.crypto.digests.RIPEMD256Digest;
   7000 +// BEGIN android-removed
   7001 +// import org.bouncycastle.crypto.digests.RIPEMD128Digest;
   7002 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   7003 +// import org.bouncycastle.crypto.digests.RIPEMD256Digest;
   7004 +// END android-removed
   7005  import org.bouncycastle.crypto.digests.SHA1Digest;
   7006 -import org.bouncycastle.crypto.digests.SHA224Digest;
   7007 +// BEGIN android-removed
   7008 +// import org.bouncycastle.crypto.digests.SHA224Digest;
   7009 +// END android-removed
   7010  import org.bouncycastle.crypto.digests.SHA256Digest;
   7011  import org.bouncycastle.crypto.digests.SHA384Digest;
   7012  import org.bouncycastle.crypto.digests.SHA512Digest;
   7013 @@ -265,14 +271,16 @@
   7014          }
   7015      }
   7016  
   7017 -    static public class SHA224WithRSAEncryption
   7018 -        extends JDKDigestSignature
   7019 -    {
   7020 -        public SHA224WithRSAEncryption()
   7021 -        {
   7022 -            super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7023 -        }
   7024 -    }
   7025 +    // BEGIN android-removed
   7026 +    // static public class SHA224WithRSAEncryption
   7027 +    //     extends JDKDigestSignature
   7028 +    // {
   7029 +    //     public SHA224WithRSAEncryption()
   7030 +    //     {
   7031 +    //         super(NISTObjectIdentifiers.id_sha224, new SHA224Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7032 +    //     }
   7033 +    // }
   7034 +    // END android-removed
   7035  
   7036      static public class SHA256WithRSAEncryption
   7037          extends JDKDigestSignature
   7038 @@ -301,23 +309,25 @@
   7039          }
   7040      }
   7041  
   7042 -    static public class MD2WithRSAEncryption
   7043 -        extends JDKDigestSignature
   7044 -    {
   7045 -        public MD2WithRSAEncryption()
   7046 -        {
   7047 -            super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7048 -        }
   7049 -    }
   7050 -
   7051 -    static public class MD4WithRSAEncryption
   7052 -        extends JDKDigestSignature
   7053 -    {
   7054 -        public MD4WithRSAEncryption()
   7055 -        {
   7056 -            super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7057 -        }
   7058 -    }
   7059 +    // BEGIN android-removed
   7060 +    // static public class MD2WithRSAEncryption
   7061 +    //     extends JDKDigestSignature
   7062 +    // {
   7063 +    //     public MD2WithRSAEncryption()
   7064 +    //     {
   7065 +    //         super(PKCSObjectIdentifiers.md2, new MD2Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7066 +    //     }
   7067 +    // }
   7068 +    //
   7069 +    // static public class MD4WithRSAEncryption
   7070 +    //     extends JDKDigestSignature
   7071 +    // {
   7072 +    //     public MD4WithRSAEncryption()
   7073 +    //     {
   7074 +    //         super(PKCSObjectIdentifiers.md4, new MD4Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7075 +    //     }
   7076 +    // }
   7077 +    // END android-removed
   7078  
   7079      static public class MD5WithRSAEncryption
   7080          extends JDKDigestSignature
   7081 @@ -328,39 +338,41 @@
   7082          }
   7083      }
   7084  
   7085 -    static public class RIPEMD160WithRSAEncryption
   7086 -        extends JDKDigestSignature
   7087 -    {
   7088 -        public RIPEMD160WithRSAEncryption()
   7089 -        {
   7090 -            super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7091 -        }
   7092 -    }
   7093 -
   7094 -    static public class RIPEMD128WithRSAEncryption
   7095 -        extends JDKDigestSignature
   7096 -    {
   7097 -        public RIPEMD128WithRSAEncryption()
   7098 -        {
   7099 -            super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7100 -        }
   7101 -    }
   7102 -
   7103 -    static public class RIPEMD256WithRSAEncryption
   7104 -        extends JDKDigestSignature
   7105 -    {
   7106 -        public RIPEMD256WithRSAEncryption()
   7107 -        {
   7108 -            super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7109 -        }
   7110 -    }
   7111 -
   7112 -    static public class noneRSA
   7113 -        extends JDKDigestSignature
   7114 -    {
   7115 -        public noneRSA()
   7116 -        {
   7117 -            super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine()));
   7118 -        }
   7119 -    }
   7120 +    // BEGIN android-removed
   7121 +    // static public class RIPEMD160WithRSAEncryption
   7122 +    //     extends JDKDigestSignature
   7123 +    // {
   7124 +    //     public RIPEMD160WithRSAEncryption()
   7125 +    //     {
   7126 +    //         super(TeleTrusTObjectIdentifiers.ripemd160, new RIPEMD160Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7127 +    //     }
   7128 +    // }
   7129 +    //
   7130 +    // static public class RIPEMD128WithRSAEncryption
   7131 +    //     extends JDKDigestSignature
   7132 +    // {
   7133 +    //     public RIPEMD128WithRSAEncryption()
   7134 +    //     {
   7135 +    //         super(TeleTrusTObjectIdentifiers.ripemd128, new RIPEMD128Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7136 +    //     }
   7137 +    // }
   7138 +    //
   7139 +    // static public class RIPEMD256WithRSAEncryption
   7140 +    //     extends JDKDigestSignature
   7141 +    // {
   7142 +    //     public RIPEMD256WithRSAEncryption()
   7143 +    //     {
   7144 +    //         super(TeleTrusTObjectIdentifiers.ripemd256, new RIPEMD256Digest(), new PKCS1Encoding(new RSABlindedEngine()));
   7145 +    //     }
   7146 +    // }
   7147 +    //
   7148 +    // static public class noneRSA
   7149 +    //     extends JDKDigestSignature
   7150 +    // {
   7151 +    //     public noneRSA()
   7152 +    //     {
   7153 +    //         super(new NullDigest(), new PKCS1Encoding(new RSABlindedEngine()));
   7154 +    //     }
   7155 +    // }
   7156 +    // END android-removed
   7157  }
   7158 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyFactory.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyFactory.java
   7159 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyFactory.java	2011-02-23 20:08:56.000000000 +0000
   7160 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyFactory.java	2011-09-08 21:28:49.000000000 +0000
   7161 @@ -36,17 +36,21 @@
   7162  import org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure;
   7163  import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
   7164  import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
   7165 -import org.bouncycastle.jce.interfaces.ElGamalPrivateKey;
   7166 -import org.bouncycastle.jce.interfaces.ElGamalPublicKey;
   7167 -import org.bouncycastle.jce.spec.ElGamalPrivateKeySpec;
   7168 -import org.bouncycastle.jce.spec.ElGamalPublicKeySpec;
   7169 -import org.bouncycastle.jce.spec.GOST3410PrivateKeySpec;
   7170 -import org.bouncycastle.jce.spec.GOST3410PublicKeySpec;
   7171 +// BEGIN android-removed
   7172 +// import org.bouncycastle.jce.interfaces.ElGamalPrivateKey;
   7173 +// import org.bouncycastle.jce.interfaces.ElGamalPublicKey;
   7174 +// import org.bouncycastle.jce.spec.ElGamalPrivateKeySpec;
   7175 +// import org.bouncycastle.jce.spec.ElGamalPublicKeySpec;
   7176 +// import org.bouncycastle.jce.spec.GOST3410PrivateKeySpec;
   7177 +// import org.bouncycastle.jce.spec.GOST3410PublicKeySpec;
   7178 +// END android-removed
   7179  
   7180  public abstract class JDKKeyFactory
   7181      extends KeyFactorySpi
   7182  {
   7183 -    protected boolean elGamalFactory = false;
   7184 +    // BEGIN android-removed
   7185 +    // protected boolean elGamalFactory = false;
   7186 +    // END android-removed
   7187      
   7188      public JDKKeyFactory()
   7189      {
   7190 @@ -140,6 +144,20 @@
   7191             
   7192             return new DHPublicKeySpec(k.getY(), k.getParams().getP(), k.getParams().getG());
   7193         }
   7194 +       // BEGIN android-added
   7195 +       else if (spec.isAssignableFrom(DSAPublicKeySpec.class) && key instanceof DSAPublicKey)
   7196 +       {
   7197 +            DSAPublicKey    k = (DSAPublicKey)key;
   7198 +
   7199 +            return new DSAPublicKeySpec(k.getY(), k.getParams().getP(), k.getParams().getQ(), k.getParams().getG());
   7200 +       }
   7201 +       else if (spec.isAssignableFrom(DSAPrivateKeySpec.class) && key instanceof DSAPrivateKey)
   7202 +       {
   7203 +            DSAPrivateKey    k = (DSAPrivateKey)key;
   7204 +
   7205 +            return new DSAPrivateKeySpec(k.getX(), k.getParams().getP(), k.getParams().getQ(), k.getParams().getG());
   7206 +       }
   7207 +       // END android-added
   7208  
   7209         throw new RuntimeException("not implemented yet " + key + " " + spec);
   7210      }
   7211 @@ -162,25 +180,33 @@
   7212          }
   7213          else if (key instanceof DHPublicKey)
   7214          {
   7215 -            if (elGamalFactory)
   7216 -            {
   7217 -                return new JCEElGamalPublicKey((DHPublicKey)key);
   7218 -            }
   7219 -            else
   7220 -            {
   7221 +            // BEGIN android-removed
   7222 +            // if (elGamalFactory)
   7223 +            // {
   7224 +            //     return new JCEElGamalPublicKey((DHPublicKey)key);
   7225 +            // }
   7226 +            // else
   7227 +            // {
   7228 +            // END android-removed
   7229                  return new JCEDHPublicKey((DHPublicKey)key);
   7230 -            }
   7231 +            // BEGIN android-removed
   7232 +            // }
   7233 +            // END android-removed
   7234          }
   7235          else if (key instanceof DHPrivateKey)
   7236          {
   7237 -            if (elGamalFactory)
   7238 -            {
   7239 -                return new JCEElGamalPrivateKey((DHPrivateKey)key);
   7240 -            }
   7241 -            else
   7242 -            {
   7243 +            // BEGIN android-removed
   7244 +            // if (elGamalFactory)
   7245 +            // {
   7246 +            //     return new JCEElGamalPrivateKey((DHPrivateKey)key);
   7247 +            // }
   7248 +            // else
   7249 +            // {
   7250 +            // END android-removed
   7251                  return new JCEDHPrivateKey((DHPrivateKey)key);
   7252 -            }
   7253 +            // BEGIN android-removed
   7254 +            // }
   7255 +            // END android-removed
   7256          }
   7257          else if (key instanceof DSAPublicKey)
   7258          {
   7259 @@ -190,14 +216,16 @@
   7260          {
   7261              return new JDKDSAPrivateKey((DSAPrivateKey)key);
   7262          }
   7263 -        else if (key instanceof ElGamalPublicKey)
   7264 -        {
   7265 -            return new JCEElGamalPublicKey((ElGamalPublicKey)key);
   7266 -        }
   7267 -        else if (key instanceof ElGamalPrivateKey)
   7268 -        {
   7269 -            return new JCEElGamalPrivateKey((ElGamalPrivateKey)key);
   7270 -        }
   7271 +        // BEGIN android-removed
   7272 +        // else if (key instanceof ElGamalPublicKey)
   7273 +        // {
   7274 +        //     return new JCEElGamalPublicKey((ElGamalPublicKey)key);
   7275 +        // }
   7276 +        // else if (key instanceof ElGamalPrivateKey)
   7277 +        // {
   7278 +        //    return new JCEElGamalPrivateKey((ElGamalPrivateKey)key);
   7279 +        // }
   7280 +        // END android-removed
   7281  
   7282          throw new InvalidKeyException("key type unknown");
   7283      }
   7284 @@ -233,10 +261,12 @@
   7285          {
   7286              return new JCEDHPublicKey(info);
   7287          }
   7288 -        else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
   7289 -        {
   7290 -            return new JCEElGamalPublicKey(info);
   7291 -        }
   7292 +        // BEGIN android-removed
   7293 +        // else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
   7294 +        // {
   7295 +        //     return new JCEElGamalPublicKey(info);
   7296 +        // }
   7297 +        // END android-removed
   7298          else if (algOid.equals(X9ObjectIdentifiers.id_dsa))
   7299          {
   7300              return new JDKDSAPublicKey(info);
   7301 @@ -249,14 +279,15 @@
   7302          {
   7303              return new JCEECPublicKey(info);
   7304          }
   7305 -        else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
   7306 -        {
   7307 -            return new JDKGOST3410PublicKey(info);
   7308 -        }
   7309 -        else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
   7310 -        {
   7311 -            return new JCEECPublicKey(info);
   7312 -        }
   7313 +        // BEGIN android-removed
   7314 +        // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
   7315 +        // {
   7316 +        //     return new JDKGOST3410PublicKey(info);
   7317 +        // }
   7318 +        // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
   7319 +        // {
   7320 +        //     return new JCEECPublicKey(info);
   7321 +        // }
   7322          else
   7323          {
   7324              throw new RuntimeException("algorithm identifier " + algOid + " in key not recognised");
   7325 @@ -294,10 +325,12 @@
   7326          {
   7327                return new JCEDHPrivateKey(info);
   7328          }
   7329 -        else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
   7330 -        {
   7331 -              return new JCEElGamalPrivateKey(info);
   7332 -        }
   7333 +        // BEGIN android-removed
   7334 +        // else if (algOid.equals(OIWObjectIdentifiers.elGamalAlgorithm))
   7335 +        // {
   7336 +        //       return new JCEElGamalPrivateKey(info);
   7337 +        // }
   7338 +        // END android-removed
   7339          else if (algOid.equals(X9ObjectIdentifiers.id_dsa))
   7340          {
   7341                return new JDKDSAPrivateKey(info);
   7342 @@ -306,14 +339,16 @@
   7343          {
   7344                return new JCEECPrivateKey(info);
   7345          }
   7346 -        else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
   7347 -        {
   7348 -              return new JDKGOST3410PrivateKey(info);
   7349 -        }
   7350 -        else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
   7351 -        {
   7352 -              return new JCEECPrivateKey(info);
   7353 -        }
   7354 +        // BEGIN android-removed
   7355 +        // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_94))
   7356 +        // {
   7357 +        //       return new JDKGOST3410PrivateKey(info);
   7358 +        // }
   7359 +        // else if (algOid.equals(CryptoProObjectIdentifiers.gostR3410_2001))
   7360 +        // {
   7361 +        //       return new JCEECPrivateKey(info);
   7362 +        // }
   7363 +        // END android-removed
   7364          else
   7365          {
   7366              throw new RuntimeException("algorithm identifier " + algOid + " in key not recognised");
   7367 @@ -444,89 +479,92 @@
   7368          }
   7369      }
   7370  
   7371 -    public static class GOST3410
   7372 -        extends JDKKeyFactory
   7373 -    {
   7374 -        public GOST3410()
   7375 -        {
   7376 -        }
   7377 -        
   7378 -        protected PrivateKey engineGeneratePrivate(
   7379 -                KeySpec    keySpec)
   7380 -        throws InvalidKeySpecException
   7381 -        {
   7382 -            if (keySpec instanceof GOST3410PrivateKeySpec)
   7383 -            {
   7384 -                return new JDKGOST3410PrivateKey((GOST3410PrivateKeySpec)keySpec);
   7385 -            }
   7386 -
   7387 -            return super.engineGeneratePrivate(keySpec);
   7388 -        }
   7389 -        
   7390 -        protected PublicKey engineGeneratePublic(
   7391 -                KeySpec    keySpec)
   7392 -        throws InvalidKeySpecException
   7393 -        {
   7394 -            if (keySpec instanceof GOST3410PublicKeySpec)
   7395 -            {
   7396 -                return new JDKGOST3410PublicKey((GOST3410PublicKeySpec)keySpec);
   7397 -            }
   7398 -
   7399 -            return super.engineGeneratePublic(keySpec);
   7400 -        }
   7401 -    }
   7402 -    
   7403 -    public static class ElGamal
   7404 -        extends JDKKeyFactory
   7405 -    {
   7406 -        public ElGamal()
   7407 -        {
   7408 -            elGamalFactory = true;
   7409 -        }
   7410 -
   7411 -        protected PrivateKey engineGeneratePrivate(
   7412 -            KeySpec    keySpec)
   7413 -            throws InvalidKeySpecException
   7414 -        {
   7415 -            if (keySpec instanceof ElGamalPrivateKeySpec)
   7416 -            {
   7417 -                return new JCEElGamalPrivateKey((ElGamalPrivateKeySpec)keySpec);
   7418 -            }
   7419 -            else if (keySpec instanceof DHPrivateKeySpec)
   7420 -            {
   7421 -                return new JCEElGamalPrivateKey((DHPrivateKeySpec)keySpec);
   7422 -            }
   7423 -
   7424 -            return super.engineGeneratePrivate(keySpec);
   7425 -        }
   7426 +    // BEGIN android-removed
   7427 +    // public static class GOST3410
   7428 +    //     extends JDKKeyFactory
   7429 +    // {
   7430 +    //     public GOST3410()
   7431 +    //     {
   7432 +    //     }
   7433 +    //
   7434 +    //     protected PrivateKey engineGeneratePrivate(
   7435 +    //             KeySpec    keySpec)
   7436 +    //     throws InvalidKeySpecException
   7437 +    //     {
   7438 +    //         if (keySpec instanceof GOST3410PrivateKeySpec)
   7439 +    //         {
   7440 +    //             return new JDKGOST3410PrivateKey((GOST3410PrivateKeySpec)keySpec);
   7441 +    //         }
   7442 +    //
   7443 +    //         return super.engineGeneratePrivate(keySpec);
   7444 +    //     }
   7445 +    //
   7446 +    //     protected PublicKey engineGeneratePublic(
   7447 +    //             KeySpec    keySpec)
   7448 +    //     throws InvalidKeySpecException
   7449 +    //     {
   7450 +    //         if (keySpec instanceof GOST3410PublicKeySpec)
   7451 +    //         {
   7452 +    //             return new JDKGOST3410PublicKey((GOST3410PublicKeySpec)keySpec);
   7453 +    //         }
   7454 +    //
   7455 +    //         return super.engineGeneratePublic(keySpec);
   7456 +    //     }
   7457 +    // }
   7458      
   7459 -        protected PublicKey engineGeneratePublic(
   7460 -            KeySpec    keySpec)
   7461 -            throws InvalidKeySpecException
   7462 -        {
   7463 -            if (keySpec instanceof ElGamalPublicKeySpec)
   7464 -            {
   7465 -                return new JCEElGamalPublicKey((ElGamalPublicKeySpec)keySpec);
   7466 -            }
   7467 -            else if (keySpec instanceof DHPublicKeySpec)
   7468 -            {
   7469 -                return new JCEElGamalPublicKey((DHPublicKeySpec)keySpec);
   7470 -            }
   7471 -
   7472 -            return super.engineGeneratePublic(keySpec);
   7473 -        }
   7474 -    }
   7475 -
   7476 -
   7477 -    /**
   7478 -     * This isn't really correct, however the class path project API seems to think such
   7479 -     * a key factory will exist.
   7480 -     */
   7481 -    public static class X509
   7482 -        extends JDKKeyFactory
   7483 -    {
   7484 -        public X509()
   7485 -        {
   7486 -        }
   7487 -    }
   7488 +    // public static class ElGamal
   7489 +    //     extends JDKKeyFactory
   7490 +    // {
   7491 +    //     public ElGamal()
   7492 +    //     {
   7493 +    //         elGamalFactory = true;
   7494 +    //     }
   7495 +    //
   7496 +    //     protected PrivateKey engineGeneratePrivate(
   7497 +    //         KeySpec    keySpec)
   7498 +    //         throws InvalidKeySpecException
   7499 +    //     {
   7500 +    //         if (keySpec instanceof ElGamalPrivateKeySpec)
   7501 +    //         {
   7502 +    //             return new JCEElGamalPrivateKey((ElGamalPrivateKeySpec)keySpec);
   7503 +    //         }
   7504 +    //         else if (keySpec instanceof DHPrivateKeySpec)
   7505 +    //         {
   7506 +    //             return new JCEElGamalPrivateKey((DHPrivateKeySpec)keySpec);
   7507 +    //         }
   7508 +    //
   7509 +    //         return super.engineGeneratePrivate(keySpec);
   7510 +    //     }
   7511 +    //
   7512 +    //     protected PublicKey engineGeneratePublic(
   7513 +    //         KeySpec    keySpec)
   7514 +    //         throws InvalidKeySpecException
   7515 +    //     {
   7516 +    //         if (keySpec instanceof ElGamalPublicKeySpec)
   7517 +    //         {
   7518 +    //             return new JCEElGamalPublicKey((ElGamalPublicKeySpec)keySpec);
   7519 +    //         }
   7520 +    //         else if (keySpec instanceof DHPublicKeySpec)
   7521 +    //         {
   7522 +    //             return new JCEElGamalPublicKey((DHPublicKeySpec)keySpec);
   7523 +    //         }
   7524 +    //
   7525 +    //         return super.engineGeneratePublic(keySpec);
   7526 +    //     }
   7527 +    // }
   7528 +    //
   7529 +    //
   7530 +    //
   7531 +    // /**
   7532 +    //  * This isn't really correct, however the class path project API seems to think such
   7533 +    //  * a key factory will exist.
   7534 +    //  */
   7535 +    // public static class X509
   7536 +    //     extends JDKKeyFactory
   7537 +    // {
   7538 +    //     public X509()
   7539 +    //     {
   7540 +    //     }
   7541 +    // }
   7542 +    // END android-removed
   7543  }
   7544 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java
   7545 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java	2011-02-23 20:08:56.000000000 +0000
   7546 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyPairGenerator.java	2011-09-08 21:28:49.000000000 +0000
   7547 @@ -6,9 +6,11 @@
   7548  import org.bouncycastle.crypto.generators.DHParametersGenerator;
   7549  import org.bouncycastle.crypto.generators.DSAKeyPairGenerator;
   7550  import org.bouncycastle.crypto.generators.DSAParametersGenerator;
   7551 -import org.bouncycastle.crypto.generators.ElGamalKeyPairGenerator;
   7552 -import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
   7553 -import org.bouncycastle.crypto.generators.GOST3410KeyPairGenerator;
   7554 +// BEGIN android-removed
   7555 +// import org.bouncycastle.crypto.generators.ElGamalKeyPairGenerator;
   7556 +// import org.bouncycastle.crypto.generators.ElGamalParametersGenerator;
   7557 +// import org.bouncycastle.crypto.generators.GOST3410KeyPairGenerator;
   7558 +// END android-removed
   7559  import org.bouncycastle.crypto.generators.RSAKeyPairGenerator;
   7560  import org.bouncycastle.crypto.params.DHKeyGenerationParameters;
   7561  import org.bouncycastle.crypto.params.DHParameters;
   7562 @@ -18,20 +20,24 @@
   7563  import org.bouncycastle.crypto.params.DSAParameters;
   7564  import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
   7565  import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
   7566 -import org.bouncycastle.crypto.params.ElGamalKeyGenerationParameters;
   7567 -import org.bouncycastle.crypto.params.ElGamalParameters;
   7568 -import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;
   7569 -import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
   7570 -import org.bouncycastle.crypto.params.GOST3410KeyGenerationParameters;
   7571 -import org.bouncycastle.crypto.params.GOST3410Parameters;
   7572 -import org.bouncycastle.crypto.params.GOST3410PrivateKeyParameters;
   7573 -import org.bouncycastle.crypto.params.GOST3410PublicKeyParameters;
   7574 +// BEGIN android-removed
   7575 +// import org.bouncycastle.crypto.params.ElGamalKeyGenerationParameters;
   7576 +// import org.bouncycastle.crypto.params.ElGamalParameters;
   7577 +// import org.bouncycastle.crypto.params.ElGamalPrivateKeyParameters;
   7578 +// import org.bouncycastle.crypto.params.ElGamalPublicKeyParameters;
   7579 +// import org.bouncycastle.crypto.params.GOST3410KeyGenerationParameters;
   7580 +// import org.bouncycastle.crypto.params.GOST3410Parameters;
   7581 +// import org.bouncycastle.crypto.params.GOST3410PrivateKeyParameters;
   7582 +// import org.bouncycastle.crypto.params.GOST3410PublicKeyParameters;
   7583 +// END android-removed
   7584  import org.bouncycastle.crypto.params.RSAKeyGenerationParameters;
   7585  import org.bouncycastle.crypto.params.RSAKeyParameters;
   7586  import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
   7587 -import org.bouncycastle.jce.spec.ElGamalParameterSpec;
   7588 -import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
   7589 -import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
   7590 +// BEGIN android-removed
   7591 +// import org.bouncycastle.jce.spec.ElGamalParameterSpec;
   7592 +// import org.bouncycastle.jce.spec.GOST3410ParameterSpec;
   7593 +// import org.bouncycastle.jce.spec.GOST3410PublicKeyParameterSetSpec;
   7594 +// END android-removed
   7595  
   7596  import java.math.BigInteger;
   7597  import java.security.InvalidAlgorithmParameterException;
   7598 @@ -163,7 +169,9 @@
   7599          {
   7600              if (!initialised)
   7601              {
   7602 -                Integer paramStrength = new Integer(strength);
   7603 +                // BEGIN android-changed
   7604 +                Integer paramStrength = Integer.valueOf(strength);
   7605 +                // END android-changed
   7606  
   7607                  if (params.containsKey(paramStrength))
   7608                  {
   7609 @@ -260,139 +268,143 @@
   7610          }
   7611      }
   7612  
   7613 -    public static class ElGamal
   7614 -        extends JDKKeyPairGenerator
   7615 -    {
   7616 -        ElGamalKeyGenerationParameters  param;
   7617 -        ElGamalKeyPairGenerator         engine = new ElGamalKeyPairGenerator();
   7618 -        int                             strength = 1024;
   7619 -        int                             certainty = 20;
   7620 -        SecureRandom                    random = new SecureRandom();
   7621 -        boolean                         initialised = false;
   7622 -
   7623 -        public ElGamal()
   7624 -        {
   7625 -            super("ElGamal");
   7626 -        }
   7627 -
   7628 -        public void initialize(
   7629 -            int             strength,
   7630 -            SecureRandom    random)
   7631 -        {
   7632 -            this.strength = strength;
   7633 -            this.random = random;
   7634 -        }
   7635 -
   7636 -        public void initialize(
   7637 -            AlgorithmParameterSpec  params,
   7638 -            SecureRandom            random)
   7639 -            throws InvalidAlgorithmParameterException
   7640 -        {
   7641 -            if (!(params instanceof ElGamalParameterSpec) && !(params instanceof DHParameterSpec))
   7642 -            {
   7643 -                throw new InvalidAlgorithmParameterException("parameter object not a DHParameterSpec or an ElGamalParameterSpec");
   7644 -            }
   7645 -            
   7646 -            if (params instanceof ElGamalParameterSpec)
   7647 -            {
   7648 -                ElGamalParameterSpec     elParams = (ElGamalParameterSpec)params;
   7649 -
   7650 -                param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(elParams.getP(), elParams.getG()));
   7651 -            }
   7652 -            else
   7653 -            {
   7654 -                DHParameterSpec     dhParams = (DHParameterSpec)params;
   7655 -
   7656 -                param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(dhParams.getP(), dhParams.getG(), dhParams.getL()));
   7657 -            }
   7658 -
   7659 -            engine.init(param);
   7660 -            initialised = true;
   7661 -        }
   7662 -
   7663 -        public KeyPair generateKeyPair()
   7664 -        {
   7665 -            if (!initialised)
   7666 -            {
   7667 -                ElGamalParametersGenerator   pGen = new ElGamalParametersGenerator();
   7668 -
   7669 -                pGen.init(strength, certainty, random);
   7670 -                param = new ElGamalKeyGenerationParameters(random, pGen.generateParameters());
   7671 -                engine.init(param);
   7672 -                initialised = true;
   7673 -            }
   7674 -
   7675 -            AsymmetricCipherKeyPair         pair = engine.generateKeyPair();
   7676 -            ElGamalPublicKeyParameters      pub = (ElGamalPublicKeyParameters)pair.getPublic();
   7677 -            ElGamalPrivateKeyParameters     priv = (ElGamalPrivateKeyParameters)pair.getPrivate();
   7678 -
   7679 -            return new KeyPair(new JCEElGamalPublicKey(pub),
   7680 -                               new JCEElGamalPrivateKey(priv));
   7681 -        }
   7682 -    }
   7683 -
   7684 -    public static class GOST3410
   7685 -        extends JDKKeyPairGenerator
   7686 -    {
   7687 -        GOST3410KeyGenerationParameters param;
   7688 -        GOST3410KeyPairGenerator        engine = new GOST3410KeyPairGenerator();
   7689 -        GOST3410ParameterSpec           gost3410Params;
   7690 -        int                             strength = 1024;
   7691 -        SecureRandom                    random = null;
   7692 -        boolean                         initialised = false;
   7693 -
   7694 -        public GOST3410()
   7695 -        {
   7696 -            super("GOST3410");
   7697 -        }
   7698 -
   7699 -        public void initialize(
   7700 -            int             strength,
   7701 -            SecureRandom    random)
   7702 -        {
   7703 -            this.strength = strength;
   7704 -            this.random = random;
   7705 -        }
   7706 -    
   7707 -        private void init(
   7708 -            GOST3410ParameterSpec gParams,
   7709 -            SecureRandom          random)
   7710 -        {
   7711 -            GOST3410PublicKeyParameterSetSpec spec = gParams.getPublicKeyParameters();
   7712 -            
   7713 -            param = new GOST3410KeyGenerationParameters(random, new GOST3410Parameters(spec.getP(), spec.getQ(), spec.getA()));
   7714 -            
   7715 -            engine.init(param);
   7716 -            
   7717 -            initialised = true;
   7718 -            gost3410Params = gParams;
   7719 -        }
   7720 -        
   7721 -        public void initialize(
   7722 -            AlgorithmParameterSpec  params,
   7723 -            SecureRandom            random)
   7724 -            throws InvalidAlgorithmParameterException
   7725 -        {
   7726 -            if (!(params instanceof GOST3410ParameterSpec))
   7727 -            {
   7728 -                throw new InvalidAlgorithmParameterException("parameter object not a GOST3410ParameterSpec");
   7729 -            }
   7730 -            
   7731 -            init((GOST3410ParameterSpec)params, random);
   7732 -        }
   7733 -
   7734 -        public KeyPair generateKeyPair()
   7735 -        {
   7736 -            if (!initialised)
   7737 -            {
   7738 -                init(new GOST3410ParameterSpec(CryptoProObjectIdentifiers.gostR3410_94_CryptoPro_A.getId()), new SecureRandom());
   7739 -            }
   7740 -            
   7741 -            AsymmetricCipherKeyPair   pair = engine.generateKeyPair();
   7742 -            GOST3410PublicKeyParameters  pub = (GOST3410PublicKeyParameters)pair.getPublic();
   7743 -            GOST3410PrivateKeyParameters priv = (GOST3410PrivateKeyParameters)pair.getPrivate();
   7744 -            
   7745 -            return new KeyPair(new JDKGOST3410PublicKey(pub, gost3410Params), new JDKGOST3410PrivateKey(priv, gost3410Params));
   7746 -        }
   7747 -   }
   7748 +    // BEGIN android-removed
   7749 +    // public static class ElGamal
   7750 +    //     extends JDKKeyPairGenerator
   7751 +    // {
   7752 +    //     ElGamalKeyGenerationParameters  param;
   7753 +    //     ElGamalKeyPairGenerator         engine = new ElGamalKeyPairGenerator();
   7754 +    //     int                             strength = 1024;
   7755 +    //     int                             certainty = 20;
   7756 +    //     SecureRandom                    random = new SecureRandom();
   7757 +    //     boolean                         initialised = false;
   7758 +    //
   7759 +    //     public ElGamal()
   7760 +    //     {
   7761 +    //         super("ElGamal");
   7762 +    //     }
   7763 +    //
   7764 +    //     public void initialize(
   7765 +    //         int             strength,
   7766 +    //         SecureRandom    random)
   7767 +    //     {
   7768 +    //         this.strength = strength;
   7769 +    //         this.random = random;
   7770 +    //     }
   7771 +    //
   7772 +    //     public void initialize(
   7773 +    //         AlgorithmParameterSpec  params,
   7774 +    //         SecureRandom            random)
   7775 +    //         throws InvalidAlgorithmParameterException
   7776 +    //     {
   7777 +    //         if (!(params instanceof ElGamalParameterSpec) && !(params instanceof DHParameterSpec))
   7778 +    //         {
   7779 +    //             throw new InvalidAlgorithmParameterException("parameter object not a DHParameterSpec or an ElGamalParameterSpec");
   7780 +    //         }
   7781 +    //
   7782 +    //         if (params instanceof ElGamalParameterSpec)
   7783 +    //         {
   7784 +    //             ElGamalParameterSpec     elParams = (ElGamalParameterSpec)params;
   7785 +
   7786 +    //             param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(elParams.getP(), elParams.getG()));
   7787 +    //         }
   7788 +    //         else
   7789 +    //         {
   7790 +    //             DHParameterSpec     dhParams = (DHParameterSpec)params;
   7791 +    //
   7792 +    //             param = new ElGamalKeyGenerationParameters(random, new ElGamalParameters(dhParams.getP(), dhParams.getG(), dhParams.getL()));
   7793 +    //         }
   7794 +    //
   7795 +    //         engine.init(param);
   7796 +    //         initialised = true;
   7797 +    //     }
   7798 +    //
   7799 +    //     public KeyPair generateKeyPair()
   7800 +    //     {
   7801 +    //         if (!initialised)
   7802 +    //         {
   7803 +    //             ElGamalParametersGenerator   pGen = new ElGamalParametersGenerator();
   7804 +    //
   7805 +    //             pGen.init(strength, certainty, random);
   7806 +    //             param = new ElGamalKeyGenerationParameters(random, pGen.generateParameters());
   7807 +    //             engine.init(param);
   7808 +    //             initialised = true;
   7809 +    //         }
   7810 +    //
   7811 +    //         AsymmetricCipherKeyPair         pair = engine.generateKeyPair();
   7812 +    //         ElGamalPublicKeyParameters      pub = (ElGamalPublicKeyParameters)pair.getPublic();
   7813 +    //         ElGamalPrivateKeyParameters     priv = (ElGamalPrivateKeyParameters)pair.getPrivate();
   7814 +    //
   7815 +    //         return new KeyPair(new JCEElGamalPublicKey(pub),
   7816 +    //                            new JCEElGamalPrivateKey(priv));
   7817 +    //     }
   7818 +    // }
   7819 +    // END android-removed
   7820 +
   7821 +   // BEGIN android-removed
   7822 +   //  public static class GOST3410
   7823 +   //      extends JDKKeyPairGenerator
   7824 +   //  {
   7825 +   //      GOST3410KeyGenerationParameters param;
   7826 +   //      GOST3410KeyPairGenerator        engine = new GOST3410KeyPairGenerator();
   7827 +   //      GOST3410ParameterSpec           gost3410Params;
   7828 +   //      int                             strength = 1024;
   7829 +   //      SecureRandom                    random = null;
   7830 +   //      boolean                         initialised = false;
   7831 +   //
   7832 +   //      public GOST3410()
   7833 +   //      {
   7834 +   //          super("GOST3410");
   7835 +   //      }
   7836 +   //
   7837 +   //      public void initialize(
   7838 +   //          int             strength,
   7839 +   //          SecureRandom    random)
   7840 +   //      {
   7841 +   //          this.strength = strength;
   7842 +   //          this.random = random;
   7843 +   //      }
   7844 +   //
   7845 +   //      private void init(
   7846 +   //          GOST3410ParameterSpec gParams,
   7847 +   //          SecureRandom          random)
   7848 +   //      {
   7849 +   //          GOST3410PublicKeyParameterSetSpec spec = gParams.getPublicKeyParameters();
   7850 +   //
   7851 +   //          param = new GOST3410KeyGenerationParameters(random, new GOST3410Parameters(spec.getP(), spec.getQ(), spec.getA()));
   7852 +   //
   7853 +   //          engine.init(param);
   7854 +   //
   7855 +   //          initialised = true;
   7856 +   //          gost3410Params = gParams;
   7857 +   //      }
   7858 +   //
   7859 +   //      public void initialize(
   7860 +   //          AlgorithmParameterSpec  params,
   7861 +   //          SecureRandom            random)
   7862 +   //          throws InvalidAlgorithmParameterException
   7863 +   //      {
   7864 +   //          if (!(params instanceof GOST3410ParameterSpec))
   7865 +   //          {
   7866 +   //              throw new InvalidAlgorithmParameterException("parameter object not a GOST3410ParameterSpec");
   7867 +   //          }
   7868 +   //
   7869 +   //          init((GOST3410ParameterSpec)params, random);
   7870 +   //      }
   7871 +   //
   7872 +   //      public KeyPair generateKeyPair()
   7873 +   //      {
   7874 +   //          if (!initialised)
   7875 +   //          {
   7876 +   //              init(new GOST3410ParameterSpec(CryptoProObjectIdentifiers.gostR3410_94_CryptoPro_A.getId()), new SecureRandom());
   7877 +   //          }
   7878 +   //         
   7879 +   //          AsymmetricCipherKeyPair   pair = engine.generateKeyPair();
   7880 +   //          GOST3410PublicKeyParameters  pub = (GOST3410PublicKeyParameters)pair.getPublic();
   7881 +   //          GOST3410PrivateKeyParameters priv = (GOST3410PrivateKeyParameters)pair.getPrivate();
   7882 +   //
   7883 +   //          return new KeyPair(new JDKGOST3410PublicKey(pub, gost3410Params), new JDKGOST3410PrivateKey(priv, gost3410Params));
   7884 +   //      }
   7885 +   // }
   7886 +   // END android-removed
   7887  }
   7888 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyStore.java
   7889 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKKeyStore.java	2011-02-23 20:08:56.000000000 +0000
   7890 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKKeyStore.java	2011-09-08 21:28:49.000000000 +0000
   7891 @@ -39,7 +39,12 @@
   7892  import org.bouncycastle.crypto.CipherParameters;
   7893  import org.bouncycastle.crypto.Digest;
   7894  import org.bouncycastle.crypto.PBEParametersGenerator;
   7895 -import org.bouncycastle.crypto.digests.SHA1Digest;
   7896 +// BEGIN android-added
   7897 +import org.bouncycastle.crypto.digests.OpenSSLDigest;
   7898 +// END android-added
   7899 +// BEGIN android-removed
   7900 +// import org.bouncycastle.crypto.digests.SHA1Digest;
   7901 +// END android-removed
   7902  import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
   7903  import org.bouncycastle.crypto.io.DigestInputStream;
   7904  import org.bouncycastle.crypto.io.DigestOutputStream;
   7905 @@ -442,6 +447,7 @@
   7906          }
   7907          catch (Exception e)
   7908          {
   7909 +
   7910              throw new IOException("Exception creating key: " + e.toString());
   7911          }
   7912      }
   7913 @@ -497,7 +503,13 @@
   7914  
   7915          if (entry == null)
   7916          {
   7917 -            throw new KeyStoreException("no such entry as " + alias);
   7918 +            // BEGIN android-removed
   7919 +            // Only throw if there is a problem removing, not if missing
   7920 +            // throw new KeyStoreException("no such entry as " + alias);
   7921 +            // END android-removed
   7922 +            // BEGIN android-added
   7923 +            return;
   7924 +            // END android-added
   7925          }
   7926  
   7927          table.remove(alias);
   7928 @@ -810,12 +822,16 @@
   7929          //
   7930          // we only do an integrity check if the password is provided.
   7931          //
   7932 -        HMac hMac = new HMac(new SHA1Digest());
   7933 +        // BEGIN android-changed
   7934 +        HMac hMac = new HMac(new OpenSSLDigest.SHA1());
   7935 +        // END android-changed
   7936          if (password != null && password.length != 0)
   7937          {
   7938              byte[] passKey = PBEParametersGenerator.PKCS12PasswordToBytes(password);
   7939  
   7940 -            PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new SHA1Digest());
   7941 +            // BEGIN android-changed
   7942 +            PBEParametersGenerator pbeGen = new PKCS12ParametersGenerator(new OpenSSLDigest.SHA1());
   7943 +            // END android-changed
   7944              pbeGen.init(passKey, salt, iterationCount);
   7945              CipherParameters macParams = pbeGen.generateDerivedMacParameters(hMac.getMacSize());
   7946              Arrays.fill(passKey, (byte)0);
   7947 @@ -866,9 +882,11 @@
   7948          dOut.write(salt);
   7949          dOut.writeInt(iterationCount);
   7950  
   7951 -        HMac                    hMac = new HMac(new SHA1Digest());
   7952 +        // BEGIN android-changed
   7953 +        HMac                    hMac = new HMac(new OpenSSLDigest.SHA1());
   7954          MacOutputStream         mOut = new MacOutputStream(dOut, hMac);
   7955 -        PBEParametersGenerator  pbeGen = new PKCS12ParametersGenerator(new SHA1Digest());
   7956 +        PBEParametersGenerator  pbeGen = new PKCS12ParametersGenerator(new OpenSSLDigest.SHA1());
   7957 +        // END android-changed
   7958          byte[]                  passKey = PBEParametersGenerator.PKCS12PasswordToBytes(password);
   7959  
   7960          pbeGen.init(passKey, salt, iterationCount);
   7961 @@ -956,7 +974,9 @@
   7962              Cipher cipher = this.makePBECipher(cipherAlg, Cipher.DECRYPT_MODE, password, salt, iterationCount);
   7963              CipherInputStream cIn = new CipherInputStream(dIn, cipher);
   7964  
   7965 -            Digest dig = new SHA1Digest();
   7966 +            // BEGIN android-changed
   7967 +            Digest dig = new OpenSSLDigest.SHA1();
   7968 +            // END android-changed
   7969              DigestInputStream  dgIn = new DigestInputStream(cIn, dig);
   7970      
   7971              this.loadStore(dgIn);
   7972 @@ -996,8 +1016,9 @@
   7973              cipher = this.makePBECipher(STORE_CIPHER, Cipher.ENCRYPT_MODE, password, salt, iterationCount);
   7974      
   7975              CipherOutputStream  cOut = new CipherOutputStream(dOut, cipher);
   7976 -            DigestOutputStream  dgOut = new DigestOutputStream(cOut, new SHA1Digest());
   7977 -    
   7978 +            // BEGIN android-changed
   7979 +            DigestOutputStream  dgOut = new DigestOutputStream(cOut, new OpenSSLDigest.SHA1());
   7980 +            // END android-changed
   7981              this.saveStore(dgOut);
   7982      
   7983              Digest  dig = dgOut.getDigest();
   7984 @@ -1009,5 +1030,5 @@
   7985      
   7986              cOut.close();
   7987          }
   7988 -    }
   7989 +    }    
   7990  }
   7991 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKMessageDigest.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKMessageDigest.java
   7992 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKMessageDigest.java	2011-02-23 20:08:56.000000000 +0000
   7993 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKMessageDigest.java	2011-09-08 21:28:49.000000000 +0000
   7994 @@ -57,36 +57,38 @@
   7995          {
   7996              super(new SHA1Digest());
   7997          }
   7998 -
   7999 +    
   8000          public Object clone()
   8001              throws CloneNotSupportedException
   8002          {
   8003              SHA1 d = (SHA1)super.clone();
   8004              d.digest = new SHA1Digest((SHA1Digest)digest);
   8005 -
   8006 -            return d;
   8007 -        }
   8008 -    }
   8009 -
   8010 -    static public class SHA224
   8011 -        extends JDKMessageDigest
   8012 -        implements Cloneable
   8013 -    {
   8014 -        public SHA224()
   8015 -        {
   8016 -            super(new SHA224Digest());
   8017 -        }
   8018 -
   8019 -        public Object clone()
   8020 -            throws CloneNotSupportedException
   8021 -        {
   8022 -            SHA224 d = (SHA224)super.clone();
   8023 -            d.digest = new SHA224Digest((SHA224Digest)digest);
   8024 -
   8025 +    
   8026              return d;
   8027          }
   8028      }
   8029 -
   8030 +    
   8031 +    // BEGIN android-removed
   8032 +    // static public class SHA224
   8033 +    //     extends JDKMessageDigest
   8034 +    //     implements Cloneable
   8035 +    // {
   8036 +    //     public SHA224()
   8037 +    //     {
   8038 +    //         super(new SHA224Digest());
   8039 +    //     }
   8040 +    //
   8041 +    //     public Object clone()
   8042 +    //         throws CloneNotSupportedException
   8043 +    //     {
   8044 +    //         SHA224 d = (SHA224)super.clone();
   8045 +    //         d.digest = new SHA224Digest((SHA224Digest)digest);
   8046 +    //
   8047 +    //         return d;
   8048 +    //     }
   8049 +    // }
   8050 +    // END android-removed
   8051 +    
   8052      static public class SHA256
   8053          extends JDKMessageDigest
   8054          implements Cloneable
   8055 @@ -95,13 +97,13 @@
   8056          {
   8057              super(new SHA256Digest());
   8058          }
   8059 -
   8060 +    
   8061          public Object clone()
   8062              throws CloneNotSupportedException
   8063          {
   8064              SHA256 d = (SHA256)super.clone();
   8065              d.digest = new SHA256Digest((SHA256Digest)digest);
   8066 -
   8067 +    
   8068              return d;
   8069          }
   8070      }
   8071 @@ -144,43 +146,45 @@
   8072          }
   8073      }
   8074  
   8075 -    static public class MD2
   8076 -        extends JDKMessageDigest
   8077 -        implements Cloneable
   8078 -    {
   8079 -        public MD2()
   8080 -        {
   8081 -            super(new MD2Digest());
   8082 -        }
   8083 -
   8084 -        public Object clone()
   8085 -            throws CloneNotSupportedException
   8086 -        {
   8087 -            MD2 d = (MD2)super.clone();
   8088 -            d.digest = new MD2Digest((MD2Digest)digest);
   8089 -
   8090 -            return d;
   8091 -        }
   8092 -    }
   8093 -
   8094 -    static public class MD4
   8095 -        extends JDKMessageDigest
   8096 -        implements Cloneable
   8097 -    {
   8098 -        public MD4()
   8099 -        {
   8100 -            super(new MD4Digest());
   8101 -        }
   8102 -
   8103 -        public Object clone()
   8104 -            throws CloneNotSupportedException
   8105 -        {
   8106 -            MD4 d = (MD4)super.clone();
   8107 -            d.digest = new MD4Digest((MD4Digest)digest);
   8108 -
   8109 -            return d;
   8110 -        }
   8111 -    }
   8112 +    // BEGIN android-removed
   8113 +    // static public class MD2
   8114 +    //     extends JDKMessageDigest
   8115 +    //     implements Cloneable
   8116 +    // {
   8117 +    //     public MD2()
   8118 +    //     {
   8119 +    //         super(new MD2Digest());
   8120 +    //     }
   8121 +    //
   8122 +    //     public Object clone()
   8123 +    //         throws CloneNotSupportedException
   8124 +    //     {
   8125 +    //         MD2 d = (MD2)super.clone();
   8126 +    //         d.digest = new MD2Digest((MD2Digest)digest);
   8127 +    //
   8128 +    //         return d;
   8129 +    //     }
   8130 +    // }
   8131 +    //
   8132 +    // static public class MD4
   8133 +    //     extends JDKMessageDigest
   8134 +    //     implements Cloneable
   8135 +    // {
   8136 +    //     public MD4()
   8137 +    //     {
   8138 +    //         super(new MD4Digest());
   8139 +    //     }
   8140 +    //
   8141 +    //     public Object clone()
   8142 +    //         throws CloneNotSupportedException
   8143 +    //     {
   8144 +    //         MD4 d = (MD4)super.clone();
   8145 +    //         d.digest = new MD4Digest((MD4Digest)digest);
   8146 +    //
   8147 +    //         return d;
   8148 +    //     }
   8149 +    // }
   8150 +    // END android-removed
   8151  
   8152      static public class MD5
   8153          extends JDKMessageDigest
   8154 @@ -190,147 +194,149 @@
   8155          {
   8156              super(new MD5Digest());
   8157          }
   8158 -
   8159 +   
   8160          public Object clone()
   8161              throws CloneNotSupportedException
   8162          {
   8163              MD5 d = (MD5)super.clone();
   8164              d.digest = new MD5Digest((MD5Digest)digest);
   8165 -
   8166 -            return d;
   8167 -        }
   8168 -    }
   8169 -
   8170 -    static public class RIPEMD128
   8171 -        extends JDKMessageDigest
   8172 -        implements Cloneable
   8173 -    {
   8174 -        public RIPEMD128()
   8175 -        {
   8176 -            super(new RIPEMD128Digest());
   8177 -        }
   8178 -
   8179 -        public Object clone()
   8180 -            throws CloneNotSupportedException
   8181 -        {
   8182 -            RIPEMD128 d = (RIPEMD128)super.clone();
   8183 -            d.digest = new RIPEMD128Digest((RIPEMD128Digest)digest);
   8184 -
   8185 +   
   8186              return d;
   8187          }
   8188      }
   8189  
   8190 -    static public class RIPEMD160
   8191 -        extends JDKMessageDigest
   8192 -        implements Cloneable
   8193 -    {
   8194 -        public RIPEMD160()
   8195 -        {
   8196 -            super(new RIPEMD160Digest());
   8197 -        }
   8198 -
   8199 -        public Object clone()
   8200 -            throws CloneNotSupportedException
   8201 -        {
   8202 -            RIPEMD160 d = (RIPEMD160)super.clone();
   8203 -            d.digest = new RIPEMD160Digest((RIPEMD160Digest)digest);
   8204 -
   8205 -            return d;
   8206 -        }
   8207 -    }
   8208 -    
   8209 -    static public class RIPEMD256
   8210 -        extends JDKMessageDigest
   8211 -        implements Cloneable
   8212 -    {
   8213 -        public RIPEMD256()
   8214 -        {
   8215 -            super(new RIPEMD256Digest());
   8216 -        }
   8217 -
   8218 -        public Object clone()
   8219 -            throws CloneNotSupportedException
   8220 -        {
   8221 -            RIPEMD256 d = (RIPEMD256)super.clone();
   8222 -            d.digest = new RIPEMD256Digest((RIPEMD256Digest)digest);
   8223 -
   8224 -            return d;
   8225 -        }
   8226 -    }
   8227 -    
   8228 -    static public class RIPEMD320
   8229 -        extends JDKMessageDigest
   8230 -        implements Cloneable
   8231 -    {
   8232 -        public RIPEMD320()
   8233 -        {
   8234 -            super(new RIPEMD320Digest());
   8235 -        }
   8236 -
   8237 -        public Object clone()
   8238 -            throws CloneNotSupportedException
   8239 -        {
   8240 -            RIPEMD320 d = (RIPEMD320)super.clone();
   8241 -            d.digest = new RIPEMD320Digest((RIPEMD320Digest)digest);
   8242 -
   8243 -            return d;
   8244 -        }
   8245 -    }
   8246 -    
   8247 -    static public class Tiger
   8248 -        extends JDKMessageDigest
   8249 -        implements Cloneable
   8250 -    {
   8251 -        public Tiger()
   8252 -        {
   8253 -            super(new TigerDigest());
   8254 -        }
   8255 -
   8256 -        public Object clone()
   8257 -            throws CloneNotSupportedException
   8258 -        {
   8259 -            Tiger d = (Tiger)super.clone();
   8260 -            d.digest = new TigerDigest((TigerDigest)digest);
   8261 -
   8262 -            return d;
   8263 -        }
   8264 -    }
   8265 -    
   8266 -    static public class GOST3411
   8267 -        extends JDKMessageDigest
   8268 -        implements Cloneable
   8269 -    {
   8270 -        public GOST3411()
   8271 -        {
   8272 -            super(new GOST3411Digest());
   8273 -        }
   8274 -    
   8275 -        public Object clone()
   8276 -        throws CloneNotSupportedException
   8277 -        {
   8278 -            GOST3411 d = (GOST3411)super.clone();
   8279 -            d.digest = new GOST3411Digest((GOST3411Digest)digest);
   8280 -
   8281 -            return d;
   8282 -        }
   8283 -    }
   8284 -    
   8285 -    static public class Whirlpool
   8286 -       extends JDKMessageDigest
   8287 -       implements Cloneable
   8288 -    {
   8289 -        public Whirlpool()
   8290 -        {
   8291 -            super(new WhirlpoolDigest());
   8292 -        }
   8293 -        
   8294 -        public Object clone()
   8295 -        throws CloneNotSupportedException
   8296 -        {
   8297 -            Whirlpool d = (Whirlpool)super.clone();
   8298 -            d.digest = new WhirlpoolDigest((WhirlpoolDigest)digest);
   8299 -            
   8300 -            return d;
   8301 -        }
   8302 -    }
   8303 +    // BEGIN android-removed
   8304 +    // static public class RIPEMD128
   8305 +    //     extends JDKMessageDigest
   8306 +    //     implements Cloneable
   8307 +    // {
   8308 +    //     public RIPEMD128()
   8309 +    //     {
   8310 +    //         super(new RIPEMD128Digest());
   8311 +    //     }
   8312 +    //
   8313 +    //     public Object clone()
   8314 +    //         throws CloneNotSupportedException
   8315 +    //     {
   8316 +    //         RIPEMD128 d = (RIPEMD128)super.clone();
   8317 +    //         d.digest = new RIPEMD128Digest((RIPEMD128Digest)digest);
   8318 +    //
   8319 +    //         return d;
   8320 +    //     }
   8321 +    // }
   8322 +    //
   8323 +    // static public class RIPEMD160
   8324 +    //     extends JDKMessageDigest
   8325 +    //     implements Cloneable
   8326 +    // {
   8327 +    //     public RIPEMD160()
   8328 +    //     {
   8329 +    //         super(new RIPEMD160Digest());
   8330 +    //     }
   8331 +    //
   8332 +    //     public Object clone()
   8333 +    //         throws CloneNotSupportedException
   8334 +    //     {
   8335 +    //         RIPEMD160 d = (RIPEMD160)super.clone();
   8336 +    //         d.digest = new RIPEMD160Digest((RIPEMD160Digest)digest);
   8337 +    //
   8338 +    //         return d;
   8339 +    //     }
   8340 +    // }
   8341 +    //   
   8342 +    // static public class RIPEMD256
   8343 +    //     extends JDKMessageDigest
   8344 +    //     implements Cloneable
   8345 +    // {
   8346 +    //     public RIPEMD256()
   8347 +    //     {
   8348 +    //         super(new RIPEMD256Digest());
   8349 +    //     }
   8350 +    //
   8351 +    //     public Object clone()
   8352 +    //         throws CloneNotSupportedException
   8353 +    //     {
   8354 +    //         RIPEMD256 d = (RIPEMD256)super.clone();
   8355 +    //         d.digest = new RIPEMD256Digest((RIPEMD256Digest)digest);
   8356 +    //
   8357 +    //         return d;
   8358 +    //     }
   8359 +    // }
   8360 +    //   
   8361 +    // static public class RIPEMD320
   8362 +    //     extends JDKMessageDigest
   8363 +    //     implements Cloneable
   8364 +    // {
   8365 +    //     public RIPEMD320()
   8366 +    //     {
   8367 +    //         super(new RIPEMD320Digest());
   8368 +    //     }
   8369 +    //
   8370 +    //     public Object clone()
   8371 +    //         throws CloneNotSupportedException
   8372 +    //     {
   8373 +    //         RIPEMD320 d = (RIPEMD320)super.clone();
   8374 +    //         d.digest = new RIPEMD320Digest((RIPEMD320Digest)digest);
   8375 +    //
   8376 +    //         return d;
   8377 +    //     }
   8378 +    // }
   8379 +    //   
   8380 +    // static public class Tiger
   8381 +    //     extends JDKMessageDigest
   8382 +    //     implements Cloneable
   8383 +    // {
   8384 +    //     public Tiger()
   8385 +    //     {
   8386 +    //         super(new TigerDigest());
   8387 +    //     }
   8388 +    //
   8389 +    //     public Object clone()
   8390 +    //         throws CloneNotSupportedException
   8391 +    //     {
   8392 +    //         Tiger d = (Tiger)super.clone();
   8393 +    //         d.digest = new TigerDigest((TigerDigest)digest);
   8394 +    //
   8395 +    //         return d;
   8396 +    //     }
   8397 +    // }
   8398 +    //   
   8399 +    // static public class GOST3411
   8400 +    //     extends JDKMessageDigest
   8401 +    //     implements Cloneable
   8402 +    // {
   8403 +    //     public GOST3411()
   8404 +    //     {
   8405 +    //         super(new GOST3411Digest());
   8406 +    //     }
   8407 +    //   
   8408 +    //     public Object clone()
   8409 +    //     throws CloneNotSupportedException
   8410 +    //     {
   8411 +    //         GOST3411 d = (GOST3411)super.clone();
   8412 +    //         d.digest = new GOST3411Digest((GOST3411Digest)digest);
   8413 +    //
   8414 +    //         return d;
   8415 +    //     }
   8416 +    // }
   8417 +    //   
   8418 +    // static public class Whirlpool
   8419 +    //    extends JDKMessageDigest
   8420 +    //    implements Cloneable
   8421 +    // {
   8422 +    //     public Whirlpool()
   8423 +    //     {
   8424 +    //         super(new WhirlpoolDigest());
   8425 +    //     }
   8426 +    //       
   8427 +    //     public Object clone()
   8428 +    //     throws CloneNotSupportedException
   8429 +    //     {
   8430 +    //         Whirlpool d = (Whirlpool)super.clone();
   8431 +    //         d.digest = new WhirlpoolDigest((WhirlpoolDigest)digest);
   8432 +    //           
   8433 +    //         return d;
   8434 +    //     }
   8435 +    // }
   8436 +    // END android-removed
   8437  }
   8438 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java
   8439 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java	2011-02-23 20:08:56.000000000 +0000
   8440 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/JDKPKCS12KeyStore.java	2011-09-08 21:28:49.000000000 +0000
   8441 @@ -260,10 +260,13 @@
   8442              }
   8443          }
   8444  
   8445 -        if (c == null && k == null)
   8446 -        {
   8447 -            throw new KeyStoreException("no such entry as " + alias);
   8448 -        }
   8449 +        // BEGIN android-removed
   8450 +        // Only throw if there is a problem removing, not if missing
   8451 +        // if (c == null && k == null)
   8452 +        // {
   8453 +        //     throw new KeyStoreException("no such entry as " + alias);
   8454 +        // }
   8455 +        // END android-removed
   8456      }
   8457  
   8458      /**
   8459 @@ -438,6 +441,14 @@
   8460      
   8461      public Date engineGetCreationDate(String alias) 
   8462      {
   8463 +        // BEGIN android-added
   8464 +        if (alias == null) {
   8465 +            throw new NullPointerException("alias == null");
   8466 +        }
   8467 +        if (keys.get(alias) == null && certs.get(alias) == null) {
   8468 +            return null;
   8469 +        }
   8470 +        // END android-added
   8471          return new Date();
   8472      }
   8473  
   8474 @@ -496,6 +507,11 @@
   8475          Certificate[]   chain) 
   8476          throws KeyStoreException
   8477      {
   8478 +        // BEGIN android-added
   8479 +        if (!(key instanceof PrivateKey)) {
   8480 +            throw new KeyStoreException("PKCS12 does not support non-PrivateKeys");
   8481 +        }
   8482 +        // END android-added
   8483          if ((key instanceof PrivateKey) && (chain == null))
   8484          {
   8485              throw new KeyStoreException("no certificate chain for private key");
   8486 @@ -507,12 +523,18 @@
   8487          }
   8488  
   8489          keys.put(alias, key);
   8490 +        // BEGIN android-added
   8491 +        if (chain != null) {
   8492 +        // END android-added
   8493          certs.put(alias, chain[0]);
   8494  
   8495          for (int i = 0; i != chain.length; i++)
   8496          {
   8497              chainCerts.put(new CertId(chain[i].getPublicKey()), chain[i]);
   8498          }
   8499 +        // BEGIN android-added
   8500 +        }
   8501 +        // END android-added
   8502      }
   8503  
   8504      public int engineSize() 
   8505 @@ -1488,7 +1510,9 @@
   8506          {
   8507              byte[] res = calculatePbeMac(id_SHA1, mSalt, itCount, password, false, data);
   8508  
   8509 -            AlgorithmIdentifier     algId = new AlgorithmIdentifier(id_SHA1, new DERNull());
   8510 +            // BEGIN android-changed
   8511 +            AlgorithmIdentifier     algId = new AlgorithmIdentifier(id_SHA1, DERNull.INSTANCE);
   8512 +            // END android-changed
   8513              DigestInfo              dInfo = new DigestInfo(algId, res);
   8514  
   8515              mData = new MacData(dInfo, mSalt, itCount);
   8516 @@ -1545,32 +1569,34 @@
   8517          }
   8518      }
   8519  
   8520 -    public static class BCPKCS12KeyStore3DES
   8521 -        extends JDKPKCS12KeyStore
   8522 -    {
   8523 -        public BCPKCS12KeyStore3DES()
   8524 -        {
   8525 -            super(bcProvider, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC);
   8526 -        }
   8527 -    }
   8528 -
   8529 -    public static class DefPKCS12KeyStore
   8530 -        extends JDKPKCS12KeyStore
   8531 -    {
   8532 -        public DefPKCS12KeyStore()
   8533 -        {
   8534 -            super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbewithSHAAnd40BitRC2_CBC);
   8535 -        }
   8536 -    }
   8537 -
   8538 -    public static class DefPKCS12KeyStore3DES
   8539 -        extends JDKPKCS12KeyStore
   8540 -    {
   8541 -        public DefPKCS12KeyStore3DES()
   8542 -        {
   8543 -            super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC);
   8544 -        }
   8545 -    }
   8546 +    // BEGIN android-removed
   8547 +    // public static class BCPKCS12KeyStore3DES
   8548 +    //     extends JDKPKCS12KeyStore
   8549 +    // {
   8550 +    //     public BCPKCS12KeyStore3DES()
   8551 +    //     {
   8552 +    //         super(bcProvider, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC);
   8553 +    //     }
   8554 +    // }
   8555 +    //
   8556 +    // public static class DefPKCS12KeyStore
   8557 +    //     extends JDKPKCS12KeyStore
   8558 +    // {
   8559 +    //     public DefPKCS12KeyStore()
   8560 +    //     {
   8561 +    //         super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbewithSHAAnd40BitRC2_CBC);
   8562 +    //     }
   8563 +    // }
   8564 +    //
   8565 +    // public static class DefPKCS12KeyStore3DES
   8566 +    //     extends JDKPKCS12KeyStore
   8567 +    // {
   8568 +    //     public DefPKCS12KeyStore3DES()
   8569 +    //     {
   8570 +    //         super(null, pbeWithSHAAnd3_KeyTripleDES_CBC, pbeWithSHAAnd3_KeyTripleDES_CBC);
   8571 +    //     }
   8572 +    // }
   8573 +    // END android-removed
   8574  
   8575      private static class IgnoresCaseHashtable
   8576      {
   8577 @@ -1579,7 +1605,7 @@
   8578  
   8579          public void put(String key, Object value)
   8580          {
   8581 -            String lower = Strings.toLowerCase(key);
   8582 +            String lower = (key == null) ? null : Strings.toLowerCase(key);
   8583              String k = (String)keys.get(lower);
   8584              if (k != null)
   8585              {
   8586 @@ -1597,7 +1623,9 @@
   8587  
   8588          public Object remove(String alias)
   8589          {
   8590 -            String k = (String)keys.remove(Strings.toLowerCase(alias));
   8591 +            // BEGIN android-changed
   8592 +            String k = (String)keys.remove(alias == null ? null : Strings.toLowerCase(alias));
   8593 +            // END android-changed
   8594              if (k == null)
   8595              {
   8596                  return null;
   8597 @@ -1608,7 +1636,9 @@
   8598  
   8599          public Object get(String alias)
   8600          {
   8601 -            String k = (String)keys.get(Strings.toLowerCase(alias));
   8602 +            // BEGIN android-changed
   8603 +            String k = (String)keys.get(alias == null ? null : Strings.toLowerCase(alias));
   8604 +            // END android-changed
   8605              if (k == null)
   8606              {
   8607                  return null;
   8608 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PBE.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PBE.java
   8609 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PBE.java	2011-02-23 20:08:56.000000000 +0000
   8610 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PBE.java	2011-09-08 21:28:49.000000000 +0000
   8611 @@ -7,12 +7,18 @@
   8612  
   8613  import org.bouncycastle.crypto.CipherParameters;
   8614  import org.bouncycastle.crypto.PBEParametersGenerator;
   8615 -import org.bouncycastle.crypto.digests.MD2Digest;
   8616 +// BEGIN android-removed
   8617 +// import org.bouncycastle.crypto.digests.MD2Digest;
   8618 +// END android-removed
   8619  import org.bouncycastle.crypto.digests.MD5Digest;
   8620 -import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   8621 +// BEGIN android-removed
   8622 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   8623 +// END android-removed
   8624  import org.bouncycastle.crypto.digests.SHA1Digest;
   8625  import org.bouncycastle.crypto.digests.SHA256Digest;
   8626 -import org.bouncycastle.crypto.digests.TigerDigest;
   8627 +// BEGIN android-removed
   8628 +// import org.bouncycastle.crypto.digests.TigerDigest;
   8629 +// END android-removed
   8630  import org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator;
   8631  import org.bouncycastle.crypto.generators.PKCS12ParametersGenerator;
   8632  import org.bouncycastle.crypto.generators.PKCS5S1ParametersGenerator;
   8633 @@ -53,9 +59,11 @@
   8634              {
   8635                  switch (hash)
   8636                  {
   8637 -                case MD2:
   8638 -                    generator = new PKCS5S1ParametersGenerator(new MD2Digest());
   8639 -                    break;
   8640 +                // BEGIN android-removed
   8641 +                // case MD2:
   8642 +                //     generator = new PKCS5S1ParametersGenerator(new MD2Digest());
   8643 +                //     break;
   8644 +                // END android-removed
   8645                  case MD5:
   8646                      generator = new PKCS5S1ParametersGenerator(new MD5Digest());
   8647                      break;
   8648 @@ -74,21 +82,25 @@
   8649              {
   8650                  switch (hash)
   8651                  {
   8652 -                case MD2:
   8653 -                    generator = new PKCS12ParametersGenerator(new MD2Digest());
   8654 -                    break;
   8655 +                // BEGIN android-removed
   8656 +                // case MD2:
   8657 +                //     generator = new PKCS12ParametersGenerator(new MD2Digest());
   8658 +                //     break;
   8659 +                // END android-removed
   8660                  case MD5:
   8661                      generator = new PKCS12ParametersGenerator(new MD5Digest());
   8662                      break;
   8663                  case SHA1:
   8664                      generator = new PKCS12ParametersGenerator(new SHA1Digest());
   8665                      break;
   8666 -                case RIPEMD160:
   8667 -                    generator = new PKCS12ParametersGenerator(new RIPEMD160Digest());
   8668 -                    break;
   8669 -                case TIGER:
   8670 -                    generator = new PKCS12ParametersGenerator(new TigerDigest());
   8671 -                    break;
   8672 +                // BEGIN android-removed
   8673 +                // case RIPEMD160:
   8674 +                //     generator = new PKCS12ParametersGenerator(new RIPEMD160Digest());
   8675 +                //     break;
   8676 +                // case TIGER:
   8677 +                //     generator = new PKCS12ParametersGenerator(new TigerDigest());
   8678 +                //     break;
   8679 +                // END android-removed
   8680                  case SHA256:
   8681                      generator = new PKCS12ParametersGenerator(new SHA256Digest());
   8682                      break;
   8683 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPath.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPath.java
   8684 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPath.java	2011-02-23 20:08:56.000000000 +0000
   8685 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPath.java	2011-09-08 21:28:49.000000000 +0000
   8686 @@ -33,7 +33,9 @@
   8687  import org.bouncycastle.asn1.pkcs.ContentInfo;
   8688  import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
   8689  import org.bouncycastle.asn1.pkcs.SignedData;
   8690 -import org.bouncycastle.openssl.PEMWriter;
   8691 +// BEGIN android-removed
   8692 +// import org.bouncycastle.openssl.PEMWriter;
   8693 +// END android-removed
   8694  
   8695  /**
   8696   * CertPath implementation for X.509 certificates.
   8697 @@ -295,27 +297,29 @@
   8698              return toDEREncoded(new ContentInfo(
   8699                      PKCSObjectIdentifiers.signedData, sd));
   8700          }
   8701 -        else if (encoding.equalsIgnoreCase("PEM"))
   8702 -        {
   8703 -            ByteArrayOutputStream bOut = new ByteArrayOutputStream();
   8704 -            PEMWriter             pWrt = new PEMWriter(new OutputStreamWriter(bOut));
   8705 -
   8706 -            try
   8707 -            {
   8708 -                for (int i = 0; i != certificates.size(); i++)
   8709 -                {
   8710 -                    pWrt.writeObject(certificates.get(i));
   8711 -                }
   8712 -            
   8713 -                pWrt.close();
   8714 -            }
   8715 -            catch (Exception e)
   8716 -            {
   8717 -                throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
   8718 -            }
   8719 -
   8720 -            return bOut.toByteArray();
   8721 -        }
   8722 +        // BEGIN android-removed
   8723 +        // else if (encoding.equalsIgnoreCase("PEM"))
   8724 +        // {
   8725 +        //     ByteArrayOutputStream bOut = new ByteArrayOutputStream();
   8726 +        //     PEMWriter             pWrt = new PEMWriter(new OutputStreamWriter(bOut));
   8727 +        //
   8728 +        //     try
   8729 +        //     {
   8730 +        //         for (int i = 0; i != certificates.size(); i++)
   8731 +        //         {
   8732 +        //             pWrt.writeObject(certificates.get(i));
   8733 +        //         }
   8734 +        //     
   8735 +        //         pWrt.close();
   8736 +        //     }
   8737 +        //     catch (Exception e)
   8738 +        //     {
   8739 +        //         throw new CertificateEncodingException("can't encode certificate for PEM encoded path");
   8740 +        //     }
   8741 +        //
   8742 +        //     return bOut.toByteArray();
   8743 +        // }
   8744 +        // END android-removed
   8745          else
   8746          {
   8747              throw new CertificateEncodingException("unsupported encoding: " + encoding);
   8748 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java
   8749 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java	2011-02-23 20:08:56.000000000 +0000
   8750 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXCertPathValidatorSpi.java	2011-09-08 21:28:49.000000000 +0000
   8751 @@ -1,5 +1,8 @@
   8752  package org.bouncycastle.jce.provider;
   8753  
   8754 +// BEGIN android-added
   8755 +import java.math.BigInteger;
   8756 +// END android-added
   8757  import java.security.InvalidAlgorithmParameterException;
   8758  import java.security.PublicKey;
   8759  import java.security.cert.CertPath;
   8760 @@ -13,6 +16,7 @@
   8761  import java.security.cert.TrustAnchor;
   8762  import java.security.cert.X509Certificate;
   8763  import java.util.ArrayList;
   8764 +import java.util.Arrays;
   8765  import java.util.HashSet;
   8766  import java.util.Iterator;
   8767  import java.util.List;
   8768 @@ -23,6 +27,10 @@
   8769  import org.bouncycastle.asn1.DEREncodable;
   8770  import org.bouncycastle.asn1.DERObjectIdentifier;
   8771  import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
   8772 +// BEGIN android-added
   8773 +import org.bouncycastle.crypto.Digest;
   8774 +import org.bouncycastle.crypto.digests.OpenSSLDigest;
   8775 +// END android-added
   8776  import org.bouncycastle.jce.exception.ExtCertPathValidatorException;
   8777  import org.bouncycastle.x509.ExtendedPKIXParameters;
   8778  
   8779 @@ -33,6 +41,63 @@
   8780  public class PKIXCertPathValidatorSpi
   8781          extends CertPathValidatorSpi
   8782  {
   8783 +    // BEGIN android-added
   8784 +
   8785 +    // From http://src.chromium.org/viewvc/chrome/trunk/src/net/base/x509_certificate.cc?revision=78748&view=markup
   8786 +    private static final Set<BigInteger> SERIAL_BLACKLIST = new HashSet<BigInteger>(Arrays.asList(
   8787 +        // Not a real certificate. For testing only.
   8788 +        new BigInteger(1, new byte[] {(byte)0x07,(byte)0x7a,(byte)0x59,(byte)0xbc,(byte)0xd5,(byte)0x34,(byte)0x59,(byte)0x60,(byte)0x1c,(byte)0xa6,(byte)0x90,(byte)0x72,(byte)0x67,(byte)0xa6,(byte)0xdd,(byte)0x1c}),
   8789 +
   8790 +        new BigInteger(1, new byte[] {(byte)0x04,(byte)0x7e,(byte)0xcb,(byte)0xe9,(byte)0xfc,(byte)0xa5,(byte)0x5f,(byte)0x7b,(byte)0xd0,(byte)0x9e,(byte)0xae,(byte)0x36,(byte)0xe1,(byte)0x0c,(byte)0xae,(byte)0x1e}),
   8791 +        new BigInteger(1, new byte[] {(byte)0xd8,(byte)0xf3,(byte)0x5f,(byte)0x4e,(byte)0xb7,(byte)0x87,(byte)0x2b,(byte)0x2d,(byte)0xab,(byte)0x06,(byte)0x92,(byte)0xe3,(byte)0x15,(byte)0x38,(byte)0x2f,(byte)0xb0}),
   8792 +        new BigInteger(1, new byte[] {(byte)0xb0,(byte)0xb7,(byte)0x13,(byte)0x3e,(byte)0xd0,(byte)0x96,(byte)0xf9,(byte)0xb5,(byte)0x6f,(byte)0xae,(byte)0x91,(byte)0xc8,(byte)0x74,(byte)0xbd,(byte)0x3a,(byte)0xc0}),
   8793 +        new BigInteger(1, new byte[] {(byte)0x92,(byte)0x39,(byte)0xd5,(byte)0x34,(byte)0x8f,(byte)0x40,(byte)0xd1,(byte)0x69,(byte)0x5a,(byte)0x74,(byte)0x54,(byte)0x70,(byte)0xe1,(byte)0xf2,(byte)0x3f,(byte)0x43}),
   8794 +        new BigInteger(1, new byte[] {(byte)0xe9,(byte)0x02,(byte)0x8b,(byte)0x95,(byte)0x78,(byte)0xe4,(byte)0x15,(byte)0xdc,(byte)0x1a,(byte)0x71,(byte)0x0a,(byte)0x2b,(byte)0x88,(byte)0x15,(byte)0x44,(byte)0x47}),
   8795 +        new BigInteger(1, new byte[] {(byte)0xd7,(byte)0x55,(byte)0x8f,(byte)0xda,(byte)0xf5,(byte)0xf1,(byte)0x10,(byte)0x5b,(byte)0xb2,(byte)0x13,(byte)0x28,(byte)0x2b,(byte)0x70,(byte)0x77,(byte)0x29,(byte)0xa3}),
   8796 +        new BigInteger(1, new byte[] {(byte)0xf5,(byte)0xc8,(byte)0x6a,(byte)0xf3,(byte)0x61,(byte)0x62,(byte)0xf1,(byte)0x3a,(byte)0x64,(byte)0xf5,(byte)0x4f,(byte)0x6d,(byte)0xc9,(byte)0x58,(byte)0x7c,(byte)0x06}),
   8797 +        new BigInteger(1, new byte[] {(byte)0x39,(byte)0x2a,(byte)0x43,(byte)0x4f,(byte)0x0e,(byte)0x07,(byte)0xdf,(byte)0x1f,(byte)0x8a,(byte)0xa3,(byte)0x05,(byte)0xde,(byte)0x34,(byte)0xe0,(byte)0xc2,(byte)0x29}),
   8798 +        new BigInteger(1, new byte[] {(byte)0x3e,(byte)0x75,(byte)0xce,(byte)0xd4,(byte)0x6b,(byte)0x69,(byte)0x30,(byte)0x21,(byte)0x21,(byte)0x88,(byte)0x30,(byte)0xae,(byte)0x86,(byte)0xa8,(byte)0x2a,(byte)0x71})
   8799 +    ));
   8800 +
   8801 +    // From http://src.chromium.org/viewvc/chrome/branches/782/src/net/base/x509_certificate.cc?r1=98750&r2=98749&pathrev=98750
   8802 +    private static final byte[][] PUBLIC_KEY_SHA1_BLACKLIST = {
   8803 +        // C=NL, O=DigiNotar, CN=DigiNotar Root CA/emailAddress=info (a] diginotar.nl
   8804 +        {(byte)0x41, (byte)0x0f, (byte)0x36, (byte)0x36, (byte)0x32, (byte)0x58, (byte)0xf3, (byte)0x0b, (byte)0x34, (byte)0x7d,
   8805 +         (byte)0x12, (byte)0xce, (byte)0x48, (byte)0x63, (byte)0xe4, (byte)0x33, (byte)0x43, (byte)0x78, (byte)0x06, (byte)0xa8},
   8806 +        // Subject: CN=DigiNotar Cyber CA
   8807 +        // Issuer: CN=GTE CyberTrust Global Root
   8808 +        {(byte)0xba, (byte)0x3e, (byte)0x7b, (byte)0xd3, (byte)0x8c, (byte)0xd7, (byte)0xe1, (byte)0xe6, (byte)0xb9, (byte)0xcd,
   8809 +         (byte)0x4c, (byte)0x21, (byte)0x99, (byte)0x62, (byte)0xe5, (byte)0x9d, (byte)0x7a, (byte)0x2f, (byte)0x4e, (byte)0x37},
   8810 +        // Subject: CN=DigiNotar Services 1024 CA
   8811 +        // Issuer: CN=Entrust.net
   8812 +        {(byte)0xe2, (byte)0x3b, (byte)0x8d, (byte)0x10, (byte)0x5f, (byte)0x87, (byte)0x71, (byte)0x0a, (byte)0x68, (byte)0xd9,
   8813 +         (byte)0x24, (byte)0x80, (byte)0x50, (byte)0xeb, (byte)0xef, (byte)0xc6, (byte)0x27, (byte)0xbe, (byte)0x4c, (byte)0xa6},
   8814 +        // Subject: CN=DigiNotar PKIoverheid CA Organisatie - G2
   8815 +        // Issuer: CN=Staat der Nederlanden Organisatie CA - G2
   8816 +        {(byte)0x7b, (byte)0x2e, (byte)0x16, (byte)0xbc, (byte)0x39, (byte)0xbc, (byte)0xd7, (byte)0x2b, (byte)0x45, (byte)0x6e,
   8817 +         (byte)0x9f, (byte)0x05, (byte)0x5d, (byte)0x1d, (byte)0xe6, (byte)0x15, (byte)0xb7, (byte)0x49, (byte)0x45, (byte)0xdb},
   8818 +        // Subject: CN=DigiNotar PKIoverheid CA Overheid en Bedrijven
   8819 +        // Issuer: CN=Staat der Nederlanden Overheid CA
   8820 +        {(byte)0xe8, (byte)0xf9, (byte)0x12, (byte)0x00, (byte)0xc6, (byte)0x5c, (byte)0xee, (byte)0x16, (byte)0xe0, (byte)0x39,
   8821 +         (byte)0xb9, (byte)0xf8, (byte)0x83, (byte)0x84, (byte)0x16, (byte)0x61, (byte)0x63, (byte)0x5f, (byte)0x81, (byte)0xc5},
   8822 +    };
   8823 +
   8824 +    private static boolean isPublicKeyBlackListed(PublicKey publicKey) {
   8825 +        byte[] encoded = publicKey.getEncoded();
   8826 +        Digest digest = new OpenSSLDigest.SHA1();
   8827 +        digest.update(encoded, 0, encoded.length);
   8828 +        byte[] out = new byte[digest.getDigestSize()];
   8829 +        digest.doFinal(out, 0);
   8830 +
   8831 +        for (byte[] sha1 : PUBLIC_KEY_SHA1_BLACKLIST) {
   8832 +            if (Arrays.equals(out, sha1)) {
   8833 +                return true;
   8834 +            }
   8835 +        }
   8836 +        return false;
   8837 +    }
   8838 +
   8839 +    // END android-added
   8840  
   8841      public CertPathValidatorResult engineValidate(
   8842              CertPath certPath,
   8843 @@ -75,6 +140,22 @@
   8844          {
   8845              throw new CertPathValidatorException("Certification path is empty.", null, certPath, 0);
   8846          }
   8847 +        // BEGIN android-added
   8848 +        {
   8849 +            X509Certificate cert = (X509Certificate) certs.get(0);
   8850 +
   8851 +            if (cert != null) {
   8852 +                BigInteger serial = cert.getSerialNumber();
   8853 +                if (serial != null && SERIAL_BLACKLIST.contains(serial)) {
   8854 +                    // emulate CRL exception message in RFC3280CertPathUtilities.checkCRLs
   8855 +                    String message = "Certificate revocation of serial 0x" + serial.toString(16);
   8856 +                    System.out.println(message);
   8857 +                    AnnotatedException e = new AnnotatedException(message);
   8858 +                    throw new CertPathValidatorException(e.getMessage(), e, certPath, 0);
   8859 +                }
   8860 +            }
   8861 +        }
   8862 +        // END android-added
   8863  
   8864          //
   8865          // (b)
   8866 @@ -251,6 +332,15 @@
   8867  
   8868          for (index = certs.size() - 1; index >= 0; index--)
   8869          {
   8870 +            // BEGIN android-added
   8871 +            if (isPublicKeyBlackListed(workingPublicKey)) {
   8872 +                // emulate CRL exception message in RFC3280CertPathUtilities.checkCRLs
   8873 +                String message = "Certificate revocation of public key " + workingPublicKey;
   8874 +                System.out.println(message);
   8875 +                AnnotatedException e = new AnnotatedException(message);
   8876 +                throw new CertPathValidatorException(e.getMessage(), e, certPath, index);
   8877 +            }
   8878 +            // END android-added
   8879              // try
   8880              // {
   8881              //
   8882 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java
   8883 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java	2011-02-23 20:08:56.000000000 +0000
   8884 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/PKIXNameConstraintValidator.java	2011-09-08 21:28:49.000000000 +0000
   8885 @@ -1533,7 +1533,9 @@
   8886          for (Enumeration e = permitted.getObjects(); e.hasMoreElements();)
   8887          {
   8888              GeneralSubtree subtree = GeneralSubtree.getInstance(e.nextElement());
   8889 -            Integer tagNo = new Integer(subtree.getBase().getTagNo());
   8890 +            // BEGIN android-changed
   8891 +            Integer tagNo = Integer.valueOf(subtree.getBase().getTagNo());
   8892 +            // END android-changed
   8893              if (subtreesMap.get(tagNo) == null)
   8894              {
   8895                  subtreesMap.put(tagNo, new HashSet());
   8896 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/WrapCipherSpi.java bcprov-jdk16-146/org/bouncycastle/jce/provider/WrapCipherSpi.java
   8897 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/WrapCipherSpi.java	2011-02-23 20:08:56.000000000 +0000
   8898 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/WrapCipherSpi.java	2011-09-08 21:28:49.000000000 +0000
   8899 @@ -22,8 +22,10 @@
   8900  import javax.crypto.ShortBufferException;
   8901  import javax.crypto.spec.IvParameterSpec;
   8902  import javax.crypto.spec.PBEParameterSpec;
   8903 -import javax.crypto.spec.RC2ParameterSpec;
   8904 -import javax.crypto.spec.RC5ParameterSpec;
   8905 +// BEGIN android-removed
   8906 +// import javax.crypto.spec.RC2ParameterSpec;
   8907 +// import javax.crypto.spec.RC5ParameterSpec;
   8908 +// END android-removed
   8909  import javax.crypto.spec.SecretKeySpec;
   8910  
   8911  import org.bouncycastle.asn1.ASN1InputStream;
   8912 @@ -36,7 +38,9 @@
   8913  import org.bouncycastle.crypto.CipherParameters;
   8914  import org.bouncycastle.crypto.InvalidCipherTextException;
   8915  import org.bouncycastle.crypto.Wrapper;
   8916 -import org.bouncycastle.crypto.engines.RC2WrapEngine;
   8917 +// BEGIN android-removed
   8918 +// import org.bouncycastle.crypto.engines.RC2WrapEngine;
   8919 +// END android-removed
   8920  import org.bouncycastle.crypto.params.KeyParameter;
   8921  import org.bouncycastle.crypto.params.ParametersWithIV;
   8922  
   8923 @@ -50,8 +54,10 @@
   8924                                      {
   8925                                          IvParameterSpec.class,
   8926                                          PBEParameterSpec.class,
   8927 -                                        RC2ParameterSpec.class,
   8928 -                                        RC5ParameterSpec.class
   8929 +                                        // BEGIN android-removed
   8930 +                                        // RC2ParameterSpec.class,
   8931 +                                        // RC5ParameterSpec.class
   8932 +                                        // END android-removed
   8933                                      };
   8934  
   8935      protected int                     pbeType = PKCS12;
   8936 @@ -263,16 +269,19 @@
   8937          return null;
   8938      }
   8939  
   8940 +    // BEGIN android-changed
   8941 +    // added ShortBufferException to throws statement
   8942      protected int engineDoFinal(
   8943          byte[]  input,
   8944          int     inputOffset,
   8945          int     inputLen,
   8946          byte[]  output,
   8947          int     outputOffset)
   8948 -        throws IllegalBlockSizeException, BadPaddingException
   8949 +        throws IllegalBlockSizeException, BadPaddingException, ShortBufferException
   8950      {
   8951          return 0;
   8952      }
   8953 +    // END android-changed
   8954  
   8955      protected byte[] engineWrap(
   8956          Key     key)
   8957 @@ -305,7 +314,12 @@
   8958          byte[]  wrappedKey,
   8959          String  wrappedKeyAlgorithm,
   8960          int     wrappedKeyType)
   8961 -    throws InvalidKeyException
   8962 +    // BEGIN android-removed
   8963 +    // throws InvalidKeyException
   8964 +    // END android-removed
   8965 +    // BEGIN android-added
   8966 +    throws InvalidKeyException, NoSuchAlgorithmException
   8967 +    // END android-added
   8968      {
   8969          byte[] encoded;
   8970          try
   8971 @@ -356,10 +370,12 @@
   8972                  {
   8973                      privKey = new JCEECPrivateKey(in);
   8974                  }
   8975 -                else if (oid.equals(CryptoProObjectIdentifiers.gostR3410_94))
   8976 -                {
   8977 -                    privKey = new JDKGOST3410PrivateKey(in);
   8978 -                }
   8979 +                // BEGIN android-removed
   8980 +                // else if (oid.equals(CryptoProObjectIdentifiers.gostR3410_94))
   8981 +                // {
   8982 +                //     privKey = new JDKGOST3410PrivateKey(in);
   8983 +                // }
   8984 +                // END android-removed
   8985                  else if (oid.equals(X9ObjectIdentifiers.id_dsa))
   8986                  {
   8987                      privKey = new JDKDSAPrivateKey(in);
   8988 @@ -403,10 +419,12 @@
   8989              {
   8990                  throw new InvalidKeyException("Unknown key type " + e.getMessage());
   8991              }
   8992 -            catch (NoSuchAlgorithmException e)
   8993 -            {
   8994 -                throw new InvalidKeyException("Unknown key type " + e.getMessage());
   8995 -            }
   8996 +            // BEGIN android-removed
   8997 +            // catch (NoSuchAlgorithmException e)
   8998 +            // {
   8999 +            //     throw new InvalidKeyException("Unknown key type " + e.getMessage());
   9000 +            // }
   9001 +            // END android-removed
   9002              catch (InvalidKeySpecException e2)
   9003              {
   9004                  throw new InvalidKeyException("Unknown key type " + e2.getMessage());
   9005 @@ -420,12 +438,14 @@
   9006      // classes that inherit directly from us
   9007      //
   9008  
   9009 -    public static class RC2Wrap
   9010 -        extends WrapCipherSpi
   9011 -    {
   9012 -        public RC2Wrap()
   9013 -        {
   9014 -            super(new RC2WrapEngine());
   9015 -        }
   9016 -    }
   9017 +    // BEGIN android-removed
   9018 +    // public static class RC2Wrap
   9019 +    //     extends WrapCipherSpi
   9020 +    // {
   9021 +    //     public RC2Wrap()
   9022 +    //     {
   9023 +    //         super(new RC2WrapEngine());
   9024 +    //     }
   9025 +    // }
   9026 +    // END android-removed
   9027  }
   9028 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509CertificateObject.java bcprov-jdk16-146/org/bouncycastle/jce/provider/X509CertificateObject.java
   9029 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509CertificateObject.java	2011-02-23 20:08:56.000000000 +0000
   9030 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/X509CertificateObject.java	2011-09-08 21:28:49.000000000 +0000
   9031 @@ -520,12 +520,20 @@
   9032          return JDKKeyFactory.createPublicKeyFromPublicKeyInfo(c.getSubjectPublicKeyInfo());
   9033      }
   9034  
   9035 +    // BEGIN android-changed
   9036 +    private byte[] encoded;
   9037 +    // END android-changed
   9038      public byte[] getEncoded()
   9039          throws CertificateEncodingException
   9040      {
   9041          try
   9042          {
   9043 -            return c.getEncoded(ASN1Encodable.DER);
   9044 +            // BEGIN android-changed
   9045 +            if (encoded == null) {
   9046 +                encoded = c.getEncoded(ASN1Encodable.DER);
   9047 +            }
   9048 +            return encoded;
   9049 +            // END android-changed
   9050          }
   9051          catch (IOException e)
   9052          {
   9053 @@ -711,7 +719,7 @@
   9054      {
   9055          Signature   signature;
   9056          String      sigName = X509SignatureUtil.getSignatureName(c.getSignatureAlgorithm());
   9057 -        
   9058 +
   9059          try
   9060          {
   9061              signature = Signature.getInstance(sigName, BouncyCastleProvider.PROVIDER_NAME);
   9062 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java bcprov-jdk16-146/org/bouncycastle/jce/provider/X509SignatureUtil.java
   9063 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/X509SignatureUtil.java	2011-02-23 20:08:56.000000000 +0000
   9064 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/X509SignatureUtil.java	2011-09-08 21:28:49.000000000 +0000
   9065 @@ -25,7 +25,9 @@
   9066  
   9067  class X509SignatureUtil
   9068  {
   9069 -    private static final ASN1Null       derNull = new DERNull();
   9070 +    // BEGIN android-changed
   9071 +    private static final ASN1Null       derNull = DERNull.INSTANCE;
   9072 +    // END android-changed
   9073      
   9074      static void setSignatureParameters(
   9075          Signature signature,
   9076 @@ -66,12 +68,14 @@
   9077          
   9078          if (params != null && !derNull.equals(params))
   9079          {
   9080 -            if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
   9081 -            {
   9082 -                RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
   9083 -                
   9084 -                return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1";
   9085 -            }
   9086 +            // BEGIN android-removed
   9087 +            // if (sigAlgId.getObjectId().equals(PKCSObjectIdentifiers.id_RSASSA_PSS))
   9088 +            // {
   9089 +            //     RSASSAPSSparams rsaParams = RSASSAPSSparams.getInstance(params);
   9090 +            //
   9091 +            //     return getDigestAlgName(rsaParams.getHashAlgorithm().getObjectId()) + "withRSAandMGF1";
   9092 +            // }
   9093 +            // END android-removed
   9094              if (sigAlgId.getObjectId().equals(X9ObjectIdentifiers.ecdsa_with_SHA2))
   9095              {
   9096                  ASN1Sequence ecDsaParams = ASN1Sequence.getInstance(params);
   9097 @@ -98,10 +102,12 @@
   9098          {
   9099              return "SHA1";
   9100          }
   9101 -        else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
   9102 -        {
   9103 -            return "SHA224";
   9104 -        }
   9105 +        // BEGIN android-removed
   9106 +        // else if (NISTObjectIdentifiers.id_sha224.equals(digestAlgOID))
   9107 +        // {
   9108 +        //     return "SHA224";
   9109 +        // }
   9110 +        // END android-removed
   9111          else if (NISTObjectIdentifiers.id_sha256.equals(digestAlgOID))
   9112          {
   9113              return "SHA256";
   9114 @@ -114,22 +120,24 @@
   9115          {
   9116              return "SHA512";
   9117          }
   9118 -        else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
   9119 -        {
   9120 -            return "RIPEMD128";
   9121 -        }
   9122 -        else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
   9123 -        {
   9124 -            return "RIPEMD160";
   9125 -        }
   9126 -        else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
   9127 -        {
   9128 -            return "RIPEMD256";
   9129 -        }
   9130 -        else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
   9131 -        {
   9132 -            return "GOST3411";
   9133 -        }
   9134 +        // BEGIN android-removed
   9135 +        // else if (TeleTrusTObjectIdentifiers.ripemd128.equals(digestAlgOID))
   9136 +        // {
   9137 +        //     return "RIPEMD128";
   9138 +        // }
   9139 +        // else if (TeleTrusTObjectIdentifiers.ripemd160.equals(digestAlgOID))
   9140 +        // {
   9141 +        //     return "RIPEMD160";
   9142 +        // }
   9143 +        // else if (TeleTrusTObjectIdentifiers.ripemd256.equals(digestAlgOID))
   9144 +        // {
   9145 +        //     return "RIPEMD256";
   9146 +        // }
   9147 +        // else if (CryptoProObjectIdentifiers.gostR3411.equals(digestAlgOID))
   9148 +        // {
   9149 +        //     return "GOST3411";
   9150 +        // }
   9151 +        // END android-removed
   9152          else
   9153          {
   9154              return digestAlgOID.getId();            
   9155 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/EC.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/EC.java
   9156 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/EC.java	2011-02-23 20:08:56.000000000 +0000
   9157 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/EC.java	2011-09-08 21:28:49.000000000 +0000
   9158 @@ -4,8 +4,10 @@
   9159  
   9160  import org.bouncycastle.asn1.DERObjectIdentifier;
   9161  import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers;
   9162 -import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
   9163 -import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
   9164 +// BEGIN android-removed
   9165 +// import org.bouncycastle.asn1.eac.EACObjectIdentifiers;
   9166 +// import org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers;
   9167 +// END android-removed
   9168  import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
   9169  
   9170  public class EC
   9171 @@ -16,39 +18,49 @@
   9172          public Mappings()
   9173          {
   9174              put("KeyAgreement.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DH");
   9175 -            put("KeyAgreement.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHC");
   9176 -            put("KeyAgreement.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQV");
   9177 -            put("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHwithSHA1KDF");
   9178 -            put("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQVwithSHA1KDF");
   9179 +            // BEGIN android-removed
   9180 +            // put("KeyAgreement.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHC");
   9181 +            // put("KeyAgreement.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQV");
   9182 +            // put("KeyAgreement." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$DHwithSHA1KDF");
   9183 +            // put("KeyAgreement." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "org.bouncycastle.jce.provider.asymmetric.ec.KeyAgreement$MQVwithSHA1KDF");
   9184 +            // END android-removed
   9185  
   9186              put("KeyFactory.EC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$EC");
   9187 -            put("KeyFactory.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDSA");
   9188 -            put("KeyFactory.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDH");
   9189 -            put("KeyFactory.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDHC");
   9190 -            put("KeyFactory.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECMQV");
   9191 +            // BEGIN android-removed
   9192 +            // put("KeyFactory.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDSA");
   9193 +            // put("KeyFactory.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDH");
   9194 +            // put("KeyFactory.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECDHC");
   9195 +            // put("KeyFactory.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECMQV");
   9196 +            // END android-removed
   9197              put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.id_ecPublicKey, "EC");
   9198              // TODO Should this be an alias for ECDH?
   9199              put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC");
   9200 -            put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
   9201 -
   9202 -            put("KeyFactory.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECGOST3410");
   9203 -            put("Alg.Alias.KeyFactory.GOST-3410-2001", "ECGOST3410");
   9204 -            put("Alg.Alias.KeyFactory.ECGOST-3410", "ECGOST3410");
   9205 -            put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_2001, "ECGOST3410");
   9206 +            // BEGIN android-removed
   9207 +            // put("Alg.Alias.KeyFactory." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
   9208 +            //
   9209 +            // put("KeyFactory.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyFactory$ECGOST3410");
   9210 +            // put("Alg.Alias.KeyFactory.GOST-3410-2001", "ECGOST3410");
   9211 +            // put("Alg.Alias.KeyFactory.ECGOST-3410", "ECGOST3410");
   9212 +            // put("Alg.Alias.KeyFactory." + CryptoProObjectIdentifiers.gostR3410_2001, "ECGOST3410");
   9213 +            // END android-removed
   9214  
   9215              put("KeyPairGenerator.EC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$EC");
   9216 -            put("KeyPairGenerator.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDSA");
   9217 -            put("KeyPairGenerator.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
   9218 -            put("KeyPairGenerator.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDHC");
   9219 -            put("KeyPairGenerator.ECIES", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
   9220 -            put("KeyPairGenerator.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECMQV");
   9221 +            // BEGIN android-removed
   9222 +            // put("KeyPairGenerator.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDSA");
   9223 +            // put("KeyPairGenerator.ECDH", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
   9224 +            // put("KeyPairGenerator.ECDHC", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDHC");
   9225 +            // put("KeyPairGenerator.ECIES", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECDH");
   9226 +            // put("KeyPairGenerator.ECMQV", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECMQV");
   9227 +            // END android-removed
   9228              // TODO Should this be an alias for ECDH?
   9229              put("Alg.Alias.KeyPairGenerator." + X9ObjectIdentifiers.dhSinglePass_stdDH_sha1kdf_scheme, "EC");
   9230 -            put("Alg.Alias.KeyPairGenerator." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
   9231 -
   9232 -            put("KeyPairGenerator.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECGOST3410");
   9233 -            put("Alg.Alias.KeyPairGenerator.ECGOST-3410", "ECGOST3410");
   9234 -            put("Alg.Alias.KeyPairGenerator.GOST-3410-2001", "ECGOST3410");
   9235 +            // BEGIN android-removed
   9236 +            // put("Alg.Alias.KeyPairGenerator." + X9ObjectIdentifiers.mqvSinglePass_sha1kdf_scheme, "ECMQV");
   9237 +            //
   9238 +            // put("KeyPairGenerator.ECGOST3410", "org.bouncycastle.jce.provider.asymmetric.ec.KeyPairGenerator$ECGOST3410");
   9239 +            // put("Alg.Alias.KeyPairGenerator.ECGOST-3410", "ECGOST3410");
   9240 +            // put("Alg.Alias.KeyPairGenerator.GOST-3410-2001", "ECGOST3410");
   9241 +            // END android-removed
   9242  
   9243              put("Signature.ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA");
   9244              put("Signature.NONEwithECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSAnone");
   9245 @@ -60,23 +72,27 @@
   9246              put("Alg.Alias.Signature.SHA1WithECDSA", "ECDSA");
   9247              put("Alg.Alias.Signature.ECDSAWithSHA1", "ECDSA");
   9248              put("Alg.Alias.Signature.1.2.840.10045.4.1", "ECDSA");
   9249 -            put("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
   9250 -
   9251 -            addSignatureAlgorithm("SHA224", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224);
   9252 +            // BEGIN android-removed
   9253 +            // put("Alg.Alias.Signature." + TeleTrusTObjectIdentifiers.ecSignWithSha1, "ECDSA");
   9254 +            //
   9255 +            // addSignatureAlgorithm("SHA224", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA224", X9ObjectIdentifiers.ecdsa_with_SHA224);
   9256 +            // END android-removed
   9257              addSignatureAlgorithm("SHA256", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA256", X9ObjectIdentifiers.ecdsa_with_SHA256);
   9258              addSignatureAlgorithm("SHA384", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA384", X9ObjectIdentifiers.ecdsa_with_SHA384);
   9259              addSignatureAlgorithm("SHA512", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA512", X9ObjectIdentifiers.ecdsa_with_SHA512);
   9260 -            addSignatureAlgorithm("RIPEMD160", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
   9261 -
   9262 -            put("Signature.SHA1WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR");
   9263 -            put("Signature.SHA224WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR224");
   9264 -            put("Signature.SHA256WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR256");
   9265 -            put("Signature.SHA384WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR384");
   9266 -            put("Signature.SHA512WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR512");
   9267 -
   9268 -            addSignatureAlgorithm("SHA1", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
   9269 -            addSignatureAlgorithm("SHA224", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
   9270 -            addSignatureAlgorithm("SHA256", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
   9271 +            // BEGIN android-removed
   9272 +            // addSignatureAlgorithm("RIPEMD160", "ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSARipeMD160",TeleTrusTObjectIdentifiers.ecSignWithRipemd160);
   9273 +            //
   9274 +            // put("Signature.SHA1WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR");
   9275 +            // put("Signature.SHA224WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR224");
   9276 +            // put("Signature.SHA256WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR256");
   9277 +            // put("Signature.SHA384WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR384");
   9278 +            // put("Signature.SHA512WITHECNR", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecNR512");
   9279 +            //
   9280 +            // addSignatureAlgorithm("SHA1", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA", EACObjectIdentifiers.id_TA_ECDSA_SHA_1);
   9281 +            // addSignatureAlgorithm("SHA224", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA224", EACObjectIdentifiers.id_TA_ECDSA_SHA_224);
   9282 +            // addSignatureAlgorithm("SHA256", "CVC-ECDSA", "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecCVCDSA256", EACObjectIdentifiers.id_TA_ECDSA_SHA_256);
   9283 +            // END android-removed
   9284          }
   9285  
   9286          private void addSignatureAlgorithm(
   9287 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java
   9288 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java	2011-02-23 20:08:56.000000000 +0000
   9289 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/ECUtil.java	2011-09-08 21:28:49.000000000 +0000
   9290 @@ -1,10 +1,14 @@
   9291  package org.bouncycastle.jce.provider.asymmetric.ec;
   9292  
   9293  import org.bouncycastle.asn1.DERObjectIdentifier;
   9294 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   9295 +// BEGIN android-removed
   9296 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   9297 +// END android-removed
   9298  import org.bouncycastle.asn1.nist.NISTNamedCurves;
   9299  import org.bouncycastle.asn1.sec.SECNamedCurves;
   9300 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
   9301 +// BEGIN android-removed
   9302 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
   9303 +// END android-removed
   9304  import org.bouncycastle.asn1.x9.X962NamedCurves;
   9305  import org.bouncycastle.asn1.x9.X9ECParameters;
   9306  import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
   9307 @@ -167,14 +171,16 @@
   9308              {
   9309                  oid = NISTNamedCurves.getOID(name);
   9310              }
   9311 -            if (oid == null)
   9312 -            {
   9313 -                oid = TeleTrusTNamedCurves.getOID(name);
   9314 -            }
   9315 -            if (oid == null)
   9316 -            {
   9317 -                oid = ECGOST3410NamedCurves.getOID(name);
   9318 -            }
   9319 +            // BEGIN android-removed
   9320 +            // if (oid == null)
   9321 +            // {
   9322 +            //     oid = TeleTrusTNamedCurves.getOID(name);
   9323 +            // }
   9324 +            // if (oid == null)
   9325 +            // {
   9326 +            //     oid = ECGOST3410NamedCurves.getOID(name);
   9327 +            // }
   9328 +            // END android-removed
   9329          }
   9330  
   9331          return oid;
   9332 @@ -192,10 +198,12 @@
   9333              {
   9334                  params = NISTNamedCurves.getByOID(oid);
   9335              }
   9336 -            if (params == null)
   9337 -            {
   9338 -                params = TeleTrusTNamedCurves.getByOID(oid);
   9339 -            }
   9340 +            // BEGIN android-removed
   9341 +            // if (params == null)
   9342 +            // {
   9343 +            //     params = TeleTrusTNamedCurves.getByOID(oid);
   9344 +            // }
   9345 +            // END android-removed
   9346          }
   9347  
   9348          return params;
   9349 @@ -213,14 +221,16 @@
   9350              {
   9351                  name = NISTNamedCurves.getName(oid);
   9352              }
   9353 -            if (name == null)
   9354 -            {
   9355 -                name = TeleTrusTNamedCurves.getName(oid);
   9356 -            }
   9357 -            if (name == null)
   9358 -            {
   9359 -                name = ECGOST3410NamedCurves.getName(oid);
   9360 -            }
   9361 +            // BEGIN android-removed
   9362 +            // if (name == null)
   9363 +            // {
   9364 +            //     name = TeleTrusTNamedCurves.getName(oid);
   9365 +            // }
   9366 +            // if (name == null)
   9367 +            // {
   9368 +            //     name = ECGOST3410NamedCurves.getName(oid);
   9369 +            // }
   9370 +            // END android-removed
   9371          }
   9372  
   9373          return name;
   9374 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java
   9375 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java	2011-02-23 20:08:56.000000000 +0000
   9376 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyAgreement.java	2011-09-08 21:28:49.000000000 +0000
   9377 @@ -24,20 +24,26 @@
   9378  import org.bouncycastle.crypto.CipherParameters;
   9379  import org.bouncycastle.crypto.DerivationFunction;
   9380  import org.bouncycastle.crypto.agreement.ECDHBasicAgreement;
   9381 -import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement;
   9382 -import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement;
   9383 -import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters;
   9384 -import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator;
   9385 +// BEGIN android-removed
   9386 +// import org.bouncycastle.crypto.agreement.ECDHCBasicAgreement;
   9387 +// import org.bouncycastle.crypto.agreement.ECMQVBasicAgreement;
   9388 +// import org.bouncycastle.crypto.agreement.kdf.DHKDFParameters;
   9389 +// import org.bouncycastle.crypto.agreement.kdf.ECDHKEKGenerator;
   9390 +// END android-removed
   9391  import org.bouncycastle.crypto.digests.SHA1Digest;
   9392  import org.bouncycastle.crypto.params.ECDomainParameters;
   9393  import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
   9394  import org.bouncycastle.crypto.params.ECPublicKeyParameters;
   9395 -import org.bouncycastle.crypto.params.MQVPrivateParameters;
   9396 -import org.bouncycastle.crypto.params.MQVPublicParameters;
   9397 +// BEGIN android-removed
   9398 +// import org.bouncycastle.crypto.params.MQVPrivateParameters;
   9399 +// import org.bouncycastle.crypto.params.MQVPublicParameters;
   9400 +// END android-removed
   9401  import org.bouncycastle.jce.interfaces.ECPrivateKey;
   9402  import org.bouncycastle.jce.interfaces.ECPublicKey;
   9403 -import org.bouncycastle.jce.interfaces.MQVPrivateKey;
   9404 -import org.bouncycastle.jce.interfaces.MQVPublicKey;
   9405 +// BEGIN android-removed
   9406 +// import org.bouncycastle.jce.interfaces.MQVPrivateKey;
   9407 +// import org.bouncycastle.jce.interfaces.MQVPublicKey;
   9408 +// END android-removed
   9409  
   9410  /**
   9411   * Diffie-Hellman key agreement using elliptic curve keys, ala IEEE P1363
   9412 @@ -53,9 +59,11 @@
   9413  
   9414      static
   9415      {
   9416 -        Integer i128 = new Integer(128);
   9417 -        Integer i192 = new Integer(192);
   9418 -        Integer i256 = new Integer(256);
   9419 +        // BEGIN android-changed
   9420 +        Integer i128 = Integer.valueOf(128);
   9421 +        Integer i192 = Integer.valueOf(192);
   9422 +        Integer i256 = Integer.valueOf(256);
   9423 +        // END android-changed
   9424  
   9425          algorithms.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), i128);
   9426          algorithms.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), i192);
   9427 @@ -70,7 +78,9 @@
   9428      private BigInteger             result;
   9429      private ECDomainParameters     parameters;
   9430      private BasicAgreement         agreement;
   9431 -    private DerivationFunction     kdf;
   9432 +    // BEGIN android-removed
   9433 +    // private DerivationFunction     kdf;
   9434 +    // END android-removed
   9435  
   9436      private byte[] bigIntToBytes(
   9437          BigInteger    r)
   9438 @@ -85,7 +95,9 @@
   9439      {
   9440          this.kaAlgorithm = kaAlgorithm;
   9441          this.agreement = agreement;
   9442 -        this.kdf = kdf;
   9443 +        // BEGIN android-removed
   9444 +        // this.kdf = kdf;
   9445 +        // END android-removed
   9446      }
   9447  
   9448      protected Key engineDoPhase(
   9449 @@ -104,25 +116,27 @@
   9450          }
   9451  
   9452          CipherParameters pubKey;        
   9453 -        if (agreement instanceof ECMQVBasicAgreement)
   9454 -        {
   9455 -            if (!(key instanceof MQVPublicKey))
   9456 -            {
   9457 -                throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
   9458 -                    + getSimpleName(MQVPublicKey.class) + " for doPhase");
   9459 -            }
   9460 -
   9461 -            MQVPublicKey mqvPubKey = (MQVPublicKey)key;
   9462 -            ECPublicKeyParameters staticKey = (ECPublicKeyParameters)
   9463 -                ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey());
   9464 -            ECPublicKeyParameters ephemKey = (ECPublicKeyParameters)
   9465 -                ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey());
   9466 -
   9467 -            pubKey = new MQVPublicParameters(staticKey, ephemKey);
   9468 -
   9469 -            // TODO Validate that all the keys are using the same parameters?
   9470 -        }
   9471 -        else
   9472 +        // BEGIN android-removed
   9473 +        // if (agreement instanceof ECMQVBasicAgreement)
   9474 +        // {
   9475 +        //     if (!(key instanceof MQVPublicKey))
   9476 +        //     {
   9477 +        //         throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
   9478 +        //             + getSimpleName(MQVPublicKey.class) + " for doPhase");
   9479 +        //     }
   9480 +        //
   9481 +        //     MQVPublicKey mqvPubKey = (MQVPublicKey)key;
   9482 +        //     ECPublicKeyParameters staticKey = (ECPublicKeyParameters)
   9483 +        //         ECUtil.generatePublicKeyParameter(mqvPubKey.getStaticKey());
   9484 +        //     ECPublicKeyParameters ephemKey = (ECPublicKeyParameters)
   9485 +        //         ECUtil.generatePublicKeyParameter(mqvPubKey.getEphemeralKey());
   9486 +        //
   9487 +        //     pubKey = new MQVPublicParameters(staticKey, ephemKey);
   9488 +        //
   9489 +        //     // TODO Validate that all the keys are using the same parameters?
   9490 +        // }
   9491 +        // else
   9492 +        // END android-removed
   9493          {
   9494              if (!(key instanceof ECPublicKey))
   9495              {
   9496 @@ -143,11 +157,13 @@
   9497      protected byte[] engineGenerateSecret()
   9498          throws IllegalStateException
   9499      {
   9500 -        if (kdf != null)
   9501 -        {
   9502 -            throw new UnsupportedOperationException(
   9503 -                "KDF can only be used when algorithm is known");
   9504 -        }
   9505 +        // BEGIN android-removed
   9506 +        // if (kdf != null)
   9507 +        // {
   9508 +        //     throw new UnsupportedOperationException(
   9509 +        //         "KDF can only be used when algorithm is known");
   9510 +        // }
   9511 +        // END android-removed
   9512  
   9513          return bigIntToBytes(result);
   9514      }
   9515 @@ -175,23 +191,25 @@
   9516      {
   9517          byte[] secret = bigIntToBytes(result);
   9518  
   9519 -        if (kdf != null)
   9520 -        {
   9521 -            if (!algorithms.containsKey(algorithm))
   9522 -            {
   9523 -                throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm);
   9524 -            }
   9525 -            
   9526 -            int    keySize = ((Integer)algorithms.get(algorithm)).intValue();
   9527 -
   9528 -            DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret);
   9529 -
   9530 -            byte[] keyBytes = new byte[keySize / 8];
   9531 -            kdf.init(params);
   9532 -            kdf.generateBytes(keyBytes, 0, keyBytes.length);
   9533 -            secret = keyBytes;
   9534 -        }
   9535 -        else
   9536 +        // BEGIN android-removed
   9537 +        // if (kdf != null)
   9538 +        // {
   9539 +        //     if (!algorithms.containsKey(algorithm))
   9540 +        //     {
   9541 +        //         throw new NoSuchAlgorithmException("unknown algorithm encountered: " + algorithm);
   9542 +        //     }
   9543 +        //  
   9544 +        //     int    keySize = ((Integer)algorithms.get(algorithm)).intValue();
   9545 +        //
   9546 +        //     DHKDFParameters params = new DHKDFParameters(new DERObjectIdentifier(algorithm), keySize, secret);
   9547 +        //
   9548 +        //     byte[] keyBytes = new byte[keySize / 8];
   9549 +        //     kdf.init(params);
   9550 +        //     kdf.generateBytes(keyBytes, 0, keyBytes.length);
   9551 +        //     secret = keyBytes;
   9552 +        // }
   9553 +        // else
   9554 +        // END android-removed
   9555          {
   9556              // TODO Should we be ensuring the key is the right length?
   9557          }
   9558 @@ -219,35 +237,37 @@
   9559      private void initFromKey(Key key)
   9560          throws InvalidKeyException
   9561      {
   9562 -        if (agreement instanceof ECMQVBasicAgreement)
   9563 -        {
   9564 -            if (!(key instanceof MQVPrivateKey))
   9565 -            {
   9566 -                throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
   9567 -                    + getSimpleName(MQVPrivateKey.class) + " for initialisation");
   9568 -            }
   9569 -
   9570 -            MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key;
   9571 -            ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters)
   9572 -                ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey());
   9573 -            ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters)
   9574 -                ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey());
   9575 -
   9576 -            ECPublicKeyParameters ephemPubKey = null;
   9577 -            if (mqvPrivKey.getEphemeralPublicKey() != null)
   9578 -            {
   9579 -                ephemPubKey = (ECPublicKeyParameters)
   9580 -                    ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey());
   9581 -            }
   9582 -
   9583 -            MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey);
   9584 -            this.parameters = staticPrivKey.getParameters();
   9585 -
   9586 -            // TODO Validate that all the keys are using the same parameters?
   9587 -
   9588 -            agreement.init(localParams);
   9589 -        }
   9590 -        else
   9591 +        // BEGIN android-removed
   9592 +        // if (agreement instanceof ECMQVBasicAgreement)
   9593 +        // {
   9594 +        //     if (!(key instanceof MQVPrivateKey))
   9595 +        //     {
   9596 +        //         throw new InvalidKeyException(kaAlgorithm + " key agreement requires "
   9597 +        //             + getSimpleName(MQVPrivateKey.class) + " for initialisation");
   9598 +        //     }
   9599 +        //
   9600 +        //     MQVPrivateKey mqvPrivKey = (MQVPrivateKey)key;
   9601 +        //     ECPrivateKeyParameters staticPrivKey = (ECPrivateKeyParameters)
   9602 +        //         ECUtil.generatePrivateKeyParameter(mqvPrivKey.getStaticPrivateKey());
   9603 +        //     ECPrivateKeyParameters ephemPrivKey = (ECPrivateKeyParameters)
   9604 +        //         ECUtil.generatePrivateKeyParameter(mqvPrivKey.getEphemeralPrivateKey());
   9605 +        //
   9606 +        //     ECPublicKeyParameters ephemPubKey = null;
   9607 +        //     if (mqvPrivKey.getEphemeralPublicKey() != null)
   9608 +        //     {
   9609 +        //         ephemPubKey = (ECPublicKeyParameters)
   9610 +        //             ECUtil.generatePublicKeyParameter(mqvPrivKey.getEphemeralPublicKey());
   9611 +        //     }
   9612 +        //
   9613 +        //     MQVPrivateParameters localParams = new MQVPrivateParameters(staticPrivKey, ephemPrivKey, ephemPubKey);
   9614 +        //     this.parameters = staticPrivKey.getParameters();
   9615 +        //
   9616 +        //     // TODO Validate that all the keys are using the same parameters?
   9617 +        //
   9618 +        //     agreement.init(localParams);
   9619 +        // }
   9620 +        // else
   9621 +        // END android-removed
   9622          {
   9623              if (!(key instanceof ECPrivateKey))
   9624              {
   9625 @@ -278,39 +298,41 @@
   9626          }
   9627      }
   9628  
   9629 -    public static class DHC
   9630 -        extends KeyAgreement
   9631 -    {
   9632 -        public DHC()
   9633 -        {
   9634 -            super("ECDHC", new ECDHCBasicAgreement(), null);
   9635 -        }
   9636 -    }
   9637 -
   9638 -    public static class MQV
   9639 -        extends KeyAgreement
   9640 -    {
   9641 -        public MQV()
   9642 -        {
   9643 -            super("ECMQV", new ECMQVBasicAgreement(), null);
   9644 -        }
   9645 -    }
   9646 -
   9647 -    public static class DHwithSHA1KDF
   9648 -        extends KeyAgreement
   9649 -    {
   9650 -        public DHwithSHA1KDF()
   9651 -        {
   9652 -            super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
   9653 -        }
   9654 -    }
   9655 -
   9656 -    public static class MQVwithSHA1KDF
   9657 -        extends KeyAgreement
   9658 -    {
   9659 -        public MQVwithSHA1KDF()
   9660 -        {
   9661 -            super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
   9662 -        }
   9663 -    }
   9664 +    // BEGIN android-removed
   9665 +    // public static class DHC
   9666 +    //     extends KeyAgreement
   9667 +    // {
   9668 +    //     public DHC()
   9669 +    //     {
   9670 +    //         super("ECDHC", new ECDHCBasicAgreement(), null);
   9671 +    //     }
   9672 +    // }
   9673 +    //
   9674 +    // public static class MQV
   9675 +    //     extends KeyAgreement
   9676 +    // {
   9677 +    //     public MQV()
   9678 +    //     {
   9679 +    //         super("ECMQV", new ECMQVBasicAgreement(), null);
   9680 +    //     }
   9681 +    // }
   9682 +    //
   9683 +    // public static class DHwithSHA1KDF
   9684 +    //     extends KeyAgreement
   9685 +    // {
   9686 +    //     public DHwithSHA1KDF()
   9687 +    //     {
   9688 +    //         super("ECDHwithSHA1KDF", new ECDHBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
   9689 +    //     }
   9690 +    // }
   9691 +    //
   9692 +    // public static class MQVwithSHA1KDF
   9693 +    //     extends KeyAgreement
   9694 +    // {
   9695 +    //     public MQVwithSHA1KDF()
   9696 +    //     {
   9697 +    //         super("ECMQVwithSHA1KDF", new ECMQVBasicAgreement(), new ECDHKEKGenerator(new SHA1Digest()));
   9698 +    //     }
   9699 +    // }
   9700 +    // END android-removed
   9701  }
   9702 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java
   9703 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java	2011-02-23 20:08:56.000000000 +0000
   9704 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/KeyPairGenerator.java	2011-09-08 21:28:49.000000000 +0000
   9705 @@ -10,10 +10,14 @@
   9706  import java.util.Hashtable;
   9707  
   9708  import org.bouncycastle.asn1.DERObjectIdentifier;
   9709 -import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   9710 +// BEGIN android-removed
   9711 +// import org.bouncycastle.asn1.cryptopro.ECGOST3410NamedCurves;
   9712 +// END android-removed
   9713  import org.bouncycastle.asn1.nist.NISTNamedCurves;
   9714  import org.bouncycastle.asn1.sec.SECNamedCurves;
   9715 -import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
   9716 +// BEGIN android-removed
   9717 +// import org.bouncycastle.asn1.teletrust.TeleTrusTNamedCurves;
   9718 +// END android-removed
   9719  import org.bouncycastle.asn1.x9.X962NamedCurves;
   9720  import org.bouncycastle.asn1.x9.X9ECParameters;
   9721  import org.bouncycastle.crypto.AsymmetricCipherKeyPair;
   9722 @@ -56,13 +60,15 @@
   9723          static {
   9724              ecParameters = new Hashtable();
   9725  
   9726 -            ecParameters.put(new Integer(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192
   9727 -            ecParameters.put(new Integer(239), new ECGenParameterSpec("prime239v1"));
   9728 -            ecParameters.put(new Integer(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256
   9729 -
   9730 -            ecParameters.put(new Integer(224), new ECGenParameterSpec("P-224"));
   9731 -            ecParameters.put(new Integer(384), new ECGenParameterSpec("P-384"));
   9732 -            ecParameters.put(new Integer(521), new ECGenParameterSpec("P-521"));
   9733 +            // BEGIN android-changed
   9734 +            ecParameters.put(Integer.valueOf(192), new ECGenParameterSpec("prime192v1")); // a.k.a P-192
   9735 +            ecParameters.put(Integer.valueOf(239), new ECGenParameterSpec("prime239v1"));
   9736 +            ecParameters.put(Integer.valueOf(256), new ECGenParameterSpec("prime256v1")); // a.k.a P-256
   9737 +
   9738 +            ecParameters.put(Integer.valueOf(224), new ECGenParameterSpec("P-224"));
   9739 +            ecParameters.put(Integer.valueOf(384), new ECGenParameterSpec("P-384"));
   9740 +            ecParameters.put(Integer.valueOf(521), new ECGenParameterSpec("P-521"));
   9741 +            // END android-changed
   9742          }
   9743  
   9744          public EC()
   9745 @@ -83,8 +89,16 @@
   9746              SecureRandom    random)
   9747          {
   9748              this.strength = strength;
   9749 +            // BEGIN android-added
   9750 +            if (random != null) {
   9751 +            // END android-added
   9752              this.random = random;
   9753 -            this.ecParams = ecParameters.get(new Integer(strength));
   9754 +            // BEGIN android-added
   9755 +            }
   9756 +            // END android-added
   9757 +            // BEGIN android-changed
   9758 +            this.ecParams = ecParameters.get(Integer.valueOf(strength));
   9759 +            // END android-changed
   9760  
   9761              if (ecParams != null)
   9762              {
   9763 @@ -108,6 +122,11 @@
   9764              SecureRandom            random)
   9765              throws InvalidAlgorithmParameterException
   9766          {
   9767 +            // BEGIN android-added
   9768 +            if (random == null) {
   9769 +                random = this.random;
   9770 +            }
   9771 +            // END android-added
   9772              if (params instanceof ECParameterSpec)
   9773              {
   9774                  ECParameterSpec p = (ECParameterSpec)params;
   9775 @@ -135,23 +154,25 @@
   9776              {
   9777                  final String curveName = ((ECGenParameterSpec)params).getName();
   9778  
   9779 -                if (this.algorithm.equals("ECGOST3410"))
   9780 -                {
   9781 -                    ECDomainParameters  ecP = ECGOST3410NamedCurves.getByName(curveName);
   9782 -                    if (ecP == null)
   9783 -                    {
   9784 -                        throw new InvalidAlgorithmParameterException("unknown curve name: " + curveName);
   9785 -                    }
   9786 -
   9787 -                    this.ecParams = new ECNamedCurveSpec(
   9788 -                                                    curveName,
   9789 -                                                    ecP.getCurve(),
   9790 -                                                    ecP.getG(),
   9791 -                                                    ecP.getN(),
   9792 -                                                    ecP.getH(),
   9793 -                                                    ecP.getSeed());
   9794 -                }
   9795 -                else
   9796 +                // BEGIN android-removed
   9797 +                // if (this.algorithm.equals("ECGOST3410"))
   9798 +                // {
   9799 +                //     ECDomainParameters  ecP = ECGOST3410NamedCurves.getByName(curveName);
   9800 +                //     if (ecP == null)
   9801 +                //     {
   9802 +                //         throw new InvalidAlgorithmParameterException("unknown curve name: " + curveName);
   9803 +                //     }
   9804 +                //
   9805 +                //     this.ecParams = new ECNamedCurveSpec(
   9806 +                //                                     curveName,
   9807 +                //                                     ecP.getCurve(),
   9808 +                //                                     ecP.getG(),
   9809 +                //                                     ecP.getN(),
   9810 +                //                                     ecP.getH(),
   9811 +                //                                     ecP.getSeed());
   9812 +                // }
   9813 +                // else
   9814 +                // END android-removed
   9815                  {
   9816                      X9ECParameters  ecP = X962NamedCurves.getByName(curveName);
   9817                      if (ecP == null)
   9818 @@ -161,10 +182,12 @@
   9819                          {
   9820                              ecP = NISTNamedCurves.getByName(curveName);
   9821                          }
   9822 -                        if (ecP == null)
   9823 -                        {
   9824 -                            ecP = TeleTrusTNamedCurves.getByName(curveName);
   9825 -                        }
   9826 +                        // BEGIN android-removed
   9827 +                        // if (ecP == null)
   9828 +                        // {
   9829 +                        //     ecP = TeleTrusTNamedCurves.getByName(curveName);
   9830 +                        // }
   9831 +                        // END android-removed
   9832                          if (ecP == null)
   9833                          {
   9834                              // See if it's actually an OID string (SunJSSE ServerHandshaker setupEphemeralECDHKeys bug)
   9835 @@ -180,10 +203,12 @@
   9836                                  {
   9837                                      ecP = NISTNamedCurves.getByOID(oid);
   9838                                  }
   9839 -                                if (ecP == null)
   9840 -                                {
   9841 -                                    ecP = TeleTrusTNamedCurves.getByOID(oid);
   9842 -                                }
   9843 +                                // BEGIN android-removed
   9844 +                                // if (ecP == null)
   9845 +                                // {
   9846 +                                //     ecP = TeleTrusTNamedCurves.getByOID(oid);
   9847 +                                // }
   9848 +                                // END android-removed
   9849                                  if (ecP == null)
   9850                                  {
   9851                                      throw new InvalidAlgorithmParameterException("unknown curve OID: " + curveName);
   9852 @@ -239,7 +264,15 @@
   9853          {
   9854              if (!initialised)
   9855              {
   9856 -                throw new IllegalStateException("EC Key Pair Generator not initialised");
   9857 +                // BEGIN android-removed
   9858 +                // throw new IllegalStateException("EC Key Pair Generator not initialised");
   9859 +                // END android-removed
   9860 +                // BEGIN android-added
   9861 +                /*
   9862 +                 * KeyPairGenerator documentation says that a default initialization must be provided
   9863 +                 */
   9864 +                initialize(192, random);
   9865 +                // END android-added
   9866              }
   9867  
   9868              AsymmetricCipherKeyPair     pair = engine.generateKeyPair();
   9869 @@ -279,14 +312,16 @@
   9870          }
   9871      }
   9872  
   9873 -    public static class ECGOST3410
   9874 -        extends EC
   9875 -    {
   9876 -        public ECGOST3410()
   9877 -        {
   9878 -            super("ECGOST3410");
   9879 -        }
   9880 -    }
   9881 +    // BEGIN android-removed
   9882 +    // public static class ECGOST3410
   9883 +    //     extends EC
   9884 +    // {
   9885 +    //     public ECGOST3410()
   9886 +    //     {
   9887 +    //         super("ECGOST3410");
   9888 +    //     }
   9889 +    // }
   9890 +    // END android-removed
   9891  
   9892      public static class ECDH
   9893          extends EC
   9894 @@ -314,4 +349,4 @@
   9895              super("ECMQV");
   9896          }
   9897      }
   9898 -}
   9899 \ No newline at end of file
   9900 +}
   9901 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java
   9902 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java	2011-02-23 20:08:56.000000000 +0000
   9903 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/asymmetric/ec/Signature.java	2011-09-08 21:28:49.000000000 +0000
   9904 @@ -18,15 +18,21 @@
   9905  import org.bouncycastle.crypto.DSA;
   9906  import org.bouncycastle.crypto.Digest;
   9907  import org.bouncycastle.crypto.digests.NullDigest;
   9908 -import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   9909 +// BEGIN android-removed
   9910 +// import org.bouncycastle.crypto.digests.RIPEMD160Digest;
   9911 +// END android-removed
   9912  import org.bouncycastle.crypto.digests.SHA1Digest;
   9913 -import org.bouncycastle.crypto.digests.SHA224Digest;
   9914 +// BEGIN android-removed
   9915 +// import org.bouncycastle.crypto.digests.SHA224Digest;
   9916 +// END android-removed
   9917  import org.bouncycastle.crypto.digests.SHA256Digest;
   9918  import org.bouncycastle.crypto.digests.SHA384Digest;
   9919  import org.bouncycastle.crypto.digests.SHA512Digest;
   9920  import org.bouncycastle.crypto.params.ParametersWithRandom;
   9921  import org.bouncycastle.crypto.signers.ECDSASigner;
   9922 -import org.bouncycastle.crypto.signers.ECNRSigner;
   9923 +// BEGIN android-removed
   9924 +// import org.bouncycastle.crypto.signers.ECNRSigner;
   9925 +// END android-removed
   9926  import org.bouncycastle.jce.interfaces.ECKey;
   9927  import org.bouncycastle.jce.provider.DSABase;
   9928  import org.bouncycastle.jce.provider.DSAEncoder;
   9929 @@ -122,14 +128,16 @@
   9930          }
   9931      }
   9932  
   9933 -    static public class ecDSA224
   9934 -        extends Signature
   9935 -    {
   9936 -        public ecDSA224()
   9937 -        {
   9938 -            super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder());
   9939 -        }
   9940 -    }
   9941 +    // BEGIN android-removed
   9942 +    // static public class ecDSA224
   9943 +    //     extends Signature
   9944 +    // {
   9945 +    //     public ecDSA224()
   9946 +    //     {
   9947 +    //         super(new SHA224Digest(), new ECDSASigner(), new StdDSAEncoder());
   9948 +    //     }
   9949 +    // }
   9950 +    // END android-removed
   9951  
   9952      static public class ecDSA256
   9953          extends Signature
   9954 @@ -158,86 +166,88 @@
   9955          }
   9956      }
   9957  
   9958 -    static public class ecDSARipeMD160
   9959 -        extends Signature
   9960 -    {
   9961 -        public ecDSARipeMD160()
   9962 -        {
   9963 -            super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
   9964 -        }
   9965 -    }
   9966 -
   9967 -    static public class ecNR
   9968 -        extends Signature
   9969 -    {
   9970 -        public ecNR()
   9971 -        {
   9972 -            super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
   9973 -        }
   9974 -    }
   9975 -
   9976 -    static public class ecNR224
   9977 -        extends Signature
   9978 -    {
   9979 -        public ecNR224()
   9980 -        {
   9981 -            super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
   9982 -        }
   9983 -    }
   9984 -
   9985 -    static public class ecNR256
   9986 -        extends Signature
   9987 -    {
   9988 -        public ecNR256()
   9989 -        {
   9990 -            super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
   9991 -        }
   9992 -    }
   9993 -
   9994 -    static public class ecNR384
   9995 -        extends Signature
   9996 -    {
   9997 -        public ecNR384()
   9998 -        {
   9999 -            super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
   10000 -        }
   10001 -    }
   10002 -
   10003 -    static public class ecNR512
   10004 -        extends Signature
   10005 -    {
   10006 -        public ecNR512()
   10007 -        {
   10008 -            super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
   10009 -        }
   10010 -    }
   10011 -
   10012 -    static public class ecCVCDSA
   10013 -        extends Signature
   10014 -    {
   10015 -        public ecCVCDSA()
   10016 -        {
   10017 -            super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder());
   10018 -        }
   10019 -    }
   10020 -
   10021 -    static public class ecCVCDSA224
   10022 -        extends Signature
   10023 -    {
   10024 -        public ecCVCDSA224()
   10025 -        {
   10026 -            super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder());
   10027 -        }
   10028 -    }
   10029 -
   10030 -    static public class ecCVCDSA256
   10031 -        extends Signature
   10032 -    {
   10033 -        public ecCVCDSA256()
   10034 -        {
   10035 -            super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder());
   10036 -        }
   10037 -    }
   10038 +    // BEGIN android-removed
   10039 +    // static public class ecDSARipeMD160
   10040 +    //     extends Signature
   10041 +    // {
   10042 +    //     public ecDSARipeMD160()
   10043 +    //     {
   10044 +    //         super(new RIPEMD160Digest(), new ECDSASigner(), new StdDSAEncoder());
   10045 +    //     }
   10046 +    // }
   10047 +    //
   10048 +    // static public class ecNR
   10049 +    //     extends Signature
   10050 +    // {
   10051 +    //     public ecNR()
   10052 +    //     {
   10053 +    //         super(new SHA1Digest(), new ECNRSigner(), new StdDSAEncoder());
   10054 +    //     }
   10055 +    // }
   10056 +    //
   10057 +    // static public class ecNR224
   10058 +    //     extends Signature
   10059 +    // {
   10060 +    //     public ecNR224()
   10061 +    //     {
   10062 +    //         super(new SHA224Digest(), new ECNRSigner(), new StdDSAEncoder());
   10063 +    //     }
   10064 +    // }
   10065 +    //
   10066 +    // static public class ecNR256
   10067 +    //     extends Signature
   10068 +    // {
   10069 +    //     public ecNR256()
   10070 +    //     {
   10071 +    //         super(new SHA256Digest(), new ECNRSigner(), new StdDSAEncoder());
   10072 +    //     }
   10073 +    // }
   10074 +    //
   10075 +    // static public class ecNR384
   10076 +    //     extends Signature
   10077 +    // {
   10078 +    //     public ecNR384()
   10079 +    //     {
   10080 +    //         super(new SHA384Digest(), new ECNRSigner(), new StdDSAEncoder());
   10081 +    //     }
   10082 +    // }
   10083 +    //
   10084 +    // static public class ecNR512
   10085 +    //     extends Signature
   10086 +    // {
   10087 +    //     public ecNR512()
   10088 +    //     {
   10089 +    //         super(new SHA512Digest(), new ECNRSigner(), new StdDSAEncoder());
   10090 +    //     }
   10091 +    // }
   10092 +    //
   10093 +    // static public class ecCVCDSA
   10094 +    //     extends Signature
   10095 +    // {
   10096 +    //     public ecCVCDSA()
   10097 +    //     {
   10098 +    //         super(new SHA1Digest(), new ECDSASigner(), new CVCDSAEncoder());
   10099 +    //     }
   10100 +    // }
   10101 +    //
   10102 +    // static public class ecCVCDSA224
   10103 +    //     extends Signature
   10104 +    // {
   10105 +    //     public ecCVCDSA224()
   10106 +    //     {
   10107 +    //         super(new SHA224Digest(), new ECDSASigner(), new CVCDSAEncoder());
   10108 +    //     }
   10109 +    // }
   10110 +    //
   10111 +    // static public class ecCVCDSA256
   10112 +    //     extends Signature
   10113 +    // {
   10114 +    //     public ecCVCDSA256()
   10115 +    //     {
   10116 +    //         super(new SHA256Digest(), new ECDSASigner(), new CVCDSAEncoder());
   10117 +    //     }
   10118 +    // }
   10119 +    // END android-removed
   10120  
   10121      private static class StdDSAEncoder
   10122          implements DSAEncoder
   10123 @@ -331,4 +341,4 @@
   10124              return sig;
   10125          }
   10126      }
   10127 -}
   10128 \ No newline at end of file
   10129 +}
   10130 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/AES.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/AES.java
   10131 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/AES.java	2011-02-23 20:08:56.000000000 +0000
   10132 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/AES.java	2011-09-08 21:28:49.000000000 +0000
   10133 @@ -13,8 +13,10 @@
   10134  import org.bouncycastle.crypto.CipherKeyGenerator;
   10135  import org.bouncycastle.crypto.engines.AESFastEngine;
   10136  import org.bouncycastle.crypto.engines.AESWrapEngine;
   10137 -import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
   10138 -import org.bouncycastle.crypto.macs.CMac;
   10139 +// BEGIN android-removed
   10140 +// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
   10141 +// import org.bouncycastle.crypto.macs.CMac;
   10142 +// END android-removed
   10143  import org.bouncycastle.crypto.modes.CBCBlockCipher;
   10144  import org.bouncycastle.crypto.modes.CFBBlockCipher;
   10145  import org.bouncycastle.crypto.modes.OFBBlockCipher;
   10146 @@ -41,41 +43,43 @@
   10147          }
   10148      }
   10149  
   10150 -    public static class CBC
   10151 -       extends JCEBlockCipher
   10152 -    {
   10153 -        public CBC()
   10154 -        {
   10155 -            super(new CBCBlockCipher(new AESFastEngine()), 128);
   10156 -        }
   10157 -    }
   10158 -
   10159 -    static public class CFB
   10160 -        extends JCEBlockCipher
   10161 -    {
   10162 -        public CFB()
   10163 -        {
   10164 -            super(new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 128)), 128);
   10165 -        }
   10166 -    }
   10167 -
   10168 -    static public class OFB
   10169 -        extends JCEBlockCipher
   10170 -    {
   10171 -        public OFB()
   10172 -        {
   10173 -            super(new BufferedBlockCipher(new OFBBlockCipher(new AESFastEngine(), 128)), 128);
   10174 -        }
   10175 -    }
   10176 -
   10177 -    public static class AESCMAC
   10178 -        extends JCEMac
   10179 -    {
   10180 -        public AESCMAC()
   10181 -        {
   10182 -            super(new CMac(new AESFastEngine()));
   10183 -        }
   10184 -    }
   10185 +    // BEGIN android-removed
   10186 +    // public static class CBC
   10187 +    //    extends JCEBlockCipher
   10188 +    // {
   10189 +    //     public CBC()
   10190 +    //     {
   10191 +    //         super(new CBCBlockCipher(new AESFastEngine()), 128);
   10192 +    //     }
   10193 +    // }
   10194 +    //
   10195 +    // static public class CFB
   10196 +    //     extends JCEBlockCipher
   10197 +    // {
   10198 +    //     public CFB()
   10199 +    //     {
   10200 +    //         super(new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 128)), 128);
   10201 +    //     }
   10202 +    // }
   10203 +    //
   10204 +    // static public class OFB
   10205 +    //     extends JCEBlockCipher
   10206 +    // {
   10207 +    //     public OFB()
   10208 +    //     {
   10209 +    //         super(new BufferedBlockCipher(new OFBBlockCipher(new AESFastEngine(), 128)), 128);
   10210 +    //     }
   10211 +    // }
   10212 +    //
   10213 +    // public static class AESCMAC
   10214 +    //     extends JCEMac
   10215 +    // {
   10216 +    //     public AESCMAC()
   10217 +    //     {
   10218 +    //         super(new CMac(new AESFastEngine()));
   10219 +    //     }
   10220 +    // }
   10221 +    // END android-removed
   10222  
   10223      static public class Wrap
   10224          extends WrapCipherSpi
   10225 @@ -86,14 +90,16 @@
   10226          }
   10227      }
   10228  
   10229 -    public static class RFC3211Wrap
   10230 -        extends WrapCipherSpi
   10231 -    {
   10232 -        public RFC3211Wrap()
   10233 -        {
   10234 -            super(new RFC3211WrapEngine(new AESFastEngine()), 16);
   10235 -        }
   10236 -    }
   10237 +    // BEGIN android-removed
   10238 +    // public static class RFC3211Wrap
   10239 +    //     extends WrapCipherSpi
   10240 +    // {
   10241 +    //     public RFC3211Wrap()
   10242 +    //     {
   10243 +    //         super(new RFC3211WrapEngine(new AESFastEngine()), 16);
   10244 +    //     }
   10245 +    // }
   10246 +    // END android-removed
   10247  
   10248      public static class KeyGen
   10249          extends JCEKeyGenerator
   10250 @@ -109,70 +115,72 @@
   10251          }
   10252      }
   10253  
   10254 -    public static class KeyGen128
   10255 -        extends KeyGen
   10256 -    {
   10257 -        public KeyGen128()
   10258 -        {
   10259 -            super(128);
   10260 -        }
   10261 -    }
   10262 -
   10263 -    public static class KeyGen192
   10264 -        extends KeyGen
   10265 -    {
   10266 -        public KeyGen192()
   10267 -        {
   10268 -            super(192);
   10269 -        }
   10270 -    }
   10271 -
   10272 -    public static class KeyGen256
   10273 -        extends KeyGen
   10274 -    {
   10275 -        public KeyGen256()
   10276 -        {
   10277 -            super(256);
   10278 -        }
   10279 -    }
   10280 -
   10281 -    public static class AlgParamGen
   10282 -        extends JDKAlgorithmParameterGenerator
   10283 -    {
   10284 -        protected void engineInit(
   10285 -            AlgorithmParameterSpec genParamSpec,
   10286 -            SecureRandom random)
   10287 -            throws InvalidAlgorithmParameterException
   10288 -        {
   10289 -            throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
   10290 -        }
   10291 -
   10292 -        protected AlgorithmParameters engineGenerateParameters()
   10293 -        {
   10294 -            byte[]  iv = new byte[16];
   10295 -
   10296 -            if (random == null)
   10297 -            {
   10298 -                random = new SecureRandom();
   10299 -            }
   10300 -
   10301 -            random.nextBytes(iv);
   10302 -
   10303 -            AlgorithmParameters params;
   10304 -
   10305 -            try
   10306 -            {
   10307 -                params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
   10308 -                params.init(new IvParameterSpec(iv));
   10309 -            }
   10310 -            catch (Exception e)
   10311 -            {
   10312 -                throw new RuntimeException(e.getMessage());
   10313 -            }
   10314 -
   10315 -            return params;
   10316 -        }
   10317 -    }
   10318 +    // BEGIN android-removed
   10319 +    // public static class KeyGen128
   10320 +    //     extends KeyGen
   10321 +    // {
   10322 +    //     public KeyGen128()
   10323 +    //     {
   10324 +    //         super(128);
   10325 +    //     }
   10326 +    // }
   10327 +    //
   10328 +    // public static class KeyGen192
   10329 +    //     extends KeyGen
   10330 +    // {
   10331 +    //     public KeyGen192()
   10332 +    //     {
   10333 +    //         super(192);
   10334 +    //     }
   10335 +    // }
   10336 +    //
   10337 +    // public static class KeyGen256
   10338 +    //     extends KeyGen
   10339 +    // {
   10340 +    //     public KeyGen256()
   10341 +    //     {
   10342 +    //         super(256);
   10343 +    //     }
   10344 +    // }
   10345 +    //
   10346 +    // public static class AlgParamGen
   10347 +    //     extends JDKAlgorithmParameterGenerator
   10348 +    // {
   10349 +    //     protected void engineInit(
   10350 +    //         AlgorithmParameterSpec genParamSpec,
   10351 +    //         SecureRandom random)
   10352 +    //         throws InvalidAlgorithmParameterException
   10353 +    //     {
   10354 +    //         throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for AES parameter generation.");
   10355 +    //     }
   10356 +    //
   10357 +    //     protected AlgorithmParameters engineGenerateParameters()
   10358 +    //     {
   10359 +    //         byte[]  iv = new byte[16];
   10360 +    //
   10361 +    //         if (random == null)
   10362 +    //         {
   10363 +    //             random = new SecureRandom();
   10364 +    //         }
   10365 +    //
   10366 +    //         random.nextBytes(iv);
   10367 +    //
   10368 +    //         AlgorithmParameters params;
   10369 +    //
   10370 +    //         try
   10371 +    //         {
   10372 +    //             params = AlgorithmParameters.getInstance("AES", BouncyCastleProvider.PROVIDER_NAME);
   10373 +    //             params.init(new IvParameterSpec(iv));
   10374 +    //         }
   10375 +    //         catch (Exception e)
   10376 +    //         {
   10377 +    //             throw new RuntimeException(e.getMessage());
   10378 +    //         }
   10379 +    //
   10380 +    //         return params;
   10381 +    //     }
   10382 +    // }
   10383 +    // END android-removed
   10384  
   10385      public static class AlgParams
   10386          extends JDKAlgorithmParameters.IVAlgorithmParameters
   10387 @@ -205,58 +213,66 @@
   10388              put("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
   10389              put("Alg.Alias.AlgorithmParameters." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
   10390  
   10391 -            put("AlgorithmParameterGenerator.AES", "org.bouncycastle.jce.provider.symmetric.AES$AlgParamGen");
   10392 -            put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
   10393 -            put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
   10394 -            put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
   10395 -            put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
   10396 -            put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
   10397 -            put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
   10398 +            // BEGIN android-removed
   10399 +            // put("AlgorithmParameterGenerator.AES", "org.bouncycastle.jce.provider.symmetric.AES$AlgParamGen");
   10400 +            // put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES128, "AES");
   10401 +            // put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES192, "AES");
   10402 +            // put("Alg.Alias.AlgorithmParameterGenerator." + wrongAES256, "AES");
   10403 +            // put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "AES");
   10404 +            // put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "AES");
   10405 +            // put("Alg.Alias.AlgorithmParameterGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "AES");
   10406 +            // END android-removed
   10407  
   10408              put("Cipher.AES", "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10409              put("Alg.Alias.Cipher." + wrongAES128, "AES");
   10410              put("Alg.Alias.Cipher." + wrongAES192, "AES");
   10411              put("Alg.Alias.Cipher." + wrongAES256, "AES");
   10412 -            put("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10413 -            put("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10414 -            put("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10415 -            put("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
   10416 -            put("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
   10417 -            put("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
   10418 -            put("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
   10419 -            put("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
   10420 -            put("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
   10421 -            put("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
   10422 -            put("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
   10423 -            put("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
   10424 +            // BEGIN android-removed
   10425 +            // put("Cipher." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10426 +            // put("Cipher." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10427 +            // put("Cipher." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$ECB");
   10428 +            // put("Cipher." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
   10429 +            // put("Cipher." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
   10430 +            // put("Cipher." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$CBC");
   10431 +            // put("Cipher." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
   10432 +            // put("Cipher." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
   10433 +            // put("Cipher." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$OFB");
   10434 +            // put("Cipher." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
   10435 +            // put("Cipher." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
   10436 +            // put("Cipher." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$CFB");
   10437 +            // END android-removed
   10438              put("Cipher.AESWRAP", "org.bouncycastle.jce.provider.symmetric.AES$Wrap");
   10439              put("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes128_wrap, "AESWRAP");
   10440              put("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes192_wrap, "AESWRAP");
   10441              put("Alg.Alias.Cipher." + NISTObjectIdentifiers.id_aes256_wrap, "AESWRAP");
   10442 -            put("Cipher.AESRFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.AES$RFC3211Wrap");
   10443 +            // BEGIN android-removed
   10444 +            // put("Cipher.AESRFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.AES$RFC3211Wrap");
   10445 +            // END android-removed
   10446  
   10447              put("KeyGenerator.AES", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen");
   10448 -            put("KeyGenerator.2.16.840.1.101.3.4.2", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10449 -            put("KeyGenerator.2.16.840.1.101.3.4.22", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10450 -            put("KeyGenerator.2.16.840.1.101.3.4.42", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10451 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10452 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10453 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10454 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10455 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10456 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10457 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10458 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10459 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10460 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10461 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10462 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10463 -            put("KeyGenerator.AESWRAP", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen");
   10464 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10465 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10466 -            put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10467 -
   10468 -            put("Mac.AESCMAC", "org.bouncycastle.jce.provider.symmetric.AES$AESCMAC");
   10469 +            // BEGIN android-removed
   10470 +            // put("KeyGenerator.2.16.840.1.101.3.4.2", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10471 +            // put("KeyGenerator.2.16.840.1.101.3.4.22", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10472 +            // put("KeyGenerator.2.16.840.1.101.3.4.42", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10473 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10474 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10475 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10476 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10477 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10478 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10479 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10480 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10481 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_ECB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10482 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CBC, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10483 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_OFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10484 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_CFB, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10485 +            // put("KeyGenerator.AESWRAP", "org.bouncycastle.jce.provider.symmetric.AES$KeyGen");
   10486 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes128_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen128");
   10487 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes192_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen192");
   10488 +            // put("KeyGenerator." + NISTObjectIdentifiers.id_aes256_wrap, "org.bouncycastle.jce.provider.symmetric.AES$KeyGen256");
   10489 +            //
   10490 +            // put("Mac.AESCMAC", "org.bouncycastle.jce.provider.symmetric.AES$AESCMAC");
   10491 +            // END android-removed
   10492          }
   10493      }
   10494  }
   10495 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/ARC4.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/ARC4.java
   10496 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/ARC4.java	2011-02-23 20:08:56.000000000 +0000
   10497 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/ARC4.java	2011-09-08 21:28:49.000000000 +0000
   10498 @@ -27,7 +27,9 @@
   10499      {
   10500          public KeyGen()
   10501          {
   10502 -            super("RC4", 128, new CipherKeyGenerator());
   10503 +            // BEGIN android-changed
   10504 +            super("ARC4", 128, new CipherKeyGenerator());
   10505 +            // END android-changed
   10506          }
   10507      }
   10508  
   10509 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/Blowfish.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/Blowfish.java
   10510 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/Blowfish.java	2011-02-23 20:08:56.000000000 +0000
   10511 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/Blowfish.java	2011-09-08 21:28:49.000000000 +0000
   10512 @@ -57,7 +57,9 @@
   10513          public Mappings()
   10514          {
   10515              put("Cipher.BLOWFISH", "org.bouncycastle.jce.provider.symmetric.Blowfish$ECB");
   10516 -            put("Cipher.1.3.6.1.4.1.3029.1.2", "org.bouncycastle.jce.provider.symmetric.Blowfish$CBC");
   10517 +            // BEGIN android-removed
   10518 +            // put("Cipher.1.3.6.1.4.1.3029.1.2", "org.bouncycastle.jce.provider.symmetric.Blowfish$CBC");
   10519 +            // END android-removed
   10520              put("KeyGenerator.BLOWFISH", "org.bouncycastle.jce.provider.symmetric.Blowfish$KeyGen");
   10521              put("Alg.Alias.KeyGenerator.1.3.6.1.4.1.3029.1.2", "BLOWFISH");
   10522              put("AlgorithmParameters.BLOWFISH", "org.bouncycastle.jce.provider.symmetric.Blowfish$AlgParams");
   10523 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/DESede.java bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/DESede.java
   10524 --- bcprov-jdk16-146.orig/org/bouncycastle/jce/provider/symmetric/DESede.java	2011-02-23 20:08:56.000000000 +0000
   10525 +++ bcprov-jdk16-146/org/bouncycastle/jce/provider/symmetric/DESede.java	2011-09-08 21:28:49.000000000 +0000
   10526 @@ -14,11 +14,15 @@
   10527  import org.bouncycastle.crypto.KeyGenerationParameters;
   10528  import org.bouncycastle.crypto.engines.DESedeEngine;
   10529  import org.bouncycastle.crypto.engines.DESedeWrapEngine;
   10530 -import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
   10531 +// BEGIN android-removed
   10532 +// import org.bouncycastle.crypto.engines.RFC3211WrapEngine;
   10533 +// END android-removed
   10534  import org.bouncycastle.crypto.generators.DESedeKeyGenerator;
   10535  import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
   10536 -import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
   10537 -import org.bouncycastle.crypto.macs.CMac;
   10538 +// BEGIN android-removed
   10539 +// import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
   10540 +// import org.bouncycastle.crypto.macs.CMac;
   10541 +// END android-removed
   10542  import org.bouncycastle.crypto.modes.CBCBlockCipher;
   10543  import org.bouncycastle.crypto.paddings.ISO7816d4Padding;
   10544  import org.bouncycastle.jce.provider.JCEBlockCipher;
   10545 @@ -51,17 +55,19 @@
   10546          }
   10547      }
   10548  
   10549 -    /**
   10550 -     * DESede   CFB8
   10551 -     */
   10552 -    public static class DESedeCFB8
   10553 -        extends JCEMac
   10554 -    {
   10555 -        public DESedeCFB8()
   10556 -        {
   10557 -            super(new CFBBlockCipherMac(new DESedeEngine()));
   10558 -        }
   10559 -    }
   10560 +    // BEGIN android-removed
   10561 +    // /**
   10562 +    //  * DESede   CFB8
   10563 +    //  */
   10564 +    // public static class DESedeCFB8
   10565 +    //     extends JCEMac
   10566 +    // {
   10567 +    //     public DESedeCFB8()
   10568 +    //     {
   10569 +    //         super(new CFBBlockCipherMac(new DESedeEngine()));
   10570 +    //     }
   10571 +    // }
   10572 +    // END android-removed
   10573  
   10574      /**
   10575       * DESede64
   10576 @@ -96,14 +102,16 @@
   10577          }
   10578      }
   10579  
   10580 -    static public class CMAC
   10581 -        extends JCEMac
   10582 -    {
   10583 -        public CMAC()
   10584 -        {
   10585 -            super(new CMac(new DESedeEngine()));
   10586 -        }
   10587 -    }
   10588 +    // BEGIN android-removed
   10589 +    // static public class CMAC
   10590 +    //     extends JCEMac
   10591 +    // {
   10592 +    //     public CMAC()
   10593 +    //     {
   10594 +    //         super(new CMac(new DESedeEngine()));
   10595 +    //     }
   10596 +    // }
   10597 +    // END android-removed
   10598  
   10599      public static class Wrap
   10600          extends WrapCipherSpi
   10601 @@ -114,14 +122,16 @@
   10602          }
   10603      }
   10604  
   10605 -    public static class RFC3211
   10606 -        extends WrapCipherSpi
   10607 -    {
   10608 -        public RFC3211()
   10609 -        {
   10610 -            super(new RFC3211WrapEngine(new DESedeEngine()), 8);
   10611 -        }
   10612 -    }
   10613 +    // BEGIN android-removed
   10614 +    // public static class RFC3211
   10615 +    //     extends WrapCipherSpi
   10616 +    // {
   10617 +    //     public RFC3211()
   10618 +    //     {
   10619 +    //         super(new RFC3211WrapEngine(new DESedeEngine()), 8);
   10620 +    //     }
   10621 +    // }
   10622 +    // END android-removed
   10623  
   10624    /**
   10625       * DESede - the default for this is to generate a key in
   10626 @@ -262,32 +272,42 @@
   10627          public Mappings()
   10628          {
   10629              put("Cipher.DESEDE", "org.bouncycastle.jce.provider.symmetric.DESede$ECB");
   10630 -            put("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
   10631 -            put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
   10632 +            // BEGIN android-removed
   10633 +            // put("Cipher." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
   10634 +            // put("Cipher." + OIWObjectIdentifiers.desCBC, "org.bouncycastle.jce.provider.symmetric.DESede$CBC");
   10635 +            // END android-removed
   10636              put("Cipher.DESEDEWRAP", "org.bouncycastle.jce.provider.symmetric.DESede$Wrap");
   10637 -            put("Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "org.bouncycastle.jce.provider.symmetric.DESede$Wrap");
   10638 -            put("Cipher.DESEDERFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.DESede$RFC3211");
   10639 +            // BEGIN android-changed
   10640 +            put("Alg.Alias.Cipher." + PKCSObjectIdentifiers.id_alg_CMS3DESwrap, "DESEDEWRAP");
   10641 +            // END android-changed
   10642 +            // BEGIN android-removed
   10643 +            // put("Cipher.DESEDERFC3211WRAP", "org.bouncycastle.jce.provider.symmetric.DESede$RFC3211");
   10644 +            // END android-removed
   10645  
   10646              put("KeyGenerator.DESEDE", "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator");
   10647 -            put("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator3");
   10648 -            put("KeyGenerator.DESEDEWRAP", "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator");
   10649 +            // BEGIN android-removed
   10650 +            // put("KeyGenerator." + PKCSObjectIdentifiers.des_EDE3_CBC, "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator3");
   10651 +            // put("KeyGenerator.DESEDEWRAP", "org.bouncycastle.jce.provider.symmetric.DESede$KeyGenerator");
   10652 +            // END android-removed
   10653  
   10654              put("SecretKeyFactory.DESEDE", "org.bouncycastle.jce.provider.symmetric.DESede$KeyFactory");
   10655  
   10656 -            put("Mac.DESEDECMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CMAC");
   10657 -            put("Mac.DESEDEMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CBCMAC");
   10658 -            put("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
   10659 -
   10660 -            put("Mac.DESEDEMAC/CFB8", "org.bouncycastle.jce.provider.symmetric.DESede$DESedeCFB8");
   10661 -            put("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
   10662 -
   10663 -            put("Mac.DESEDEMAC64", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64");
   10664 -            put("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
   10665 -
   10666 -            put("Mac.DESEDEMAC64WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64with7816d4");
   10667 -            put("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
   10668 -            put("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
   10669 -            put("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
   10670 +            // BEGIN android-removed
   10671 +            // put("Mac.DESEDECMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CMAC");
   10672 +            // put("Mac.DESEDEMAC", "org.bouncycastle.jce.provider.symmetric.DESede$CBCMAC");
   10673 +            // put("Alg.Alias.Mac.DESEDE", "DESEDEMAC");
   10674 +            //
   10675 +            // put("Mac.DESEDEMAC/CFB8", "org.bouncycastle.jce.provider.symmetric.DESede$DESedeCFB8");
   10676 +            // put("Alg.Alias.Mac.DESEDE/CFB8", "DESEDEMAC/CFB8");
   10677 +            //
   10678 +            // put("Mac.DESEDEMAC64", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64");
   10679 +            // put("Alg.Alias.Mac.DESEDE64", "DESEDEMAC64");
   10680 +            //
   10681 +            // put("Mac.DESEDEMAC64WITHISO7816-4PADDING", "org.bouncycastle.jce.provider.symmetric.DESede$DESede64with7816d4");
   10682 +            // put("Alg.Alias.Mac.DESEDE64WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
   10683 +            // put("Alg.Alias.Mac.DESEDEISO9797ALG1MACWITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
   10684 +            // put("Alg.Alias.Mac.DESEDEISO9797ALG1WITHISO7816-4PADDING", "DESEDEMAC64WITHISO7816-4PADDING");
   10685 +            // END android-removed
   10686          }
   10687      }
   10688  }
   10689 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/openssl/PEMUtilities.java bcprov-jdk16-146/org/bouncycastle/openssl/PEMUtilities.java
   10690 --- bcprov-jdk16-146.orig/org/bouncycastle/openssl/PEMUtilities.java	2011-02-23 20:08:56.000000000 +0000
   10691 +++ bcprov-jdk16-146/org/bouncycastle/openssl/PEMUtilities.java	2011-09-08 21:28:50.000000000 +0000
   10692 @@ -45,10 +45,12 @@
   10693          PKCS5_SCHEME_2.add(NISTObjectIdentifiers.id_aes192_CBC);
   10694          PKCS5_SCHEME_2.add(NISTObjectIdentifiers.id_aes256_CBC);
   10695  
   10696 -        KEYSIZES.put(PKCSObjectIdentifiers.des_EDE3_CBC.getId(), new Integer(192));
   10697 -        KEYSIZES.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), new Integer(128));
   10698 -        KEYSIZES.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), new Integer(192));
   10699 -        KEYSIZES.put(NISTObjectIdentifiers.id_aes256_CBC.getId(), new Integer(256));
   10700 +        // BEGIN android-changed
   10701 +        KEYSIZES.put(PKCSObjectIdentifiers.des_EDE3_CBC.getId(), Integer.valueOf(192));
   10702 +        KEYSIZES.put(NISTObjectIdentifiers.id_aes128_CBC.getId(), Integer.valueOf(128));
   10703 +        KEYSIZES.put(NISTObjectIdentifiers.id_aes192_CBC.getId(), Integer.valueOf(192));
   10704 +        KEYSIZES.put(NISTObjectIdentifiers.id_aes256_CBC.getId(), Integer.valueOf(256));
   10705 +        // END android-changed
   10706      }
   10707  
   10708      static int getKeySize(String algorithm)
   10709 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java bcprov-jdk16-146/org/bouncycastle/x509/X509Util.java
   10710 --- bcprov-jdk16-146.orig/org/bouncycastle/x509/X509Util.java	2011-02-23 20:08:56.000000000 +0000
   10711 +++ bcprov-jdk16-146/org/bouncycastle/x509/X509Util.java	2011-09-08 21:28:50.000000000 +0000
   10712 @@ -44,14 +44,18 @@
   10713      
   10714      static
   10715      {   
   10716 -        algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption);
   10717 -        algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption);
   10718 +        // BEGIN android-removed
   10719 +        // algorithms.put("MD2WITHRSAENCRYPTION", PKCSObjectIdentifiers.md2WithRSAEncryption);
   10720 +        // algorithms.put("MD2WITHRSA", PKCSObjectIdentifiers.md2WithRSAEncryption);
   10721 +        // END android-removed
   10722          algorithms.put("MD5WITHRSAENCRYPTION", PKCSObjectIdentifiers.md5WithRSAEncryption);
   10723          algorithms.put("MD5WITHRSA", PKCSObjectIdentifiers.md5WithRSAEncryption);
   10724          algorithms.put("SHA1WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha1WithRSAEncryption);
   10725          algorithms.put("SHA1WITHRSA", PKCSObjectIdentifiers.sha1WithRSAEncryption);
   10726 -        algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   10727 -        algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   10728 +        // BEGIN android-removed
   10729 +        // algorithms.put("SHA224WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   10730 +        // algorithms.put("SHA224WITHRSA", PKCSObjectIdentifiers.sha224WithRSAEncryption);
   10731 +        // END android-removed
   10732          algorithms.put("SHA256WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha256WithRSAEncryption);
   10733          algorithms.put("SHA256WITHRSA", PKCSObjectIdentifiers.sha256WithRSAEncryption);
   10734          algorithms.put("SHA384WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha384WithRSAEncryption);
   10735 @@ -59,45 +63,59 @@
   10736          algorithms.put("SHA512WITHRSAENCRYPTION", PKCSObjectIdentifiers.sha512WithRSAEncryption);
   10737          algorithms.put("SHA512WITHRSA", PKCSObjectIdentifiers.sha512WithRSAEncryption);
   10738          algorithms.put("SHA1WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   10739 -        algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   10740 +        // BEGIN android-removed
   10741 +        // algorithms.put("SHA224WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   10742 +        // END android-removed
   10743          algorithms.put("SHA256WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   10744          algorithms.put("SHA384WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   10745          algorithms.put("SHA512WITHRSAANDMGF1", PKCSObjectIdentifiers.id_RSASSA_PSS);
   10746 -        algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   10747 -        algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   10748 -        algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   10749 -        algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   10750 -        algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   10751 -        algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   10752 +        // BEGIN android-removed
   10753 +        // algorithms.put("RIPEMD160WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   10754 +        // algorithms.put("RIPEMD160WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd160);
   10755 +        // algorithms.put("RIPEMD128WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   10756 +        // algorithms.put("RIPEMD128WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd128);
   10757 +        // algorithms.put("RIPEMD256WITHRSAENCRYPTION", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   10758 +        // algorithms.put("RIPEMD256WITHRSA", TeleTrusTObjectIdentifiers.rsaSignatureWithripemd256);
   10759 +        // END android-removed
   10760          algorithms.put("SHA1WITHDSA", X9ObjectIdentifiers.id_dsa_with_sha1);
   10761          algorithms.put("DSAWITHSHA1", X9ObjectIdentifiers.id_dsa_with_sha1);
   10762 -        algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
   10763 +        // BEGIN android-removed
   10764 +        // algorithms.put("SHA224WITHDSA", NISTObjectIdentifiers.dsa_with_sha224);
   10765 +        // END android-removed
   10766          algorithms.put("SHA256WITHDSA", NISTObjectIdentifiers.dsa_with_sha256);
   10767          algorithms.put("SHA384WITHDSA", NISTObjectIdentifiers.dsa_with_sha384);
   10768          algorithms.put("SHA512WITHDSA", NISTObjectIdentifiers.dsa_with_sha512);
   10769          algorithms.put("SHA1WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA1);
   10770          algorithms.put("ECDSAWITHSHA1", X9ObjectIdentifiers.ecdsa_with_SHA1);
   10771 -        algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
   10772 +        // BEGIN android-removed
   10773 +        // algorithms.put("SHA224WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA224);
   10774 +        // END android-removed
   10775          algorithms.put("SHA256WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA256);
   10776          algorithms.put("SHA384WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA384);
   10777          algorithms.put("SHA512WITHECDSA", X9ObjectIdentifiers.ecdsa_with_SHA512);
   10778 -        algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   10779 -        algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   10780 -        algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10781 -        algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10782 -        algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10783 +        // BEGIN android-removed
   10784 +        // algorithms.put("GOST3411WITHGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   10785 +        // algorithms.put("GOST3411WITHGOST3410-94", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   10786 +        // algorithms.put("GOST3411WITHECGOST3410", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10787 +        // algorithms.put("GOST3411WITHECGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10788 +        // algorithms.put("GOST3411WITHGOST3410-2001", CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10789 +        // END android-removed
   10790  
   10791          //
   10792          // According to RFC 3279, the ASN.1 encoding SHALL (id-dsa-with-sha1) or MUST (ecdsa-with-SHA*) omit the parameters field. 
   10793          // The parameters field SHALL be NULL for RSA based signature algorithms.
   10794          //
   10795          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA1);
   10796 -        noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
   10797 +        // BEGIN android-removed
   10798 +        // noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA224);
   10799 +        // END android-removed
   10800          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA256);
   10801          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA384);
   10802          noParams.add(X9ObjectIdentifiers.ecdsa_with_SHA512);
   10803          noParams.add(X9ObjectIdentifiers.id_dsa_with_sha1);
   10804 -        noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
   10805 +        // BEGIN android-removed
   10806 +        // noParams.add(NISTObjectIdentifiers.dsa_with_sha224);
   10807 +        // END android-removed
   10808          noParams.add(NISTObjectIdentifiers.dsa_with_sha256);
   10809          noParams.add(NISTObjectIdentifiers.dsa_with_sha384);
   10810          noParams.add(NISTObjectIdentifiers.dsa_with_sha512);
   10811 @@ -105,25 +123,39 @@
   10812          //
   10813          // RFC 4491
   10814          //
   10815 -        noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   10816 -        noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10817 +        // BEGIN android-removed
   10818 +        // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_94);
   10819 +        // noParams.add(CryptoProObjectIdentifiers.gostR3411_94_with_gostR3410_2001);
   10820 +        // END android-removed
   10821  
   10822          //
   10823          // explicit params
   10824          //
   10825 -        AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, new DERNull());
   10826 +        // BEGIN android-changed
   10827 +        AlgorithmIdentifier sha1AlgId = new AlgorithmIdentifier(OIWObjectIdentifiers.idSHA1, DERNull.INSTANCE);
   10828 +        // END android-changed
   10829          params.put("SHA1WITHRSAANDMGF1", creatPSSParams(sha1AlgId, 20));
   10830  
   10831 -        AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, new DERNull());
   10832 -        params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
   10833 -
   10834 -        AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, new DERNull());
   10835 +        // BEGIN android-removed
   10836 +        // // BEGIN android-changed
   10837 +        // AlgorithmIdentifier sha224AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha224, DERNull.INSTANCE);
   10838 +        // // END android-changed
   10839 +        // params.put("SHA224WITHRSAANDMGF1", creatPSSParams(sha224AlgId, 28));
   10840 +        // END android-removed
   10841 +
   10842 +        // BEGIN android-changed
   10843 +        AlgorithmIdentifier sha256AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha256, DERNull.INSTANCE);
   10844 +        // END android-changed
   10845          params.put("SHA256WITHRSAANDMGF1", creatPSSParams(sha256AlgId, 32));
   10846  
   10847 -        AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, new DERNull());
   10848 +        // BEGIN android-changed
   10849 +        AlgorithmIdentifier sha384AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha384, DERNull.INSTANCE);
   10850 +        // END android-changed
   10851          params.put("SHA384WITHRSAANDMGF1", creatPSSParams(sha384AlgId, 48));
   10852  
   10853 -        AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, new DERNull());
   10854 +        // BEGIN android-changed
   10855 +        AlgorithmIdentifier sha512AlgId = new AlgorithmIdentifier(NISTObjectIdentifiers.id_sha512, DERNull.INSTANCE);
   10856 +        // END android-changed
   10857          params.put("SHA512WITHRSAANDMGF1", creatPSSParams(sha512AlgId, 64));
   10858      }
   10859  
   10860 @@ -166,7 +198,9 @@
   10861          }
   10862          else
   10863          {
   10864 -            return new AlgorithmIdentifier(sigOid, new DERNull());
   10865 +            // BEGIN android-changed
   10866 +            return new AlgorithmIdentifier(sigOid, DERNull.INSTANCE);
   10867 +            // END android-changed
   10868          }
   10869      }
   10870      
   10871 diff -Naur bcprov-jdk16-146.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java bcprov-jdk16-146/org/bouncycastle/x509/extension/X509ExtensionUtil.java
   10872 --- bcprov-jdk16-146.orig/org/bouncycastle/x509/extension/X509ExtensionUtil.java	2011-02-23 20:08:56.000000000 +0000
   10873 +++ bcprov-jdk16-146/org/bouncycastle/x509/extension/X509ExtensionUtil.java	2011-09-08 21:28:50.000000000 +0000
   10874 @@ -62,7 +62,9 @@
   10875              {
   10876                  GeneralName genName = GeneralName.getInstance(it.nextElement());
   10877                  List list = new ArrayList();
   10878 -                list.add(new Integer(genName.getTagNo()));
   10879 +                // BEGIN android-changed
   10880 +                list.add(Integer.valueOf(genName.getTagNo()));
   10881 +                // END android-changed
   10882                  switch (genName.getTagNo())
   10883                  {
   10884                  case GeneralName.ediPartyName:
   10885