123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
- #pragma warning disable
- using System;
- using System.Collections;
- using System.IO;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Tls.Crypto;
- using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
- namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls
- {
- public sealed class SessionParameters
- {
- public sealed class Builder
- {
- private int m_cipherSuite = -1;
- private Certificate m_localCertificate = null;
- private TlsSecret m_masterSecret = null;
- private ProtocolVersion m_negotiatedVersion;
- private Certificate m_peerCertificate = null;
- private byte[] m_pskIdentity = null;
- private byte[] m_srpIdentity = null;
- private byte[] m_encodedServerExtensions = null;
- private bool m_extendedMasterSecret = false;
- public Builder()
- {
- }
- 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)
- {
- this.m_cipherSuite = cipherSuite;
- return this;
- }
- public Builder SetExtendedMasterSecret(bool extendedMasterSecret)
- {
- this.m_extendedMasterSecret = extendedMasterSecret;
- return this;
- }
- public Builder SetLocalCertificate(Certificate localCertificate)
- {
- this.m_localCertificate = localCertificate;
- return this;
- }
- public Builder SetMasterSecret(TlsSecret masterSecret)
- {
- this.m_masterSecret = masterSecret;
- return this;
- }
- public Builder SetNegotiatedVersion(ProtocolVersion negotiatedVersion)
- {
- this.m_negotiatedVersion = negotiatedVersion;
- return this;
- }
- public Builder SetPeerCertificate(Certificate peerCertificate)
- {
- this.m_peerCertificate = peerCertificate;
- return this;
- }
- public Builder SetPskIdentity(byte[] pskIdentity)
- {
- this.m_pskIdentity = pskIdentity;
- return this;
- }
- public Builder SetSrpIdentity(byte[] srpIdentity)
- {
- this.m_srpIdentity = srpIdentity;
- return this;
- }
- /// <exception cref="IOException"/>
- public Builder SetServerExtensions(IDictionary serverExtensions)
- {
- if (serverExtensions == null || serverExtensions.Count < 1)
- {
- this.m_encodedServerExtensions = null;
- }
- else
- {
- MemoryStream buf = new MemoryStream();
- TlsProtocol.WriteExtensions(buf, serverExtensions);
- this.m_encodedServerExtensions = buf.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;
- private SessionParameters(int cipherSuite, Certificate localCertificate, TlsSecret masterSecret,
- ProtocolVersion negotiatedVersion, Certificate peerCertificate, byte[] pskIdentity, byte[] srpIdentity,
- byte[] encodedServerExtensions, bool extendedMasterSecret)
- {
- this.m_cipherSuite = cipherSuite;
- this.m_localCertificate = localCertificate;
- this.m_masterSecret = masterSecret;
- this.m_negotiatedVersion = negotiatedVersion;
- this.m_peerCertificate = peerCertificate;
- this.m_pskIdentity = Arrays.Clone(pskIdentity);
- this.m_srpIdentity = Arrays.Clone(srpIdentity);
- this.m_encodedServerExtensions = encodedServerExtensions;
- this.m_extendedMasterSecret = extendedMasterSecret;
- }
- public int CipherSuite
- {
- get { return m_cipherSuite; }
- }
- 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 bool IsExtendedMasterSecret
- {
- get { return m_extendedMasterSecret; }
- }
- public Certificate LocalCertificate
- {
- get { return m_localCertificate; }
- }
- public TlsSecret MasterSecret
- {
- get { return m_masterSecret; }
- }
- public ProtocolVersion NegotiatedVersion
- {
- get { return m_negotiatedVersion; }
- }
- public Certificate PeerCertificate
- {
- get { return m_peerCertificate; }
- }
- public byte[] PskIdentity
- {
- get { return m_pskIdentity; }
- }
- /// <exception cref="IOException"/>
- public IDictionary ReadServerExtensions()
- {
- if (m_encodedServerExtensions == null)
- return null;
- return TlsProtocol.ReadExtensions(new MemoryStream(m_encodedServerExtensions, false));
- }
- public byte[] SrpIdentity
- {
- get { return m_srpIdentity; }
- }
- }
- }
- #pragma warning restore
- #endif
|