class Base58
Base58
Copyright © 2009 - 2018 Douglas F Shearer. douglasfshearer.com Distributed under the MIT license as included with this plugin.
Constants
- ALPHABETS
- BASE
NOTE: If adding new alphabets of non-standard length, this should become a method.
Public Class Methods
base58_to_binary(base58_val, alphabet = :flickr)
click to toggle source
Converts a base58 string to an ASCII-8BIT (binary) encoded string. All leading zeroes in the base58 input are preserved and converted to “x00” in the output.
# File lib/base58.rb, line 62 def self.base58_to_binary(base58_val, alphabet = :flickr) raise ArgumentError, 'Invalid alphabet selection.' unless ALPHABETS.include?(alphabet) nzeroes = base58_val.chars.find_index{|c| c != ALPHABETS[alphabet][0]} || base58_val.length-1 prefix = nzeroes < 0 ? '' : '00' * nzeroes [prefix + Private::int_to_hex(base58_to_int(base58_val, alphabet))].pack('H*') end
base58_to_int(base58_val, alphabet = :flickr)
click to toggle source
Converts a base58 string to a base10 integer.
# File lib/base58.rb, line 19 def self.base58_to_int(base58_val, alphabet = :flickr) raise ArgumentError, 'Invalid alphabet selection.' unless ALPHABETS.include?(alphabet) int_val = 0 base58_val.reverse.split(//).each_with_index do |char,index| raise ArgumentError, 'Value passed not a valid Base58 String.' if (char_index = ALPHABETS[alphabet].index(char)).nil? int_val += (char_index)*(BASE**(index)) end int_val end
Also aliased as: decode
binary_to_base58(binary_val, alphabet = :flickr, include_leading_zeroes = true)
click to toggle source
Converts a ASCII-8BIT (binary) encoded string to a base58 string.
# File lib/base58.rb, line 43 def self.binary_to_base58(binary_val, alphabet = :flickr, include_leading_zeroes = true) raise ArgumentError, 'Value passed is not a String.' unless binary_val.is_a?(String) raise ArgumentError, 'Value passed is not binary.' unless binary_val.encoding == Encoding::BINARY raise ArgumentError, 'Invalid alphabet selection.' unless ALPHABETS.include?(alphabet) return int_to_base58(0, alphabet) if binary_val.empty? if include_leading_zeroes nzeroes = binary_val.bytes.find_index{|b| b != 0} || binary_val.length-1 prefix = ALPHABETS[alphabet][0] * nzeroes else prefix = '' end prefix + int_to_base58(binary_val.unpack('H*')[0].to_i(16), alphabet) end
int_to_base58(int_val, alphabet = :flickr)
click to toggle source
Converts a base10 integer to a base58 string.
# File lib/base58.rb, line 30 def self.int_to_base58(int_val, alphabet = :flickr) raise ArgumentError, 'Value passed is not an Integer.' unless int_val.is_a?(Integer) raise ArgumentError, 'Invalid alphabet selection.' unless ALPHABETS.include?(alphabet) base58_val = '' while(int_val >= BASE) mod = int_val % BASE base58_val = ALPHABETS[alphabet][mod,1] + base58_val int_val = (int_val - mod)/BASE end ALPHABETS[alphabet][int_val,1] + base58_val end
Also aliased as: encode