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