Permalink
Browse files

Enforces Array input for deterministicGenerateK

  • Loading branch information...
1 parent 1b66976 commit bc37e650148db2e5d947c84e51167cbd8f37b8a6 @dcousens dcousens committed Apr 22, 2014
Showing with 26 additions and 6 deletions.
  1. +11 −3 src/ecdsa.js
  2. +14 −2 test/ecdsa.js
  3. +1 −1 test/eckey.js
View
14 src/ecdsa.js
@@ -1,3 +1,4 @@
+var assert = require('assert')
var BigInteger = require('./bigi')
var ECPointFp = require('./ec').ECPointFp
@@ -35,26 +36,33 @@ function implShamirsTrick(P, k, Q, l) {
return R
}
-function deterministicGenerateK(hash,key) {
+function deterministicGenerateK(hash, secret) {
+ assert(Array.isArray(hash))
+ assert(Array.isArray(secret))
+
var vArr = []
var kArr = []
for (var i = 0;i < 32;i++) vArr.push(1)
for (var i = 0;i < 32;i++) kArr.push(0)
var v = convert.bytesToWordArray(vArr)
var k = convert.bytesToWordArray(kArr)
- k = HmacSHA256(convert.bytesToWordArray(vArr.concat([0]).concat(key).concat(hash)), k)
+ k = HmacSHA256(convert.bytesToWordArray(vArr.concat([0]).concat(secret).concat(hash)), k)
v = HmacSHA256(v, k)
vArr = convert.wordArrayToBytes(v)
- k = HmacSHA256(convert.bytesToWordArray(vArr.concat([1]).concat(key).concat(hash)), k)
+ k = HmacSHA256(convert.bytesToWordArray(vArr.concat([1]).concat(secret).concat(hash)), k)
v = HmacSHA256(v,k)
v = HmacSHA256(v,k)
vArr = convert.wordArrayToBytes(v)
return BigInteger.fromBuffer(vArr)
}
var ecdsa = {
+ deterministicGenerateK: deterministicGenerateK,
sign: function (hash, priv) {
+ if (Buffer.isBuffer(hash)) hash = Array.prototype.slice.call(hash)
+ if (Buffer.isBuffer(priv)) priv = Array.prototype.slice.call(priv)
+
var d = priv
var n = ecparams.getN()
var e = BigInteger.fromBuffer(hash)
View
16 test/ecdsa.js
@@ -10,6 +10,18 @@ var ECPubKey = require('..').ECPubKey
var Message = require('..').Message
describe('ecdsa', function() {
+ // FIXME: needs much better tests than this
+ describe('deterministicGenerateK', function() {
+ it('produces deterministic K values', function() {
+ var secret = [4]
+
+ var k1 = ecdsa.deterministicGenerateK([1], secret)
+ var k2 = ecdsa.deterministicGenerateK([2], secret)
+
+ assert.notDeepEqual(k1, k2)
+ })
+ })
+
describe('recoverPubKey', function() {
it('succesfully recovers a public key', function() {
var addr = 'mgQK8S6CfSXKjPmnujArSmVxafeJfrZsa3'
@@ -24,7 +36,7 @@ describe('ecdsa', function() {
describe('sign/verify', function() {
it('Signing and Verifying', function () {
var s1 = ECKey.makeRandom()
- var sig_a = s1.sign(BigInteger.ZERO)
+ var sig_a = s1.sign([0])
assert.ok(sig_a, 'Sign null')
assert.ok(s1.pub.verify(BigInteger.ZERO, sig_a))
@@ -59,7 +71,7 @@ describe('ecdsa', function() {
it('should sign with low S value', function() {
var priv = ECKey.fromHex('ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458')
- var message = 'Vires in numeris'
+ var message = new Buffer('Vires in numeris')
var signature = priv.sign(message)
var parsed = ecdsa.parseSig(signature)
View
2 test/eckey.js
@@ -124,7 +124,7 @@ describe('ECKey', function() {
describe('signing', function() {
var hpriv = 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458'
var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992'
- var message = 'Vires in numeris'
+ var message = new Buffer('Vires in numeris')
it('should verify against the private key', function() {
var priv = ECKey.fromHex(hpriv)

0 comments on commit bc37e65

Please sign in to comment.