diff --git a/ssl/internal.h b/ssl/internal.h
index 4bbbeb7..f956418 100644
--- a/ssl/internal.h
+++ b/ssl/internal.h
@@ -672,7 +672,7 @@
 bool ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
                              size_t *out_mac_secret_len,
                              size_t *out_fixed_iv_len, const SSL_CIPHER *cipher,
-                             uint16_t version, bool is_dtls);
+                             uint16_t version);
 
 // ssl_get_handshake_digest returns the |EVP_MD| corresponding to |version| and
 // |cipher|.
@@ -839,10 +839,9 @@
 
   // Create creates an |SSLAEADContext| using the supplied key material. It
   // returns nullptr on error. Only one of |Open| or |Seal| may be used with the
-  // resulting object, depending on |direction|. |version| is the normalized
-  // protocol version, so DTLS 1.0 is represented as 0x0301, not 0xffef.
+  // resulting object, depending on |direction|. |version| is the wire version.
   static UniquePtr<SSLAEADContext> Create(enum evp_aead_direction_t direction,
-                                          uint16_t version, bool is_dtls,
+                                          uint16_t version,
                                           const SSL_CIPHER *cipher,
                                           Span<const uint8_t> enc_key,
                                           Span<const uint8_t> mac_key,
diff --git a/ssl/ssl_aead_ctx.cc b/ssl/ssl_aead_ctx.cc
index 652a5e9..9a4da85 100644
--- a/ssl/ssl_aead_ctx.cc
+++ b/ssl/ssl_aead_ctx.cc
@@ -51,7 +51,7 @@
 }
 
 UniquePtr<SSLAEADContext> SSLAEADContext::Create(
-    enum evp_aead_direction_t direction, uint16_t version, bool is_dtls,
+    enum evp_aead_direction_t direction, uint16_t version,
     const SSL_CIPHER *cipher, Span<const uint8_t> enc_key,
     Span<const uint8_t> mac_key, Span<const uint8_t> fixed_iv) {
   const EVP_AEAD *aead;
@@ -59,8 +59,8 @@
   size_t expected_mac_key_len, expected_fixed_iv_len;
   if (!ssl_protocol_version_from_wire(&protocol_version, version) ||
       !ssl_cipher_get_evp_aead(&aead, &expected_mac_key_len,
-                               &expected_fixed_iv_len, cipher, protocol_version,
-                               is_dtls) ||
+                               &expected_fixed_iv_len, cipher,
+                               protocol_version) ||
       // Ensure the caller returned correct key sizes.
       expected_fixed_iv_len != fixed_iv.size() ||
       expected_mac_key_len != mac_key.size()) {
diff --git a/ssl/ssl_cipher.cc b/ssl/ssl_cipher.cc
index 29e32ce..97e69ff 100644
--- a/ssl/ssl_cipher.cc
+++ b/ssl/ssl_cipher.cc
@@ -576,31 +576,24 @@
 bool ssl_cipher_get_evp_aead(const EVP_AEAD **out_aead,
                              size_t *out_mac_secret_len,
                              size_t *out_fixed_iv_len, const SSL_CIPHER *cipher,
-                             uint16_t version, bool is_dtls) {
+                             uint16_t version) {
   *out_aead = NULL;
   *out_mac_secret_len = 0;
   *out_fixed_iv_len = 0;
 
-  const bool is_tls12 = version == TLS1_2_VERSION && !is_dtls;
-  const bool is_tls13 = version == TLS1_3_VERSION && !is_dtls;
-
   if (cipher->algorithm_mac == SSL_AEAD) {
     if (cipher->algorithm_enc == SSL_AES128GCM) {
-      if (is_tls12) {
+      if (version < TLS1_3_VERSION) {
         *out_aead = EVP_aead_aes_128_gcm_tls12();
-      } else if (is_tls13) {
-        *out_aead = EVP_aead_aes_128_gcm_tls13();
       } else {
-        *out_aead = EVP_aead_aes_128_gcm();
+        *out_aead = EVP_aead_aes_128_gcm_tls13();
       }
       *out_fixed_iv_len = 4;
     } else if (cipher->algorithm_enc == SSL_AES256GCM) {
-      if (is_tls12) {
+      if (version < TLS1_3_VERSION) {
         *out_aead = EVP_aead_aes_256_gcm_tls12();
-      } else if (is_tls13) {
-        *out_aead = EVP_aead_aes_256_gcm_tls13();
       } else {
-        *out_aead = EVP_aead_aes_256_gcm();
+        *out_aead = EVP_aead_aes_256_gcm_tls13();
       }
       *out_fixed_iv_len = 4;
     } else if (cipher->algorithm_enc == SSL_CHACHA20POLY1305) {
diff --git a/ssl/t1_enc.cc b/ssl/t1_enc.cc
index 44075ab..1895bac 100644
--- a/ssl/t1_enc.cc
+++ b/ssl/t1_enc.cc
@@ -169,7 +169,7 @@
                                   const SSL_CIPHER *cipher) {
   const EVP_AEAD *aead = NULL;
   if (!ssl_cipher_get_evp_aead(&aead, out_mac_secret_len, out_iv_len, cipher,
-                               ssl_protocol_version(ssl), SSL_is_dtls(ssl))) {
+                               ssl_protocol_version(ssl))) {
     OPENSSL_PUT_ERROR(SSL, SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
     return false;
   }
@@ -243,9 +243,8 @@
     iv = iv_override;
   }
 
-  UniquePtr<SSLAEADContext> aead_ctx =
-      SSLAEADContext::Create(direction, ssl->s3->version, SSL_is_dtls(ssl),
-                             session->cipher, key, mac_secret, iv);
+  UniquePtr<SSLAEADContext> aead_ctx = SSLAEADContext::Create(
+      direction, ssl->s3->version, session->cipher, key, mac_secret, iv);
   if (!aead_ctx) {
     return false;
   }
diff --git a/ssl/tls13_enc.cc b/ssl/tls13_enc.cc
index 19631f5..fad4117 100644
--- a/ssl/tls13_enc.cc
+++ b/ssl/tls13_enc.cc
@@ -198,7 +198,7 @@
     const EVP_AEAD *aead;
     size_t discard;
     if (!ssl_cipher_get_evp_aead(&aead, &discard, &discard, session->cipher,
-                                 version, is_dtls)) {
+                                 version)) {
       return false;
     }
 
@@ -213,8 +213,8 @@
       return false;
     }
 
-    traffic_aead = SSLAEADContext::Create(
-        direction, session->ssl_version, is_dtls, session->cipher, key, {}, iv);
+    traffic_aead = SSLAEADContext::Create(direction, session->ssl_version,
+                                          session->cipher, key, {}, iv);
   }
 
   if (!traffic_aead) {
