pczt: Add `Zip32Derivation::extract_account_index`
This commit is contained in:
parent
0d39b4444f
commit
29ec9ada60
|
@ -7,6 +7,9 @@ and this library adheres to Rust's notion of
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- `sapling_crypto::pczt::Zip32Derivation::extract_account_index`
|
||||||
|
|
||||||
## [0.4.0] - 2024-12-16
|
## [0.4.0] - 2024-12-16
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
29
src/pczt.rs
29
src/pczt.rs
|
@ -306,3 +306,32 @@ pub struct Zip32Derivation {
|
||||||
/// The sequence of indices corresponding to the shielded HD path.
|
/// The sequence of indices corresponding to the shielded HD path.
|
||||||
derivation_path: Vec<ChildIndex>,
|
derivation_path: Vec<ChildIndex>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Zip32Derivation {
|
||||||
|
/// Extracts the ZIP 32 account index from this derivation path.
|
||||||
|
///
|
||||||
|
/// Returns `None` if the seed fingerprints don't match, or if this is a non-standard
|
||||||
|
/// derivation path.
|
||||||
|
pub fn extract_account_index(
|
||||||
|
&self,
|
||||||
|
seed_fp: &zip32::fingerprint::SeedFingerprint,
|
||||||
|
expected_coin_type: zip32::ChildIndex,
|
||||||
|
) -> Option<zip32::AccountId> {
|
||||||
|
if self.seed_fingerprint == seed_fp.to_bytes() {
|
||||||
|
match &self.derivation_path[..] {
|
||||||
|
[purpose, coin_type, account_index]
|
||||||
|
if purpose == &zip32::ChildIndex::hardened(32)
|
||||||
|
&& coin_type == &expected_coin_type =>
|
||||||
|
{
|
||||||
|
Some(
|
||||||
|
zip32::AccountId::try_from(account_index.index() - (1 << 31))
|
||||||
|
.expect("zip32::ChildIndex only supports hardened"),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue