shadow/lib
Alejandro Colomar 31375d48ca Add csrand_uniform()
This API is similar to arc4random_uniform(3).  However, for an input of
0, this function is equivalent to csrand(), while arc4random_uniform(0)
returns 0.

This function will be used to reimplement csrand_interval() as a wrapper
around this one.

The current implementation of csrand_interval() doesn't produce very good
random numbers.  It has a bias.  And that comes from performing some
unnecessary floating-point calculations that overcomplicate the problem.

Looping until the random number hits within bounds is unbiased, and
truncating unwanted bits makes the overhead of the loop very small.

We could reduce loop overhead even more, by keeping unused bits of the
random number, if the width of the mask is not greater than
ULONG_WIDTH/2, however, that complicates the code considerably, and I
prefer to be a bit slower but have simple code.

BTW, Björn really deserves the copyright for csrand() (previously known
as read_random_bytes()), since he rewrote it almost from scratch last
year, and I kept most of its contents.  Since he didn't put himself in
the copyright back then, and BSD-3-Clause doesn't allow me to attribute
derived works, I won't add his name, but if he asks, he should be put in
the copyright too.

Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: Cristian Rodríguez <crrodriguez@opensuse.org>
Cc: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Cc: Björn Esser <besser82@fedoraproject.org>
Cc: Yann Droneaud <ydroneaud@opteya.com>
Cc: Joseph Myers <joseph@codesourcery.com>
Cc: Sam James <sam@gentoo.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2023-01-27 21:48:37 -06:00
..
.indent.pro
bit.h Add bit manipulation functions 2023-01-27 21:48:37 -06:00
commonio.c changing lock mechanism 2022-12-29 13:58:49 -06:00
commonio.h changing lock mechanism 2022-12-29 13:58:49 -06:00
defines.h Modernize manual memzero implementation 2023-01-25 11:07:25 +01:00
encrypt.c Merge pull request #451 from hallyn/2021-12-05/license 2022-01-02 18:38:42 -06:00
exitcodes.h Update licensing info 2021-12-23 19:36:50 -06:00
faillog.h Update licensing info 2021-12-23 19:36:50 -06:00
fields.c Use strlcpy(3) instead of its pattern 2022-12-22 18:03:39 -06:00
fputsx.c Update licensing info 2021-12-23 19:36:50 -06:00
get_gid.c Update licensing info 2021-12-23 19:36:50 -06:00
get_pid.c Update licensing info 2021-12-23 19:36:50 -06:00
get_uid.c Update licensing info 2021-12-23 19:36:50 -06:00
getdef.c Remove USE_SYSLOG preprocessor conditional, which was always defined 2022-12-22 11:44:36 +01:00
getdef.h Update licensing info 2021-12-23 19:36:50 -06:00
getlong.c Update licensing info 2021-12-23 19:36:50 -06:00
getulong.c Update licensing info 2021-12-23 19:36:50 -06:00
groupio.c Don't test for NULL before calling free(3) 2022-09-29 16:03:53 +02:00
groupio.h Update licensing info 2021-12-23 19:36:50 -06:00
groupmem.c lib: use strzero where applicable 2022-09-27 16:52:06 +02:00
gshadow_.h Update licensing info 2021-12-23 19:36:50 -06:00
gshadow.c Use strlcpy(3) instead of its pattern 2022-12-22 18:03:39 -06:00
lockpw.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
Makefile.am Provide strlcpy declaration 2023-01-25 12:31:17 +01:00
nscd.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
nscd.h
nss.c Warn if failed to read existing /etc/nsswitch.conf 2023-01-04 14:21:43 -06:00
pam_defs.h Declare constant data structure const 2023-01-25 12:31:17 +01:00
port.c Update licensing info 2021-12-23 19:36:50 -06:00
port.h Update licensing info 2021-12-23 19:36:50 -06:00
prototypes.h Add csrand_uniform() 2023-01-27 21:48:37 -06:00
pwauth.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
pwauth.h Add header guards 2022-05-24 07:49:11 -05:00
pwio.c Raise limit for passwd and shadow entry length 2022-10-14 10:41:40 +02:00
pwio.h Update licensing info 2021-12-23 19:36:50 -06:00
pwmem.c lib: use strzero where applicable 2022-09-27 16:52:06 +02:00
run_part.c Initialize local variables 2022-05-24 07:49:11 -05:00
run_part.h Add header guards 2022-05-24 07:49:11 -05:00
selinux.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
semanage.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
sgetgrent.c Don't test for NULL before calling free(3) 2022-09-29 16:03:53 +02:00
sgetpwent.c Raise limit for passwd and shadow entry length 2022-10-14 10:41:40 +02:00
sgetspent.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
sgroupio.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
sgroupio.h Update licensing info 2021-12-23 19:36:50 -06:00
shadow.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
shadowio.c Raise limit for passwd and shadow entry length 2022-10-14 10:41:40 +02:00
shadowio.h Update licensing info 2021-12-23 19:36:50 -06:00
shadowlog_internal.h Fix typos 2023-01-26 22:44:39 -06:00
shadowlog.c lib: provide default values for shadow_progname/shadow_logfd 2021-12-27 16:28:23 +00:00
shadowlog.h Drop obsolete prototype for log_dolog() 2022-08-06 11:27:56 -05:00
shadowmem.c lib: use strzero where applicable 2022-09-27 16:52:06 +02:00
spawn.c Merge pull request #451 from hallyn/2021-12-05/license 2022-01-02 18:38:42 -06:00
sssd.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00
sssd.h Flush sssd caches in addition to nscd caches 2018-09-13 14:20:02 +02:00
subordinateio.c Fix typos 2023-01-26 22:44:39 -06:00
subordinateio.h fix newusers when nss provides subids 2021-05-23 08:16:16 -05:00
tcbfuncs.c Don't test for NULL before calling free(3) 2022-09-29 16:03:53 +02:00
tcbfuncs.h
utent.c Don't redefine errno(3) 2022-12-22 11:43:29 +01:00