Skip to main content

schema_registry_client/rest/models/
dek.rs

1use base64::Engine;
2use base64::prelude::BASE64_STANDARD;
3use serde::{Deserialize, Serialize};
4
5/// Dek : Dek
6#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
7pub struct Dek {
8    /// Kek name of the dek
9    #[serde(rename = "kekName")]
10    pub kek_name: String,
11    /// Subject of the dek
12    #[serde(rename = "subject")]
13    pub subject: String,
14    /// Version of the dek
15    #[serde(rename = "version")]
16    pub version: i32,
17    /// Algorithm of the dek
18    #[serde(rename = "algorithm")]
19    pub algorithm: Algorithm,
20    /// Encrypted key material of the dek
21    #[serde(
22        rename = "encryptedKeyMaterial",
23        skip_serializing_if = "Option::is_none"
24    )]
25    pub encrypted_key_material: Option<String>,
26    /// Encrypted key material of the dek in bytes
27    #[serde(
28        rename = "encryptedKeyMaterialBytes",
29        skip_serializing_if = "Option::is_none"
30    )]
31    pub encrypted_key_material_bytes: Option<Vec<u8>>,
32    /// Raw key material of the dek
33    #[serde(rename = "keyMaterial", skip_serializing_if = "Option::is_none")]
34    pub key_material: Option<String>,
35    /// Raw key material of the dek in bytes
36    #[serde(rename = "keyMaterialBytes", skip_serializing_if = "Option::is_none")]
37    pub key_material_bytes: Option<Vec<u8>>,
38    /// Timestamp of the dek
39    #[serde(rename = "ts")]
40    pub ts: i64,
41    /// Whether the dek is deleted
42    #[serde(rename = "deleted", skip_serializing_if = "Option::is_none")]
43    pub deleted: Option<bool>,
44}
45
46impl Dek {
47    /// Dek
48    pub fn new(
49        kek_name: String,
50        subject: String,
51        version: i32,
52        algorithm: Algorithm,
53        encrypted_key_material: Option<String>,
54        key_material: Option<String>,
55        ts: i64,
56        deleted: Option<bool>,
57    ) -> Dek {
58        Dek {
59            kek_name,
60            subject,
61            version,
62            algorithm,
63            encrypted_key_material,
64            encrypted_key_material_bytes: None,
65            key_material,
66            key_material_bytes: None,
67            ts,
68            deleted,
69        }
70    }
71
72    pub fn populate_key_material_bytes(&mut self) {
73        self.get_encrypted_key_material_bytes();
74        self.get_key_material_bytes();
75    }
76
77    pub fn get_encrypted_key_material_bytes(&mut self) -> Option<&Vec<u8>> {
78        self.encrypted_key_material.as_ref()?;
79        if self.encrypted_key_material_bytes.is_none() {
80            let bytes = BASE64_STANDARD
81                .decode(self.encrypted_key_material.as_ref().unwrap())
82                .unwrap();
83            self.encrypted_key_material_bytes = Some(bytes);
84        }
85        self.encrypted_key_material_bytes.as_ref()
86    }
87
88    pub fn get_key_material_bytes(&mut self) -> Option<&Vec<u8>> {
89        self.key_material.as_ref()?;
90        if self.key_material_bytes.is_none() {
91            let bytes = BASE64_STANDARD
92                .decode(self.key_material.as_ref().unwrap())
93                .unwrap();
94            self.key_material_bytes = Some(bytes);
95        }
96        self.key_material_bytes.as_ref()
97    }
98
99    pub fn set_key_material(&mut self, key_material_bytes: &[u8]) {
100        self.key_material = Some(BASE64_STANDARD.encode(key_material_bytes));
101    }
102}
103/// Algorithm of the dek
104#[derive(
105    Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize, Default,
106)]
107pub enum Algorithm {
108    #[serde(rename = "AES128_GCM")]
109    Aes128Gcm,
110    #[serde(rename = "AES256_GCM")]
111    #[default]
112    Aes256Gcm,
113    #[serde(rename = "AES256_SIV")]
114    Aes256Siv,
115}