summaryrefslogtreecommitdiffstats
path: root/ssl/t1_enc.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2022-10-17 15:13:18 +0100
committerMatt Caswell <matt@openssl.org>2022-10-20 14:39:33 +0100
commitfaa3e66c27a5e88f048f3ed30cfca297eda13eb6 (patch)
tree4ed6c50048f1ef1e51e796f01234d9692c366803 /ssl/t1_enc.c
parent43dfa5a9319f67cd652fdc3a8711fc53859cd11e (diff)
Remove some TODO(RECLAYER) comments now that DTLS has been moved
Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Hugo Landau <hlandau@openssl.org> (Merged from https://github.com/openssl/openssl/pull/19424)
Diffstat (limited to 'ssl/t1_enc.c')
-rw-r--r--ssl/t1_enc.c143
1 files changed, 8 insertions, 135 deletions
diff --git a/ssl/t1_enc.c b/ssl/t1_enc.c
index afdd227fc6..d3a5df29c2 100644
--- a/ssl/t1_enc.c
+++ b/ssl/t1_enc.c
@@ -154,23 +154,19 @@ int tls1_change_cipher_state(SSL_CONNECTION *s, int which)
{
unsigned char *p, *mac_secret;
unsigned char *key, *iv;
- EVP_CIPHER_CTX *dd;
const EVP_CIPHER *c;
const SSL_COMP *comp = NULL;
const EVP_MD *m;
int mac_type;
size_t mac_secret_size;
- EVP_MD_CTX *mac_ctx;
- EVP_PKEY *mac_key;
size_t n, i, j, k, cl;
int iivlen;
- int reuse_dd = 0;
- SSL_CTX *sctx = SSL_CONNECTION_GET_CTX(s);
/*
* Taglen is only relevant for CCM ciphersuites. Other ciphersuites
* ignore this value so we can default it to 0.
*/
size_t taglen = 0;
+ int direction;
c = s->s3.tmp.new_sym_enc;
m = s->s3.tmp.new_hash;
@@ -237,18 +233,7 @@ int tls1_change_cipher_state(SSL_CONNECTION *s, int which)
else
s->mac_flags &= ~SSL_MAC_FLAG_READ_MAC_TLSTREE;
- if (!ssl_set_new_record_layer(s, s->version,
- OSSL_RECORD_DIRECTION_READ,
- OSSL_RECORD_PROTECTION_LEVEL_APPLICATION,
- key, cl, iv, (size_t)k, mac_secret,
- mac_secret_size, c, taglen, mac_type,
- m, comp)) {
- /* SSLfatal already called */
- goto err;
- }
-
- /* TODO(RECLAYER): Temporary - remove me when DTLS write rlayer done*/
- goto done;
+ direction = OSSL_RECORD_DIRECTION_READ;
} else {
if (s->ext.use_etm)
s->s3.flags |= TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE;
@@ -265,130 +250,18 @@ int tls1_change_cipher_state(SSL_CONNECTION *s, int which)
else
s->mac_flags &= ~SSL_MAC_FLAG_WRITE_MAC_TLSTREE;
- if (!ssl_set_new_record_layer(s, s->version,
- OSSL_RECORD_DIRECTION_WRITE,
- OSSL_RECORD_PROTECTION_LEVEL_APPLICATION,
- key, cl, iv, (size_t)k, mac_secret,
- mac_secret_size, c, taglen, mac_type,
- m, comp)) {
- /* SSLfatal already called */
- goto err;
- }
-
- /* TODO(RECLAYER): Temporary - remove me when DTLS write rlayer done*/
- if (!SSL_CONNECTION_IS_DTLS(s))
- goto done;
-
- if (s->enc_write_ctx != NULL && !SSL_CONNECTION_IS_DTLS(s)) {
- reuse_dd = 1;
- } else if ((s->enc_write_ctx = EVP_CIPHER_CTX_new()) == NULL) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
- goto err;
- }
- dd = s->enc_write_ctx;
- if (SSL_CONNECTION_IS_DTLS(s)) {
- mac_ctx = EVP_MD_CTX_new();
- if (mac_ctx == NULL) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_EVP_LIB);
- goto err;
- }
- s->write_hash = mac_ctx;
- } else {
- mac_ctx = ssl_replace_hash(&s->write_hash, NULL);
- if (mac_ctx == NULL) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_SSL_LIB);
- goto err;
- }
- }
-#ifndef OPENSSL_NO_COMP
- COMP_CTX_free(s->compress);
- s->compress = NULL;
- if (comp != NULL) {
- s->compress = COMP_CTX_new(comp->method);
- if (s->compress == NULL) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR,
- SSL_R_COMPRESSION_LIBRARY_ERROR);
- goto err;
- }
- }
-#endif
- /*
- * this is done by dtls1_reset_seq_numbers for DTLS
- */
- if (!SSL_CONNECTION_IS_DTLS(s))
- RECORD_LAYER_reset_write_sequence(&s->rlayer);
+ direction = OSSL_RECORD_DIRECTION_WRITE;
}
- if (reuse_dd)
- EVP_CIPHER_CTX_reset(dd);
-
- if (!(EVP_CIPHER_get_flags(c) & EVP_CIPH_FLAG_AEAD_CIPHER)) {
- if (mac_type == EVP_PKEY_HMAC) {
- mac_key = EVP_PKEY_new_raw_private_key_ex(sctx->libctx, "HMAC",
- sctx->propq, mac_secret,
- mac_secret_size);
- } else {
- /*
- * If its not HMAC then the only other types of MAC we support are
- * the GOST MACs, so we need to use the old style way of creating
- * a MAC key.
- */
- mac_key = EVP_PKEY_new_mac_key(mac_type, NULL, mac_secret,
- (int)mac_secret_size);
- }
- if (mac_key == NULL
- || EVP_DigestSignInit_ex(mac_ctx, NULL, EVP_MD_get0_name(m),
- sctx->libctx, sctx->propq, mac_key,
- NULL) <= 0) {
- EVP_PKEY_free(mac_key);
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- EVP_PKEY_free(mac_key);
- }
-
- OSSL_TRACE_BEGIN(TLS) {
- BIO_printf(trc_out, "which = %04X, mac key:\n", which);
- BIO_dump_indent(trc_out, mac_secret, i, 4);
- } OSSL_TRACE_END(TLS);
-
- if (EVP_CIPHER_get_mode(c) == EVP_CIPH_GCM_MODE) {
- if (!EVP_CipherInit_ex(dd, c, NULL, key, NULL, (which & SSL3_CC_WRITE))
- || EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_GCM_SET_IV_FIXED, (int)k,
- iv) <= 0) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- } else if (EVP_CIPHER_get_mode(c) == EVP_CIPH_CCM_MODE) {
- if (!EVP_CipherInit_ex(dd, c, NULL, NULL, NULL, (which & SSL3_CC_WRITE))
- || (EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_IVLEN, 12, NULL) <= 0)
- || (EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_TAG, taglen, NULL) <= 0)
- || (EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_CCM_SET_IV_FIXED, (int)k, iv) <= 0)
- || !EVP_CipherInit_ex(dd, NULL, NULL, key, NULL, -1)) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- } else {
- if (!EVP_CipherInit_ex(dd, c, NULL, key, iv, (which & SSL3_CC_WRITE))) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- }
- /* Needed for "composite" AEADs, such as RC4-HMAC-MD5 */
- if ((EVP_CIPHER_get_flags(c) & EVP_CIPH_FLAG_AEAD_CIPHER)
- && mac_secret_size != 0
- && EVP_CIPHER_CTX_ctrl(dd, EVP_CTRL_AEAD_SET_MAC_KEY,
- (int)mac_secret_size, mac_secret) <= 0) {
- SSLfatal(s, SSL_AD_INTERNAL_ERROR, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- if (EVP_CIPHER_get0_provider(c) != NULL
- && !tls_provider_set_tls_params(s, dd, c, m)) {
+ if (!ssl_set_new_record_layer(s, s->version, direction,
+ OSSL_RECORD_PROTECTION_LEVEL_APPLICATION,
+ key, cl, iv, (size_t)k, mac_secret,
+ mac_secret_size, c, taglen, mac_type,
+ m, comp)) {
/* SSLfatal already called */
goto err;
}
- done:
OSSL_TRACE_BEGIN(TLS) {
BIO_printf(trc_out, "which = %04X, key:\n", which);
BIO_dump_indent(trc_out, key, EVP_CIPHER_get_key_length(c), 4);