BaseKeyFactorySpi.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
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 // BEGIN android-changed 31 catch (Exception e) 32 // END android-changed 33 { 34 throw new InvalidKeySpecException("encoded key spec not recognised"); 35 } 36 } 37 else 38 { 39 throw new InvalidKeySpecException("key spec not recognised"); 40 } 41 } 42 43 protected PublicKey engineGeneratePublic( 44 KeySpec keySpec) 45 throws InvalidKeySpecException 46 { 47 if (keySpec instanceof X509EncodedKeySpec) 48 { 49 try 50 { 51 return generatePublic(SubjectPublicKeyInfo.getInstance(((X509EncodedKeySpec)keySpec).getEncoded())); 52 } 53 // BEGIN android-changed 54 catch (Exception e) 55 // END android-changed 56 { 57 throw new InvalidKeySpecException("encoded key spec not recognised"); 58 } 59 } 60 else 61 { 62 throw new InvalidKeySpecException("key spec not recognised"); 63 } 64 } 65 66 protected KeySpec engineGetKeySpec( 67 Key key, 68 Class spec) 69 throws InvalidKeySpecException 70 { 71 if (spec.isAssignableFrom(PKCS8EncodedKeySpec.class) && key.getFormat().equals("PKCS#8")) 72 { 73 return new PKCS8EncodedKeySpec(key.getEncoded()); 74 } 75 else if (spec.isAssignableFrom(X509EncodedKeySpec.class) && key.getFormat().equals("X.509")) 76 { 77 return new X509EncodedKeySpec(key.getEncoded()); 78 } 79 80 throw new InvalidKeySpecException("not implemented yet " + key + " " + spec); 81 } 82} 83