mls_rs/key_package/
validator.rsuse mls_rs_core::{crypto::CipherSuiteProvider, protocol_version::ProtocolVersion};
use crate::{client::MlsError, signer::Signable, KeyPackage};
#[cfg_attr(not(mls_build_async), maybe_async::must_be_sync)]
pub(crate) async fn validate_key_package_properties<CSP: CipherSuiteProvider>(
package: &KeyPackage,
version: ProtocolVersion,
cs: &CSP,
) -> Result<(), MlsError> {
package
.verify(cs, &package.leaf_node.signing_identity.signature_key, &())
.await?;
if package.version != version {
return Err(MlsError::ProtocolVersionMismatch);
}
if package.cipher_suite != cs.cipher_suite() {
return Err(MlsError::CipherSuiteMismatch);
}
cs.kem_public_key_validate(&package.hpke_init_key)
.map_err(|_| MlsError::InvalidInitKey)?;
if package.hpke_init_key.as_ref() == package.leaf_node.public_key.as_ref() {
return Err(MlsError::InitLeafKeyEquality);
}
Ok(())
}