pool->entropy_requested = entropy;
} else {
pool = rand_pool_new(entropy, min_len, max_len);
+ if (pool == NULL)
+ return 0;
}
if (drbg->parent) {
prediction_resistance,
NULL, 0) != 0)
bytes = bytes_needed;
+ drbg->reseed_next_counter
+ = tsan_load(&drbg->parent->reseed_prop_counter);
rand_drbg_unlock(drbg->parent);
rand_pool_add_end(pool, bytes, 8 * bytes);
}
err:
- /* we need to reset drbg->pool in the error case */
- if (ret == 0 && drbg->pool != NULL)
- drbg->pool = NULL;
-
- rand_pool_free(pool);
+ if (drbg->pool == NULL)
+ rand_pool_free(pool);
return ret;
}
{
if (drbg->pool == NULL)
OPENSSL_secure_clear_free(out, outlen);
- else
- drbg->pool = NULL;
}
{
unsigned char *ret = pool->buffer;
pool->buffer = NULL;
+ pool->len = 0;
+ pool->entropy = 0;
return ret;
}