From ae6e070ac7fde00296801f7e3c7132526eb5b9d3 Mon Sep 17 00:00:00 2001 From: lcc Date: Tue, 1 Apr 2025 17:11:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=88=86=E6=94=AF=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lcc --- frameworks/js/napi/crypto/src/napi_cipher.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frameworks/js/napi/crypto/src/napi_cipher.cpp b/frameworks/js/napi/crypto/src/napi_cipher.cpp index ac947b7..44f976f 100644 --- a/frameworks/js/napi/crypto/src/napi_cipher.cpp +++ b/frameworks/js/napi/crypto/src/napi_cipher.cpp @@ -853,6 +853,8 @@ napi_value NapiCipher::JsSetCipherSpec(napi_env env, napi_callback_info info) } HcfBlob *pSource = GetBlobFromNapiUint8Arr(env, argv[1]); if (pSource == nullptr || pSource->len == 0) { + HcfBlobDataFree(pSource); + HcfFree(pSource); LOGE("failed to get pSource."); napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "[pSource]: must be of the DataBlob type.")); return nullptr; -- Gitee From fe581ccdf70c4dd32bdd0e10854216ecb3a8036f Mon Sep 17 00:00:00 2001 From: lcc Date: Mon, 7 Apr 2025 16:58:30 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=88=86=E6=94=AF=E5=86=85=E5=AD=98=E6=B3=84=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: lcc --- frameworks/js/napi/crypto/src/napi_utils.cpp | 85 +++++++++++--------- 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/frameworks/js/napi/crypto/src/napi_utils.cpp b/frameworks/js/napi/crypto/src/napi_utils.cpp index d1a1afa..ae8acfc 100644 --- a/frameworks/js/napi/crypto/src/napi_utils.cpp +++ b/frameworks/js/napi/crypto/src/napi_utils.cpp @@ -404,12 +404,46 @@ static bool GetIvAndAadBlob(napi_env env, napi_value arg, HcfBlob **iv, HcfBlob return true; } +static bool HandleAuthTag(napi_env env, napi_value arg, HcfCryptoMode opMode, HcfBlob **tag, size_t authTagLen) +{ + if (opMode == DECRYPT_MODE) { + *tag = GetBlobFromParamsSpec(env, arg, AUTHTAG_PARAMS); + if (*tag == nullptr) { + LOGE("get tag failed!"); + return false; + } + } else if (opMode == ENCRYPT_MODE) { + HcfBlob authTag = {}; + authTag->data = static_cast(HcfMalloc(authTagLen, 0)); + if (authTag->data == nullptr) { + LOGE("malloc authTag failed!"); + return false; + } + authTag->len = authTagLen; + *tag = &authTag; + } else { + LOGE("Invalid operation mode!"); + return false; + } + return true; +} + +static void FreeParamsResources(HcfBlob *iv, HcfBlob *aad, HcfBlob *tag, void *paramsSpec) +{ + HcfBlobDataFree(iv); + HcfBlobDataFree(aad); + HcfBlobDataFree(tag); + HcfFree(iv); + HcfFree(aad); + HcfFree(tag); + HcfFree(paramsSpec); +} + static bool GetGcmParamsSpec(napi_env env, napi_value arg, HcfCryptoMode opMode, HcfParamsSpec **paramsSpec) { HcfBlob *iv = nullptr; HcfBlob *aad = nullptr; HcfBlob *tag = nullptr; - HcfBlob authTag = {}; bool ret = false; HcfGcmParamsSpec *gcmParamsSpec = reinterpret_cast(HcfMalloc(sizeof(HcfGcmParamsSpec), 0)); @@ -424,35 +458,21 @@ static bool GetGcmParamsSpec(napi_env env, napi_value arg, HcfCryptoMode opMode, goto clearup; } - if (opMode == DECRYPT_MODE) { - tag = GetBlobFromParamsSpec(env, arg, AUTHTAG_PARAMS); - if (tag == nullptr) { - LOGE("get tag failed!"); - goto clearup; - } - } else if (opMode == ENCRYPT_MODE) { - authTag.data = static_cast(HcfMalloc(GCM_AUTH_TAG_LEN, 0)); - if (authTag.data == nullptr) { - LOGE("get tag failed!"); - goto clearup; - } - authTag.len = GCM_AUTH_TAG_LEN; - } else { + ret = HandleAuthTag(env, arg, opMode, &tag, GCM_AUTH_TAG_LEN); + if (!ret) { + LOGE("HandleAuthTag failed!"); goto clearup; } gcmParamsSpec->base.getType = GetGcmParamsSpecType; gcmParamsSpec->iv = *iv; gcmParamsSpec->aad = *aad; - gcmParamsSpec->tag = opMode == DECRYPT_MODE ? *tag : authTag; + gcmParamsSpec->tag = *tag *paramsSpec = reinterpret_cast(gcmParamsSpec); ret = true; clearup: if (!ret) { - HcfBlobDataFree(iv); - HcfBlobDataFree(aad); - HcfBlobDataFree(tag); - HcfFree(gcmParamsSpec); + FreeParamsResources(iv, aad, tag, gcmParamsSpec); } HcfFree(iv); HcfFree(aad); @@ -465,7 +485,6 @@ static bool GetCcmParamsSpec(napi_env env, napi_value arg, HcfCryptoMode opMode, HcfBlob *iv = nullptr; HcfBlob *aad = nullptr; HcfBlob *tag = nullptr; - HcfBlob authTag = {}; bool ret = false; HcfCcmParamsSpec *ccmParamsSpec = reinterpret_cast(HcfMalloc(sizeof(HcfCcmParamsSpec), 0)); @@ -479,34 +498,20 @@ static bool GetCcmParamsSpec(napi_env env, napi_value arg, HcfCryptoMode opMode, goto clearup; } - if (opMode == DECRYPT_MODE) { - tag = GetBlobFromParamsSpec(env, arg, AUTHTAG_PARAMS); - if (tag == nullptr) { - LOGE("get tag failed!"); - goto clearup; - } - } else if (opMode == ENCRYPT_MODE) { - authTag.data = static_cast(HcfMalloc(CCM_AUTH_TAG_LEN, 0)); - if (authTag.data == nullptr) { - LOGE("get tag failed!"); - goto clearup; - } - authTag.len = CCM_AUTH_TAG_LEN; - } else { + ret = HandleAuthTag(env, arg, opMode, &tag, CCM_AUTH_TAG_LEN); + if (!ret) { + LOGE("HandleAuthTag failed!"); goto clearup; } ccmParamsSpec->base.getType = GetCcmParamsSpecType; ccmParamsSpec->iv = *iv; ccmParamsSpec->aad = *aad; - ccmParamsSpec->tag = opMode == DECRYPT_MODE ? *tag : authTag; + ccmParamsSpec->tag = *tag; *paramsSpec = reinterpret_cast(ccmParamsSpec); ret = true; clearup: if (!ret) { - HcfBlobDataFree(iv); - HcfBlobDataFree(aad); - HcfBlobDataFree(tag); - HcfFree(ccmParamsSpec); + FreeParamsResources(iv, aad, tag, ccmParamsSpec); } HcfFree(iv); HcfFree(aad); -- Gitee