#[test]
fn test_signature_encoding() {
use super::signature::{SignatureKeyPair, SigningKey, VerifyingKey};
let mut pair = SignatureKeyPair::generate();
let encoded_pub = pair.verify_key.encode();
let decoded_pub = VerifyingKey::decode(encoded_pub).unwrap();
assert_eq!(
pair.verify_key.sodium_key.as_slice(),
decoded_pub.sodium_key.as_slice()
);
assert_eq!(
pair.verify_key.ml_dsa_key.encode().as_slice(),
decoded_pub.ml_dsa_key.encode().as_slice(),
);
let encoded_priv = pair.signature_key.encode();
let mut decoded_priv: SigningKey = SigningKey::decode(encoded_priv).unwrap();
assert_eq!(
pair.signature_key.ml_dsa_key.encode().as_slice(),
decoded_priv.ml_dsa_key.encode().as_slice()
);
assert_eq!(
pair.signature_key.sodium_key.lock().as_slice(),
decoded_priv.sodium_key.lock().as_slice(),
);
}
#[test]
fn test_signature_signing() {
use super::signature::{self, SignatureKeyPair};
let mut pair = SignatureKeyPair::generate();
let message = b"some signature".as_slice();
let signed =
signature::sign(&mut pair.signature_key, &message.to_vec()).expect("Signing failed");
assert!(
signature::verify(&mut pair.verify_key, &message.to_vec(), &signed)
.expect("Verification failed")
);
assert!(signed.len() == signature::SIGNATURE_LEN);
let message = b"some longer signature".as_slice();
let signed =
signature::sign(&mut pair.signature_key, &message.to_vec()).expect("Signing failed");
assert!(
signature::verify(&mut pair.verify_key, &message.to_vec(), &signed)
.expect("Verification failed")
);
assert!(signed.len() == signature::SIGNATURE_LEN);
}
#[test]
fn test_asymmetric_encoding() {
use super::asymmetric::{AsymmetricKeyPair, PublicKey, SecretKey};
let mut pair = AsymmetricKeyPair::generate();
let encoded_pub = pair.public_key.encode();
let decoded_pub = PublicKey::decode(encoded_pub).unwrap();
assert_eq!(pair.public_key.key.as_bytes(), decoded_pub.key.as_bytes());
let encoded_priv = pair.secret_key.encode();
let decoded_priv: SecretKey = SecretKey::decode(encoded_priv).unwrap();
assert_eq!(pair.secret_key.key.as_bytes(), decoded_priv.key.as_bytes());
}
#[test]
fn test_asymmetric_encryption() {
use super::asymmetric::{self, AsymmetricKeyPair};
let pair: AsymmetricKeyPair = AsymmetricKeyPair::generate();
let message = b"Hello symmetric encryption!".to_vec();
let encrypted = asymmetric::encrypt(&pair.public_key, &message).expect("Encryption failed");
let decrypted = asymmetric::decrypt(&pair.secret_key, &encrypted).expect("Decryption failed");
assert_eq!(message, decrypted);
assert!(asymmetric::decrypt(&pair.secret_key, &vec![0u8; 10]).is_none());
assert!(asymmetric::decrypt(&pair.secret_key, &vec![0u8; 1000]).is_none());
assert!(asymmetric::decrypt(&pair.secret_key, &vec![0u8; 2000]).is_none());
assert!(asymmetric::decrypt(&pair.secret_key, &vec![0u8; 3000]).is_none());
assert!(asymmetric::decrypt(&pair.secret_key, &vec![0u8; 4000]).is_none());
}
#[test]
fn test_symmetric_key_encoding() {
use super::symmetric::SymmetricKey;
let mut key = SymmetricKey::generate();
let encoded = key.encode();
let mut decoded = SymmetricKey::decode(encoded).unwrap();
assert_eq!(key.key.lock().as_slice(), decoded.key.lock().as_slice());
}
#[test]
fn test_symmetric_encryption() {
use super::symmetric::SymmetricKey;
let mut key = SymmetricKey::generate();
let message = b"Hello symmetric encryption!".to_vec();
let encrypted = key.encrypt(&message).expect("Encryption failed");
let decrypted = key.decrypt(&encrypted).expect("Decryption failed");
assert_eq!(message, decrypted);
assert!(key.decrypt(&vec![0u8; 10]).is_none());
assert!(key.decrypt(&vec![0u8; 1000]).is_none());
assert!(key.decrypt(&vec![0u8; 2000]).is_none());
assert!(key.decrypt(&vec![0u8; 3000]).is_none());
assert!(key.decrypt(&vec![0u8; 4000]).is_none());
}