Skip to content

Commit 9510af1

Browse files
committed
EC*Key: add .curve static property for public API
1 parent cba6c7a commit 9510af1

File tree

4 files changed

+45
-8
lines changed

4 files changed

+45
-8
lines changed

src/eckey.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,21 @@ var BigInteger = require('bigi')
99
var ECPubKey = require('./ecpubkey')
1010

1111
var ecurve = require('ecurve')
12-
var curve = ecurve.getCurveByName('secp256k1')
12+
var secp256k1 = ecurve.getCurveByName('secp256k1')
1313

1414
function ECKey(d, compressed) {
1515
assert(d.signum() > 0, 'Private key must be greater than 0')
16-
assert(d.compareTo(curve.n) < 0, 'Private key must be less than the curve order')
16+
assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
1717

18-
var Q = curve.G.multiply(d)
18+
var Q = ECKey.curve.G.multiply(d)
1919

2020
this.d = d
2121
this.pub = new ECPubKey(Q, compressed)
2222
}
2323

24+
// Constants
25+
ECKey.curve = secp256k1
26+
2427
// Static constructors
2528
ECKey.fromWIF = function(string) {
2629
var payload = base58check.decode(string)
@@ -51,7 +54,7 @@ ECKey.makeRandom = function(compressed, rng) {
5154
assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
5255

5356
var d = BigInteger.fromBuffer(buffer)
54-
d = d.mod(curve.n)
57+
d = d.mod(ECKey.curve.n)
5558

5659
return new ECKey(d, compressed)
5760
}
@@ -75,7 +78,7 @@ ECKey.prototype.toWIF = function(network) {
7578

7679
// Operations
7780
ECKey.prototype.sign = function(hash) {
78-
return ecdsa.sign(curve, hash, this.d)
81+
return ecdsa.sign(ECKey.curve, hash, this.d)
7982
}
8083

8184
module.exports = ECKey

src/ecpubkey.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ var networks = require('./networks')
66
var Address = require('./address')
77

88
var ecurve = require('ecurve')
9-
var curve = ecurve.getCurveByName('secp256k1')
9+
var secp256k1 = ecurve.getCurveByName('secp256k1')
1010

1111
function ECPubKey(Q, compressed) {
1212
if (compressed === undefined) compressed = true
@@ -18,9 +18,12 @@ function ECPubKey(Q, compressed) {
1818
this.Q = Q
1919
}
2020

21+
// Constants
22+
ECPubKey.curve = secp256k1
23+
2124
// Static constructors
2225
ECPubKey.fromBuffer = function(buffer) {
23-
var Q = ecurve.Point.decodeFrom(curve, buffer)
26+
var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
2427
return new ECPubKey(Q, Q.compressed)
2528
}
2629

@@ -36,7 +39,7 @@ ECPubKey.prototype.getAddress = function(network) {
3639
}
3740

3841
ECPubKey.prototype.verify = function(hash, signature) {
39-
return ecdsa.verify(curve, hash, signature, this.Q)
42+
return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
4043
}
4144

4245
// Export functions

test/eckey.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var assert = require('assert')
22
var crypto = require('crypto')
3+
var ecurve = require('ecurve')
34
var networks = require('../src/networks')
45
var sinon = require('sinon')
56

@@ -42,6 +43,21 @@ describe('ECKey', function() {
4243
})
4344
})
4445

46+
it('uses the secp256k1 curve by default', function() {
47+
var secp256k1 = ecurve.getCurveByName('secp256k1')
48+
49+
for (var property in secp256k1) {
50+
// FIXME: circular structures in ecurve
51+
if (property === 'G') continue
52+
if (property === 'infinity') continue
53+
54+
var actual = ECKey.curve[property]
55+
var expected = secp256k1[property]
56+
57+
assert.deepEqual(actual, expected)
58+
}
59+
})
60+
4561
describe('fromWIF', function() {
4662
fixtures.valid.forEach(function(f) {
4763
f.WIFs.forEach(function(wif) {

test/ecpubkey.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@ describe('ECPubKey', function() {
3535
})
3636
})
3737

38+
it('uses the secp256k1 curve by default', function() {
39+
var secp256k1 = ecurve.getCurveByName('secp256k1')
40+
41+
for (var property in secp256k1) {
42+
// FIXME: circular structures in ecurve
43+
if (property === 'G') continue
44+
if (property === 'infinity') continue
45+
46+
var actual = ECPubKey.curve[property]
47+
var expected = secp256k1[property]
48+
49+
assert.deepEqual(actual, expected)
50+
}
51+
})
52+
3853
describe('fromHex/toHex', function() {
3954
it('supports compressed points', function() {
4055
var pubKey = ECPubKey.fromHex(fixtures.compressed.hex)

0 commit comments

Comments
 (0)