class HDKEY::KeyRing
Public Class Methods
ckd_priv(keys, index, hardened_offset = HARDENED_TESTNET)
click to toggle source
# File lib/ed25519-hd.rb, line 36 def self.ckd_priv(keys, index, hardened_offset = HARDENED_TESTNET) seed = [0, keys.private_key, (index + hardened_offset)].pack("CH64N").unpack("H*").first get_keys(seed, keys.chain_code) end
derive_path(path, seed, hardened_offset = HARDENED_TESTNET)
click to toggle source
# File lib/ed25519-hd.rb, line 50 def self.derive_path(path, seed, hardened_offset = HARDENED_TESTNET) raise "Invalid derivation path. Expected BIP32 format" if PATH_REGEX.match(path).nil? master_keys = get_master_key_from_seed(seed) path.gsub("'", "").split("/")[1..-1].map { |v| v.to_i }.reduce(master_keys) { |parent_keys, segment| ckd_priv(parent_keys, segment, hardened_offset) } end
get_keys(seed, key)
click to toggle source
# File lib/ed25519-hd.rb, line 23 def self.get_keys(seed, key) key = [key].pack("H*") unless key == ED25519_CURVE digest = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new("sha512"), key, [seed].pack("H*")) private_key = digest[0..63] chain_code = digest[64..-1] Keys.new(private_key, chain_code) end
get_master_key_from_seed(seed)
click to toggle source
# File lib/ed25519-hd.rb, line 32 def self.get_master_key_from_seed(seed) get_keys(seed, ED25519_CURVE) end
get_public_key(private_key, with_zero_byte = true)
click to toggle source
# File lib/ed25519-hd.rb, line 41 def self.get_public_key(private_key, with_zero_byte = true) signing_key = Ed25519::SigningKey.new([private_key].pack("H*")) public_key = signing_key.keypair.unpack("H*").first[64..-1] if with_zero_byte public_key = [0, public_key].pack("CH64").unpack("H*").first end public_key end