mls_rs_core/
lib.rs

1// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2// Copyright by contributors to this project.
3// SPDX-License-Identifier: (Apache-2.0 OR MIT)
4
5#![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}