Class: IntegerHash::Generator

Inherits:
Object
  • Object
show all
Defined in:
lib/integer_hash/generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(values = {}) ⇒ Generator

Returns a new instance of Generator.

Raises:

  • (ArgumentError)


7
8
9
10
11
12
# File 'lib/integer_hash/generator.rb', line 7

def initialize(values = {})
  @size = values[:size]
  @prime = values[:prime]
  #TODO BN requires it to be > 16 or the bites are too small
  raise ArgumentError if @size < 16
end

Class Method Details

.generate_configuration(size = 31, prime = nil) ⇒ Object



3
4
5
# File 'lib/integer_hash/generator.rb', line 3

def self.generate_configuration(size = 31, prime = nil)
  return Configuration.new(Generator.new(size: size, prime: prime).generate_configuration)
end

Instance Method Details

#generate_configurationObject



14
15
16
17
18
19
20
# File 'lib/integer_hash/generator.rb', line 14

def generate_configuration
  @prime ||= generate_prime
  inverse_integer = generate_inverse
  random_integer = generate_random

  {prime: @prime.to_i, inverse_integer: inverse_integer.to_i, random_integer: random_integer.to_i}
end

#generate_inverseObject



26
27
28
# File 'lib/integer_hash/generator.rb', line 26

def generate_inverse
  OpenSSL::BN.new(@prime.to_s).mod_inverse(2**@size)
end

#generate_primeObject



22
23
24
# File 'lib/integer_hash/generator.rb', line 22

def generate_prime
  OpenSSL::BN.generate_prime(@size)
end

#generate_randomObject



30
31
32
# File 'lib/integer_hash/generator.rb', line 30

def generate_random
  OpenSSL::BN.rand(@size)
end