diff --git a/frameworks/js/napi/crypto/inc/napi_utils.h b/frameworks/js/napi/crypto/inc/napi_utils.h index 19ce5496a05b97ef4dfdcd755e03db422eec3434..0b68f65ce007b9af36e559f442dd9c8cdcb9ea43 100644 --- a/frameworks/js/napi/crypto/inc/napi_utils.h +++ b/frameworks/js/napi/crypto/inc/napi_utils.h @@ -58,10 +58,6 @@ napi_value ConvertCipherBlobToNapiValue(napi_env env, HcfBlob *blob); bool GetAsyKeySpecFromNapiValue(napi_env env, napi_value arg, HcfAsyKeyParamsSpec **asyKeySpec); bool BuildSetNamedProperty(napi_env env, HcfBigInteger *number, const char *name, napi_value *intence); -bool BuildIntenceParterToNapiValue(napi_env env, HcfEccCommParamsSpec *blob, napi_value *intence); -bool CheckEccCommonParamSpec(napi_env env, HcfEccCommParamsSpec *blob); -napi_value ConvertEccCommonParamFieldFpToNapiValue(napi_env env, HcfEccCommParamsSpec *blob); -napi_value ConvertEccCommonParamPointToNapiValue(napi_env env, HcfEccCommParamsSpec *blob); napi_value ConvertBigIntToNapiValue(napi_env env, HcfBigInteger *blob); napi_value ConvertEccCommParamsSpecToNapiValue(napi_env env, HcfEccCommParamsSpec *blob); diff --git a/frameworks/js/napi/crypto/src/napi_sign.cpp b/frameworks/js/napi/crypto/src/napi_sign.cpp index 67a28fdd5cd69c3c2482dd4f899404a21f5d1925..8ef3f7aef94299c398af28e06084981670e6991c 100644 --- a/frameworks/js/napi/crypto/src/napi_sign.cpp +++ b/frameworks/js/napi/crypto/src/napi_sign.cpp @@ -644,11 +644,14 @@ static HcfResult SetSignUserIdUintArray(napi_env env, napi_value *argv, HcfSign { HcfBlob *blob = nullptr; blob = GetBlobFromNapiUint8Arr(env, argv[1]); + if (blob == nullptr) { + LOGE("failed to get blob."); + return HCF_INVALID_PARAMS; + } HcfResult ret = sign->setSignSpecUint8Array(sign, SM2_USER_ID_UINT8ARR, *blob); if (ret != HCF_SUCCESS) { HcfBlobDataFree(blob); HcfFree(blob); - napi_throw(env, GenerateBusinessError(env, ret, "c setSignSpecUint8Array failed.")); LOGE("c setSignSpecUint8Array failed."); return HCF_INVALID_PARAMS; } @@ -661,14 +664,12 @@ static HcfResult SetSignSaltLenInt(napi_env env, napi_value *argv, HcfSign *sign { int32_t saltLen = 0; if (napi_get_value_int32(env, argv[1], &saltLen) != napi_ok) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "get signSpec saltLen failed!")); LOGE("get signSpec saltLen failed!"); return HCF_INVALID_PARAMS; } HcfResult ret = HCF_SUCCESS; ret = sign->setSignSpecInt(sign, PSS_SALT_LEN_INT, saltLen); if (ret != HCF_SUCCESS) { - napi_throw(env, GenerateBusinessError(env, ret, "c setSignSpecNumber fail.")); LOGE("c setSignSpecNumber fail."); return HCF_INVALID_PARAMS; } diff --git a/frameworks/js/napi/crypto/src/napi_utils.cpp b/frameworks/js/napi/crypto/src/napi_utils.cpp index 017eec94d83c70a8dfa47e7d5f0e7cc62e87329f..877f7570174b235119d10babc93ce075e935ad0c 100644 --- a/frameworks/js/napi/crypto/src/napi_utils.cpp +++ b/frameworks/js/napi/crypto/src/napi_utils.cpp @@ -1400,7 +1400,7 @@ static bool CheckEccCommonParamSpecBase(napi_env env, HcfEccCommParamsSpec *blob return true; } -bool CheckEccCommonParamSpec(napi_env env, HcfEccCommParamsSpec *blob) +static bool CheckEccCommonParamSpec(napi_env env, HcfEccCommParamsSpec *blob) { if (blob == nullptr) { LOGE("Invalid blob!"); @@ -1438,7 +1438,7 @@ bool CheckEccCommonParamSpec(napi_env env, HcfEccCommParamsSpec *blob) return true; } -napi_value ConvertEccCommonParamFieldFpToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) +static napi_value ConvertEccCommonParamFieldFpToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) { napi_value fieldFp; napi_value fieldType; @@ -1476,7 +1476,7 @@ napi_value ConvertEccCommonParamFieldFpToNapiValue(napi_env env, HcfEccCommParam return fieldFp; } -napi_value ConvertEccCommonParamPointToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) +static napi_value ConvertEccCommonParamPointToNapiValue(napi_env env, HcfEccCommParamsSpec *blob) { napi_value point; napi_status status = napi_create_object(env, &point); @@ -1485,11 +1485,12 @@ napi_value ConvertEccCommonParamPointToNapiValue(napi_env env, HcfEccCommParamsS return NapiGetNull(env); } napi_value x = ConvertBigIntToNapiValue(env, &(blob->g.x)); - napi_value y = ConvertBigIntToNapiValue(env, &(blob->g.y)); if (x == nullptr) { LOGE("x is null!"); return NapiGetNull(env); } + + napi_value y = ConvertBigIntToNapiValue(env, &(blob->g.y)); if (y == nullptr) { LOGE("y is null!"); return NapiGetNull(env); @@ -1518,7 +1519,8 @@ bool BuildSetNamedProperty(napi_env env, HcfBigInteger *number, const char *name return true; } -bool BuildIntancePartertoNapiValueSon(napi_env env, napi_status status, HcfEccCommParamsSpec *blob, napi_value *intence) +static bool BuildIntancePartertoNapiValueSon(napi_env env, napi_status status, HcfEccCommParamsSpec *blob, + napi_value *intence) { if (!BuildSetNamedProperty(env, &(blob->a), "a", intence)) { LOGE("build setNamedProperty a failed!"); @@ -1546,7 +1548,7 @@ bool BuildIntancePartertoNapiValueSon(napi_env env, napi_status status, HcfEccCo return true; } -bool BuildIntenceParterToNapiValue(napi_env env, HcfEccCommParamsSpec *blob, napi_value *intence) +static bool BuildIntenceParterToNapiValue(napi_env env, HcfEccCommParamsSpec *blob, napi_value *intence) { napi_value algName; size_t algNameLength = HcfStrlen(blob->base.algName); diff --git a/frameworks/js/napi/crypto/src/napi_verify.cpp b/frameworks/js/napi/crypto/src/napi_verify.cpp index 56dd9545bdfec85be7f9d16bc2aa263567eee782..51600a352c49959ffc8f58573fcba8a1a88f25c2 100644 --- a/frameworks/js/napi/crypto/src/napi_verify.cpp +++ b/frameworks/js/napi/crypto/src/napi_verify.cpp @@ -672,11 +672,14 @@ static HcfResult SetVerifyUserIdUintArray(napi_env env, napi_value *argv, HcfVer { HcfBlob *blob = nullptr; blob = GetBlobFromNapiUint8Arr(env, argv[1]); + if (blob == nullptr) { + LOGE("failed to get blob."); + return HCF_INVALID_PARAMS; + } HcfResult ret = verify->setVerifySpecUint8Array(verify, SM2_USER_ID_UINT8ARR, *blob); if (ret != HCF_SUCCESS) { HcfBlobDataFree(blob); HcfFree(blob); - napi_throw(env, GenerateBusinessError(env, ret, "c SetVerifyUserIdUintArray failed.")); LOGE("c SetVerifyUserIdUintArray failed."); return HCF_INVALID_PARAMS; } @@ -689,13 +692,11 @@ static HcfResult SetVerifySaltLenInt(napi_env env, napi_value *argv, HcfVerify * { int32_t saltLen = 0; if (napi_get_value_int32(env, argv[1], &saltLen) != napi_ok) { - napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "get signSpec saltLen failed!")); LOGE("get signSpec saltLen failed!"); return HCF_INVALID_PARAMS; } HcfResult ret = verify->setVerifySpecInt(verify, PSS_SALT_LEN_INT, saltLen); if (ret != HCF_SUCCESS) { - napi_throw(env, GenerateBusinessError(env, ret, "c setSignSpecNumber fail.")); LOGE("c setSignSpecNumber fail."); return HCF_INVALID_PARAMS; } diff --git a/frameworks/key/key_utils.c b/frameworks/key/key_utils.c index 674af0ebc1dce3bb085ed6a837fbb8c7168b5883..024a6b136b1c97c0673065d1d423ac0688a2a6bf 100644 --- a/frameworks/key/key_utils.c +++ b/frameworks/key/key_utils.c @@ -23,6 +23,10 @@ HcfResult CopyAsyKeyParamsSpec(const HcfAsyKeyParamsSpec *srcSpec, HcfAsyKeyParamsSpec *destSpec) { + if (srcSpec == NULL || srcSpec->algName == NULL || destSpec == NULL) { + LOGE("Invalid input parameter."); + return HCF_INVALID_PARAMS; + } size_t srcAlgNameLen = HcfStrlen(srcSpec->algName); if (!srcAlgNameLen) { LOGE("algName is empty!"); @@ -40,6 +44,11 @@ HcfResult CopyAsyKeyParamsSpec(const HcfAsyKeyParamsSpec *srcSpec, HcfAsyKeyPara HcfResult CopyPoint(const HcfPoint *src, HcfPoint *dest) { + if (src == NULL || src->x.data == NULL || src->x.len == 0 || + src->y.data == NULL || src->y.len == 0 || dest == NULL) { + LOGE("Invalid input parameter."); + return HCF_INVALID_PARAMS; + } dest->x.data = (unsigned char *)HcfMalloc(src->x.len, 0); if (dest->x.data == NULL) { LOGE("Failed to allocate x data memory"); @@ -61,6 +70,10 @@ HcfResult CopyPoint(const HcfPoint *src, HcfPoint *dest) HcfResult CopyEcField(const HcfECField *src, HcfECField **dest) { + if (src == NULL || src->fieldType == NULL || dest == NULL) { + LOGE("Invalid input parameter."); + return HCF_INVALID_PARAMS; + } HcfECField *tmpField = (HcfECField *)HcfMalloc(sizeof(HcfECFieldFp), 0); if (tmpField == NULL) { LOGE("Alloc memory failed."); @@ -96,6 +109,11 @@ HcfResult CopyEcField(const HcfECField *src, HcfECField **dest) HcfResult CopyEccCommonSpec(const HcfEccCommParamsSpec *srcSpec, HcfEccCommParamsSpec *destSpec) { + if (srcSpec == NULL || srcSpec->a.data == NULL || srcSpec->a.len == 0 || srcSpec->b.data == NULL || + srcSpec->b.len == 0 || srcSpec->n.data == NULL || srcSpec->n.len == 0 || destSpec == NULL) { + LOGE("Invalid input parameter."); + return HCF_INVALID_PARAMS; + } if (CopyAsyKeyParamsSpec(&(srcSpec->base), &(destSpec->base)) != HCF_SUCCESS) { return HCF_INVALID_PARAMS; } diff --git a/plugin/openssl_plugin/common/src/openssl_adapter.c b/plugin/openssl_plugin/common/src/openssl_adapter.c index d4606726dbb731ae2636abc1f94384a3d1e1bfab..753d301607518d1952f98667e068d98e20fe281c 100644 --- a/plugin/openssl_plugin/common/src/openssl_adapter.c +++ b/plugin/openssl_plugin/common/src/openssl_adapter.c @@ -30,7 +30,9 @@ void Openssl_BN_clear(BIGNUM *a) void Openssl_BN_clear_free(BIGNUM *a) { - BN_clear_free(a); + if (a != NULL) { + BN_clear_free(a); + } } BIGNUM *Openssl_BN_new(void) @@ -40,7 +42,9 @@ BIGNUM *Openssl_BN_new(void) void Openssl_BN_free(BIGNUM *a) { - BN_free(a); + if (a != NULL) { + BN_free(a); + } } BIGNUM *Openssl_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret) @@ -70,7 +74,9 @@ BN_CTX *Openssl_BN_CTX_new(void) void Openssl_BN_CTX_free(BN_CTX *ctx) { - BN_CTX_free(ctx); + if (ctx != NULL) { + BN_CTX_free(ctx); + } } int Openssl_BN_num_bytes(const BIGNUM *a) @@ -180,12 +186,16 @@ void Openssl_EC_KEY_set_enc_flags(EC_KEY *ecKey, unsigned int flags) void Openssl_EC_KEY_free(EC_KEY *key) { - EC_KEY_free(key); + if (key != NULL) { + EC_KEY_free(key); + } } void Openssl_EC_POINT_free(EC_POINT *point) { - EC_POINT_free(point); + if (point != NULL) { + EC_POINT_free(point); + } } EC_GROUP *Openssl_EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) @@ -195,7 +205,9 @@ EC_GROUP *Openssl_EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const void Openssl_EC_GROUP_free(EC_GROUP *group) { - EC_GROUP_free(group); + if (group != NULL) { + EC_GROUP_free(group); + } } EC_POINT *Openssl_EC_POINT_new(const EC_GROUP *group) @@ -294,7 +306,9 @@ EVP_MD_CTX *Openssl_EVP_MD_CTX_new(void) void Openssl_EVP_MD_CTX_free(EVP_MD_CTX *ctx) { - EVP_MD_CTX_free(ctx); + if (ctx != NULL) { + EVP_MD_CTX_free(ctx); + } } void Openssl_EVP_MD_CTX_set_pkey_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pctx) @@ -371,7 +385,9 @@ int Openssl_EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key) void Openssl_EVP_PKEY_free(EVP_PKEY *pkey) { - EVP_PKEY_free(pkey); + if (pkey != NULL) { + EVP_PKEY_free(pkey); + } } EVP_PKEY_CTX *Openssl_EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e) @@ -396,7 +412,9 @@ int Openssl_EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keyle void Openssl_EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx) { - EVP_PKEY_CTX_free(ctx); + if (ctx != NULL) { + EVP_PKEY_CTX_free(ctx); + } } int Openssl_EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, @@ -473,7 +491,9 @@ DSA *Openssl_DSA_new(void) void Openssl_DSA_free(DSA *dsa) { - DSA_free(dsa); + if (dsa != NULL) { + DSA_free(dsa); + } } int Openssl_DSA_up_ref(DSA *dsa) @@ -548,7 +568,9 @@ RSA *Openssl_RSA_new(void) void Openssl_RSA_free(RSA *rsa) { - RSA_free(rsa); + if (rsa != NULL) { + RSA_free(rsa); + } } int Openssl_RSA_generate_multi_prime_key(RSA *rsa, int bits, int primes, @@ -695,7 +717,9 @@ int Openssl_BIO_read(BIO *b, void *data, int dlen) void Openssl_BIO_free_all(BIO *a) { - return BIO_free_all(a); + if (a != NULL) { + return BIO_free_all(a); + } } int Openssl_RAND_priv_bytes(unsigned char *buf, int num) @@ -775,7 +799,9 @@ size_t Openssl_HMAC_size(const HMAC_CTX *ctx) void Openssl_HMAC_CTX_free(HMAC_CTX *ctx) { - HMAC_CTX_free(ctx); + if (ctx != NULL) { + HMAC_CTX_free(ctx); + } } HMAC_CTX *Openssl_HMAC_CTX_new(void) @@ -785,7 +811,9 @@ HMAC_CTX *Openssl_HMAC_CTX_new(void) void Openssl_EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx) { - EVP_CIPHER_CTX_free(ctx); + if (ctx != NULL) { + EVP_CIPHER_CTX_free(ctx); + } } const EVP_CIPHER *Openssl_EVP_aes_128_ecb(void) diff --git a/plugin/openssl_plugin/common/src/openssl_common.c b/plugin/openssl_plugin/common/src/openssl_common.c index 2d526a7ca9c397875e62bb9449040721ba8e1ae6..3c942697ee4f7eeb9467a634dfd59a26aef8b24f 100644 --- a/plugin/openssl_plugin/common/src/openssl_common.c +++ b/plugin/openssl_plugin/common/src/openssl_common.c @@ -161,6 +161,7 @@ HcfResult GetAlgNameByBits(int32_t keyLen, char **algName) if (memcpy_s(*algName, srcAlgNameLen, ALG_NAME_TYPE_MAP[i].algName, srcAlgNameLen) != EOK) { LOGE("memcpy algName failed."); HcfFree(*algName); + *algName = NULL; return HCF_ERR_MALLOC; } return HCF_SUCCESS; diff --git a/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c b/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c index bc9bd88d24e241e70b4b9b768365e48be317e3e9..0bc463e0c6f0b316310ebebd48651adcb0ae394e 100644 --- a/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c @@ -597,14 +597,10 @@ HcfResult HcfSignSpiSm2Create(HcfSignatureParams *params, HcfSignSpi **returnObj returnImpl->userId.data = (uint8_t *)HcfMalloc(strlen(SM2_DEFAULT_USERID) + 1, 0); if (returnImpl->userId.data == NULL) { LOGE("Failed to allocate userId data memory"); + HcfFree(returnImpl); return HCF_ERR_MALLOC; } - if (memcpy_s(returnImpl->userId.data, strlen(SM2_DEFAULT_USERID), SM2_DEFAULT_USERID, strlen(SM2_DEFAULT_USERID)) - != EOK) { - LOGE("memcpy userId failed."); - HcfFree(returnImpl->userId.data); - return HCF_ERR_MALLOC; - } + (void)memcpy_s(returnImpl->userId.data, strlen(SM2_DEFAULT_USERID), SM2_DEFAULT_USERID, strlen(SM2_DEFAULT_USERID)); returnImpl->userId.len = strlen(SM2_DEFAULT_USERID); returnImpl->mdCtx = Openssl_EVP_MD_CTX_new(); if (returnImpl->mdCtx == NULL) { @@ -651,14 +647,10 @@ HcfResult HcfVerifySpiSm2Create(HcfSignatureParams *params, HcfVerifySpi **retur returnImpl->userId.data = (uint8_t *)HcfMalloc(strlen(SM2_DEFAULT_USERID) + 1, 0); if (returnImpl->userId.data == NULL) { LOGE("Failed to allocate userId data memory"); + HcfFree(returnImpl); return HCF_ERR_MALLOC; } - if (memcpy_s(returnImpl->userId.data, strlen(SM2_DEFAULT_USERID), SM2_DEFAULT_USERID, strlen(SM2_DEFAULT_USERID)) - != EOK) { - LOGE("memcpy userId failed."); - HcfFree(returnImpl->userId.data); - return HCF_ERR_MALLOC; - } + (void)memcpy_s(returnImpl->userId.data, strlen(SM2_DEFAULT_USERID), SM2_DEFAULT_USERID, strlen(SM2_DEFAULT_USERID)); returnImpl->userId.len = strlen(SM2_DEFAULT_USERID); returnImpl->mdCtx = Openssl_EVP_MD_CTX_new(); if (returnImpl->mdCtx == NULL) { diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c index c3eb07507815f662857745e4212d512ee12058c5..1fe6536072d94e98a0fb9dbc122039d396d3b879 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c @@ -1462,7 +1462,16 @@ static HcfResult GetCurveName(const HcfKey *self, const bool isPriavte, char **r return HCF_INVALID_PARAMS; } - int32_t len = (int32_t)strlen(tmp); + if (tmp == NULL) { + LOGE("tmp is null."); + return HCF_INVALID_PARAMS; + } + size_t len = HcfStrlen(tmp); + if (len == 0) { + LOGE("fieldType is empty!"); + return HCF_INVALID_PARAMS; + } + *returnString = (char *)HcfMalloc(len + 1, 0); if (*returnString == NULL) { LOGE("Alloc returnString memory failed."); diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c index 5807594b1a9ab364a64668b9c5ca707caf178fd2..fddc1a764be0fc17a149e68b4d4ac363eb6185ab 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c @@ -92,18 +92,25 @@ static HcfResult BuildCommonParamPart(const EC_GROUP *ecGroup, HcfEccCommParamsS return HCF_ERR_MALLOC; } HcfResult ret = HCF_SUCCESS; - if (!Openssl_EC_POINT_get_affine_coordinates_GFp(ecGroup, point, x, y, NULL)) { - LOGE("EC_POINT_get_affine_coordinates_GFp failed."); - ret = HCF_ERR_CRYPTO_OPERATION; - } - if (BigNumToBigInteger(x, &(returnCommonParamSpec->paramsSpec.g.x)) != HCF_SUCCESS) { - LOGE("new commonParamSpec x failed."); - ret = HCF_ERR_CRYPTO_OPERATION; - } - if (BigNumToBigInteger(y, &(returnCommonParamSpec->paramsSpec.g.y)) != HCF_SUCCESS) { - LOGE("new commonParamSpec y failed."); - ret = HCF_ERR_CRYPTO_OPERATION; - } + + do { + if (!Openssl_EC_POINT_get_affine_coordinates_GFp(ecGroup, point, x, y, NULL)) { + LOGE("EC_POINT_get_affine_coordinates_GFp failed."); + ret = HCF_ERR_CRYPTO_OPERATION; + break; + } + if (BigNumToBigInteger(x, &(returnCommonParamSpec->paramsSpec.g.x)) != HCF_SUCCESS) { + LOGE("new commonParamSpec x failed."); + ret = HCF_ERR_CRYPTO_OPERATION; + break; + } + if (BigNumToBigInteger(y, &(returnCommonParamSpec->paramsSpec.g.y)) != HCF_SUCCESS) { + LOGE("new commonParamSpec y failed."); + ret = HCF_ERR_CRYPTO_OPERATION; + break; + } + } while (0); + Openssl_BN_free(x); Openssl_BN_free(y); Openssl_EC_POINT_free(point); @@ -138,19 +145,26 @@ static HcfResult BuildCommonParamGFp(const EC_GROUP *ecGroup, HcfEccCommParamsSp return HCF_ERR_CRYPTO_OPERATION; } HcfResult ret = HCF_SUCCESS; - if (BigNumToBigInteger(a, &(returnCommonParamSpec->paramsSpec.a)) != HCF_SUCCESS) { - LOGE("new commonParamSpec a failed."); - ret = HCF_ERR_CRYPTO_OPERATION; - } - if (BigNumToBigInteger(b, &(returnCommonParamSpec->paramsSpec.b)) != HCF_SUCCESS) { - LOGE("new commonParamSpec b failed."); - ret = HCF_ERR_CRYPTO_OPERATION; - } - HcfECFieldFp *tmpField = (HcfECFieldFp *)(returnCommonParamSpec->paramsSpec.field); - if (BigNumToBigInteger(p, &(tmpField->p)) != HCF_SUCCESS) { - LOGE("new commonParamSpec p failed."); - ret = HCF_ERR_CRYPTO_OPERATION; - } + + do { + if (BigNumToBigInteger(a, &(returnCommonParamSpec->paramsSpec.a)) != HCF_SUCCESS) { + LOGE("new commonParamSpec a failed."); + ret = HCF_ERR_CRYPTO_OPERATION; + break; + } + if (BigNumToBigInteger(b, &(returnCommonParamSpec->paramsSpec.b)) != HCF_SUCCESS) { + LOGE("new commonParamSpec b failed."); + ret = HCF_ERR_CRYPTO_OPERATION; + break; + } + HcfECFieldFp *tmpField = (HcfECFieldFp *)(returnCommonParamSpec->paramsSpec.field); + if (BigNumToBigInteger(p, &(tmpField->p)) != HCF_SUCCESS) { + LOGE("new commonParamSpec p failed."); + ret = HCF_ERR_CRYPTO_OPERATION; + break; + } + } while (0); + Openssl_BN_free(p); Openssl_BN_free(a); Openssl_BN_free(b); @@ -179,7 +193,7 @@ static HcfResult BuildCommonParam(const EC_GROUP *ecGroup, HcfEccCommParamsSpecS return HCF_SUCCESS; } -static HcfEccCommParamsSpecSpi *BuildEccCommonParamObject() +static HcfEccCommParamsSpecSpi *BuildEccCommonParamObject(void) { HcfEccCommParamsSpecSpi *spi = (HcfEccCommParamsSpecSpi*)HcfMalloc(sizeof(HcfEccCommParamsSpecSpi), 0); if (spi == NULL) { @@ -246,11 +260,15 @@ HcfResult HcfECCCommonParamSpecCreate(HcfAsyKeyGenParams *params, HcfEccCommPara if (GetAlgNameByBits(params->bits, &(object->paramsSpec.base.algName)) != HCF_SUCCESS) { LOGE("get algName parameter failed."); Openssl_EC_GROUP_free(ecGroup); + HcfFree(object); + object = NULL; return HCF_INVALID_PARAMS; } if (BuildCommonParam(ecGroup, object)!= HCF_SUCCESS) { LOGE("create keyPair failed."); Openssl_EC_GROUP_free(ecGroup); + HcfFree(object); + object = NULL; return HCF_ERR_CRYPTO_OPERATION; } *returnCommonParamSpec = object; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c index c9d3b8149ad86364cf57ddc2020088c92fca97d1..b070a7a28fb1dbf502b4ecf7af3d3bbc260eae88 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c @@ -1191,7 +1191,11 @@ static HcfResult PackSm2PriKey(int32_t curveId, EC_KEY *ecKey, const char *field char *tmpFieldType = NULL; if (fieldType != NULL) { - int32_t len = (int32_t)strlen(fieldType); + size_t len = HcfStrlen(fieldType); + if (len == 0) { + LOGE("fieldType is empty!"); + return HCF_INVALID_PARAMS; + } tmpFieldType = (char *)HcfMalloc(len + 1, 0); if (tmpFieldType == NULL) { LOGE("Alloc tmpFieldType memory failed.");