<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />

SessionParameters

public sealed class SessionParameters
using Org.BouncyCastle.Tls.Crypto; using Org.BouncyCastle.Utilities; using System; using System.Collections.Generic; using System.IO; namespace Org.BouncyCastle.Tls { public sealed class SessionParameters { public sealed class Builder { private int m_cipherSuite = -1; private Certificate m_localCertificate; private TlsSecret m_masterSecret; private ProtocolVersion m_negotiatedVersion; private Certificate m_peerCertificate; private byte[] m_pskIdentity; private byte[] m_srpIdentity; private byte[] m_encodedServerExtensions; private bool m_extendedMasterSecret; public SessionParameters Build() { Validate(m_cipherSuite >= 0, "cipherSuite"); Validate(m_masterSecret != null, "masterSecret"); return new SessionParameters(m_cipherSuite, m_localCertificate, m_masterSecret, m_negotiatedVersion, m_peerCertificate, m_pskIdentity, m_srpIdentity, m_encodedServerExtensions, m_extendedMasterSecret); } public Builder SetCipherSuite(int cipherSuite) { m_cipherSuite = cipherSuite; return this; } public Builder SetExtendedMasterSecret(bool extendedMasterSecret) { m_extendedMasterSecret = extendedMasterSecret; return this; } public Builder SetLocalCertificate(Certificate localCertificate) { m_localCertificate = localCertificate; return this; } public Builder SetMasterSecret(TlsSecret masterSecret) { m_masterSecret = masterSecret; return this; } public Builder SetNegotiatedVersion(ProtocolVersion negotiatedVersion) { m_negotiatedVersion = negotiatedVersion; return this; } public Builder SetPeerCertificate(Certificate peerCertificate) { m_peerCertificate = peerCertificate; return this; } public Builder SetPskIdentity(byte[] pskIdentity) { m_pskIdentity = pskIdentity; return this; } public Builder SetSrpIdentity(byte[] srpIdentity) { m_srpIdentity = srpIdentity; return this; } public Builder SetServerExtensions(IDictionary<int, byte[]> serverExtensions) { if (serverExtensions == null || serverExtensions.Count < 1) m_encodedServerExtensions = null; else { MemoryStream memoryStream = new MemoryStream(); TlsProtocol.WriteExtensions(memoryStream, serverExtensions); m_encodedServerExtensions = memoryStream.ToArray(); } return this; } private void Validate(bool condition, string parameter) { if (!condition) throw new InvalidOperationException("Required session parameter '" + parameter + "' not configured"); } } private readonly int m_cipherSuite; private readonly Certificate m_localCertificate; private readonly TlsSecret m_masterSecret; private readonly ProtocolVersion m_negotiatedVersion; private readonly Certificate m_peerCertificate; private readonly byte[] m_pskIdentity; private readonly byte[] m_srpIdentity; private readonly byte[] m_encodedServerExtensions; private readonly bool m_extendedMasterSecret; public int CipherSuite => m_cipherSuite; public bool IsExtendedMasterSecret => m_extendedMasterSecret; public Certificate LocalCertificate => m_localCertificate; public TlsSecret MasterSecret => m_masterSecret; public ProtocolVersion NegotiatedVersion => m_negotiatedVersion; public Certificate PeerCertificate => m_peerCertificate; public byte[] PskIdentity => m_pskIdentity; public byte[] SrpIdentity => m_srpIdentity; private SessionParameters(int cipherSuite, Certificate localCertificate, TlsSecret masterSecret, ProtocolVersion negotiatedVersion, Certificate peerCertificate, byte[] pskIdentity, byte[] srpIdentity, byte[] encodedServerExtensions, bool extendedMasterSecret) { m_cipherSuite = cipherSuite; m_localCertificate = localCertificate; m_masterSecret = masterSecret; m_negotiatedVersion = negotiatedVersion; m_peerCertificate = peerCertificate; m_pskIdentity = Arrays.Clone(pskIdentity); m_srpIdentity = Arrays.Clone(srpIdentity); m_encodedServerExtensions = encodedServerExtensions; m_extendedMasterSecret = extendedMasterSecret; } public void Clear() { if (m_masterSecret != null) m_masterSecret.Destroy(); } public SessionParameters Copy() { return new SessionParameters(m_cipherSuite, m_localCertificate, m_masterSecret, m_negotiatedVersion, m_peerCertificate, m_pskIdentity, m_srpIdentity, m_encodedServerExtensions, m_extendedMasterSecret); } public IDictionary<int, byte[]> ReadServerExtensions() { if (m_encodedServerExtensions == null) return null; return TlsProtocol.ReadExtensions(new MemoryStream(m_encodedServerExtensions, false)); } } }