summaryrefslogtreecommitdiff
path: root/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java36
1 files changed, 31 insertions, 5 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java
index c7e2aa91..10bac464 100644
--- a/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java
+++ b/bcprov/src/main/java/org/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil.java
@@ -3,11 +3,14 @@ package org.bouncycastle.jcajce.provider.asymmetric.dsa;
import java.security.InvalidKeyException;
import java.security.PrivateKey;
import java.security.PublicKey;
+import java.security.interfaces.DSAParams;
import java.security.interfaces.DSAPrivateKey;
import java.security.interfaces.DSAPublicKey;
+import java.security.spec.DSAParameterSpec;
import org.bouncycastle.asn1.ASN1ObjectIdentifier;
import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers;
+import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.x9.X9ObjectIdentifiers;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.params.DSAParameters;
@@ -43,19 +46,42 @@ public class DSAUtil
return false;
}
+ static DSAParameters toDSAParameters(DSAParams spec)
+ {
+ if (spec != null)
+ {
+ return new DSAParameters(spec.getP(), spec.getQ(), spec.getG());
+ }
+
+ return null;
+ }
+
static public AsymmetricKeyParameter generatePublicKeyParameter(
PublicKey key)
throws InvalidKeyException
{
- if (key instanceof DSAPublicKey)
+ if (key instanceof BCDSAPublicKey)
{
- DSAPublicKey k = (DSAPublicKey)key;
+ return ((BCDSAPublicKey)key).engineGetKeyParameters();
+ }
- return new DSAPublicKeyParameters(k.getY(),
- new DSAParameters(k.getParams().getP(), k.getParams().getQ(), k.getParams().getG()));
+ if (key instanceof DSAPublicKey)
+ {
+ return new BCDSAPublicKey((DSAPublicKey)key).engineGetKeyParameters();
}
- throw new InvalidKeyException("can't identify DSA public key: " + key.getClass().getName());
+ try
+ {
+ byte[] bytes = key.getEncoded();
+
+ BCDSAPublicKey bckey = new BCDSAPublicKey(SubjectPublicKeyInfo.getInstance(bytes));
+
+ return bckey.engineGetKeyParameters();
+ }
+ catch (Exception e)
+ {
+ throw new InvalidKeyException("can't identify DSA public key: " + key.getClass().getName());
+ }
}
static public AsymmetricKeyParameter generatePrivateKeyParameter(