Lines Matching defs:prng
314 crypto_prng_seed(struct crypto_prng *prng, const void *seed)
317 (void)memcpy(prng->state, seed, crypto_prng_SEEDBYTES);
321 crypto_prng_buf(struct crypto_prng *prng, void *buf, size_t n)
327 __CTASSERT(sizeof prng->state + crypto_prng_MAXOUTPUTBYTES
330 crypto_core(output, nonce, prng->state, crypto_core_constant32);
331 (void)memcpy(prng->state, output, sizeof prng->state);
332 (void)memcpy(buf, output + sizeof prng->state, n);
462 arc4random_prng_addrandom(struct arc4random_prng *prng, const void *data,
475 crypto_prng_buf(&prng->arc4_prng, buf, sizeof buf);
490 /* reseed(SHA256(prng() || sysctl(KERN_ARND) || data)) */
491 crypto_prng_seed(&prng->arc4_prng, buf);
493 prng->arc4_epoch = epoch;
500 struct arc4random_prng *prng;
501 const size_t size = roundup(sizeof(*prng), sysconf(_SC_PAGESIZE));
503 prng = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1,
505 if (prng == MAP_FAILED)
507 if (minherit(prng, size, MAP_INHERIT_ZERO) == -1)
510 return prng;
512 fail1: (void)munmap(prng, size);
519 arc4random_prng_destroy(struct arc4random_prng *prng)
521 const size_t size = roundup(sizeof(*prng), sysconf(_SC_PAGESIZE));
523 (void)explicit_memset(prng, 0, sizeof(*prng));
524 (void)munmap(prng, size);
542 (void)explicit_memset(&arc4random_global.prng, 0,
543 sizeof arc4random_global.prng);
564 struct arc4random_prng *const prng = p;
566 arc4random_prng_destroy(prng);
595 struct arc4random_prng *prng = NULL;
603 prng = thr_getspecific(arc4random_global.thread_key);
604 if (__predict_false(prng == NULL)) {
605 prng = arc4random_prng_create();
606 thr_setspecific(arc4random_global.thread_key, prng);
611 if (__predict_false(prng == NULL)) {
613 prng = &arc4random_global.prng;
617 if (__predict_false(prng->arc4_epoch != entropy_epoch()))
618 arc4random_prng_addrandom(prng, NULL, 0);
620 return prng;
624 arc4random_prng_put(struct arc4random_prng *prng)
628 if (__predict_false(prng == &arc4random_global.prng))
637 struct arc4random_prng *prng;
640 prng = arc4random_prng_get();
641 crypto_prng_buf(&prng->arc4_prng, &v, sizeof v);
642 arc4random_prng_put(prng);
650 struct arc4random_prng *prng;
653 prng = arc4random_prng_get();
654 crypto_prng_buf(&prng->arc4_prng, buf, len);
655 arc4random_prng_put(prng);
659 prng = arc4random_prng_get();
660 crypto_prng_buf(&prng->arc4_prng, seed, sizeof seed);
661 arc4random_prng_put(prng);
671 struct arc4random_prng *prng;
691 prng = arc4random_prng_get();
692 do crypto_prng_buf(&prng->arc4_prng, &r, sizeof r);
694 arc4random_prng_put(prng);
702 struct arc4random_prng *prng;
704 prng = arc4random_prng_get();
705 arc4random_prng_addrandom(prng, NULL, 0);
706 arc4random_prng_put(prng);
716 struct arc4random_prng *prng;
720 prng = arc4random_prng_get();
721 arc4random_prng_addrandom(prng, data, datalen);
722 arc4random_prng_put(prng);
806 struct arc4random_prng *prng = NULL;
808 prng = thr_getspecific(arc4random_global.thread_key);
810 if (prng == NULL)
811 prng = &arc4random_global.prng;
812 _exit(prng->arc4_epoch != 0);