use wolfcrypt_ring_compat::aead::quic::{HeaderProtectionKey, AES_128, AES_256, CHACHA20};
use wolfcrypt_ring_compat::{hkdf, test};
#[test]
fn test_key_type_header_protection_key() {
let key_bytes = test::from_dirty_hex(r"d480429666d48b400633921c5407d1d1");
let info = test::from_dirty_hex(r"f0f1f2f3f4f5f6f7f8f9");
let info_wrap = [info.as_slice()];
let sample = test::from_dirty_hex(r"b0b1b2b3b4b5b6b7b8b9babbbcbdbebf");
let prk = hkdf::Prk::new_less_safe(hkdf::HKDF_SHA256, &key_bytes);
let okm = prk.expand(&info_wrap, &AES_128).unwrap();
let hpk = HeaderProtectionKey::from(okm);
assert_eq!(&AES_128, hpk.algorithm());
assert_eq!(16, AES_128.key_len());
assert_eq!(16, AES_128.sample_len());
assert_eq!(32, AES_256.key_len());
assert_eq!(16, AES_256.sample_len());
assert_eq!(32, CHACHA20.key_len());
assert_eq!(16, CHACHA20.sample_len());
let mask = hpk.new_mask(&sample).unwrap();
let ring_prk = ring::hkdf::Prk::new_less_safe(ring::hkdf::HKDF_SHA256, &key_bytes);
let ring_okm = ring_prk
.expand(&info_wrap, &ring::aead::quic::AES_128)
.unwrap();
let ring_hpk = ring::aead::quic::HeaderProtectionKey::from(ring_okm);
let ring_mask = ring_hpk.new_mask(&sample).unwrap();
assert_eq!(mask, ring_mask);
}