Browse Source

removed eckey dep, added ecurve dep

master
JP Richardson 11 years ago
parent
commit
604cae6aa5
  1. 3
      CHANGELOG.md
  2. 34
      lib/hdkey.js
  3. 4
      package.json

3
CHANGELOG.md

@ -1,7 +1,8 @@
x.y.z / 2014-06-dd x.y.z / 2014-06-dd
------------------ ------------------
- removed semicolons per http://cryptocoinjs.com/about/contributing/#semicolons - removed semicolons per http://cryptocoinjs.com/about/contributing/#semicolons
- - removed `ECKey` dep
- added `ecurve` dep
0.0.1 / 2014-05-29 0.0.1 / 2014-05-29
------------------ ------------------

34
lib/hdkey.js

@ -1,8 +1,9 @@
var sha512 = require('sha512')
var ECKey = require('eckey')
var BigInteger = require('bigi')
var crypto = require('crypto')
var assert = require('assert') var assert = require('assert')
var crypto = require('crypto')
var BigInteger = require('bigi')
var ecurve = require('ecurve')
var ecparams = ecurve.getCurveByName('secp256k1')
var sha512 = require('sha512')
module.exports = HDKey module.exports = HDKey
@ -11,7 +12,8 @@ var HARDENED_OFFSET = 0x80000000
var LEN = 78 var LEN = 78
//I hate that this is hardcoded, but for now... //I hate that this is hardcoded, but for now...
var N = BigInteger.fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141") //var N = BigInteger.fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141")
var N = ecparams.params.n
//Bitcoin hardcoded by default, can use package `coininfo` for others //Bitcoin hardcoded by default, can use package `coininfo` for others
var VERSIONS = {private: 0x0488ADE4, public: 0x0488B21E} var VERSIONS = {private: 0x0488ADE4, public: 0x0488B21E}
@ -24,8 +26,8 @@ function HDKey(seed) {
var IL = I.slice(0, 32) var IL = I.slice(0, 32)
var IR = I.slice(32) var IR = I.slice(32)
this.priv = new ECKey(IL, true) setPrivPub(this, IL)
this.pub = this.priv.publicPoint
this.chaincode = IR this.chaincode = IR
this.depth = 0 this.depth = 0
this.index = 0 this.index = 0
@ -60,7 +62,7 @@ Object.defineProperty(HDKey.prototype, 'private', {
// 0x00 + k for private keys // 0x00 + k for private keys
buffer.writeUInt8(0, 45) buffer.writeUInt8(0, 45)
this.priv.privateKey.copy(buffer, 46) this.priv.copy(buffer, 46)
return buffer return buffer
@ -150,7 +152,7 @@ HDKey.prototype.deriveChild = function(index) {
if (isHardened) { if (isHardened) {
assert(this.priv, 'Could not derive hardened child key') assert(this.priv, 'Could not derive hardened child key')
var pk = this.priv.privateKey var pk = this.priv
var zb = new Buffer([0]) var zb = new Buffer([0])
pk = Buffer.concat([zb, pk]) pk = Buffer.concat([zb, pk])
@ -178,15 +180,16 @@ HDKey.prototype.deriveChild = function(index) {
// Private parent key -> private child key // Private parent key -> private child key
if (this.priv) { if (this.priv) {
// ki = parse256(IL) + kpar (mod n) // ki = parse256(IL) + kpar (mod n)
var ki = pIL.add(BigInteger.fromBuffer(this.priv.privateKey)).mod(N) var ki = pIL.add(BigInteger.fromBuffer(this.priv)).mod(N)
// In case parse256(IL) >= n or ki == 0, one should proceed with the next value for i // In case parse256(IL) >= n or ki == 0, one should proceed with the next value for i
if (pIL.compareTo(N) >= 0 || ki.signum() === 0) { if (pIL.compareTo(N) >= 0 || ki.signum() === 0) {
return this.derive(index + 1) return this.derive(index + 1)
} }
hd.priv = new ECKey(ki.toBuffer(), true) //hd.priv = new ECKey(ki.toBuffer(), true)
hd.pub = hd.priv.publicPoint //hd.pub = hd.priv.publicPoint
setPrivPub(hd, ki.toBuffer())
// Public parent key -> public child key // Public parent key -> public child key
} else { } else {
@ -209,3 +212,10 @@ HDKey.prototype.deriveChild = function(index) {
return hd return hd
} }
//temporary
function setPrivPub(hd, privKey) {
hd.priv = privKey
hd.compressed = true
hd.pub = ecparams.params.G.multiply(BigInteger.fromBuffer(privKey))
}

4
package.json

@ -30,8 +30,8 @@
}, },
"dependencies": { "dependencies": {
"sha512": "0.0.1", "sha512": "0.0.1",
"eckey": "^0.4.2", "bigi": "^1.1.0",
"bigi": "^1.1.0" "ecurve": "^0.8.0"
}, },
"scripts": { "scripts": {
"unit": "./node_modules/.bin/mocha", "unit": "./node_modules/.bin/mocha",

Loading…
Cancel
Save