Introduce cipher constants without the leading 0x03

It is confusing to always have to explain that our API believes
different notion of cipher suite ID than the IETF does. The only gap at
this point is that we don't have constants defined.

Define the constants for the cipher suites we implement, then deprecate
all the old stuff. Switch ourselves internally to only pass the 16-bit
IDs around, which avoids some confusing 0xffffs. The leading 0x03 can be
pasted on at the legacy SSL_CIPHER_get_id function.

The new constants were named to match the IANA names, minus the leading
TLS_. This means a few constants don't match their CK values in name.

There are TLS1_CK_ constants for a host of cipher suites we don't
implement. I've left them alone for now, but I think we can remove them
in a follow-up commit.

Change-Id: Ifeb9cdceb351610fab7633c4068a8729a64ff11b
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/82307
Auto-Submit: David Benjamin <davidben@google.com>
Reviewed-by: Lily Chen <chlily@google.com>
Commit-Queue: Lily Chen <chlily@google.com>
diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h
index a648f5f..f77d834 100644
--- a/include/openssl/ssl.h
+++ b/include/openssl/ssl.h
@@ -1454,17 +1454,44 @@
 
 DEFINE_CONST_STACK_OF(SSL_CIPHER)
 
+// The following constants are TLS cipher suite protocol IDs, as returned from
+// |SSL_CIPHER_get_protocol_id|.
+#define SSL_CIPHER_AES_128_GCM_SHA256 0x1301
+#define SSL_CIPHER_AES_256_GCM_SHA384 0x1302
+#define SSL_CIPHER_CHACHA20_POLY1305_SHA256 0x1303
+#define SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0xc02b
+#define SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0xc02c
+#define SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0xc02f
+#define SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0xc030
+#define SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0xcca8
+#define SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0xcca9
+#define SSL_CIPHER_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0xccac
+#define SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0xc009
+#define SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0xc00a
+#define SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA 0xc013
+#define SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA 0xc014
+#define SSL_CIPHER_ECDHE_PSK_WITH_AES_128_CBC_SHA 0xc035
+#define SSL_CIPHER_ECDHE_PSK_WITH_AES_256_CBC_SHA 0xc036
+#define SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0xc027
+#define SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256 0x009c
+#define SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384 0x009d
+#define SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA 0x002f
+#define SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA 0x0035
+#define SSL_CIPHER_PSK_WITH_AES_128_CBC_SHA 0x008c
+#define SSL_CIPHER_PSK_WITH_AES_256_CBC_SHA 0x008d
+#define SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA 0x000a
+
+// The following constants are not cipher suites, but are used in the protocol
+// as signalling values.
+#define SSL_CIPHER_EMPTY_RENEGOTIATION_INFO_SCSV 0x00ff
+#define SSL_CIPHER_FALLBACK_SCSV 0x5600
+
 // SSL_get_cipher_by_value returns the structure representing a TLS cipher
 // suite based on its assigned number, or NULL if unknown. See
 // https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4.
 OPENSSL_EXPORT const SSL_CIPHER *SSL_get_cipher_by_value(uint16_t value);
 
-// SSL_CIPHER_get_id returns |cipher|'s non-IANA id. This is not its
-// IANA-assigned number, which is called the "value" here, although it may be
-// cast to a |uint16_t| to get it.
-OPENSSL_EXPORT uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *cipher);
-
-// SSL_CIPHER_get_protocol_id returns |cipher|'s IANA-assigned number.
+// SSL_CIPHER_get_protocol_id returns |cipher|'s two-byte protocol ID.
 OPENSSL_EXPORT uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *cipher);
 
 // SSL_CIPHER_is_aead returns one if |cipher| uses an AEAD cipher.
@@ -5249,6 +5276,70 @@
 // SSL_CIPHER_get_version returns the string "TLSv1/SSLv3".
 OPENSSL_EXPORT const char *SSL_CIPHER_get_version(const SSL_CIPHER *cipher);
 
+// The following constants are equal to TLS cipher suite values, OR-d with
+// 0x03000000. This is part of OpenSSL's SSL 2.0 legacy. SSL 2.0 has long since
+// been removed from BoringSSL.
+#define TLS1_3_CK_AES_128_GCM_SHA256 (SSL_CIPHER_AES_128_GCM_SHA256 | 0x03000000)
+#define TLS1_3_CK_AES_256_GCM_SHA384 \
+  (SSL_CIPHER_AES_256_GCM_SHA384 | 0x03000000)
+#define TLS1_3_CK_CHACHA20_POLY1305_SHA256 \
+  (SSL_CIPHER_CHACHA20_POLY1305_SHA256 | 0x03000000)
+#define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 \
+  (SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | 0x03000000)
+#define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 \
+  (SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | 0x03000000)
+#define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 \
+  (SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | 0x03000000)
+#define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 \
+  (SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | 0x03000000)
+#define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 \
+  (SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 | 0x03000000)
+#define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 \
+  (SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 | 0x03000000)
+#define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 \
+  (SSL_CIPHER_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 | 0x03000000)
+#define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA \
+  (SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA | 0x03000000)
+#define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA \
+  (SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA | 0x03000000)
+#define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA \
+  (SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA | 0x03000000)
+#define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA \
+  (SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA | 0x03000000)
+#define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA \
+  (SSL_CIPHER_ECDHE_PSK_WITH_AES_128_CBC_SHA | 0x03000000)
+#define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA \
+  (SSL_CIPHER_ECDHE_PSK_WITH_AES_256_CBC_SHA | 0x03000000)
+#define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256 \
+  (SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | 0x03000000)
+#define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 \
+  (SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256 | 0x03000000)
+#define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 \
+  (SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384 | 0x03000000)
+#define TLS1_CK_RSA_WITH_AES_128_SHA \
+  (SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA | 0x03000000)
+#define TLS1_CK_RSA_WITH_AES_256_SHA \
+  (SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA | 0x03000000)
+#define TLS1_CK_PSK_WITH_AES_128_CBC_SHA \
+  (SSL_CIPHER_PSK_WITH_AES_128_CBC_SHA | 0x03000000)
+#define TLS1_CK_PSK_WITH_AES_256_CBC_SHA \
+  (SSL_CIPHER_PSK_WITH_AES_256_CBC_SHA | 0x03000000)
+#define SSL3_CK_RSA_DES_192_CBC3_SHA \
+  (SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA | 0x03000000)
+#define SSL3_CK_SCSV (SSL_CIPHER_EMPTY_RENEGOTIATION_INFO_SCSV | 0x03000000)
+#define SSL3_CK_FALLBACK_SCSV (SSL_CIPHER_FALLBACK_SCSV | 0x03000000)
+
+// SSL_CIPHER_get_id returns |cipher|'s IANA-assigned number, OR-d with
+// 0x03000000. This is part of OpenSSL's SSL 2.0 legacy. SSL 2.0 has long since
+// been removed from BoringSSL. Use |SSL_CIPHER_get_protocol_id| instead.
+OPENSSL_EXPORT uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *cipher);
+
+// The following constants are legacy aliases of |TLS1_3_CK_*|.
+// TODO(davidben): Migrate callers to the new name and remove these.
+#define TLS1_CK_AES_128_GCM_SHA256 TLS1_3_CK_AES_128_GCM_SHA256
+#define TLS1_CK_AES_256_GCM_SHA384 TLS1_3_CK_AES_256_GCM_SHA384
+#define TLS1_CK_CHACHA20_POLY1305_SHA256 TLS1_3_CK_CHACHA20_POLY1305_SHA256
+
 typedef void COMP_METHOD;
 typedef struct ssl_comp_st SSL_COMP;
 
diff --git a/include/openssl/ssl3.h b/include/openssl/ssl3.h
index 331582f..018ff5d 100644
--- a/include/openssl/ssl3.h
+++ b/include/openssl/ssl3.h
@@ -23,16 +23,15 @@
 #endif
 
 
-// These are kept to support clients that negotiates higher protocol versions
+// These are kept to support clients that negotiate higher protocol versions
 // using SSLv2 client hello records.
 #define SSL2_MT_CLIENT_HELLO 1
 #define SSL2_VERSION 0x0002
 
-// Signalling cipher suite value from RFC 5746.
-#define SSL3_CK_SCSV 0x030000FF
-// Fallback signalling cipher suite value from RFC 7507.
-#define SSL3_CK_FALLBACK_SCSV 0x03005600
-
+// The following cipher suites are not implemented by BoringSSL. The constants
+// are defined for backwards compatibility. Cipher suites implemented in
+// BoringSSL are defined in ssl.h.
+// TODO(davidben): Remove these constants.
 #define SSL3_CK_RSA_NULL_MD5 0x03000001
 #define SSL3_CK_RSA_NULL_SHA 0x03000002
 #define SSL3_CK_RSA_RC4_40_MD5 0x03000003
@@ -42,22 +41,18 @@
 #define SSL3_CK_RSA_IDEA_128_SHA 0x03000007
 #define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008
 #define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009
-#define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A
-
 #define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B
 #define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C
 #define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D
 #define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E
 #define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F
 #define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010
-
 #define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011
 #define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012
 #define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013
 #define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014
 #define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015
 #define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016
-
 #define SSL3_CK_ADH_RC4_40_MD5 0x03000017
 #define SSL3_CK_ADH_RC4_128_MD5 0x03000018
 #define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019
diff --git a/include/openssl/tls1.h b/include/openssl/tls1.h
index dde04dd..07631d6 100644
--- a/include/openssl/tls1.h
+++ b/include/openssl/tls1.h
@@ -169,62 +169,34 @@
 
 #define TLSEXT_MAXLEN_host_name 255
 
-// PSK ciphersuites from 4279
+// The following cipher suites are not implemented by BoringSSL. The constants
+// are defined for backwards compatibility. Cipher suites implemented in
+// BoringSSL are defined in ssl.h.
+// TODO(davidben): Remove these constants.
 #define TLS1_CK_PSK_WITH_RC4_128_SHA 0x0300008A
 #define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B
-#define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C
-#define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D
-
-// PSK ciphersuites from RFC 5489
-#define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035
-#define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036
-
-// Additional TLS ciphersuites from expired Internet Draft
-// draft-ietf-tls-56-bit-ciphersuites-01.txt
-// (available if TLS1_ALLOW_EXPERIMENTAL_CIPHERSUITES is defined, see
-// s3_lib.c).  We actually treat them like SSL 3.0 ciphers, which we probably
-// shouldn't.  Note that the first two are actually not in the IDs.
-#define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060      // not in ID
-#define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061  // not in ID
-#define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062
-#define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063
-#define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064
-#define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065
-#define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066
-
-// AES ciphersuites from RFC 3268
-
-#define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F
 #define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030
 #define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031
 #define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032
 #define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033
 #define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034
-
-#define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035
 #define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036
 #define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037
 #define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038
 #define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039
 #define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A
-
-// TLS v1.2 ciphersuites
 #define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B
 #define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C
 #define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D
 #define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E
 #define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F
 #define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040
-
-// Camellia ciphersuites from RFC 4132
 #define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041
 #define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042
 #define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043
 #define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044
 #define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045
 #define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046
-
-// TLS v1.2 ciphersuites
 #define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067
 #define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068
 #define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069
@@ -232,26 +204,18 @@
 #define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B
 #define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C
 #define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D
-
-// Camellia ciphersuites from RFC 4132
 #define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084
 #define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085
 #define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086
 #define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087
 #define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088
 #define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089
-
-// SEED ciphersuites from RFC 4162
 #define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096
 #define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097
 #define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098
 #define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099
 #define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A
 #define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B
-
-// TLS v1.2 GCM ciphersuites from RFC 5288
-#define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C
-#define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D
 #define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E
 #define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F
 #define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0
@@ -262,41 +226,27 @@
 #define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5
 #define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6
 #define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7
-
-// ECC ciphersuites from RFC 4492
 #define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001
 #define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002
 #define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003
 #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004
 #define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005
-
 #define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006
 #define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007
 #define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008
-#define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009
-#define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A
-
 #define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B
 #define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C
 #define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D
 #define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E
 #define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F
-
 #define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010
 #define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011
 #define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012
-#define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013
-#define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014
-
-#define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256 0x0300C027
-
 #define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015
 #define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016
 #define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017
 #define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018
 #define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019
-
-// SRP ciphersuites from RFC 5054
 #define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A
 #define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B
 #define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C
@@ -306,9 +256,6 @@
 #define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020
 #define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021
 #define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022
-
-// ECDH HMAC based ciphersuites from RFC 5289
-
 #define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023
 #define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024
 #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025
@@ -317,32 +264,22 @@
 #define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028
 #define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029
 #define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A
-
-// ECDH GCM based ciphersuites from RFC 5289
-#define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B
-#define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C
 #define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D
 #define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E
-#define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F
-#define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030
 #define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031
 #define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032
 
-// ChaCha20-Poly1305 cipher suites from RFC 7905.
-#define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 0x0300CCA8
-#define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 0x0300CCA9
-#define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 0x0300CCAC
-
-// TLS 1.3 ciphersuites from RFC 8446.
-#define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301
-#define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302
-#define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303
-
-// The following constants are legacy aliases of |TLS1_3_CK_*|.
-// TODO(davidben): Migrate callers to the new name and remove these.
-#define TLS1_CK_AES_128_GCM_SHA256 TLS1_3_CK_AES_128_GCM_SHA256
-#define TLS1_CK_AES_256_GCM_SHA384 TLS1_3_CK_AES_256_GCM_SHA384
-#define TLS1_CK_CHACHA20_POLY1305_SHA256 TLS1_3_CK_CHACHA20_POLY1305_SHA256
+// Additional TLS ciphersuites from expired Internet Draft
+// draft-ietf-tls-56-bit-ciphersuites-01.txt. These are also not implemented in
+// BoringSSL.
+// TODO(davidben): Remove these constants.
+#define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_MD5 0x03000060      // not in ID
+#define TLS1_CK_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 0x03000061  // not in ID
+#define TLS1_CK_RSA_EXPORT1024_WITH_DES_CBC_SHA 0x03000062
+#define TLS1_CK_DHE_DSS_EXPORT1024_WITH_DES_CBC_SHA 0x03000063
+#define TLS1_CK_RSA_EXPORT1024_WITH_RC4_56_SHA 0x03000064
+#define TLS1_CK_DHE_DSS_EXPORT1024_WITH_RC4_56_SHA 0x03000065
+#define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066
 
 // XXX
 // Inconsistency alert:
diff --git a/ssl/extensions.cc b/ssl/extensions.cc
index 2169966..b6043e4 100644
--- a/ssl/extensions.cc
+++ b/ssl/extensions.cc
@@ -4072,8 +4072,8 @@
     CBS *contents = NULL, fake_contents;
     static const uint8_t kFakeRenegotiateExtension[] = {0};
     if (kExtensions[i].value == TLSEXT_TYPE_renegotiate &&
-        ssl_client_cipher_list_contains_cipher(client_hello,
-                                               SSL3_CK_SCSV & 0xffff)) {
+        ssl_client_cipher_list_contains_cipher(
+            client_hello, SSL_CIPHER_EMPTY_RENEGOTIATION_INFO_SCSV)) {
       // The renegotiation SCSV was received so pretend that we received a
       // renegotiation extension.
       CBS_init(&fake_contents, kFakeRenegotiateExtension,
diff --git a/ssl/handoff.cc b/ssl/handoff.cc
index 5598b1c..f318b14 100644
--- a/ssl/handoff.cc
+++ b/ssl/handoff.cc
@@ -50,7 +50,7 @@
   }
   Span<const SSL_CIPHER> all_ciphers = AllCiphers();
   for (const SSL_CIPHER &cipher : all_ciphers) {
-    if (!CBB_add_u16(&ciphers, static_cast<uint16_t>(cipher.id))) {
+    if (!CBB_add_u16(&ciphers, cipher.protocol_id)) {
       return false;
     }
   }
diff --git a/ssl/handshake_client.cc b/ssl/handshake_client.cc
index ff760be..9224bfe 100644
--- a/ssl/handshake_client.cc
+++ b/ssl/handshake_client.cc
@@ -111,19 +111,19 @@
   // hardware support.
   if (hs->max_version >= TLS1_3_VERSION) {
     static const uint16_t kCiphersNoAESHardware[] = {
-        TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
-        TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff,
-        TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff,
+        SSL_CIPHER_CHACHA20_POLY1305_SHA256,
+        SSL_CIPHER_AES_128_GCM_SHA256,
+        SSL_CIPHER_AES_256_GCM_SHA384,
     };
     static const uint16_t kCiphersAESHardware[] = {
-        TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff,
-        TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff,
-        TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
+        SSL_CIPHER_AES_128_GCM_SHA256,
+        SSL_CIPHER_AES_256_GCM_SHA384,
+        SSL_CIPHER_CHACHA20_POLY1305_SHA256,
     };
     static const uint16_t kCiphersCNSA[] = {
-        TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff,
-        TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff,
-        TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
+        SSL_CIPHER_AES_256_GCM_SHA384,
+        SSL_CIPHER_AES_128_GCM_SHA256,
+        SSL_CIPHER_CHACHA20_POLY1305_SHA256,
     };
 
     const bool has_aes_hw = ssl->config->aes_hw_override
@@ -169,7 +169,7 @@
   }
 
   if (ssl->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
-    if (!CBB_add_u16(&child, SSL3_CK_FALLBACK_SCSV & 0xffff)) {
+    if (!CBB_add_u16(&child, SSL_CIPHER_FALLBACK_SCSV)) {
       return false;
     }
   }
diff --git a/ssl/handshake_server.cc b/ssl/handshake_server.cc
index 1661430..d4fc10d 100644
--- a/ssl/handshake_server.cc
+++ b/ssl/handshake_server.cc
@@ -115,7 +115,7 @@
 
   // Handle FALLBACK_SCSV.
   if (ssl_client_cipher_list_contains_cipher(client_hello,
-                                             SSL3_CK_FALLBACK_SCSV & 0xffff) &&
+                                             SSL_CIPHER_FALLBACK_SCSV) &&
       ssl_protocol_version(ssl) < hs->max_version) {
     OPENSSL_PUT_ERROR(SSL, SSL_R_INAPPROPRIATE_FALLBACK);
     *out_alert = SSL3_AD_INAPPROPRIATE_FALLBACK;
@@ -297,7 +297,7 @@
   // JDK 11 does not support ChaCha20-Poly1305. This is unusual: many modern
   // clients implement ChaCha20-Poly1305.
   if (ssl_client_cipher_list_contains_cipher(
-          client_hello, TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff)) {
+          client_hello, SSL_CIPHER_CHACHA20_POLY1305_SHA256)) {
     return false;
   }
 
diff --git a/ssl/internal.h b/ssl/internal.h
index d72f7a5..8486f31 100644
--- a/ssl/internal.h
+++ b/ssl/internal.h
@@ -242,8 +242,8 @@
   const char *name;
   // standard_name is the IETF name for the cipher.
   const char *standard_name;
-  // id is the cipher suite value bitwise OR-d with 0x03000000.
-  uint32_t id;
+  // protocol_id is the cipher's two-byte protocol ID.
+  uint16_t protocol_id;
 
   // algorithm_* determine the cipher suite. See constants below for the values.
   uint32_t algorithm_mkey;
diff --git a/ssl/s3_both.cc b/ssl/s3_both.cc
index d30cabb..3ebcbba 100644
--- a/ssl/s3_both.cc
+++ b/ssl/s3_both.cc
@@ -586,9 +586,9 @@
   virtual ~CNsaCipherScorer() override = default;
 
   Score Evaluate(const SSL_CIPHER *a) const override {
-    if (a->id == TLS1_3_CK_AES_256_GCM_SHA384) {
+    if (a->protocol_id == SSL_CIPHER_AES_256_GCM_SHA384) {
       return 3;
-    } else if (a->id == TLS1_3_CK_AES_128_GCM_SHA256) {
+    } else if (a->protocol_id == SSL_CIPHER_AES_128_GCM_SHA256) {
       return 2;
     }
     return 1;
@@ -606,10 +606,10 @@
 
     case ssl_compliance_policy_fips_202205:
       switch (cipher_id) {
-        case TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff:
-        case TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff:
+        case SSL_CIPHER_AES_128_GCM_SHA256:
+        case SSL_CIPHER_AES_256_GCM_SHA384:
           return true;
-        case TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff:
+        case SSL_CIPHER_CHACHA20_POLY1305_SHA256:
           return false;
         default:
           assert(false);
@@ -618,10 +618,10 @@
 
     case ssl_compliance_policy_wpa3_192_202304:
       switch (cipher_id) {
-        case TLS1_3_CK_AES_256_GCM_SHA384 & 0xffff:
+        case SSL_CIPHER_AES_256_GCM_SHA384:
           return true;
-        case TLS1_3_CK_AES_128_GCM_SHA256 & 0xffff:
-        case TLS1_3_CK_CHACHA20_POLY1305_SHA256 & 0xffff:
+        case SSL_CIPHER_AES_128_GCM_SHA256:
+        case SSL_CIPHER_CHACHA20_POLY1305_SHA256:
           return false;
         default:
           assert(false);
diff --git a/ssl/ssl_asn1.cc b/ssl/ssl_asn1.cc
index 484dc9c..49ef2d7 100644
--- a/ssl/ssl_asn1.cc
+++ b/ssl/ssl_asn1.cc
@@ -151,7 +151,7 @@
       !CBB_add_asn1_uint64(&session, kVersion) ||
       !CBB_add_asn1_uint64(&session, in->ssl_version) ||
       !CBB_add_asn1(&session, &child, CBS_ASN1_OCTETSTRING) ||
-      !CBB_add_u16(&child, (uint16_t)(in->cipher->id & 0xffff)) ||
+      !CBB_add_u16(&child, in->cipher->protocol_id) ||
       // The session ID is irrelevant for a session ticket.
       !CBB_add_asn1_octet_string(&session, in->session_id.data(),
                                  for_ticket ? 0 : in->session_id.size()) ||
diff --git a/ssl/ssl_cipher.cc b/ssl/ssl_cipher.cc
index 8a21904..d81d00a 100644
--- a/ssl/ssl_cipher.cc
+++ b/ssl/ssl_cipher.cc
@@ -40,7 +40,7 @@
     {
         SSL3_TXT_RSA_DES_192_CBC3_SHA,
         "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
-        SSL3_CK_RSA_DES_192_CBC3_SHA,
+        SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA,
         SSL_kRSA,
         SSL_aRSA_DECRYPT,
         SSL_3DES,
@@ -55,7 +55,7 @@
     {
         TLS1_TXT_RSA_WITH_AES_128_SHA,
         "TLS_RSA_WITH_AES_128_CBC_SHA",
-        TLS1_CK_RSA_WITH_AES_128_SHA,
+        SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA,
         SSL_kRSA,
         SSL_aRSA_DECRYPT,
         SSL_AES128,
@@ -67,7 +67,7 @@
     {
         TLS1_TXT_RSA_WITH_AES_256_SHA,
         "TLS_RSA_WITH_AES_256_CBC_SHA",
-        TLS1_CK_RSA_WITH_AES_256_SHA,
+        SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA,
         SSL_kRSA,
         SSL_aRSA_DECRYPT,
         SSL_AES256,
@@ -81,7 +81,7 @@
     {
         TLS1_TXT_PSK_WITH_AES_128_CBC_SHA,
         "TLS_PSK_WITH_AES_128_CBC_SHA",
-        TLS1_CK_PSK_WITH_AES_128_CBC_SHA,
+        SSL_CIPHER_PSK_WITH_AES_128_CBC_SHA,
         SSL_kPSK,
         SSL_aPSK,
         SSL_AES128,
@@ -93,7 +93,7 @@
     {
         TLS1_TXT_PSK_WITH_AES_256_CBC_SHA,
         "TLS_PSK_WITH_AES_256_CBC_SHA",
-        TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
+        SSL_CIPHER_PSK_WITH_AES_256_CBC_SHA,
         SSL_kPSK,
         SSL_aPSK,
         SSL_AES256,
@@ -107,7 +107,7 @@
     {
         TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256,
         "TLS_RSA_WITH_AES_128_GCM_SHA256",
-        TLS1_CK_RSA_WITH_AES_128_GCM_SHA256,
+        SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256,
         SSL_kRSA,
         SSL_aRSA_DECRYPT,
         SSL_AES128GCM,
@@ -119,7 +119,7 @@
     {
         TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384,
         "TLS_RSA_WITH_AES_256_GCM_SHA384",
-        TLS1_CK_RSA_WITH_AES_256_GCM_SHA384,
+        SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384,
         SSL_kRSA,
         SSL_aRSA_DECRYPT,
         SSL_AES256GCM,
@@ -133,7 +133,7 @@
     {
         TLS1_3_RFC_AES_128_GCM_SHA256,
         "TLS_AES_128_GCM_SHA256",
-        TLS1_3_CK_AES_128_GCM_SHA256,
+        SSL_CIPHER_AES_128_GCM_SHA256,
         SSL_kGENERIC,
         SSL_aGENERIC,
         SSL_AES128GCM,
@@ -145,7 +145,7 @@
     {
         TLS1_3_RFC_AES_256_GCM_SHA384,
         "TLS_AES_256_GCM_SHA384",
-        TLS1_3_CK_AES_256_GCM_SHA384,
+        SSL_CIPHER_AES_256_GCM_SHA384,
         SSL_kGENERIC,
         SSL_aGENERIC,
         SSL_AES256GCM,
@@ -157,7 +157,7 @@
     {
         TLS1_3_RFC_CHACHA20_POLY1305_SHA256,
         "TLS_CHACHA20_POLY1305_SHA256",
-        TLS1_3_CK_CHACHA20_POLY1305_SHA256,
+        SSL_CIPHER_CHACHA20_POLY1305_SHA256,
         SSL_kGENERIC,
         SSL_aGENERIC,
         SSL_CHACHA20POLY1305,
@@ -169,7 +169,7 @@
     {
         TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
         "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA",
-        TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+        SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
         SSL_kECDHE,
         SSL_aECDSA,
         SSL_AES128,
@@ -181,7 +181,7 @@
     {
         TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
         "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA",
-        TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+        SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
         SSL_kECDHE,
         SSL_aECDSA,
         SSL_AES256,
@@ -193,7 +193,7 @@
     {
         TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA,
         "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
-        TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+        SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA,
         SSL_kECDHE,
         SSL_aRSA_SIGN,
         SSL_AES128,
@@ -205,7 +205,7 @@
     {
         TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA,
         "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
-        TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+        SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA,
         SSL_kECDHE,
         SSL_aRSA_SIGN,
         SSL_AES256,
@@ -217,7 +217,7 @@
     {
         TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
         "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256",
-        TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
+        SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
         SSL_kECDHE,
         SSL_aRSA_SIGN,
         SSL_AES128,
@@ -231,7 +231,7 @@
     {
         TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
         "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
-        TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+        SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
         SSL_kECDHE,
         SSL_aECDSA,
         SSL_AES128GCM,
@@ -243,7 +243,7 @@
     {
         TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
         "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
-        TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+        SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
         SSL_kECDHE,
         SSL_aECDSA,
         SSL_AES256GCM,
@@ -255,7 +255,7 @@
     {
         TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
         "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
-        TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+        SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
         SSL_kECDHE,
         SSL_aRSA_SIGN,
         SSL_AES128GCM,
@@ -267,7 +267,7 @@
     {
         TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
         "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
-        TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
+        SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
         SSL_kECDHE,
         SSL_aRSA_SIGN,
         SSL_AES256GCM,
@@ -281,7 +281,7 @@
     {
         TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA,
         "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA",
-        TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA,
+        SSL_CIPHER_ECDHE_PSK_WITH_AES_128_CBC_SHA,
         SSL_kECDHE,
         SSL_aPSK,
         SSL_AES128,
@@ -293,7 +293,7 @@
     {
         TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA,
         "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA",
-        TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA,
+        SSL_CIPHER_ECDHE_PSK_WITH_AES_256_CBC_SHA,
         SSL_kECDHE,
         SSL_aPSK,
         SSL_AES256,
@@ -307,7 +307,7 @@
     {
         TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
         "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
-        TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
+        SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
         SSL_kECDHE,
         SSL_aRSA_SIGN,
         SSL_CHACHA20POLY1305,
@@ -319,7 +319,7 @@
     {
         TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
         "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
-        TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+        SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
         SSL_kECDHE,
         SSL_aECDSA,
         SSL_CHACHA20POLY1305,
@@ -331,7 +331,7 @@
     {
         TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256,
         "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256",
-        TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256,
+        SSL_CIPHER_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256,
         SSL_kECDHE,
         SSL_aPSK,
         SSL_CHACHA20POLY1305,
@@ -642,7 +642,7 @@
 }
 
 bool ssl_cipher_is_deprecated(const SSL_CIPHER *cipher) {
-  return cipher->id == TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ||
+  return cipher->protocol_id == SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ||
          cipher->algorithm_enc == SSL_3DES;
 }
 
@@ -655,7 +655,7 @@
 //   of that strength.
 // - Otherwise, |alias| must be non-null. It selects ciphers that matches
 //   |*alias|.
-static void ssl_cipher_apply_rule(uint32_t cipher_id, const CIPHER_ALIAS *alias,
+static void ssl_cipher_apply_rule(uint16_t cipher_id, const CIPHER_ALIAS *alias,
                                   int rule, int strength_bits, bool in_group,
                                   CIPHER_ORDER **head_p,
                                   CIPHER_ORDER **tail_p) {
@@ -703,7 +703,7 @@
     // Selection criteria is either a specific cipher, the value of
     // |strength_bits|, or the algorithms used.
     if (cipher_id != 0) {
-      if (cipher_id != cp->id) {
+      if (cipher_id != cp->protocol_id) {
         continue;
       }
     } else if (strength_bits >= 0) {
@@ -888,7 +888,7 @@
     }
 
     bool multi = false;
-    uint32_t cipher_id = 0;
+    uint16_t cipher_id = 0;
     CIPHER_ALIAS alias;
     bool skip_rule = false;
 
@@ -921,7 +921,7 @@
         for (const SSL_CIPHER &cipher : kCiphers) {
           if (rule_equals(cipher.name, buf, buf_len) ||
               rule_equals(cipher.standard_name, buf, buf_len)) {
-            cipher_id = cipher.id;
+            cipher_id = cipher.protocol_id;
             break;
           }
         }
@@ -1010,31 +1010,31 @@
   // non-AEAD. The constants are masked by 0xffff to remove the vestigial 0x03
   // byte from SSL 2.0.
   static const uint16_t kAESCiphers[] = {
-      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 & 0xffff,
-      TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 & 0xffff,
-      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 & 0xffff,
-      TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 & 0xffff,
+      SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+      SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+      SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+      SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
   };
   static const uint16_t kChaChaCiphers[] = {
-      TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 & 0xffff,
-      TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 & 0xffff,
-      TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256 & 0xffff,
+      SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256,
+      SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
+      SSL_CIPHER_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256,
   };
   static const uint16_t kLegacyCiphers[] = {
-      TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA & 0xffff,
-      TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA & 0xffff,
-      TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA & 0xffff,
-      TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA & 0xffff,
-      TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA & 0xffff,
-      TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA & 0xffff,
-      TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256 & 0xffff,
-      TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 & 0xffff,
-      TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 & 0xffff,
-      TLS1_CK_RSA_WITH_AES_128_SHA & 0xffff,
-      TLS1_CK_PSK_WITH_AES_128_CBC_SHA & 0xffff,
-      TLS1_CK_RSA_WITH_AES_256_SHA & 0xffff,
-      TLS1_CK_PSK_WITH_AES_256_CBC_SHA & 0xffff,
-      SSL3_CK_RSA_DES_192_CBC3_SHA & 0xffff,
+      SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
+      SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+      SSL_CIPHER_ECDHE_PSK_WITH_AES_128_CBC_SHA,
+      SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+      SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+      SSL_CIPHER_ECDHE_PSK_WITH_AES_256_CBC_SHA,
+      SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
+      SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256,
+      SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384,
+      SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA,
+      SSL_CIPHER_PSK_WITH_AES_128_CBC_SHA,
+      SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA,
+      SSL_CIPHER_PSK_WITH_AES_256_CBC_SHA,
+      SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA,
   };
 
   // Set up a linked list of ciphers.
@@ -1187,10 +1187,10 @@
 
 static constexpr int ssl_cipher_id_cmp(const SSL_CIPHER *a,
                                        const SSL_CIPHER *b) {
-  if (a->id > b->id) {
+  if (a->protocol_id > b->protocol_id) {
     return 1;
   }
-  if (a->id < b->id) {
+  if (a->protocol_id < b->protocol_id) {
     return -1;
   }
   return 0;
@@ -1216,20 +1216,20 @@
 
 const SSL_CIPHER *SSL_get_cipher_by_value(uint16_t value) {
   SSL_CIPHER c;
-
-  c.id = 0x03000000L | value;
+  c.protocol_id = value;
   return reinterpret_cast<const SSL_CIPHER *>(
       bsearch(&c, kCiphers, std::size(kCiphers), sizeof(SSL_CIPHER),
               ssl_cipher_id_cmp_void));
 }
 
-uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *cipher) { return cipher->id; }
+uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *cipher) {
+  // Historically, OpenSSL added a leading 0x03 byte to cipher IDs, to
+  // distinguish between SSL 2.0 and SSL 3.0.
+  return cipher->protocol_id | 0x03000000;
+}
 
 uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *cipher) {
-  // All OpenSSL cipher IDs are prefaced with 0x03. Historically this referred
-  // to SSLv2 vs SSLv3.
-  assert((cipher->id & 0xff000000) == 0x03000000);
-  return static_cast<uint16_t>(cipher->id);
+  return cipher->protocol_id;
 }
 
 int SSL_CIPHER_is_aead(const SSL_CIPHER *cipher) {
diff --git a/ssl/ssl_internal_test.cc b/ssl/ssl_internal_test.cc
index 093f8b0..58169cd 100644
--- a/ssl/ssl_internal_test.cc
+++ b/ssl/ssl_internal_test.cc
@@ -345,8 +345,6 @@
   };
 
   struct CipherLengthTest {
-    // |SSL3_CK_*| and |TLS1_CK_*| constants include an extra byte at the front,
-    // so these constants must be masked with 0xffff.
     uint16_t cipher;
     uint16_t version;
     size_t enc_key_len, mac_key_len, fixed_iv_len;
@@ -357,7 +355,7 @@
   const CipherLengthTest kTests[] = {
       // 20-byte MAC, 8-byte CBC blocks with padding
       {
-          /*cipher=*/SSL3_CK_RSA_DES_192_CBC3_SHA & 0xffff,
+          /*cipher=*/SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA,
           /*version=*/TLS1_2_VERSION,
           /*enc_key_len=*/24,
           /*mac_key_len=*/20,
@@ -377,7 +375,7 @@
       },
       // 20-byte MAC, 16-byte CBC blocks with padding
       {
-          /*cipher=*/TLS1_CK_RSA_WITH_AES_128_SHA & 0xffff,
+          /*cipher=*/SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA,
           /*version=*/TLS1_2_VERSION,
           /*enc_key_len=*/16,
           /*mac_key_len=*/20,
@@ -397,7 +395,7 @@
       },
       // 32-byte MAC, 16-byte CBC blocks with padding
       {
-          /*cipher=*/TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256 & 0xffff,
+          /*cipher=*/SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
           /*version=*/TLS1_2_VERSION,
           /*enc_key_len=*/16,
           /*mac_key_len=*/32,
@@ -417,7 +415,7 @@
       },
       // 8-byte explicit IV, 16-byte tag
       {
-          /*cipher=*/TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 & 0xffff,
+          /*cipher=*/SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
           /*version=*/TLS1_2_VERSION,
           /*enc_key_len=*/16,
           /*mac_key_len=*/0,
@@ -441,7 +439,7 @@
       // No explicit IV, 16-byte tag. TLS 1.3's padding and record type overhead
       // is added at another layer.
       {
-          /*cipher=*/TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 & 0xffff,
+          /*cipher=*/SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
           /*version=*/TLS1_2_VERSION,
           /*enc_key_len=*/32,
           /*mac_key_len=*/0,
@@ -463,7 +461,7 @@
           },
       },
       {
-          /*cipher=*/TLS1_CK_AES_128_GCM_SHA256 & 0xffff,
+          /*cipher=*/SSL_CIPHER_AES_128_GCM_SHA256,
           /*version=*/TLS1_3_VERSION,
           /*enc_key_len=*/16,
           /*mac_key_len=*/0,
@@ -485,7 +483,7 @@
           },
       },
       {
-          /*cipher=*/TLS1_CK_CHACHA20_POLY1305_SHA256 & 0xffff,
+          /*cipher=*/SSL_CIPHER_CHACHA20_POLY1305_SHA256,
           /*version=*/TLS1_3_VERSION,
           /*enc_key_len=*/32,
           /*mac_key_len=*/0,
diff --git a/ssl/ssl_test.cc b/ssl/ssl_test.cc
index 1b34c14..f34a531 100644
--- a/ssl/ssl_test.cc
+++ b/ssl/ssl_test.cc
@@ -97,7 +97,7 @@
 };
 
 struct ExpectedCipher {
-  unsigned long id;
+  uint16_t protocol_id;
   int in_group_flag;
 };
 
@@ -156,10 +156,10 @@
         "ECDHE-ECDSA-AES128-GCM-SHA256:"
         "ECDHE-RSA-AES128-GCM-SHA256",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -171,10 +171,10 @@
         "ECDHE-RSA-AES128-GCM-SHA256:"
         "+aRSA",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -186,8 +186,8 @@
         "ECDHE-ECDSA-AES128-GCM-SHA256:"
         "ECDHE-RSA-AES128-GCM-SHA256",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -195,7 +195,7 @@
     {
         "kRSA+AESGCM+AES128",
         {
-            {TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -207,8 +207,8 @@
         "-kRSA:-ALL:"
         "AESGCM+AES128+aRSA",
         {
-            {TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -220,10 +220,10 @@
         "ECDHE-RSA-AES128-GCM-SHA256:"
         "BOGUS1",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         true,
     },
@@ -235,10 +235,10 @@
         "ECDHE-RSA-AES128-GCM-SHA256:"
         "-BOGUS2:+BOGUS3:!BOGUS4",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         true,
     },
@@ -248,10 +248,10 @@
         "[ECDHE-RSA-CHACHA20-POLY1305]:"
         "ECDHE-RSA-AES128-GCM-SHA256",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 1},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 1},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -262,10 +262,10 @@
         "[TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256]:"
         "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 1},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, 1},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -284,11 +284,11 @@
         // by strength. Then RSA, backwards by strength.
         "aRSA",
         {
-            {TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA, 0},
-            {TLS1_CK_RSA_WITH_AES_128_SHA, 0},
-            {TLS1_CK_RSA_WITH_AES_256_SHA, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA, 0},
         },
         false,
     },
@@ -301,8 +301,8 @@
         "ECDHE-RSA-AES256-GCM-SHA384:"
         "@STRENGTH+AES256",
         {
-            {TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -312,9 +312,9 @@
         "@STRENGTH+AES256:"
         "ECDHE-RSA-CHACHA20-POLY1305",
         {
-            {TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256, 0},
         },
         false,
     },
@@ -326,8 +326,8 @@
         "!ECDHE-RSA-AES128-GCM-SHA256+RSA:"
         "!ECDSA+ECDHE-ECDSA-AES128-GCM-SHA256",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         true,
     },
@@ -335,7 +335,7 @@
     {
         "AES128-SHA:ECDHE-RSA-AES128-GCM-SHA256:!SSLv3",
         {
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -343,7 +343,7 @@
     {
         "AES128-SHA:ECDHE-RSA-AES128-GCM-SHA256:!TLSv1.2",
         {
-            {TLS1_CK_RSA_WITH_AES_128_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA, 0},
         },
         false,
     },
@@ -352,8 +352,8 @@
     {
         "AES128-SHA:ECDHE-RSA-AES128-GCM-SHA256:!TLSv1.2+SSLv3",
         {
-            {TLS1_CK_RSA_WITH_AES_128_SHA, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -362,11 +362,11 @@
         "AES128-SHA: ECDHE-RSA-AES128-GCM-SHA256 AES256-SHA "
         ",ECDHE-ECDSA-AES128-GCM-SHA256 ; AES128-GCM-SHA256",
         {
-            {TLS1_CK_RSA_WITH_AES_128_SHA, 0},
-            {TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_RSA_WITH_AES_256_SHA, 0},
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA, 0},
+            {SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256, 0},
         },
         // …but not in strict mode.
         true,
@@ -375,10 +375,10 @@
     {
         "RSA",
         {
-            {TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, 0},
-            {TLS1_CK_RSA_WITH_AES_128_SHA, 0},
-            {TLS1_CK_RSA_WITH_AES_256_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA, 0},
         },
         false,
     },
@@ -386,14 +386,14 @@
     {
         "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
         {
-            {SSL3_CK_RSA_DES_192_CBC3_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA, 0},
         },
         false,
     },
     {
         "DES-CBC3-SHA",
         {
-            {SSL3_CK_RSA_DES_192_CBC3_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA, 0},
         },
         false,
     },
@@ -401,7 +401,7 @@
     {
         "3DES",
         {
-            {SSL3_CK_RSA_DES_192_CBC3_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA, 0},
         },
         false,
     },
@@ -410,7 +410,7 @@
     {
         "RSA+3DES",
         {
-            {SSL3_CK_RSA_DES_192_CBC3_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA, 0},
         },
         false,
     },
@@ -421,7 +421,7 @@
     {
         "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:ECDHE+3DES",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -430,7 +430,7 @@
     {
         "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:RSA:RSA+3DES:!RSA",
         {
-            {TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, 0},
         },
         false,
     },
@@ -438,11 +438,11 @@
     {
         "RSA:3DES:@STRENGTH",
         {
-            {TLS1_CK_RSA_WITH_AES_256_GCM_SHA384, 0},
-            {TLS1_CK_RSA_WITH_AES_256_SHA, 0},
-            {TLS1_CK_RSA_WITH_AES_128_GCM_SHA256, 0},
-            {TLS1_CK_RSA_WITH_AES_128_SHA, 0},
-            {SSL3_CK_RSA_DES_192_CBC3_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_256_GCM_SHA384, 0},
+            {SSL_CIPHER_RSA_WITH_AES_256_CBC_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_GCM_SHA256, 0},
+            {SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA, 0},
+            {SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA, 0},
         },
         false,
     },
@@ -572,7 +572,7 @@
 
   for (size_t i = 0; i < expected.size(); i++) {
     const SSL_CIPHER *cipher = sk_SSL_CIPHER_value(ciphers, i);
-    if (expected[i].id != SSL_CIPHER_get_id(cipher) ||
+    if (expected[i].protocol_id != SSL_CIPHER_get_protocol_id(cipher) ||
         expected[i].in_group_flag != !!SSL_CTX_cipher_in_group(ctx, i)) {
       return false;
     }
@@ -633,7 +633,7 @@
 
       bool found = false;
       for (const SSL_CIPHER *cipher : SSL_CTX_get_ciphers(ctx.get())) {
-        if ((TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA256 & 0xffff) ==
+        if (SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA256 ==
             SSL_CIPHER_get_protocol_id(cipher)) {
           found = true;
           break;
@@ -1183,7 +1183,7 @@
 
 TEST(SSLTest, CipherProperties) {
   static const struct {
-    int id;
+    uint16_t protocol_id;
     const char *standard_name;
     int cipher_nid;
     int digest_nid;
@@ -1192,7 +1192,7 @@
     int prf_nid;
   } kTests[] = {
       {
-          SSL3_CK_RSA_DES_192_CBC3_SHA,
+          SSL_CIPHER_RSA_WITH_3DES_EDE_CBC_SHA,
           "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
           NID_des_ede3_cbc,
           NID_sha1,
@@ -1201,7 +1201,7 @@
           NID_md5_sha1,
       },
       {
-          TLS1_CK_RSA_WITH_AES_128_SHA,
+          SSL_CIPHER_RSA_WITH_AES_128_CBC_SHA,
           "TLS_RSA_WITH_AES_128_CBC_SHA",
           NID_aes_128_cbc,
           NID_sha1,
@@ -1210,7 +1210,7 @@
           NID_md5_sha1,
       },
       {
-          TLS1_CK_PSK_WITH_AES_256_CBC_SHA,
+          SSL_CIPHER_PSK_WITH_AES_256_CBC_SHA,
           "TLS_PSK_WITH_AES_256_CBC_SHA",
           NID_aes_256_cbc,
           NID_sha1,
@@ -1219,7 +1219,7 @@
           NID_md5_sha1,
       },
       {
-          TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA,
+          SSL_CIPHER_ECDHE_RSA_WITH_AES_128_CBC_SHA,
           "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA",
           NID_aes_128_cbc,
           NID_sha1,
@@ -1228,7 +1228,7 @@
           NID_md5_sha1,
       },
       {
-          TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+          SSL_CIPHER_ECDHE_RSA_WITH_AES_256_CBC_SHA,
           "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA",
           NID_aes_256_cbc,
           NID_sha1,
@@ -1237,7 +1237,7 @@
           NID_md5_sha1,
       },
       {
-          TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+          SSL_CIPHER_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
           "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
           NID_aes_128_gcm,
           NID_undef,
@@ -1246,7 +1246,7 @@
           NID_sha256,
       },
       {
-          TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+          SSL_CIPHER_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
           "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
           NID_aes_128_gcm,
           NID_undef,
@@ -1255,7 +1255,7 @@
           NID_sha256,
       },
       {
-          TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+          SSL_CIPHER_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
           "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384",
           NID_aes_256_gcm,
           NID_undef,
@@ -1264,7 +1264,7 @@
           NID_sha384,
       },
       {
-          TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA,
+          SSL_CIPHER_ECDHE_PSK_WITH_AES_128_CBC_SHA,
           "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA",
           NID_aes_128_cbc,
           NID_sha1,
@@ -1273,7 +1273,7 @@
           NID_md5_sha1,
       },
       {
-          TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
+          SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256,
           "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
           NID_chacha20_poly1305,
           NID_undef,
@@ -1282,7 +1282,7 @@
           NID_sha256,
       },
       {
-          TLS1_3_CK_AES_256_GCM_SHA384,
+          SSL_CIPHER_AES_256_GCM_SHA384,
           "TLS_AES_256_GCM_SHA384",
           NID_aes_256_gcm,
           NID_undef,
@@ -1291,7 +1291,7 @@
           NID_sha384,
       },
       {
-          TLS1_3_CK_AES_128_GCM_SHA256,
+          SSL_CIPHER_AES_128_GCM_SHA256,
           "TLS_AES_128_GCM_SHA256",
           NID_aes_128_gcm,
           NID_undef,
@@ -1300,7 +1300,7 @@
           NID_sha256,
       },
       {
-          TLS1_3_CK_CHACHA20_POLY1305_SHA256,
+          SSL_CIPHER_CHACHA20_POLY1305_SHA256,
           "TLS_CHACHA20_POLY1305_SHA256",
           NID_chacha20_poly1305,
           NID_undef,
@@ -1313,7 +1313,7 @@
   for (const auto &t : kTests) {
     SCOPED_TRACE(t.standard_name);
 
-    const SSL_CIPHER *cipher = SSL_get_cipher_by_value(t.id & 0xffff);
+    const SSL_CIPHER *cipher = SSL_get_cipher_by_value(t.protocol_id);
     ASSERT_TRUE(cipher);
     EXPECT_STREQ(t.standard_name, SSL_CIPHER_standard_name(cipher));
 
@@ -7152,13 +7152,13 @@
     }
 
     if (level != ssl_encryption_early_data &&
-        SSL_CIPHER_get_id(cipher) != levels_[level].cipher) {
+        SSL_CIPHER_get_protocol_id(cipher) != levels_[level].cipher) {
       ADD_FAILURE() << "Cipher suite inconsistent";
       return false;
     }
 
     levels_[level].read_secret.assign(secret.begin(), secret.end());
-    levels_[level].cipher = SSL_CIPHER_get_id(cipher);
+    levels_[level].cipher = SSL_CIPHER_get_protocol_id(cipher);
     return true;
   }
 
@@ -7180,7 +7180,7 @@
     }
 
     levels_[level].write_secret.assign(secret.begin(), secret.end());
-    levels_[level].cipher = SSL_CIPHER_get_id(cipher);
+    levels_[level].cipher = SSL_CIPHER_get_protocol_id(cipher);
     return true;
   }
 
@@ -7285,7 +7285,7 @@
     std::vector<uint8_t> write_data;
     std::vector<uint8_t> write_secret;
     std::vector<uint8_t> read_secret;
-    uint32_t cipher = 0;
+    uint16_t cipher = 0;
   };
   Level levels_[kNumQUICLevels];
 };
@@ -8820,6 +8820,8 @@
     EXPECT_EQ(SSL_version(client.get()), TLS1_2_VERSION);
     const SSL_CIPHER *cipher = SSL_get_current_cipher(client.get());
     ASSERT_TRUE(cipher);
+    EXPECT_EQ(SSL_CIPHER_get_protocol_id(cipher),
+              uint16_t{SSL_CIPHER_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256});
     EXPECT_EQ(SSL_CIPHER_get_id(cipher),
               uint32_t{TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256});
     EXPECT_EQ(SSL_get_group_id(client.get()), SSL_GROUP_X25519);