Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla-spongycastle.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Dettman <peter.dettman@bouncycastle.org>2013-06-19 10:56:26 +0400
committerPeter Dettman <peter.dettman@bouncycastle.org>2013-06-19 10:56:26 +0400
commita1255722486d074260f8eaefbd0ea383f64c31f8 (patch)
treec7aba18ee7ea21a4be2e058bdc134e75a94ef972 /core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java
parenta30169f9ef80a631056934c29d6d21473cbde018 (diff)
Add ServerDHParams and refactor DHE key exchange code
Diffstat (limited to 'core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java')
-rw-r--r--core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java28
1 files changed, 21 insertions, 7 deletions
diff --git a/core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java b/core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java
index 4a215ec1..e1cd60d6 100644
--- a/core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java
+++ b/core/src/main/java/org/bouncycastle/crypto/tls/TlsDHUtils.java
@@ -20,6 +20,11 @@ public class TlsDHUtils
static final BigInteger ONE = BigInteger.valueOf(1);
static final BigInteger TWO = BigInteger.valueOf(2);
+ public static boolean areCompatibleParameters(DHParameters a, DHParameters b)
+ {
+ return a.getP().equals(b.getP()) && a.getG().equals(b.getG());
+ }
+
public static byte[] calculateDHBasicAgreement(DHPublicKeyParameters publicKey, DHPrivateKeyParameters privateKey)
{
DHBasicAgreement basicAgreement = new DHBasicAgreement();
@@ -40,17 +45,26 @@ public class TlsDHUtils
return dhGen.generateKeyPair();
}
- public static DHPrivateKeyParameters generateEphemeralClientKeyExchange(SecureRandom random, DHParameters dhParams,
+ public static DHPrivateKeyParameters generateEphemeralClientKeyExchange(SecureRandom random, DHParameters dhParameters,
+ OutputStream output) throws IOException
+ {
+ AsymmetricCipherKeyPair dhAgreeClientKeyPair = generateDHKeyPair(random, dhParameters);
+
+ DHPublicKeyParameters dhPublicKey = (DHPublicKeyParameters) dhAgreeClientKeyPair.getPublic();
+ writeDHParameter(dhPublicKey.getY(), output);
+
+ return (DHPrivateKeyParameters) dhAgreeClientKeyPair.getPrivate();
+ }
+
+ public static DHPrivateKeyParameters generateEphemeralServerKeyExchange(SecureRandom random, DHParameters dhParameters,
OutputStream output) throws IOException
{
- AsymmetricCipherKeyPair dhAgreeClientKeyPair = generateDHKeyPair(random, dhParams);
- DHPrivateKeyParameters dhAgreeClientPrivateKey = (DHPrivateKeyParameters) dhAgreeClientKeyPair.getPrivate();
+ AsymmetricCipherKeyPair kp = TlsDHUtils.generateDHKeyPair(random, dhParameters);
- BigInteger Yc = ((DHPublicKeyParameters) dhAgreeClientKeyPair.getPublic()).getY();
- byte[] keData = BigIntegers.asUnsignedByteArray(Yc);
- TlsUtils.writeOpaque16(keData, output);
+ ServerDHParams serverDHParams = new ServerDHParams((DHPublicKeyParameters)kp.getPublic());
+ serverDHParams.encode(output);
- return dhAgreeClientPrivateKey;
+ return (DHPrivateKeyParameters)kp.getPrivate();
}
public static DHPublicKeyParameters validateDHPublicKey(DHPublicKeyParameters key) throws IOException