Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

hdkey-secp256r1

backslash4726MIT1.1.0TypeScript support: included

BIP32 hierarchical deterministic keys using secp256r1 curve

bitcoin, bip32, bip, key, hierarchical, deterministic, crypto, secp256r1

readme

hdkey - secp256r1 version

NPM Package build status js-standard-style

A JavaScript component for BIP32(hierarchical deterministic keys).

Installation

npm i --save @ont-community/hdkey-secp256r1

Usage

example:

var HDKey = require('@ont-community/hdkey-secp256r1')
var seed = 'a0c42a9c3ac6abf2ba6a9946ae83af18f51bf1c9fa7dacc4c92513cc4dd015834341c775dcd4c0fac73547c5662d81a9e9361a0aac604a73a321bd9103bce8af'
var hdkey = HDKey.fromMasterSeed(new Buffer(seed, 'hex'))
console.log(hdkey.privateExtendedKey)
// => 'xprv9s21ZrQH143K2SKJK9EYRW3Vsg8tWVHRS54hAJasj1eGsQXeWDHLeuu5hpLHRbeKedDJM4Wj9wHHMmuhPF8dQ3bzyup6R7qmMQ1i1FtzNEW'
console.log(hdkey.publicExtendedKey)
// => 'xpub661MyMwAqRbcEvPmRAmYndzERhyNux1GoHzHxgzVHMBFkCro3kbbCiDZZ5XabZDyXPj5mH3hktvkjhhUdCQxie5e1g4t2GuAWNbPmsSfDp2'

HDKey.fromMasterSeed(seedBuffer[, versions])

Creates an hdkey object from a master seed buffer. Accepts an optional versions object.

var seed = 'a0c42a9c3ac6abf2ba6a9946ae83af18f51bf1c9fa7dacc4c92513cc4dd015834341c775dcd4c0fac73547c5662d81a9e9361a0aac604a73a321bd9103bce8af'
var hdkey = HDKey.fromMasterSeed(new Buffer(seed, 'hex'))

HDKey.fromExtendedKey(extendedKey[, versions])

Creates an hdkey object from a xprv or xpub extended key string. Accepts an optional versions object.

var key = 'xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j'
var hdkey = HDKey.fromExtendedKey(key)

or

var key = 'xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt'
var hdkey = HDKey.fromExtendedKey(key)

HDKey.fromJSON(obj)

Creates an hdkey object from an object created via hdkey.toJSON().


hdkey.derive(path)

Derives the hdkey at path from the current hdkey.

var seed = 'fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542'
var hdkey = HDKey.fromMasterSeed(Buffer.from(seed, 'hex'))
var childkey = hdkey.derive("m/0/2147483647'/1")

console.log(childkey.privateExtendedKey)
// -> "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef"
console.log(childkey.publicExtendedKey)
// -> "xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon"

hdkey.sign(hash)

Signs the buffer hash with the private key using secp256k1 and returns the signature as a buffer.

hdkey.verify(hash, signature)

Verifies that the signature is valid for hash and the hdkey's public key using secp256k1. Returns true for valid, false for invalid. Throws if the hash or signature is the wrong length.

hdkey.toJSON()

Serializes the hdkey to an object that can be JSON.stringify()ed.

var seed = 'fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542'
var hdkey = HDKey.fromMasterSeed(Buffer.from(seed, 'hex'))

console.log(hdkey.toJSON())
// -> {
//      xpriv: 'xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U',
//      xpub: 'xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB'
//    }

hdkey.privateKey

Getter/Setter of the hdkey's private key, stored as a buffer.

hdkey.publicKey

Getter/Setter of the hdkey's public key, stored as a buffer.

hdkey.privateExtendedKey

Getter/Setter of the hdkey's xprv, stored as a string.

hdkey.publicExtendedKey

Getter/Setter of the hdkey's xpub, stored as a string.

References

License

MIT

changelog

1.0.0 / 2018-05-24

  • drop support for all Node.js versions 4 and earlier
  • fix derive() path validation (#20)

0.8.0 / 2018-02-06

  • add sign() and verify()
  • upgrade to safe-buffer

0.7.1 / 2016-05-26

  • fix bug when privateKey is null, privateExtendedKey should not throw, and return null #7

0.7.0 / 2016-03-22

  • upgrade from ecurve to secp256k1. #5

0.6.0 / 2015-07-02

  • breaking (same day though, haha). Changed publicExtendedKey/privateExtendedKey in JSON methods to xpub/xpriv
  • export HARDENED_OFFSET

0.5.0 / 2015-07-02

  • JavaScript Standard Style
  • fix rare condition for BIP32 consistency: #1
  • added toJSON()/fromJSON()

0.4.0 / 2014-09-24

  • dropped sha512 dependency and upgraded to crypto-browserify that supports sha512

0.3.1 / 2014-07-11

  • removed superfluous code this._privateKeyBigInteger

0.3.0 / 2014-06-29

  • bugfix: if private key was less than 32 bytes, pad out to 32 bytes with leading zeros (this happens in derive)
  • changed behavior of privateExtendedKey() and publicExtendedKey() to return base 58 encoded string instead of Buffer
  • changed behavior of fromExtendedKey() from accepting a type of Buffer bytes to base58 string

0.2.0 / 2014-06-25

  • upgraded "ecurve": "^0.8.0" to "ecurve": "^1.0.0"
  • added functionality to derive public to public child keys

0.1.0 / 2014-06-16

  • removed semicolons per http://cryptocoinjs.com/about/contributing/#semicolons
  • removed ECKey dep
  • added ecurve dep
  • removed terst dev dep for assert
  • added method fromMasterSeed(seedBuffer, [versions])
  • changed constructor from new HDKey(masterSeed, [versions]) to new HDKey([versions])
  • added properties: privateKey and publicKey
  • removed method getIdentifier(), added property identifier
  • removed method getFingerprint(), added property fingerprint
  • renamed private to privateExtendedKey
  • renamed public to publicExtendedKey
  • added method fromExtendedKey()

0.0.1 / 2014-05-29

  • initial release