Skip to content

Conversation

@datnguyencse
Copy link

Neo using prime256v1 so I have added new method to MoneyTree to set the curve name and id.
Tested with prime256v1 with node_for_path function.

@coveralls
Copy link

coveralls commented Feb 14, 2020

Coverage Status

Coverage decreased (-0.2%) to 99.215% when pulling e5ba806 on datnguyencse:secp256r1 into 2686577 on GemHQ:master.

@datnguyencse
Copy link
Author

Some path return incorrect public key for same master pub/priv key.
Example:
Path 'm/0/2':

----------- Prime256v1: Ruby Priv to Addr for path 'm/0/2' ------------
prik: fc72877a77ca04fc2ec4a970284e2987501aa2c16964b10d5d5394a7969c6fd2
wifk: L5gSDcGVPNM6X5njUBzJGXqM2cUsNdyCPgWTBTo1nhaFnDDsgJ1L
pubk: 024067d37568bae4d79565e05d342a628a913b74b7e9b99086d98972489ee96e9c
addr: AMiH61hvJesiXRnLr4KQFmDz2mTgrnFnfb

----------- Prime256v1: Ruby Pubk to Addr for path 'm/0/2' ------------
pubk: 024067d37568bae4d79565e05d342a628a913b74b7e9b99086d98972489ee96e9c
addr: AMiH61hvJesiXRnLr4KQFmDz2mTgrnFnfb

Path: 'm/0/4' return incorrect address for same path

----------- Prime256v1: Ruby Priv to Addr for path 'm/0/4' ------------
prik: 29cfcd12dc8c81a844c1f7ce325e71e2d483b91d9b43a8a788921bf8dda8d9d4
wifk: KxczDtbZgz4KoC1nPdGuhUKhwBrXZMbn2TcMaDdJX7BMSXwNBJgK
pubk: 02efad86864c7176777a05d491543f01b597688a72fd8c2d8853306e6b2d719b80
addr: ARQE2SofSmpX8iBvo4hCuiF6ijQ2SRidVF

----------- Prime256v1: Ruby Pubk to Addr for path 'm/0/4' ------------
pubk: 02f6b6822a72e4026a4153dcfc3593731727a3e5e745f9c036349517131b55ff3f
addr: AP2Q8MZPRHFP5ymKpY75nh4vGmXHREzakv

Source code:

require 'money-tree'
require 'bitcoin'
require 'byebug'

DEFAULT_ADDRESS_VERSION = '17'
PUSHBYTES33 = '21'
CHECKSIG = 'ac'

path = "m/0/4"

MoneyTree.setCurve('prime256v1', 415)
master_public_key = "xpub661MyMwAqRbcGTJx1g8LZPnRgrAZYnHo8exqQVQinkQjKQQ8SvX6UCcWNgjBPqmKQdhq4MLHMxSedwxFfsmzuGr8F6RLyd87kHpkHFgP3KX"
master_private_key = "xprv9s21ZrQH143K3yEUuebLCFqh8pL59KZwmS3Ec717EQskSc4yuPCqvQJ2XRe68rNth2ouPbgPE14PUDNe9zS57mjkjajASfvbLn457VZz62E"

puts "\n----------- Prime256v1: Ruby Priv to Addr for path '#{path}' ------------"
# Using private key
child_pri_node = MoneyTree::Node.from_bip32(master_private_key).node_for_path(path)
puts "prik: " + child_pri_node.private_key.to_hex()
puts "wifk: " + child_pri_node.private_key.to_wif()
puts "pubk: " + child_pri_node.public_key.to_hex()
puts "addr: " + Bitcoin.encode_address(Bitcoin.hash160(PUSHBYTES33 + child_pri_node.public_key.to_hex() + CHECKSIG), '17')

# # Using public key
puts "\n----------- Prime256v1: Ruby Pubk to Addr for path '#{path}' ------------"
child_pub_node = MoneyTree::Node.from_bip32(master_public_key).node_for_path(path)
puts "pubk: " + child_pub_node.public_key.to_hex
puts "addr: " + Bitcoin.encode_address(Bitcoin.hash160(PUSHBYTES33 + child_pub_node.public_key.to_hex + CHECKSIG), '17')

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants