Merged
Supplementary Use Cases for Random Number Enhancement #966
Supplementary Use Cases for Random Number Enhancement #966
Merged
LzhjianAdd on Dec 30, 2025
Total: 6 files changed+129-12
@@ -67,7 +67,7 @@ int32_t BSL_SAL_CallBack_Ctrl(BSL_SAL_CB_FUNC_TYPE funcType, void *funcCb)
67 return SAL_ThreadCallback_Ctrl(funcType, funcCb);67 return SAL_ThreadCallback_Ctrl(funcType, funcCb);
68#ifdef HITLS_BSL_SAL_PID68#ifdef HITLS_BSL_SAL_PID
69 case BSL_SAL_PID_CB:69 case BSL_SAL_PID_CB:
70- return SAL_PiDCallback_Ctrl(funcType, funcCb);70+ return SAL_PidCallback_Ctrl(funcType, funcCb);
71#endif71#endif
72#ifdef HITLS_BSL_SAL_NET72#ifdef HITLS_BSL_SAL_NET
73 case BSL_SAL_NET_CB:73 case BSL_SAL_NET_CB:
@@ -101,7 +101,7 @@ typedef struct ThreadCallback {
101 101 
102int32_t SAL_ThreadCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb);102int32_t SAL_ThreadCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb);
103 103 
104-typedef struct PiDCallback {104+typedef struct PidCallback {
105 /**105 /**
106 * @ingroup bsl_sal106 * @ingroup bsl_sal
107 * @brief Obtain the process ID.107 * @brief Obtain the process ID.
@@ -111,10 +111,10 @@ typedef struct PiDCallback {
111 * @retval Process ID111 * @retval Process ID
112 */112 */
113 int32_t (*pfGetId)(void);113 int32_t (*pfGetId)(void);
114-} BSL_SAL_PiDCallback;114+} BSL_SAL_PidCallback;
115 115 
116#ifdef HITLS_BSL_SAL_PID116#ifdef HITLS_BSL_SAL_PID
117-int32_t SAL_PiDCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb);117+int32_t SAL_PidCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb);
118#endif118#endif
119 119 
120#ifdef HITLS_BSL_SAL_LINUX120#ifdef HITLS_BSL_SAL_LINUX
@@ -26,7 +26,7 @@
26#include "bsl_sal.h"26#include "bsl_sal.h"
27 27 
28static BSL_SAL_ThreadCallback g_threadCallback = {0};28static BSL_SAL_ThreadCallback g_threadCallback = {0};
29-static BSL_SAL_PiDCallback g_pidCallback = {0};29+static BSL_SAL_PidCallback g_pidCallback = {0};
30 30 
31int32_t BSL_SAL_ThreadLockNew(BSL_SAL_ThreadLockHandle *lock)31int32_t BSL_SAL_ThreadLockNew(BSL_SAL_ThreadLockHandle *lock)
32{32{
@@ -140,7 +140,7 @@ int32_t SAL_ThreadCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb)
140}140}
141 141 
142#ifdef HITLS_BSL_SAL_PID142#ifdef HITLS_BSL_SAL_PID
143-int32_t SAL_PiDCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb)143+int32_t SAL_PidCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb)
144{144{
145 if (type != BSL_SAL_PID_GET_ID_CB_FUNC) {145 if (type != BSL_SAL_PID_GET_ID_CB_FUNC) {
146 return BSL_SAL_ERR_BAD_PARAM;146 return BSL_SAL_ERR_BAD_PARAM;
@@ -349,7 +349,10 @@ ERR_NONCE:
349static inline bool DRBG_IsNeedReseed(DRBG_Ctx *ctx, bool pr)349static inline bool DRBG_IsNeedReseed(DRBG_Ctx *ctx, bool pr)
350{350{
351 int32_t forkId = BSL_SAL_GetPid();351 int32_t forkId = BSL_SAL_GetPid();
352- 352+ if (ctx->forkId != forkId) {
353+ ctx->forkId = forkId;
354+ return true;
355+ }
353 if (pr) {356 if (pr) {
354 return true;357 return true;
355 }358 }
@@ -363,10 +366,6 @@ static inline bool DRBG_IsNeedReseed(DRBG_Ctx *ctx, bool pr)
363 return ((time - ctx->lastReseedTime) > ctx->reseedIntervalTime) ? true : false;366 return ((time - ctx->lastReseedTime) > ctx->reseedIntervalTime) ? true : false;
364 }367 }
365#endif368#endif
366- if (ctx->forkId != forkId) {
367- ctx->forkId = forkId;
368- return true;
369- }
370 return false;369 return false;
371}370}
372 371 
@@ -1077,7 +1077,74 @@ void SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001(void)
1077EXIT:1077EXIT:
1078 CRYPT_EAL_DrbgDeinit(drbg);1078 CRYPT_EAL_DrbgDeinit(drbg);
1079 drbgDataFree(&data);1079 drbgDataFree(&data);
1080- free(output);1080+ BSL_SAL_Free(output);
1081+ return;
1082+}
1083+/* END_CASE */
1084+ 
1085+/**
1086+ * @test SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002
1087+ * @title Fork reseed behavior test with two DRBG instances.
1088+ * @precon nan
1089+ * @brief
1090+ * 1.Initialize two DRBG instances with the same seed parameters, expected result 1.
1091+ * 2.Call CRYPT_EAL_Drbgbytes for both instances, expected result 2.
1092+ * 3.Modify the forkId of one DRBG instance and call CRYPT_EAL_Drbgbytes, expected result 3.
1093+ * @expect
1094+ * 1.Both DRBG instances are initialized successfully.
1095+ * 2.The generated random numbers are identical before fork reseed.
1096+ * 3.The fork reseed is triggered and the generated random numbers are different.
1097+ */
1098+/* BEGIN_CASE */
1099+void SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002(int algId)
1100+{
1101+ uint8_t *out1 = malloc(DRBG_MAX_OUTPUT_SIZE + 1);
1102+ uint8_t *out2 = malloc(DRBG_MAX_OUTPUT_SIZE + 1);
1103+ ASSERT_TRUE(out1 != NULL && out2 != NULL);
1104+ 
1105+ CRYPT_RandSeedMethod seedMeth = {0};
1106+ CRYPT_Data data = {0};
1107+ DRBG_Vec_t seedCtx = {0};
1108+ 
1109+ void *drbg1 = NULL;
1110+ void *drbg2 = NULL;
1111+ int32_t forkId;
1112+ 
1113+ DRBG_Ctx *ctx1 = NULL;
1114+ DRBG_Ctx *ctx2 = NULL;
1115+ 
1116+ TestMemInit();
1117+ regSeedMeth(&seedMeth);
1118+ InitSeedCtx(algId, &seedCtx, &data);
1119+ 
1120+ drbg1 = CRYPT_EAL_DrbgNew(algId, &seedMeth, &seedCtx);
1121+ drbg2 = CRYPT_EAL_DrbgNew(algId, &seedMeth, &seedCtx);
1122+ ASSERT_TRUE(drbg1 != NULL && drbg2 != NULL);
1123+ 
1124+ ASSERT_EQ(CRYPT_EAL_DrbgInstantiate(drbg1, NULL, 0), CRYPT_SUCCESS);
1125+ ASSERT_EQ(CRYPT_EAL_DrbgInstantiate(drbg2, NULL, 0), CRYPT_SUCCESS);
1126+ 
1127+ ctx1 = (DRBG_Ctx *)((CRYPT_EAL_RndCtx *)drbg1)->ctx;
1128+ ctx2 = (DRBG_Ctx *)((CRYPT_EAL_RndCtx *)drbg2)->ctx;
1129+ ASSERT_TRUE(ctx1 != NULL && ctx2 != NULL);
1130+ 
1131+ ASSERT_EQ(ctx1->forkId, ctx2->forkId);
1132+ ASSERT_EQ(CRYPT_EAL_Drbgbytes(drbg1, out1, DRBG_OUTPUT_SIZE), CRYPT_SUCCESS);
1133+ ASSERT_EQ(CRYPT_EAL_Drbgbytes(drbg2, out2, DRBG_OUTPUT_SIZE), CRYPT_SUCCESS);
1134+ ASSERT_EQ(memcmp(out1, out2, DRBG_OUTPUT_SIZE), 0);
1135+ 
1136+ forkId = ++ctx2->forkId;
1137+ ASSERT_EQ(CRYPT_EAL_Drbgbytes(drbg2, out2, DRBG_OUTPUT_SIZE), CRYPT_SUCCESS);
1138+ ASSERT_NE(ctx2->forkId, forkId);
1139+ ASSERT_EQ(CRYPT_EAL_Drbgbytes(drbg1, out1, DRBG_OUTPUT_SIZE), CRYPT_SUCCESS);
1140+ ASSERT_NE(memcmp(out1, out2, DRBG_OUTPUT_SIZE), 0);
1141+ 
1142+EXIT:
1143+ CRYPT_EAL_DrbgDeinit(drbg1);
1144+ CRYPT_EAL_DrbgDeinit(drbg2);
1145+ drbgDataFree(&data);
1146+ BSL_SAL_Free(out1);
1147+ BSL_SAL_Free(out2);
1081 return;1148 return;
1082}1149}
1083/* END_CASE */1150/* END_CASE */
@@ -183,6 +183,57 @@ SDV_CRYPT_DRBG_BYTES_ERR_PARA_API_TC001:
183SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001183SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001
184SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001:184SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001:
185 185 
186+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_SHA1
187+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_SHA1
188+ 
189+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_SHA224
190+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_SHA224
191+ 
192+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_SHA256
193+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_SHA256
194+ 
195+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_SHA384
196+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_SHA384
197+ 
198+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_SHA512
199+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_SHA512
200+ 
201+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_HMAC_SHA1
202+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_HMAC_SHA1
203+ 
204+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_HMAC_SHA224
205+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_HMAC_SHA224
206+ 
207+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_HMAC_SHA256
208+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_HMAC_SHA256
209+ 
210+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_HMAC_SHA384
211+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_HMAC_SHA384
212+ 
213+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_HMAC_SHA512
214+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_HMAC_SHA512
215+ 
216+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_AES128_CTR
217+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_AES128_CTR
218+ 
219+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_AES192_CTR
220+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_AES192_CTR
221+ 
222+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_AES256_CTR
223+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_AES256_CTR
224+ 
225+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_AES128_CTR_DF
226+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_AES128_CTR_DF
227+ 
228+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_AES192_CTR_DF
229+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_AES192_CTR_DF
230+ 
231+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_AES256_CTR_DF
232+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_AES256_CTR_DF
233+ 
234+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002 CRYPT_RAND_SM4_CTR_DF
235+SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC002:CRYPT_RAND_SM4_CTR_DF
236+ 
186SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001237SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001
187SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001:238SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001:
188 239