module QuantumRNG

QuantumRNG gets random numbers from the ANU Quantum RNG API.

Gem Version

Constants

VERSION

Public Class Methods

float(max, count = 1) click to toggle source
# File lib/quantum_rng.rb, line 42
def self.float(max, count = 1)
  random(count).map { |r| (r * max).to_f }
end
hex16(block_size, count = 1) click to toggle source
# File lib/quantum_rng.rb, line 25
def self.hex16(block_size, count = 1)
  make_request(
    -> { Array.new(count).map { SecureRandom.hex block_size } },
    length: count,
    type: 'hex16',
    size: block_size
  )
end
int(max, count = 1) click to toggle source
# File lib/quantum_rng.rb, line 38
def self.int(max, count = 1)
  random(count).map { |r| (r * max).to_i }
end
random(count = 1) click to toggle source
# File lib/quantum_rng.rb, line 34
def self.random(count = 1)
  uint16(count).map { |r| r / 65_535.0 }
end
uint16(count = 1) click to toggle source
# File lib/quantum_rng.rb, line 17
def self.uint16(count = 1)
  make_request(
    -> { Array.new(count).map { SecureRandom.random_number 65_535 } },
    length: count,
    type: 'uint16'
  )
end
uint8(count = 1) click to toggle source
# File lib/quantum_rng.rb, line 9
def self.uint8(count = 1)
  make_request(
    -> { Array.new(count).map { SecureRandom.random_number 255 } },
    length: count,
    type: 'uint8'
  )
end

Private Class Methods

make_request(backup, queries) click to toggle source
# File lib/quantum_rng.rb, line 48
def self.make_request(backup, queries)
  q = URI.encode_www_form(queries)
  data = Curl.get('http://qrng.anu.edu.au/API/jsonI.php', q).body
  packet = JSON.parse(data, symbolize_names: true)
  if packet[:success]
    packet[:data]
  else
    backup.call
  end
rescue
  backup.call
end