Package io.netty.handler.ssl
Class CipherSuiteConverter
- java.lang.Object
-
- io.netty.handler.ssl.CipherSuiteConverter
-
@UnstableApi public final class CipherSuiteConverter extends java.lang.Object
Converts a Java cipher suite string to an OpenSSL cipher suite string and vice versa.- See Also:
- Wikipedia page about cipher suite
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classCipherSuiteConverter.CachedValueUsed to store nullable values in a CHM
-
Field Summary
Fields Modifier and Type Field Description private static java.util.concurrent.ConcurrentMap<java.lang.String,CipherSuiteConverter.CachedValue>j2oJava-to-OpenSSL cipher suite conversion map Note that the Java cipher suite has the protocol prefix (TLS_, SSL_)private static java.util.Map<java.lang.String,java.lang.String>j2oTls13private static java.util.regex.PatternJAVA_AES_CBC_PATTERNprivate static java.util.regex.PatternJAVA_AES_PATTERNprivate static java.util.regex.PatternJAVA_CIPHERSUITE_PATTERNA_B_WITH_C_D, where: A - TLS or SSL (protocol) B - handshake algorithm (key exchange and authentication algorithms to be precise) C - bulk cipher D - HMAC algorithm This regular expression assumes that: 1) A is always TLS or SSL, and 2) D is always a single word.private static InternalLoggerloggerprivate static java.util.concurrent.ConcurrentMap<java.lang.String,java.util.Map<java.lang.String,java.lang.String>>o2jOpenSSL-to-Java cipher suite conversion map.private static java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>>o2jTls13private static java.util.regex.PatternOPENSSL_AES_CBC_PATTERNprivate static java.util.regex.PatternOPENSSL_AES_PATTERNprivate static java.util.regex.PatternOPENSSL_CIPHERSUITE_PATTERNA-B-C, where: A - handshake algorithm (key exchange and authentication algorithms to be precise) B - bulk cipher C - HMAC algorithm This regular expression assumes that: 1) A has some deterministic pattern as shown below, and 2) C is always a single word
-
Constructor Summary
Constructors Modifier Constructor Description privateCipherSuiteConverter()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static java.lang.StringcacheFromJava(java.lang.String javaCipherSuite, boolean boringSSL)private static java.util.Map<java.lang.String,java.lang.String>cacheFromOpenSsl(java.lang.String openSslCipherSuite)(package private) static voidclearCache()Clears the cache for testing purpose.(package private) static voidconvertToCipherStrings(java.lang.Iterable<java.lang.String> cipherSuites, java.lang.StringBuilder cipherBuilder, java.lang.StringBuilder cipherTLSv13Builder, boolean boringSSL)Convert the given ciphers if needed to OpenSSL format and append them to the correctStringBuilderdepending on if its a TLSv1.3 cipher or not.(package private) static booleanisJ2OCached(java.lang.String key, java.lang.String value)Tests if the specified key-value pair has been cached in Java-to-OpenSSL cache.(package private) static booleanisO2JCached(java.lang.String key, java.lang.String protocol, java.lang.String value)Tests if the specified key-value pair has been cached in OpenSSL-to-Java cache.static java.lang.StringtoJava(java.lang.String openSslCipherSuite, java.lang.String protocol)Convert from OpenSSL cipher suite name convention to java cipher suite name convention.private static java.lang.StringtoJavaBulkCipher(java.lang.String bulkCipher, boolean export)private static java.lang.StringtoJavaHandshakeAlgo(java.lang.String handshakeAlgo, boolean export)private static java.lang.StringtoJavaHmacAlgo(java.lang.String hmacAlgo)(package private) static java.lang.StringtoJavaUncached(java.lang.String openSslCipherSuite)private static java.lang.StringtoJavaUncached0(java.lang.String openSslCipherSuite, boolean checkTls13)static java.lang.StringtoOpenSsl(java.lang.String javaCipherSuite, boolean boringSSL)Converts the specified Java cipher suite to its corresponding OpenSSL cipher suite name.private static java.lang.StringtoOpenSslBulkCipher(java.lang.String bulkCipher)private static java.lang.StringtoOpenSslHandshakeAlgo(java.lang.String handshakeAlgo)private static java.lang.StringtoOpenSslHmacAlgo(java.lang.String hmacAlgo)(package private) static java.lang.StringtoOpenSslUncached(java.lang.String javaCipherSuite, boolean boringSSL)
-
-
-
Field Detail
-
logger
private static final InternalLogger logger
-
JAVA_CIPHERSUITE_PATTERN
private static final java.util.regex.Pattern JAVA_CIPHERSUITE_PATTERN
A_B_WITH_C_D, where: A - TLS or SSL (protocol) B - handshake algorithm (key exchange and authentication algorithms to be precise) C - bulk cipher D - HMAC algorithm This regular expression assumes that: 1) A is always TLS or SSL, and 2) D is always a single word.
-
OPENSSL_CIPHERSUITE_PATTERN
private static final java.util.regex.Pattern OPENSSL_CIPHERSUITE_PATTERN
A-B-C, where: A - handshake algorithm (key exchange and authentication algorithms to be precise) B - bulk cipher C - HMAC algorithm This regular expression assumes that: 1) A has some deterministic pattern as shown below, and 2) C is always a single word
-
JAVA_AES_CBC_PATTERN
private static final java.util.regex.Pattern JAVA_AES_CBC_PATTERN
-
JAVA_AES_PATTERN
private static final java.util.regex.Pattern JAVA_AES_PATTERN
-
OPENSSL_AES_CBC_PATTERN
private static final java.util.regex.Pattern OPENSSL_AES_CBC_PATTERN
-
OPENSSL_AES_PATTERN
private static final java.util.regex.Pattern OPENSSL_AES_PATTERN
-
j2o
private static final java.util.concurrent.ConcurrentMap<java.lang.String,CipherSuiteConverter.CachedValue> j2o
Java-to-OpenSSL cipher suite conversion map Note that the Java cipher suite has the protocol prefix (TLS_, SSL_)
-
o2j
private static final java.util.concurrent.ConcurrentMap<java.lang.String,java.util.Map<java.lang.String,java.lang.String>> o2j
OpenSSL-to-Java cipher suite conversion map. Note that one OpenSSL cipher suite can be converted to more than one Java cipher suites because a Java cipher suite has the protocol name prefix (TLS_, SSL_)
-
j2oTls13
private static final java.util.Map<java.lang.String,java.lang.String> j2oTls13
-
o2jTls13
private static final java.util.Map<java.lang.String,java.util.Map<java.lang.String,java.lang.String>> o2jTls13
-
-
Method Detail
-
clearCache
static void clearCache()
Clears the cache for testing purpose.
-
isJ2OCached
static boolean isJ2OCached(java.lang.String key, java.lang.String value)Tests if the specified key-value pair has been cached in Java-to-OpenSSL cache.
-
isO2JCached
static boolean isO2JCached(java.lang.String key, java.lang.String protocol, java.lang.String value)Tests if the specified key-value pair has been cached in OpenSSL-to-Java cache.
-
toOpenSsl
public static java.lang.String toOpenSsl(java.lang.String javaCipherSuite, boolean boringSSL)Converts the specified Java cipher suite to its corresponding OpenSSL cipher suite name.- Returns:
nullif the conversion has failed
-
cacheFromJava
private static java.lang.String cacheFromJava(java.lang.String javaCipherSuite, boolean boringSSL)
-
toOpenSslUncached
static java.lang.String toOpenSslUncached(java.lang.String javaCipherSuite, boolean boringSSL)
-
toOpenSslHandshakeAlgo
private static java.lang.String toOpenSslHandshakeAlgo(java.lang.String handshakeAlgo)
-
toOpenSslBulkCipher
private static java.lang.String toOpenSslBulkCipher(java.lang.String bulkCipher)
-
toOpenSslHmacAlgo
private static java.lang.String toOpenSslHmacAlgo(java.lang.String hmacAlgo)
-
toJava
public static java.lang.String toJava(java.lang.String openSslCipherSuite, java.lang.String protocol)Convert from OpenSSL cipher suite name convention to java cipher suite name convention.- Parameters:
openSslCipherSuite- An OpenSSL cipher suite name.protocol- The cryptographic protocol (i.e. SSL, TLS, ...).- Returns:
- The translated cipher suite name according to java conventions (or null if translation was not possible).
-
cacheFromOpenSsl
private static java.util.Map<java.lang.String,java.lang.String> cacheFromOpenSsl(java.lang.String openSslCipherSuite)
-
toJavaUncached
static java.lang.String toJavaUncached(java.lang.String openSslCipherSuite)
-
toJavaUncached0
private static java.lang.String toJavaUncached0(java.lang.String openSslCipherSuite, boolean checkTls13)
-
toJavaHandshakeAlgo
private static java.lang.String toJavaHandshakeAlgo(java.lang.String handshakeAlgo, boolean export)
-
toJavaBulkCipher
private static java.lang.String toJavaBulkCipher(java.lang.String bulkCipher, boolean export)
-
toJavaHmacAlgo
private static java.lang.String toJavaHmacAlgo(java.lang.String hmacAlgo)
-
convertToCipherStrings
static void convertToCipherStrings(java.lang.Iterable<java.lang.String> cipherSuites, java.lang.StringBuilder cipherBuilder, java.lang.StringBuilder cipherTLSv13Builder, boolean boringSSL)Convert the given ciphers if needed to OpenSSL format and append them to the correctStringBuilderdepending on if its a TLSv1.3 cipher or not. If this methods returns without throwing an exception its guaranteed that at least one of theStringBuilders contain some ciphers that can be used to configure OpenSSL.
-
-