Skip to content

Commit

Permalink
implement dupctx for chacha20_poly1305
Browse files Browse the repository at this point in the history
Same as chacha20 in the last commit, just clone the ctx and its
underlying tlsmac array if its allocated

Fixes #21887

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #21933)

(cherry picked from commit df93b3c)
  • Loading branch information
nhorman authored and t8m committed Sep 12, 2023
1 parent 819ae76 commit 603b4c3
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions providers/implementations/ciphers/cipher_chacha20_poly1305.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

static OSSL_FUNC_cipher_newctx_fn chacha20_poly1305_newctx;
static OSSL_FUNC_cipher_freectx_fn chacha20_poly1305_freectx;
static OSSL_FUNC_cipher_dupctx_fn chacha20_poly1305_dupctx;
static OSSL_FUNC_cipher_encrypt_init_fn chacha20_poly1305_einit;
static OSSL_FUNC_cipher_decrypt_init_fn chacha20_poly1305_dinit;
static OSSL_FUNC_cipher_get_params_fn chacha20_poly1305_get_params;
Expand Down Expand Up @@ -58,6 +59,25 @@ static void *chacha20_poly1305_newctx(void *provctx)
return ctx;
}

static void *chacha20_poly1305_dupctx(void *provctx)
{
PROV_CHACHA20_POLY1305_CTX *ctx = provctx;
PROV_CHACHA20_POLY1305_CTX *dctx = NULL;

if (ctx == NULL)
return NULL;
dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
if (dctx != NULL && dctx->base.tlsmac != NULL && dctx->base.alloced) {
dctx->base.tlsmac = OPENSSL_memdup(dctx->base.tlsmac,
dctx->base.tlsmacsize);
if (dctx->base.tlsmac == NULL) {
OPENSSL_free(dctx);
dctx = NULL;
}
}
return dctx;
}

static void chacha20_poly1305_freectx(void *vctx)
{
PROV_CHACHA20_POLY1305_CTX *ctx = (PROV_CHACHA20_POLY1305_CTX *)vctx;
Expand Down Expand Up @@ -310,6 +330,7 @@ static int chacha20_poly1305_final(void *vctx, unsigned char *out, size_t *outl,
const OSSL_DISPATCH ossl_chacha20_ossl_poly1305_functions[] = {
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))chacha20_poly1305_newctx },
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))chacha20_poly1305_freectx },
{ OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))chacha20_poly1305_dupctx },
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))chacha20_poly1305_einit },
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))chacha20_poly1305_dinit },
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))chacha20_poly1305_update },
Expand Down

0 comments on commit 603b4c3

Please sign in to comment.