HDetEcKey

HDetEcKey is a Ruby implement of en.bitcoin.it/wiki/Deterministic_Wallet[Hierachical Deterministic wallets] according to the specification github.com/bitcoin/bips/blob/master/bip-0032.mediawiki[BIP0032].

What is use for ?

How to get it !

source, bash

git clone gitlab.com/elionne/hdet-ec-key.git


Or in a neer future:

source, bash

gem install hdet-ec-key


Prerequistes

  • Ruby 2.5.0

  • Openssl (ruby included)

Support of other version of Ruby should be possible.

Usage

For more details about how Herarchical Deterministic Wallet works, please see the github.com/bitcoin/bips/blob/master/bip-0032.mediawiki[BIP0032] specifications.

Generate master key

First you need to generate the first key. The point where all keys starts. The BIP32 standard specify simple method with `HMAC512`. The default key is _Bitcoin seed_ and the seed is choosen by the user.

To generate a master key:

source, ruby

seed = [“000102030405060708090a0b0c0d0e0f”].pack(“H*”) master_key = HDetEc::Key.generate_master_key(seed)


No convertion of the given string is operated, the `seed` is used _as is_. The `key` can be change by setting the second parameter:

source, ruby

master_key = HDetEc::Key.generate_master_key(seed, “my special key”)


Public key, private and public derivation

To get the public key from the a key:

source, ruby

pub = master_key.public_key

# or a more verbose version pub = master.public_key_from_private


Then you can derive, ether public or private key:

source, ruby

pub.derive([0, 1, 2000]) master_key.derive(0, 1.h, 2000)


The _derivation path_ is determined by an array of index. the #h function for interger means harderned index, only available for private key derivation.

Serialization

Each keys can be serialized in BIP32 specified form:

source,ruby

pub.serialize # xpub.…. master_key.serialize # xprv.….