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] b7 c6 a5 92 15 ba 15 4b bd 32

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

as.numeric(rnd)
 [1] 183 198 165 146  21 186  21  75 189  50

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

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

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.0004230133 0.8368973372 0.1862599679 0.5951640988 0.2668045581
 [6] 0.7206053790 0.3472972546 0.7298079467 0.6882157361 0.1263659289

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.