19#include "hitls_build.h"
20#ifdef HITLS_CRYPTO_DRBG
24#include "crypt_types.h"
25#include "crypt_local_types.h"
26#ifdef HITLS_BSL_PARAMS
27#include "bsl_params.h"
38typedef struct DrbgCtx DRBG_Ctx;
40#define DRBG_MAX_LEN (0x7ffffff0)
41#define DRBG_MAX_REQUEST (1 << 16)
43#ifndef DRBG_MAX_RESEED_INTERVAL
44#define DRBG_MAX_RESEED_INTERVAL (10000)
48# define DRBG_RESEED_INTERVAL (1 << 8)
49# define DRBG_TIME_INTERVAL (60 * 60)
51#ifndef DRBG_MAX_REQUEST_SM3
52#define DRBG_MAX_REQUEST_SM3 (1 << 5)
55#ifndef DRBG_MAX_REQUEST_SM4
56#define DRBG_MAX_REQUEST_SM4 (1 << 4)
59#ifndef DRBG_RESEED_INTERVAL_GM1
60#define DRBG_RESEED_INTERVAL_GM1 (1 << 20)
63#ifndef DRBG_RESEED_TIME_GM1
64#define DRBG_RESEED_TIME_GM1 (600)
67#ifndef DRBG_RESEED_INTERVAL_GM2
68#define DRBG_RESEED_INTERVAL_GM2 (1 << 10)
71#ifndef DRBG_RESEED_TIME_GM2
72#define DRBG_RESEED_TIME_GM2 (60)
75#ifndef HITLS_CRYPTO_DRBG_GM_LEVEL
76#define HITLS_CRYPTO_DRBG_GM_LEVEL 2
79#ifndef HITLS_CRYPTO_RESEED_INTERVAL_GM
80#if HITLS_CRYPTO_DRBG_GM_LEVEL == 1
81#define HITLS_CRYPTO_RESEED_INTERVAL_GM DRBG_RESEED_INTERVAL_GM1
83#define HITLS_CRYPTO_RESEED_INTERVAL_GM DRBG_RESEED_INTERVAL_GM2
87#ifdef HITLS_CRYPTO_ENTROPY
88 #ifndef HITLS_SEED_DRBG_INIT_RAND_ALG
89 #ifdef HITLS_CRYPTO_AES
90 #define HITLS_SEED_DRBG_INIT_RAND_ALG CRYPT_RAND_AES256_CTR
92 #error "HITLS_SEED_DRBG_INIT_RAND_ALG configuration error."
97#ifndef HITLS_CRYPTO_DRBG_RESEED_TIME_GM
98#if HITLS_CRYPTO_DRBG_GM_LEVEL == 1
99#define HITLS_CRYPTO_DRBG_RESEED_TIME_GM DRBG_RESEED_TIME_GM1
101#define HITLS_CRYPTO_DRBG_RESEED_TIME_GM DRBG_RESEED_TIME_GM2
105#define DRBG_HASH_MAX_MDSIZE (64)
126DRBG_Ctx *DRBG_New(
void *libCtx, int32_t algId,
CRYPT_RandSeedMethod *seedMethod,
void *seedCtx);
128#ifdef HITLS_BSL_PARAMS
141DRBG_Ctx *DRBG_NewEx(
void *libCtx, int32_t algId, BSL_Param *param);
153void DRBG_Free(DRBG_Ctx *ctx);
171int32_t DRBG_Instantiate(DRBG_Ctx *ctx,
const uint8_t *person, uint32_t persLen);
189int32_t DRBG_Reseed(DRBG_Ctx *ctx,
const uint8_t *adin, uint32_t adinLen);
210int32_t DRBG_Generate(DRBG_Ctx *ctx,
211 uint8_t *out, uint32_t outLen,
212 const uint8_t *adin, uint32_t adinLen,
bool pr);
232int32_t DRBG_GenerateBytes(DRBG_Ctx *ctx, uint8_t *out, uint32_t outLen,
233 const uint8_t *adin, uint32_t adinLen);
245int32_t DRBG_Uninstantiate(DRBG_Ctx *ctx);
258int32_t DRBG_Ctrl(DRBG_Ctx *ctx, int32_t opt,
void *val, uint32_t len);
CRYPT_RAND_AlgId
定义 crypt_algid.h:41