Libra uses the ed25519 scheme for transaction signing. Most libra wallet implementations use HKDF scheme for derivation of “child” private keys, including Libra Core.
But HKDF doesn’t give you a way to use a master public key for addresses generation (like e.g. BIP32). Generation of addresses with master public keys is a really important feature that adds lots of opportunities for security improvements, external audits, and many other useful things (see https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki).
But BIP32 is designed for Secp256k1 signing scheme.
There is an article written by Dmitry Khovratovich and Jason Law
Describing the way how to use the BIP32 derivation scheme within ed25519.
I’ve created an example in Python how to derive new Libra address from master public key and then send coins from this address: https://github.com/selevit/libra_bip32
What was the reason why you used the HKDF scheme instead of adoption of BIP32 or creating a similar one? Will there be a capability to generate new addresses using master public keys using gRPC or with some official language-specific libraries?
Thanks a lot for the answer!