1use aztec_core::hash::compute_address;
4use aztec_core::types::{CompleteAddress, Fr};
5use aztec_core::Error;
6
7use crate::keys::derive_keys;
8
9pub fn complete_address_from_secret_key_and_partial_address(
11 secret_key: &Fr,
12 partial_address: &Fr,
13) -> Result<CompleteAddress, Error> {
14 let derived = derive_keys(secret_key);
15 let address = compute_address(&derived.public_keys, partial_address)?;
16 Ok(CompleteAddress {
17 address,
18 public_keys: derived.public_keys,
19 partial_address: *partial_address,
20 })
21}
22
23#[cfg(test)]
24#[allow(clippy::expect_used)]
25mod tests {
26 use super::*;
27 use aztec_core::types::AztecAddress;
28
29 #[test]
30 fn complete_address_from_secret_key() {
31 let sk = Fr::from(8923u64);
32 let partial_address = Fr::from(243523u64);
33 let complete = complete_address_from_secret_key_and_partial_address(&sk, &partial_address)
34 .expect("address derivation");
35 let expected = AztecAddress(
36 Fr::from_hex("0x2e54c8067c410d03d417dddd51e1cad76cece48ff39fa0fe908782b93a209a52")
37 .expect("valid hex"),
38 );
39 assert_eq!(complete.address, expected);
40 assert_eq!(complete.partial_address, partial_address);
41 assert!(!complete.public_keys.is_empty());
42 }
43}