AbstractTlsClient (Bouncy Castle Library 1.54 API Specification)
Date: 2015-12-29

org.bouncycastle.crypto.tls

## Class AbstractTlsClient

- java.lang.Object
- - org.bouncycastle.crypto.tls.AbstractTlsPeer
  - - org.bouncycastle.crypto.tls.AbstractTlsClient

- All Implemented Interfaces:
    TlsClient, TlsPeer
  Direct Known Subclasses:
    DefaultTlsClient, PSKTlsClient, SRPTlsClient

      public abstract class AbstractTlsClient
      extends AbstractTlsPeer
      implements TlsClient

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected TlsCipherFactory` | `cipherFactory`
    `protected short[]` | `clientECPointFormats`
    `protected TlsClientContext` | `context`
    `protected int[]` | `namedCurves`
    `protected int` | `selectedCipherSuite`
    `protected short` | `selectedCompressionMethod`
    `protected short[]` | `serverECPointFormats`
    `protected java.util.Vector` | `supportedSignatureAlgorithms`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AbstractTlsClient()`
    `AbstractTlsClient(TlsCipherFactory cipherFactory)`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected boolean` | `allowUnexpectedServerExtension(java.lang.Integer extensionType, byte[] extensionData)`
    `protected void` | `checkForUnexpectedServerExtension(java.util.Hashtable serverExtensions, java.lang.Integer extensionType)`
    `TlsCipher` | `getCipher()`
    `java.util.Hashtable` | `getClientExtensions()`
    `ProtocolVersion` | `getClientHelloRecordLayerVersion()` Return the `ProtocolVersion` to use for the TLSPlaintext.version field prior to receiving the server version.
    `java.util.Vector` | `getClientSupplementalData()`
    `ProtocolVersion` | `getClientVersion()`
    `TlsCompression` | `getCompression()`
    `short[]` | `getCompressionMethods()`
    `ProtocolVersion` | `getMinimumVersion()`
    `TlsSession` | `getSessionToResume()` Return the session this client wants to resume, if any.
    `void` | `init(TlsClientContext context)`
    `boolean` | `isFallback()`
    `void` | `notifyNewSessionTicket(NewSessionTicket newSessionTicket)` RFC 5077 3.3.
    `void` | `notifySelectedCipherSuite(int selectedCipherSuite)`
    `void` | `notifySelectedCompressionMethod(short selectedCompressionMethod)`
    `void` | `notifyServerVersion(ProtocolVersion serverVersion)`
    `void` | `notifySessionID(byte[] sessionID)` Notifies the client of the session_id sent in the ServerHello.
    `void` | `processServerExtensions(java.util.Hashtable serverExtensions)`
    `void` | `processServerSupplementalData(java.util.Vector serverSupplementalData)`

    - ### Methods inherited from class org.bouncycastle.crypto.tls.AbstractTlsPeer

      `notifyAlertRaised, notifyAlertReceived, notifyHandshakeComplete, notifySecureRenegotiation, shouldUseGMTUnixTime`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface org.bouncycastle.crypto.tls.TlsClient

      `getAuthentication, getCipherSuites, getKeyExchange`

    - ### Methods inherited from interface org.bouncycastle.crypto.tls.TlsPeer

      `notifyAlertRaised, notifyAlertReceived, notifyHandshakeComplete, notifySecureRenegotiation, shouldUseGMTUnixTime`

- - ### Field Detail

    - #### cipherFactory

          protected TlsCipherFactory cipherFactory

    - #### context

          protected TlsClientContext context

    - #### supportedSignatureAlgorithms

          protected java.util.Vector supportedSignatureAlgorithms

    - #### namedCurves

          protected int[] namedCurves

    - #### clientECPointFormats

          protected short[] clientECPointFormats

    - #### serverECPointFormats

          protected short[] serverECPointFormats

    - #### selectedCipherSuite

          protected int selectedCipherSuite

    - #### selectedCompressionMethod

          protected short selectedCompressionMethod

  - ### Constructor Detail

    - #### AbstractTlsClient

          public AbstractTlsClient()

    - #### AbstractTlsClient

          public AbstractTlsClient(TlsCipherFactory cipherFactory)

  - ### Method Detail

    - #### allowUnexpectedServerExtension

          protected boolean allowUnexpectedServerExtension(java.lang.Integer extensionType,
                                               byte[] extensionData)
                                                    throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### checkForUnexpectedServerExtension

          protected void checkForUnexpectedServerExtension(java.util.Hashtable serverExtensions,
                                               java.lang.Integer extensionType)
                                                    throws java.io.IOException

      Throws:
        `java.io.IOException`

    - #### init

          public void init(TlsClientContext context)

      Specified by:
        `init` in interface `TlsClient`

    - #### getSessionToResume

          public TlsSession getSessionToResume()

      Description copied from interface: `TlsClient`
      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.
      Specified by:
        `getSessionToResume` in interface `TlsClient`
      Returns:
        A `TlsSession` representing the resumable session to be used for this connection, or null to use a new session.
      See Also:
        `SessionParameters.getPeerCertificate()`

    - #### getClientHelloRecordLayerVersion

          public ProtocolVersion getClientHelloRecordLayerVersion()

      Description copied from interface: `TlsClient`
      Return the `ProtocolVersion` to use for the TLSPlaintext.version field prior to receiving the server version. NOTE: This method is not called for DTLS.

      See RFC 5246 E.1.: "TLS clients that wish to negotiate with older servers MAY send any value {03,XX} as the record layer version number. Typical values would be {03,00}, the lowest version number supported by the client, and the value of ClientHello.client_version. No single value will guarantee interoperability with all old servers, but this is a complex topic beyond the scope of this document."

      Specified by:
        `getClientHelloRecordLayerVersion` in interface `TlsClient`
      Returns:
        The `ProtocolVersion` to use.

    - #### getClientVersion

          public ProtocolVersion getClientVersion()

      Specified by:
        `getClientVersion` in interface `TlsClient`

    - #### isFallback

          public boolean isFallback()

      Specified by:
        `isFallback` in interface `TlsClient`

    - #### getClientExtensions

          public java.util.Hashtable getClientExtensions()
                                                  throws java.io.IOException

      Specified by:
        `getClientExtensions` in interface `TlsClient`
      Throws:
        `java.io.IOException`

    - #### getMinimumVersion

          public ProtocolVersion getMinimumVersion()

    - #### notifyServerVersion

          public void notifyServerVersion(ProtocolVersion serverVersion)
                                   throws java.io.IOException

      Specified by:
        `notifyServerVersion` in interface `TlsClient`
      Throws:
        `java.io.IOException`

    - #### getCompressionMethods

          public short[] getCompressionMethods()

      Specified by:
        `getCompressionMethods` in interface `TlsClient`

    - #### notifySessionID

          public void notifySessionID(byte[] sessionID)

      Description copied from interface: `TlsClient`
      Notifies the client of the session_id sent in the ServerHello.
      Specified by:
        `notifySessionID` in interface `TlsClient`
      See Also:
        `TlsContext.getResumableSession()`

    - #### notifySelectedCipherSuite

          public void notifySelectedCipherSuite(int selectedCipherSuite)

      Specified by:
        `notifySelectedCipherSuite` in interface `TlsClient`

    - #### notifySelectedCompressionMethod

          public void notifySelectedCompressionMethod(short selectedCompressionMethod)

      Specified by:
        `notifySelectedCompressionMethod` in interface `TlsClient`

    - #### processServerExtensions

          public void processServerExtensions(java.util.Hashtable serverExtensions)
                                       throws java.io.IOException

      Specified by:
        `processServerExtensions` in interface `TlsClient`
      Throws:
        `java.io.IOException`

    - #### processServerSupplementalData

          public void processServerSupplementalData(java.util.Vector serverSupplementalData)
                                             throws java.io.IOException

      Specified by:
        `processServerSupplementalData` in interface `TlsClient`
      Throws:
        `java.io.IOException`

    - #### getClientSupplementalData

          public java.util.Vector getClientSupplementalData()
                                                     throws java.io.IOException

      Specified by:
        `getClientSupplementalData` in interface `TlsClient`
      Throws:
        `java.io.IOException`

    - #### getCompression

          public TlsCompression getCompression()
                                        throws java.io.IOException

      Specified by:
        `getCompression` in interface `TlsPeer`
      Throws:
        `java.io.IOException`

    - #### getCipher

          public TlsCipher getCipher()
                              throws java.io.IOException

      Specified by:
        `getCipher` in interface `TlsPeer`
      Throws:
        `java.io.IOException`

    - #### notifyNewSessionTicket

          public void notifyNewSessionTicket(NewSessionTicket newSessionTicket)
                                      throws java.io.IOException

      Description copied from interface: `TlsClient`
      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.

      Specified by:
        `notifyNewSessionTicket` in interface `TlsClient`
      Parameters:
        `newSessionTicket` - The ticket.
      Throws:
        `java.io.IOException`