#[cfg(test)]
mod tests {
use std::ffi::CString;
use crate::{
kcapi_handle, kcapi_kpp_destroy, kcapi_kpp_ecdh_setcurve, kcapi_kpp_init, kcapi_kpp_keygen,
kcapi_kpp_setkey, kcapi_kpp_ssgen, ECC_CURVE_NIST_P256, KCAPI_ACCESS_HEURISTIC,
};
#[test]
#[ignore]
fn test_kpp_ecdh() {
let alg = CString::new("ecdh").expect("Unable to create CString");
let access = KCAPI_ACCESS_HEURISTIC as i32;
unsafe {
let mut alice =
Box::into_raw(Box::new(kcapi_handle { _unused: [0u8; 0] })) as *mut kcapi_handle;
assert_eq!(kcapi_kpp_init(&mut alice as *mut _, alg.as_ptr(), 0), 0);
assert_eq!(
kcapi_kpp_ecdh_setcurve(alice, ECC_CURVE_NIST_P256 as ::std::os::raw::c_ulong),
0
);
let outsize = kcapi_kpp_setkey(alice, std::ptr::null(), 0);
assert!(outsize > 0);
let mut alice_pub = vec![0u8; outsize as usize];
let alice_publen = kcapi_kpp_keygen(
alice,
alice_pub.as_mut_ptr(),
alice_pub.len() as u64,
access,
);
assert!(alice_publen > 0);
let mut bob =
Box::into_raw(Box::new(kcapi_handle { _unused: [0u8; 0] })) as *mut kcapi_handle;
assert_eq!(kcapi_kpp_init(&mut bob as *mut _, alg.as_ptr(), 0), 0);
assert_eq!(
kcapi_kpp_ecdh_setcurve(bob, ECC_CURVE_NIST_P256 as ::std::os::raw::c_ulong),
0
);
assert!(kcapi_kpp_setkey(bob, std::ptr::null(), 0) > 0);
let mut bob_pub = vec![0u8; outsize as usize];
let bob_publen =
kcapi_kpp_keygen(bob, bob_pub.as_mut_ptr(), bob_pub.len() as u64, access);
assert!(bob_publen > 0);
let mut alice_ss = vec![0u8; outsize as usize];
let alice_sslen = kcapi_kpp_ssgen(
alice,
bob_pub.as_ptr(),
bob_publen as u64,
alice_ss.as_mut_ptr(),
alice_ss.len() as u64,
access,
);
assert!(alice_sslen > 0);
let mut bob_ss = vec![0u8; outsize as usize];
let bob_sslen = kcapi_kpp_ssgen(
bob,
alice_pub.as_ptr(),
alice_publen as u64,
bob_ss.as_mut_ptr(),
bob_ss.len() as u64,
access,
);
assert!(bob_sslen > 0);
assert_eq!(
alice_ss[..alice_sslen as usize],
bob_ss[..bob_sslen as usize]
);
kcapi_kpp_destroy(alice);
kcapi_kpp_destroy(bob);
}
}
}