Skip to content

Commit

Permalink
GCM: record limit counter gets reset on AAD changes
Browse files Browse the repository at this point in the history
It shouldn't be.  This moves the reset to the init function instead and only
does the reset on a key change.

Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #18860)

(cherry picked from commit 3ebcb2f)
  • Loading branch information
paulidale authored and t8m committed Jul 27, 2022
1 parent 083fa48 commit 1f6eb7b
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion providers/implementations/ciphers/ciphercommon_gcm.c
Expand Up @@ -25,6 +25,10 @@ static int gcm_cipher_internal(PROV_GCM_CTX *ctx, unsigned char *out,
size_t *padlen, const unsigned char *in,
size_t len);

/*
* Called from EVP_CipherInit when there is currently no context via
* the new_ctx() function
*/
void ossl_gcm_initctx(void *provctx, PROV_GCM_CTX *ctx, size_t keybits,
const PROV_GCM_HW *hw)
{
Expand All @@ -38,6 +42,9 @@ void ossl_gcm_initctx(void *provctx, PROV_GCM_CTX *ctx, size_t keybits,
ctx->libctx = PROV_LIBCTX_OF(provctx);
}

/*
* Called by EVP_CipherInit via the _einit and _dinit functions
*/
static int gcm_init(void *vctx, const unsigned char *key, size_t keylen,
const unsigned char *iv, size_t ivlen,
const OSSL_PARAM params[], int enc)
Expand Down Expand Up @@ -66,6 +73,7 @@ static int gcm_init(void *vctx, const unsigned char *key, size_t keylen,
}
if (!ctx->hw->setkey(ctx, key, ctx->keylen))
return 0;
ctx->tls_enc_records = 0;
}
return ossl_gcm_set_ctx_params(ctx, params);
}
Expand Down Expand Up @@ -447,7 +455,6 @@ static int gcm_tls_init(PROV_GCM_CTX *dat, unsigned char *aad, size_t aad_len)
buf = dat->buf;
memcpy(buf, aad, aad_len);
dat->tls_aad_len = aad_len;
dat->tls_enc_records = 0;

len = buf[aad_len - 2] << 8 | buf[aad_len - 1];
/* Correct length for explicit iv. */
Expand Down

0 comments on commit 1f6eb7b

Please sign in to comment.