// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // Copyright by contributors to this project. // SPDX-License-Identifier: (Apache-2.0 OR MIT) use 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( package: &KeyPackage, version: ProtocolVersion, cs: &CSP, ) -> Result<(), MlsError> { package .verify(cs, &package.leaf_node.signing_identity.signature_key, &()) .await?; // Verify that the protocol version matches if package.version != version { return Err(MlsError::ProtocolVersionMismatch); } // Verify that the cipher suite matches if package.cipher_suite != cs.cipher_suite() { return Err(MlsError::CipherSuiteMismatch); } // Verify that the public init key is a valid format for this cipher suite cs.kem_public_key_validate(&package.hpke_init_key) .map_err(|_| MlsError::InvalidInitKey)?; // Verify that the init key and the leaf node public key are different if package.hpke_init_key.as_ref() == package.leaf_node.public_key.as_ref() { return Err(MlsError::InitLeafKeyEquality); } Ok(()) }