class Cryptocurrency::Base58
Constants
- ALPHABET
Public Class Methods
decode58(data)
click to toggle source
# File lib/cryptocurrency/base58.rb, line 24 def self.decode58(data) prefix = '' in_prefix = true value = 0 data.chars.each do |ch| if ch == '1' && in_prefix prefix += "\x00" else in_prefix = false n = ALPHABET.index(ch) value = (value * 58) + n end end prefix + Utils.integer_to_bytes(value) end
decode58_check(data)
click to toggle source
# File lib/cryptocurrency/base58.rb, line 49 def self.decode58_check(data) bin = decode58(data) value = bin[0...-4] checksum = bin[-4..] return unless checksum == Utils.double_sha256(value)[0...4] value end
encode58(data)
click to toggle source
# File lib/cryptocurrency/base58.rb, line 7 def self.encode58(data) return '' if data.empty? n = Utils.bytes_to_integer(data) b58_bytes = [] while n > 0 b58_bytes << n % 58 n /= 58 end zeroes = data.bytes.find_index { |b| b != 0 } || data.length '1' * zeroes + b58_bytes.map do |v| ALPHABET[v] end.join.reverse end
encode58_check(data)
click to toggle source
# File lib/cryptocurrency/base58.rb, line 44 def self.encode58_check(data) checksum = Utils.double_sha256(data)[0...4] encode58(data + checksum) end