From fb6c76a976ca296617dec82df292cbe80b9f14d0 Mon Sep 17 00:00:00 2001 From: Daniel Cousens Date: Mon, 21 Apr 2014 04:44:05 +1000 Subject: [PATCH] Merges Buffer refactorings from base58-native by Stephen Pair --- src/base58.js | 89 ++++++++++++++++++++++----------------------------- 1 file changed, 38 insertions(+), 51 deletions(-) diff --git a/src/base58.js b/src/base58.js index 3715c3b..7ba4b04 100644 --- a/src/base58.js +++ b/src/base58.js @@ -2,78 +2,65 @@ // 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 BigInteger = require('./jsbn/jsbn') -// FIXME: ? This is a Base58Check alphabet -var alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" -var base = BigInteger.valueOf(58) - -var alphabetMap = {} -for (var i=0; i= 0) { - var mod = bi.mod(base) - bi = bi.subtract(mod).divide(base) + var i = result.length - 1 + while (bi.compareTo(BigInteger.ZERO) > 0) { + var remainder = bi.mod(BASE) + bi = bi.divide(BASE) - chars.push(alphabet[mod.intValue()]) + result[i] = ALPHABET_BUF[remainder.intValue()] + i-- } - chars.push(alphabet[bi.intValue()]) - - // Convert leading zeros too. - for (var i=0; i 0) { - bytes.unshift(0) + // deal with leading zeros + var i = 0 + while ((i < string.length) && (string[i] === ALPHABET[0])) { + i++ } - return new Buffer(bytes) + // FIXME: If BigInteger supported buffers, this could be a copy + var buffer = new Buffer(num.toByteArrayUnsigned()) + var padding = new Buffer(i) + padding.fill(0) + + return Buffer.concat([padding, buffer]) } module.exports = {