Skip to content

Commit bc37e65

Browse files
committed
Enforces Array input for deterministicGenerateK
1 parent 1b66976 commit bc37e65

File tree

3 files changed

+26
-6
lines changed

3 files changed

+26
-6
lines changed

src/ecdsa.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
var assert = require('assert')
12
var BigInteger = require('./bigi')
23
var ECPointFp = require('./ec').ECPointFp
34

@@ -35,26 +36,33 @@ function implShamirsTrick(P, k, Q, l) {
3536
return R
3637
}
3738

38-
function deterministicGenerateK(hash,key) {
39+
function deterministicGenerateK(hash, secret) {
40+
assert(Array.isArray(hash))
41+
assert(Array.isArray(secret))
42+
3943
var vArr = []
4044
var kArr = []
4145
for (var i = 0;i < 32;i++) vArr.push(1)
4246
for (var i = 0;i < 32;i++) kArr.push(0)
4347
var v = convert.bytesToWordArray(vArr)
4448
var k = convert.bytesToWordArray(kArr)
4549

46-
k = HmacSHA256(convert.bytesToWordArray(vArr.concat([0]).concat(key).concat(hash)), k)
50+
k = HmacSHA256(convert.bytesToWordArray(vArr.concat([0]).concat(secret).concat(hash)), k)
4751
v = HmacSHA256(v, k)
4852
vArr = convert.wordArrayToBytes(v)
49-
k = HmacSHA256(convert.bytesToWordArray(vArr.concat([1]).concat(key).concat(hash)), k)
53+
k = HmacSHA256(convert.bytesToWordArray(vArr.concat([1]).concat(secret).concat(hash)), k)
5054
v = HmacSHA256(v,k)
5155
v = HmacSHA256(v,k)
5256
vArr = convert.wordArrayToBytes(v)
5357
return BigInteger.fromBuffer(vArr)
5458
}
5559

5660
var ecdsa = {
61+
deterministicGenerateK: deterministicGenerateK,
5762
sign: function (hash, priv) {
63+
if (Buffer.isBuffer(hash)) hash = Array.prototype.slice.call(hash)
64+
if (Buffer.isBuffer(priv)) priv = Array.prototype.slice.call(priv)
65+
5866
var d = priv
5967
var n = ecparams.getN()
6068
var e = BigInteger.fromBuffer(hash)

test/ecdsa.js

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,18 @@ var ECPubKey = require('..').ECPubKey
1010
var Message = require('..').Message
1111

1212
describe('ecdsa', function() {
13+
// FIXME: needs much better tests than this
14+
describe('deterministicGenerateK', function() {
15+
it('produces deterministic K values', function() {
16+
var secret = [4]
17+
18+
var k1 = ecdsa.deterministicGenerateK([1], secret)
19+
var k2 = ecdsa.deterministicGenerateK([2], secret)
20+
21+
assert.notDeepEqual(k1, k2)
22+
})
23+
})
24+
1325
describe('recoverPubKey', function() {
1426
it('succesfully recovers a public key', function() {
1527
var addr = 'mgQK8S6CfSXKjPmnujArSmVxafeJfrZsa3'
@@ -24,7 +36,7 @@ describe('ecdsa', function() {
2436
describe('sign/verify', function() {
2537
it('Signing and Verifying', function () {
2638
var s1 = ECKey.makeRandom()
27-
var sig_a = s1.sign(BigInteger.ZERO)
39+
var sig_a = s1.sign([0])
2840

2941
assert.ok(sig_a, 'Sign null')
3042
assert.ok(s1.pub.verify(BigInteger.ZERO, sig_a))
@@ -59,7 +71,7 @@ describe('ecdsa', function() {
5971

6072
it('should sign with low S value', function() {
6173
var priv = ECKey.fromHex('ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458')
62-
var message = 'Vires in numeris'
74+
var message = new Buffer('Vires in numeris')
6375
var signature = priv.sign(message)
6476
var parsed = ecdsa.parseSig(signature)
6577

test/eckey.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ describe('ECKey', function() {
124124
describe('signing', function() {
125125
var hpriv = 'ca48ec9783cf3ad0dfeff1fc254395a2e403cbbc666477b61b45e31d3b8ab458'
126126
var hcpub = '024b12d9d7c77db68388b6ff7c89046174c871546436806bcd80d07c28ea811992'
127-
var message = 'Vires in numeris'
127+
var message = new Buffer('Vires in numeris')
128128

129129
it('should verify against the private key', function() {
130130
var priv = ECKey.fromHex(hpriv)

0 commit comments

Comments
 (0)