Path: blob/master/src/bitcoinjs-lib.base58.js
248 views
//https://raw.github.com/bitcoinjs/bitcoinjs-lib/c952aaeb3ee472e3776655b8ea07299ebed702c7/src/base58.js1(function (Bitcoin) {2Bitcoin.Base58 = {3alphabet: "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",4validRegex: /^[1-9A-HJ-NP-Za-km-z]+$/,5base: BigInteger.valueOf(58),67/**8* Convert a byte array to a base58-encoded string.9*10* Written by Mike Hearn for BitcoinJ.11* Copyright (c) 2011 Google Inc.12*13* Ported to JavaScript by Stefan Thomas.14*/15encode: function (input) {16var bi = BigInteger.fromByteArrayUnsigned(input);17var chars = [];1819while (bi.compareTo(B58.base) >= 0) {20var mod = bi.mod(B58.base);21chars.unshift(B58.alphabet[mod.intValue()]);22bi = bi.subtract(mod).divide(B58.base);23}24chars.unshift(B58.alphabet[bi.intValue()]);2526// Convert leading zeros too.27for (var i = 0; i < input.length; i++) {28if (input[i] == 0x00) {29chars.unshift(B58.alphabet[0]);30} else break;31}3233return chars.join('');34},3536/**37* Convert a base58-encoded string to a byte array.38*39* Written by Mike Hearn for BitcoinJ.40* Copyright (c) 2011 Google Inc.41*42* Ported to JavaScript by Stefan Thomas.43*/44decode: function (input) {45var bi = BigInteger.valueOf(0);46var leadingZerosNum = 0;47for (var i = input.length - 1; i >= 0; i--) {48var alphaIndex = B58.alphabet.indexOf(input[i]);49if (alphaIndex < 0) {50throw "Invalid character";51}52bi = bi.add(BigInteger.valueOf(alphaIndex)53.multiply(B58.base.pow(input.length - 1 - i)));5455// This counts leading zero bytes56if (input[i] == "1") leadingZerosNum++;57else leadingZerosNum = 0;58}59var bytes = bi.toByteArrayUnsigned();6061// Add leading zeros62while (leadingZerosNum-- > 0) bytes.unshift(0);6364return bytes;65}66};6768var B58 = Bitcoin.Base58;69})(70'undefined' != typeof Bitcoin ? Bitcoin : module.exports71);7273