Skip to content

Commit ef2818a

Browse files
test: add comprehensive BLS HD derivation tests matching C++ implementation
- Add long derivation path test (m/(2^31+5)/0/0/(2^31+56)/70/4) - Add serialization roundtrip tests for ExtendedBLSPrivKey and ExtendedBLSPubKey - Add exact C++ test vectors for compatibility verification - Add legacy HD compatibility tests - Add extended unhardened derivation tests - Refactor hardened index creation to use from_hardened_idx() method - Ensure full test parity with C++ bls-signatures library All 16 BLS BIP32 tests passing with complete coverage
1 parent 109286f commit ef2818a

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

key-wallet/src/derivation_bls_bip32.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -868,10 +868,10 @@ mod tests {
868868

869869
// Build the long derivation path: m/(2^31+5)/0/0/(2^31+56)/70/4
870870
let derived = master
871-
.derive_priv(ChildNumber::from((1u32 << 31) + 5)).unwrap() // Hardened (2^31+5)
871+
.derive_priv(ChildNumber::from_hardened_idx(5).unwrap()).unwrap() // Hardened (2^31+5)
872872
.derive_priv(ChildNumber::from_normal_idx(0).unwrap()).unwrap()
873873
.derive_priv(ChildNumber::from_normal_idx(0).unwrap()).unwrap()
874-
.derive_priv(ChildNumber::from((1u32 << 31) + 56)).unwrap() // Hardened (2^31+56)
874+
.derive_priv(ChildNumber::from_hardened_idx(56).unwrap()).unwrap() // Hardened (2^31+56)
875875
.derive_priv(ChildNumber::from_normal_idx(70).unwrap()).unwrap()
876876
.derive_priv(ChildNumber::from_normal_idx(4).unwrap()).unwrap();
877877

@@ -993,8 +993,8 @@ mod tests {
993993
let esk1 = ExtendedBLSPrivKey::new_master(Network::Testnet, &seed1).unwrap();
994994

995995
// Test hardened child derivation
996-
let esk77_hardened = esk1.derive_priv(ChildNumber::from(77 + (1u32 << 31))).unwrap();
997-
let esk77_hardened_copy = esk1.derive_priv(ChildNumber::from(77 + (1u32 << 31))).unwrap();
996+
let esk77_hardened = esk1.derive_priv(ChildNumber::from_hardened_idx(77).unwrap()).unwrap();
997+
let esk77_hardened_copy = esk1.derive_priv(ChildNumber::from_hardened_idx(77).unwrap()).unwrap();
998998

999999
// Keys derived with same index should be equal
10001000
assert_eq!(
@@ -1153,12 +1153,11 @@ mod tests {
11531153
let master = ExtendedBLSPrivKey::new_master(Network::Testnet, &seed).unwrap();
11541154

11551155
// Test with index 77 (matching C++ test)
1156-
let hardened_index = 77 + (1u32 << 31);
11571156
let unhardened_index = 77;
11581157

11591158
// Derive hardened child
1160-
let child_hardened = master.derive_priv(ChildNumber::from(hardened_index)).unwrap();
1161-
let child_hardened_copy = master.derive_priv(ChildNumber::from(hardened_index)).unwrap();
1159+
let child_hardened = master.derive_priv(ChildNumber::from_hardened_idx(77).unwrap()).unwrap();
1160+
let child_hardened_copy = master.derive_priv(ChildNumber::from_hardened_idx(77).unwrap()).unwrap();
11621161

11631162
// Derive unhardened child
11641163
let child_unhardened = master.derive_priv(ChildNumber::from_normal_idx(unhardened_index).unwrap()).unwrap();

0 commit comments

Comments
 (0)