use crate::test_utils::frankenstein::*;
use crate::test_utils::single_group_test_framework::*;
use crate::prelude::{KeyPackageIn, KeyPackageVerifyError, ProtocolVersion};
use tls_codec::VLBytes;
macro_rules! test_valn0108 {
($franken_key_package:expr, $crypto:expr, $should_succeed:expr) => {
let key_package_in: KeyPackageIn = $franken_key_package.into();
let result = key_package_in.validate($crypto, ProtocolVersion::default());
if $should_succeed {
assert!(result.is_ok());
} else {
assert_eq!(
result,
Err(KeyPackageVerifyError::InvalidLeafNodeSourceType)
);
}
};
}
#[cfg(test)]
impl FrankenKeyPackage {
fn with_leaf_node_source(mut self, source: FrankenLeafNodeSource) -> Self {
self.payload.leaf_node.payload.leaf_node_source = source;
self
}
}
#[openmls_test::openmls_test]
fn valn0108() {
let alice_party = CorePartyState::<Provider>::new("alice");
let alice_pre_group = alice_party.generate_pre_group(ciphersuite);
let alice_key_package = alice_pre_group.key_package_bundle.key_package();
let franken_key_package = FrankenKeyPackage::from(alice_key_package.clone());
assert!(matches!(
franken_key_package
.payload
.leaf_node
.payload
.leaf_node_source,
FrankenLeafNodeSource::KeyPackage(_)
));
test_valn0108!(
franken_key_package.clone(),
alice_party.provider.crypto(),
true
);
let updated_key_package = franken_key_package
.clone()
.with_leaf_node_source(FrankenLeafNodeSource::Update);
test_valn0108!(updated_key_package, alice_party.provider.crypto(), false);
let updated_key_package = franken_key_package
.clone()
.with_leaf_node_source(FrankenLeafNodeSource::Commit(VLBytes::new(vec![1; 32])));
test_valn0108!(updated_key_package, alice_party.provider.crypto(), false);
}