You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
5.2 KiB
114 lines
5.2 KiB
#if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR) |
|
#pragma warning disable |
|
using System; |
|
using System.Collections; |
|
using System.IO; |
|
|
|
namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls |
|
{ |
|
public interface TlsClient |
|
: TlsPeer |
|
{ |
|
void Init(TlsClientContext context); |
|
|
|
/// <summary>Return the session this client wants to resume, if any.</summary> |
|
/// <remarks> |
|
/// Note that the peer's certificate chain for the session (if any) may need to be periodically revalidated. |
|
/// </remarks> |
|
/// <returns>A <see cref="TlsSession"/> representing the resumable session to be used for this connection, or |
|
/// null to use a new session.</returns> |
|
/// <seealso cref="SessionParameters.PeerCertificate"/> |
|
TlsSession GetSessionToResume(); |
|
|
|
/// <summary>Return the <see cref="TlsPskExternal">external PSKs</see> to offer in the ClientHello.</summary> |
|
/// <remarks>This will only be called when TLS 1.3 or higher is amongst the offered protocol versions.</remarks> |
|
/// <returns>an <see cref="IList"/> of <see cref="TlsPskExternal"/> instances, or null if none should be |
|
/// offered.</returns> |
|
IList GetExternalPsks(); |
|
|
|
bool IsFallback(); |
|
|
|
/// <returns>(Int32 -> byte[])</returns> |
|
/// <exception cref="IOException"/> |
|
IDictionary GetClientExtensions(); |
|
|
|
/// <summary>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.</summary> |
|
/// <remarks> |
|
/// Groups that were not included in the supported_groups extension (by <see cref="GetClientExtensions"/> will |
|
/// be ignored. The protocol will then add a suitable key_share extension to the ClientHello extensions. |
|
/// </remarks> |
|
/// <returns>an <see cref="IList"/> of <see cref="NamedGroup">named group</see> values, possibly empty or null. |
|
/// </returns> |
|
IList GetEarlyKeyShareGroups(); |
|
|
|
/// <exception cref="IOException"/> |
|
void NotifyServerVersion(ProtocolVersion selectedVersion); |
|
|
|
/// <summary>Notifies the client of the session that will be offered in ClientHello for resumption, if any. |
|
/// </summary> |
|
/// <remarks> |
|
/// 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 <see cref="NotifySessionID(byte[])"/>. |
|
/// </remarks> |
|
/// <param name="session">The <see cref="TlsSession"/> representing the resumable session to be offered for |
|
/// this connection, or null if there is none.</param> |
|
/// <seealso cref="NotifySessionID(byte[])"/> |
|
void NotifySessionToResume(TlsSession session); |
|
|
|
/// <summary>Notifies the client of the session_id sent in the ServerHello.</summary> |
|
/// <param name="sessionID"/> |
|
/// <seealso cref="TlsContext.Session"/> |
|
void NotifySessionID(byte[] sessionID); |
|
|
|
void NotifySelectedCipherSuite(int selectedCipherSuite); |
|
|
|
/// <exception cref="IOException"/> |
|
void NotifySelectedPsk(TlsPsk selectedPsk); |
|
|
|
/// <summary>The protocol implementation validates that any server extensions received correspond to client |
|
/// extensions sent.</summary> |
|
/// <remarks> |
|
/// 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. |
|
/// </remarks> |
|
/// <param name="serverExtensions">(Int32 -> byte[])</param> |
|
/// <exception cref="IOException"/> |
|
void ProcessServerExtensions(IDictionary serverExtensions); |
|
|
|
/// <param name="serverSupplementalData">(SupplementalDataEntry)</param> |
|
/// <exception cref="IOException"/> |
|
void ProcessServerSupplementalData(IList serverSupplementalData); |
|
|
|
/// <exception cref="IOException"/> |
|
TlsPskIdentity GetPskIdentity(); |
|
|
|
/// <exception cref="IOException"/> |
|
TlsSrpIdentity GetSrpIdentity(); |
|
|
|
/// <exception cref="IOException"/> |
|
TlsDHGroupVerifier GetDHGroupVerifier(); |
|
|
|
/// <exception cref="IOException"/> |
|
TlsSrpConfigVerifier GetSrpConfigVerifier(); |
|
|
|
/// <exception cref="IOException"/> |
|
TlsAuthentication GetAuthentication(); |
|
|
|
/// <returns>(SupplementalDataEntry)</returns> |
|
/// <exception cref="IOException"/> |
|
IList GetClientSupplementalData(); |
|
|
|
/// <summary>RFC 5077 3.3. NewSessionTicket Handshake Message</summary> |
|
/// <remarks> |
|
/// 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". |
|
/// </remarks> |
|
/// <param name="newSessionTicket">The ticket.</param> |
|
/// <exception cref="IOException"/> |
|
void NotifyNewSessionTicket(NewSessionTicket newSessionTicket); |
|
} |
|
} |
|
#pragma warning restore |
|
#endif
|
|
|