Add TrustedChannel

This commit is contained in:
Sosthene 2024-07-19 22:48:57 +02:00
parent f59dc042b6
commit b5881d63b0

View File

@ -237,3 +237,52 @@ impl CachedMessage {
aes_decrypt.decrypt_with_key()
}
}
#[derive(Debug, Serialize, Deserialize, Tsify, Default)]
#[tsify(into_wasm_abi, from_wasm_abi)]
#[allow(non_camel_case_types)]
pub struct TrustedChannel {
id: u32, // Just take the id of the cached message?
revokation_outpoint: OutPoint, // revokation output is locked by the shared_secret
shared_secret: [u8; 32],
revoked_in_block: [u8; 32],
with: String, // Silent payment address
}
impl TrustedChannel {
pub fn new(with: String) -> Result<Self> {
// check that with is valid silent payment address
SilentPaymentAddress::try_from(with.as_str())?;
// Generating random id
let mut new = Self::default();
let mut buf = [0u8; 4];
thread_rng().fill_bytes(&mut buf);
new.id = u32::from_be_bytes(buf);
new.with = with;
Ok(new)
}
pub fn set_revokation(
&mut self,
revokation_outpoint: String,
shared_secret: String,
) -> Result<()> {
let mut buf = [0u8; 32];
buf.copy_from_slice(&Vec::from_hex(&shared_secret)?);
self.revokation_outpoint = OutPoint::from_str(&revokation_outpoint)?;
self.shared_secret.copy_from_slice(&buf);
Ok(())
}
pub fn revoke(&mut self, revoked_in_block: String) -> Result<()> {
let block_hash = BlockHash::from_str(&revoked_in_block)?;
let mut buf = [0u8; 32];
buf.copy_from_slice(&serialize::<BlockHash>(&block_hash));
self.revoked_in_block = buf;
Ok(())
}
}