diff --git a/lib/browser/Key.js b/lib/browser/Key.js index 088c64b..fe7ca0e 100644 --- a/lib/browser/Key.js +++ b/lib/browser/Key.js @@ -160,6 +160,11 @@ Key.sign = function(hash, priv, k) { var Q = Point.multiply(G, k); var r = Q.x.mod(n); var s = k.invm(n).mul(e.add(d.mul(r))).mod(n); + // use only low S values according to BIP62 + var n_half = new bignum(n).div(2); + if (s.cmp(n_half) > 0) { + s = new bignum(n).sub(s); + } } while (r.cmp(new bignum(0)) <= 0 || s.cmp(new bignum(0)) <= 0); return {r: r, s: s};