@@ -7,20 +7,20 @@ var ECSignature = require('./ecsignature')
7
7
8
8
// https://tools.ietf.org/html/rfc6979#section-3.2
9
9
function deterministicGenerateK ( curve , hash , d , checkSig , nonce ) {
10
-
10
+
11
11
enforceType ( 'Buffer' , hash )
12
12
enforceType ( BigInteger , d )
13
-
13
+
14
14
if ( nonce ) {
15
- hash = crypto . sha256 ( Buffer . concat ( [ hash , new Buffer ( nonce ) ] ) )
15
+ hash = crypto . sha256 ( Buffer . concat ( [ hash , new Buffer . alloc ( nonce ) ] ) )
16
16
}
17
17
18
18
// sanity check
19
19
assert . equal ( hash . length , 32 , 'Hash must be 256 bit' )
20
20
21
21
var x = d . toBuffer ( 32 )
22
- var k = new Buffer ( 32 )
23
- var v = new Buffer ( 32 )
22
+ var k = new Buffer . alloc ( 32 )
23
+ var v = new Buffer . alloc ( 32 )
24
24
25
25
// Step B
26
26
v . fill ( 1 )
@@ -29,13 +29,13 @@ function deterministicGenerateK(curve, hash, d, checkSig, nonce) {
29
29
k . fill ( 0 )
30
30
31
31
// Step D
32
- k = crypto . HmacSHA256 ( Buffer . concat ( [ v , new Buffer ( [ 0 ] ) , x , hash ] ) , k )
32
+ k = crypto . HmacSHA256 ( Buffer . concat ( [ v , new Buffer . from ( [ 0 ] ) , x , hash ] ) , k )
33
33
34
34
// Step E
35
35
v = crypto . HmacSHA256 ( v , k )
36
36
37
37
// Step F
38
- k = crypto . HmacSHA256 ( Buffer . concat ( [ v , new Buffer ( [ 1 ] ) , x , hash ] ) , k )
38
+ k = crypto . HmacSHA256 ( Buffer . concat ( [ v , new Buffer . from ( [ 1 ] ) , x , hash ] ) , k )
39
39
40
40
// Step G
41
41
v = crypto . HmacSHA256 ( v , k )
@@ -48,13 +48,13 @@ function deterministicGenerateK(curve, hash, d, checkSig, nonce) {
48
48
49
49
// Step H3, repeat until T is within the interval [1, n - 1]
50
50
while ( ( T . signum ( ) <= 0 ) || ( T . compareTo ( curve . n ) >= 0 ) || ! checkSig ( T ) ) {
51
- k = crypto . HmacSHA256 ( Buffer . concat ( [ v , new Buffer ( [ 0 ] ) ] ) , k )
51
+ k = crypto . HmacSHA256 ( Buffer . concat ( [ v , new Buffer . from ( [ 0 ] ) ] ) , k )
52
52
v = crypto . HmacSHA256 ( v , k )
53
53
54
54
// Step H1/H2a, again, ignored as tlen === qlen (256 bit)
55
55
// Step H2b again
56
56
v = crypto . HmacSHA256 ( v , k )
57
-
57
+
58
58
T = BigInteger . fromBuffer ( v )
59
59
}
60
60
@@ -63,24 +63,24 @@ function deterministicGenerateK(curve, hash, d, checkSig, nonce) {
63
63
}
64
64
65
65
function sign ( curve , hash , d , nonce ) {
66
-
66
+
67
67
var e = BigInteger . fromBuffer ( hash )
68
68
var n = curve . n
69
69
var G = curve . G
70
-
70
+
71
71
var r , s
72
72
var k = deterministicGenerateK ( curve , hash , d , function ( k ) {
73
73
// find canonically valid signature
74
74
var Q = G . multiply ( k )
75
-
75
+
76
76
if ( curve . isInfinity ( Q ) ) return false
77
-
77
+
78
78
r = Q . affineX . mod ( n )
79
79
if ( r . signum ( ) === 0 ) return false
80
-
80
+
81
81
s = k . modInverse ( n ) . multiply ( e . add ( d . multiply ( r ) ) ) . mod ( n )
82
82
if ( s . signum ( ) === 0 ) return false
83
-
83
+
84
84
return true
85
85
} , nonce )
86
86
@@ -124,7 +124,7 @@ function verifyRaw(curve, e, signature, Q) {
124
124
125
125
// 1.4.7 Set v = xR mod n
126
126
var v = xR . mod ( n )
127
-
127
+
128
128
// 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
129
129
return v . equals ( r )
130
130
}
0 commit comments