KeyFactorySpi.java revision e6bf3e8dfa2804891a82075cb469b736321b4827
1package org.bouncycastle.jcajce.provider.asymmetric.dsa; 2 3import java.io.IOException; 4import java.security.InvalidKeyException; 5import java.security.Key; 6import java.security.PrivateKey; 7import java.security.PublicKey; 8import java.security.interfaces.DSAPrivateKey; 9import java.security.interfaces.DSAPublicKey; 10import java.security.spec.DSAPrivateKeySpec; 11import java.security.spec.DSAPublicKeySpec; 12import java.security.spec.InvalidKeySpecException; 13import java.security.spec.KeySpec; 14 15import org.bouncycastle.asn1.ASN1ObjectIdentifier; 16import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; 17import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; 18import org.bouncycastle.jcajce.provider.asymmetric.util.BaseKeyFactorySpi; 19 20public class KeyFactorySpi 21 extends BaseKeyFactorySpi 22{ 23 public KeyFactorySpi() 24 { 25 } 26 27 protected KeySpec engineGetKeySpec( 28 Key key, 29 Class spec) 30 throws InvalidKeySpecException 31 { 32 if (spec.isAssignableFrom(DSAPublicKeySpec.class) && key instanceof DSAPublicKey) 33 { 34 DSAPublicKey k = (DSAPublicKey)key; 35 36 return new DSAPublicKeySpec(k.getY(), k.getParams().getP(), k.getParams().getQ(), k.getParams().getG()); 37 } 38 else if (spec.isAssignableFrom(DSAPrivateKeySpec.class) && key instanceof java.security.interfaces.DSAPrivateKey) 39 { 40 java.security.interfaces.DSAPrivateKey k = (java.security.interfaces.DSAPrivateKey)key; 41 42 return new DSAPrivateKeySpec(k.getX(), k.getParams().getP(), k.getParams().getQ(), k.getParams().getG()); 43 } 44 45 return super.engineGetKeySpec(key, spec); 46 } 47 48 protected Key engineTranslateKey( 49 Key key) 50 throws InvalidKeyException 51 { 52 if (key instanceof DSAPublicKey) 53 { 54 return new BCDSAPublicKey((DSAPublicKey)key); 55 } 56 else if (key instanceof DSAPrivateKey) 57 { 58 return new BCDSAPrivateKey((DSAPrivateKey)key); 59 } 60 61 throw new InvalidKeyException("key type unknown"); 62 } 63 64 public PrivateKey generatePrivate(PrivateKeyInfo keyInfo) 65 throws IOException 66 { 67 ASN1ObjectIdentifier algOid = keyInfo.getPrivateKeyAlgorithm().getAlgorithm(); 68 69 if (DSAUtil.isDsaOid(algOid)) 70 { 71 return new BCDSAPrivateKey(keyInfo); 72 } 73 else 74 { 75 throw new IOException("algorithm identifier " + algOid + " in key not recognised"); 76 } 77 } 78 79 public PublicKey generatePublic(SubjectPublicKeyInfo keyInfo) 80 throws IOException 81 { 82 ASN1ObjectIdentifier algOid = keyInfo.getAlgorithm().getAlgorithm(); 83 84 if (DSAUtil.isDsaOid(algOid)) 85 { 86 return new BCDSAPublicKey(keyInfo); 87 } 88 else 89 { 90 throw new IOException("algorithm identifier " + algOid + " in key not recognised"); 91 } 92 } 93 94 protected PrivateKey engineGeneratePrivate( 95 KeySpec keySpec) 96 throws InvalidKeySpecException 97 { 98 if (keySpec instanceof DSAPrivateKeySpec) 99 { 100 return new BCDSAPrivateKey((DSAPrivateKeySpec)keySpec); 101 } 102 103 return super.engineGeneratePrivate(keySpec); 104 } 105 106 protected PublicKey engineGeneratePublic( 107 KeySpec keySpec) 108 throws InvalidKeySpecException 109 { 110 if (keySpec instanceof DSAPublicKeySpec) 111 { 112 return new BCDSAPublicKey((DSAPublicKeySpec)keySpec); 113 } 114 115 return super.engineGeneratePublic(keySpec); 116 } 117} 118