Class: ShamirSecretSharing::Base58
Constant Summary
VERSION
Class Method Summary
collapse
Methods inherited from Packed
pack, unpack
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
|