1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- const ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
- const ALPHABET_MAP = {};
- for(let i = 0; i < ALPHABET.length; i++)
- ALPHABET_MAP[ALPHABET.charAt(i)] = i;
- const BASE = 58;
- module.exports.encode58 = function (buffer) {
- if(buffer.length === 0)
- return '';
- let i;
- let j;
- const digits = [0];
- for(i = 0; i < buffer.length; i++) {
- for(j = 0; j < digits.length; j++)
- digits[j] <<= 8;
- digits[0] += buffer[i];
- let carry = 0;
- for(j = 0; j < digits.length; ++j) {
- digits[j] += carry;
- carry = (digits[j] / BASE) | 0;
- digits[j] %= BASE
- }
- while (carry) {
- digits.push(carry % BASE);
- carry = (carry / BASE) | 0
- }
- }
- for(i = 0; buffer[i] === 0 && i < buffer.length - 1; i++)
- digits.push(0);
- return digits.reverse().map(digit => ALPHABET[digit]).join('');
- };
- module.exports.decode58 = function (string) {
- if(string.length === 0)
- return [];
- let i;
- let j;
- const bytes = [0];
- for(i = 0; i < string.length; i++) {
- const c = string[i];
- if(!(c in ALPHABET_MAP))
- throw new Error('Non-base58 character');
- for(j = 0; j < bytes.length; j++)
- bytes[j] *= BASE;
- bytes[0] += ALPHABET_MAP[c];
- let carry = 0;
- for(j = 0; j < bytes.length; ++j) {
- bytes[j] += carry;
- carry = bytes[j] >> 8;
- bytes[j] &= 0xff;
- }
- while (carry) {
- bytes.push(carry & 0xff);
- carry >>= 8;
- }
- }
- for(i = 0; string[i] === '1' && i < string.length - 1; i++)
- bytes.push(0);
- return bytes.reverse();
- };
|