From ca2609b7e7012362965b4f65f73d923b06312891 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 18 May 2014 10:34:38 -0500 Subject: [PATCH] util: bignum - use toArray instead of +toString. Signed-off-by: Fedor Indutny --- lib/bcoin/utils.js | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 319b00f8..9cf9c168 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -180,9 +180,23 @@ utils.writeU64 = function writeU64(dst, num, off) { if (!off) off = 0; - new bn(num).toArray().reverse().forEach(function(ch, i) { - dst[off + i] = ch; - }); + var num = new bn(num); + + var left = num.shrn(32).toArray(); + while (left.length < 4) left.unshift(0); + + var right = num.maskn(32).toArray(); + while (right.length < 4) right.unshift(0); + + dst[off] = right[3]; + dst[off + 1] = right[2]; + dst[off + 2] = right[1]; + dst[off + 3] = right[0]; + + dst[off + 4] = left[3]; + dst[off + 5] = left[2]; + dst[off + 6] = left[1]; + dst[off + 7] = left[0]; return 8; }; @@ -209,9 +223,23 @@ utils.writeU64BE = function writeU64BE(dst, num, off) { if (!off) off = 0; - new bn(num).toArray().forEach(function(ch, i) { - dst[off + i] = ch; - }); + var num = new bn(num); + + var left = num.shrn(32).toArray(); + while (left.length < 4) left.unshift(0); + + var right = num.maskn(32).toArray(); + while (right.length < 4) right.unshift(0); + + dst[off] = left[0]; + dst[off + 1] = left[1]; + dst[off + 2] = left[2]; + dst[off + 3] = left[3]; + + dst[off + 4] = right[0]; + dst[off + 5] = right[1]; + dst[off + 6] = right[2]; + dst[off + 7] = right[3]; return 8; };