Merge "Upstream partner request to add BC methods to core platform API."
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/ASN1Primitive.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/ASN1Primitive.java
index e2aab07..8ad3a8b 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/ASN1Primitive.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/ASN1Primitive.java
@@ -23,6 +23,7 @@
      * @return the base ASN.1 object represented by the byte stream.
      * @exception IOException if there is a problem parsing the data, or parsing the stream did not exhaust the available data.
      */
+    @libcore.api.CorePlatformApi
     public static ASN1Primitive fromByteArray(byte[] data)
         throws IOException
     {
@@ -55,6 +56,7 @@
         return (o instanceof ASN1Encodable) && asn1Equals(((ASN1Encodable)o).toASN1Primitive());
     }
 
+    @libcore.api.CorePlatformApi
     public ASN1Primitive toASN1Primitive()
     {
         return this;
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java
index 06f45c3..5674325 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/pkcs/PrivateKeyInfo.java
@@ -191,6 +191,7 @@
         return privateKeyAlgorithm;
     }
 
+    @libcore.api.CorePlatformApi
     public ASN1Encodable parsePrivateKey()
         throws IOException
     {
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/x500/style/BCStyle.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/x500/style/BCStyle.java
index a7671ff..25aaa03 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/x500/style/BCStyle.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/asn1/x500/style/BCStyle.java
@@ -17,22 +17,26 @@
 /**
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public class BCStyle
     extends AbstractX500NameStyle
 {
     /**
      * country code - StringType(SIZE(2))
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier C = new ASN1ObjectIdentifier("2.5.4.6").intern();
 
     /**
      * organization - StringType(SIZE(1..64))
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier O = new ASN1ObjectIdentifier("2.5.4.10").intern();
 
     /**
      * organizational unit name - StringType(SIZE(1..64))
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier OU = new ASN1ObjectIdentifier("2.5.4.11").intern();
 
     /**
@@ -43,6 +47,7 @@
     /**
      * common name - StringType(SIZE(1..64))
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier CN = new ASN1ObjectIdentifier("2.5.4.3").intern();
 
     /**
@@ -63,11 +68,13 @@
     /**
      * locality name - StringType(SIZE(1..64))
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier L = new ASN1ObjectIdentifier("2.5.4.7").intern();
 
     /**
      * state, or province name - StringType(SIZE(1..64))
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier ST = new ASN1ObjectIdentifier("2.5.4.8").intern();
 
     /**
@@ -175,6 +182,7 @@
     /**
      * email address in Verisign certificates
      */
+    @libcore.api.CorePlatformApi
     public static final ASN1ObjectIdentifier E = EmailAddress;
 
     /*
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/CipherParameters.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/CipherParameters.java
index 889837f..11c433c 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/CipherParameters.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/CipherParameters.java
@@ -5,6 +5,7 @@
  * all parameter classes implement this.
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public interface CipherParameters
 {
 }
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/PBEParametersGenerator.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/PBEParametersGenerator.java
index d627727..956e933 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/PBEParametersGenerator.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/PBEParametersGenerator.java
@@ -7,6 +7,7 @@
  * super class for all Password Based Encryption (PBE) parameter generator classes.
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public abstract class PBEParametersGenerator
 {
     protected byte[]  password;
@@ -16,6 +17,7 @@
     /**
      * base constructor.
      */
+    @libcore.api.CorePlatformApi
     protected PBEParametersGenerator()
     {
     }
@@ -102,6 +104,7 @@
      * @param password a character array representing the password.
      * @return a byte array representing the password.
      */
+    @libcore.api.CorePlatformApi
     public static byte[] PKCS5PasswordToBytes(
         char[]  password)
     {
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java
index 116aa7d..7419815 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/generators/OpenSSLPBEParametersGenerator.java
@@ -18,6 +18,7 @@
  * <p>
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public class OpenSSLPBEParametersGenerator
     extends PBEParametersGenerator
 {
@@ -28,6 +29,7 @@
     /**
      * Construct a OpenSSL Parameters generator. 
      */
+    @libcore.api.CorePlatformApi
     public OpenSSLPBEParametersGenerator()
     {
     }
@@ -38,6 +40,7 @@
      * @param password password to use.
      * @param salt salt to use.
      */
+    @libcore.api.CorePlatformApi
     public void init(
        byte[] password,
        byte[] salt)
@@ -89,6 +92,7 @@
      * @return a KeyParameter object.
      * @exception IllegalArgumentException if the key length larger than the base hash size.
      */
+    @libcore.api.CorePlatformApi
     public CipherParameters generateDerivedParameters(
         int keySize)
     {
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/KeyParameter.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/KeyParameter.java
index ad8fa0c..bed0f70 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/KeyParameter.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/crypto/params/KeyParameter.java
@@ -6,6 +6,7 @@
 /**
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public class KeyParameter
     implements CipherParameters
 {
@@ -27,6 +28,7 @@
         System.arraycopy(key, keyOff, this.key, 0, keyLen);
     }
 
+    @libcore.api.CorePlatformApi
     public byte[] getKey()
     {
         return key;
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper.java
index 5e91663..3e28999 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/jcajce/util/DefaultJcaJceHelper.java
@@ -24,9 +24,11 @@
  * without specifying a provider).
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public class DefaultJcaJceHelper
     implements JcaJceHelper
 {
+    @libcore.api.CorePlatformApi
     public Cipher createCipher(
         String algorithm)
         throws NoSuchAlgorithmException, NoSuchPaddingException
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemHeader.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemHeader.java
index 2829673..8465791 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemHeader.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemHeader.java
@@ -5,6 +5,7 @@
  * Class representing a PEM header (name, value) pair.
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public class PemHeader
 {
     private String name;
@@ -16,6 +17,7 @@
      * @param name name of the header property.
      * @param value value of the header property.
      */
+    @libcore.api.CorePlatformApi
     public PemHeader(String name, String value)
     {
         this.name = name;
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemObject.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemObject.java
index 97ac2fa..7dcd832 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemObject.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/util/io/pem/PemObject.java
@@ -38,6 +38,7 @@
      * @param headers a list of PemHeader objects.
      * @param content the binary content of the object.
      */
+    @libcore.api.CorePlatformApi
     public PemObject(String type, List headers, byte[] content)
     {
         this.type = type;
diff --git a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/x509/X509V1CertificateGenerator.java b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/x509/X509V1CertificateGenerator.java
index 2b5b831..54e198d 100644
--- a/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/x509/X509V1CertificateGenerator.java
+++ b/repackaged/bcprov/src/main/java/com/android/org/bouncycastle/x509/X509V1CertificateGenerator.java
@@ -41,6 +41,7 @@
  * @deprecated use org.bouncycastle.cert.X509v1CertificateBuilder.
  * @hide This class is not part of the Android public SDK API
  */
+@libcore.api.CorePlatformApi
 public class X509V1CertificateGenerator
 {
     private final JcaJceHelper bcHelper = new BCJcaJceHelper(); // needed to force provider loading
@@ -51,6 +52,7 @@
     private AlgorithmIdentifier         sigAlgId;
     private String                      signatureAlgorithm;
 
+    @libcore.api.CorePlatformApi
     public X509V1CertificateGenerator()
     {
         tbsGen = new V1TBSCertificateGenerator();
@@ -67,6 +69,7 @@
     /**
      * set the serial number for the certificate.
      */
+    @libcore.api.CorePlatformApi
     public void setSerialNumber(
         BigInteger      serialNumber)
     {
@@ -105,12 +108,14 @@
         tbsGen.setIssuer(issuer);
     }
 
+    @libcore.api.CorePlatformApi
     public void setNotBefore(
         Date    date)
     {
         tbsGen.setStartDate(new Time(date));
     }
 
+    @libcore.api.CorePlatformApi
     public void setNotAfter(
         Date    date)
     {
@@ -120,6 +125,7 @@
     /**
      * Set the subject distinguished name. The subject describes the entity associated with the public key.
      */
+    @libcore.api.CorePlatformApi
     public void setSubjectDN(
         X500Principal   subject)
     {
@@ -142,6 +148,7 @@
         tbsGen.setSubject(subject);
     }
 
+    @libcore.api.CorePlatformApi
     public void setPublicKey(
         PublicKey       key)
     {
@@ -161,6 +168,7 @@
      * 
      * @param signatureAlgorithm string representation of the algorithm name.
      */
+    @libcore.api.CorePlatformApi
     public void setSignatureAlgorithm(
         String  signatureAlgorithm)
     {
@@ -315,6 +323,7 @@
      * using the passed in provider for the signing, and the passed in source
      * of randomness (if required).
      */
+    @libcore.api.CorePlatformApi
     public X509Certificate generate(
         PrivateKey      key,
         String          provider)
diff --git a/srcgen/core-platform-api.txt b/srcgen/core-platform-api.txt
index 92025ea..d0dad67 100644
--- a/srcgen/core-platform-api.txt
+++ b/srcgen/core-platform-api.txt
@@ -1,5 +1,12 @@
 field:com.android.org.bouncycastle.asn1.DERNull#INSTANCE
 field:com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers#sha256WithRSAEncryption
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#C
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#CN
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#E
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#L
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#O
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#OU
+field:com.android.org.bouncycastle.asn1.x500.style.BCStyle#ST
 field:com.android.org.bouncycastle.asn1.x509.GeneralName#dNSName
 field:com.android.org.bouncycastle.asn1.x509.GeneralName#iPAddress
 field:com.android.org.bouncycastle.asn1.x509.GeneralName#otherName
@@ -24,6 +31,8 @@
 method:com.android.org.bouncycastle.asn1.ASN1ObjectIdentifier#getInstance(Object)
 method:com.android.org.bouncycastle.asn1.ASN1OctetString#getOctets()
 method:com.android.org.bouncycastle.asn1.ASN1OctetString#hashCode()
+method:com.android.org.bouncycastle.asn1.ASN1Primitive#fromByteArray(byte[])
+method:com.android.org.bouncycastle.asn1.ASN1Primitive#toASN1Primitive()
 method:com.android.org.bouncycastle.asn1.ASN1Sequence#getObjectAt(int)
 method:com.android.org.bouncycastle.asn1.ASN1Sequence#hashCode()
 method:com.android.org.bouncycastle.asn1.ASN1Sequence#size()
@@ -39,6 +48,7 @@
 method:com.android.org.bouncycastle.asn1.DERUTF8String#getString()
 method:com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo#getInstance(Object)
 method:com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo#getPrivateKeyAlgorithm()
+method:com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo#parsePrivateKey()
 method:com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier#AlgorithmIdentifier(ASN1ObjectIdentifier)
 method:com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier#AlgorithmIdentifier(ASN1ObjectIdentifier,ASN1Encodable)
 method:com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier#getAlgorithm()
@@ -64,16 +74,33 @@
 method:com.android.org.bouncycastle.asn1.x509.X509Name#getValues()
 method:com.android.org.bouncycastle.asn1.x509.X509Name#toString(boolean,Hashtable)
 method:com.android.org.bouncycastle.asn1.x509.X509Name#X509Name(String)
+method:com.android.org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator#generateDerivedParameters(int)
+method:com.android.org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator#init(byte[],byte[])
+method:com.android.org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator#OpenSSLPBEParametersGenerator()
+method:com.android.org.bouncycastle.crypto.params.KeyParameter#getKey()
+method:com.android.org.bouncycastle.crypto.PBEParametersGenerator#PBEParametersGenerator()
+method:com.android.org.bouncycastle.crypto.PBEParametersGenerator#PKCS5PasswordToBytes(char[])
+method:com.android.org.bouncycastle.jcajce.util.DefaultJcaJceHelper#createCipher(String)
 method:com.android.org.bouncycastle.jce.provider.BouncyCastleProvider#BouncyCastleProvider()
 method:com.android.org.bouncycastle.jce.provider.X509CertificateObject#X509CertificateObject(com.android.org.bouncycastle.asn1.x509.Certificate)
 method:com.android.org.bouncycastle.jce.X509Principal#X509Principal(byte[])
+method:com.android.org.bouncycastle.util.io.pem.PemHeader#PemHeader(String,String)
 method:com.android.org.bouncycastle.util.io.pem.PemObject#getContent()
 method:com.android.org.bouncycastle.util.io.pem.PemObject#getType()
 method:com.android.org.bouncycastle.util.io.pem.PemObject#PemObject(String,byte[])
+method:com.android.org.bouncycastle.util.io.pem.PemObject#PemObject(String,List,byte[])
 method:com.android.org.bouncycastle.util.io.pem.PemReader#PemReader(Reader)
 method:com.android.org.bouncycastle.util.io.pem.PemReader#readPemObject()
 method:com.android.org.bouncycastle.util.io.pem.PemWriter#PemWriter(Writer)
 method:com.android.org.bouncycastle.util.io.pem.PemWriter#writeObject(PemObjectGenerator)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#generate(PrivateKey,String)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#setNotAfter(Date)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#setNotBefore(Date)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#setPublicKey(PublicKey)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#setSerialNumber(BigInteger)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#setSignatureAlgorithm(String)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#setSubjectDN(X500Principal)
+method:com.android.org.bouncycastle.x509.X509V1CertificateGenerator#X509V1CertificateGenerator()
 method:com.android.org.bouncycastle.x509.X509V3CertificateGenerator#generate(PrivateKey)
 method:com.android.org.bouncycastle.x509.X509V3CertificateGenerator#setIssuerDN(X500Principal)
 method:com.android.org.bouncycastle.x509.X509V3CertificateGenerator#setNotAfter(Date)
@@ -104,6 +131,7 @@
 type:com.android.org.bouncycastle.asn1.DERUTF8String
 type:com.android.org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
 type:com.android.org.bouncycastle.asn1.pkcs.PrivateKeyInfo
+type:com.android.org.bouncycastle.asn1.x500.style.BCStyle
 type:com.android.org.bouncycastle.asn1.x509.AlgorithmIdentifier
 type:com.android.org.bouncycastle.asn1.x509.BasicConstraints
 type:com.android.org.bouncycastle.asn1.x509.Certificate
@@ -114,12 +142,19 @@
 type:com.android.org.bouncycastle.asn1.x509.V3TBSCertificateGenerator
 type:com.android.org.bouncycastle.asn1.x509.X509Name
 type:com.android.org.bouncycastle.asn1.x9.X9ObjectIdentifiers
+type:com.android.org.bouncycastle.crypto.CipherParameters
+type:com.android.org.bouncycastle.crypto.generators.OpenSSLPBEParametersGenerator
+type:com.android.org.bouncycastle.crypto.params.KeyParameter
+type:com.android.org.bouncycastle.crypto.PBEParametersGenerator
+type:com.android.org.bouncycastle.jcajce.util.DefaultJcaJceHelper
 type:com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
 type:com.android.org.bouncycastle.jce.provider.X509CertificateObject
 type:com.android.org.bouncycastle.jce.X509Principal
+type:com.android.org.bouncycastle.util.io.pem.PemHeader
 type:com.android.org.bouncycastle.util.io.pem.PemObject
 type:com.android.org.bouncycastle.util.io.pem.PemObjectGenerator
 type:com.android.org.bouncycastle.util.io.pem.PemReader
 type:com.android.org.bouncycastle.util.io.pem.PemWriter
 type:com.android.org.bouncycastle.util.Iterable
+type:com.android.org.bouncycastle.x509.X509V1CertificateGenerator
 type:com.android.org.bouncycastle.x509.X509V3CertificateGenerator