dcrd/hdkeychain
Dave Collins 6da2ef8106
secp256k1: Use specialized types in public key.
This updates the internal implementation of the PublicKey type to use
the FieldVal type instead of big.Ints and modifies NewPublicKey to
accept the FieldVals and updates all callers and tests in the repository
accordingly.

Public key parsing and serialization are now completely free of
big.Ints.

Finally, it moves the X and Y methods to the ellipticadaptor.go file
since they are only intended to provide interop with the standard
library elliptic curve adaptor code.

This reduces the number of allocations needed in the ecdsa compact
signature recovery as well as schnorr signature verification and results
in a slight speedup for both.

The following benchmarks show the before and after comparison:

benchmark                 old ns/op    new ns/op    delta
----------------------------------------------------------
BenchmarkRecoverCompact   198012       196173       -0.93%
BenchmarkSigVerify        179170       177805       -0.76%

benchmark                 old allocs   new allocs   delta
-----------------------------------------------------------
BenchmarkRecoverCompact   36           32           -11.11%
BenchmarkSigVerify        19           15           -21.05%

benchmark                 old bytes    new bytes    delta
-----------------------------------------------------------
BenchmarkRecoverCompact   1745         1617         -7.34%
BenchmarkSigVerify        977          848          -13.20%
2020-04-08 14:07:18 -05:00
..
bench_test.go hdkeychain: Use mock net params in tests. 2019-03-29 11:26:40 -05:00
doc.go hdkeychain: Fix references to methods in package docs 2020-03-11 11:34:50 -05:00
example_test.go hdkeychain: Remove Neuter error return 2020-03-12 11:37:37 -05:00
extendedkey_test.go hdkeychain: Use errors api and require go 1.13+. 2020-04-08 13:59:05 -05:00
extendedkey.go secp256k1: Use specialized types in public key. 2020-04-08 14:07:18 -05:00
go.mod hdkeychain: Use errors api and require go 1.13+. 2020-04-08 13:59:05 -05: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.