From 2ef419080f33b61fd845e8963c910d7cf0e3fd35 Mon Sep 17 00:00:00 2001 From: Kirill Fomichev Date: Sun, 10 Jan 2016 15:21:55 +0300 Subject: [PATCH] Update getNAF --- lib/util.js | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/lib/util.js b/lib/util.js index 3db1815..ba2e505 100644 --- a/lib/util.js +++ b/lib/util.js @@ -27,14 +27,33 @@ exports.getNAF = function (num, w) { var naf = [] var ws = 1 << w var ws2m1 = (ws << 1) - 1 - for (var k = num.clone(); k.cmpn(0) === 1; k.iushrn(1)) { - var z = 0 - if (k.isOdd()) { - var mod = k.andln(ws2m1) - z = (mod >= ws) ? (ws - mod) : mod - k.isubn(z) + + var k = num.clone() + while (!k.isZero()) { + var i = 0 + for (var d = 1; (k.words[0] & d) === 0 && i < 26; ++i, d <<= 1) { + naf.push(0) + } + + if (i !== 0) { + k.iushrn(i) + } else { + var mod = k.words[0] & ws2m1 + if (mod >= ws) { + naf.push(ws - mod) + k.isubn(ws - mod).iushrn(1) + } else { + k.words[0] -= mod + naf.push(mod) + if (!k.isZero()) { + for (i = w - 1; i > 0; --i) { + naf.push(0) + } + + k.iushrn(w) + } + } } - naf.push(z) } return naf