Package org.conscrypt
Class Java8EngineWrapper
- java.lang.Object
-
- javax.net.ssl.SSLEngine
-
- org.conscrypt.AbstractConscryptEngine
-
- org.conscrypt.Java8EngineWrapper
-
final class Java8EngineWrapper extends AbstractConscryptEngine
A wrapper aroundConscryptEnginethat adapts to the new Java 9 (and potentially later patches of 8)setHandshakeApplicationProtocolSelectorAPI (which requires Java 8 for compilation, due to the use ofBiFunction).
-
-
Field Summary
Fields Modifier and Type Field Description private ConscryptEnginedelegateprivate java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String>selector
-
Constructor Summary
Constructors Constructor Description Java8EngineWrapper(ConscryptEngine delegate)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidbeginHandshake()voidcloseInbound()voidcloseOutbound()(package private) byte[]exportKeyingMaterial(java.lang.String label, byte[] context, int length)Exports a value derived from the TLS master secret as described in RFC 5705.java.lang.StringgetApplicationProtocol()(package private) java.lang.String[]getApplicationProtocols()Returns the list of supported ALPN protocols.(package private) byte[]getChannelId()Gets the TLS Channel ID for this server engine.(package private) static javax.net.ssl.SSLEnginegetDelegate(javax.net.ssl.SSLEngine engine)java.lang.RunnablegetDelegatedTask()java.lang.String[]getEnabledCipherSuites()java.lang.String[]getEnabledProtocols()booleangetEnableSessionCreation()java.lang.StringgetHandshakeApplicationProtocol()java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String>getHandshakeApplicationProtocolSelector()javax.net.ssl.SSLEngineResult.HandshakeStatusgetHandshakeStatus()(package private) java.lang.StringgetHostname()Returns the hostname fromAbstractConscryptEngine.setHostname(String)or supplied by thePeerInfoProviderupon creation.booleangetNeedClientAuth()java.lang.StringgetPeerHost()intgetPeerPort()javax.net.ssl.SSLSessiongetSession()javax.net.ssl.SSLParametersgetSSLParameters()java.lang.String[]getSupportedCipherSuites()java.lang.String[]getSupportedProtocols()(package private) byte[]getTlsUnique()Returns the tls-unique channel binding value for this connection, per RFC 5929.booleangetUseClientMode()booleangetWantClientAuth()(package private) javax.net.ssl.SSLSessionhandshakeSession()Work-around to allow this method to be called on older versions of Android.booleanisInboundDone()booleanisOutboundDone()(package private) intmaxSealOverhead()Returns the maximum overhead, in bytes, of sealing a record with SSL.(package private) voidsetApplicationProtocols(java.lang.String[] protocols)Sets the list of ALPN protocols.(package private) voidsetApplicationProtocolSelector(ApplicationProtocolSelector selector)Sets an application-provided ALPN protocol selector.(package private) voidsetBufferAllocator(BufferAllocator bufferAllocator)(package private) voidsetChannelIdEnabled(boolean enabled)Enables/disables TLS Channel ID for this server engine.(package private) voidsetChannelIdPrivateKey(java.security.PrivateKey privateKey)Sets thePrivateKeyto be used for TLS Channel ID by this client engine.voidsetEnabledCipherSuites(java.lang.String[] suites)voidsetEnabledProtocols(java.lang.String[] protocols)voidsetEnableSessionCreation(boolean flag)voidsetHandshakeApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> selector)(package private) voidsetHandshakeListener(HandshakeListener handshakeListener)Sets the listener for the completion of the TLS handshake.(package private) voidsetHostname(java.lang.String hostname)This method enables Server Name Indication (SNI) and overrides thePeerInfoProvidersupplied during engine creation.voidsetNeedClientAuth(boolean need)voidsetSSLParameters(javax.net.ssl.SSLParameters sslParameters)voidsetUseClientMode(boolean mode)(package private) voidsetUseSessionTickets(boolean useSessionTickets)This method enables session ticket support.voidsetWantClientAuth(boolean want)private static ApplicationProtocolSelectortoApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> selector)(package private) javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer[] srcs, int srcsOffset, int srcsLength, java.nio.ByteBuffer[] dsts, int dstsOffset, int dstsLength)(package private) javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer[] srcs, java.nio.ByteBuffer[] dsts)javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer dst)javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer[] dsts)javax.net.ssl.SSLEngineResultunwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer[] dsts, int offset, int length)javax.net.ssl.SSLEngineResultwrap(java.nio.ByteBuffer[] srcs, int srcsOffset, int srcsLength, java.nio.ByteBuffer dst)javax.net.ssl.SSLEngineResultwrap(java.nio.ByteBuffer[] byteBuffers, java.nio.ByteBuffer byteBuffer)javax.net.ssl.SSLEngineResultwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer dst)-
Methods inherited from class org.conscrypt.AbstractConscryptEngine
getHandshakeSession
-
-
-
-
Field Detail
-
delegate
private final ConscryptEngine delegate
-
selector
private java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> selector
-
-
Constructor Detail
-
Java8EngineWrapper
Java8EngineWrapper(ConscryptEngine delegate)
-
-
Method Detail
-
getDelegate
static javax.net.ssl.SSLEngine getDelegate(javax.net.ssl.SSLEngine engine)
-
wrap
public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[] byteBuffers, java.nio.ByteBuffer byteBuffer) throws javax.net.ssl.SSLException- Overrides:
wrapin classjavax.net.ssl.SSLEngine- Throws:
javax.net.ssl.SSLException
-
getSSLParameters
public javax.net.ssl.SSLParameters getSSLParameters()
- Overrides:
getSSLParametersin classjavax.net.ssl.SSLEngine
-
setSSLParameters
public void setSSLParameters(javax.net.ssl.SSLParameters sslParameters)
- Overrides:
setSSLParametersin classjavax.net.ssl.SSLEngine
-
setBufferAllocator
void setBufferAllocator(BufferAllocator bufferAllocator)
- Specified by:
setBufferAllocatorin classAbstractConscryptEngine
-
maxSealOverhead
int maxSealOverhead()
Description copied from class:AbstractConscryptEngineReturns the maximum overhead, in bytes, of sealing a record with SSL.- Specified by:
maxSealOverheadin classAbstractConscryptEngine
-
setChannelIdEnabled
void setChannelIdEnabled(boolean enabled)
Description copied from class:AbstractConscryptEngineEnables/disables TLS Channel ID for this server engine.This method needs to be invoked before the handshake starts.
- Specified by:
setChannelIdEnabledin classAbstractConscryptEngine
-
getChannelId
byte[] getChannelId() throws javax.net.ssl.SSLExceptionDescription copied from class:AbstractConscryptEngineGets the TLS Channel ID for this server engine. Channel ID is only available once the handshake completes.- Specified by:
getChannelIdin classAbstractConscryptEngine- Returns:
- channel ID or
nullif not available. - Throws:
javax.net.ssl.SSLException- if channel ID is available but could not be obtained.
-
setChannelIdPrivateKey
void setChannelIdPrivateKey(java.security.PrivateKey privateKey)
Description copied from class:AbstractConscryptEngineSets thePrivateKeyto be used for TLS Channel ID by this client engine.This method needs to be invoked before the handshake starts.
- Specified by:
setChannelIdPrivateKeyin classAbstractConscryptEngine- Parameters:
privateKey- private key (enables TLS Channel ID) ornullfor no key (disables TLS Channel ID). The private key must be an Elliptic Curve (EC) key based on the NIST P-256 curve (aka SECG secp256r1 or ANSI X9.62 prime256v1).
-
setHandshakeListener
void setHandshakeListener(HandshakeListener handshakeListener)
Description copied from class:AbstractConscryptEngineSets the listener for the completion of the TLS handshake.- Specified by:
setHandshakeListenerin classAbstractConscryptEngine
-
setHostname
void setHostname(java.lang.String hostname)
Description copied from class:AbstractConscryptEngineThis method enables Server Name Indication (SNI) and overrides thePeerInfoProvidersupplied during engine creation.- Specified by:
setHostnamein classAbstractConscryptEngine
-
getHostname
java.lang.String getHostname()
Description copied from class:AbstractConscryptEngineReturns the hostname fromAbstractConscryptEngine.setHostname(String)or supplied by thePeerInfoProviderupon creation. No DNS resolution is attempted before returning the hostname.- Specified by:
getHostnamein classAbstractConscryptEngine
-
getPeerHost
public java.lang.String getPeerHost()
- Specified by:
getPeerHostin classAbstractConscryptEngine
-
getPeerPort
public int getPeerPort()
- Specified by:
getPeerPortin classAbstractConscryptEngine
-
beginHandshake
public void beginHandshake() throws javax.net.ssl.SSLException- Specified by:
beginHandshakein classjavax.net.ssl.SSLEngine- Throws:
javax.net.ssl.SSLException
-
closeInbound
public void closeInbound() throws javax.net.ssl.SSLException- Specified by:
closeInboundin classjavax.net.ssl.SSLEngine- Throws:
javax.net.ssl.SSLException
-
closeOutbound
public void closeOutbound()
- Specified by:
closeOutboundin classjavax.net.ssl.SSLEngine
-
getDelegatedTask
public java.lang.Runnable getDelegatedTask()
- Specified by:
getDelegatedTaskin classjavax.net.ssl.SSLEngine
-
getEnabledCipherSuites
public java.lang.String[] getEnabledCipherSuites()
- Specified by:
getEnabledCipherSuitesin classjavax.net.ssl.SSLEngine
-
getEnabledProtocols
public java.lang.String[] getEnabledProtocols()
- Specified by:
getEnabledProtocolsin classjavax.net.ssl.SSLEngine
-
getEnableSessionCreation
public boolean getEnableSessionCreation()
- Specified by:
getEnableSessionCreationin classjavax.net.ssl.SSLEngine
-
getHandshakeStatus
public javax.net.ssl.SSLEngineResult.HandshakeStatus getHandshakeStatus()
- Specified by:
getHandshakeStatusin classjavax.net.ssl.SSLEngine
-
getNeedClientAuth
public boolean getNeedClientAuth()
- Specified by:
getNeedClientAuthin classjavax.net.ssl.SSLEngine
-
handshakeSession
javax.net.ssl.SSLSession handshakeSession()
Description copied from class:AbstractConscryptEngineWork-around to allow this method to be called on older versions of Android.- Specified by:
handshakeSessionin classAbstractConscryptEngine
-
getSession
public javax.net.ssl.SSLSession getSession()
- Specified by:
getSessionin classjavax.net.ssl.SSLEngine
-
getSupportedCipherSuites
public java.lang.String[] getSupportedCipherSuites()
- Specified by:
getSupportedCipherSuitesin classjavax.net.ssl.SSLEngine
-
getSupportedProtocols
public java.lang.String[] getSupportedProtocols()
- Specified by:
getSupportedProtocolsin classjavax.net.ssl.SSLEngine
-
getUseClientMode
public boolean getUseClientMode()
- Specified by:
getUseClientModein classjavax.net.ssl.SSLEngine
-
getWantClientAuth
public boolean getWantClientAuth()
- Specified by:
getWantClientAuthin classjavax.net.ssl.SSLEngine
-
isInboundDone
public boolean isInboundDone()
- Specified by:
isInboundDonein classjavax.net.ssl.SSLEngine
-
isOutboundDone
public boolean isOutboundDone()
- Specified by:
isOutboundDonein classjavax.net.ssl.SSLEngine
-
setEnabledCipherSuites
public void setEnabledCipherSuites(java.lang.String[] suites)
- Specified by:
setEnabledCipherSuitesin classjavax.net.ssl.SSLEngine
-
setEnabledProtocols
public void setEnabledProtocols(java.lang.String[] protocols)
- Specified by:
setEnabledProtocolsin classjavax.net.ssl.SSLEngine
-
setEnableSessionCreation
public void setEnableSessionCreation(boolean flag)
- Specified by:
setEnableSessionCreationin classjavax.net.ssl.SSLEngine
-
setNeedClientAuth
public void setNeedClientAuth(boolean need)
- Specified by:
setNeedClientAuthin classjavax.net.ssl.SSLEngine
-
setUseClientMode
public void setUseClientMode(boolean mode)
- Specified by:
setUseClientModein classjavax.net.ssl.SSLEngine
-
setWantClientAuth
public void setWantClientAuth(boolean want)
- Specified by:
setWantClientAuthin classjavax.net.ssl.SSLEngine
-
unwrap
public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer dst) throws javax.net.ssl.SSLException- Specified by:
unwrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
unwrap
public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer[] dsts) throws javax.net.ssl.SSLException- Specified by:
unwrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
unwrap
public javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer src, java.nio.ByteBuffer[] dsts, int offset, int length) throws javax.net.ssl.SSLException- Specified by:
unwrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
unwrap
javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer[] srcs, java.nio.ByteBuffer[] dsts) throws javax.net.ssl.SSLException- Specified by:
unwrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
unwrap
javax.net.ssl.SSLEngineResult unwrap(java.nio.ByteBuffer[] srcs, int srcsOffset, int srcsLength, java.nio.ByteBuffer[] dsts, int dstsOffset, int dstsLength) throws javax.net.ssl.SSLException- Specified by:
unwrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
wrap
public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer src, java.nio.ByteBuffer dst) throws javax.net.ssl.SSLException- Specified by:
wrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
wrap
public javax.net.ssl.SSLEngineResult wrap(java.nio.ByteBuffer[] srcs, int srcsOffset, int srcsLength, java.nio.ByteBuffer dst) throws javax.net.ssl.SSLException- Specified by:
wrapin classAbstractConscryptEngine- Throws:
javax.net.ssl.SSLException
-
setUseSessionTickets
void setUseSessionTickets(boolean useSessionTickets)
Description copied from class:AbstractConscryptEngineThis method enables session ticket support.- Specified by:
setUseSessionTicketsin classAbstractConscryptEngine- Parameters:
useSessionTickets- True to enable session tickets
-
setApplicationProtocols
void setApplicationProtocols(java.lang.String[] protocols)
Description copied from class:AbstractConscryptEngineSets the list of ALPN protocols.- Specified by:
setApplicationProtocolsin classAbstractConscryptEngine- Parameters:
protocols- the list of ALPN protocols
-
getApplicationProtocols
java.lang.String[] getApplicationProtocols()
Description copied from class:AbstractConscryptEngineReturns the list of supported ALPN protocols.- Specified by:
getApplicationProtocolsin classAbstractConscryptEngine
-
getApplicationProtocol
public java.lang.String getApplicationProtocol()
- Specified by:
getApplicationProtocolin classAbstractConscryptEngine
-
setApplicationProtocolSelector
void setApplicationProtocolSelector(ApplicationProtocolSelector selector)
Description copied from class:AbstractConscryptEngineSets an application-provided ALPN protocol selector. If provided, this will override the list of protocols set byAbstractConscryptEngine.setApplicationProtocols(String[]).- Specified by:
setApplicationProtocolSelectorin classAbstractConscryptEngine
-
getTlsUnique
byte[] getTlsUnique()
Description copied from class:AbstractConscryptEngineReturns the tls-unique channel binding value for this connection, per RFC 5929. This will returnnullif there is no such value available, such as if the handshake has not yet completed or this connection is closed.- Specified by:
getTlsUniquein classAbstractConscryptEngine
-
exportKeyingMaterial
byte[] exportKeyingMaterial(java.lang.String label, byte[] context, int length) throws javax.net.ssl.SSLExceptionDescription copied from class:AbstractConscryptEngineExports a value derived from the TLS master secret as described in RFC 5705.- Specified by:
exportKeyingMaterialin classAbstractConscryptEngine- Parameters:
label- the label to use in calculating the exported value. This must be an ASCII-only string.context- the application-specific context value to use in calculating the exported value. This may benullto use no application context, which is treated differently than an empty byte array.length- the number of bytes of keying material to return.- Returns:
- a value of the specified length, or
nullif the handshake has not yet completed or the connection has been closed. - Throws:
javax.net.ssl.SSLException- if the value could not be exported.
-
getHandshakeApplicationProtocol
public java.lang.String getHandshakeApplicationProtocol()
- Specified by:
getHandshakeApplicationProtocolin classAbstractConscryptEngine
-
setHandshakeApplicationProtocolSelector
public void setHandshakeApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> selector)
- Overrides:
setHandshakeApplicationProtocolSelectorin classjavax.net.ssl.SSLEngine
-
getHandshakeApplicationProtocolSelector
public java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> getHandshakeApplicationProtocolSelector()
- Overrides:
getHandshakeApplicationProtocolSelectorin classjavax.net.ssl.SSLEngine
-
toApplicationProtocolSelector
private static ApplicationProtocolSelector toApplicationProtocolSelector(java.util.function.BiFunction<javax.net.ssl.SSLEngine,java.util.List<java.lang.String>,java.lang.String> selector)
-
-