Skip to main content

bitwarden_vault/cipher/blob/
mod.rs

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