Example usage for org.bouncycastle.crypto.params DHParameters DHParameters

List of usage examples for org.bouncycastle.crypto.params DHParameters DHParameters

Introduction

In this page you can find the example usage for org.bouncycastle.crypto.params DHParameters DHParameters.

Prototype

public DHParameters(BigInteger p, BigInteger g, BigInteger q, int l) 

Source Link

Usage

From source file:com.eucalyptus.crypto.util.BCSslSetup.java

License:Open Source License

@SuppressWarnings("unchecked")
static void initBouncyCastleDHParamsInternal() throws NoSuchFieldException, IllegalAccessException {
    final Class<?> DH = KeyPairGeneratorSpi.class;
    final Field paramsField = DH.getDeclaredField("params");
    paramsField.setAccessible(true);/*from   www .  j  a  va  2  s.  co m*/
    final Hashtable<Integer, DHKeyGenerationParameters> params = (Hashtable<Integer, DHKeyGenerationParameters>) paramsField
            .get(null);
    if (params.isEmpty()) {
        final SecureRandom random = new SecureRandom();
        for (final DHParameterSpec parameterSpec : parameterSpecs) {
            params.put(parameterSpec.getL(), new DHKeyGenerationParameters(random,
                    new DHParameters(parameterSpec.getP(), parameterSpec.getG(), null, 0)));
        }
    }
}

From source file:net.java.otr4j.crypto.DHKeyPairOTR3.java

License:LGPL

/**
 * Generate a DH key pair./*from   ww  w  .java2  s  .  c om*/
 *
 * @param random the SecureRandom instance
 * @return Returns the DH key pair.
 */
@Nonnull
public static DHKeyPairOTR3 generateDHKeyPair(final SecureRandom random) {

    // Generate a AsymmetricCipherKeyPair using BC.
    final DHParameters dhParams = new DHParameters(MODULUS, GENERATOR, null, DH_PRIVATE_KEY_MINIMUM_BIT_LENGTH);
    final DHKeyGenerationParameters params = new DHKeyGenerationParameters(random, dhParams);
    final DHKeyPairGenerator kpGen = new DHKeyPairGenerator();
    kpGen.init(params);
    final KeyFactory keyFac;
    try {
        keyFac = KeyFactory.getInstance(KF_DH);
    } catch (final NoSuchAlgorithmException ex) {
        throw new IllegalStateException("DH key factory unavailable.", ex);
    }

    final AsymmetricCipherKeyPair pair = kpGen.generateKeyPair();
    final DHPublicKeyParameters pub = convertToPublicKeyParams(pair.getPublic());
    final DHPublicKeySpec pubKeySpecs = new DHPublicKeySpec(pub.getY(), MODULUS, GENERATOR);
    final DHPublicKey pubKey;
    try {
        pubKey = (DHPublicKey) keyFac.generatePublic(pubKeySpecs);
    } catch (final InvalidKeySpecException ex) {
        throw new IllegalStateException("Failed to generate DH public key.", ex);
    }

    final DHPrivateKeyParameters priv = convertToPrivateKeyParams(pair.getPrivate());
    final DHParameters dhParameters = priv.getParameters();
    final DHPrivateKeySpec privKeySpecs = new DHPrivateKeySpec(priv.getX(), dhParameters.getP(),
            dhParameters.getG());
    final DHPrivateKey privKey;
    try {
        privKey = (DHPrivateKey) keyFac.generatePrivate(privKeySpecs);
    } catch (final InvalidKeySpecException ex) {
        throw new IllegalStateException("Failed to generate DH private key.", ex);
    }

    return new DHKeyPairOTR3(privKey, pubKey);
}

From source file:net.java.otr4j.crypto.OtrCryptoEngineImpl.java

License:Apache License

@Override
public KeyPair generateDHKeyPair() throws OtrCryptoException {

    // Generate a AsymmetricCipherKeyPair using BC.
    DHParameters dhParams = new DHParameters(MODULUS, GENERATOR, null, DH_PRIVATE_KEY_MINIMUM_BIT_LENGTH);
    DHKeyGenerationParameters params = new DHKeyGenerationParameters(new SecureRandom(), dhParams);
    DHKeyPairGenerator kpGen = new DHKeyPairGenerator();

    kpGen.init(params);/*from  w w w.j  a  v  a  2s .  c  o  m*/
    AsymmetricCipherKeyPair pair = kpGen.generateKeyPair();

    // Convert this AsymmetricCipherKeyPair to a standard JCE KeyPair.
    DHPublicKeyParameters pub = (DHPublicKeyParameters) pair.getPublic();
    DHPrivateKeyParameters priv = (DHPrivateKeyParameters) pair.getPrivate();

    try {
        KeyFactory keyFac = KeyFactory.getInstance("DH");

        DHPublicKeySpec pubKeySpecs = new DHPublicKeySpec(pub.getY(), MODULUS, GENERATOR);
        DHPublicKey pubKey = (DHPublicKey) keyFac.generatePublic(pubKeySpecs);

        DHParameters dhParameters = priv.getParameters();
        DHPrivateKeySpec privKeySpecs = new DHPrivateKeySpec(priv.getX(), dhParameters.getP(),
                dhParameters.getG());
        DHPrivateKey privKey = (DHPrivateKey) keyFac.generatePrivate(privKeySpecs);

        return new KeyPair(pubKey, privKey);
    } catch (Exception e) {
        throw new OtrCryptoException(e);
    }
}

From source file:net.jradius.client.auth.EAPTLSAuthenticator.java

License:Open Source License

/**
 * Create a private key parameter from the passed in PKCS8 PrivateKeyInfo object.
 * /*from   w w w  . j  ava 2 s .com*/
 * @param keyInfo the PrivateKeyInfo object containing the key material
 * @return a suitable private key parameter
 * @throws IOException on an error decoding the key
 */
public static AsymmetricKeyParameter createKey(PrivateKeyInfo keyInfo) throws IOException {
    AlgorithmIdentifier algId = keyInfo.getAlgorithmId();

    if (algId.getObjectId().equals(PKCSObjectIdentifiers.rsaEncryption)) {
        RSAPrivateKeyStructure keyStructure = new RSAPrivateKeyStructure(
                (ASN1Sequence) keyInfo.getPrivateKey());

        return new RSAPrivateCrtKeyParameters(keyStructure.getModulus(), keyStructure.getPublicExponent(),
                keyStructure.getPrivateExponent(), keyStructure.getPrime1(), keyStructure.getPrime2(),
                keyStructure.getExponent1(), keyStructure.getExponent2(), keyStructure.getCoefficient());
    } else if (algId.getObjectId().equals(PKCSObjectIdentifiers.dhKeyAgreement)) {
        DHParameter params = new DHParameter((ASN1Sequence) keyInfo.getAlgorithmId().getParameters());
        DERInteger derX = (DERInteger) keyInfo.getPrivateKey();

        BigInteger lVal = params.getL();
        int l = lVal == null ? 0 : lVal.intValue();
        DHParameters dhParams = new DHParameters(params.getP(), params.getG(), null, l);

        return new DHPrivateKeyParameters(derX.getValue(), dhParams);
    } else if (algId.getObjectId().equals(OIWObjectIdentifiers.elGamalAlgorithm)) {
        ElGamalParameter params = new ElGamalParameter((ASN1Sequence) keyInfo.getAlgorithmId().getParameters());
        DERInteger derX = (DERInteger) keyInfo.getPrivateKey();

        return new ElGamalPrivateKeyParameters(derX.getValue(),
                new ElGamalParameters(params.getP(), params.getG()));
    } else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_dsa)) {
        DERInteger derX = (DERInteger) keyInfo.getPrivateKey();
        DEREncodable de = keyInfo.getAlgorithmId().getParameters();

        DSAParameters parameters = null;
        if (de != null) {
            DSAParameter params = DSAParameter.getInstance(de.getDERObject());
            parameters = new DSAParameters(params.getP(), params.getQ(), params.getG());
        }

        return new DSAPrivateKeyParameters(derX.getValue(), parameters);
    } else if (algId.getObjectId().equals(X9ObjectIdentifiers.id_ecPublicKey)) {
        X962Parameters params = new X962Parameters((DERObject) keyInfo.getAlgorithmId().getParameters());
        ECDomainParameters dParams = null;

        if (params.isNamedCurve()) {
            DERObjectIdentifier oid = (DERObjectIdentifier) params.getParameters();
            X9ECParameters ecP = X962NamedCurves.getByOID(oid);

            if (ecP == null) {
                ecP = SECNamedCurves.getByOID(oid);

                if (ecP == null) {
                    ecP = NISTNamedCurves.getByOID(oid);

                    if (ecP == null) {
                        ecP = TeleTrusTNamedCurves.getByOID(oid);
                    }
                }
            }

            dParams = new ECDomainParameters(ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed());
        } else {
            X9ECParameters ecP = new X9ECParameters((ASN1Sequence) params.getParameters());
            dParams = new ECDomainParameters(ecP.getCurve(), ecP.getG(), ecP.getN(), ecP.getH(), ecP.getSeed());
        }

        ECPrivateKeyStructure ec = new ECPrivateKeyStructure((ASN1Sequence) keyInfo.getPrivateKey());

        return new ECPrivateKeyParameters(ec.getKey(), dParams);
    } else {
        throw new RuntimeException("algorithm identifier in key not recognised");
    }
}