1package org.bouncycastle.jcajce.provider.asymmetric.util;
2
3import java.security.InvalidKeyException;
4import java.security.PrivateKey;
5import java.security.PublicKey;
6
7import javax.crypto.interfaces.DHPrivateKey;
8import javax.crypto.interfaces.DHPublicKey;
9
10import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
11import org.bouncycastle.crypto.params.DHParameters;
12import org.bouncycastle.crypto.params.DHPrivateKeyParameters;
13import org.bouncycastle.crypto.params.DHPublicKeyParameters;
14import org.bouncycastle.jcajce.provider.asymmetric.dh.BCDHPublicKey;
15
16/**
17 * utility class for converting jce/jca DH objects
18 * objects into their org.bouncycastle.crypto counterparts.
19 */
20public class DHUtil
21{
22    static public AsymmetricKeyParameter generatePublicKeyParameter(
23        PublicKey    key)
24        throws InvalidKeyException
25    {
26        if (key instanceof BCDHPublicKey)
27        {
28            return ((BCDHPublicKey)key).engineGetKeyParameters();
29        }
30        if (key instanceof DHPublicKey)
31        {
32            DHPublicKey    k = (DHPublicKey)key;
33
34            return new DHPublicKeyParameters(k.getY(),
35                new DHParameters(k.getParams().getP(), k.getParams().getG(), null, k.getParams().getL()));
36        }
37
38        throw new InvalidKeyException("can't identify DH public key.");
39    }
40
41    static public AsymmetricKeyParameter generatePrivateKeyParameter(
42        PrivateKey    key)
43        throws InvalidKeyException
44    {
45        if (key instanceof DHPrivateKey)
46        {
47            DHPrivateKey    k = (DHPrivateKey)key;
48
49            return new DHPrivateKeyParameters(k.getX(),
50                new DHParameters(k.getParams().getP(), k.getParams().getG(), null, k.getParams().getL()));
51        }
52
53        throw new InvalidKeyException("can't identify DH private key.");
54    }
55}
56