1use serde::{Deserialize, Serialize};
2use serde_big_array::BigArray;
3use uuid::Uuid;
4use zeroize::Zeroize;
5
6#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
7pub struct LocalUser {
8 pub uuid: Uuid,
9 pub username: String,
10}
11
12#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
13pub struct X3dhBundle {
14 pub username: String,
15 pub identity_public_key: [u8; 32],
16 pub signed_prekey_public_key: [u8; 32],
17 #[serde(with = "BigArray")]
18 pub signed_prekey_signature: [u8; 64],
19}
20
21#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
22pub struct X3dhInitiation {
23 pub initiator_ephemeral_public_key: [u8; 32],
24}
25
26#[derive(Clone)]
27pub struct X3dhResponderKeys {
28 pub identity_public_key: [u8; 32],
29 pub identity_secret_key: [u8; 32],
30 pub signed_prekey_public_key: [u8; 32],
31 pub signed_prekey_secret_key: [u8; 32],
32 pub signed_prekey_signature: [u8; 64],
33}
34
35#[derive(Clone, Debug, PartialEq, Eq, Zeroize)]
36#[zeroize(drop)]
37pub struct SharedSecret([u8; 32]);
38
39impl SharedSecret {
40 pub fn new(bytes: [u8; 32]) -> Self {
41 Self(bytes)
42 }
43
44 pub fn as_bytes(&self) -> &[u8; 32] {
45 &self.0
46 }
47}