Lines Matching refs:pool

52 size_t rand_acquire_entropy_from_tsc(RAND_POOL *pool)  in rand_acquire_entropy_from_tsc()  argument
60 rand_pool_add(pool, &c, 1, 4); in rand_acquire_entropy_from_tsc()
63 return rand_pool_entropy_available(pool); in rand_acquire_entropy_from_tsc()
85 size_t rand_acquire_entropy_from_cpu(RAND_POOL *pool) in rand_acquire_entropy_from_cpu() argument
90 bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/); in rand_acquire_entropy_from_cpu()
92 buffer = rand_pool_add_begin(pool, bytes_needed); in rand_acquire_entropy_from_cpu()
99 rand_pool_add_end(pool, bytes_needed, 8 * bytes_needed); in rand_acquire_entropy_from_cpu()
104 rand_pool_add_end(pool, bytes_needed, 8 * bytes_needed); in rand_acquire_entropy_from_cpu()
107 rand_pool_add_end(pool, 0, 0); in rand_acquire_entropy_from_cpu()
112 return rand_pool_entropy_available(pool); in rand_acquire_entropy_from_cpu()
136 RAND_POOL *pool; in rand_drbg_get_entropy() local
148 pool = drbg->seed_pool; in rand_drbg_get_entropy()
149 pool->entropy_requested = entropy; in rand_drbg_get_entropy()
151 pool = rand_pool_new(entropy, drbg->secure, min_len, max_len); in rand_drbg_get_entropy()
152 if (pool == NULL) in rand_drbg_get_entropy()
157 size_t bytes_needed = rand_pool_bytes_needed(pool, 1 /*entropy_factor*/); in rand_drbg_get_entropy()
158 unsigned char *buffer = rand_pool_add_begin(pool, bytes_needed); in rand_drbg_get_entropy()
179 rand_pool_add_end(pool, bytes, 8 * bytes); in rand_drbg_get_entropy()
180 entropy_available = rand_pool_entropy_available(pool); in rand_drbg_get_entropy()
196 entropy_available = rand_pool_acquire_entropy(pool); in rand_drbg_get_entropy()
200 ret = rand_pool_length(pool); in rand_drbg_get_entropy()
201 *pout = rand_pool_detach(pool); in rand_drbg_get_entropy()
206 rand_pool_free(pool); in rand_drbg_get_entropy()
235 RAND_POOL *pool; in rand_drbg_get_nonce() local
243 pool = rand_pool_new(0, 0, min_len, max_len); in rand_drbg_get_nonce()
244 if (pool == NULL) in rand_drbg_get_nonce()
247 if (rand_pool_add_nonce_data(pool) == 0) in rand_drbg_get_nonce()
253 if (rand_pool_add(pool, (unsigned char *)&data, sizeof(data), 0) == 0) in rand_drbg_get_nonce()
256 ret = rand_pool_length(pool); in rand_drbg_get_nonce()
257 *pout = rand_pool_detach(pool); in rand_drbg_get_nonce()
260 rand_pool_free(pool); in rand_drbg_get_nonce()
285 size_t rand_drbg_get_additional_data(RAND_POOL *pool, unsigned char **pout) in rand_drbg_get_additional_data() argument
289 if (rand_pool_add_additional_data(pool) == 0) in rand_drbg_get_additional_data()
292 ret = rand_pool_length(pool); in rand_drbg_get_additional_data()
293 *pout = rand_pool_detach(pool); in rand_drbg_get_additional_data()
299 void rand_drbg_cleanup_additional_data(RAND_POOL *pool, unsigned char *out) in rand_drbg_cleanup_additional_data() argument
301 rand_pool_reattach(pool, out); in rand_drbg_cleanup_additional_data()
383 RAND_POOL *pool = NULL; in RAND_poll() local
405 pool = rand_pool_new(RAND_DRBG_STRENGTH, 1, in RAND_poll()
408 if (pool == NULL) in RAND_poll()
411 if (rand_pool_acquire_entropy(pool) == 0) in RAND_poll()
415 || meth->add(rand_pool_buffer(pool), in RAND_poll()
416 rand_pool_length(pool), in RAND_poll()
417 (rand_pool_entropy(pool) / 8.0)) == 0) in RAND_poll()
424 rand_pool_free(pool); in RAND_poll()
435 RAND_POOL *pool; in rand_pool_new() local
441 pool = OPENSSL_zalloc(sizeof(*pool)); in rand_pool_new()
442 if (pool == NULL) { in rand_pool_new()
447 pool->min_len = min_len; in rand_pool_new()
448 pool->max_len = (max_len > RAND_POOL_MAX_LENGTH) ? in rand_pool_new()
450 pool->alloc_len = min_len < min_alloc_size ? min_alloc_size : min_len; in rand_pool_new()
451 if (pool->alloc_len > pool->max_len) in rand_pool_new()
452 pool->alloc_len = pool->max_len; in rand_pool_new()
455 pool->buffer = OPENSSL_secure_zalloc(pool->alloc_len); in rand_pool_new()
457 pool->buffer = OPENSSL_zalloc(pool->alloc_len); in rand_pool_new()
459 if (pool->buffer == NULL) { in rand_pool_new()
464 pool->entropy_requested = entropy_requested; in rand_pool_new()
465 pool->secure = secure; in rand_pool_new()
467 return pool; in rand_pool_new()
470 OPENSSL_free(pool); in rand_pool_new()
483 RAND_POOL *pool = OPENSSL_zalloc(sizeof(*pool)); in rand_pool_attach() local
485 if (pool == NULL) { in rand_pool_attach()
495 pool->buffer = (unsigned char *) buffer; in rand_pool_attach()
496 pool->len = len; in rand_pool_attach()
498 pool->attached = 1; in rand_pool_attach()
500 pool->min_len = pool->max_len = pool->alloc_len = pool->len; in rand_pool_attach()
501 pool->entropy = entropy; in rand_pool_attach()
503 return pool; in rand_pool_attach()
509 void rand_pool_free(RAND_POOL *pool) in rand_pool_free() argument
511 if (pool == NULL) in rand_pool_free()
520 if (!pool->attached) { in rand_pool_free()
521 if (pool->secure) in rand_pool_free()
522 OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len); in rand_pool_free()
524 OPENSSL_clear_free(pool->buffer, pool->alloc_len); in rand_pool_free()
527 OPENSSL_free(pool); in rand_pool_free()
533 const unsigned char *rand_pool_buffer(RAND_POOL *pool) in rand_pool_buffer() argument
535 return pool->buffer; in rand_pool_buffer()
541 size_t rand_pool_entropy(RAND_POOL *pool) in rand_pool_entropy() argument
543 return pool->entropy; in rand_pool_entropy()
549 size_t rand_pool_length(RAND_POOL *pool) in rand_pool_length() argument
551 return pool->len; in rand_pool_length()
560 unsigned char *rand_pool_detach(RAND_POOL *pool) in rand_pool_detach() argument
562 unsigned char *ret = pool->buffer; in rand_pool_detach()
563 pool->buffer = NULL; in rand_pool_detach()
564 pool->entropy = 0; in rand_pool_detach()
572 void rand_pool_reattach(RAND_POOL *pool, unsigned char *buffer) in rand_pool_reattach() argument
574 pool->buffer = buffer; in rand_pool_reattach()
575 OPENSSL_cleanse(pool->buffer, pool->len); in rand_pool_reattach()
576 pool->len = 0; in rand_pool_reattach()
595 size_t rand_pool_entropy_available(RAND_POOL *pool) in rand_pool_entropy_available() argument
597 if (pool->entropy < pool->entropy_requested) in rand_pool_entropy_available()
600 if (pool->len < pool->min_len) in rand_pool_entropy_available()
603 return pool->entropy; in rand_pool_entropy_available()
611 size_t rand_pool_entropy_needed(RAND_POOL *pool) in rand_pool_entropy_needed() argument
613 if (pool->entropy < pool->entropy_requested) in rand_pool_entropy_needed()
614 return pool->entropy_requested - pool->entropy; in rand_pool_entropy_needed()
620 static int rand_pool_grow(RAND_POOL *pool, size_t len) in rand_pool_grow() argument
622 if (len > pool->alloc_len - pool->len) { in rand_pool_grow()
624 const size_t limit = pool->max_len / 2; in rand_pool_grow()
625 size_t newlen = pool->alloc_len; in rand_pool_grow()
627 if (pool->attached || len > pool->max_len - pool->len) { in rand_pool_grow()
633 newlen = newlen < limit ? newlen * 2 : pool->max_len; in rand_pool_grow()
634 while (len > newlen - pool->len); in rand_pool_grow()
636 if (pool->secure) in rand_pool_grow()
644 memcpy(p, pool->buffer, pool->len); in rand_pool_grow()
645 if (pool->secure) in rand_pool_grow()
646 OPENSSL_secure_clear_free(pool->buffer, pool->alloc_len); in rand_pool_grow()
648 OPENSSL_clear_free(pool->buffer, pool->alloc_len); in rand_pool_grow()
649 pool->buffer = p; in rand_pool_grow()
650 pool->alloc_len = newlen; in rand_pool_grow()
661 size_t rand_pool_bytes_needed(RAND_POOL *pool, unsigned int entropy_factor) in rand_pool_bytes_needed() argument
664 size_t entropy_needed = rand_pool_entropy_needed(pool); in rand_pool_bytes_needed()
673 if (bytes_needed > pool->max_len - pool->len) { in rand_pool_bytes_needed()
679 if (pool->len < pool->min_len && in rand_pool_bytes_needed()
680 bytes_needed < pool->min_len - pool->len) in rand_pool_bytes_needed()
682 bytes_needed = pool->min_len - pool->len; in rand_pool_bytes_needed()
696 if (!rand_pool_grow(pool, bytes_needed)) { in rand_pool_bytes_needed()
698 pool->max_len = pool->len = 0; in rand_pool_bytes_needed()
706 size_t rand_pool_bytes_remaining(RAND_POOL *pool) in rand_pool_bytes_remaining() argument
708 return pool->max_len - pool->len; in rand_pool_bytes_remaining()
720 int rand_pool_add(RAND_POOL *pool, in rand_pool_add() argument
723 if (len > pool->max_len - pool->len) { in rand_pool_add()
728 if (pool->buffer == NULL) { in rand_pool_add()
742 if (pool->alloc_len > pool->len && pool->buffer + pool->len == buffer) { in rand_pool_add()
753 if (!rand_pool_grow(pool, len)) in rand_pool_add()
755 memcpy(pool->buffer + pool->len, buffer, len); in rand_pool_add()
756 pool->len += len; in rand_pool_add()
757 pool->entropy += entropy; in rand_pool_add()
775 unsigned char *rand_pool_add_begin(RAND_POOL *pool, size_t len) in rand_pool_add_begin() argument
780 if (len > pool->max_len - pool->len) { in rand_pool_add_begin()
785 if (pool->buffer == NULL) { in rand_pool_add_begin()
799 if (!rand_pool_grow(pool, len)) in rand_pool_add_begin()
802 return pool->buffer + pool->len; in rand_pool_add_begin()
814 int rand_pool_add_end(RAND_POOL *pool, size_t len, size_t entropy) in rand_pool_add_end() argument
816 if (len > pool->alloc_len - pool->len) { in rand_pool_add_end()
822 pool->len += len; in rand_pool_add_end()
823 pool->entropy += entropy; in rand_pool_add_end()