using System; using Org.BouncyCastle.Tls.Crypto; namespace Org.BouncyCastle.Tls { /// Base interface for a TLS context implementation. public interface TlsContext { TlsCrypto Crypto { get; } TlsNonceGenerator NonceGenerator { get; } SecurityParameters SecurityParameters { get; } /// Return true if this context is for a server, false otherwise. /// true for a server based context, false for a client based one. bool IsServer { get; } ProtocolVersion[] ClientSupportedVersions { get; } ProtocolVersion ClientVersion { get; } ProtocolVersion RsaPreMasterSecretVersion { get; } ProtocolVersion ServerVersion { get; } /// Used to get the resumable session, if any, used by this connection. /// /// Only available after the handshake has successfully completed. /// /// A representing the resumable session used by this connection, or null if /// no resumable session available. /// TlsSession ResumableSession { get; } /// Used to get the session information for this connection. /// /// Only available after the handshake has successfully completed. Use /// to find out if the session is resumable. /// /// A representing the session used by this connection. /// TlsSession Session { get; } object UserObject { get; set; } /// Export the value of the specified channel binding. /// /// Only available after the handshake has successfully completed. /// /// A constant specifying the channel binding to /// export. /// A copy of the channel binding data as a byte[], or null if the binding could not be /// determined. byte[] ExportChannelBinding(int channelBinding); /// Export (early data) keying material according to RFC 5705: "Keying Material Exporters for TLS", as /// updated for TLS 1.3 (RFC 8446). /// /// NOTE: for use in settings where an exporter is needed for 0-RTT data. /// /// indicates which application will use the exported keys. /// allows the application using the exporter to mix its own data with the TLS PRF /// for the exporter output. /// the number of bytes to generate. /// a pseudorandom bit string of 'length' bytes generated from the (exporter_)master_secret. byte[] ExportEarlyKeyingMaterial(string asciiLabel, byte[] context_value, int length); /// Export keying material according to RFC 5705: "Keying Material Exporters for TLS", as updated for /// TLS 1.3 (RFC 8446) when negotiated. /// indicates which application will use the exported keys. /// allows the application using the exporter to mix its own data with the TLS PRF /// for the exporter output. /// the number of bytes to generate. /// a pseudorandom bit string of 'length' bytes generated from the (exporter_)master_secret. byte[] ExportKeyingMaterial(string asciiLabel, byte[] context_value, int length); } }