cosmopolitan/third_party/mbedtls/getciphersuitename.c

753 lines
26 KiB
C
Raw Normal View History

/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:4;tab-width:4;coding:utf-8 -*-│
Add SSL to redbean Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt
2021-06-24 19:31:26 +00:00
vi: set net ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi
Copyright The Mbed TLS Contributors
Add SSL to redbean Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt
2021-06-24 19:31:26 +00:00
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Add SSL to redbean Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt
2021-06-24 19:31:26 +00:00
http://www.apache.org/licenses/LICENSE-2.0 │
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Add SSL to redbean Your redbean can now interoperate with clients that require TLS crypto. This is accomplished using a protocol polyglot that lets us distinguish between HTTP and HTTPS regardless of the port number. Certificates will be generated automatically, if none are supplied by the user. Footprint increases by only a few hundred kb so redbean in MODY=tiny is now 1.0mb - Add lseek() polyfills for ZIP executable - Automatically polyfill /tmp/FOO paths on NT - Fix readdir() / ftw() / nftw() bugs on Windows - Introduce -B flag for slower SSL that's stronger - Remove mbedtls features Cosmopolitan doesn't need - Have base64 decoder support the uri-safe alternative - Remove Truncated HMAC because it's forbidden by the IETF - Add all the mbedtls test suites and make them go 3x faster - Support opendir() / readdir() / closedir() on ZIP executable - Use Everest for ECDHE-ECDSA because it's so good it's so good - Add tinier implementation of sha1 since it's not worth the rom - Add chi-square monte-carlo mean correlation tests for getrandom() - Source entropy on Windows from the proper interface everyone uses We're continuing to outperform NGINX and other servers on raw message throughput. Using SSL means that instead of 1,000,000 qps you can get around 300,000 qps. However redbean isn't as fast as NGINX yet at SSL handshakes, since redbean can do 2,627 per second and NGINX does 4.3k Right now, the SSL UX story works best if you give your redbean a key signing key since that can be easily generated by openssl using a one liner then redbean will do all the things that are impossibly hard to do like signing ecdsa and rsa certificates that'll work in chrome. We should integrate the let's encrypt acme protocol in the future. Live Demo: https://redbean.justine.lol/ Root Cert: https://redbean.justine.lol/redbean1.crt
2021-06-24 19:31:26 +00:00
*/
#include "third_party/mbedtls/iana.h"
const char *GetCipherSuiteName(uint16_t x) {
switch (x) {
case 0x0000:
return "TLS_NULL_WITH_NULL_NULL";
case 0x0001:
return "TLS_RSA_WITH_NULL_MD5";
case 0x0002:
return "TLS_RSA_WITH_NULL_SHA";
case 0x0003:
return "TLS_RSA_EXPORT_WITH_RC4_40_MD5";
case 0x0004:
return "TLS_RSA_WITH_RC4_128_MD5";
case 0x0005:
return "TLS_RSA_WITH_RC4_128_SHA";
case 0x0006:
return "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5";
case 0x0007:
return "TLS_RSA_WITH_IDEA_CBC_SHA";
case 0x0008:
return "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA";
case 0x0009:
return "TLS_RSA_WITH_DES_CBC_SHA";
case 0x000A:
return "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
case 0x000B:
return "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA";
case 0x000C:
return "TLS_DH_DSS_WITH_DES_CBC_SHA";
case 0x000D:
return "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA";
case 0x000E:
return "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA";
case 0x000F:
return "TLS_DH_RSA_WITH_DES_CBC_SHA";
case 0x0010:
return "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA";
case 0x0011:
return "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA";
case 0x0012:
return "TLS_DHE_DSS_WITH_DES_CBC_SHA";
case 0x0013:
return "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
case 0x0014:
return "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA";
case 0x0015:
return "TLS_DHE_RSA_WITH_DES_CBC_SHA";
case 0x0016:
return "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
case 0x0017:
return "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5";
case 0x0018:
return "TLS_DH_anon_WITH_RC4_128_MD5";
case 0x0019:
return "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA";
case 0x001A:
return "TLS_DH_anon_WITH_DES_CBC_SHA";
case 0x001B:
return "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
case 0x001E:
return "TLS_KRB5_WITH_DES_CBC_SHA";
case 0x001F:
return "TLS_KRB5_WITH_3DES_EDE_CBC_SHA";
case 0x0020:
return "TLS_KRB5_WITH_RC4_128_SHA";
case 0x0021:
return "TLS_KRB5_WITH_IDEA_CBC_SHA";
case 0x0022:
return "TLS_KRB5_WITH_DES_CBC_MD5";
case 0x0023:
return "TLS_KRB5_WITH_3DES_EDE_CBC_MD5";
case 0x0024:
return "TLS_KRB5_WITH_RC4_128_MD5";
case 0x0025:
return "TLS_KRB5_WITH_IDEA_CBC_MD5";
case 0x0026:
return "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA";
case 0x0027:
return "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA";
case 0x0028:
return "TLS_KRB5_EXPORT_WITH_RC4_40_SHA";
case 0x0029:
return "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5";
case 0x002A:
return "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5";
case 0x002B:
return "TLS_KRB5_EXPORT_WITH_RC4_40_MD5";
case 0x002C:
return "TLS_PSK_WITH_NULL_SHA";
case 0x002D:
return "TLS_DHE_PSK_WITH_NULL_SHA";
case 0x002E:
return "TLS_RSA_PSK_WITH_NULL_SHA";
case 0x002F:
return "TLS_RSA_WITH_AES_128_CBC_SHA";
case 0x0030:
return "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
case 0x0031:
return "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
case 0x0032:
return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
case 0x0033:
return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
case 0x0034:
return "TLS_DH_anon_WITH_AES_128_CBC_SHA";
case 0x0035:
return "TLS_RSA_WITH_AES_256_CBC_SHA";
case 0x0036:
return "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
case 0x0037:
return "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
case 0x0038:
return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
case 0x0039:
return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
case 0x003A:
return "TLS_DH_anon_WITH_AES_256_CBC_SHA";
case 0x003B:
return "TLS_RSA_WITH_NULL_SHA256";
case 0x003C:
return "TLS_RSA_WITH_AES_128_CBC_SHA256";
case 0x003D:
return "TLS_RSA_WITH_AES_256_CBC_SHA256";
case 0x003E:
return "TLS_DH_DSS_WITH_AES_128_CBC_SHA256";
case 0x003F:
return "TLS_DH_RSA_WITH_AES_128_CBC_SHA256";
case 0x0040:
return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
case 0x0041:
return "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA";
case 0x0042:
return "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA";
case 0x0043:
return "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA";
case 0x0044:
return "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA";
case 0x0045:
return "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA";
case 0x0046:
return "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA";
case 0x0067:
return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
case 0x0068:
return "TLS_DH_DSS_WITH_AES_256_CBC_SHA256";
case 0x0069:
return "TLS_DH_RSA_WITH_AES_256_CBC_SHA256";
case 0x006A:
return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
case 0x006B:
return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
case 0x006C:
return "TLS_DH_anon_WITH_AES_128_CBC_SHA256";
case 0x006D:
return "TLS_DH_anon_WITH_AES_256_CBC_SHA256";
case 0x0084:
return "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA";
case 0x0085:
return "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA";
case 0x0086:
return "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA";
case 0x0087:
return "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA";
case 0x0088:
return "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA";
case 0x0089:
return "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA";
case 0x008A:
return "TLS_PSK_WITH_RC4_128_SHA";
case 0x008B:
return "TLS_PSK_WITH_3DES_EDE_CBC_SHA";
case 0x008C:
return "TLS_PSK_WITH_AES_128_CBC_SHA";
case 0x008D:
return "TLS_PSK_WITH_AES_256_CBC_SHA";
case 0x008E:
return "TLS_DHE_PSK_WITH_RC4_128_SHA";
case 0x008F:
return "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA";
case 0x0090:
return "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
case 0x0091:
return "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
case 0x0092:
return "TLS_RSA_PSK_WITH_RC4_128_SHA";
case 0x0093:
return "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA";
case 0x0094:
return "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
case 0x0095:
return "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
case 0x0096:
return "TLS_RSA_WITH_SEED_CBC_SHA";
case 0x0097:
return "TLS_DH_DSS_WITH_SEED_CBC_SHA";
case 0x0098:
return "TLS_DH_RSA_WITH_SEED_CBC_SHA";
case 0x0099:
return "TLS_DHE_DSS_WITH_SEED_CBC_SHA";
case 0x009A:
return "TLS_DHE_RSA_WITH_SEED_CBC_SHA";
case 0x009B:
return "TLS_DH_anon_WITH_SEED_CBC_SHA";
case 0x009C:
return "TLS_RSA_WITH_AES_128_GCM_SHA256";
case 0x009D:
return "TLS_RSA_WITH_AES_256_GCM_SHA384";
case 0x009E:
return "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
case 0x009F:
return "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
case 0x00A0:
return "TLS_DH_RSA_WITH_AES_128_GCM_SHA256";
case 0x00A1:
return "TLS_DH_RSA_WITH_AES_256_GCM_SHA384";
case 0x00A2:
return "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
case 0x00A3:
return "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
case 0x00A4:
return "TLS_DH_DSS_WITH_AES_128_GCM_SHA256";
case 0x00A5:
return "TLS_DH_DSS_WITH_AES_256_GCM_SHA384";
case 0x00A6:
return "TLS_DH_anon_WITH_AES_128_GCM_SHA256";
case 0x00A7:
return "TLS_DH_anon_WITH_AES_256_GCM_SHA384";
case 0x00A8:
return "TLS_PSK_WITH_AES_128_GCM_SHA256";
case 0x00A9:
return "TLS_PSK_WITH_AES_256_GCM_SHA384";
case 0x00AA:
return "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
case 0x00AB:
return "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
case 0x00AC:
return "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
case 0x00AD:
return "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384";
case 0x00AE:
return "TLS_PSK_WITH_AES_128_CBC_SHA256";
case 0x00AF:
return "TLS_PSK_WITH_AES_256_CBC_SHA384";
case 0x00B0:
return "TLS_PSK_WITH_NULL_SHA256";
case 0x00B1:
return "TLS_PSK_WITH_NULL_SHA384";
case 0x00B2:
return "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
case 0x00B3:
return "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
case 0x00B4:
return "TLS_DHE_PSK_WITH_NULL_SHA256";
case 0x00B5:
return "TLS_DHE_PSK_WITH_NULL_SHA384";
case 0x00B6:
return "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
case 0x00B7:
return "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
case 0x00B8:
return "TLS_RSA_PSK_WITH_NULL_SHA256";
case 0x00B9:
return "TLS_RSA_PSK_WITH_NULL_SHA384";
case 0x00BA:
return "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0x00BB:
return "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256";
case 0x00BC:
return "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0x00BD:
return "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256";
case 0x00BE:
return "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0x00BF:
return "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256";
case 0x00C0:
return "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256";
case 0x00C1:
return "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256";
case 0x00C2:
return "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256";
case 0x00C3:
return "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256";
case 0x00C4:
return "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256";
case 0x00C5:
return "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256";
case 0x00C6:
return "TLS_SM4_GCM_SM3";
case 0x00C7:
return "TLS_SM4_CCM_SM3";
case 0x00FF:
return "TLS_EMPTY_RENEGOTIATION_INFO_SCSV";
case 0x1301:
return "TLS_AES_128_GCM_SHA256";
case 0x1302:
return "TLS_AES_256_GCM_SHA384";
case 0x1303:
return "TLS_CHACHA20_POLY1305_SHA256";
case 0x1304:
return "TLS_AES_128_CCM_SHA256";
case 0x1305:
return "TLS_AES_128_CCM_8_SHA256";
case 0x5600:
return "TLS_FALLBACK_SCSV";
case 0xC001:
return "TLS_ECDH_ECDSA_WITH_NULL_SHA";
case 0xC002:
return "TLS_ECDH_ECDSA_WITH_RC4_128_SHA";
case 0xC003:
return "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA";
case 0xC004:
return "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA";
case 0xC005:
return "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA";
case 0xC006:
return "TLS_ECDHE_ECDSA_WITH_NULL_SHA";
case 0xC007:
return "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
case 0xC008:
return "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA";
case 0xC009:
return "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
case 0xC00A:
return "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
case 0xC00B:
return "TLS_ECDH_RSA_WITH_NULL_SHA";
case 0xC00C:
return "TLS_ECDH_RSA_WITH_RC4_128_SHA";
case 0xC00D:
return "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA";
case 0xC00E:
return "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA";
case 0xC00F:
return "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA";
case 0xC010:
return "TLS_ECDHE_RSA_WITH_NULL_SHA";
case 0xC011:
return "TLS_ECDHE_RSA_WITH_RC4_128_SHA";
case 0xC012:
return "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA";
case 0xC013:
return "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
case 0xC014:
return "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
case 0xC015:
return "TLS_ECDH_anon_WITH_NULL_SHA";
case 0xC016:
return "TLS_ECDH_anon_WITH_RC4_128_SHA";
case 0xC017:
return "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA";
case 0xC018:
return "TLS_ECDH_anon_WITH_AES_128_CBC_SHA";
case 0xC019:
return "TLS_ECDH_anon_WITH_AES_256_CBC_SHA";
case 0xC01A:
return "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA";
case 0xC01B:
return "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA";
case 0xC01C:
return "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA";
case 0xC01D:
return "TLS_SRP_SHA_WITH_AES_128_CBC_SHA";
case 0xC01E:
return "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA";
case 0xC01F:
return "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA";
case 0xC020:
return "TLS_SRP_SHA_WITH_AES_256_CBC_SHA";
case 0xC021:
return "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA";
case 0xC022:
return "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA";
case 0xC023:
return "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
case 0xC024:
return "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
case 0xC025:
return "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256";
case 0xC026:
return "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384";
case 0xC027:
return "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
case 0xC028:
return "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
case 0xC029:
return "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256";
case 0xC02A:
return "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384";
case 0xC02B:
return "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
case 0xC02C:
return "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
case 0xC02D:
return "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256";
case 0xC02E:
return "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384";
case 0xC02F:
return "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
case 0xC030:
return "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
case 0xC031:
return "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256";
case 0xC032:
return "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384";
case 0xC033:
return "TLS_ECDHE_PSK_WITH_RC4_128_SHA";
case 0xC034:
return "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA";
case 0xC035:
return "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA";
case 0xC036:
return "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA";
case 0xC037:
return "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256";
case 0xC038:
return "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384";
case 0xC039:
return "TLS_ECDHE_PSK_WITH_NULL_SHA";
case 0xC03A:
return "TLS_ECDHE_PSK_WITH_NULL_SHA256";
case 0xC03B:
return "TLS_ECDHE_PSK_WITH_NULL_SHA384";
case 0xC03C:
return "TLS_RSA_WITH_ARIA_128_CBC_SHA256";
case 0xC03D:
return "TLS_RSA_WITH_ARIA_256_CBC_SHA384";
case 0xC03E:
return "TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256";
case 0xC03F:
return "TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384";
case 0xC040:
return "TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256";
case 0xC041:
return "TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384";
case 0xC042:
return "TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256";
case 0xC043:
return "TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384";
case 0xC044:
return "TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256";
case 0xC045:
return "TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384";
case 0xC046:
return "TLS_DH_anon_WITH_ARIA_128_CBC_SHA256";
case 0xC047:
return "TLS_DH_anon_WITH_ARIA_256_CBC_SHA384";
case 0xC048:
return "TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256";
case 0xC049:
return "TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384";
case 0xC04A:
return "TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256";
case 0xC04B:
return "TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384";
case 0xC04C:
return "TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256";
case 0xC04D:
return "TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384";
case 0xC04E:
return "TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256";
case 0xC04F:
return "TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384";
case 0xC050:
return "TLS_RSA_WITH_ARIA_128_GCM_SHA256";
case 0xC051:
return "TLS_RSA_WITH_ARIA_256_GCM_SHA384";
case 0xC052:
return "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256";
case 0xC053:
return "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384";
case 0xC054:
return "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256";
case 0xC055:
return "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384";
case 0xC056:
return "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256";
case 0xC057:
return "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384";
case 0xC058:
return "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256";
case 0xC059:
return "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384";
case 0xC05A:
return "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256";
case 0xC05B:
return "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384";
case 0xC05C:
return "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256";
case 0xC05D:
return "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384";
case 0xC05E:
return "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256";
case 0xC05F:
return "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384";
case 0xC060:
return "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256";
case 0xC061:
return "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384";
case 0xC062:
return "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256";
case 0xC063:
return "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384";
case 0xC064:
return "TLS_PSK_WITH_ARIA_128_CBC_SHA256";
case 0xC065:
return "TLS_PSK_WITH_ARIA_256_CBC_SHA384";
case 0xC066:
return "TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256";
case 0xC067:
return "TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384";
case 0xC068:
return "TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256";
case 0xC069:
return "TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384";
case 0xC06A:
return "TLS_PSK_WITH_ARIA_128_GCM_SHA256";
case 0xC06B:
return "TLS_PSK_WITH_ARIA_256_GCM_SHA384";
case 0xC06C:
return "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256";
case 0xC06D:
return "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384";
case 0xC06E:
return "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256";
case 0xC06F:
return "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384";
case 0xC070:
return "TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256";
case 0xC071:
return "TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384";
case 0xC072:
return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC073:
return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC074:
return "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC075:
return "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC076:
return "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC077:
return "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC078:
return "TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC079:
return "TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC07A:
return "TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC07B:
return "TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC07C:
return "TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC07D:
return "TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC07E:
return "TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC07F:
return "TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC080:
return "TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC081:
return "TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC082:
return "TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC083:
return "TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC084:
return "TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC085:
return "TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC086:
return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC087:
return "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC088:
return "TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC089:
return "TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC08A:
return "TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC08B:
return "TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC08C:
return "TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC08D:
return "TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC08E:
return "TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC08F:
return "TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC090:
return "TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC091:
return "TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC092:
return "TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256";
case 0xC093:
return "TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384";
case 0xC094:
return "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC095:
return "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC096:
return "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC097:
return "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC098:
return "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC099:
return "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC09A:
return "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256";
case 0xC09B:
return "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384";
case 0xC09C:
return "TLS_RSA_WITH_AES_128_CCM";
case 0xC09D:
return "TLS_RSA_WITH_AES_256_CCM";
case 0xC09E:
return "TLS_DHE_RSA_WITH_AES_128_CCM";
case 0xC09F:
return "TLS_DHE_RSA_WITH_AES_256_CCM";
case 0xC0A0:
return "TLS_RSA_WITH_AES_128_CCM_8";
case 0xC0A1:
return "TLS_RSA_WITH_AES_256_CCM_8";
case 0xC0A2:
return "TLS_DHE_RSA_WITH_AES_128_CCM_8";
case 0xC0A3:
return "TLS_DHE_RSA_WITH_AES_256_CCM_8";
case 0xC0A4:
return "TLS_PSK_WITH_AES_128_CCM";
case 0xC0A5:
return "TLS_PSK_WITH_AES_256_CCM";
case 0xC0A6:
return "TLS_DHE_PSK_WITH_AES_128_CCM";
case 0xC0A7:
return "TLS_DHE_PSK_WITH_AES_256_CCM";
case 0xC0A8:
return "TLS_PSK_WITH_AES_128_CCM_8";
case 0xC0A9:
return "TLS_PSK_WITH_AES_256_CCM_8";
case 0xC0AA:
return "TLS_PSK_DHE_WITH_AES_128_CCM_8";
case 0xC0AB:
return "TLS_PSK_DHE_WITH_AES_256_CCM_8";
case 0xC0AC:
return "TLS_ECDHE_ECDSA_WITH_AES_128_CCM";
case 0xC0AD:
return "TLS_ECDHE_ECDSA_WITH_AES_256_CCM";
case 0xC0AE:
return "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8";
case 0xC0AF:
return "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8";
case 0xC0B0:
return "TLS_ECCPWD_WITH_AES_128_GCM_SHA256";
case 0xC0B1:
return "TLS_ECCPWD_WITH_AES_256_GCM_SHA384";
case 0xC0B2:
return "TLS_ECCPWD_WITH_AES_128_CCM_SHA256";
case 0xC0B3:
return "TLS_ECCPWD_WITH_AES_256_CCM_SHA384";
case 0xC0B4:
return "TLS_SHA256_SHA256";
case 0xC0B5:
return "TLS_SHA384_SHA384";
case 0xC100:
return "TLS_GOSTR341112_256_WITH_KUZNYECHIK_CTR_OMAC";
case 0xC101:
return "TLS_GOSTR341112_256_WITH_MAGMA_CTR_OMAC";
case 0xC102:
return "TLS_GOSTR341112_256_WITH_28147_CNT_IMIT";
case 0xC103:
return "TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_L";
case 0xC104:
return "TLS_GOSTR341112_256_WITH_MAGMA_MGM_L";
case 0xC105:
return "TLS_GOSTR341112_256_WITH_KUZNYECHIK_MGM_S";
case 0xC106:
return "TLS_GOSTR341112_256_WITH_MAGMA_MGM_S";
case 0xCCA8:
return "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
case 0xCCA9:
return "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256";
case 0xCCAA:
return "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256";
case 0xCCAB:
return "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256";
case 0xCCAC:
return "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256";
case 0xCCAD:
return "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256";
case 0xCCAE:
return "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256";
case 0xD001:
return "TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256";
case 0xD002:
return "TLS_ECDHE_PSK_WITH_AES_256_GCM_SHA384";
case 0xD003:
return "TLS_ECDHE_PSK_WITH_AES_128_CCM_8_SHA256";
case 0xD005:
return "TLS_ECDHE_PSK_WITH_AES_128_CCM_SHA256";
case 0x0A0A:
case 0x1A1A:
case 0x2A2A:
case 0x3A3A:
case 0x4A4A:
case 0x5A5A:
case 0x6A6A:
case 0x7A7A:
case 0x8A8A:
case 0x9A9A:
case 0xAAAA:
case 0xBABA:
case 0xCACA:
case 0xDADA:
case 0xEAEA:
case 0xFAFA:
return "GREASE_RFC8701";
case 0x0047 ... 0x004F:
case 0x0050 ... 0x0058:
case 0x0059 ... 0x005C:
case 0x0060 ... 0x0066:
case 0xFEFE ... 0xFEFF:
return "RESERVED_NO_CONFLICT";
case 0x001C ... 0x001D:
return "RESERVED_SSLV3_RFC5246";
case 0xFF00 ... 0xFFFF:
return "PRIVATE_USE_RFC8446";
default:
return "UNASSIGNED";
}
}