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);
}
}