[m-rev.] for post-commit review: add an arc4random() based system RNG implementation

Peter Wang novalazy at gmail.com
Tue Feb 2 15:14:10 AEDT 2021


On Tue, 02 Feb 2021 00:51:58 +1100 Julien Fischer <jfischer at opturion.com> wrote:
> 
> I assume no-one wants to run Mercury on old (circa 2014) versions of
> NetBSD or OpenBSD.  The macOS stuff is a little ugly, but it will have
> to be that way until we drop support for 10.{9,10,11}.
> 
> ------------------------------------------
> 
> Add an arc4random() based system RNG implementation.
> 
> library/random.system_rng.m:
>      As above.
> 
>      Use the arc4random() based implementation on FreeBSD >= 12.0
>      and macOS >= 10.12, falling back to the urandom approach on earlier
>      versions.
> 
>      Always use the arc4random() approach on NetBSD and OpenBSD,
>      both of which have used ChaCha20 in their implementation
>      of arc4random() since 2014.

> @@ -142,6 +152,23 @@
> 
>   #if defined(__linux__) || defined(MR_SOLARIS) || defined(_AIX)
>       #define ML_SYSRAND_IMPL_URANDOM
> +#elif defined(__OpenBSD__) || defined(__NetBSD__)
> +    #define ML_SYSRAND_IMPL_ARC4RANDOM
> +#elif __FreeBSD__ >= 12
> +    // arc4random() on FreeBSD used RC4 until version 12.
> +    #define ML_SYSRAND_IMPL_ARC4RANDOM
> +#elif defined(__FreeBSD__)
> +    #define ML_SYSRAND_IMPL_URANDOM
> +#elif defined(MR_MAC_OSX)
> +   // arc4random() on macOS used RC4 until version 10.12.
> +   // XXX this will be unnecessary when we stop supporting versions
> +   // of macOS before 10.12.
> +   #if defined(MAC_OS_X_VERSION_10_12) && \
> +        MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_12
> +      #define ML_SYSRAND_IMPL_ARC4RANDOM

You might want to escape the backslash there.

Otherwise it looks fine.

Peter



More information about the reviews mailing list