Derivator
Ruby implementation of EC HD key derivation (SLIP10, BIP32) and mnemonic sentence interpretation (BIP39).
Supports secp256k1 (Bitcoin), nist256p1 (P-256) and ed25519 (Edwards 25519) elliptic curves.
Installation
Add this line to your application's Gemfile:
gem 'derivator'
And then execute:
$ bundle install
Or install it yourself as:
$ gem install derivator
Usage
Generate mnemonic
# bash
derivator_mnemonic
# ruby
require 'derivator'
puts Derivator::Mnemonic.generate
Generate seed from mnemonic
# bash
echo "finish merry file canoe cruel meadow spoil sunset pigeon depend brush step" | \
derivator_seed_from_mnemonic
echo "spike kit woman maze culture uncle way tobacco saddle silly sunset certain" | \
derivator_seed_from_mnemonic "my_mnemonic_password"
# ruby
require 'derivator'
mnemonic = 'finish merry file canoe cruel meadow spoil sunset pigeon depend brush step'
puts Derivator::Mnemonic.seed(mnemonic)
mnemonic = 'spike kit woman maze culture uncle way tobacco saddle silly sunset certain'
puts Derivator::Mnemonic.seed(mnemonic, 'my_mnemonic_password')
Generate master key and chain code from seed
# bash
echo 000102030405060708090a0b0c0d0e0f | derivator_key_from_seed ed25519
# ruby
require 'derivator'
seed = '000102030405060708090a0b0c0d0e0f'
key = Derivator::Key.from_seed(seed, :ed25519)
puts "#{key.private_key_hex} #{key.chain_code_hex}"
Derive child key from master key and chain code
# bash
echo 2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7 90046a93de5380a72b5e45010748567d5ea02bbf6522f979e05c0d8d8ca9fffb \
derivator_key_from_parent "m/0'/1'/2'/2'/1000000000'" ed25519
# ruby
require 'derivator'
master_private_key_hex = '2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7'
master_chain_code_hex = '90046a93de5380a72b5e45010748567d5ea02bbf6522f979e05c0d8d8ca9fffb'
key = Derivator::Key.from_hex(master_private_key_hex, master_chain_code_hex, :ed25519)
derived_key = key.derive("m/0'/1'/2'/2'/1000000000'")
puts "#{derived_key.private_key_hex} #{derived_key.chain_code_hex}"
Derive public key from private key
# bash
echo 2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7 | \
derivator_public_from_private ed25519
# ruby
require 'derivator'
private_key_hex = '2b4be7f19ee27bbf30c667b642d5f4aa69fd169872f8fc3059c08ebae2eb19e7'
key = Derivator::Key.from_hex(private_key_hex, '', :ed25519)
puts key.public_key_hex
License
The gem is available as open source under the terms of the MIT License.