OpenSSL::Random
module OpenSSL::Random
Public Class Methods
Same as ::egd_bytes but queries 255 bytes by default.
static VALUE ossl_rand_egd(VALUE self, VALUE filename) { SafeStringValue(filename); if(!RAND_egd(RSTRING_PTR(filename))) { ossl_raise(eRandomError, NULL); } return Qtrue; }
Queries the entropy gathering daemon EGD on socket path given by filename
.
Fetches length
number of bytes and uses ::add to seed the OpenSSL built-in PRNG.
static VALUE ossl_rand_egd_bytes(VALUE self, VALUE filename, VALUE len) { int n = NUM2INT(len); SafeStringValue(filename); if (!RAND_egd_bytes(RSTRING_PTR(filename), n)) { ossl_raise(eRandomError, NULL); } return Qtrue; }
Reads bytes from filename
and adds them to the PRNG.
static VALUE ossl_rand_load_file(VALUE self, VALUE filename) { SafeStringValue(filename); if(!RAND_load_file(RSTRING_PTR(filename), -1)) { ossl_raise(eRandomError, NULL); } return Qtrue; }
Generates string
with length
number of pseudo-random bytes.
Pseudo-random byte sequences generated by ::pseudo_bytes will be unique if they are of sufficient length, but are not necessarily unpredictable.
Example: OpenSSL::Random.pseudo_bytes(12) => "..."
static VALUE ossl_rand_pseudo_bytes(VALUE self, VALUE len) { VALUE str; int n = NUM2INT(len); str = rb_str_new(0, n); if (!RAND_pseudo_bytes((unsigned char *)RSTRING_PTR(str), n)) { ossl_raise(eRandomError, NULL); } return str; }
Mixes the bytes from str
into the Pseudo Random Number Generator(PRNG) state-
Thus, if the data from str
are unpredictable to an adversary, this increases the uncertainty about the state and makes the PRNG output less predictable-
The entropy
argument is (the lower bound of) an estimate of how much randomness is contained in str
, measured in bytes-
Example: pid = $$ now = Time-now ary = [now-to_i, now-nsec, 1000, pid] OpenSSL::Random-add(ary-join(.html?lang=en"").to_s, 0.0) OpenSSL::Random.seed(ary.join("").to_s)
static VALUE ossl_rand_add(VALUE self, VALUE str, VALUE entropy) { StringValue(str); RAND_add(RSTRING_PTR(str), RSTRING_LENINT(str), NUM2DBL(entropy)); return self; }
Generates string
with length
number of cryptographically strong pseudo-random bytes.
Example: OpenSSL::Random.random_bytes(12) => "..."
static VALUE ossl_rand_bytes(VALUE self, VALUE len) { VALUE str; int n = NUM2INT(len); int ret; str = rb_str_new(0, n); ret = RAND_bytes((unsigned char *)RSTRING_PTR(str), n); if (ret == 0){ char buf[256]; ERR_error_string_n(ERR_get_error(), buf, 256); ossl_raise(eRandomError, "RAND_bytes error: %s", buf); } else if (ret == -1) { ossl_raise(eRandomError, "RAND_bytes is not supported"); } return str; }
::seed is equivalent to ::add where entropy
is length of str
.
static VALUE ossl_rand_seed(VALUE self, VALUE str) { StringValue(str); RAND_seed(RSTRING_PTR(str), RSTRING_LENINT(str)); return str; }
Return true if the PRNG has been seeded with enough data, false otherwise.
static VALUE ossl_rand_status(VALUE self) { return RAND_status() ? Qtrue : Qfalse; }
Writes a number of random generated bytes (currently 1024) to filename
which can be used to initialize the PRNG by calling ::load_random_file in a later session.
static VALUE ossl_rand_write_file(VALUE self, VALUE filename) { SafeStringValue(filename); if (RAND_write_file(RSTRING_PTR(filename)) == -1) { ossl_raise(eRandomError, NULL); } return Qtrue; }
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.