1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.jce.provider; 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ByteArrayOutputStream; 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger; 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.interfaces.RSAPrivateCrtKey; 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.spec.RSAPrivateCrtKeySpec; 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.ASN1Sequence; 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DERNull; 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.DEROutputStream; 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.pkcs.RSAPrivateKeyStructure; 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.asn1.x509.AlgorithmIdentifier; 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters; 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A provider representation for a RSA private key, with CRT factors included. 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class JCERSAPrivateCrtKey 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project extends JCERSAPrivateKey 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements RSAPrivateCrtKey 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger publicExponent; 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger primeP; 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger primeQ; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger primeExponentP; 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger primeExponentQ; 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private BigInteger crtCoefficient; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * construct a private key from it's org.bouncycastle.crypto equivalent. 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key the parameters object representing the private key. 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JCERSAPrivateCrtKey( 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RSAPrivateCrtKeyParameters key) 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(key); 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.publicExponent = key.getPublicExponent(); 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeP = key.getP(); 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeQ = key.getQ(); 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentP = key.getDP(); 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentQ = key.getDQ(); 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.crtCoefficient = key.getQInv(); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * construct a private key from an RSAPrivateCrtKeySpec 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param spec the spec to be used in construction. 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JCERSAPrivateCrtKey( 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RSAPrivateCrtKeySpec spec) 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.modulus = spec.getModulus(); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.publicExponent = spec.getPublicExponent(); 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.privateExponent = spec.getPrivateExponent(); 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeP = spec.getPrimeP(); 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeQ = spec.getPrimeQ(); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentP = spec.getPrimeExponentP(); 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentQ = spec.getPrimeExponentQ(); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.crtCoefficient = spec.getCrtCoefficient(); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * construct a private key from another RSAPrivateCrtKey. 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key the object implementing the RSAPrivateCrtKey interface. 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JCERSAPrivateCrtKey( 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RSAPrivateCrtKey key) 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.modulus = key.getModulus(); 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.publicExponent = key.getPublicExponent(); 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.privateExponent = key.getPrivateExponent(); 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeP = key.getPrimeP(); 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeQ = key.getPrimeQ(); 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentP = key.getPrimeExponentP(); 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentQ = key.getPrimeExponentQ(); 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.crtCoefficient = key.getCrtCoefficient(); 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * construct an RSA key from a private key info object. 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JCERSAPrivateCrtKey( 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PrivateKeyInfo info) 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this(new RSAPrivateKeyStructure((ASN1Sequence)info.getPrivateKey())); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * construct an RSA key from a ASN.1 RSA private key object. 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JCERSAPrivateCrtKey( 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RSAPrivateKeyStructure key) 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.modulus = key.getModulus(); 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.publicExponent = key.getPublicExponent(); 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.privateExponent = key.getPrivateExponent(); 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeP = key.getPrime1(); 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeQ = key.getPrime2(); 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentP = key.getExponent1(); 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.primeExponentQ = key.getExponent2(); 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.crtCoefficient = key.getCoefficient(); 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the encoding format we produce in getEncoded(). 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the encoding format we produce in getEncoded(). 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getFormat() 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "PKCS#8"; 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Return a PKCS8 representation of the key. The sequence returned 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * represents a full PrivateKeyInfo object. 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a PKCS8 representation of the key. 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] getEncoded() 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project PrivateKeyInfo info = new PrivateKeyInfo(new AlgorithmIdentifier(PKCSObjectIdentifiers.rsaEncryption, DERNull.THE_ONE), new RSAPrivateKeyStructure(getModulus(), getPublicExponent(), getPrivateExponent(), getPrimeP(), getPrimeQ(), getPrimeExponentP(), getPrimeExponentQ(), getCrtCoefficient()).getDERObject()); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return info.getDEREncoded(); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the public exponent. 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the public exponent. 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getPublicExponent() 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return publicExponent; 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the prime P. 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the prime P. 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getPrimeP() 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return primeP; 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the prime Q. 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the prime Q. 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getPrimeQ() 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return primeQ; 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the prime exponent for P. 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the prime exponent for P. 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getPrimeExponentP() 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return primeExponentP; 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the prime exponent for Q. 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the prime exponent for Q. 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getPrimeExponentQ() 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return primeExponentQ; 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the CRT coefficient. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the CRT coefficient. 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public BigInteger getCrtCoefficient() 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return crtCoefficient; 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object o) 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(o instanceof RSAPrivateCrtKey)) 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == this) 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RSAPrivateCrtKey key = (RSAPrivateCrtKey)o; 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this.getModulus().equals(key.getModulus()) 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getPublicExponent().equals(key.getPublicExponent()) 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getPrivateExponent().equals(key.getPrivateExponent()) 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getPrimeP().equals(key.getPrimeP()) 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getPrimeQ().equals(key.getPrimeQ()) 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getPrimeExponentP().equals(key.getPrimeExponentP()) 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getPrimeExponentQ().equals(key.getPrimeExponentQ()) 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.getCrtCoefficient().equals(key.getCrtCoefficient()); 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuffer buf = new StringBuffer(); 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String nl = System.getProperty("line.separator"); 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append("RSA Private CRT Key").append(nl); 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" modulus: ").append(this.getModulus().toString(16)).append(nl); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" public exponent: ").append(this.getPublicExponent().toString(16)).append(nl); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" private exponent: ").append(this.getPrivateExponent().toString(16)).append(nl); 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" primeP: ").append(this.getPrimeP().toString(16)).append(nl); 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" primeQ: ").append(this.getPrimeQ().toString(16)).append(nl); 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" primeExponentP: ").append(this.getPrimeExponentP().toString(16)).append(nl); 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" primeExponentQ: ").append(this.getPrimeExponentQ().toString(16)).append(nl); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buf.append(" crtCoefficient: ").append(this.getCrtCoefficient().toString(16)).append(nl); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buf.toString(); 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 238