Add tests for symmetric keys
Some checks failed
Rhai Tests / Run Rhai Tests (pull_request) Has been cancelled
Some checks failed
Rhai Tests / Run Rhai Tests (pull_request) Has been cancelled
Signed-off-by: Lee Smet <lee.smet@hotmail.com>
This commit is contained in:
parent
7f55cf4fba
commit
e5a4a1b634
@ -8,6 +8,7 @@ use chacha20poly1305::{ChaCha20Poly1305, KeyInit, Nonce, aead::Aead};
|
||||
|
||||
use crate::error::CryptoError;
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
pub struct SymmetricKey([u8; 32]);
|
||||
|
||||
/// Size of a nonce in ChaCha20Poly1305.
|
||||
@ -102,3 +103,49 @@ impl SymmetricKey {
|
||||
Self(key)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
/// Using the same password derives the same key
|
||||
#[test]
|
||||
fn same_password_derives_same_key() {
|
||||
const EXPECTED_KEY: [u8; 32] = [
|
||||
4, 179, 233, 202, 225, 70, 211, 200, 7, 73, 115, 1, 85, 149, 90, 42, 160, 68, 16, 106,
|
||||
136, 19, 197, 195, 153, 145, 179, 21, 37, 13, 37, 90,
|
||||
];
|
||||
const PASSWORD: &str = "test123";
|
||||
|
||||
let key = super::SymmetricKey::derive_from_password(PASSWORD);
|
||||
|
||||
assert_eq!(key.0, EXPECTED_KEY);
|
||||
}
|
||||
|
||||
/// Make sure an encrypted value with some key can be decrypted with the same key
|
||||
#[test]
|
||||
fn can_decrypt() {
|
||||
let key = super::SymmetricKey::new();
|
||||
|
||||
let message = b"this is a message to decrypt";
|
||||
|
||||
let enc = key.encrypt(message).expect("Can encrypt message");
|
||||
let dec = key.decrypt(&enc).expect("Can decrypt message");
|
||||
|
||||
assert_eq!(message.as_slice(), dec.as_slice());
|
||||
}
|
||||
|
||||
/// Make sure a value encrypted with one key can't be decrypted with a different key. Since we
|
||||
/// use AEAD encryption we will notice this when trying to decrypt
|
||||
#[test]
|
||||
fn different_key_cant_decrypt() {
|
||||
let key1 = super::SymmetricKey::new();
|
||||
let key2 = super::SymmetricKey::new();
|
||||
|
||||
let message = b"this is a message to decrypt";
|
||||
|
||||
let enc = key1.encrypt(message).expect("Can encrypt message");
|
||||
let dec = key2.decrypt(&enc);
|
||||
|
||||
assert!(dec.is_err());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user