use serde::{Deserialize, Serialize};
use serde_big_array::BigArray;
use uuid::Uuid;
use zeroize::Zeroize;
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct LocalUser {
pub uuid: Uuid,
pub username: String,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct X3dhBundle {
pub username: String,
pub identity_public_key: [u8; 32],
pub signed_prekey_public_key: [u8; 32],
#[serde(with = "BigArray")]
pub signed_prekey_signature: [u8; 64],
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct X3dhInitiation {
pub initiator_ephemeral_public_key: [u8; 32],
}
#[derive(Clone)]
pub struct X3dhResponderKeys {
pub identity_public_key: [u8; 32],
pub identity_secret_key: [u8; 32],
pub signed_prekey_public_key: [u8; 32],
pub signed_prekey_secret_key: [u8; 32],
pub signed_prekey_signature: [u8; 64],
}
#[derive(Clone, Debug, PartialEq, Eq, Zeroize)]
#[zeroize(drop)]
pub struct SharedSecret([u8; 32]);
impl SharedSecret {
pub fn new(bytes: [u8; 32]) -> Self {
Self(bytes)
}
pub fn as_bytes(&self) -> &[u8; 32] {
&self.0
}
}