The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

The rand_bytes function binds to RAND_bytes in OpenSSL to generate cryptographically strong pseudo-random bytes. See the OpenSSL documentation for what this means.

rnd <- rand_bytes(10)
print(rnd)
 [1] 90 fb a3 3c ef e0 00 b7 1a a1

Bytes are 8 bit and hence can have 2^8 = 256 possible values.

as.numeric(rnd)
 [1] 144 251 163  60 239 224   0 183  26 161

Each random byte can be decomposed into 8 random bits (booleans)

x <- rand_bytes(1)
as.logical(rawToBits(x))
[1]  TRUE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE

Secure Random Numbers

rand_num is a simple (2 lines) wrapper to rand_bytes to generate random numbers (doubles) between 0 and 1.

rand_num(10)
 [1] 0.9205410 0.7308148 0.2313601 0.5938068 0.8053278 0.2574549 0.8968282
 [8] 0.1798682 0.1427893 0.3694836

To map random draws from [0,1] into a probability density, we can use a Cumulative Distribution Function. For example we can combine qnorm and rand_num to simulate rnorm:

# Secure rnorm
x <- qnorm(rand_num(1000), mean = 100, sd = 15)
hist(x)

Same for discrete distributions:

# Secure rbinom
y <- qbinom(rand_num(1000), size = 20, prob = 0.1)
hist(y, breaks = -.5:(max(y)+1))

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.