Class: WaffleAPI::AddressValidator::DigestUtilities
- Inherits:
-
Object
- Object
- WaffleAPI::AddressValidator::DigestUtilities
- Defined in:
- lib/waffle_api/address_validator.rb
Overview
Utilities are in a class to make them private
Constant Summary collapse
- B58_CHARS =
'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'- B58_BASE =
B58_CHARS.length
Class Method Summary collapse
Class Method Details
.b58_decode(value, length) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/waffle_api/address_validator.rb', line 29 def self.b58_decode(value, length) long_value = 0 result = '' value.reverse.each_char.with_index do |c, index| long_value += B58_CHARS.index(c) * (B58_BASE**index) end while long_value >= 256 long_value, mod = long_value.divmod 256 result = mod.chr + result 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 |
# 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] vh160_digest = (Digest::SHA2.new << vh160).digest hashed = (Digest::SHA2.new << vh160_digest).digest hashed[0, 4] == checksum ? version[0] : nil end |