Module: Privy::Base58
- Defined in:
- lib/privy/base58.rb
Constant Summary collapse
- ALPHABET =
"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"- INDEX =
ALPHABET.chars.each_with_index.to_h.freeze
Class Method Summary collapse
Class Method Details
.decode(value) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/privy/base58.rb', line 22 def decode(value) integer = 0 value.each_char do |char| digit = INDEX[char] raise ArgumentError, "invalid base58 character: #{char.inspect}" if digit.nil? integer = (integer * 58) + digit end bytes = [] while integer.positive? bytes.unshift(integer & 0xff) integer >>= 8 end leading_zeroes = value.each_char.take_while { |char| char == "1" }.length ("\x00".b * leading_zeroes) + bytes.pack("C*") end |
.encode(bytes) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/privy/base58.rb', line 10 def encode(bytes) integer = bytes.unpack1("H*").to_i(16) encoded = +"" while integer.positive? integer, remainder = integer.divmod(58) encoded.prepend(ALPHABET[remainder]) end leading_zeroes = bytes.bytes.take_while(&:zero?).length ("1" * leading_zeroes) + encoded end |