BaseKeyFactorySpi.java revision e1142c149e244797ce73b0e7fad40816e447a817
1package org.bouncycastle.jcajce.provider.asymmetric.util; 2 3import java.io.IOException; 4import java.security.Key; 5import java.security.PrivateKey; 6import java.security.PublicKey; 7import java.security.spec.InvalidKeySpecException; 8import java.security.spec.KeySpec; 9import java.security.spec.PKCS8EncodedKeySpec; 10import java.security.spec.X509EncodedKeySpec; 11 12import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 13import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 14import org.bouncycastle.jcajce.provider.util.AsymmetricKeyInfoConverter; 15 16public abstract class BaseKeyFactorySpi 17 extends java.security.KeyFactorySpi 18 implements AsymmetricKeyInfoConverter 19{ 20 protected PrivateKey engineGeneratePrivate( 21 KeySpec keySpec) 22 throws InvalidKeySpecException 23 { 24 if (keySpec instanceof PKCS8EncodedKeySpec) 25 { 26 try 27 { 28 return generatePrivate(PrivateKeyInfo.getInstance(((PKCS8EncodedKeySpec)keySpec).getEncoded())); 29 } 30 catch (Exception e) 31 { 32 throw new InvalidKeySpecException("encoded key spec not recognised"); 33 } 34 } 35 else 36 { 37 throw new InvalidKeySpecException("key spec not recognised"); 38 } 39 } 40 41 protected PublicKey engineGeneratePublic( 42 KeySpec keySpec) 43 throws InvalidKeySpecException 44 { 45 if (keySpec instanceof X509EncodedKeySpec) 46 { 47 try 48 { 49 return generatePublic(SubjectPublicKeyInfo.getInstance(((X509EncodedKeySpec)keySpec).getEncoded())); 50 } 51 catch (Exception e) 52 { 53 throw new InvalidKeySpecException("encoded key spec not recognised"); 54 } 55 } 56 else 57 { 58 throw new InvalidKeySpecException("key spec not recognised"); 59 } 60 } 61 62 protected KeySpec engineGetKeySpec( 63 Key key, 64 Class spec) 65 throws InvalidKeySpecException 66 { 67 if (spec.isAssignableFrom(PKCS8EncodedKeySpec.class) && key.getFormat().equals("PKCS#8")) 68 { 69 return new PKCS8EncodedKeySpec(key.getEncoded()); 70 } 71 else if (spec.isAssignableFrom(X509EncodedKeySpec.class) && key.getFormat().equals("X.509")) 72 { 73 return new X509EncodedKeySpec(key.getEncoded()); 74 } 75 76 throw new InvalidKeySpecException("not implemented yet " + key + " " + spec); 77 } 78} 79