sare_core/format/
encryption.rs

1use serde::{Deserialize, Serialize};
2
3use crate::encryption::EncryptionAlgorithm;
4use crate::hybrid_kem::{DHAlgorithm, KEMAlgorithm};
5use crate::kdf::{HKDFAlgorithm, PKDFAlgorithm};
6
7#[derive(Clone, Debug, Serialize, Deserialize)]
8pub struct KEMMetadataFormat {
9    pub kem_algorithm: KEMAlgorithm,
10    pub dh_algorithm: DHAlgorithm,
11    pub dh_sender_public_key: Vec<u8>,
12    pub hkdf_algorithm: HKDFAlgorithm,
13    pub kem_ciphertext: Vec<u8>,
14    pub kdf_salt: Vec<u8>,
15}
16
17#[derive(Clone, Debug, Serialize, Deserialize)]
18pub struct EncryptionMetadataFormat {
19    pub encryption_algorithm: EncryptionAlgorithm,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub nonce: Option<Vec<u8>>,
22    #[serde(skip_serializing_if = "Option::is_none", flatten)]
23    pub kem_metadata: Option<KEMMetadataFormat>,
24    #[serde(skip_serializing_if = "Option::is_none", flatten)]
25    pub pkdf_metadata: Option<PKDFMetadataFormat>,
26}
27
28#[derive(Clone, Debug, Serialize, Deserialize)]
29pub struct PKDFMetadataFormat {
30    pub pkdf_salt: Vec<u8>,
31    pub pkdf_algorithm: PKDFAlgorithm,
32}