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