#[cfg(test)]
mod tests {
use kyberlib::{
keypair, kyberlib_ake_client_confirm, kyberlib_ake_client_init,
kyberlib_ake_server_receive, kyberlib_assert, kyberlib_max,
kyberlib_min, kyberlib_uake_client_confirm,
kyberlib_uake_client_init, kyberlib_uake_server_receive, Ake,
Uake,
};
use kyberlib::{
kyberlib_decrypt_message, kyberlib_encrypt_message,
kyberlib_generate_key_pair,
};
use kyberlib::{
KYBER_CIPHERTEXT_BYTES, KYBER_PUBLIC_KEY_BYTES,
KYBER_SECRET_KEY_BYTES, KYBER_SHARED_SECRET_BYTES,
};
use rand_core::OsRng;
#[test]
fn test_kyberlib_assert() {
kyberlib_assert!(1 + 1 == 2);
}
#[test]
fn test_kyberlib_min() {
let min = kyberlib_min!(1, 2, 3);
assert_eq!(min, 1);
}
#[test]
fn test_kyberlib_max() {
let max = kyberlib_max!(1, 2, 3);
assert_eq!(max, 3);
}
#[test]
fn test_generate_key_pair_macro() {
let mut rng = OsRng;
let mut public_key = [0u8; KYBER_PUBLIC_KEY_BYTES];
let mut secret_key = [0u8; KYBER_SECRET_KEY_BYTES];
kyberlib_generate_key_pair!(
&mut public_key,
&mut secret_key,
&mut rng,
None
)
.unwrap();
assert_eq!(public_key.len(), KYBER_PUBLIC_KEY_BYTES);
assert_eq!(secret_key.len(), KYBER_SECRET_KEY_BYTES);
}
#[test]
fn test_encrypt_message_macro() {
let mut rng = OsRng;
let mut public_key = [0u8; KYBER_PUBLIC_KEY_BYTES];
let mut secret_key = [0u8; KYBER_SECRET_KEY_BYTES];
kyberlib_generate_key_pair!(
&mut public_key,
&mut secret_key,
&mut rng,
None
)
.unwrap();
let mut ciphertext = [0u8; KYBER_CIPHERTEXT_BYTES];
let mut shared_secret1 = [0u8; KYBER_SHARED_SECRET_BYTES];
kyberlib_encrypt_message!(
&mut ciphertext,
&mut shared_secret1,
&public_key,
&mut rng,
None
)
.unwrap();
let mut shared_secret2 = [0u8; KYBER_SHARED_SECRET_BYTES];
kyberlib_decrypt_message!(
&mut shared_secret2,
&ciphertext,
&secret_key
);
assert_eq!(shared_secret1, shared_secret2);
}
#[test]
fn test_decrypt_message_macro() {
let mut rng = OsRng;
let mut public_key = [0u8; KYBER_PUBLIC_KEY_BYTES];
let mut secret_key = [0u8; KYBER_SECRET_KEY_BYTES];
kyberlib_generate_key_pair!(
&mut public_key,
&mut secret_key,
&mut rng,
None
)
.unwrap();
let mut ciphertext = [0u8; KYBER_CIPHERTEXT_BYTES];
let mut shared_secret1 = [0u8; KYBER_SHARED_SECRET_BYTES];
kyberlib_encrypt_message!(
&mut ciphertext,
&mut shared_secret1,
&public_key,
&mut rng,
None
)
.unwrap();
let mut shared_secret2 = [0u8; KYBER_SHARED_SECRET_BYTES];
kyberlib_decrypt_message!(
&mut shared_secret2,
&ciphertext,
&secret_key
);
assert_eq!(shared_secret1, shared_secret2);
}
#[test]
fn test_kyberlib_uake_client_init() {
let mut rng = OsRng;
let bob_keys = keypair(&mut rng).unwrap();
let client_init =
kyberlib_uake_client_init!(&bob_keys.public, &mut rng)
.unwrap();
assert_eq!(client_init.len(), 2272);
}
#[test]
fn test_kyberlib_uake_server_receive() {
let mut rng = OsRng;
let bob_keys = keypair(&mut rng).unwrap();
let client_init =
kyberlib_uake_client_init!(&bob_keys.public, &mut rng)
.unwrap();
let server_send = kyberlib_uake_server_receive!(
client_init,
&bob_keys.secret,
&mut rng
)
.unwrap();
assert_eq!(server_send.len(), 1088);
}
#[test]
fn test_kyberlib_uake_client_confirm() {
let mut rng = OsRng;
let alice = Uake::new();
let bob = Uake::new();
let bob_keys = keypair(&mut rng).unwrap();
let client_init =
kyberlib_uake_client_init!(&bob_keys.public, &mut rng)
.unwrap();
let server_send = kyberlib_uake_server_receive!(
client_init,
&bob_keys.secret,
&mut rng
)
.unwrap();
kyberlib_uake_client_confirm!(server_send).unwrap();
assert_eq!(alice.shared_secret, bob.shared_secret);
}
#[test]
fn test_kyberlib_ake_client_init() {
let mut rng = OsRng;
let bob_keys = keypair(&mut rng).unwrap();
let client_init =
kyberlib_ake_client_init!(&bob_keys.public, &mut rng)
.unwrap();
assert_eq!(client_init.len(), 2272);
}
#[test]
fn test_kyberlib_ake_server_receive() {
let mut rng = OsRng;
let alice_keys = keypair(&mut rng).unwrap();
let bob_keys = keypair(&mut rng).unwrap();
let client_init =
kyberlib_ake_client_init!(&bob_keys.public, &mut rng)
.unwrap();
let server_send = kyberlib_ake_server_receive!(
client_init,
&alice_keys.public,
&bob_keys.secret,
&mut rng
)
.unwrap();
assert_eq!(server_send.len(), 2176);
}
#[test]
fn test_kyberlib_ake_client_confirm() {
let mut rng = OsRng;
let alice = Ake::new();
let bob = Ake::new();
let alice_keys = keypair(&mut rng).unwrap();
let bob_keys = keypair(&mut rng).unwrap();
let client_init =
kyberlib_ake_client_init!(&bob_keys.public, &mut rng)
.unwrap();
let server_send = kyberlib_ake_server_receive!(
client_init,
&alice_keys.public,
&bob_keys.secret,
&mut rng
)
.unwrap();
kyberlib_ake_client_confirm!(server_send, &alice_keys.secret)
.unwrap();
assert_eq!(alice.shared_secret, bob.shared_secret);
}
}