List of usage examples for org.bouncycastle.crypto.params DHKeyGenerationParameters DHKeyGenerationParameters
public DHKeyGenerationParameters(SecureRandom random, DHParameters params)
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);//w w w . j av a 2s . com 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:com.licel.jcardsim.crypto.DHKeyImpl.java
License:Apache License
public KeyGenerationParameters getKeyGenerationParameters(SecureRandom rnd) { if (p.isInitialized() && g.isInitialized()) { if (q.isInitialized()) return new DHKeyGenerationParameters(rnd, new DHParameters(p.getBigInteger(), g.getBigInteger(), q.getBigInteger())); else/* www . j a va2 s .c o m*/ return new DHKeyGenerationParameters(rnd, new DHParameters(p.getBigInteger(), g.getBigInteger())); } return getDefaultKeyGenerationParameters(size, rnd); }
From source file:com.licel.jcardsim.crypto.DHKeyImpl.java
License:Apache License
static KeyGenerationParameters getDefaultKeyGenerationParameters(short keySize, SecureRandom rnd) { switch (keySize) { case KeyBuilder.LENGTH_DH_1024: return new DHKeyGenerationParameters(rnd, rfc2409_1024); case LENGTH_DH_1536: return new DHKeyGenerationParameters(rnd, rfc3526_1536); case KeyBuilder.LENGTH_DH_2048: return new DHKeyGenerationParameters(rnd, rfc3526_2048); default://from www .j a v a 2 s.c o m CryptoException.throwIt(CryptoException.ILLEGAL_VALUE); } return null; }
From source file:de.rub.nds.tlsattacker.tls.protocol.handshake.DHEServerKeyExchangeHandler.java
License:Apache License
@Override public byte[] prepareMessageAction() { // To use true DH ephemeral we need to precompute the prime number P(DH modulus) /**int defaultPrimeProbability = 30; DHParametersGenerator generator = new DHParametersGenerator(); //Genration of a higher bit prime number takes too long (512 bits takes 2 seconds) generator.init(512, defaultPrimeProbability, new SecureRandom()); DHParameters params = generator.generateParameters();*/ //from w w w . j a va 2s.c o m //fixed DH modulus P and DH generator G byte [] pArray = ArrayConverter .hexStringToByteArray("ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc" + "74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d" + "51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24" + "117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83" + "655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca1821" + "7c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf695" + "5817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"); byte [] gArray = {0x02}; BigInteger p = new BigInteger(1, pArray); BigInteger g = new BigInteger(1, gArray); DHParameters params = new DHParameters( p, g ); KeyGenerationParameters kgp = new DHKeyGenerationParameters(new SecureRandom(), params); DHKeyPairGenerator keyGen = new DHKeyPairGenerator(); keyGen.init(kgp); AsymmetricCipherKeyPair serverKeyPair = keyGen.generateKeyPair(); DHPublicKeyParameters dhPublic = (DHPublicKeyParameters) serverKeyPair.getPublic(); DHPrivateKeyParameters dhPrivate = (DHPrivateKeyParameters) serverKeyPair.getPrivate(); protocolMessage.setG(dhPublic.getParameters().getG()); protocolMessage.setP(dhPublic.getParameters().getP()); protocolMessage.setPublicKey(dhPublic.getY()); protocolMessage.setPrivateKey(dhPrivate.getX()); tlsContext.setServerDHPrivateKeyParameters(dhPrivate); byte[] serializedP = BigIntegers.asUnsignedByteArray(protocolMessage.getP().getValue()); protocolMessage.setSerializedP(serializedP); protocolMessage.setSerializedPLength(serializedP.length); byte[] serializedG = BigIntegers.asUnsignedByteArray(protocolMessage.getG().getValue()); protocolMessage.setSerializedG(serializedG); protocolMessage.setSerializedGLength(serializedG.length); byte[] serializedPublicKey = BigIntegers.asUnsignedByteArray(protocolMessage.getPublicKey().getValue()); protocolMessage.setSerializedPublicKey(serializedPublicKey); protocolMessage.setSerializedPublicKeyLength(serializedPublicKey.length); byte[] dhParams = ArrayConverter.concatenate(ArrayConverter.intToBytes(protocolMessage.getSerializedPLength() .getValue(), HandshakeByteLength.DH_PARAM_LENGTH), protocolMessage.getSerializedP().getValue(), ArrayConverter.intToBytes(protocolMessage.getSerializedGLength().getValue(), HandshakeByteLength.DH_PARAM_LENGTH), protocolMessage.getSerializedG().getValue(), ArrayConverter.intToBytes(protocolMessage.getSerializedPublicKeyLength().getValue(), HandshakeByteLength.DH_PARAM_LENGTH), protocolMessage.getSerializedPublicKey().getValue()); InputStream is = new ByteArrayInputStream(dhParams); try { ServerDHParams publicKeyParameters = ServerDHParams.parse(is); tlsContext.setServerDHParameters(publicKeyParameters); KeyStore ks = tlsContext.getKeyStore(); SignatureAndHashAlgorithm selectedSignatureHashAlgo = new SignatureAndHashAlgorithm(SignatureAlgorithm.RSA, HashAlgorithm.SHA1); protocolMessage.setSignatureAlgorithm(selectedSignatureHashAlgo.getSignatureAlgorithm().getValue()); protocolMessage.setHashAlgorithm(selectedSignatureHashAlgo.getHashAlgorithm().getValue()); Key key = ks.getKey(tlsContext.getAlias(), tlsContext.getPassword().toCharArray()); RSAPrivateCrtKey rsaKey = (RSAPrivateCrtKey) key; Signature instance = Signature.getInstance(selectedSignatureHashAlgo.getJavaName()); instance.initSign(rsaKey); LOGGER.debug("SignatureAndHashAlgorithm for ServerKeyExchange message: {}", selectedSignatureHashAlgo.getJavaName()); byte[] toBeSignedBytes = ArrayConverter.concatenate(tlsContext.getClientRandom(), tlsContext .getServerRandom(), dhParams); instance.update(toBeSignedBytes); byte[] signature = instance.sign(); protocolMessage.setSignature(signature); protocolMessage.setSignatureLength(signature.length); byte[] result = ArrayConverter.concatenate(dhParams, new byte[] { protocolMessage.getHashAlgorithm().getValue(), protocolMessage.getSignatureAlgorithm().getValue() }, ArrayConverter.intToBytes( protocolMessage.getSignatureLength().getValue(), HandshakeByteLength.SIGNATURE_LENGTH), protocolMessage.getSignature().getValue()); protocolMessage.setLength(result.length); long header = (HandshakeMessageType.SERVER_KEY_EXCHANGE.getValue() << 24) + protocolMessage.getLength().getValue(); protocolMessage.setCompleteResultingMessage(ArrayConverter.concatenate( ArrayConverter.longToUint32Bytes(header), result)); } catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException | InvalidKeyException | SignatureException | IOException ex) { throw new ConfigurationException(ex.getLocalizedMessage(), ex); } return protocolMessage.getCompleteResultingMessage().getValue(); }
From source file:net.java.otr4j.crypto.DHKeyPairOTR3.java
License:LGPL
/** * Generate a DH key pair./*from ww w . j av a 2s . c o m*/ * * @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 ww. j ava 2 s. co 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); } }