diff --git a/frameworks/rand/rand.c b/frameworks/rand/rand.c index 36ca734e721b01736b753a4b0c8651f672080e38..b4a1d97bdf5f49c7c9960cf3780b1b575e8ed5ca 100644 --- a/frameworks/rand/rand.c +++ b/frameworks/rand/rand.c @@ -60,7 +60,7 @@ static HcfRandSpiCreateFunc FindAbility(const char *algoName) static HcfResult GenerateRandom(HcfRand *self, int32_t numBytes, HcfBlob *random) { - if ((self == NULL) || (numBytes <= 0) || (random == NULL)) { + if ((self == NULL) || (numBytes <= 0) || (numBytes > HCF_MAX_BUFFER_LEN) || (random == NULL)) { LOGE("Invalid params!"); return HCF_INVALID_PARAMS; } diff --git a/test/unittest/src/crypto_rand_test.cpp b/test/unittest/src/crypto_rand_test.cpp index 53cc0d28cb75774838bfc61401e49a8b795a8cda..a7fae070e552b4dc4881f14e6bd3abaa9caea5e8 100644 --- a/test/unittest/src/crypto_rand_test.cpp +++ b/test/unittest/src/crypto_rand_test.cpp @@ -96,8 +96,8 @@ HWTEST_F(CryptoFrameworkRandTest, CryptoFrameworkRandGenerateTest003, TestSize.L ret = (int)HcfRandCreate(&randObj); EXPECT_EQ(ret, 0); // preset params - int32_t randomLen = 1000; - uint8_t randomBuf[1000] = {0}; + int32_t randomLen = 8192; + uint8_t randomBuf[8192] = {0}; // define randomBlob and seedBlob struct HcfBlob randomBlob = {.data = (uint8_t *)randomBuf, .len = 0}; // test generate random @@ -108,6 +108,25 @@ HWTEST_F(CryptoFrameworkRandTest, CryptoFrameworkRandGenerateTest003, TestSize.L OH_HCF_ObjDestroy(randObj); } +HWTEST_F(CryptoFrameworkRandTest, CryptoFrameworkRandGenerateTest004, TestSize.Level0) +{ + int32_t ret = 0; + // create a rand obj + HcfRand *randObj = nullptr; + ret = (int)HcfRandCreate(&randObj); + EXPECT_EQ(ret, 0); + // preset params + int32_t randomLen = 8193; + uint8_t randomBuf[8193] = {0}; + // define randomBlob and seedBlob + struct HcfBlob randomBlob = {.data = (uint8_t *)randomBuf, .len = 0}; + // test generate random + ret = randObj->generateRandom(randObj, randomLen, &randomBlob); + EXPECT_NE(ret, 0); + // destroy the API obj and blob data + OH_HCF_ObjDestroy(randObj); +} + HWTEST_F(CryptoFrameworkRandTest, CryptoFrameworkSetSeedTest001, TestSize.Level0) { int32_t ret = 0;