Trying to understand parent fingerprint in HD wallets

0

I'm trying to implement a barebones HD wallet generator in C#. I'm starting with a mnemonic and derivation path m/0' and want to generate BIP141 p2wpkh-in-p2sh addresses. Obviously for the Master Node the fingerprint is 0x00000000, but when I get to depth 1 (0'), I need to calculate the fingerprint of the parent key. My question is, is the formula RipeMD160(parentPrivKey) or RipeMD160(SHA256(parentPrivKey))? I've been looking at Ian Coleman's implementation in javascript (https://iancoleman.io/bip39/) and he seems to do the latter one. However, on this site under "Parent Fingerprint", it says it's the former.

MrPuzzler

Posted 2018-07-02T15:07:30.807

Reputation: 43

Answers

1

It's ripemd160(sha256(parentpriv)) also known as hash160(parentpriv) source. There is also a python implementation here

Mike D

Posted 2018-07-02T15:07:30.807

Reputation: 1 571

0

Can't use comments because of reputation, but both the question and the answer is saying that the fingerprint is based on private key. It should be the hash160 of the PUBLIC key. for even if you are deriving a private key you should use the parents PUBLIC key for generating the fingerprint. This is important to make both a derived public and a derived private key having the same fingerprint so you can relate them to each other.

Jim Hansson

Posted 2018-07-02T15:07:30.807

Reputation: 1