dec_cryptor/
crypto_utils.rs1use rand::random;
2
3pub const MAGIC_NUMBER: &str = "DEC!";
5pub const VERSION_SIGN: u8 = 0x02;
6pub const SALT_LENGTH: usize = 16;
7pub const IV_LENGTH: usize = 16;
8pub const ARGON2_ITERATIONS: u32 = 3;
9pub const ARGON2_MEMORY_KIB: u32 = 65536;
10pub const ARGON2_PARALLELISM: u32 = 4;
11pub const MASTER_KEY_LENGTH: usize = 32;
12pub const ENCRYPTION_KEY_LENGTH: usize = 32;
13pub const HMAC_KEY_LENGTH: usize = 32;
14pub const BUFFER_SIZE: usize = 256 * 1024;
15
16pub fn get_parts() -> usize {
18 std::thread::available_parallelism().map_or(4, |n| n.get())
19}
20
21pub fn generate_salt() -> Vec<u8> {
23 let salt: [u8; SALT_LENGTH] = random();
24 salt.to_vec()
25}
26
27pub fn generate_iv() -> Vec<u8> {
29 let iv: [u8; IV_LENGTH] = random();
30 iv.to_vec()
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn test_generate_salt() {
39 let salt1 = generate_salt();
40 let salt2 = generate_salt();
41
42 assert_eq!(salt1.len(), SALT_LENGTH);
43 assert_eq!(salt2.len(), SALT_LENGTH);
44 assert_ne!(salt1, salt2);
46 }
47
48 #[test]
49 fn test_generate_iv() {
50 let iv1 = generate_iv();
51 let iv2 = generate_iv();
52
53 assert_eq!(iv1.len(), IV_LENGTH);
54 assert_eq!(iv2.len(), IV_LENGTH);
55 assert_ne!(iv1, iv2);
57 }
58
59 #[test]
60 fn test_get_parts() {
61 let parts = get_parts();
62 assert!(parts >= 1);
64 }
65
66 #[test]
67 fn test_constants() {
68 assert_eq!(MAGIC_NUMBER, "DEC!");
69 assert_eq!(VERSION_SIGN, 0x02);
70 assert_eq!(SALT_LENGTH, 16);
71 assert_eq!(IV_LENGTH, 16);
72 assert_eq!(MASTER_KEY_LENGTH, 32);
73 assert_eq!(ENCRYPTION_KEY_LENGTH, 32);
74 assert_eq!(HMAC_KEY_LENGTH, 32);
75 }
76}