mutant_lib/ops/utils/
mod.rs

1use 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}