From 9ccac80ad605998e7d022adcdbbfa0dfe403b310 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Sun, 12 Jun 2016 00:27:40 -0700 Subject: [PATCH] ec: refactor. --- lib/bcoin/ec.js | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/lib/bcoin/ec.js b/lib/bcoin/ec.js index 064980a1..9fbe7d90 100644 --- a/lib/bcoin/ec.js +++ b/lib/bcoin/ec.js @@ -104,7 +104,8 @@ ec.random = function random(size) { */ ec.rand = function rand(min, max) { - return Math.floor((ec.random(1)[0] / 256) * (max - min) + min); + var num = ec.random(4).readUInt32LE(0, true); + return Math.floor((num / 0x100000000) * (max - min) + min); }; /** @@ -252,10 +253,9 @@ ec.sign = function sign(msg, key) { */ ec.normalizeLength = function normalizeLength(sig) { - var data, p, len, rlen, slen; - - data = sig.slice(); - p = { place: 0 }; + var data = sig; + var p = { place: 0 }; + var len, rlen, slen; if (data[p.place++] !== 0x30) return sig; @@ -283,16 +283,21 @@ ec.normalizeLength = function normalizeLength(sig) { function getLength(buf, p) { var initial = buf[p.place++]; - if (!(initial & 0x80)) { + var octetLen, val, i, off; + + if (!(initial & 0x80)) return initial; - } - var octetLen = initial & 0xf; - var val = 0; - for (var i = 0, off = p.place; i < octetLen; i++, off++) { + + octetLen = initial & 0xf; + val = 0; + + for (i = 0, off = p.place; i < octetLen; i++, off++) { val <<= 8; val |= buf[off]; } + p.place = off; + return val; } @@ -303,9 +308,7 @@ function getLength(buf, p) { */ ec.isLowS = function isLowS(sig) { - if (!sig.s) { - assert(Buffer.isBuffer(sig)); - + if (Buffer.isBuffer(sig)) { try { sig = new ec.signature(sig); } catch (e) { @@ -313,9 +316,6 @@ ec.isLowS = function isLowS(sig) { } } - if (sig.s.cmpn(0) <= 0) - return false; - // If S is greater than half the order, // it's too high. if (sig.s.cmp(ec.elliptic.nh) > 0) @@ -332,9 +332,7 @@ ec.isLowS = function isLowS(sig) { */ ec.toLowS = function toLowS(sig) { - if (!sig.s) { - assert(Buffer.isBuffer(sig)); - + if (Buffer.isBuffer(sig)) { try { sig = new ec.signature(sig); } catch (e) {