triam-base
Version:
Low level triam network support library
53 lines (41 loc) • 1.26 kB
JavaScript
// vendored from http://cryptocoinjs.com/modules/misc/bs58/
// Base58 encoding/decoding
// Originally written by Mike Hearn for BitcoinJ
// Copyright (c) 2011 Google Inc
// Ported to JavaScript by Stefan Thomas
// Merged Buffer refactorings from base58-native by Stephen Pair
// Copyright (c) 2013 BitPay Inc
;
var ALPHABET = "gsphnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCr65jkm8oFqi1tuvAxyz";
var ALPHABET_MAP = {};
for (var i = 0; i < ALPHABET.length; ++i) {
ALPHABET_MAP[ALPHABET.charAt(i)] = i;
}
var BASE = 58;
function decode(string) {
if (string.length === 0) {
return [];
}var i,
j,
bytes = [0];
for (i = 0; i < string.length; ++i) {
var 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];
var carry = 0;
for (j = 0; j < bytes.length; ++j) {
bytes[j] += carry;
carry = bytes[j] >> 8;
bytes[j] &= 255;
}
while (carry) {
bytes.push(carry & 255);
carry >>= 8;
}
}
// deal with leading zeros
for (i = 0; string[i] === "g" && i < string.length - 1; ++i) bytes.push(0);
return bytes.reverse();
}
module.exports = { decode: decode };