Skip to main content

bitwarden_vault/cipher/blob/
mod.rs

1#[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}