Class: WaffleAPI::AddressValidator::DigestUtilities

Inherits:
Object
  • Object
show all
Defined in:
lib/waffle_api/address_validator.rb

Overview

Utilities are in a class to make them private

Class Method Summary collapse

Class Method Details

.b58_decode(value, length) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/waffle_api/address_validator.rb', line 30

def self.b58_decode(value, length)
  long_value = 0
  index = 0
  result = ""

  value.reverse.each_char do |c|
    long_value += B58_CHARS.index(c) * (B58_BASE ** index)
    index += 1
  end

  while long_value >= 256 do
    div, mod = long_value.divmod 256
    result = mod.chr + result
    long_value = div
  end

  result = long_value.chr + result

  if result.length < length
    result = 0.chr * (length - result.length) + result
  end

  result
end

.version(address) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/waffle_api/address_validator.rb', line 18

def self.version(address)
  decoded = b58_decode(address, 25)

  version = decoded[0, 1]
  checksum = decoded[-4, decoded.length]
  vh160 = decoded[0, decoded.length - 4]

  hashed = (Digest::SHA2.new << (Digest::SHA2.new << vh160).digest).digest

  hashed[0, 4] == checksum ? version[0] : nil
end