1use std::fmt::Debug;
2use std::marker::PhantomData;
3
4use libsecp256k1::PublicKey;
5use serde::de::DeserializeOwned;
6use serde::{Deserialize, Serialize};
7
8pub type AESKey = [u8; 32];
9pub type DecryptedDocument = Vec<u8>;
10pub type EncryptedDocument = AESEncrypted<DecryptedDocument>;
11
12#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
13pub struct AESEncrypted<T: DeserializeOwned> {
14 #[serde(with = "serde_bytes")]
15 pub value: Vec<u8>,
16 #[serde(with = "serde_bytes")]
17 pub nonce: Vec<u8>,
18 #[serde(skip_serializing, default)]
19 pub _t: PhantomData<T>,
20}
21
22impl<T: DeserializeOwned> AESEncrypted<T> {
23 pub fn new<V: Into<Vec<u8>>, N: Into<Vec<u8>>>(value: V, nonce: N) -> Self {
25 AESEncrypted { value: value.into(), nonce: nonce.into(), _t: PhantomData }
26 }
27}
28
29#[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)]
30pub struct Timestamped<T> {
31 pub value: T,
32 pub timestamp: i64,
33}
34
35#[derive(Serialize, Deserialize, Debug, Clone)]
36pub struct ECSigned<T> {
37 pub timestamped_value: Timestamped<T>,
38 #[serde(with = "serde_bytes")]
39 pub signature: Vec<u8>,
40 pub public_key: PublicKey,
41}