mutant_lib/ops/utils/
mod.rs1use crate::error::Error;
2use autonomi::ScratchpadAddress;
3use blsttc::SecretKey;
4use log::{debug, info};
5use sha2::{Digest, Sha256};
6
7pub fn derive_master_index_info(
8 private_key_hex: &str,
9) -> Result<(ScratchpadAddress, SecretKey), Error> {
10 debug!("Deriving master index key and address...");
11 let hex_to_decode = private_key_hex
12 .strip_prefix("0x")
13 .unwrap_or(private_key_hex);
14
15 let input_key_bytes = hex::decode(hex_to_decode)
16 .map_err(|e| Error::Config(format!("Failed to decode private key hex: {}", e)))?;
17
18 let mut hasher = Sha256::new();
19 hasher.update(&input_key_bytes);
20 let hash_result = hasher.finalize();
21 let key_array: [u8; 32] = hash_result.into();
22
23 let derived_key = SecretKey::from_bytes(key_array)
24 .map_err(|e| Error::Internal(format!("Failed to create SecretKey from HASH: {:?}", e)))?;
25 let derived_public_key = derived_key.public_key();
26 let address = ScratchpadAddress::new(derived_public_key);
27 info!("Derived Master Index Address: {}", address);
28 Ok((address, derived_key))
29}