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.
115 lines
5.2 KiB
115 lines
5.2 KiB
8 months ago
|
#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
|