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