14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.asymmetric.util; 24c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 34c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.io.IOException; 44c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.Key; 54c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.PrivateKey; 64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.PublicKey; 74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.InvalidKeySpecException; 84c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.KeySpec; 94c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.PKCS8EncodedKeySpec; 104c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport java.security.spec.X509EncodedKeySpec; 114c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 134c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 144c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter; 154c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 164c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic abstract class BaseKeyFactorySpi 174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom extends java.security.KeyFactorySpi 184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom implements AsymmetricKeyInfoConverter 194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 204c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected PrivateKey engineGeneratePrivate( 214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom KeySpec keySpec) 224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws InvalidKeySpecException 234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (keySpec instanceof PKCS8EncodedKeySpec) 254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom try 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return generatePrivate(PrivateKeyInfo.getInstance(((PKCS8EncodedKeySpec)keySpec).getEncoded())); 294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 30517da5b1cf8927b100e5e1d9df870854b09aa2ceBrian Carlstrom // BEGIN android-changed 31517da5b1cf8927b100e5e1d9df870854b09aa2ceBrian Carlstrom catch (Exception e) 32517da5b1cf8927b100e5e1d9df870854b09aa2ceBrian Carlstrom // END android-changed 334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidKeySpecException("encoded key spec not recognised"); 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else 384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 394c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidKeySpecException("key spec not recognised"); 404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 414c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected PublicKey engineGeneratePublic( 444c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom KeySpec keySpec) 454c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws InvalidKeySpecException 464c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 474c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (keySpec instanceof X509EncodedKeySpec) 484c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom try 504c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 514c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return generatePublic(SubjectPublicKeyInfo.getInstance(((X509EncodedKeySpec)keySpec).getEncoded())); 524c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 53517da5b1cf8927b100e5e1d9df870854b09aa2ceBrian Carlstrom // BEGIN android-changed 54517da5b1cf8927b100e5e1d9df870854b09aa2ceBrian Carlstrom catch (Exception e) 55517da5b1cf8927b100e5e1d9df870854b09aa2ceBrian Carlstrom // END android-changed 564c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidKeySpecException("encoded key spec not recognised"); 584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else 614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 624c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidKeySpecException("key spec not recognised"); 634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom protected KeySpec engineGetKeySpec( 674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom Key key, 684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom Class spec) 694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throws InvalidKeySpecException 704c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 714c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (spec.isAssignableFrom(PKCS8EncodedKeySpec.class) && key.getFormat().equals("PKCS#8")) 724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new PKCS8EncodedKeySpec(key.getEncoded()); 744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom else if (spec.isAssignableFrom(X509EncodedKeySpec.class) && key.getFormat().equals("X.509")) 764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom { 774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return new X509EncodedKeySpec(key.getEncoded()); 784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom throw new InvalidKeySpecException("not implemented yet " + key + " " + spec); 814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 83