mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
Add dupctx support to aead ciphers
Add dupctx method support to to ciphers implemented with IMPLEMENT_aead_cipher This includes: aes-<kbits>-gcm aria-<kbits>-ccm aria-<kbits>-gcm sm4-<kibs>-gcm 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
39d857bb61
commit
0239fb3db7
@ -33,6 +33,26 @@ static void *aes_ccm_newctx(void *provctx, size_t keybits)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void *aes_ccm_dupctx(void *provctx)
|
||||
{
|
||||
PROV_AES_CCM_CTX *ctx = provctx;
|
||||
PROV_AES_CCM_CTX *dupctx = NULL;
|
||||
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
dupctx = OPENSSL_memdup(provctx, sizeof(*ctx));
|
||||
if (dupctx == NULL)
|
||||
return NULL;
|
||||
/*
|
||||
* ossl_cm_initctx, via the ossl_prov_aes_hw_ccm functions assign a
|
||||
* provctx->ccm.ks.ks to the ccm context key so we need to point it to
|
||||
* the memduped copy
|
||||
*/
|
||||
dupctx->base.ccm_ctx.key = &dupctx->ccm.ks.ks;
|
||||
|
||||
return dupctx;
|
||||
}
|
||||
|
||||
static OSSL_FUNC_cipher_freectx_fn aes_ccm_freectx;
|
||||
static void aes_ccm_freectx(void *vctx)
|
||||
{
|
||||
|
@ -34,6 +34,15 @@ static void *aes_gcm_newctx(void *provctx, size_t keybits)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void *aes_gcm_dupctx(void *provctx)
|
||||
{
|
||||
PROV_AES_GCM_CTX *ctx = provctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
return OPENSSL_memdup(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
static OSSL_FUNC_cipher_freectx_fn aes_gcm_freectx;
|
||||
static void aes_gcm_freectx(void *vctx)
|
||||
{
|
||||
|
@ -28,6 +28,15 @@ static void *aria_ccm_newctx(void *provctx, size_t keybits)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void *aria_ccm_dupctx(void *provctx)
|
||||
{
|
||||
PROV_ARIA_CCM_CTX *ctx = provctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
return OPENSSL_memdup(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
static void aria_ccm_freectx(void *vctx)
|
||||
{
|
||||
PROV_ARIA_CCM_CTX *ctx = (PROV_ARIA_CCM_CTX *)vctx;
|
||||
|
@ -27,6 +27,15 @@ static void *aria_gcm_newctx(void *provctx, size_t keybits)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void *aria_gcm_dupctx(void *provctx)
|
||||
{
|
||||
PROV_ARIA_GCM_CTX *ctx = provctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
return OPENSSL_memdup(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
static OSSL_FUNC_cipher_freectx_fn aria_gcm_freectx;
|
||||
static void aria_gcm_freectx(void *vctx)
|
||||
{
|
||||
|
@ -28,6 +28,15 @@ static void *sm4_ccm_newctx(void *provctx, size_t keybits)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void *sm4_ccm_dupctx(void *provctx)
|
||||
{
|
||||
PROV_SM4_CCM_CTX *ctx = provctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
return OPENSSL_memdup(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
static void sm4_ccm_freectx(void *vctx)
|
||||
{
|
||||
PROV_SM4_CCM_CTX *ctx = (PROV_SM4_CCM_CTX *)vctx;
|
||||
|
@ -29,6 +29,15 @@ static void *sm4_gcm_newctx(void *provctx, size_t keybits)
|
||||
return ctx;
|
||||
}
|
||||
|
||||
static void *sm4_gcm_dupctx(void *provctx)
|
||||
{
|
||||
PROV_SM4_GCM_CTX *ctx = provctx;
|
||||
|
||||
if (ctx == NULL)
|
||||
return NULL;
|
||||
return OPENSSL_memdup(ctx, sizeof(*ctx));
|
||||
}
|
||||
|
||||
static void sm4_gcm_freectx(void *vctx)
|
||||
{
|
||||
PROV_SM4_GCM_CTX *ctx = (PROV_SM4_GCM_CTX *)vctx;
|
||||
|
@ -27,9 +27,14 @@ static void * alg##kbits##lc##_newctx(void *provctx) \
|
||||
{ \
|
||||
return alg##_##lc##_newctx(provctx, kbits); \
|
||||
} \
|
||||
static void * alg##kbits##lc##_dupctx(void *src) \
|
||||
{ \
|
||||
return alg##_##lc##_dupctx(src); \
|
||||
} \
|
||||
const OSSL_DISPATCH ossl_##alg##kbits##lc##_functions[] = { \
|
||||
{ OSSL_FUNC_CIPHER_NEWCTX, (void (*)(void))alg##kbits##lc##_newctx }, \
|
||||
{ OSSL_FUNC_CIPHER_FREECTX, (void (*)(void))alg##_##lc##_freectx }, \
|
||||
{ OSSL_FUNC_CIPHER_DUPCTX, (void (*)(void))alg##kbits##lc##_dupctx }, \
|
||||
{ OSSL_FUNC_CIPHER_ENCRYPT_INIT, (void (*)(void))ossl_##lc##_einit }, \
|
||||
{ OSSL_FUNC_CIPHER_DECRYPT_INIT, (void (*)(void))ossl_##lc##_dinit }, \
|
||||
{ OSSL_FUNC_CIPHER_UPDATE, (void (*)(void))ossl_##lc##_stream_update }, \
|
||||
|
Loading…
Reference in New Issue
Block a user