123456789_123456789_123456789_123456789_123456789_

Module: SecureRandom

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Defined in: lib/securerandom.rb

Overview

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.

Examples

Generate random hexadecimal strings:

require 'securerandom'

SecureRandom.hex(10) #=> "52750b30ffbc7de3b362"
SecureRandom.hex(10) #=> "92b15d6c8dc4beb5f559"
SecureRandom.hex(13) #=> "39b290146bea6ce975c37cfc23"

Generate random base64 strings:

SecureRandom.base64(10) #=> "EcmTPZwWRAozdA=="
SecureRandom.base64(10) #=> "KO1nIU+p9DKxGg=="
SecureRandom.base64(12) #=> "7kJSM/MzBJI+75j8"

Generate random binary strings:

SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301"
SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337"

Generate alphanumeric strings:

SecureRandom.alphanumeric(10) #=> "S8baxMJnPl"
SecureRandom.alphanumeric(10) #=> "aOxAg8BAJe"

Generate UUIDs:

SecureRandom.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594"
SecureRandom.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab"

Class Method Summary

::Random::Formatter - Extended

alphanumeric

SecureRandom.alphanumeric generates a random alphanumeric string.

base64

SecureRandom.base64 generates a random base64 string.

hex

SecureRandom.hex generates a random hexadecimal string.

random_bytes

SecureRandom.random_bytes generates a random binary string.

urlsafe_base64

SecureRandom.urlsafe_base64 generates a random URL-safe base64 string.

uuid

SecureRandom.uuid generates a random v4 UUID (Universally Unique IDentifier).

choose

SecureRandom.choose generates a string that randomly draws from a source array of characters.

gen_random

Class Method Details

.bytes(n)

[ GitHub ]

  
# File 'lib/securerandom.rb', line 70

def bytes(n)
  return gen_random(n)
end

.gen_random(n) (private)

Alias for .gen_random_urandom.

[ GitHub ]

  
# File 'lib/securerandom.rb', line 112

alias gen_random gen_random_urandom

.gen_random_openssl(n) (private)

[ GitHub ]

  
# File 'lib/securerandom.rb', line 76

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

.gen_random_urandom(n) (private) Also known as: .gen_random

[ GitHub ]

  
# File 'lib/securerandom.rb', line 91

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