Author: markt
Date: Tue Jul 29 13:15:07 2014
New Revision: 1614336

URL: http://svn.apache.org/r1614336
Log:
Preparation for supporting more than one JSSE name for a cipher (different 
implementations may use different names) and for renaming enumeration entries 
to use the names from the TLS cipher registry to make it clear which cipher is 
being referred to.

Modified:
    tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/Cipher.java
    
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/OpenSSLCipherConfigurationParser.java

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/Cipher.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/Cipher.java?rev=1614336&r1=1614335&r2=1614336&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/Cipher.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/Cipher.java Tue 
Jul 29 13:15:07 2014
@@ -17,6 +17,10 @@
 
 package org.apache.tomcat.util.net.jsse.openssl;
 
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
 /**
  * All the standard cipher suites for SSL/TSL.
  *
@@ -37,6 +41,7 @@ enum Cipher {
     /* The RSA ciphers */
     // Cipher 01
     SSL_RSA_WITH_NULL_MD5("NULL-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.eNULL,
@@ -49,6 +54,7 @@ enum Cipher {
             0),
     // Cipher 02
     SSL_RSA_WITH_NULL_SHA("NULL-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.eNULL,
@@ -61,6 +67,7 @@ enum Cipher {
             0),
     // Cipher 03
     SSL_RSA_EXPORT_WITH_RC4_40_MD5("EXP-RC4-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -73,6 +80,7 @@ enum Cipher {
             128),
     // Cipher 04
     SSL_RSA_WITH_RC4_128_MD5("RC4-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -85,6 +93,7 @@ enum Cipher {
             128),
     // Cipher 05
     SSL_RSA_WITH_RC4_128_SHA("RC4-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -97,6 +106,7 @@ enum Cipher {
             128),
     // Cipher 06
     SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5("EXP-RC2-CBC-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC2,
@@ -109,6 +119,7 @@ enum Cipher {
             128),
     // Cipher 07
     SSL_RSA_WITH_IDEA_CBC_SHA("IDEA-CBC-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.IDEA,
@@ -121,6 +132,7 @@ enum Cipher {
             128),
     // Cipher 08
     SSL_RSA_EXPORT_WITH_DES40_CBC_SHA("EXP-DES-CBC-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.DES,
@@ -133,6 +145,7 @@ enum Cipher {
             56),
     // Cipher 09
     SSL_RSA_WITH_DES_CBC_SHA("DES-CBC-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.DES,
@@ -145,6 +158,7 @@ enum Cipher {
             56),
     // Cipher 0A
     SSL_RSA_WITH_3DES_EDE_CBC_SHA("DES-CBC3-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.TRIPLE_DES,
@@ -158,6 +172,7 @@ enum Cipher {
     /* The DH ciphers */
     // Cipher 0B
     SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA("EXP-DH-DSS-DES-CBC-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.DES,
@@ -170,6 +185,7 @@ enum Cipher {
             56),
     // Cipher 0C
     SSL_DH_DSS_WITH_DES_CBC_SHA("DH-DSS-DES-CBC-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.DES,
@@ -182,6 +198,7 @@ enum Cipher {
             56),
     // Cipher 0D
     SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA("DH-DSS-DES-CBC3-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.TRIPLE_DES,
@@ -194,6 +211,7 @@ enum Cipher {
             168),
     // Cipher 0E
     SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA("EXP-DH-RSA-DES-CBC-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.DES,
@@ -206,6 +224,7 @@ enum Cipher {
             56),
     // Cipher 0F
     SSL_DH_RSA_WITH_DES_CBC_SHA("DH-RSA-DES-CBC-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.DES,
@@ -218,6 +237,7 @@ enum Cipher {
             56),
     // Cipher 10
     SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA("DH-RSA-DES-CBC3-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.TRIPLE_DES,
@@ -231,6 +251,7 @@ enum Cipher {
     /* The Ephemeral DH ciphers */
     // Cipher 11
     SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA("EXP-EDH-DSS-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.DES,
@@ -243,6 +264,7 @@ enum Cipher {
             56),
     // Cipher 12
     SSL_DHE_DSS_WITH_DES_CBC_SHA("EDH-DSS-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.DES,
@@ -255,6 +277,7 @@ enum Cipher {
             56),
     // Cipher 13
     SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA("EDH-DSS-DES-CBC3-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.TRIPLE_DES,
@@ -267,6 +290,7 @@ enum Cipher {
             168),
     // Cipher 14
     TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA("EXP-EDH-RSA-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.DES,
@@ -279,6 +303,7 @@ enum Cipher {
             56),
     // Cipher 15
     TLS_DHE_RSA_WITH_DES_CBC_SHA("EDH-RSA-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.DES,
@@ -291,6 +316,7 @@ enum Cipher {
             56),
     // Cipher 16
     TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA("EDH-RSA-DES-CBC3-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.TRIPLE_DES,
@@ -303,6 +329,7 @@ enum Cipher {
             168),
     // Cipher 17
     TLS_DH_anon_EXPORT_WITH_RC4_40_MD5("EXP-ADH-RC4-MD5",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.RC4,
@@ -315,6 +342,7 @@ enum Cipher {
             128),
     // Cipher 18
     TLS_DH_anon_WITH_RC4_128_MD5("ADH-RC4-MD5",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.RC4,
@@ -327,6 +355,7 @@ enum Cipher {
             128),
     // Cipher 19
     TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA("EXP-ADH-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.DES,
@@ -339,6 +368,7 @@ enum Cipher {
             128),
     // Cipher 1A
     TLS_DH_anon_WITH_DES_CBC_SHA("ADH-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.DES,
@@ -351,6 +381,7 @@ enum Cipher {
             56),
     // Cipher 1B
     TLS_DH_anon_WITH_3DES_EDE_CBC_SHA("ADH-DES-CBC3-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.TRIPLE_DES,
@@ -364,6 +395,7 @@ enum Cipher {
     /* Fortezza ciphersuite from SSL 3.0 spec */
     // Cipher 1C
     SSL_FORTEZZA_DMS_WITH_NULL_SHA("FZA-NULL-SHA",
+            null,
             KeyExchange.FZA,
             Authentication.FZA,
             Encryption.eNULL,
@@ -376,6 +408,7 @@ enum Cipher {
             0),
     // Cipher 1D
     SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA("FZA-FZA-CBC-SHA",
+            null,
             KeyExchange.FZA,
             Authentication.FZA,
             Encryption.FZA,
@@ -388,6 +421,7 @@ enum Cipher {
             0),
     // Cipher 1E
     SSL_FORTEZZA_DMS_WITH_RC4_128_SHA("FZA-RC4-SHA",
+            null,
             KeyExchange.FZA,
             Authentication.FZA,
             Encryption.RC4,
@@ -401,6 +435,7 @@ enum Cipher {
     /* The Kerberos ciphers*/
     // Cipher 1E
     /*TLS_KRB5_WITH_DES_CBC_SHA("KRB5-DES-CBC-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.DES,
@@ -413,6 +448,7 @@ enum Cipher {
             56),
     // Cipher 1F
     TLS_KRB5_WITH_3DES_EDE_CBC_SHA("KRB5-DES-CBC3-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.TRIPLE_DES,
@@ -425,6 +461,7 @@ enum Cipher {
             168),
     // Cipher 20
     TLS_KRB5_WITH_RC4_128_SHA("KRB5-RC4-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.RC4,
@@ -437,6 +474,7 @@ enum Cipher {
             128),
     // Cipher 21
     TLS_KRB5_WITH_IDEA_CBC_SHA("KRB5-IDEA-CBC-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.IDEA,
@@ -449,6 +487,7 @@ enum Cipher {
             128),
     // Cipher 22
     TLS_KRB5_WITH_DES_CBC_MD5("KRB5-DES-CBC-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.DES,
@@ -461,6 +500,7 @@ enum Cipher {
             56),
     // Cipher 23
     TLS_KRB5_WITH_3DES_EDE_CBC_MD5("KRB5-DES-CBC3-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.TRIPLE_DES,
@@ -473,6 +513,7 @@ enum Cipher {
             168),
     // Cipher 24
     TLS_KRB5_WITH_RC4_128_MD5("KRB5-RC4-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.RC4,
@@ -485,6 +526,7 @@ enum Cipher {
             128),
     // Cipher 25
     TLS_KRB5_WITH_IDEA_CBC_MD5("KRB5-IDEA-CBC-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.IDEA,
@@ -497,6 +539,7 @@ enum Cipher {
             128),
     // Cipher 26
     TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA("EXP-KRB5-DES-CBC-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.DES,
@@ -509,6 +552,7 @@ enum Cipher {
             56),
     // Cipher 27
     TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA("EXP-KRB5-RC2-CBC-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.RC2,
@@ -521,6 +565,7 @@ enum Cipher {
             128),
     // Cipher 28
     TLS_KRB5_EXPORT_WITH_RC4_40_SHA("EXP-KRB5-RC4-SHA",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.RC4,
@@ -533,6 +578,7 @@ enum Cipher {
             128),
     // Cipher 29
     TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5("EXP-KRB5-DES-CBC-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.DES,
@@ -545,6 +591,7 @@ enum Cipher {
             56),
     // Cipher 2A
     TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5("EXP-KRB5-RC2-CBC-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.RC2,
@@ -557,6 +604,7 @@ enum Cipher {
             128),
     // Cipher 2B
     TLS_KRB5_EXPORT_WITH_RC4_40_MD5("EXP-KRB5-RC4-MD5",
+            null,
             KeyExchange.KRB5,
             Authentication.KRB5,
             Encryption.RC4,
@@ -570,6 +618,7 @@ enum Cipher {
     /* New AES ciphersuites */
     // Cipher 2F
     TLS_RSA_WITH_AES_128_CBC_SHA("AES128-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.AES128,
@@ -582,6 +631,7 @@ enum Cipher {
             128),
     // Cipher 30
     TLS_DH_DSS_WITH_AES_128_CBC_SHA("DH-DSS-AES128-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.AES128,
@@ -594,6 +644,7 @@ enum Cipher {
             128),
     // Cipher 31
     TLS_DH_RSA_WITH_AES_128_CBC_SHA("DH-RSA-AES128-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.AES128,
@@ -606,6 +657,7 @@ enum Cipher {
             128),
     // Cipher 32
     TLS_DHE_DSS_WITH_AES_128_CBC_SHA("DHE-DSS-AES128-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.AES128,
@@ -618,6 +670,7 @@ enum Cipher {
             128),
     // Cipher 33
     TLS_DHE_RSA_WITH_AES_128_CBC_SHA("DHE-RSA-AES128-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.AES128,
@@ -630,6 +683,7 @@ enum Cipher {
             128),
     // Cipher 34
     TLS_DH_anon_WITH_AES_128_CBC_SHA("ADH-AES128-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.AES128,
@@ -642,6 +696,7 @@ enum Cipher {
             128),
     // Cipher 35
     TLS_RSA_WITH_AES_256_CBC_SHA("AES256-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.AES256,
@@ -654,6 +709,7 @@ enum Cipher {
             256),
     // Cipher 36
     TLS_DH_DSS_WITH_AES_256_CBC_SHA("DH-DSS-AES256-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.AES256,
@@ -666,6 +722,7 @@ enum Cipher {
             256),
     // Cipher 37
     TLS_DH_RSA_WITH_AES_256_CBC_SHA("DH-RSA-AES256-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.AES256,
@@ -678,6 +735,7 @@ enum Cipher {
             256),
     // Cipher 38
     TLS_DHE_DSS_WITH_AES_256_CBC_SHA("DHE-DSS-AES256-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.AES256,
@@ -690,6 +748,7 @@ enum Cipher {
             256),
     // Cipher 39
     TLS_DHE_RSA_WITH_AES_256_CBC_SHA("DHE-RSA-AES256-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.AES256,
@@ -701,6 +760,7 @@ enum Cipher {
             256,
             256), // Cipher 3A
     TLS_DH_anon_WITH_AES_256_CBC_SHA("ADH-AES256-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.AES256,
@@ -714,6 +774,7 @@ enum Cipher {
     /* TLS v1.2 ciphersuites */
     // Cipher 3B
     TLS_RSA_WITH_NULL_SHA256("NULL-SHA256",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.eNULL,
@@ -726,6 +787,7 @@ enum Cipher {
             0),
     // Cipher 3C
     TLS_RSA_WITH_AES_128_CBC_SHA256("AES128-SHA256",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.AES128,
@@ -738,6 +800,7 @@ enum Cipher {
             128),
     // Cipher 3D
     TLS_RSA_WITH_AES_256_CBC_SHA256("AES256-SHA256",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.AES256,
@@ -750,6 +813,7 @@ enum Cipher {
             256),
     // Cipher 3E
     TLS_DH_DSS_WITH_AES_128_CBC_SHA256("DH-DSS-AES128-SHA256",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.AES128,
@@ -762,6 +826,7 @@ enum Cipher {
             128),
     // Cipher 3F
     TLS_DH_RSA_WITH_AES_128_CBC_SHA256("DH-RSA-AES128-SHA256",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.AES128,
@@ -774,6 +839,7 @@ enum Cipher {
             128),
     // Cipher 40
     TLS_DHE_DSS_WITH_AES_128_CBC_SHA256("DHE-DSS-AES128-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.AES128,
@@ -787,6 +853,7 @@ enum Cipher {
     /* Camellia ciphersuites from RFC4132 (128-bit portion) */
     // Cipher 41
     TLS_RSA_WITH_CAMELLIA_128_CBC_SHA("CAMELLIA128-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.CAMELLIA128,
@@ -799,6 +866,7 @@ enum Cipher {
             128),
     // Cipher 42
     TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA("DH-DSS-CAMELLIA128-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.CAMELLIA128,
@@ -811,6 +879,7 @@ enum Cipher {
             128),
     // Cipher 43
     TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA("DH-RSA-CAMELLIA128-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.CAMELLIA128,
@@ -823,6 +892,7 @@ enum Cipher {
             128),
     // Cipher 44
     TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA("DHE-DSS-CAMELLIA128-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.CAMELLIA128,
@@ -835,6 +905,7 @@ enum Cipher {
             128),
     // Cipher 45
     TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA("DHE-RSA-CAMELLIA128-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.CAMELLIA128,
@@ -847,6 +918,7 @@ enum Cipher {
             128),
     // Cipher 46
     TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA("ADH-CAMELLIA128-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.CAMELLIA128,
@@ -860,6 +932,7 @@ enum Cipher {
     /* New TLS Export CipherSuites from expired ID */
     // Cipher 60
     SSL_RSA_EXPORT1024_WITH_RC4_56_MD5("EXP1024-RC4-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -872,6 +945,7 @@ enum Cipher {
             128),
     // Cipher 61
     SSL_RSA_EXPORT1024_WITH_RC2_CBC_56_MD("EXP1024-RC2-CBC-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC2,
@@ -884,6 +958,7 @@ enum Cipher {
             128),
     // Cipher 62
     SSL_RSA_EXPORT1024_WITH_DES_CBC_SHA("EXP1024-DES-CBC-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.DES,
@@ -896,6 +971,7 @@ enum Cipher {
             56),
     // Cipher 63
     SSL_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA("EXP1024-DHE-DSS-DES-CBC-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.DES,
@@ -908,6 +984,7 @@ enum Cipher {
             56),
     // Cipher 64
     SSL_RSA_EXPORT1024_WITH_RC4_56_SHA("EXP1024-RC4-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -920,6 +997,7 @@ enum Cipher {
             128),
     // Cipher 65
     SSL_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA("EXP1024-DHE-DSS-RC4-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.RC4,
@@ -932,6 +1010,7 @@ enum Cipher {
             128),
     // Cipher 66
     SSL_DHE_DSS_WITH_RC4_128_SHA("DHE-DSS-RC4-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.RC4,
@@ -945,6 +1024,7 @@ enum Cipher {
     /* TLS v1.2 ciphersuites */
     // Cipher 67
     TLS_DHE_RSA_WITH_AES_128_CBC_SHA256("DHE-RSA-AES128-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.AES128,
@@ -957,6 +1037,7 @@ enum Cipher {
             128),
     // Cipher 68
     TLS_DH_DSS_WITH_AES_256_CBC_SHA256("DH-DSS-AES256-SHA256",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.AES256,
@@ -969,6 +1050,7 @@ enum Cipher {
             256),
     // Cipher 69
     TLS_DH_RSA_WITH_AES_256_CBC_SHA256("DH-RSA-AES256-SHA256",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.AES256,
@@ -981,6 +1063,7 @@ enum Cipher {
             256),
     // Cipher 6A
     TLS_DHE_DSS_WITH_AES_256_CBC_SHA256("DHE-DSS-AES256-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.AES256,
@@ -993,6 +1076,7 @@ enum Cipher {
             256),
     // Cipher 6B
     TLS_DHE_RSA_WITH_AES_256_CBC_SHA256("DHE-RSA-AES256-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.AES256,
@@ -1005,6 +1089,7 @@ enum Cipher {
             256),
     // Cipher 6C
     TLS_DH_anon_WITH_AES_128_CBC_SHA256("ADH-AES128-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.AES128,
@@ -1018,6 +1103,7 @@ enum Cipher {
     ),
     // Cipher 6D
     TLS_DH_anon_WITH_AES_256_CBC_SHA256("ADH-AES256-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.AES256,
@@ -1030,6 +1116,7 @@ enum Cipher {
             256),
     /* GOST Ciphersuites */
     TLS_GOSTR341094_WITH_28147_CNT_IMIT("GOST94-GOST89-GOST89",
+            null,
             KeyExchange.GOST,
             Authentication.GOST94,
             Encryption.eGOST2814789CNT,
@@ -1041,6 +1128,7 @@ enum Cipher {
             256,
             256),
     TLS_GOSTR341001_WITH_28147_CNT_IMIT("GOST2001-GOST89-GOST89",
+            null,
             KeyExchange.GOST,
             Authentication.GOST01,
             Encryption.eGOST2814789CNT,
@@ -1052,6 +1140,7 @@ enum Cipher {
             256,
             256),
     TLS_GOSTR341094_WITH_NULL_GOSTR3411("GOST94-NULL-GOST94",
+            null,
             KeyExchange.GOST,
             Authentication.GOST94,
             Encryption.eNULL,
@@ -1063,6 +1152,7 @@ enum Cipher {
             0,
             0),
     TLS_GOSTR341001_WITH_NULL_GOSTR3411("GOST2001-NULL-GOST94",
+            null,
             KeyExchange.GOST,
             Authentication.GOST01,
             Encryption.eNULL,
@@ -1076,6 +1166,7 @@ enum Cipher {
     /* Camellia ciphersuites from RFC4132 (256-bit portion) */
     // Cipher 84
     TLS_RSA_WITH_CAMELLIA_256_CBC_SHA("CAMELLIA256-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.CAMELLIA256,
@@ -1088,6 +1179,7 @@ enum Cipher {
             256),
     // Cipher 85
     TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA("DH-DSS-CAMELLIA256-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.CAMELLIA256,
@@ -1100,6 +1192,7 @@ enum Cipher {
             256),
     // Cipher 86
     TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SH("DH-RSA-CAMELLIA256-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.CAMELLIA256,
@@ -1112,6 +1205,7 @@ enum Cipher {
             256),
     // Cipher 87
     TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA("DHE-DSS-CAMELLIA256-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.CAMELLIA256,
@@ -1124,6 +1218,7 @@ enum Cipher {
             256),
     // Cipher 88
     TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA("DHE-RSA-CAMELLIA256-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.CAMELLIA256,
@@ -1135,6 +1230,7 @@ enum Cipher {
             256,
             256), // Cipher 89
     TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA("ADH-CAMELLIA256-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.CAMELLIA256,
@@ -1147,6 +1243,7 @@ enum Cipher {
             256),
     // Cipher 8A
     TLS_PSK_WITH_RC4_128_SHA("PSK-RC4-SHA",
+            null,
             KeyExchange.PSK,
             Authentication.PSK,
             Encryption.RC4,
@@ -1159,6 +1256,7 @@ enum Cipher {
             128),
     // Cipher 8B
     TLS_PSK_WITH_3DES_EDE_CBC_SHA("PSK-3DES-EDE-CBC-SHA",
+            null,
             KeyExchange.PSK,
             Authentication.PSK,
             Encryption.TRIPLE_DES,
@@ -1172,6 +1270,7 @@ enum Cipher {
     ),
     // Cipher 8C
     TLS_PSK_WITH_AES_128_CBC_SHA("PSK-AES128-CBC-SHA",
+            null,
             KeyExchange.PSK,
             Authentication.PSK,
             Encryption.AES128,
@@ -1185,6 +1284,7 @@ enum Cipher {
     ),
     // Cipher 8D
     TLS_PSK_WITH_AES_256_CBC_SHA("PSK-AES256-CBC-SHA",
+            null,
             KeyExchange.PSK,
             Authentication.PSK,
             Encryption.AES256,
@@ -1199,6 +1299,7 @@ enum Cipher {
     /* SEED ciphersuites from RFC4162 */
     // Cipher 96
     TLS_RSA_WITH_SEED_CBC_SHA("SEED-SHA",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.SEED,
@@ -1212,6 +1313,7 @@ enum Cipher {
     ),
     // Cipher 97
     TLS_DH_DSS_WITH_SEED_CBC_SHA("DH-DSS-SEED-SHA",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.SEED,
@@ -1225,6 +1327,7 @@ enum Cipher {
     ),
     // Cipher 98
     TLS_DH_RSA_WITH_SEED_CBC_SHA("DH-RSA-SEED-SHA",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.SEED,
@@ -1238,6 +1341,7 @@ enum Cipher {
     ),
     // Cipher 99
     TLS_DHE_DSS_WITH_SEED_CBC_SHA("DHE-DSS-SEED-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.SEED,
@@ -1251,6 +1355,7 @@ enum Cipher {
     ),
     // Cipher 9A
     TLS_DHE_RSA_WITH_SEED_CBC_SHA("DHE-RSA-SEED-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.SEED,
@@ -1264,6 +1369,7 @@ enum Cipher {
     ),
     // Cipher 9B
     TLS_DH_anon_WITH_SEED_CBC_SHA("ADH-SEED-SHA",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.SEED,
@@ -1278,6 +1384,7 @@ enum Cipher {
     /* GCM ciphersuites from RFC5288 */
     // Cipher 9C
     TLS_RSA_WITH_AES_128_GCM_SHA256("AES128-GCM-SHA256",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.AES128GCM,
@@ -1291,6 +1398,7 @@ enum Cipher {
     ),
     // Cipher 9D
     TLS_RSA_WITH_AES_256_GCM_SHA384("AES256-GCM-SHA384",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.AES256GCM,
@@ -1304,6 +1412,7 @@ enum Cipher {
     ),
     // Cipher 9E
     TLS_DHE_RSA_WITH_AES_128_GCM_SHA256("DHE-RSA-AES128-GCM-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.AES128GCM,
@@ -1317,6 +1426,7 @@ enum Cipher {
     ),
     // Cipher 9F
     TLS_DHE_RSA_WITH_AES_256_GCM_SHA384("DHE-RSA-AES256-GCM-SHA384",
+            null,
             KeyExchange.EDH,
             Authentication.RSA,
             Encryption.AES256GCM,
@@ -1330,6 +1440,7 @@ enum Cipher {
     ),
     // Cipher A0
     TLS_DH_RSA_WITH_AES_128_GCM_SHA256("DH-RSA-AES128-GCM-SHA256",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.AES128GCM,
@@ -1343,6 +1454,7 @@ enum Cipher {
     ),
     // Cipher A1
     TLS_DH_RSA_WITH_AES_256_GCM_SHA384("DH-RSA-AES256-GCM-SHA384",
+            null,
             KeyExchange.DHr,
             Authentication.DH,
             Encryption.AES256GCM,
@@ -1356,6 +1468,7 @@ enum Cipher {
     ),
     // Cipher A2
     TLS_DHE_DSS_WITH_AES_128_GCM_SHA256("DHE-DSS-AES128-GCM-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.AES128GCM,
@@ -1369,6 +1482,7 @@ enum Cipher {
     ),
     // Cipher A3
     TLS_DHE_DSS_WITH_AES_256_GCM_SHA384("DHE-DSS-AES256-GCM-SHA384",
+            null,
             KeyExchange.EDH,
             Authentication.DSS,
             Encryption.AES256GCM,
@@ -1382,6 +1496,7 @@ enum Cipher {
     ),
     // Cipher A4
     TLS_DH_DSS_WITH_AES_128_GCM_SHA256("DH-DSS-AES128-GCM-SHA256",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.AES128GCM,
@@ -1395,6 +1510,7 @@ enum Cipher {
     ),
     // Cipher A5
     TLS_DH_DSS_WITH_AES_256_GCM_SHA384("DH-DSS-AES256-GCM-SHA384",
+            null,
             KeyExchange.DHd,
             Authentication.DH,
             Encryption.AES256GCM,
@@ -1408,6 +1524,7 @@ enum Cipher {
     ),
     // Cipher A6
     TLS_DH_anon_WITH_AES_128_GCM_SHA256("ADH-AES128-GCM-SHA256",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.AES128GCM,
@@ -1421,6 +1538,7 @@ enum Cipher {
     ),
     // Cipher A7
     TLS_DH_anon_WITH_AES_256_GCM_SHA384("ADH-AES256-GCM-SHA384",
+            null,
             KeyExchange.EDH,
             Authentication.aNULL,
             Encryption.AES256GCM,
@@ -1435,6 +1553,7 @@ enum Cipher {
     /* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */
     // Cipher C001
     TLS_ECDH_ECDSA_WITH_NULL_SHA("ECDH-ECDSA-NULL-SHA",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.eNULL,
@@ -1448,6 +1567,7 @@ enum Cipher {
     ),
     // Cipher C002
     TLS_ECDH_ECDSA_WITH_RC4_128_SHA("ECDH-ECDSA-RC4-SHA",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.RC4,
@@ -1461,6 +1581,7 @@ enum Cipher {
     ),
     // Cipher C003
     TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA("ECDH-ECDSA-DES-CBC3-SHA",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.TRIPLE_DES,
@@ -1474,6 +1595,7 @@ enum Cipher {
     ),
     // Cipher C004
     TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA("ECDH-ECDSA-AES128-SHA",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.AES128,
@@ -1487,6 +1609,7 @@ enum Cipher {
     ),
     // Cipher C005
     TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA("ECDH-ECDSA-AES256-SHA",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.AES256,
@@ -1500,6 +1623,7 @@ enum Cipher {
     ),
     // Cipher C006
     TLS_ECDHE_ECDSA_WITH_NULL_SHA("ECDHE-ECDSA-NULL-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.eNULL,
@@ -1513,6 +1637,7 @@ enum Cipher {
     ),
     // Cipher C007
     TLS_ECDHE_ECDSA_WITH_RC4_128_SHA("ECDHE-ECDSA-RC4-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.RC4,
@@ -1526,6 +1651,7 @@ enum Cipher {
     ),
     // Cipher C008
     TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA("ECDHE-ECDSA-DES-CBC3-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.TRIPLE_DES,
@@ -1539,6 +1665,7 @@ enum Cipher {
     ),
     // Cipher C009
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA("ECDHE-ECDSA-AES128-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.AES128,
@@ -1552,6 +1679,7 @@ enum Cipher {
     ),
     // Cipher C00A
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA("ECDHE-ECDSA-AES256-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.AES256,
@@ -1565,6 +1693,7 @@ enum Cipher {
     ),
     // Cipher C00B
     TLS_ECDH_RSA_WITH_NULL_SHA("ECDH-RSA-NULL-SHA",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.eNULL,
@@ -1578,6 +1707,7 @@ enum Cipher {
     ),
     // Cipher C00C
     TLS_ECDH_RSA_WITH_RC4_128_SHA("ECDH-RSA-RC4-SHA",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.RC4,
@@ -1591,6 +1721,7 @@ enum Cipher {
     ),
     // Cipher C00D
     TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA("ECDH-RSA-DES-CBC3-SHA",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.TRIPLE_DES,
@@ -1604,6 +1735,7 @@ enum Cipher {
     ),
     // Cipher C00E
     TLS_ECDH_RSA_WITH_AES_128_CBC_SHA("ECDH-RSA-AES128-SHA",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.AES128,
@@ -1617,6 +1749,7 @@ enum Cipher {
     ),
     // Cipher C00F
     TLS_ECDH_RSA_WITH_AES_256_CBC_SHA("ECDH-RSA-AES256-SHA",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.AES256,
@@ -1629,6 +1762,7 @@ enum Cipher {
             256
     ),
     TLS_ECDHE_RSA_WITH_NULL_SHA("ECDHE-RSA-NULL-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.eNULL,
@@ -1642,6 +1776,7 @@ enum Cipher {
     ),
     // Cipher C011
     TLS_ECDHE_RSA_WITH_RC4_128_SHA("ECDHE-RSA-RC4-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.RC4,
@@ -1655,6 +1790,7 @@ enum Cipher {
     ),
     // Cipher C012
     TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA("ECDHE-RSA-DES-CBC3-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.TRIPLE_DES,
@@ -1668,6 +1804,7 @@ enum Cipher {
     ),
     // Cipher C013
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA("ECDHE-RSA-AES128-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.AES128,
@@ -1681,6 +1818,7 @@ enum Cipher {
     ),
     // Cipher C014
     TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA("ECDHE-RSA-AES256-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.AES256,
@@ -1694,6 +1832,7 @@ enum Cipher {
     ),
     // Cipher C015
     TLS_ECDH_anon_WITH_NULL_SHA("AECDH-NULL-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.aNULL,
             Encryption.eNULL,
@@ -1707,6 +1846,7 @@ enum Cipher {
     ),
     // Cipher C016
     TLS_ECDH_anon_WITH_RC4_128_SHA("AECDH-RC4-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.aNULL,
             Encryption.RC4,
@@ -1720,6 +1860,7 @@ enum Cipher {
     ),
     // Cipher C017
     TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA("AECDH-DES-CBC3-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.aNULL,
             Encryption.TRIPLE_DES,
@@ -1733,6 +1874,7 @@ enum Cipher {
     ),
     // Cipher C018
     TLS_ECDH_anon_WITH_AES_128_CBC_SHA("AECDH-AES128-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.aNULL,
             Encryption.AES128,
@@ -1746,6 +1888,7 @@ enum Cipher {
     ),
     // Cipher C019
     TLS_ECDH_anon_WITH_AES_256_CBC_SHA("AECDH-AES256-SHA",
+            null,
             KeyExchange.EECDH,
             Authentication.aNULL,
             Encryption.AES256,
@@ -1760,6 +1903,7 @@ enum Cipher {
     /* SRP ciphersuite from RFC 5054 */
     // Cipher C01A
     TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA("SRP-3DES-EDE-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.aNULL,
             Encryption.TRIPLE_DES,
@@ -1773,6 +1917,7 @@ enum Cipher {
     ),
     // Cipher C01B
     TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA("SRP-RSA-3DES-EDE-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.RSA,
             Encryption.TRIPLE_DES,
@@ -1786,6 +1931,7 @@ enum Cipher {
     ),
     // Cipher C01C
     TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA("SRP-DSS-3DES-EDE-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.DSS,
             Encryption.TRIPLE_DES,
@@ -1799,6 +1945,7 @@ enum Cipher {
     ),
     // Cipher C01D
     TLS_SRP_SHA_WITH_AES_128_CBC_SHA("SRP-AES-128-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.aNULL,
             Encryption.AES128,
@@ -1812,6 +1959,7 @@ enum Cipher {
     ),
     // Cipher C01E
     TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA("SRP-RSA-AES-128-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.RSA,
             Encryption.AES128,
@@ -1825,6 +1973,7 @@ enum Cipher {
     ),
     // Cipher C01F
     TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA("SRP-DSS-AES-128-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.DSS,
             Encryption.AES128,
@@ -1838,6 +1987,7 @@ enum Cipher {
     ),
     // Cipher C020
     TLS_SRP_SHA_WITH_AES_256_CBC_SHA("SRP-AES-256-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.aNULL,
             Encryption.AES256,
@@ -1851,6 +2001,7 @@ enum Cipher {
     ),
     // Cipher C021
     TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA("SRP-RSA-AES-256-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.RSA,
             Encryption.AES256,
@@ -1864,6 +2015,7 @@ enum Cipher {
     ),
     // Cipher C022
     TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA("SRP-DSS-AES-256-CBC-SHA",
+            null,
             KeyExchange.SRP,
             Authentication.DSS,
             Encryption.AES256,
@@ -1878,6 +2030,7 @@ enum Cipher {
     /* HMAC based TLS v1.2 ciphersuites from RFC5289 */
     // Cipher C023
     TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256("ECDHE-ECDSA-AES128-SHA256",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.AES128,
@@ -1891,6 +2044,7 @@ enum Cipher {
     ),
     // Cipher C024
     TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384("ECDHE-ECDSA-AES256-SHA384",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.AES256,
@@ -1904,6 +2058,7 @@ enum Cipher {
     ),
     // Cipher C025
     TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256("ECDH-ECDSA-AES128-SHA256",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.AES128,
@@ -1917,6 +2072,7 @@ enum Cipher {
     ),
     // Cipher C026
     TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384("ECDH-ECDSA-AES256-SHA384",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.AES256,
@@ -1930,6 +2086,7 @@ enum Cipher {
     ),
     // Cipher C027
     TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256("ECDHE-RSA-AES128-SHA256",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.AES128,
@@ -1943,6 +2100,7 @@ enum Cipher {
     ),
     // Cipher C028
     TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384("ECDHE-RSA-AES256-SHA384",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.AES256,
@@ -1956,6 +2114,7 @@ enum Cipher {
     ),
     // Cipher C029
     TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256("ECDH-RSA-AES128-SHA256",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.AES128,
@@ -1969,6 +2128,7 @@ enum Cipher {
     ),
     // Cipher C02A
     TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384("ECDH-RSA-AES256-SHA384",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.AES256,
@@ -1983,6 +2143,7 @@ enum Cipher {
     /* GCM based TLS v1.2 ciphersuites from RFC5289 */
     // Cipher C02B
     TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256("ECDHE-ECDSA-AES128-GCM-SHA256",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.AES128GCM,
@@ -1996,6 +2157,7 @@ enum Cipher {
     ),
     // Cipher C02C
     TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384("ECDHE-ECDSA-AES256-GCM-SHA384",
+            null,
             KeyExchange.EECDH,
             Authentication.ECDSA,
             Encryption.AES256GCM,
@@ -2009,6 +2171,7 @@ enum Cipher {
     ),
     // Cipher C02D
     TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256("ECDH-ECDSA-AES128-GCM-SHA256",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.AES128GCM,
@@ -2022,6 +2185,7 @@ enum Cipher {
     ),
     // Cipher C02E
     TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384("ECDH-ECDSA-AES256-GCM-SHA384",
+            null,
             KeyExchange.ECDHe,
             Authentication.ECDH,
             Encryption.AES256GCM,
@@ -2035,6 +2199,7 @@ enum Cipher {
     ),
     // Cipher C02F
     TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256("ECDHE-RSA-AES128-GCM-SHA256",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.AES128GCM,
@@ -2048,6 +2213,7 @@ enum Cipher {
     ),
     // Cipher C030
     TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384("ECDHE-RSA-AES256-GCM-SHA384",
+            null,
             KeyExchange.EECDH,
             Authentication.RSA,
             Encryption.AES256GCM,
@@ -2061,6 +2227,7 @@ enum Cipher {
     ),
     // Cipher C031
     TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256("ECDH-RSA-AES128-GCM-SHA256",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.AES128GCM,
@@ -2074,6 +2241,7 @@ enum Cipher {
     ),
     // Cipher C032
     TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384("ECDH-RSA-AES256-GCM-SHA384",
+            null,
             KeyExchange.ECDHr,
             Authentication.ECDH,
             Encryption.AES256GCM,
@@ -2087,6 +2255,7 @@ enum Cipher {
     ),
     // RC4_128_WITH_MD5
     SSL_CK_RC4_128_WITH_MD5("RC4-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -2100,6 +2269,7 @@ enum Cipher {
     ),
     // RC4_128_EXPORT40_WITH_MD5
     SSL_CK_RC4_128_EXPORT40_WITH_MD5("EXP-RC4-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC4,
@@ -2113,6 +2283,7 @@ enum Cipher {
     ),
     // RC2_128_CBC_WITH_MD5
     SSL_CK_RC2_128_CBC_WITH_MD5("RC2-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC2,
@@ -2126,6 +2297,7 @@ enum Cipher {
     ),
     // RC2_128_CBC_EXPORT40_WITH_MD5
     SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5("EXP-RC2-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC2,
@@ -2139,6 +2311,7 @@ enum Cipher {
     ),
     // IDEA_128_CBC_WITH_MD5
     SSL_CK_IDEA_128_CBC_WITH_MD5("IDEA-CBC-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.IDEA,
@@ -2151,6 +2324,7 @@ enum Cipher {
     ),
     // DES_64_CBC_WITH_MD5
     SSL_CK_DES_64_CBC_WITH_MD5("DES-CBC-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.DES,
@@ -2164,6 +2338,7 @@ enum Cipher {
     ),
     // DES_192_EDE3_CBC_WITH_MD5
     SSL_CK_DES_192_EDE3_CBC_WITH_MD5("DES-CBC3-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.TRIPLE_DES,
@@ -2180,6 +2355,7 @@ enum Cipher {
     /*
     // Cipher FF00
      TLS_GOSTR341094_RSA_WITH_28147_CNT_MD5("GOST-MD5",
+            null,
      KeyExchange.RSA,
      Authentication.RSA,
      Encryption.eGOST2814789CNT,
@@ -2192,6 +2368,7 @@ enum Cipher {
      ),
      TLS_RSA_WITH_28147_CNT_GOST94(
      "GOST-GOST94",
+            null,
      KeyExchange.RSA,
      Authentication.RSA,
      Encryption.eGOST2814789CNT,
@@ -2205,6 +2382,7 @@ enum Cipher {
      {
      1,
      "GOST-GOST89MAC",
+            null,
      0x0300ff02,
      KeyExchange.RSA,
      Authentication.RSA,
@@ -2219,6 +2397,7 @@ enum Cipher {
      {
      1,
      "GOST-GOST89STREAM",
+            null,
      0x0300ff03,
      KeyExchange.RSA,
      Authentication.RSA,
@@ -2234,6 +2413,7 @@ enum Cipher {
     // Cipher 0x030080 / 0x040080
     SSL2_RC2_CBC_128_CBC_WITH_MD5(
             "RC2-CBC-MD5",
+            null,
             KeyExchange.RSA,
             Authentication.RSA,
             Encryption.RC2,
@@ -2248,6 +2428,7 @@ enum Cipher {
 
 
     private final String openSSLAlias;
+    private final Set<String> jsseNames;
     private final KeyExchange kx;
     private final Authentication au;
     private final Encryption enc;
@@ -2265,11 +2446,17 @@ enum Cipher {
      */
     private final int alg_bits;
 
-    Cipher(String openSSLAlias, KeyExchange kx, Authentication au,
+    Cipher(String openSSLAlias, Set<String> jsseAltNames, KeyExchange kx, 
Authentication au,
             Encryption enc, MessageDigest mac, Protocol protocol, boolean 
export,
             EncryptionLevel level, boolean fipsCompatible, int strength_bits,
             int alg_bits) {
         this.openSSLAlias = openSSLAlias;
+        Set<String> names = new HashSet<>();
+        if (jsseAltNames != null) {
+            names.addAll(jsseAltNames);
+        }
+        names.add(name());
+        this.jsseNames = Collections.unmodifiableSet(names);
         this.kx = kx;
         this.au = au;
         this.enc = enc;
@@ -2286,6 +2473,10 @@ enum Cipher {
         return openSSLAlias;
     }
 
+    public Set<String> getJsseNames() {
+        return jsseNames;
+    }
+
     public KeyExchange getKx() {
         return kx;
     }

Modified: 
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/OpenSSLCipherConfigurationParser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/OpenSSLCipherConfigurationParser.java?rev=1614336&r1=1614335&r2=1614336&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/OpenSSLCipherConfigurationParser.java
 (original)
+++ 
tomcat/trunk/java/org/apache/tomcat/util/net/jsse/openssl/OpenSSLCipherConfigurationParser.java
 Tue Jul 29 13:15:07 2014
@@ -648,7 +648,7 @@ public class OpenSSLCipherConfigurationP
     static List<String> convertForJSSE(Collection<Cipher> ciphers) {
         List<String> result = new ArrayList<>(ciphers.size());
         for (Cipher cipher : ciphers) {
-            result.add(cipher.name());
+            result.addAll(cipher.getJsseNames());
         }
         if (log.isDebugEnabled()) {
             log.debug(sm.getString("jsse.openssl.effectiveCiphers", 
displayResult(ciphers, true, ",")));
@@ -673,7 +673,10 @@ public class OpenSSLCipherConfigurationP
         StringBuilder builder = new StringBuilder(ciphers.size() * 16);
         for (Cipher cipher : ciphers) {
             if (useJSSEFormat) {
-                builder.append(cipher.name());
+                for (String name : cipher.getJsseNames()) {
+                    builder.append(name);
+                    builder.append(separator);
+                }
             } else {
                 builder.append(cipher.getOpenSSLAlias());
             }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to