azure_storage_blobs/options/
encryption_key.rs
1use azure_core::headers::{self, AsHeaders, HeaderName, HeaderValue};
2
3const DEFAULT_ENCRYPTION_ALGORITHM: &str = "AES256";
4
5#[derive(Clone, Debug)]
6pub struct CPKInfo {
7 encryption_key: String,
8 encryption_key_sha256: String,
9
10 encryption_algorithm: Option<String>,
12}
13
14impl CPKInfo {
15 pub fn new(key: String, key_sha256: String, algorithm: Option<String>) -> Self {
16 Self {
17 encryption_key: key,
18 encryption_key_sha256: key_sha256,
19
20 encryption_algorithm: algorithm,
21 }
22 }
23}
24
25impl From<(String, String)> for CPKInfo {
26 fn from(s: (String, String)) -> Self {
27 Self::new(s.0, s.1, None)
28 }
29}
30
31impl From<(String, String, String)> for CPKInfo {
32 fn from(s: (String, String, String)) -> Self {
33 Self::new(s.0, s.1, Some(s.2))
34 }
35}
36
37impl AsHeaders for CPKInfo {
38 type Iter = std::vec::IntoIter<(HeaderName, HeaderValue)>;
39
40 fn as_headers(&self) -> Self::Iter {
41 let algorithm = self
42 .encryption_algorithm
43 .as_deref()
44 .unwrap_or(DEFAULT_ENCRYPTION_ALGORITHM)
45 .to_owned();
46 let headers = vec![
47 (headers::ENCRYPTION_ALGORITHM, algorithm.into()),
48 (headers::ENCRYPTION_KEY, self.encryption_key.clone().into()),
49 (
50 headers::ENCRYPTION_KEY_SHA256,
51 self.encryption_key_sha256.clone().into(),
52 ),
53 ];
54 headers.into_iter()
55 }
56}
57
58impl AsHeaders for &CPKInfo {
59 type Iter = <CPKInfo as AsHeaders>::Iter;
60
61 fn as_headers(&self) -> Self::Iter {
62 (*self).as_headers()
63 }
64}