bitwarden_vault/cipher/blob/
mod.rs1mod conversions;
2mod sealed;
3#[allow(dead_code)]
4mod v1;
5
6use bitwarden_crypto::{
7 generate_versioned_sealable,
8 safe::{DataEnvelopeNamespace, SealableData, SealableVersionedData},
9};
10#[allow(unused_imports)]
11use sealed::{SealedCipherBlob, SealedCipherBlobError};
12use serde::{Deserialize, Serialize};
13use v1::CipherBlobV1;
14
15generate_versioned_sealable!(
16 CipherBlob,
17 DataEnvelopeNamespace::VaultItem,
18 [CipherBlobV1 => "1"]
19);
20
21#[allow(dead_code)]
22pub(crate) type CipherBlobLatest = CipherBlobV1;
23
24#[cfg(test)]
25mod tests {
26 use super::{CipherBlob, v1::*};
27 use crate::cipher::secure_note::SecureNoteType;
28
29 #[test]
30 fn test_versioned_enum_format() {
31 let blob = CipherBlobV1 {
32 name: "Test".to_string(),
33 notes: None,
34 type_data: CipherTypeDataV1::SecureNote(SecureNoteDataV1 {
35 r#type: SecureNoteType::Generic,
36 }),
37 fields: Vec::new(),
38 password_history: Vec::new(),
39 };
40 let versioned: CipherBlob = blob.into();
41 let json = serde_json::to_value(&versioned).unwrap();
42
43 assert_eq!(json["version"], "1");
44 assert!(json["content"].is_object());
45 assert_eq!(json["content"]["name"], "Test");
46 }
47
48 #[test]
49 fn test_from_conversion() {
50 let blob = CipherBlobV1 {
51 name: "Test".to_string(),
52 notes: None,
53 type_data: CipherTypeDataV1::SecureNote(SecureNoteDataV1 {
54 r#type: SecureNoteType::Generic,
55 }),
56 fields: Vec::new(),
57 password_history: Vec::new(),
58 };
59 let versioned: CipherBlob = blob.clone().into();
60 assert_eq!(versioned, CipherBlob::CipherBlobV1(blob));
61 }
62}