org.bouncycastle.tls.SessionParameters Maven / Gradle / Ivy
package org.bouncycastle.tls;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Hashtable;
import org.bouncycastle.tls.crypto.TlsSecret;
import org.bouncycastle.util.Arrays;
public final class SessionParameters
{
public static final class Builder
{
private int cipherSuite = -1;
private short compressionAlgorithm = -1;
private Certificate localCertificate = null;
private TlsSecret masterSecret = null;
private ProtocolVersion negotiatedVersion;
private Certificate peerCertificate = null;
private byte[] pskIdentity = null;
private byte[] srpIdentity = null;
private byte[] encodedServerExtensions = null;
public Builder()
{
}
public SessionParameters build()
{
validate(this.cipherSuite >= 0, "cipherSuite");
validate(this.compressionAlgorithm >= 0, "compressionAlgorithm");
validate(this.masterSecret != null, "masterSecret");
return new SessionParameters(cipherSuite, compressionAlgorithm, localCertificate, masterSecret,
negotiatedVersion, peerCertificate, pskIdentity, srpIdentity, encodedServerExtensions);
}
public Builder setCipherSuite(int cipherSuite)
{
this.cipherSuite = cipherSuite;
return this;
}
public Builder setCompressionAlgorithm(short compressionAlgorithm)
{
this.compressionAlgorithm = compressionAlgorithm;
return this;
}
public Builder setLocalCertificate(Certificate localCertificate)
{
this.localCertificate = localCertificate;
return this;
}
public Builder setMasterSecret(TlsSecret masterSecret)
{
this.masterSecret = masterSecret;
return this;
}
public Builder setNegotiatedVersion(ProtocolVersion negotiatedVersion)
{
this.negotiatedVersion = negotiatedVersion;
return this;
}
public Builder setPeerCertificate(Certificate peerCertificate)
{
this.peerCertificate = peerCertificate;
return this;
}
/**
* @deprecated Use {@link #setPSKIdentity(byte[])}
*/
public Builder setPskIdentity(byte[] pskIdentity)
{
this.pskIdentity = pskIdentity;
return this;
}
public Builder setPSKIdentity(byte[] pskIdentity)
{
this.pskIdentity = pskIdentity;
return this;
}
public Builder setSRPIdentity(byte[] srpIdentity)
{
this.srpIdentity = srpIdentity;
return this;
}
public Builder setServerExtensions(Hashtable serverExtensions) throws IOException
{
if (serverExtensions == null)
{
encodedServerExtensions = null;
}
else
{
ByteArrayOutputStream buf = new ByteArrayOutputStream();
TlsProtocol.writeExtensions(buf, serverExtensions);
encodedServerExtensions = buf.toByteArray();
}
return this;
}
private void validate(boolean condition, String parameter)
{
if (!condition)
{
throw new IllegalStateException("Required session parameter '" + parameter + "' not configured");
}
}
}
private int cipherSuite;
private short compressionAlgorithm;
private Certificate localCertificate;
private TlsSecret masterSecret;
private ProtocolVersion negotiatedVersion;
private Certificate peerCertificate;
private byte[] pskIdentity = null;
private byte[] srpIdentity = null;
private byte[] encodedServerExtensions;
private SessionParameters(int cipherSuite, short compressionAlgorithm, Certificate localCertificate,
TlsSecret masterSecret, ProtocolVersion negotiatedVersion, Certificate peerCertificate, byte[] pskIdentity,
byte[] srpIdentity, byte[] encodedServerExtensions)
{
this.cipherSuite = cipherSuite;
this.compressionAlgorithm = compressionAlgorithm;
this.localCertificate = localCertificate;
this.masterSecret = masterSecret;
this.negotiatedVersion = negotiatedVersion;
this.peerCertificate = peerCertificate;
this.pskIdentity = Arrays.clone(pskIdentity);
this.srpIdentity = Arrays.clone(srpIdentity);
this.encodedServerExtensions = encodedServerExtensions;
}
public void clear()
{
if (this.masterSecret != null)
{
this.masterSecret.destroy();
}
}
public SessionParameters copy()
{
return new SessionParameters(cipherSuite, compressionAlgorithm, localCertificate, masterSecret,
negotiatedVersion, peerCertificate, pskIdentity, srpIdentity, encodedServerExtensions);
}
public int getCipherSuite()
{
return cipherSuite;
}
public short getCompressionAlgorithm()
{
return compressionAlgorithm;
}
public Certificate getLocalCertificate()
{
return localCertificate;
}
public TlsSecret getMasterSecret()
{
return masterSecret;
}
public ProtocolVersion getNegotiatedVersion()
{
return negotiatedVersion;
}
public Certificate getPeerCertificate()
{
return peerCertificate;
}
/**
* @deprecated Use {@link #getPSKIdentity()}
*/
public byte[] getPskIdentity()
{
return pskIdentity;
}
public byte[] getPSKIdentity()
{
return pskIdentity;
}
public byte[] getSRPIdentity()
{
return srpIdentity;
}
public Hashtable readServerExtensions() throws IOException
{
if (encodedServerExtensions == null)
{
return null;
}
ByteArrayInputStream buf = new ByteArrayInputStream(encodedServerExtensions);
return TlsProtocol.readExtensions(buf);
}
}