1package org.bouncycastle.jcajce.provider.asymmetric.dsa;
2
3import java.security.InvalidKeyException;
4import java.security.PrivateKey;
5import java.security.PublicKey;
6import java.security.interfaces.DSAPrivateKey;
7import java.security.interfaces.DSAPublicKey;
8
9import org.bouncycastle.asn1.ASN1ObjectIdentifier;
10import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
11import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
12import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
13import org.bouncycastle.crypto.params.DSAParameters;
14import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
15import org.bouncycastle.crypto.params.DSAPublicKeyParameters;
16
17/**
18 * utility class for converting jce/jca DSA objects
19 * objects into their org.bouncycastle.crypto counterparts.
20 */
21public class DSAUtil
22{
23    public static final ASN1ObjectIdentifier[] dsaOids =
24    {
25        X9ObjectIdentifiers.id_dsa,
26        OIWObjectIdentifiers.dsaWithSHA1
27    };
28
29    public static boolean isDsaOid(
30        ASN1ObjectIdentifier algOid)
31    {
32        for (int i = 0; i != dsaOids.length; i++)
33        {
34            if (algOid.equals(dsaOids[i]))
35            {
36                return true;
37            }
38        }
39
40        return false;
41    }
42
43    static public AsymmetricKeyParameter generatePublicKeyParameter(
44        PublicKey    key)
45        throws InvalidKeyException
46    {
47        if (key instanceof DSAPublicKey)
48        {
49            DSAPublicKey    k = (DSAPublicKey)key;
50
51            return new DSAPublicKeyParameters(k.getY(),
52                new DSAParameters(k.getParams().getP(), k.getParams().getQ(), k.getParams().getG()));
53        }
54
55        throw new InvalidKeyException("can't identify DSA public key: " + key.getClass().getName());
56    }
57
58    static public AsymmetricKeyParameter generatePrivateKeyParameter(
59        PrivateKey    key)
60        throws InvalidKeyException
61    {
62        if (key instanceof DSAPrivateKey)
63        {
64            DSAPrivateKey    k = (DSAPrivateKey)key;
65
66            return new DSAPrivateKeyParameters(k.getX(),
67                new DSAParameters(k.getParams().getP(), k.getParams().getQ(), k.getParams().getG()));
68        }
69
70        throw new InvalidKeyException("can't identify DSA private key.");
71    }
72}
73