dcrd/hdkeychain
Dave Collins b21feec2cd
secp256k1: Use field val for y coord decompression.
This modifies the core logic for decompressing a y coordinate from an x
coordinate, which is primarily used when parsing public keys, but can
also be used when recovering public keys from compact signatures in the
future, to make use of field vals and their recently-added optimized
modular square root calculation capability and also adds comprehensive
tests to ensure the decompression works properly independent of public
key parsing.

Since the public key type is still defined in terms of big ints, the
parsing function still relies on them and so the existing
decompressPoint function was updated to make use of the new function and
perform the necessary conversion to and from big ints.  Ultimately, the
goal is make that unnecessary.

This is work towards eventually using the new more efficient mod n
scalar throughout.

The following benchmark shows a before and after comparison of
decompressing a public key:

benchmark                   old ns/op    new ns/op   delta
-------------------------------------------------------------
BenchmarkPubKeyDecompress   43574        10961       -74.85%

benchmark                   old allocs   new allocs  delta
-------------------------------------------------------------
BenchmarkPubKeyDecompress   28           0           -100.00%

benchmark                   old bytes    new bytes   delta
-------------------------------------------------------------
BenchmarkPubKeyDecompress   2586         0           -100.00%
2020-02-20 12:08:29 -06:00
..
bench_test.go hdkeychain: Use mock net params in tests. 2019-03-29 11:26:40 -05:00
doc.go multi: replace godoc.org with pkg.go.dev 2020-02-18 19:35:19 -06:00
example_test.go hdkeychain: Remove ECPubKey. 2020-02-14 19:05:53 -06:00
extendedkey_test.go secp256k1: Use field val for y coord decompression. 2020-02-20 12:08:29 -06:00
extendedkey.go hdkeychain: Use direct hashes and remove dcrutil dep 2020-02-16 19:10:26 -06:00
go.mod hdkeychain: Use direct hashes and remove dcrutil dep 2020-02-16 19:10:26 -06:00
go.sum chaincfg: Start v3 module dev cycle. 2020-01-29 13:24:14 -06:00
README.md multi: replace godoc.org with pkg.go.dev 2020-02-18 19:35:19 -06:00

hdkeychain

Build Status ISC License Doc

Package hdkeychain provides an API for Decred hierarchical deterministic extended keys (based on BIP0032).

A comprehensive suite of tests is provided to ensure proper functionality.

Feature Overview

  • Full BIP0032 implementation
  • Single type for private and public extended keys
  • Convenient cryptographically secure seed generation
  • Simple creation of master nodes
  • Support for multi-layer derivation
  • Easy serialization and deserialization for both private and public extended keys
  • Support for custom networks by accepting a network parameters interface
  • Allows obtaining the underlying serialized secp256k1 pubkeys and privkeys directly so they can either be used directly or optionally converted to the secp256k1 types which provide powerful tools for working with them to do things like sign transactions and generate payment scripts
  • Uses the highly-optimized secp256k1 package
  • Code examples including:
    • Generating a cryptographically secure random seed and deriving a master node from it
    • Default HD wallet layout as described by BIP0032
    • Audits use case as described by BIP0032
  • Comprehensive test coverage including the BIP0032 test vectors
  • Benchmarks

Installation and Updating

$ go get -u github.com/decred/dcrd/hdkeychain

Examples

License

Package hdkeychain is licensed under the copyfree ISC License.