diff --git a/frameworks/crypto_operation/mac.c b/frameworks/crypto_operation/mac.c index b94a30e0aa526b935c8457d3da3fbb54792c8396..e6f08997d56d7ab1c946bfbf7af7a1e06b90532c 100644 --- a/frameworks/crypto_operation/mac.c +++ b/frameworks/crypto_operation/mac.c @@ -81,8 +81,8 @@ static HcfResult Init(HcfMac *self, const HcfSymKey *key) static HcfResult Update(HcfMac *self, HcfBlob *input) { - if ((self == NULL) || (!IsBlobValid(input))) { - LOGE("The input self ptr or dataBlob is NULL!"); + if ((self == NULL) || (!IsBlobValid(input)) || (input->len > HCF_MAX_STR_LEN)) { + LOGE("The input self ptr or dataBlob is invalid!"); return HCF_INVALID_PARAMS; } if (!IsClassMatch((HcfObjectBase *)self, GetMacClass())) { diff --git a/frameworks/crypto_operation/md.c b/frameworks/crypto_operation/md.c index b61c0a9f60206840fc9cc389100d3c542da7bd18..3ea1f10cfe7d0f789aaa0071da87a4088ad7c089 100644 --- a/frameworks/crypto_operation/md.c +++ b/frameworks/crypto_operation/md.c @@ -69,8 +69,8 @@ static HcfMdSpiCreateFunc FindAbility(const char *algoName) static HcfResult Update(HcfMd *self, HcfBlob *input) { - if ((self == NULL) || (!IsBlobValid(input))) { - LOGE("The input self ptr or dataBlob is NULL!"); + if ((self == NULL) || (!IsBlobValid(input)) || (input->len > HCF_MAX_STR_LEN)) { + LOGE("The input self ptr or dataBlob is invalid!"); return HCF_INVALID_PARAMS; } if (!IsClassMatch((HcfObjectBase *)self, GetMdClass())) { diff --git a/frameworks/crypto_operation/signature.c b/frameworks/crypto_operation/signature.c index 43ae488d45bb618e4e0a69199d8d5dfa48e86e8c..5ba115677ea58f55b907a5d61628776200018570 100644 --- a/frameworks/crypto_operation/signature.c +++ b/frameworks/crypto_operation/signature.c @@ -45,16 +45,6 @@ typedef struct { char algoName[HCF_MAX_ALGO_NAME_LEN]; } HcfVerifyImpl; -typedef struct { - const char *algoType; - - uint32_t digestAlg; - - int32_t keyLen; - - int32_t padding; -} HcfEcdsaParams; - typedef struct { HCF_ALG_VALUE algo; diff --git a/frameworks/js/napi/inc/napi_utils.h b/frameworks/js/napi/inc/napi_utils.h index 2790b7b07b5441cb1f7d65e68c648f07d495db41..493b4c77b92d707af5cc9faaee6803b3041e2021 100644 --- a/frameworks/js/napi/inc/napi_utils.h +++ b/frameworks/js/napi/inc/napi_utils.h @@ -52,7 +52,6 @@ bool GetStringFromJSParams(napi_env env, napi_value arg, std::string &returnStr) bool GetInt32FromJSParams(napi_env env, napi_value arg, int32_t &returnInt); bool GetUint32FromJSParams(napi_env env, napi_value arg, uint32_t &returnInt); bool GetCallbackFromJSParams(napi_env env, napi_value arg, napi_ref *returnCb); -bool ParseArrayBuffer(napi_env env, napi_value args, uint8_t **data, size_t &size); bool GetEncodingBlobFromValue(napi_env env, napi_value object, HcfEncodingBlob **encodingBlob); bool GetCertChainFromValue(napi_env env, napi_value object, HcfCertChainData **certChainData); bool CheckArgsCount(napi_env env, size_t argc, size_t expectedCount, bool isSync); diff --git a/frameworks/js/napi/src/napi_asy_key_generator.cpp b/frameworks/js/napi/src/napi_asy_key_generator.cpp index af3eda19c333c9f51b6c6b8d6e78169ee9186f6a..cb57ad3b777aa9343ecdcc04cfc8b07fc6cdc15e 100644 --- a/frameworks/js/napi/src/napi_asy_key_generator.cpp +++ b/frameworks/js/napi/src/napi_asy_key_generator.cpp @@ -323,7 +323,7 @@ static void ConvertKeyAsyncWorkReturn(napi_env env, napi_status status, void *da napi_value instance = nullptr; if (ctx->result == HCF_SUCCESS) { NapiKeyPair *napiKeyPair = new NapiKeyPair(ctx->returnKeyPair); - napi_value instance = napiKeyPair->ConvertToJsKeyPair(env); + instance = napiKeyPair->ConvertToJsKeyPair(env); napi_wrap( env, instance, napiKeyPair, diff --git a/frameworks/js/napi/src/napi_mac.cpp b/frameworks/js/napi/src/napi_mac.cpp index 41a258180d7b78a08a712384eba418c3a6d3899b..af1b21cd0e8f77c9cc40ab97bf4cc1dbbbd03124 100644 --- a/frameworks/js/napi/src/napi_mac.cpp +++ b/frameworks/js/napi/src/napi_mac.cpp @@ -82,10 +82,8 @@ static void ReturnCallbackResult(napi_env env, MacCtx *context, napi_value resul businessError = GenerateBusinessError(env, context->errCode, context->errMsg); } napi_value params[ARGS_SIZE_TWO] = { businessError, result }; - napi_value func = nullptr; napi_get_reference_value(env, context->callback, &func); - napi_value recv = nullptr; napi_value callFuncRet = nullptr; napi_get_undefined(env, &recv); diff --git a/frameworks/js/napi/src/napi_md.cpp b/frameworks/js/napi/src/napi_md.cpp index 4c84f6d3689142f4e136b5fde6a84b0073594e87..0d44bccbc38de20d5b874030ebbc32d81083058d 100644 --- a/frameworks/js/napi/src/napi_md.cpp +++ b/frameworks/js/napi/src/napi_md.cpp @@ -73,11 +73,13 @@ static void FreeCryptoFwkCtx(napi_env env, MdCtx *context) static void ReturnCallbackResult(napi_env env, MdCtx *context, napi_value result) { - napi_value businessError = GenerateBusinessError(env, context->errCode, context->errMsg); + napi_value businessError = nullptr; + if (context->errCode != HCF_SUCCESS) { + businessError = GenerateBusinessError(env, context->errCode, context->errMsg); + } napi_value params[ARGS_SIZE_TWO] = { businessError, result }; napi_value func = nullptr; napi_get_reference_value(env, context->callback, &func); - napi_value recv = nullptr; napi_value callFuncRet = nullptr; napi_get_undefined(env, &recv); diff --git a/frameworks/js/napi/src/napi_rand.cpp b/frameworks/js/napi/src/napi_rand.cpp index aa16244c37a1379b0d349007c00446ae7cf767b0..4f411e30dd529359633221595fbf7fdf474f3f03 100644 --- a/frameworks/js/napi/src/napi_rand.cpp +++ b/frameworks/js/napi/src/napi_rand.cpp @@ -73,13 +73,13 @@ static void FreeCryptoFwkCtx(napi_env env, RandCtx *context) static void ReturnCallbackResult(napi_env env, RandCtx *context, napi_value result) { - napi_value businessError = GenerateBusinessError(env, context->errCode, context->errMsg); - + napi_value businessError = nullptr; + if (context->errCode != HCF_SUCCESS) { + businessError = GenerateBusinessError(env, context->errCode, context->errMsg); + } napi_value params[ARGS_SIZE_TWO] = { businessError, result }; - napi_value func = nullptr; napi_get_reference_value(env, context->callback, &func); - napi_value recv = nullptr; napi_value callFuncRet = nullptr; napi_get_undefined(env, &recv); diff --git a/frameworks/js/napi/src/napi_utils.cpp b/frameworks/js/napi/src/napi_utils.cpp index aae9d2ce5b2cbd8910461350f369d8f351517c8a..09eb0ad6a52df4de1f6c7fb92532201854372bd5 100644 --- a/frameworks/js/napi/src/napi_utils.cpp +++ b/frameworks/js/napi/src/napi_utils.cpp @@ -649,27 +649,6 @@ bool GetCallbackFromJSParams(napi_env env, napi_value arg, napi_ref *returnCb) return true; } -bool ParseArrayBuffer(napi_env env, napi_value args, uint8_t **data, size_t &size) -{ - napi_status status; - napi_valuetype valuetype; - napi_typeof(env, args, &valuetype); - - if (valuetype != napi_object) { - LOGE("Wrong argument type(%d). object expected.", valuetype); - return false; - } - - status = napi_get_arraybuffer_info(env, args, (void**)data, &size); - if (status != napi_ok) { - LOGE("can not get arraybuffer, error is %d", status); - (*data)[0] = -1; - return false; - } - LOGI("arraybuffer size is %zu", size); - return true; -} - static uint32_t GetJsErrValueByErrCode(int32_t errCode) { switch (errCode) { diff --git a/plugin/openssl_plugin/certificate/src/x509_crl_openssl.c b/plugin/openssl_plugin/certificate/src/x509_crl_openssl.c index ea4764dc444fa93aac58579a781e598e44d65072..9aa9ecd7fae0f3c27b954204b4caf1a4833ad921 100644 --- a/plugin/openssl_plugin/certificate/src/x509_crl_openssl.c +++ b/plugin/openssl_plugin/certificate/src/x509_crl_openssl.c @@ -549,20 +549,20 @@ static HcfResult GetSignature(HcfX509CrlSpi *self, HcfBlob *signature) LOGE("crl is null!"); return HCF_INVALID_PARAMS; } - const ASN1_BIT_STRING *Asn1Signature = NULL; - X509_CRL_get0_signature(((HcfX509CRLOpensslImpl *)self)->crl, &Asn1Signature, NULL); - if (Asn1Signature == NULL) { + const ASN1_BIT_STRING *asn1Signature = NULL; + X509_CRL_get0_signature(((HcfX509CRLOpensslImpl *)self)->crl, &asn1Signature, NULL); + if (asn1Signature == NULL) { LOGE("Get signature is null!"); HcfPrintOpensslError(); return HCF_ERR_CRYPTO_OPERATION; } - int32_t signatureLen = ASN1_STRING_length(Asn1Signature); + int32_t signatureLen = ASN1_STRING_length(asn1Signature); if (signatureLen <= 0) { LOGE("Get signature length is invalid!"); HcfPrintOpensslError(); return HCF_ERR_CRYPTO_OPERATION; } - const unsigned char *signatureStr = ASN1_STRING_get0_data(Asn1Signature); + const unsigned char *signatureStr = ASN1_STRING_get0_data(asn1Signature); if ((signatureStr == NULL) || (signatureLen > MAX_SIGNATURE_LEN)) { LOGE("ASN1 get string fail, or signature length is too long!"); HcfPrintOpensslError(); diff --git a/test/unittest/src/crypto_mac_test.cpp b/test/unittest/src/crypto_mac_test.cpp index 813d6f35df9117386c29f8af3f2f1b7e4ed2c850..4d4505031d69c8d2333f63bebfe58f8daa8fc512 100644 --- a/test/unittest/src/crypto_mac_test.cpp +++ b/test/unittest/src/crypto_mac_test.cpp @@ -48,7 +48,7 @@ static char g_testBigData[] = "VqRH5dzdeeturr5zN5vE77DtqjV7kNKbDJqk4mNqyYRTXymhj "AbuZ7SqrkxhQHu87Hxh3xHUHB8Lb3DGZ4vhnqaLnJBxFK8Ve4F2FfbgfHfQtALFDUWp6dSz8Hvdpj4CGw\r\n" "FaSb8b5hTemaQRguYAqaUwJVvZ7G2AwkFnV9PHUngmybAFxg8HMAT3K7yAiQJWWqPxdGq8jXPAqZFNkGu\r\n" "2mnJ5xfnY3z63PFk6TXU9Ga2YmHvtycXxwqMBEctQRa3zVWGVSrh3NF6jXa\r\n"; -constexpr uint32_t MAX_MAC_BLOB_LEN = 5000; +constexpr uint32_t MAX_MAC_BLOB_LEN = 1025; void CryptoMacTest::SetUpTestCase() {} void CryptoMacTest::TearDownTestCase() {} @@ -241,6 +241,35 @@ HWTEST_F(CryptoMacTest, CryptoFrameworkHmacUpdateTest003, TestSize.Level0) OH_HCF_OBJ_DESTROY(generator); } +HWTEST_F(CryptoMacTest, CryptoFrameworkHmacUpdateTest004, TestSize.Level0) +{ + int32_t ret = 0; + // create a API obj with SHA1 + HcfMac *macObj = nullptr; + ret = (int32_t)HcfMacCreate("SHA1", &macObj); + EXPECT_EQ(ret, 0); + // cteate key generator and set key text + HcfSymKeyGenerator *generator = nullptr; + ret = (int32_t)HcfSymKeyGeneratorCreate("AES128", &generator); + EXPECT_EQ(ret, 0); + // get sym key from preset keyBlob + uint8_t testKey[] = "abcdefghijklmnop"; + uint32_t testKeyLen = 16; + HcfSymKey *key = nullptr; + HcfBlob keyMaterialBlob = {.data = (uint8_t *)testKey, .len = testKeyLen}; + generator->convertSymKey(generator, &keyMaterialBlob, &key); + // define input and output data in blob form + HcfBlob inBlob= {.data = (uint8_t *)g_testBigData, .len = MAX_MAC_BLOB_LEN}; + // test api functions + ret = macObj->init(macObj, (HcfSymKey *)key); + EXPECT_EQ(ret, 0); + ret = macObj->update(macObj, &inBlob); + EXPECT_NE(ret, 0); + OH_HCF_OBJ_DESTROY(macObj); + OH_HCF_OBJ_DESTROY(key); + OH_HCF_OBJ_DESTROY(generator); +} + HWTEST_F(CryptoMacTest, CryptoFrameworkHmacDoFinalTest001, TestSize.Level0) { int32_t ret = 0; @@ -339,43 +368,6 @@ HWTEST_F(CryptoMacTest, CryptoFrameworkHmacDoFinalTest003, TestSize.Level0) OH_HCF_OBJ_DESTROY(generator); } -HWTEST_F(CryptoMacTest, CryptoFrameworkHmacDoFinalTest004, TestSize.Level0) -{ - int32_t ret = 0; - // create a SHA1 obj - HcfMac *macObj = nullptr; - ret = (int32_t)HcfMacCreate("SHA256", &macObj); - EXPECT_EQ(ret, 0); - // cteate key generator - HcfSymKeyGenerator *generator = nullptr; - ret = (int32_t)HcfSymKeyGeneratorCreate("AES128", &generator); - EXPECT_EQ(ret, 0); - // get sym key from preset keyBlob - uint8_t testKey[] = "abcdefghijklmnop"; - uint32_t testKeyLen = 16; - HcfSymKey *key = nullptr; - HcfBlob keyMaterialBlob = {.data = (uint8_t *)testKey, .len = testKeyLen}; - generator->convertSymKey(generator, &keyMaterialBlob, &key); - // set input and output buf - uint8_t outBuf[20] = {0}; - // define input and output data in blob form - HcfBlob inBlob= {.data = (uint8_t *)g_testBigData, .len = strnlen(g_testBigData, MAX_MAC_BLOB_LEN)}; - HcfBlob outBlob = {.data = (uint8_t *)outBuf, .len = 0}; - // test api functions - ret = macObj->init(macObj, (HcfSymKey *)key); - EXPECT_EQ(ret, 0); - ret = macObj->update(macObj, &inBlob); - EXPECT_EQ(ret, 0); - ret = macObj->doFinal(macObj, &outBlob); - EXPECT_EQ(ret, 0); - PrintfBlobInHex(outBlob.data, outBlob.len); - // destroy the API obj and blob data - HcfBlobDataClearAndFree(&outBlob); - OH_HCF_OBJ_DESTROY(macObj); - OH_HCF_OBJ_DESTROY(key); - OH_HCF_OBJ_DESTROY(generator); -} - HWTEST_F(CryptoMacTest, CryptoFrameworkHmacLenTest001, TestSize.Level0) { int32_t ret = 0; diff --git a/test/unittest/src/crypto_md_test.cpp b/test/unittest/src/crypto_md_test.cpp index 720b218e3792e347b0f25abe1dd5de9e4e35cbbc..64d7dde4e445f8709d8f5675a159caec9ab6d04c 100644 --- a/test/unittest/src/crypto_md_test.cpp +++ b/test/unittest/src/crypto_md_test.cpp @@ -46,7 +46,7 @@ static char g_testBigData[] = "VqRH5dzdeeturr5zN5vE77DtqjV7kNKbDJqk4mNqyYRTXymhj "AbuZ7SqrkxhQHu87Hxh3xHUHB8Lb3DGZ4vhnqaLnJBxFK8Ve4F2FfbgfHfQtALFDUWp6dSz8Hvdpj4CGw\r\n" "FaSb8b5hTemaQRguYAqaUwJVvZ7G2AwkFnV9PHUngmybAFxg8HMAT3K7yAiQJWWqPxdGq8jXPAqZFNkGu\r\n" "2mnJ5xfnY3z63PFk6TXU9Ga2YmHvtycXxwqMBEctQRa3zVWGVSrh3NF6jXa\r\n"; -constexpr uint32_t MAX_MD_BLOB_LEN = 5000; +constexpr uint32_t MAX_MD_BLOB_LEN = 1025; void CryptoMdTest::SetUpTestCase() {} void CryptoMdTest::TearDownTestCase() {} @@ -59,14 +59,6 @@ void CryptoMdTest::TearDown() // add destroy here, this will be called when test { } -static void PrintfBlobInHex(uint8_t *data, size_t dataLen) -{ - for (size_t i = 0; i < dataLen; i++) { - printf("%02hhX", data[i]); - } - printf("\n"); -} - /** * @tc.name: CryptoFrameworkMdTest.CryptoFrameworkMdCreateTest001 * @tc.desc: Verify that the creation of the SHA1 Md obj is normal. @@ -160,25 +152,22 @@ HWTEST_F(CryptoMdTest, CryptoFrameworkMdUpdateTest002, TestSize.Level0) OH_HCF_OBJ_DESTROY(mdObj); } -HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest001, TestSize.Level0) +HWTEST_F(CryptoMdTest, CryptoFrameworkMdUpdateTest003, TestSize.Level0) { int32_t ret = 0; // create a SHA1 obj HcfMd *mdObj = nullptr; ret = (int32_t)HcfMdCreate("SHA1", &mdObj); EXPECT_EQ(ret, 0); - // set input and output buf - uint8_t outBuf[20] = {0}; - HcfBlob outBlob = {.data = (uint8_t *)outBuf, .len = 0}; + // define input and output data in blob form + HcfBlob inBlob= {.data = (uint8_t *)g_testBigData, .len = MAX_MD_BLOB_LEN}; // test api functions - ret = mdObj->doFinal(mdObj, &outBlob); - EXPECT_EQ(ret, 0); - // destroy the API obj and blob data - HcfBlobDataClearAndFree(&outBlob); + ret = mdObj->update(mdObj, &inBlob); + EXPECT_NE(ret, 0); OH_HCF_OBJ_DESTROY(mdObj); } -HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest002, TestSize.Level0) +HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest001, TestSize.Level0) { int32_t ret = 0; // create a SHA1 obj @@ -186,15 +175,9 @@ HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest002, TestSize.Level0) ret = (int32_t)HcfMdCreate("SHA1", &mdObj); EXPECT_EQ(ret, 0); // set input and output buf - uint8_t testData[] = "My test data"; - uint32_t testDataLen = 12; uint8_t outBuf[20] = {0}; - // define input and output data in blob form - HcfBlob inBlob= {.data = (uint8_t *)testData, .len = testDataLen}; HcfBlob outBlob = {.data = (uint8_t *)outBuf, .len = 0}; // test api functions - ret = mdObj->update(mdObj, &inBlob); - EXPECT_EQ(ret, 0); ret = mdObj->doFinal(mdObj, &outBlob); EXPECT_EQ(ret, 0); // destroy the API obj and blob data @@ -202,24 +185,25 @@ HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest002, TestSize.Level0) OH_HCF_OBJ_DESTROY(mdObj); } -HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest003, TestSize.Level0) +HWTEST_F(CryptoMdTest, CryptoFrameworkMdDoFinalTest002, TestSize.Level0) { int32_t ret = 0; // create a SHA1 obj HcfMd *mdObj = nullptr; - ret = (int32_t)HcfMdCreate("SHA256", &mdObj); + ret = (int32_t)HcfMdCreate("SHA1", &mdObj); EXPECT_EQ(ret, 0); // set input and output buf + uint8_t testData[] = "My test data"; + uint32_t testDataLen = 12; uint8_t outBuf[20] = {0}; // define input and output data in blob form - HcfBlob inBlob= {.data = (uint8_t *)g_testBigData, .len = strnlen(g_testBigData, MAX_MD_BLOB_LEN)}; + HcfBlob inBlob= {.data = (uint8_t *)testData, .len = testDataLen}; HcfBlob outBlob = {.data = (uint8_t *)outBuf, .len = 0}; // test api functions ret = mdObj->update(mdObj, &inBlob); EXPECT_EQ(ret, 0); ret = mdObj->doFinal(mdObj, &outBlob); EXPECT_EQ(ret, 0); - PrintfBlobInHex(outBlob.data, outBlob.len); // destroy the API obj and blob data HcfBlobDataClearAndFree(&outBlob); OH_HCF_OBJ_DESTROY(mdObj);