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/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/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);