org.bouncycastle.jcajce.provider.asymmetric.dsa.DSAUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcprov-ext-debug-jdk18on Show documentation
Show all versions of bcprov-ext-debug-jdk18on Show documentation
The Bouncy Castle Crypto package is a Java implementation of cryptographic algorithms. This jar contains JCE provider and lightweight API for the Bouncy Castle Cryptography APIs for Java 1.8 and later with debug enabled.
The newest version!
package org.bouncycastle.jcajce.provider.asymmetric.dsa;
import java.math.BigInteger;
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 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;
import org.bouncycastle.crypto.params.DSAPrivateKeyParameters;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.util.Fingerprint;
/**
* utility class for converting jce/jca DSA objects
* objects into their org.bouncycastle.crypto counterparts.
*/
public class DSAUtil
{
public static final ASN1ObjectIdentifier[] dsaOids =
{
X9ObjectIdentifiers.id_dsa,
OIWObjectIdentifiers.dsaWithSHA1,
X9ObjectIdentifiers.id_dsa_with_sha1
};
/**
* Return true if the passed in OID could be associated with a DSA key.
*
* @param algOid algorithm OID from a key.
* @return true if it's for a DSA key, false otherwise.
*/
public static boolean isDsaOid(
ASN1ObjectIdentifier algOid)
{
for (int i = 0; i != dsaOids.length; i++)
{
if (algOid.equals(dsaOids[i]))
{
return true;
}
}
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 BCDSAPublicKey)
{
return ((BCDSAPublicKey)key).engineGetKeyParameters();
}
if (key instanceof DSAPublicKey)
{
return new BCDSAPublicKey((DSAPublicKey)key).engineGetKeyParameters();
}
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(
PrivateKey key)
throws InvalidKeyException
{
if (key instanceof DSAPrivateKey)
{
DSAPrivateKey k = (DSAPrivateKey)key;
return new DSAPrivateKeyParameters(k.getX(),
new DSAParameters(k.getParams().getP(), k.getParams().getQ(), k.getParams().getG()));
}
throw new InvalidKeyException("can't identify DSA private key.");
}
static String generateKeyFingerprint(BigInteger y, DSAParams params)
{
return new Fingerprint(Arrays.concatenate(y.toByteArray(), params.getP().toByteArray(), params.getQ().toByteArray(), params.getG().toByteArray())).toString();
}
}