// 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::identity::IdentityProvider; use crate::{ crypto::SignaturePublicKey, extension::ExtensionType, group::{mls_rules::MlsRules, proposal::ProposalType}, identity::CredentialType, protocol_version::ProtocolVersion, tree_kem::Capabilities, CryptoProvider, }; pub trait ExternalClientConfig: Send + Sync + Clone { type IdentityProvider: IdentityProvider + Clone; type MlsRules: MlsRules + Clone; type CryptoProvider: CryptoProvider; fn supported_extensions(&self) -> Vec; fn supported_custom_proposals(&self) -> Vec; fn supported_protocol_versions(&self) -> Vec; fn identity_provider(&self) -> Self::IdentityProvider; fn crypto_provider(&self) -> Self::CryptoProvider; fn external_signing_key(&self, external_key_id: &[u8]) -> Option; fn mls_rules(&self) -> Self::MlsRules; fn cache_proposals(&self) -> bool; fn max_epoch_jitter(&self) -> Option { None } fn capabilities(&self) -> Capabilities { Capabilities { protocol_versions: self.supported_protocol_versions(), cipher_suites: self.crypto_provider().supported_cipher_suites(), extensions: self.supported_extensions(), proposals: self.supported_custom_proposals(), credentials: self.supported_credentials(), } } fn version_supported(&self, version: ProtocolVersion) -> bool { self.supported_protocol_versions().contains(&version) } fn supported_credentials(&self) -> Vec { self.identity_provider().supported_types() } }