Moves 'low S value' test from eckey.js to ecdsa.js

This commit is contained in:
GreenAddress.it 2014-04-17 06:33:35 +02:00
parent d7c2e4d5a5
commit 9d876198f5
2 changed files with 16 additions and 17 deletions

View file

@ -1,6 +1,9 @@
var assert = require('assert') var assert = require('assert')
var crypto = require('../').crypto var crypto = require('../').crypto
var ecdsa = require('..').ecdsa var ecdsa = require('..').ecdsa
var sec = require('../src/jsbn/sec.js')
var BigInteger = require('../src/jsbn/jsbn.js')
var ecparams = sec("secp256k1")
var rng = require('secure-random') var rng = require('secure-random')
var BigInteger = require('..').BigInteger var BigInteger = require('..').BigInteger
@ -55,5 +58,18 @@ describe('ecdsa', function() {
assert.ok(ecdsa.verify(hash2, sig_c, s2), 'Verify constant signature') assert.ok(ecdsa.verify(hash2, sig_c, s2), 'Verify constant signature')
}) })
it('should sign with low S value', function() {
var priv = new ECKey('ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458')
var message = 'Vires in numeris'
var signature = priv.sign(message)
var parsed = ecdsa.parseSig(signature)
// Check that the 's' value is 'low', to prevent possible transaction malleability as per
// https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#low-s-values-in-signatures
assert.ok(parsed.s.compareTo(ecparams.getN().divide(BigInteger.valueOf(2))) <= 0)
assert.ok(priv.verify(message, signature))
})
}) })
}) })

View file

@ -1,8 +1,4 @@
var assert = require('assert') var assert = require('assert')
var ecdsa = require('../src/ecdsa.js')
var sec = require('../src/jsbn/sec.js')
var BigInteger = require('../src/jsbn/jsbn.js')
var ecparams = sec("secp256k1")
var ECKey = require('../src/eckey.js').ECKey var ECKey = require('../src/eckey.js').ECKey
var ECPubKey = require('../src/eckey.js').ECPubKey var ECPubKey = require('../src/eckey.js').ECPubKey
var convert = require('../src/convert.js') var convert = require('../src/convert.js')
@ -152,19 +148,6 @@ describe('ECKey', function() {
assert(priv.verify(message, signature)) assert(priv.verify(message, signature))
}) })
it('should sign with low S value', function() {
var priv = new ECKey(hpriv)
var signature = priv.sign(message)
var parsed = ecdsa.parseSig(signature)
// Check that the 's' value is 'low', to prevent possible transaction malleability as per
// https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#low-s-values-in-signatures
assert(parsed.s.compareTo(ecparams.getN().divide(BigInteger.valueOf(2))) <= 0)
assert(priv.verify(message, signature))
})
it('should verify against the public key', function() { it('should verify against the public key', function() {
var priv = new ECKey(hpriv) var priv = new ECKey(hpriv)
var pub = new ECPubKey(hcpub, true) var pub = new ECPubKey(hcpub, true)