Class: XorKnuthHash

Inherits:
Object
  • Object
show all
Defined in:
lib/hideous/xor_knuth_hash.rb

Constant Summary collapse

MAXID =
2147483647

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(id_or_hash, prime, prime_inverse, rndxor, base) ⇒ XorKnuthHash

Returns a new instance of XorKnuthHash.



17
18
19
20
21
22
23
# File 'lib/hideous/xor_knuth_hash.rb', line 17

def initialize(id_or_hash, prime, prime_inverse, rndxor, base)
  @id_or_hash = id_or_hash
  @prime = prime
  @prime_inverse = prime_inverse
  @rndxor = rndxor
  @base = base
end

Class Method Details

.calculate_prime_inverse(prime) ⇒ Object



13
14
15
# File 'lib/hideous/xor_knuth_hash.rb', line 13

def self.calculate_prime_inverse(prime)
  self.modinv(prime, MAXID+1)
end

.hash(record_id, prime, prime_inverse, rndxor, base) ⇒ Object

Convience class method pointing to the instance method



4
5
6
# File 'lib/hideous/xor_knuth_hash.rb', line 4

def self.hash(record_id, prime, prime_inverse, rndxor, base)
  new(record_id, prime, prime_inverse, rndxor, base).hash
end

.reverse_hash(hash, prime, prime_inverse, rndxor, base) ⇒ Object

Convience class method pointing to the instance method



9
10
11
# File 'lib/hideous/xor_knuth_hash.rb', line 9

def self.reverse_hash(hash, prime, prime_inverse, rndxor, base)
  new(hash, prime, prime_inverse, rndxor, base).reverse_hash
end

Instance Method Details

#hashObject

obfuscates an integer



26
27
28
# File 'lib/hideous/xor_knuth_hash.rb', line 26

def hash
  (((@id_or_hash * @prime) & MAXID) ^ @rndxor).to_s(@base)
end

#reverse_hashObject

de-obfuscates an integer



31
32
33
# File 'lib/hideous/xor_knuth_hash.rb', line 31

def reverse_hash
  ((@id_or_hash.to_i(@base) ^ @rndxor) * @prime_inverse) & MAXID
end