From 215a3ad6fca2dbff1104c20d725b0877f55fd02e Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 11 Nov 2016 20:32:41 -0800 Subject: [PATCH] base58: optimize. --- lib/utils/base58.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/lib/utils/base58.js b/lib/utils/base58.js index ccfbad2b..87a0bb7d 100644 --- a/lib/utils/base58.js +++ b/lib/utils/base58.js @@ -49,6 +49,7 @@ exports.toBase58 = function toBase58(data) { for (; i < data.length; i++) { carry = data[i]; j = 0; + for (k = b58.length - 1; k >= 0; k--, j++) { if (carry === 0 && j >= length) break; @@ -56,6 +57,7 @@ exports.toBase58 = function toBase58(data) { b58[k] = carry % 58; carry = carry / 58 | 0; } + assert(carry === 0); length = j; } @@ -86,8 +88,9 @@ if (native) exports.fromBase58 = function fromBase58(str) { var zeroes = 0; + var length = 0; var i = 0; - var b256, ch, carry, j, out; + var b256, ch, carry, j, k, out; for (i = 0; i < str.length; i++) { if (str[i] !== '1') @@ -104,13 +107,18 @@ exports.fromBase58 = function fromBase58(str) { throw new Error('Non-base58 character.'); carry = ch; - for (j = b256.length - 1; j >= 0; j--) { - carry += 58 * b256[j]; - b256[j] = carry % 256; + j = 0; + + for (k = b256.length - 1; k >= 0; k--, j++) { + if (carry === 0 && j >= length) + break; + carry += 58 * b256[k]; + b256[k] = carry % 256; carry = carry / 256 | 0; } assert(carry === 0); + length = j; } i = 0;