1extern crate core;
7
8
9pub mod database;
10pub mod waiters;
11pub mod signing;
12pub mod encryption;
13
14#[cfg(test)]
15mod tests {
16 use crate::database::Metadata;
17 use crate::encryption::{EncryptionWaiter, EncryptionWaiterSymmetric};
18 use crate::waiters::burrito_box::BurritoBox;
19 use crate::waiters::burrito_box_sym::BurritoBoxSym;
20 use crate::waiters::sensitive_text::SensitiveText;
21 use crate::waiters::Waiter;
22 use crate::signing::Signing;
23 use bson::Bson;
24 use dryoc::dryocbox::protected::SecretKey;
25 use dryoc::types::NewBytes;
26
27 fn blank_key() -> SecretKey {
28 SecretKey::new_bytes()
29 }
30
31
32 #[test]
33 fn sym_sign_test() {
34 let plaintext = SensitiveText::new("Hello World!");
35 let secret_key = blank_key();
36
37 let encrypted = BurritoBox::encrypt(plaintext.into_entry(), secret_key).expect("Failed to encrypt");
38
39 let secret_key = blank_key();
40 let encrypted = encrypted.into_entry().sign_sym(secret_key);
41
42 let secret_key = blank_key();
43 let mut verify = encrypted.verify_sym(secret_key).expect("Failed to verify signature");
44
45 let x = verify.get_mut("ENCRYPTED").expect("Failed to get data");
46 let Bson::Binary(b) = x else { panic!("Failed to get binary") };
47 b.bytes.swap_remove(12); let secret_key = blank_key();
50 let _err = verify.verify_sym(secret_key).expect_err("Signature should not be valid!");
51 }
52
53 #[test]
54 fn sign_test() {
55 use dryoc::sign::SigningKeyPair;
56 use dryoc::sign::protected::PublicKey;
57 use dryoc::sign::protected::SecretKey;
58
59 let keypair = SigningKeyPair::<PublicKey, SecretKey>::gen();
60
61 let plaintext = SensitiveText::new("Hello World!");
62
63 let plaintext = plaintext.sign(keypair.secret_key.clone());
64
65 let plaintext = plaintext.verify().expect("Signature must be correct.");
66
67 let plaintext = plaintext.with_security(keypair.secret_key.clone());
68
69 assert!(plaintext.is_secure());
70 }
71
72 #[test]
73 fn password_sym_test() {
74 let plaintext = SensitiveText::new("Hello World!");
75 let encrypted = BurritoBoxSym::of_password(plaintext.into_entry(), "Hello World!".to_string());
76 let decrypted = encrypted.decrypt_password("Hello World!".to_string()).expect("Failed to decrypt");
77 println!("{:#}", bson::to_bson(&decrypted).unwrap());
78 }
79
80 #[test]
81 fn encrypt_decrypt_test() {
82 use dryoc::keypair::KeyPair;
83 use dryoc::dryocbox::protected::SecretKey;
84 use dryoc::dryocbox::protected::PublicKey;
85
86 let keypair: KeyPair<PublicKey, SecretKey> = KeyPair::gen();
87
88 let public_key = &keypair.public_key;
89 let secret_key = &keypair.secret_key;
90
91 let plaintext = SensitiveText::new("Hello World!").into_entry().sign_sym(public_key.clone());
92 let encrypted = BurritoBox::encrypt(plaintext, public_key.clone()).expect("Failed to encrypt");
93
94 println!("{:#}", bson::to_bson(&encrypted).unwrap());
95
96 let decrypted = encrypted.decrypt(secret_key.clone()).expect("Failed to decrypt");
97 println!("{:#}", bson::to_bson(&decrypted).unwrap());
98 }
99
100 #[test]
101 fn security_attestation_test() {
102 use dryoc::sign::SigningKeyPair;
103 use dryoc::sign::protected::PublicKey;
104 use dryoc::sign::protected::SecretKey;
105
106 let plaintext = SensitiveText::new("Hello World!");
107 let keypair = SigningKeyPair::<PublicKey, SecretKey>::gen();
108 let plaintext = plaintext.with_security(keypair.secret_key.clone());
109 let is_secure = plaintext.is_secure();
110
111 assert!(is_secure);
112
113 let plaintext = plaintext.sign(keypair.secret_key.clone());
114
115 let plaintext = plaintext.verify().expect("Signature must be correct.");
116
117 assert!(!plaintext.is_secure());
121 }
122
123 #[test]
124 fn encrypt_decrypt_sym_test() {
125 let plaintext = SensitiveText::new("Hello World!");
126 let secret_box = BurritoBoxSym::encrypt_sym(plaintext.into_entry(), blank_key()).expect("Failed to encrypt");
127
128 println!("{:#}", bson::to_bson(&secret_box).unwrap());
129 }
130
131 #[test]
132 fn serialize_test() {
133 let plaintext = SensitiveText::new("Hello World!").and_defaults::<SensitiveText>().sign_sym(blank_key());
134 println!("{:#}", bson::to_bson(&plaintext).unwrap());
135 let verified = plaintext.verify_sym(blank_key()).expect("Failed to verify signature");
136 println!("{:#}", bson::to_bson(&verified).unwrap());
137
138 let entry = verified.into_entry();
139 println!("{:#}", bson::to_bson(&entry).unwrap());
140 let plaintext = SensitiveText::from_entry(entry).expect("Failed to verify signature");
141 let _plaintext = plaintext.verify_sym(blank_key()).expect("Failed to verify signature");
142 }
143}