From 9e362e9a1626392f218672ee1e29dee20900ef9b Mon Sep 17 00:00:00 2001 From: jing-wang177 Date: Thu, 17 Jul 2025 19:24:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=91=8A=E8=AD=A6=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: jing-wang177 --- frameworks/crypto_operation/sm2_crypto_util.c | 4 +++ frameworks/native/include/native_common.h | 6 ++-- frameworks/native/src/asym_key.c | 28 ++++++++++++++++--- frameworks/native/src/native_common.c | 27 ++++-------------- .../crypto_operation/kdf/src/scrypt_openssl.c | 6 ++-- .../sym_key_generator/src/sym_key_openssl.c | 2 +- 6 files changed, 39 insertions(+), 34 deletions(-) diff --git a/frameworks/crypto_operation/sm2_crypto_util.c b/frameworks/crypto_operation/sm2_crypto_util.c index a28cece..88ef81c 100644 --- a/frameworks/crypto_operation/sm2_crypto_util.c +++ b/frameworks/crypto_operation/sm2_crypto_util.c @@ -105,6 +105,10 @@ HcfResult HcfGenCipherTextBySpec(Sm2CipherTextSpec *spec, const char *mode, HcfB return HCF_INVALID_PARAMS; } HcfSm2SpecToASN1CreateFunc createFunc = FindAbility(mode); + if (createFunc == NULL) { + LOGE("Failed to find create function"); + return HCF_INVALID_PARAMS; + } HcfResult res = createFunc(spec, output); if (res != HCF_SUCCESS) { LOGE("Failed to convert construct to asn1!"); diff --git a/frameworks/native/include/native_common.h b/frameworks/native/include/native_common.h index 03c924c..a324e2e 100644 --- a/frameworks/native/include/native_common.h +++ b/frameworks/native/include/native_common.h @@ -27,10 +27,8 @@ OH_Crypto_ErrCode GetOhCryptoErrCode(HcfResult errCode); OH_Crypto_ErrCode GetOhCryptoErrCodeNew(HcfResult errCode); void ReverseUint8Arr(uint8_t *data, size_t len); -int32_t bigEndianArrToInt32(const uint8_t *data, size_t len); -void Int32TobigEndianArr(int32_t value, uint8_t *data, size_t len); -int32_t bigEndianArrToInt(const uint8_t *data, size_t len); -void IntTobigEndianArr(int value, uint8_t *data, size_t len); +uint32_t BigEndianArrToUint32(const uint8_t *data, size_t len); +void Uint32TobigEndianArr(uint32_t value, uint8_t *data, size_t len); #ifdef __cplusplus } #endif diff --git a/frameworks/native/src/asym_key.c b/frameworks/native/src/asym_key.c index 55494d5..fd40379 100644 --- a/frameworks/native/src/asym_key.c +++ b/frameworks/native/src/asym_key.c @@ -861,7 +861,11 @@ static OH_Crypto_ErrCode SetEccCommSpec(HcfEccCommParamsSpec *spec, CryptoAsymKe if (value->len != sizeof(spec->h)) { return CRYPTO_PARAMETER_CHECK_FAILED; } - spec->h = bigEndianArrToInt32(value->data, value->len); + uint32_t tmp = BigEndianArrToUint32(value->data, value->len); + if (tmp > INT32_MAX) { + return CRYPTO_PARAMETER_CHECK_FAILED; + } + spec->h = (int32_t)tmp; break; default: return CRYPTO_PARAMETER_CHECK_FAILED; @@ -936,7 +940,11 @@ static OH_Crypto_ErrCode SetDhCommSpec(HcfDhCommParamsSpec *spec, CryptoAsymKey_ if (value->len != sizeof(spec->length)) { return CRYPTO_PARAMETER_CHECK_FAILED; } - spec->length = bigEndianArrToInt(value->data, value->len); + uint32_t tmp = BigEndianArrToUint32(value->data, value->len); + if (tmp > INT32_MAX) { + return CRYPTO_PARAMETER_CHECK_FAILED; + } + spec->length = (int)tmp; break; default: return CRYPTO_PARAMETER_CHECK_FAILED; @@ -1309,7 +1317,13 @@ static OH_Crypto_ErrCode GetEccCommSpec(HcfEccCommParamsSpec *spec, CryptoAsymKe return CRYPTO_MEMORY_ERROR; } value->len = sizeof(spec->h); - Int32TobigEndianArr(spec->h, value->data, value->len); + if (spec->h < 0) { + HcfFree(value->data); + value->data = NULL; + return CRYPTO_PARAMETER_CHECK_FAILED; + } + uint32_t tmp = (uint32_t)spec->h; + Uint32TobigEndianArr(tmp, value->data, value->len); break; default: return CRYPTO_PARAMETER_CHECK_FAILED; @@ -1386,7 +1400,13 @@ static OH_Crypto_ErrCode GetDhCommSpec(HcfDhCommParamsSpec *spec, CryptoAsymKey_ return CRYPTO_MEMORY_ERROR; } value->len = sizeof(spec->length); - IntTobigEndianArr(spec->length, value->data, value->len); + if (spec->length < 0) { + HcfFree(value->data); + value->data = NULL; + return CRYPTO_PARAMETER_CHECK_FAILED; + } + uint32_t tmp = (uint32_t)spec->length; + Uint32TobigEndianArr(tmp, value->data, value->len); break; default: return CRYPTO_PARAMETER_CHECK_FAILED; diff --git a/frameworks/native/src/native_common.c b/frameworks/native/src/native_common.c index 62b7fd3..a92b10a 100644 --- a/frameworks/native/src/native_common.c +++ b/frameworks/native/src/native_common.c @@ -58,36 +58,19 @@ void ReverseUint8Arr(uint8_t *data, size_t len) #define NATIVE_BITS_SIZE 8 -int32_t bigEndianArrToInt32(const uint8_t *data, size_t len) +uint32_t BigEndianArrToUint32(const uint8_t *data, size_t len) { - int32_t value = 0; + uint32_t value = 0; for (size_t i = 0; i < len; ++i) { - value |= (int32_t)(data[i] << ((sizeof(int32_t) - 1 - i) * NATIVE_BITS_SIZE)); + value |= (uint32_t)(data[i] << ((sizeof(int32_t) - 1 - i) * NATIVE_BITS_SIZE)); } return value; } -void Int32TobigEndianArr(int32_t value, uint8_t *data, size_t len) +void Uint32TobigEndianArr(uint32_t value, uint8_t *data, size_t len) { for (size_t i = 0; i < len; ++i) { - data[i] = (value >> ((sizeof(int32_t) - i - 1) * NATIVE_BITS_SIZE)) & 0xFF; - } -} - -int32_t bigEndianArrToInt(const uint8_t *data, size_t len) -{ - int value = 0; - - for (size_t i = 0; i < len; ++i) { - value |= (int)(data[i] << ((sizeof(int) - 1 - i) * NATIVE_BITS_SIZE)); - } - return value; -} - -void IntTobigEndianArr(int value, uint8_t *data, size_t len) -{ - for (size_t i = 0; i < len; ++i) { - data[i] = (value >> ((sizeof(int) - i - 1) * NATIVE_BITS_SIZE)) & 0xFF; + data[i] = (value >> ((sizeof(uint32_t) - i - 1) * NATIVE_BITS_SIZE)) & 0xFF; } } diff --git a/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c b/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c index 38fda9d..413419d 100644 --- a/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c @@ -128,7 +128,7 @@ static bool GetScryptSaltFromSpec(HcfScryptData *data, HcfScryptParamsSpec *para return false; } (void)memcpy_s(data->salt, params->salt.len, params->salt.data, params->salt.len); - data->saltLen = params->salt.len; + data->saltLen = (int)params->salt.len; return true; } @@ -140,7 +140,7 @@ static bool GetScryptPasswordFromSpec(HcfScryptData *data, HcfScryptParamsSpec * return false; } (void)memcpy_s(data->password, params->passPhrase.len, params->passPhrase.data, params->passPhrase.len); - data->passwordLen = params->passPhrase.len; + data->passwordLen = (int)params->passPhrase.len; } else { data->passwordLen = 0; data->password = NULL; @@ -173,7 +173,7 @@ static HcfResult InitScryptData(OpensslScryptSpiImpl *self, HcfScryptParamsSpec data->p = params->p; data->r = params->r; data->maxBytes = params->maxMem; - data->outLen = params->output.len; + data->outLen = (int)params->output.len; self->kdfData = data; return HCF_SUCCESS; } while (0); diff --git a/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c b/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c index af635f9..ab72bfa 100644 --- a/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c +++ b/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c @@ -186,7 +186,7 @@ static HcfResult HcfDesSymmKeySpiCreate(int32_t keyLen, SymKeyImpl *symKey) EVP_CIPHER_CTX_free(ctx); symKey->keyMaterial.data = keyMaterial; - symKey->keyMaterial.len = keyLen; + symKey->keyMaterial.len = (size_t)keyLen; return HCF_SUCCESS; } -- Gitee