schema_registry_client/rest/models/
dek.rs1use base64::Engine;
2use base64::prelude::BASE64_STANDARD;
3use serde::{Deserialize, Serialize};
4
5#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
7pub struct Dek {
8 #[serde(rename = "kekName")]
10 pub kek_name: String,
11 #[serde(rename = "subject")]
13 pub subject: String,
14 #[serde(rename = "version")]
16 pub version: i32,
17 #[serde(rename = "algorithm")]
19 pub algorithm: Algorithm,
20 #[serde(
22 rename = "encryptedKeyMaterial",
23 skip_serializing_if = "Option::is_none"
24 )]
25 pub encrypted_key_material: Option<String>,
26 #[serde(
28 rename = "encryptedKeyMaterialBytes",
29 skip_serializing_if = "Option::is_none"
30 )]
31 pub encrypted_key_material_bytes: Option<Vec<u8>>,
32 #[serde(rename = "keyMaterial", skip_serializing_if = "Option::is_none")]
34 pub key_material: Option<String>,
35 #[serde(rename = "keyMaterialBytes", skip_serializing_if = "Option::is_none")]
37 pub key_material_bytes: Option<Vec<u8>>,
38 #[serde(rename = "ts")]
40 pub ts: i64,
41 #[serde(rename = "deleted", skip_serializing_if = "Option::is_none")]
43 pub deleted: Option<bool>,
44}
45
46impl Dek {
47 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#[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}