Add missing sm4_ccm_dupctx() and sm4_gcm_dupctx()
authorTomas Mraz <tomas@openssl.org>
Fri, 5 Jan 2024 16:29:20 +0000 (17:29 +0100)
committerTomas Mraz <tomas@openssl.org>
Mon, 8 Jan 2024 11:04:07 +0000 (12:04 +0100)
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/23217)

providers/implementations/ciphers/cipher_sm4_ccm.c
providers/implementations/ciphers/cipher_sm4_gcm.c

index 38e75016e930fcf78b8209228f28005c0d7222bc..0332b5627a8b012b7189cab6c0b87601454fc391 100644 (file)
@@ -28,6 +28,21 @@ 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;
+    PROV_SM4_CCM_CTX *dctx = NULL;
+
+    if (ctx == NULL)
+        return NULL;
+
+    dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+    if (dctx != NULL && dctx->base.ccm_ctx.key != NULL)
+        dctx->base.ccm_ctx.key = &dctx->ks.ks;
+
+    return dctx;
+}
+
 static void sm4_ccm_freectx(void *vctx)
 {
     PROV_SM4_CCM_CTX *ctx = (PROV_SM4_CCM_CTX *)vctx;
index ce1aa2b07d548c591cb0696cbfffa786576e8e85..edbeaeb8498d38eb7c228d9c3470f362a73e9763 100644 (file)
@@ -29,6 +29,21 @@ 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;
+    PROV_SM4_GCM_CTX *dctx = NULL;
+
+    if (ctx == NULL)
+        return NULL;
+
+    dctx = OPENSSL_memdup(ctx, sizeof(*ctx));
+    if (dctx != NULL && dctx->base.gcm.key != NULL)
+        dctx->base.gcm.key = &dctx->ks.ks;
+
+    return dctx;
+}
+
 static void sm4_gcm_freectx(void *vctx)
 {
     PROV_SM4_GCM_CTX *ctx = (PROV_SM4_GCM_CTX *)vctx;