]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
libtls: Add missing cipher suite and TLS extension constants
authorPascal Knecht <pascal.knecht@hsr.ch>
Tue, 15 Sep 2020 14:08:08 +0000 (16:08 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 12 Feb 2021 13:35:23 +0000 (14:35 +0100)
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256
- TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256

- Encrypt then MAC
- Extended master secret
- Session ticket

and also add missing suites in the unit test.

src/libtls/tests/suites/test_suites.c
src/libtls/tls.c
src/libtls/tls.h
src/libtls/tls_crypto.c
src/libtls/tls_crypto.h

index f8ae12eb3d8e533c36391258540e44eb308af01f..52ed9a63a9f22d455c6c5c5501239e9c814e05b0 100644 (file)
@@ -1,4 +1,7 @@
 /*
+ * Copyright (C) 2020 Pascal Knecht
+ * HSR Hochschule fuer Technik Rapperswil
+ *
  * Copyright (C) 2014 Martin Willi
  * Copyright (C) 2014 revosec AG
  *
@@ -170,6 +173,11 @@ START_TEST(test_cipher_names)
        CHECK_NAME(TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256);
        CHECK_NAME(TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256);
        CHECK_NAME(TLS_EMPTY_RENEGOTIATION_INFO_SCSV);
+       CHECK_NAME(TLS_AES_128_GCM_SHA256);
+       CHECK_NAME(TLS_AES_256_GCM_SHA384);
+       CHECK_NAME(TLS_CHACHA20_POLY1305_SHA256);
+       CHECK_NAME(TLS_AES_128_CCM_SHA256);
+       CHECK_NAME(TLS_AES_128_CCM_8_SHA256);
        CHECK_NAME(TLS_ECDH_ECDSA_WITH_NULL_SHA);
        CHECK_NAME(TLS_ECDH_ECDSA_WITH_RC4_128_SHA);
        CHECK_NAME(TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA);
@@ -229,6 +237,9 @@ START_TEST(test_cipher_names)
        CHECK_NAME(TLS_ECDHE_PSK_WITH_NULL_SHA);
        CHECK_NAME(TLS_ECDHE_PSK_WITH_NULL_SHA256);
        CHECK_NAME(TLS_ECDHE_PSK_WITH_NULL_SHA384);
+       CHECK_NAME(TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256);
+       CHECK_NAME(TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256);
+       CHECK_NAME(TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256);
 }
 END_TEST
 
index fc313e08e210acefca5440a2c2b93f7e5c669daa..52e06a446eb1513ccf01939fbcb9793d5bf1f057 100644 (file)
@@ -1,4 +1,7 @@
 /*
+ * Copyright (C) 2020 Pascal Knecht
+ * HSR Hochschule fuer Technik Rapperswil
+ *
  * Copyright (C) 2010 Martin Willi
  * Copyright (C) 2010 revosec AG
  *
@@ -101,8 +104,17 @@ ENUM_NEXT(tls_extension_names,
        "client certificate type",
        "server certificate type");
 ENUM_NEXT(tls_extension_names,
-               TLS_EXT_PRE_SHARED_KEY, TLS_EXT_PSK_KEY_EXCHANGE_MODES,
+               TLS_EXT_ENCRYPT_THEN_MAC, TLS_EXT_EXTENDED_MASTER_SECRET,
                TLS_SERVER_CERTIFICATE_TYPE,
+       "encrypt-then-mac",
+       "extended master secret");
+ENUM_NEXT(tls_extension_names,
+               TLS_EXT_SESSION_TICKET, TLS_EXT_SESSION_TICKET,
+               TLS_EXT_EXTENDED_MASTER_SECRET,
+       "session ticket");
+ENUM_NEXT(tls_extension_names,
+               TLS_EXT_PRE_SHARED_KEY, TLS_EXT_PSK_KEY_EXCHANGE_MODES,
+               TLS_EXT_SESSION_TICKET,
        "pre-shared key",
        "early data",
        "supported versions",
index b8903af5d9a78bd3de1afc9858f6596de3480252..c85c9c452c508fc7b7d7d875a8605c1ea5cd4b75 100644 (file)
@@ -1,4 +1,7 @@
 /*
+ * Copyright (C) 2020 Pascal Knecht
+ * HSR Hochschule fuer Technik Rapperswil
+ *
  * Copyright (C) 2010 Martin Willi
  * Copyright (C) 2010 revosec AG
  *
@@ -156,6 +159,12 @@ enum tls_extension_t {
        TLS_CLIENT_CERTIFICATE_TYPE = 19,
        /** exchange raw public key, server side*/
        TLS_SERVER_CERTIFICATE_TYPE = 20,
+       /** use encrypt-then-MAC security mechanism RFC 7366 */
+       TLS_EXT_ENCRYPT_THEN_MAC = 22,
+       /** bind master secret to handshake data RFC 7627 */
+       TLS_EXT_EXTENDED_MASTER_SECRET = 23,
+       /** session resumption without server-side state RFC 5077 */
+       TLS_EXT_SESSION_TICKET = 35,
        /** negotiate identity of the psk **/
        TLS_EXT_PRE_SHARED_KEY = 41,
        /** send data in 0-RTT when psk is used and early data is allowed **/
index a7ad738e6bd83e80810e98400772abf6ac83096b..f6d88a451d860ac4f199435e081fe404cf156892 100644 (file)
@@ -251,7 +251,14 @@ ENUM_NEXT(tls_cipher_suite_names, TLS_ECDH_ECDSA_WITH_NULL_SHA,
        "TLS_ECDHE_PSK_WITH_NULL_SHA",
        "TLS_ECDHE_PSK_WITH_NULL_SHA256",
        "TLS_ECDHE_PSK_WITH_NULL_SHA384");
-ENUM_END(tls_cipher_suite_names, TLS_ECDHE_PSK_WITH_NULL_SHA384);
+ENUM_NEXT(tls_cipher_suite_names, TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
+               TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
+               TLS_ECDHE_PSK_WITH_NULL_SHA384,
+       "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
+       "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
+       "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256");
+ENUM_END(tls_cipher_suite_names, TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256);
+
 
 ENUM(tls_hash_algorithm_names, TLS_HASH_NONE, TLS_HASH_SHA512,
        "NONE",
index 958b7db298abdd0821af7706ab5a5d41d1ae12a5..8324b2243e05cf6424f5fc2f63c2f880cd0c27ac 100644 (file)
@@ -48,219 +48,222 @@ typedef enum tls_ec_point_format_t tls_ec_point_format_t;
  * TLS cipher suites
  */
 enum tls_cipher_suite_t {
-       TLS_NULL_WITH_NULL_NULL =                                       0x0000,
-       TLS_RSA_WITH_NULL_MD5 =                                         0x0001,
-       TLS_RSA_WITH_NULL_SHA =                                         0x0002,
-       TLS_RSA_EXPORT_WITH_RC4_40_MD5 =                        0x0003,
-       TLS_RSA_WITH_RC4_128_MD5 =                                      0x0004,
-       TLS_RSA_WITH_RC4_128_SHA =                                      0x0005,
-       TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 =            0x0006,
-       TLS_RSA_WITH_IDEA_CBC_SHA =                                     0x0007,
-       TLS_RSA_EXPORT_WITH_DES40_CBC_SHA =                     0x0008,
-       TLS_RSA_WITH_DES_CBC_SHA =                                      0x0009,
-       TLS_RSA_WITH_3DES_EDE_CBC_SHA =                         0x000A,
-       TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA =          0x000B,
-       TLS_DH_DSS_WITH_DES_CBC_SHA =                           0x000C,
-       TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA =                      0x000D,
-       TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA =          0x000E,
-       TLS_DH_RSA_WITH_DES_CBC_SHA =                           0x000F,
-       TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA =                      0x0010,
-       TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA =         0x0011,
-       TLS_DHE_DSS_WITH_DES_CBC_SHA =                          0x0012,
-       TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA =                     0x0013,
-       TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA =         0x0014,
-       TLS_DHE_RSA_WITH_DES_CBC_SHA =                          0x0015,
-       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA =                     0x0016,
-       TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 =            0x0017,
-       TLS_DH_anon_WITH_RC4_128_MD5 =                          0x0018,
-       TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA =         0x0019,
-       TLS_DH_anon_WITH_DES_CBC_SHA =                          0x001A,
-       TLS_DH_anon_WITH_3DES_EDE_CBC_SHA =                     0x001B,
-
-       TLS_KRB5_WITH_DES_CBC_SHA =                                     0x001E,
-       TLS_KRB5_WITH_3DES_EDE_CBC_SHA =                        0x001F,
-       TLS_KRB5_WITH_RC4_128_SHA =                                     0x0020,
-       TLS_KRB5_WITH_IDEA_CBC_SHA =                            0x0021,
-       TLS_KRB5_WITH_DES_CBC_MD5 =                                     0x0022,
-       TLS_KRB5_WITH_3DES_EDE_CBC_MD5 =                        0x0023,
-       TLS_KRB5_WITH_RC4_128_MD5 =                                     0x0024,
-       TLS_KRB5_WITH_IDEA_CBC_MD5 =                            0x0025,
-       TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA =           0x0026,
-       TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA =           0x0027,
-       TLS_KRB5_EXPORT_WITH_RC4_40_SHA =                       0x0028,
-       TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 =           0x0029,
-       TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 =           0x002A,
-       TLS_KRB5_EXPORT_WITH_RC4_40_MD5 =                       0x002B,
-       TLS_PSK_WITH_NULL_SHA =                                         0x002C,
-       TLS_DHE_PSK_WITH_NULL_SHA =                                     0x002D,
-       TLS_RSA_PSK_WITH_NULL_SHA =                                     0x002E,
-       TLS_RSA_WITH_AES_128_CBC_SHA =                          0x002F,
-       TLS_DH_DSS_WITH_AES_128_CBC_SHA =                       0x0030,
-       TLS_DH_RSA_WITH_AES_128_CBC_SHA =                       0x0031,
-       TLS_DHE_DSS_WITH_AES_128_CBC_SHA =                      0x0032,
-       TLS_DHE_RSA_WITH_AES_128_CBC_SHA =                      0x0033,
-       TLS_DH_anon_WITH_AES_128_CBC_SHA =                      0x0034,
-       TLS_RSA_WITH_AES_256_CBC_SHA =                          0x0035,
-       TLS_DH_DSS_WITH_AES_256_CBC_SHA =                       0x0036,
-       TLS_DH_RSA_WITH_AES_256_CBC_SHA =                       0x0037,
-       TLS_DHE_DSS_WITH_AES_256_CBC_SHA =                      0x0038,
-       TLS_DHE_RSA_WITH_AES_256_CBC_SHA =                      0x0039,
-       TLS_DH_anon_WITH_AES_256_CBC_SHA =                      0x003A,
-       TLS_RSA_WITH_NULL_SHA256 =                                      0x003B,
-       TLS_RSA_WITH_AES_128_CBC_SHA256 =                       0x003C,
-       TLS_RSA_WITH_AES_256_CBC_SHA256 =                       0x003D,
-       TLS_DH_DSS_WITH_AES_128_CBC_SHA256 =            0x003E,
-       TLS_DH_RSA_WITH_AES_128_CBC_SHA256 =            0x003F,
-       TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 =           0x0040,
-       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA =                     0x0041,
-       TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA =          0x0042,
-       TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA =          0x0043,
-       TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA =         0x0044,
-       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA =         0x0045,
-       TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA =         0x0046,
-
-       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 =           0x0067,
-       TLS_DH_DSS_WITH_AES_256_CBC_SHA256 =            0x0068,
-       TLS_DH_RSA_WITH_AES_256_CBC_SHA256 =            0x0069,
-       TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 =           0x006A,
-       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 =           0x006B,
-       TLS_DH_anon_WITH_AES_128_CBC_SHA256 =           0x006C,
-       TLS_DH_anon_WITH_AES_256_CBC_SHA256 =           0x006D,
-
-       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA =                     0x0084,
-       TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA =          0x0085,
-       TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA =          0x0086,
-       TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA =         0x0087,
-       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA =         0x0088,
-       TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA =         0x0089,
-       TLS_PSK_WITH_RC4_128_SHA =                                      0x008A,
-       TLS_PSK_WITH_3DES_EDE_CBC_SHA =                         0x008B,
-       TLS_PSK_WITH_AES_128_CBC_SHA =                          0x008C,
-       TLS_PSK_WITH_AES_256_CBC_SHA =                          0x008D,
-       TLS_DHE_PSK_WITH_RC4_128_SHA =                          0x008E,
-       TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA =                     0x008F,
-       TLS_DHE_PSK_WITH_AES_128_CBC_SHA =                      0x0090,
-       TLS_DHE_PSK_WITH_AES_256_CBC_SHA =                      0x0091,
-       TLS_RSA_PSK_WITH_RC4_128_SHA =                          0x0092,
-       TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA =                     0x0093,
-       TLS_RSA_PSK_WITH_AES_128_CBC_SHA =                      0x0094,
-       TLS_RSA_PSK_WITH_AES_256_CBC_SHA =                      0x0095,
-       TLS_RSA_WITH_SEED_CBC_SHA =                                     0x0096,
-       TLS_DH_DSS_WITH_SEED_CBC_SHA =                          0x0097,
-       TLS_DH_RSA_WITH_SEED_CBC_SHA =                          0x0098,
-       TLS_DHE_DSS_WITH_SEED_CBC_SHA =                         0x0099,
-       TLS_DHE_RSA_WITH_SEED_CBC_SHA =                         0x009A,
-       TLS_DH_anon_WITH_SEED_CBC_SHA =                         0x009B,
-       TLS_RSA_WITH_AES_128_GCM_SHA256 =                       0x009C,
-       TLS_RSA_WITH_AES_256_GCM_SHA384 =                       0x009D,
-       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 =           0x009E,
-       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 =           0x009F,
-       TLS_DH_RSA_WITH_AES_128_GCM_SHA256 =            0x00A0,
-       TLS_DH_RSA_WITH_AES_256_GCM_SHA384 =            0x00A1,
-       TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 =           0x00A2,
-       TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 =           0x00A3,
-       TLS_DH_DSS_WITH_AES_128_GCM_SHA256 =            0x00A4,
-       TLS_DH_DSS_WITH_AES_256_GCM_SHA384 =            0x00A5,
-       TLS_DH_anon_WITH_AES_128_GCM_SHA256 =           0x00A6,
-       TLS_DH_anon_WITH_AES_256_GCM_SHA384 =           0x00A7,
-       TLS_PSK_WITH_AES_128_GCM_SHA256 =                       0x00A8,
-       TLS_PSK_WITH_AES_256_GCM_SHA384 =                       0x00A9,
-       TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 =           0x00AA,
-       TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 =           0x00AB,
-       TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 =           0x00AC,
-       TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 =           0x00AD,
-       TLS_PSK_WITH_AES_128_CBC_SHA256 =                       0x00AE,
-       TLS_PSK_WITH_AES_256_CBC_SHA384 =                       0x00AF,
-       TLS_PSK_WITH_NULL_SHA256 =                                      0x00B0,
-       TLS_PSK_WITH_NULL_SHA384 =                                      0x00B1,
-       TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 =           0x00B2,
-       TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 =           0x00B3,
-       TLS_DHE_PSK_WITH_NULL_SHA256 =                          0x00B4,
-       TLS_DHE_PSK_WITH_NULL_SHA384 =                          0x00B5,
-       TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 =           0x00B6,
-       TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 =           0x00B7,
-       TLS_RSA_PSK_WITH_NULL_SHA256 =                          0x00B8,
-       TLS_RSA_PSK_WITH_NULL_SHA384 =                          0x00B9,
-       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 =          0x00BA,
-       TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 =       0x00BB,
-       TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 =       0x00BC,
-       TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 =      0x00BD,
-       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 =      0x00BE,
-       TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 =      0x00BF,
-       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 =          0x00C0,
-       TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 =       0x00C1,
-       TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 =       0x00C2,
-       TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 =      0x00C3,
-       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 =      0x00C4,
-       TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 =      0x00C5,
-
-       TLS_EMPTY_RENEGOTIATION_INFO_SCSV =                     0x00FF,
-
-       TLS_AES_128_GCM_SHA256 =                                        0x1301,
-       TLS_AES_256_GCM_SHA384 =                                        0x1302,
-       TLS_CHACHA20_POLY1305_SHA256 =                          0x1303,
-       TLS_AES_128_CCM_SHA256 =                                        0x1304,
-       TLS_AES_128_CCM_8_SHA256 =                                      0x1305,
-
-       TLS_ECDH_ECDSA_WITH_NULL_SHA =                          0xC001,
-       TLS_ECDH_ECDSA_WITH_RC4_128_SHA =                       0xC002,
-       TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA =          0xC003,
-       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA =           0xC004,
-       TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA =           0xC005,
-       TLS_ECDHE_ECDSA_WITH_NULL_SHA =                         0xC006,
-       TLS_ECDHE_ECDSA_WITH_RC4_128_SHA =                      0xC007,
-       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA =         0xC008,
-       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA =          0xC009,
-       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA =          0xC00A,
-       TLS_ECDH_RSA_WITH_NULL_SHA =                            0xC00B,
-       TLS_ECDH_RSA_WITH_RC4_128_SHA =                         0xC00C,
-       TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA =            0xC00D,
-       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA =                     0xC00E,
-       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA =                     0xC00F,
-       TLS_ECDHE_RSA_WITH_NULL_SHA =                           0xC010,
-       TLS_ECDHE_RSA_WITH_RC4_128_SHA =                        0xC011,
-       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA =           0xC012,
-       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA =            0xC013,
-       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA =            0xC014,
-       TLS_ECDH_anon_WITH_NULL_SHA =                           0xC015,
-       TLS_ECDH_anon_WITH_RC4_128_SHA =                        0xC016,
-       TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA =           0xC017,
-       TLS_ECDH_anon_WITH_AES_128_CBC_SHA =            0xC018,
-       TLS_ECDH_anon_WITH_AES_256_CBC_SHA =            0xC019,
-       TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA =                     0xC01A,
-       TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA =         0xC01B,
-       TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA =         0xC01C,
-       TLS_SRP_SHA_WITH_AES_128_CBC_SHA =                      0xC01D,
-       TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA =          0xC01E,
-       TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA =          0xC01F,
-       TLS_SRP_SHA_WITH_AES_256_CBC_SHA =                      0xC020,
-       TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA =          0xC021,
-       TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA =          0xC022,
-       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 =       0xC023,
-       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 =       0xC024,
-       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 =        0xC025,
-       TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 =        0xC026,
-       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 =         0xC027,
-       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 =         0xC028,
-       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 =          0xC029,
-       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 =          0xC02A,
-       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 =       0xC02B,
-       TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 =       0xC02C,
-       TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 =        0xC02D,
-       TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 =        0xC02E,
-       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 =         0xC02F,
-       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 =         0xC030,
-       TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 =          0xC031,
-       TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 =          0xC032,
-       TLS_ECDHE_PSK_WITH_RC4_128_SHA =                        0xC033,
-       TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA =           0xC034,
-       TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA =            0xC035,
-       TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA =            0xC036,
-       TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 =         0xC037,
-       TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 =         0xC038,
-       TLS_ECDHE_PSK_WITH_NULL_SHA =                           0xC039,
-       TLS_ECDHE_PSK_WITH_NULL_SHA256 =                        0xC03A,
-       TLS_ECDHE_PSK_WITH_NULL_SHA384 =                        0xC03B
+       TLS_NULL_WITH_NULL_NULL =                                               0x0000,
+       TLS_RSA_WITH_NULL_MD5 =                                                 0x0001,
+       TLS_RSA_WITH_NULL_SHA =                                                 0x0002,
+       TLS_RSA_EXPORT_WITH_RC4_40_MD5 =                                0x0003,
+       TLS_RSA_WITH_RC4_128_MD5 =                                              0x0004,
+       TLS_RSA_WITH_RC4_128_SHA =                                              0x0005,
+       TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 =                    0x0006,
+       TLS_RSA_WITH_IDEA_CBC_SHA =                                             0x0007,
+       TLS_RSA_EXPORT_WITH_DES40_CBC_SHA =                             0x0008,
+       TLS_RSA_WITH_DES_CBC_SHA =                                              0x0009,
+       TLS_RSA_WITH_3DES_EDE_CBC_SHA =                                 0x000A,
+       TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA =                  0x000B,
+       TLS_DH_DSS_WITH_DES_CBC_SHA =                                   0x000C,
+       TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA =                              0x000D,
+       TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA =                  0x000E,
+       TLS_DH_RSA_WITH_DES_CBC_SHA =                                   0x000F,
+       TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA =                              0x0010,
+       TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA =                 0x0011,
+       TLS_DHE_DSS_WITH_DES_CBC_SHA =                                  0x0012,
+       TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA =                             0x0013,
+       TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA =                 0x0014,
+       TLS_DHE_RSA_WITH_DES_CBC_SHA =                                  0x0015,
+       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA =                             0x0016,
+       TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 =                    0x0017,
+       TLS_DH_anon_WITH_RC4_128_MD5 =                                  0x0018,
+       TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA =                 0x0019,
+       TLS_DH_anon_WITH_DES_CBC_SHA =                                  0x001A,
+       TLS_DH_anon_WITH_3DES_EDE_CBC_SHA =                             0x001B,
+
+       TLS_KRB5_WITH_DES_CBC_SHA =                                             0x001E,
+       TLS_KRB5_WITH_3DES_EDE_CBC_SHA =                                0x001F,
+       TLS_KRB5_WITH_RC4_128_SHA =                                             0x0020,
+       TLS_KRB5_WITH_IDEA_CBC_SHA =                                    0x0021,
+       TLS_KRB5_WITH_DES_CBC_MD5 =                                             0x0022,
+       TLS_KRB5_WITH_3DES_EDE_CBC_MD5 =                                0x0023,
+       TLS_KRB5_WITH_RC4_128_MD5 =                                             0x0024,
+       TLS_KRB5_WITH_IDEA_CBC_MD5 =                                    0x0025,
+       TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA =                   0x0026,
+       TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA =                   0x0027,
+       TLS_KRB5_EXPORT_WITH_RC4_40_SHA =                               0x0028,
+       TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 =                   0x0029,
+       TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5 =                   0x002A,
+       TLS_KRB5_EXPORT_WITH_RC4_40_MD5 =                               0x002B,
+       TLS_PSK_WITH_NULL_SHA =                                                 0x002C,
+       TLS_DHE_PSK_WITH_NULL_SHA =                                             0x002D,
+       TLS_RSA_PSK_WITH_NULL_SHA =                                             0x002E,
+       TLS_RSA_WITH_AES_128_CBC_SHA =                                  0x002F,
+       TLS_DH_DSS_WITH_AES_128_CBC_SHA =                               0x0030,
+       TLS_DH_RSA_WITH_AES_128_CBC_SHA =                               0x0031,
+       TLS_DHE_DSS_WITH_AES_128_CBC_SHA =                              0x0032,
+       TLS_DHE_RSA_WITH_AES_128_CBC_SHA =                              0x0033,
+       TLS_DH_anon_WITH_AES_128_CBC_SHA =                              0x0034,
+       TLS_RSA_WITH_AES_256_CBC_SHA =                                  0x0035,
+       TLS_DH_DSS_WITH_AES_256_CBC_SHA =                               0x0036,
+       TLS_DH_RSA_WITH_AES_256_CBC_SHA =                               0x0037,
+       TLS_DHE_DSS_WITH_AES_256_CBC_SHA =                              0x0038,
+       TLS_DHE_RSA_WITH_AES_256_CBC_SHA =                              0x0039,
+       TLS_DH_anon_WITH_AES_256_CBC_SHA =                              0x003A,
+       TLS_RSA_WITH_NULL_SHA256 =                                              0x003B,
+       TLS_RSA_WITH_AES_128_CBC_SHA256 =                               0x003C,
+       TLS_RSA_WITH_AES_256_CBC_SHA256 =                               0x003D,
+       TLS_DH_DSS_WITH_AES_128_CBC_SHA256 =                    0x003E,
+       TLS_DH_RSA_WITH_AES_128_CBC_SHA256 =                    0x003F,
+       TLS_DHE_DSS_WITH_AES_128_CBC_SHA256 =                   0x0040,
+       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA =                             0x0041,
+       TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA =                  0x0042,
+       TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA =                  0x0043,
+       TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA =                 0x0044,
+       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA =                 0x0045,
+       TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA =                 0x0046,
+
+       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 =                   0x0067,
+       TLS_DH_DSS_WITH_AES_256_CBC_SHA256 =                    0x0068,
+       TLS_DH_RSA_WITH_AES_256_CBC_SHA256 =                    0x0069,
+       TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 =                   0x006A,
+       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 =                   0x006B,
+       TLS_DH_anon_WITH_AES_128_CBC_SHA256 =                   0x006C,
+       TLS_DH_anon_WITH_AES_256_CBC_SHA256 =                   0x006D,
+
+       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA =                             0x0084,
+       TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA =                  0x0085,
+       TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA =                  0x0086,
+       TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA =                 0x0087,
+       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA =                 0x0088,
+       TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA =                 0x0089,
+       TLS_PSK_WITH_RC4_128_SHA =                                              0x008A,
+       TLS_PSK_WITH_3DES_EDE_CBC_SHA =                                 0x008B,
+       TLS_PSK_WITH_AES_128_CBC_SHA =                                  0x008C,
+       TLS_PSK_WITH_AES_256_CBC_SHA =                                  0x008D,
+       TLS_DHE_PSK_WITH_RC4_128_SHA =                                  0x008E,
+       TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA =                             0x008F,
+       TLS_DHE_PSK_WITH_AES_128_CBC_SHA =                              0x0090,
+       TLS_DHE_PSK_WITH_AES_256_CBC_SHA =                              0x0091,
+       TLS_RSA_PSK_WITH_RC4_128_SHA =                                  0x0092,
+       TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA =                             0x0093,
+       TLS_RSA_PSK_WITH_AES_128_CBC_SHA =                              0x0094,
+       TLS_RSA_PSK_WITH_AES_256_CBC_SHA =                              0x0095,
+       TLS_RSA_WITH_SEED_CBC_SHA =                                             0x0096,
+       TLS_DH_DSS_WITH_SEED_CBC_SHA =                                  0x0097,
+       TLS_DH_RSA_WITH_SEED_CBC_SHA =                                  0x0098,
+       TLS_DHE_DSS_WITH_SEED_CBC_SHA =                                 0x0099,
+       TLS_DHE_RSA_WITH_SEED_CBC_SHA =                                 0x009A,
+       TLS_DH_anon_WITH_SEED_CBC_SHA =                                 0x009B,
+       TLS_RSA_WITH_AES_128_GCM_SHA256 =                               0x009C,
+       TLS_RSA_WITH_AES_256_GCM_SHA384 =                               0x009D,
+       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 =                   0x009E,
+       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 =                   0x009F,
+       TLS_DH_RSA_WITH_AES_128_GCM_SHA256 =                    0x00A0,
+       TLS_DH_RSA_WITH_AES_256_GCM_SHA384 =                    0x00A1,
+       TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 =                   0x00A2,
+       TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 =                   0x00A3,
+       TLS_DH_DSS_WITH_AES_128_GCM_SHA256 =                    0x00A4,
+       TLS_DH_DSS_WITH_AES_256_GCM_SHA384 =                    0x00A5,
+       TLS_DH_anon_WITH_AES_128_GCM_SHA256 =                   0x00A6,
+       TLS_DH_anon_WITH_AES_256_GCM_SHA384 =                   0x00A7,
+       TLS_PSK_WITH_AES_128_GCM_SHA256 =                               0x00A8,
+       TLS_PSK_WITH_AES_256_GCM_SHA384 =                               0x00A9,
+       TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 =                   0x00AA,
+       TLS_DHE_PSK_WITH_AES_256_GCM_SHA384 =                   0x00AB,
+       TLS_RSA_PSK_WITH_AES_128_GCM_SHA256 =                   0x00AC,
+       TLS_RSA_PSK_WITH_AES_256_GCM_SHA384 =                   0x00AD,
+       TLS_PSK_WITH_AES_128_CBC_SHA256 =                               0x00AE,
+       TLS_PSK_WITH_AES_256_CBC_SHA384 =                               0x00AF,
+       TLS_PSK_WITH_NULL_SHA256 =                                              0x00B0,
+       TLS_PSK_WITH_NULL_SHA384 =                                              0x00B1,
+       TLS_DHE_PSK_WITH_AES_128_CBC_SHA256 =                   0x00B2,
+       TLS_DHE_PSK_WITH_AES_256_CBC_SHA384 =                   0x00B3,
+       TLS_DHE_PSK_WITH_NULL_SHA256 =                                  0x00B4,
+       TLS_DHE_PSK_WITH_NULL_SHA384 =                                  0x00B5,
+       TLS_RSA_PSK_WITH_AES_128_CBC_SHA256 =                   0x00B6,
+       TLS_RSA_PSK_WITH_AES_256_CBC_SHA384 =                   0x00B7,
+       TLS_RSA_PSK_WITH_NULL_SHA256 =                                  0x00B8,
+       TLS_RSA_PSK_WITH_NULL_SHA384 =                                  0x00B9,
+       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256 =                  0x00BA,
+       TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 =               0x00BB,
+       TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 =               0x00BC,
+       TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 =              0x00BD,
+       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 =              0x00BE,
+       TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256 =              0x00BF,
+       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256 =                  0x00C0,
+       TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 =               0x00C1,
+       TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 =               0x00C2,
+       TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 =              0x00C3,
+       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 =              0x00C4,
+       TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256 =              0x00C5,
+
+       TLS_EMPTY_RENEGOTIATION_INFO_SCSV =                             0x00FF,
+
+       TLS_AES_128_GCM_SHA256 =                                                0x1301,
+       TLS_AES_256_GCM_SHA384 =                                                0x1302,
+       TLS_CHACHA20_POLY1305_SHA256 =                                  0x1303,
+       TLS_AES_128_CCM_SHA256 =                                                0x1304,
+       TLS_AES_128_CCM_8_SHA256 =                                              0x1305,
+
+       TLS_ECDH_ECDSA_WITH_NULL_SHA =                                  0xC001,
+       TLS_ECDH_ECDSA_WITH_RC4_128_SHA =                               0xC002,
+       TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA =                  0xC003,
+       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA =                   0xC004,
+       TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA =                   0xC005,
+       TLS_ECDHE_ECDSA_WITH_NULL_SHA =                                 0xC006,
+       TLS_ECDHE_ECDSA_WITH_RC4_128_SHA =                              0xC007,
+       TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA =                 0xC008,
+       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA =                  0xC009,
+       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA =                  0xC00A,
+       TLS_ECDH_RSA_WITH_NULL_SHA =                                    0xC00B,
+       TLS_ECDH_RSA_WITH_RC4_128_SHA =                                 0xC00C,
+       TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA =                    0xC00D,
+       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA =                             0xC00E,
+       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA =                             0xC00F,
+       TLS_ECDHE_RSA_WITH_NULL_SHA =                                   0xC010,
+       TLS_ECDHE_RSA_WITH_RC4_128_SHA =                                0xC011,
+       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA =                   0xC012,
+       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA =                    0xC013,
+       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA =                    0xC014,
+       TLS_ECDH_anon_WITH_NULL_SHA =                                   0xC015,
+       TLS_ECDH_anon_WITH_RC4_128_SHA =                                0xC016,
+       TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA =                   0xC017,
+       TLS_ECDH_anon_WITH_AES_128_CBC_SHA =                    0xC018,
+       TLS_ECDH_anon_WITH_AES_256_CBC_SHA =                    0xC019,
+       TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA =                             0xC01A,
+       TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA =                 0xC01B,
+       TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA =                 0xC01C,
+       TLS_SRP_SHA_WITH_AES_128_CBC_SHA =                              0xC01D,
+       TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA =                  0xC01E,
+       TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA =                  0xC01F,
+       TLS_SRP_SHA_WITH_AES_256_CBC_SHA =                              0xC020,
+       TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA =                  0xC021,
+       TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA =                  0xC022,
+       TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 =               0xC023,
+       TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 =               0xC024,
+       TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256 =                0xC025,
+       TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 =                0xC026,
+       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 =                 0xC027,
+       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 =                 0xC028,
+       TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256 =                  0xC029,
+       TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 =                  0xC02A,
+       TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 =               0xC02B,
+       TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 =               0xC02C,
+       TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 =                0xC02D,
+       TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 =                0xC02E,
+       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 =                 0xC02F,
+       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 =                 0xC030,
+       TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 =                  0xC031,
+       TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 =                  0xC032,
+       TLS_ECDHE_PSK_WITH_RC4_128_SHA =                                0xC033,
+       TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA =                   0xC034,
+       TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA =                    0xC035,
+       TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA =                    0xC036,
+       TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256 =                 0xC037,
+       TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384 =                 0xC038,
+       TLS_ECDHE_PSK_WITH_NULL_SHA =                                   0xC039,
+       TLS_ECDHE_PSK_WITH_NULL_SHA256 =                                0xC03A,
+       TLS_ECDHE_PSK_WITH_NULL_SHA384 =                                0xC03B,
+       TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 =   0xCCA8,
+       TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 = 0xCCA9,
+       TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 =             0xCCAA,
 };
 
 /**