mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-13 10:02:38 +00:00
libkern: Bring in arc4random_uniform(9) from libc
It is a useful arc4random wrapper in the kernel for much the same reasons as in userspace. Move the source to libkern (because kernel build is restricted to sys/, but userspace can include any file it likes) and build kernel and libc versions from the same source file. Copy the documentation from arc4random_uniform(3) to the section 9 page. While here, add missing arc4random_buf(9) symlink. Sponsored by: Dell EMC Isilon
This commit is contained in:
parent
16b07b25c4
commit
7deb4b1964
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=346410
@ -3,6 +3,7 @@
|
||||
|
||||
# machine-independent gen sources
|
||||
.PATH: ${LIBC_SRCTOP}/${LIBC_ARCH}/gen ${LIBC_SRCTOP}/gen
|
||||
.PATH: ${SRCTOP}/sys/libkern
|
||||
|
||||
CONFS= shells
|
||||
|
||||
|
@ -1668,6 +1668,8 @@ MLINKS+=psignal.9 gsignal.9 \
|
||||
psignal.9 tdsignal.9
|
||||
MLINKS+=random.9 arc4rand.9 \
|
||||
random.9 arc4random.9 \
|
||||
random.9 arc4random_buf.9 \
|
||||
random.9 arc4random_uniform.9 \
|
||||
random.9 is_random_seeded.9 \
|
||||
random.9 read_random.9 \
|
||||
random.9 read_random_uio.9 \
|
||||
|
@ -26,7 +26,7 @@
|
||||
.\"
|
||||
.\" $FreeBSD$
|
||||
.\" "
|
||||
.Dd April 16, 2019
|
||||
.Dd April 19, 2019
|
||||
.Dt RANDOM 9
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -45,6 +45,8 @@
|
||||
.Fn arc4random "void"
|
||||
.Ft void
|
||||
.Fn arc4random_buf "void *ptr" "size_t len"
|
||||
.Ft uint32_t
|
||||
.Fn arc4random_uniform "uint32_t upper_bound"
|
||||
.Ft void
|
||||
.Fn arc4rand "void *ptr" "u_int length" "int reseed"
|
||||
.Pp
|
||||
@ -80,6 +82,15 @@ with
|
||||
.Fa len
|
||||
bytes of random data.
|
||||
.Pp
|
||||
.Fn arc4random_uniform
|
||||
will return a single 32-bit value, uniformly distributed but less than
|
||||
.Fa upper_bound .
|
||||
This is recommended over constructions like
|
||||
.Dq Li arc4random() % upper_bound
|
||||
as it avoids "modulo bias" when the upper bound is not a power of two.
|
||||
In the worst case, this function may consume multiple iterations
|
||||
to ensure uniformity.
|
||||
.Pp
|
||||
The
|
||||
.Fn arc4rand
|
||||
CSPRNG
|
||||
|
@ -3985,6 +3985,7 @@ kgssapi/gsstest.c optional kgssapi_debug
|
||||
# the file should be moved to conf/files.<arch> from here.
|
||||
#
|
||||
libkern/arc4random.c standard
|
||||
libkern/arc4random_uniform.c standard
|
||||
crypto/chacha20/chacha.c standard
|
||||
libkern/asprintf.c standard
|
||||
libkern/bcd.c standard
|
||||
|
@ -19,7 +19,11 @@
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#ifdef _KERNEL
|
||||
#include <sys/libkern.h>
|
||||
#else
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Calculate a uniformly distributed random number less than upper_bound
|
@ -128,6 +128,7 @@ struct malloc_type;
|
||||
uint32_t arc4random(void);
|
||||
void arc4random_buf(void *, size_t);
|
||||
void arc4rand(void *, u_int, int);
|
||||
uint32_t arc4random_uniform(uint32_t);
|
||||
int timingsafe_bcmp(const void *, const void *, size_t);
|
||||
void *bsearch(const void *, const void *, size_t,
|
||||
size_t, int (*)(const void *, const void *));
|
||||
|
Loading…
Reference in New Issue
Block a user