Skip to main content

bitwarden_vault/cipher/blob/
mod.rs

1mod 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}