From e17e36d1a0ac82e6cb9da00ce4155da2c7ea9e30 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 1 Apr 2016 05:38:29 -0700 Subject: [PATCH] clean up base58. --- lib/bcoin/utils.js | 63 +++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 23 deletions(-) diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 36a86159..cc66ab0c 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -173,18 +173,23 @@ utils.toBase58 = function toBase58(arr) { utils.toBase582 = function toBase582(buf) { var zeroes = 0; var length = 0; - for (var i = 0; i < buf.length; i++) { + var str = ''; + var i, size, b58, carry, j, k; + + for (i = 0; i < buf.length; i++) { if (buf[i] !== 0) break; zeroes++; } - var size = ((buf.length * 138 / 100) | 0) + 1; - var b58 = new Buffer(size); + + size = ((buf.length * 138 / 100) | 0) + 1; + b58 = new Buffer(size); b58.fill(0); + for (; i < buf.length; i++) { - var carry = buf[i]; - var j = 0; - for (var k = b58.length - 1; k >= 0; k--, j++) { + carry = buf[i]; + j = 0; + for (k = b58.length - 1; k >= 0; k--, j++) { if (carry === 0 && j >= length) break; carry += 256 * b58[k]; @@ -194,50 +199,62 @@ utils.toBase582 = function toBase582(buf) { assert(carry === 0); length = j; } - var i = size - length; + + i = size - length; while (b58[i] === 0) i++; - var str = ''; + for (j = 0; j < zeroes; j++) str += '1'; + for (; i < b58.length; i++) str += base58[b58[i]]; + return str; }; utils.fromBase582 = function fromBase58(str) { var zeroes = 0; var i = 0; - while (str[i] === '1') { + var b256, ch, carry, j, out; + + for (i = 0; i < str.length; i++) { + if (str[i] !== '1') + break; zeroes++; - i++; } - var b256 = new Buffer(((str.length * 733) / 1000 | 0) + 1); + + b256 = new Buffer(((str.length * 733) / 1000 | 0) + 1); b256.fill(0); - while (str[i]) { - var ch = unbase58[str[i]]; + + for (; i < str.length; i++) { + ch = unbase58[str[i]]; if (ch == null) - return; - var carry = ch; - for (var j = b256.length - 1; j >= 0; j--) { + return new Buffer([]); + + carry = ch; + for (j = b256.length - 1; j >= 0; j--) { carry += 58 * b256[j]; b256[j] = carry % 256; carry = carry / 256 | 0; } + assert(carry === 0); - i++; } - if (str[i] != null) - return; + i = 0; while (b256[i] === 0) i++; - var vch = new Buffer(zeroes + (b256.length - i)); + + out = new Buffer(zeroes + (b256.length - i)); + for (j = 0; j < zeroes; j++) - vch[j] = 0; + out[j] = 0; + for (; i < b256.length; i++) - vch[i] = b256[i]; - return vch; + out[i] = b256[i]; + + return out; }; utils.fromBase58 = function fromBase58(str) {