diff options
Diffstat (limited to 'libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/tls/ServerDHParams.java')
-rw-r--r-- | libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/tls/ServerDHParams.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/tls/ServerDHParams.java b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/tls/ServerDHParams.java new file mode 100644 index 000000000..fa22e629d --- /dev/null +++ b/libraries/spongycastle/core/src/main/java/org/spongycastle/crypto/tls/ServerDHParams.java @@ -0,0 +1,63 @@ +package org.spongycastle.crypto.tls; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.math.BigInteger; + +import org.spongycastle.crypto.params.DHParameters; +import org.spongycastle.crypto.params.DHPublicKeyParameters; + +public class ServerDHParams +{ + protected DHPublicKeyParameters publicKey; + + public ServerDHParams(DHPublicKeyParameters publicKey) + { + if (publicKey == null) + { + throw new IllegalArgumentException("'publicKey' cannot be null"); + } + + this.publicKey = publicKey; + } + + public DHPublicKeyParameters getPublicKey() + { + return publicKey; + } + + /** + * Encode this {@link ServerDHParams} to an {@link OutputStream}. + * + * @param output + * the {@link OutputStream} to encode to. + * @throws IOException + */ + public void encode(OutputStream output) throws IOException + { + DHParameters dhParameters = publicKey.getParameters(); + BigInteger Ys = publicKey.getY(); + + TlsDHUtils.writeDHParameter(dhParameters.getP(), output); + TlsDHUtils.writeDHParameter(dhParameters.getG(), output); + TlsDHUtils.writeDHParameter(Ys, output); + } + + /** + * Parse a {@link ServerDHParams} from an {@link InputStream}. + * + * @param input + * the {@link InputStream} to parse from. + * @return a {@link ServerDHParams} object. + * @throws IOException + */ + public static ServerDHParams parse(InputStream input) throws IOException + { + BigInteger p = TlsDHUtils.readDHParameter(input); + BigInteger g = TlsDHUtils.readDHParameter(input); + BigInteger Ys = TlsDHUtils.readDHParameter(input); + + return new ServerDHParams(new DHPublicKeyParameters(Ys, new DHParameters(p, g))); + } +} |