spark_rust/wallet/utils/
proof_of_possession.rs1use bitcoin::{secp256k1::PublicKey, Address};
2
3pub(crate) fn proof_of_possession_message_hash_for_deposit_address(
4 user_pubkey: &PublicKey,
5 operator_pubkey: &PublicKey,
6 deposit_address: &Address,
7) -> [u8; 32] {
8 let user_pubkey_bytes = user_pubkey.serialize();
9 let operator_pubkey_bytes = operator_pubkey.serialize();
10
11 let deposit_address_str = deposit_address.to_string();
12 let deposit_address_bytes = deposit_address_str.as_bytes();
13
14 let mut msg = Vec::with_capacity(
15 user_pubkey_bytes.len() + operator_pubkey_bytes.len() + deposit_address_bytes.len(),
16 );
17 msg.extend_from_slice(&user_pubkey_bytes);
18 msg.extend_from_slice(&operator_pubkey_bytes);
19 msg.extend_from_slice(deposit_address_bytes);
20
21 let hash = sha256::digest(&msg);
22 let hash_slice = hex::decode(hash).unwrap();
23
24 hash_slice.try_into().unwrap()
25}