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.


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


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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.