# module SecureRandom

## Secure random number generator interface.¶ ↑

This library is an interface to secure random number generators which are suitable for generating session keys in HTTP cookies, etc.

You can use this library in your application by requiring it:

    require 'securerandom'

It supports the following secure random number generators:

- openssl

- /dev/urandom

- `Win32`

`SecureRandom` is extended by the `Random::Formatter` module which defines the following methods:

- alphanumeric

- base64

- choose

- `gen_random`

- hex

- rand

- random_bytes

- random_number

- urlsafe_base64

- uuid

These methods are usable as class methods of `SecureRandom` such as `SecureRandom.hex`.

If a secure random number generator is not available, `NotImplementedError` is raised.

### Public Class Methods

bytes(n) click to toggle source

    # File lib/securerandom.rb, line 42
    def bytes(n)
      return gen_random(n)
    end

gen_random(n)
Alias for: gen_random_urandom

### Private Class Methods

gen_random_openssl(n) click to toggle source

    # File lib/securerandom.rb, line 48
    def gen_random_openssl(n)
      @pid = 0 unless defined?(@pid)
      pid = $$
      unless @pid == pid
        now = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond)
        OpenSSL::Random.random_add([now, @pid, pid].join(""), 0.0)
        seed = Random.urandom(16)
        if (seed)
          OpenSSL::Random.random_add(seed, 16)
        end
        @pid = pid
      end
      return OpenSSL::Random.random_bytes(n)
    end

Also aliased as: gen_random
gen_random_urandom(n) click to toggle source

    # File lib/securerandom.rb, line 63
    def gen_random_urandom(n)
      ret = Random.urandom(n)
      unless ret
        raise NotImplementedError, "No random device"
      end
      unless ret.length == n
        raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes"
      end
      ret
    end

Also aliased as: gen_random