xmtp_common/test/
openmls.rs1use super::Generate;
3use xmtp_cryptography::{
4 openmls::{
5 prelude::{
6 MlsMessageIn, MlsMessageOut, ProtocolMessage, PublicMessage, tls_codec::Serialize,
7 },
8 test_utils::frankenstein::{
9 FrankenCommit, FrankenContentType, FrankenFramedContent, FrankenFramedContentAuthData,
10 FrankenFramedContentBody, FrankenMlsMessage, FrankenMlsMessageBody,
11 FrankenPrivateMessage, FrankenPublicMessage, FrankenSender,
12 },
13 },
14 rand::rand_vec,
15};
16
17pub struct FakeMlsApplicationMessage {
18 pub inner: FrankenMlsMessage,
19}
20
21impl Generate for FakeMlsApplicationMessage {
22 fn generate() -> Self {
23 let mut msg = FrankenPublicMessage::generate();
24 msg.content.body = FrankenFramedContentBody::Application(rand_vec::<16>().into());
25 Self {
26 inner: FrankenMlsMessage {
27 version: 1,
28 body: FrankenMlsMessageBody::PublicMessage(msg),
29 },
30 }
31 }
32}
33
34impl From<FakeMlsApplicationMessage> for MlsMessageOut {
35 fn from(value: FakeMlsApplicationMessage) -> Self {
36 value.inner.into()
37 }
38}
39
40pub struct FakeMlsCommitMessage {
43 pub inner: FrankenMlsMessage,
44}
45
46impl Generate for FakeMlsCommitMessage {
47 fn generate() -> Self {
48 let mut msg = FrankenPrivateMessage::generate();
49 msg.content_type = FrankenContentType::Commit;
50 Self {
51 inner: FrankenMlsMessage {
52 version: 1,
53 body: FrankenMlsMessageBody::PrivateMessage(msg),
54 },
55 }
56 }
57}
58
59impl From<FakeMlsCommitMessage> for MlsMessageOut {
60 fn from(value: FakeMlsCommitMessage) -> Self {
61 value.inner.into()
62 }
63}
64
65impl From<FakeMlsCommitMessage> for ProtocolMessage {
66 fn from(value: FakeMlsCommitMessage) -> Self {
67 ProtocolMessage::try_from(MlsMessageIn::from(MlsMessageOut::from(value))).unwrap()
68 }
69}
70
71impl Generate for FrankenPrivateMessage {
72 fn generate() -> Self {
73 FrankenPrivateMessage {
74 group_id: rand_vec::<16>().into(),
75 epoch: rand_vec::<4>().into(),
76 content_type: FrankenContentType::Application,
77 authenticated_data: rand_vec::<16>().into(),
78 encrypted_sender_data: rand_vec::<16>().into(),
79 ciphertext: rand_vec::<16>().into(),
80 }
81 }
82}
83
84impl Generate for FrankenCommit {
85 fn generate() -> Self {
86 todo!()
87 }
88}
89
90impl Generate for PublicMessage {
91 fn generate() -> Self {
92 FrankenPublicMessage::generate().into()
93 }
94}
95
96impl Generate for FrankenPublicMessage {
97 fn generate() -> Self {
98 FrankenPublicMessage {
99 content: FrankenFramedContent::generate(),
100 auth: FrankenFramedContentAuthData::generate(),
101 membership_tag: None,
102 }
103 }
104}
105
106impl Generate for FrankenFramedContent {
107 fn generate() -> Self {
108 FrankenFramedContent {
109 group_id: rand_vec::<16>().into(),
110 epoch: crate::rand_u64(),
111 sender: FrankenSender::Member(0),
112 authenticated_data: FrankenFramedContentAuthData::generate()
113 .tls_serialize_detached()
114 .unwrap()
115 .into(),
116 body: FrankenFramedContentBody::Application(rand_vec::<16>().into()),
117 }
118 }
119}
120
121impl Generate for FrankenFramedContentAuthData {
122 fn generate() -> Self {
123 FrankenFramedContentAuthData {
124 signature: vec![].into(),
125 confirmation_tag: Some(rand_vec::<8>().into()),
127 }
128 }
129}