package org.bouncycastle.crypto.tls; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.math.BigInteger; import org.bouncycastle.crypto.params.DHParameters; import org.bouncycastle.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))); } }