concrete_boolean/ciphertext/
mod.rs1use concrete_core::prelude::*;
6use serde::{Deserialize, Deserializer, Serialize, Serializer};
7
8#[derive(Clone, Debug)]
12pub enum Ciphertext {
13 Encrypted(LweCiphertext32),
14 Trivial(bool),
15}
16
17#[derive(Serialize, Deserialize)]
18enum SerializableCiphertext {
19 Encrypted(Vec<u8>),
20 Trivial(bool),
21}
22
23impl Serialize for Ciphertext {
24 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
25 where
26 S: Serializer,
27 {
28 let mut ser_eng = DefaultSerializationEngine::new(()).map_err(serde::ser::Error::custom)?;
29
30 match self {
31 Ciphertext::Encrypted(lwe) => {
32 let ciphertext = ser_eng.serialize(lwe).map_err(serde::ser::Error::custom)?;
33 SerializableCiphertext::Encrypted(ciphertext)
34 }
35 Ciphertext::Trivial(b) => SerializableCiphertext::Trivial(*b),
36 }
37 .serialize(serializer)
38 }
39}
40
41impl<'de> Deserialize<'de> for Ciphertext {
42 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
43 where
44 D: Deserializer<'de>,
45 {
46 let thing = SerializableCiphertext::deserialize(deserializer)?;
47
48 let mut de_eng = DefaultSerializationEngine::new(()).map_err(serde::de::Error::custom)?;
49
50 Ok(match thing {
51 SerializableCiphertext::Encrypted(data) => {
52 let lwe = de_eng
53 .deserialize(data.as_slice())
54 .map_err(serde::de::Error::custom)?;
55 Self::Encrypted(lwe)
56 }
57 SerializableCiphertext::Trivial(b) => Self::Trivial(b),
58 })
59 }
60}