lb_rs/model/
crypto.rs

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    /// creates an AESEncrypted from a source of already-encrypted bytes
24    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}