开放SSL

密码学和 SSL/TLS 工具包

EVP_RAND-SEED-SRC

名称

EVP_RAND-SEED-SRC - 基于随机种子源的 EVP_RAND 实现

描述

通过 EVP_RAND API 支持确定性随机数生成器的种子设置。

在 OpenSSL 配置构建时,使用 --with-rand-seed= 选项指定使用的种子源。默认情况下,使用操作系统随机数源。

标识

"SEED-SRC" 是此实现的名称;它可以与 EVP_RAND_fetch() 函数一起使用。

支持的参数

支持的参数为

"state" (OSSL_RAND_PARAM_STATE) <整数>
"strength" (OSSL_RAND_PARAM_STRENGTH) <无符号整数>
"max_request" (OSSL_RAND_PARAM_MAX_REQUEST) <无符号整数>

这些参数的工作方式如 "EVP_RAND(3) 中的 PARAMETERS" 中所述。

注意

可以通过调用以下方法获取种子源的上下文

EVP_RAND *rand = EVP_RAND_fetch(NULL, "SEED-SRC", NULL);
EVP_RAND_CTX *rctx = EVP_RAND_CTX_new(rand, NULL);

示例

EVP_RAND *rand;
EVP_RAND_CTX *seed, *rctx;
unsigned char bytes[100];
OSSL_PARAM params[2], *p = params;
unsigned int strength = 128;

/* Create and instantiate a seed source */
rand = EVP_RAND_fetch(NULL, "SEED-SRC", NULL);
seed = EVP_RAND_CTX_new(rand, NULL);
EVP_RAND_instantiate(seed, strength, 0, NULL, 0, NULL);
EVP_RAND_free(rand);

/* Feed this into a DRBG */
rand = EVP_RAND_fetch(NULL, "CTR-DRBG", NULL);
rctx = EVP_RAND_CTX_new(rand, seed);
EVP_RAND_free(rand);

/* Configure the DRBG */
*p++ = OSSL_PARAM_construct_utf8_string(OSSL_DRBG_PARAM_CIPHER,
                                        SN_aes_256_ctr, 0);
*p = OSSL_PARAM_construct_end();
EVP_RAND_instantiate(rctx, strength, 0, NULL, 0, params);

EVP_RAND_generate(rctx, bytes, sizeof(bytes), strength, 0, NULL, 0);

EVP_RAND_CTX_free(rctx);
EVP_RAND_CTX_free(seed);

参见

EVP_RAND(3), "EVP_RAND(3) 中的 PARAMETERS"

版权所有 2020-2021 OpenSSL 项目作者。保留所有权利。

根据 Apache 许可证 2.0(“许可证”)许可。除非符合许可证,否则您不得使用此文件。您可以在源代码发行版中的 LICENSE 文件中或在 https://www.openssl.org/source/license.html 中获取副本。