using System;
using System.Collections.Generic;
using System.IO;
namespace Org.BouncyCastle.Tls
{
public interface TlsClient
: TlsPeer
{
void Init(TlsClientContext context);
/// Return the session this client wants to resume, if any.
///
/// Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated.
///
/// A representing the resumable session to be used for this connection, or
/// null to use a new session.
///
TlsSession GetSessionToResume();
/// Return the external PSKs to offer in the ClientHello.
/// This will only be called when TLS 1.3 or higher is amongst the offered protocol versions.
/// an of instances, or null if none should be
/// offered.
IList GetExternalPsks();
bool IsFallback();
/// (Int32 -> byte[])
///
IDictionary GetClientExtensions();
/// If this client is offering TLS 1.3 or higher, this method may be called to determine for which
/// groups a key share should be included in the initial ClientHello.
///
/// Groups that were not included in the supported_groups extension (by will
/// be ignored. The protocol will then add a suitable key_share extension to the ClientHello extensions.
///
/// an of named group values, possibly empty or
/// null.
///
IList GetEarlyKeyShareGroups();
///
void NotifyServerVersion(ProtocolVersion selectedVersion);
/// Notifies the client of the session that will be offered in ClientHello for resumption, if any.
///
///
/// This will be either the session returned from {@link #getSessionToResume()} or null if that session was
/// unusable. NOTE: the actual negotiated session_id is notified by .
///
/// The representing the resumable session to be offered for
/// this connection, or null if there is none.
///
void NotifySessionToResume(TlsSession session);
/// Notifies the client of the session_id sent in the ServerHello.
///
///
void NotifySessionID(byte[] sessionID);
void NotifySelectedCipherSuite(int selectedCipherSuite);
///
void NotifySelectedPsk(TlsPsk selectedPsk);
/// The protocol implementation validates that any server extensions received correspond to client
/// extensions sent.
///
/// If further processing of the server extensions is needed, it can be done in this callback. NOTE: This is
/// not called for session resumption handshakes.
///
/// (Int32 -> byte[])
///
void ProcessServerExtensions(IDictionary serverExtensions);
/// (SupplementalDataEntry)
///
void ProcessServerSupplementalData(IList serverSupplementalData);
///
TlsPskIdentity GetPskIdentity();
///
TlsSrpIdentity GetSrpIdentity();
///
TlsDHGroupVerifier GetDHGroupVerifier();
///
TlsSrpConfigVerifier GetSrpConfigVerifier();
///
TlsAuthentication GetAuthentication();
/// (SupplementalDataEntry)
///
IList GetClientSupplementalData();
/// RFC 5077 3.3. NewSessionTicket Handshake Message
///
/// This method will be called (only) when a NewSessionTicket handshake message is received. The ticket is
/// opaque to the client and clients MUST NOT examine the ticket under the assumption that it complies with e.g.
/// RFC 5077 4. "Recommended Ticket Construction".
///
/// The ticket.
///
void NotifyNewSessionTicket(NewSessionTicket newSessionTicket);
}
}