mirror of
https://github.com/openssl/openssl.git
synced 2025-02-23 14:42:15 +08:00
implement dupctx for chacha20_poly1305
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 https://github.com/openssl/openssl/pull/21933)
This commit is contained in:
parent
c32c3f2653
commit
df93b3c9e7
@ -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;
|
||||
@ -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;
|
||||
@ -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 },
|
||||
|
Loading…
Reference in New Issue
Block a user