1 // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2 // Copyright by contributors to this project. 3 // SPDX-License-Identifier: (Apache-2.0 OR MIT) 4 5 use crate::{ 6 extension::ExtensionType, 7 group::{mls_rules::MlsRules, proposal::ProposalType}, 8 identity::CredentialType, 9 protocol_version::ProtocolVersion, 10 tree_kem::{leaf_node::ConfigProperties, Capabilities, Lifetime}, 11 ExtensionList, 12 }; 13 use alloc::vec::Vec; 14 use mls_rs_core::{ 15 crypto::CryptoProvider, group::GroupStateStorage, identity::IdentityProvider, 16 key_package::KeyPackageStorage, psk::PreSharedKeyStorage, 17 }; 18 19 pub trait ClientConfig: Send + Sync + Clone { 20 type KeyPackageRepository: KeyPackageStorage + Clone; 21 type PskStore: PreSharedKeyStorage + Clone; 22 type GroupStateStorage: GroupStateStorage + Clone; 23 type IdentityProvider: IdentityProvider + Clone; 24 type MlsRules: MlsRules + Clone; 25 type CryptoProvider: CryptoProvider + Clone; 26 supported_extensions(&self) -> Vec<ExtensionType>27 fn supported_extensions(&self) -> Vec<ExtensionType>; supported_custom_proposals(&self) -> Vec<ProposalType>28 fn supported_custom_proposals(&self) -> Vec<ProposalType>; supported_protocol_versions(&self) -> Vec<ProtocolVersion>29 fn supported_protocol_versions(&self) -> Vec<ProtocolVersion>; 30 key_package_repo(&self) -> Self::KeyPackageRepository31 fn key_package_repo(&self) -> Self::KeyPackageRepository; 32 mls_rules(&self) -> Self::MlsRules33 fn mls_rules(&self) -> Self::MlsRules; 34 secret_store(&self) -> Self::PskStore35 fn secret_store(&self) -> Self::PskStore; group_state_storage(&self) -> Self::GroupStateStorage36 fn group_state_storage(&self) -> Self::GroupStateStorage; identity_provider(&self) -> Self::IdentityProvider37 fn identity_provider(&self) -> Self::IdentityProvider; crypto_provider(&self) -> Self::CryptoProvider38 fn crypto_provider(&self) -> Self::CryptoProvider; 39 key_package_extensions(&self) -> ExtensionList40 fn key_package_extensions(&self) -> ExtensionList; leaf_node_extensions(&self) -> ExtensionList41 fn leaf_node_extensions(&self) -> ExtensionList; lifetime(&self) -> Lifetime42 fn lifetime(&self) -> Lifetime; 43 capabilities(&self) -> Capabilities44 fn capabilities(&self) -> Capabilities { 45 Capabilities { 46 protocol_versions: self.supported_protocol_versions(), 47 cipher_suites: self.crypto_provider().supported_cipher_suites(), 48 extensions: self.supported_extensions(), 49 proposals: self.supported_custom_proposals(), 50 credentials: self.supported_credential_types(), 51 } 52 } 53 version_supported(&self, version: ProtocolVersion) -> bool54 fn version_supported(&self, version: ProtocolVersion) -> bool { 55 self.supported_protocol_versions().contains(&version) 56 } 57 supported_credential_types(&self) -> Vec<CredentialType>58 fn supported_credential_types(&self) -> Vec<CredentialType> { 59 self.identity_provider().supported_types() 60 } 61 leaf_properties(&self) -> ConfigProperties62 fn leaf_properties(&self) -> ConfigProperties { 63 ConfigProperties { 64 capabilities: self.capabilities(), 65 extensions: self.leaf_node_extensions(), 66 } 67 } 68 } 69