public static KeyPair createKeyPair(OctetString publicKeyOctets, OctetString privateKeyOctets, DHParameters dhParameters) { KeyFactory keyFactory = null; try { keyFactory = KeyFactory.getInstance(DIFFIE_HELLMAN); BigInteger y = bytesToBigInteger(publicKeyOctets.getValue()); DHPublicKeySpec dhPublicKeySpec = new DHPublicKeySpec(y, dhParameters.getPrime(), dhParameters.getGenerator()); PublicKey publicKey = keyFactory.generatePublic(dhPublicKeySpec); BigInteger x = bytesToBigInteger(privateKeyOctets.getValue()); DHPrivateKeySpec dhPrivateKeySpec = new DHPrivateKeySpec(x, dhParameters.getPrime(), dhParameters.getGenerator()); PrivateKey privateKey = keyFactory.generatePrivate(dhPrivateKeySpec); return new KeyPair(publicKey, privateKey); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (InvalidKeySpecException e) { throw new RuntimeException(e); } }
public static KeyPair createKeyPair(OctetString publicKeyOctets, OctetString privateKeyOctets, DHParameters dhParameters) { KeyFactory keyFactory = null; try { keyFactory = KeyFactory.getInstance(DIFFIE_HELLMAN); BigInteger y = bytesToBigInteger(publicKeyOctets.getValue()); DHPublicKeySpec dhPublicKeySpec = new DHPublicKeySpec(y, dhParameters.getPrime(), dhParameters.getGenerator()); PublicKey publicKey = keyFactory.generatePublic(dhPublicKeySpec); BigInteger x = bytesToBigInteger(privateKeyOctets.getValue()); DHPrivateKeySpec dhPrivateKeySpec = new DHPrivateKeySpec(x, dhParameters.getPrime(), dhParameters.getGenerator()); PrivateKey privateKey = keyFactory.generatePrivate(dhPrivateKeySpec); return new KeyPair(publicKey, privateKey); } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } catch (InvalidKeySpecException e) { throw new RuntimeException(e); } }
public static byte[] computeSharedKey(KeyAgreement keyAgreement, byte[] publicKey, DHParameters dhParameters) { if (keyAgreement == null) { return null; } try { KeyFactory keyFactory = KeyFactory.getInstance(DIFFIE_HELLMAN); BigInteger y = bytesToBigInteger(publicKey); DHPublicKeySpec dhPublicKeySpec = new DHPublicKeySpec(y, dhParameters.getPrime(), dhParameters.getGenerator()); PublicKey pubKey = keyFactory.generatePublic(dhPublicKeySpec); keyAgreement.doPhase(pubKey, true); byte[] secret = keyAgreement.generateSecret(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Computing shared key "+new OctetString(secret).toHexString()+" from public key "+ new OctetString(publicKey).toHexString()+" and parameters "+dhParameters); } return secret; } catch (Exception e) { throw new RuntimeException(e); } }
public static byte[] computeSharedKey(KeyAgreement keyAgreement, byte[] publicKey, DHParameters dhParameters) { if (keyAgreement == null) { return null; } try { KeyFactory keyFactory = KeyFactory.getInstance(DIFFIE_HELLMAN); BigInteger y = bytesToBigInteger(publicKey); DHPublicKeySpec dhPublicKeySpec = new DHPublicKeySpec(y, dhParameters.getPrime(), dhParameters.getGenerator()); PublicKey pubKey = keyFactory.generatePublic(dhPublicKeySpec); keyAgreement.doPhase(pubKey, true); byte[] secret = keyAgreement.generateSecret(); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Computing shared key "+new OctetString(secret).toHexString()+" from public key "+ new OctetString(publicKey).toHexString()+" and parameters "+dhParameters); } return secret; } catch (Exception e) { throw new RuntimeException(e); } }