1#![cfg_attr(not(feature = "std"), no_std)]
6#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
7extern crate alloc;
8
9#[cfg(all(test, target_arch = "wasm32"))]
10wasm_bindgen_test::wasm_bindgen_test_configure!(run_in_browser);
11
12pub mod crypto;
13pub mod debug;
14pub mod error;
15pub mod extension;
16pub mod group;
17pub mod identity;
18pub mod key_package;
19pub mod protocol_version;
20pub mod psk;
21pub mod secret;
22pub mod time;
23
24pub use mls_rs_codec;
25
26#[cfg(feature = "arbitrary")]
27pub use arbitrary;
28
29#[cfg(feature = "serde")]
30pub mod zeroizing_serde {
31 use alloc::vec::Vec;
32 use serde::{Deserializer, Serializer};
33 use zeroize::Zeroizing;
34
35 use crate::vec_serde;
36
37 pub fn serialize<S: Serializer>(v: &Zeroizing<Vec<u8>>, s: S) -> Result<S::Ok, S::Error> {
38 vec_serde::serialize(v, s)
39 }
40
41 pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Zeroizing<Vec<u8>>, D::Error> {
42 vec_serde::deserialize(d).map(Zeroizing::new)
43 }
44}
45
46#[cfg(feature = "serde")]
47pub mod vec_serde {
48 use alloc::vec::Vec;
49 use serde::{Deserializer, Serializer};
50
51 pub fn serialize<S: Serializer>(v: &Vec<u8>, s: S) -> Result<S::Ok, S::Error> {
52 if s.is_human_readable() {
53 hex::serde::serialize(v, s)
54 } else {
55 serde_bytes::serialize(v, s)
56 }
57 }
58
59 pub fn deserialize<'de, D: Deserializer<'de>>(d: D) -> Result<Vec<u8>, D::Error> {
60 if d.is_human_readable() {
61 hex::serde::deserialize(d)
62 } else {
63 serde_bytes::deserialize(d)
64 }
65 }
66}