Version bump
This commit is contained in:
@@ -366,6 +366,6 @@ int drbg_ctr_init(RAND_DRBG *drbg)
|
||||
}
|
||||
|
||||
drbg->max_request = 1 << 16;
|
||||
drbg->reseed_interval = MAX_RESEED_INTERVAL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
+56
-8
@@ -113,6 +113,12 @@ static const char ossl_pers_string[] = "OpenSSL NIST SP 800-90A DRBG";
|
||||
|
||||
static CRYPTO_ONCE rand_drbg_init = CRYPTO_ONCE_STATIC_INIT;
|
||||
|
||||
static unsigned int master_reseed_interval = MASTER_RESEED_INTERVAL;
|
||||
static unsigned int slave_reseed_interval = SLAVE_RESEED_INTERVAL;
|
||||
|
||||
static time_t master_reseed_time_interval = MASTER_RESEED_TIME_INTERVAL;
|
||||
static time_t slave_reseed_time_interval = SLAVE_RESEED_TIME_INTERVAL;
|
||||
|
||||
static RAND_DRBG *drbg_setup(RAND_DRBG *parent);
|
||||
|
||||
static RAND_DRBG *rand_drbg_new(int secure,
|
||||
@@ -175,9 +181,27 @@ static RAND_DRBG *rand_drbg_new(int secure,
|
||||
drbg->secure = secure && CRYPTO_secure_allocated(drbg);
|
||||
drbg->fork_count = rand_fork_count;
|
||||
drbg->parent = parent;
|
||||
|
||||
if (parent == NULL) {
|
||||
drbg->reseed_interval = master_reseed_interval;
|
||||
drbg->reseed_time_interval = master_reseed_time_interval;
|
||||
} else {
|
||||
drbg->reseed_interval = slave_reseed_interval;
|
||||
drbg->reseed_time_interval = slave_reseed_time_interval;
|
||||
}
|
||||
|
||||
if (RAND_DRBG_set(drbg, type, flags) == 0)
|
||||
goto err;
|
||||
|
||||
if (parent != NULL && drbg->strength > parent->strength) {
|
||||
/*
|
||||
* We currently don't support the algorithm from NIST SP 800-90C
|
||||
* 10.1.2 to use a weaker DRBG as source
|
||||
*/
|
||||
RANDerr(RAND_F_RAND_DRBG_NEW, RAND_R_PARENT_STRENGTH_TOO_WEAK);
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!RAND_DRBG_set_callbacks(drbg, rand_drbg_get_entropy,
|
||||
rand_drbg_cleanup_entropy,
|
||||
NULL, NULL))
|
||||
@@ -701,6 +725,38 @@ int RAND_DRBG_set_reseed_time_interval(RAND_DRBG *drbg, time_t interval)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set the default values for reseed (time) intervals of new DRBG instances
|
||||
*
|
||||
* The default values can be set independently for master DRBG instances
|
||||
* (without a parent) and slave DRBG instances (with parent).
|
||||
*
|
||||
* Returns 1 on success, 0 on failure.
|
||||
*/
|
||||
|
||||
int RAND_DRBG_set_reseed_defaults(
|
||||
unsigned int _master_reseed_interval,
|
||||
unsigned int _slave_reseed_interval,
|
||||
time_t _master_reseed_time_interval,
|
||||
time_t _slave_reseed_time_interval
|
||||
)
|
||||
{
|
||||
if (_master_reseed_interval > MAX_RESEED_INTERVAL
|
||||
|| _slave_reseed_interval > MAX_RESEED_INTERVAL)
|
||||
return 0;
|
||||
|
||||
if (_master_reseed_time_interval > MAX_RESEED_TIME_INTERVAL
|
||||
|| _slave_reseed_time_interval > MAX_RESEED_TIME_INTERVAL)
|
||||
return 0;
|
||||
|
||||
master_reseed_interval = _master_reseed_interval;
|
||||
slave_reseed_interval = _slave_reseed_interval;
|
||||
|
||||
master_reseed_time_interval = _master_reseed_time_interval;
|
||||
slave_reseed_time_interval = _slave_reseed_time_interval;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Locks the given drbg. Locking a drbg which does not have locking
|
||||
@@ -800,14 +856,6 @@ static RAND_DRBG *drbg_setup(RAND_DRBG *parent)
|
||||
if (rand_drbg_enable_locking(drbg) == 0)
|
||||
goto err;
|
||||
|
||||
if (parent == NULL) {
|
||||
drbg->reseed_interval = MASTER_RESEED_INTERVAL;
|
||||
drbg->reseed_time_interval = MASTER_RESEED_TIME_INTERVAL;
|
||||
} else {
|
||||
drbg->reseed_interval = SLAVE_RESEED_INTERVAL;
|
||||
drbg->reseed_time_interval = SLAVE_RESEED_TIME_INTERVAL;
|
||||
}
|
||||
|
||||
/* enable seed propagation */
|
||||
drbg->reseed_counter = 1;
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ static const ERR_STRING_DATA RAND_str_functs[] = {
|
||||
"rand_drbg_enable_locking"},
|
||||
{ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_GENERATE, 0),
|
||||
"RAND_DRBG_generate"},
|
||||
{ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_GET_ENTROPY, 0),
|
||||
"rand_drbg_get_entropy"},
|
||||
{ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_INSTANTIATE, 0),
|
||||
"RAND_DRBG_instantiate"},
|
||||
{ERR_PACK(ERR_LIB_RAND, RAND_F_RAND_DRBG_NEW, 0), "RAND_DRBG_new"},
|
||||
@@ -86,6 +88,8 @@ static const ERR_STRING_DATA RAND_str_reasons[] = {
|
||||
"no drbg implementation selected"},
|
||||
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PARENT_LOCKING_NOT_ENABLED),
|
||||
"parent locking not enabled"},
|
||||
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PARENT_STRENGTH_TOO_WEAK),
|
||||
"parent strength too weak"},
|
||||
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PERSONALISATION_STRING_TOO_LONG),
|
||||
"personalisation string too long"},
|
||||
{ERR_PACK(ERR_LIB_RAND, 0, RAND_R_PRNG_NOT_SEEDED), "PRNG not seeded"},
|
||||
|
||||
+11
-1
@@ -176,8 +176,18 @@ size_t rand_drbg_get_entropy(RAND_DRBG *drbg,
|
||||
{
|
||||
size_t ret = 0;
|
||||
size_t entropy_available = 0;
|
||||
RAND_POOL *pool = RAND_POOL_new(entropy, min_len, max_len);
|
||||
RAND_POOL *pool;
|
||||
|
||||
if (drbg->parent && drbg->strength > drbg->parent->strength) {
|
||||
/*
|
||||
* We currently don't support the algorithm from NIST SP 800-90C
|
||||
* 10.1.2 to use a weaker DRBG as source
|
||||
*/
|
||||
RANDerr(RAND_F_RAND_DRBG_GET_ENTROPY, RAND_R_PARENT_STRENGTH_TOO_WEAK);
|
||||
return 0;
|
||||
}
|
||||
|
||||
pool = RAND_POOL_new(entropy, min_len, max_len);
|
||||
if (pool == NULL)
|
||||
return 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user