spark_rust/wallet/utils/
proof_of_possession.rs

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