Merged
Supplementary Use Cases for Random Number Enhancement #966
LzhjianAdd on Dec 30, 2025
Supplementary Use Cases for Random Number Enhancement #966
Merged
Merged fromLzhjian/openhitlsrandom02intoopenHiTLS/openhitlsopenhitls-0.2
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_PID | 68 | #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 | #endif | 71 | #endif |
| 72 | #ifdef HITLS_BSL_SAL_NET | 72 | #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 | ||
| 102 | int32_t SAL_ThreadCallback_Ctrl(BSL_SAL_CB_FUNC_TYPE type, void *funcCb); | 102 | int32_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_sal | 106 | * @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 ID | 111 | * @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_PID | 116 | #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 | #endif | 118 | #endif |
| 119 | 119 | ||
| 120 | #ifdef HITLS_BSL_SAL_LINUX | 120 | #ifdef HITLS_BSL_SAL_LINUX |
| @@ -26,7 +26,7 @@ | |||
| 26 | #include "bsl_sal.h" | 26 | #include "bsl_sal.h" |
| 27 | 27 | ||
| 28 | static BSL_SAL_ThreadCallback g_threadCallback = {0}; | 28 | static BSL_SAL_ThreadCallback g_threadCallback = {0}; |
| 29 | -static BSL_SAL_PiDCallback g_pidCallback = {0}; | 29 | +static BSL_SAL_PidCallback g_pidCallback = {0}; |
| 30 | 30 | ||
| 31 | int32_t BSL_SAL_ThreadLockNew(BSL_SAL_ThreadLockHandle *lock) | 31 | int32_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_PID | 142 | #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: | |||
| 349 | static inline bool DRBG_IsNeedReseed(DRBG_Ctx *ctx, bool pr) | 349 | static 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 | #endif | 368 | #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) | |||
| 1077 | EXIT: | 1077 | EXIT: |
| 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: | |||
| 183 | SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001 | 183 | SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001 |
| 184 | SDV_CRYPT_DRBG_FORK_RESEED_FUNC_TC001: | 184 | SDV_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 | + | ||
| 186 | SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001 | 237 | SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001 |
| 187 | SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001: | 238 | SDV_CRYPT_DRBG_RAND_SEED_ADIN_ERR_PARA_API_TC001: |
| 188 | 239 | ||