Class: ShamirSecretSharing::Base58

Inherits:
Packed show all
Defined in:
lib/shamir-secret-sharing.rb

Constant Summary

Constants inherited from ShamirSecretSharing

VERSION

Class Method Summary collapse

Methods inherited from Packed

pack, unpack

Methods inherited from ShamirSecretSharing

combine, decrypt, encrypt, encrypt_with_sanity_check, l, pack, prime, smallest_prime_of_bytelength, split, split_with_sanity_check, unpack

Class Method Details

.base58_to_int(base58_val) ⇒ Object



190
191
192
193
194
195
196
# File 'lib/shamir-secret-sharing.rb', line 190

def self.base58_to_int(base58_val)
  alpha, base = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", 58
  base58_val.reverse.each_char.with_index.inject(0) do |int_val, (char,index)|
    raise ArgumentError, 'Value not a valid Base58 String.' unless char_index = alpha.index(char)
    int_val + char_index*(base**index)
  end
end

.decode(string) ⇒ Object



177
178
179
180
181
# File 'lib/shamir-secret-sharing.rb', line 177

def self.decode(string)
  leading_zero_bytes = (string.match(/^([1]+)/) ? $1 : '').size
  buf = base58_to_int(string).to_s(16); buf = (buf.bytesize.odd? ? '0'+buf : buf)
  [ ("00"*leading_zero_bytes) + buf ].pack("H*")
end

.encode(string) ⇒ Object



172
173
174
175
176
# File 'lib/shamir-secret-sharing.rb', line 172

def self.encode(string)
  string = string.unpack("H*")[0]
  leading_zero_bytes  = (string.match(/^([0]+)/) ? $1 : '').size / 2
  ("1"*leading_zero_bytes) + int_to_base58( string.to_i(16) )
end

.int_to_base58(int_val, leading_zero_bytes = 0) ⇒ Object



182
183
184
185
186
187
188
# File 'lib/shamir-secret-sharing.rb', line 182

def self.int_to_base58(int_val, leading_zero_bytes=0)
  alpha, base58_val, base = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", "", 58
  while int_val > 0
    int_val, remainder = int_val.divmod(base)
    base58_val = alpha[remainder] + base58_val
  end; base58_val
end