Sha256: 951a1fe18baec2cee6886cb88dcd67223faf33aac6595d6f6f6f25c3099d6d66
Contents?: true
Size: 1.32 KB
Versions: 2
Compression:
Stored size: 1.32 KB
Contents
module CryptoconditionsRuby module Utils class Base58 CHARS = %w(123456789 ABCDEFGHJKLMNPQRSTUVWXYZ abcdefghijkmnopqrstuvwxyz).freeze def self.decoding_table @decoding_table ||= generate_decoding_table end def self.generate_decoding_table CHARS.join.split('').each_with_index.each_with_object({}) do |(c, i), store| store[c] = i end end def self.encoding_table @encoding_table ||= decoding_table.invert end def self.encode(data) cdata = data.unpack('C*') vlong = cdata.inject(0) { |store, v| v + store * 256 } result = '' while vlong > 0 result += encoding_table[vlong % 58] vlong /= 58 end while cdata.first.zero? result += '1' cdata = cdata[1..-1] end result.reverse end def self.decode(data_string) vlong = data_string.each_byte.inject(0) do |store, b| store = decoding_table[b.chr] + (58 * store) store end result = '' while vlong > 0 result += (vlong % 256).chr vlong /= 256 end while data_string[0] == '1' result += "\x00" data_string = data_string[1..-1] end result.reverse end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
cryptoconditions_ruby-0.5.2 | lib/cryptoconditions_ruby/utils/base58.rb |
cryptoconditions_ruby-0.5.1 | lib/cryptoconditions_ruby/utils/base58.rb |