Skip to content

Commit

Permalink
Use rayon when generating welcome message (#9)
Browse files Browse the repository at this point in the history
Co-authored-by: Marta Mularczyk <mulmarta@amazon.com>
  • Loading branch information
mulmarta and Marta Mularczyk committed Nov 7, 2023
1 parent 59e3e68 commit 144c7c6
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 26 deletions.
5 changes: 5 additions & 0 deletions mls-rs/benches/group_add.rs
Expand Up @@ -9,6 +9,7 @@ use mls_rs::{
basic::{BasicCredential, BasicIdentityProvider},
SigningIdentity,
},
mls_rules::{CommitOptions, DefaultMlsRules},
CipherSuite, CipherSuiteProvider, Client, CryptoProvider,
};
use mls_rs_crypto_openssl::OpensslCryptoProvider;
Expand Down Expand Up @@ -70,6 +71,10 @@ fn make_client(name: &str) -> Client<impl MlsConfig> {
Client::builder()
.crypto_provider(crypto_provider)
.identity_provider(BasicIdentityProvider)
.mls_rules(
DefaultMlsRules::new()
.with_commit_options(CommitOptions::new().with_ratchet_tree_extension(false)),
)
.signing_identity(
SigningIdentity::new(
BasicCredential::new(name.as_bytes().to_vec()).into_credential(),
Expand Down
65 changes: 44 additions & 21 deletions mls-rs/src/group/commit.rs
Expand Up @@ -21,6 +21,9 @@ use crate::{
ExtensionList, MlsRules,
};

#[cfg(all(not(mls_build_async), feature = "rayon"))]
use {crate::iter::ParallelIteratorExt, rayon::prelude::*};

use crate::tree_kem::leaf_node::LeafNode;

#[cfg(not(feature = "private_message"))]
Expand Down Expand Up @@ -606,16 +609,13 @@ where

// Encrypt path secrets and joiner secret to new members
let path_secrets = path_secrets.as_ref();
let mut welcome_messages = Vec::new();
let mut encrypted_path_secrets = Vec::new();

let added_key_pkgs = added_key_pkgs
.into_iter()
.zip(provisional_state.indexes_of_added_kpkgs);

for (key_package, leaf_index) in added_key_pkgs {
let secret = self
.encrypt_group_secrets(
#[cfg(not(any(mls_build_async, not(feature = "rayon"))))]
let encrypted_path_secrets: Vec<_> = added_key_pkgs
.into_par_iter()
.zip(provisional_state.indexes_of_added_kpkgs)
.map(|(key_package, leaf_index)| {
self.encrypt_group_secrets(
&key_package,
leaf_index,
&key_schedule_result.joiner_secret,
Expand All @@ -624,20 +624,43 @@ where
psks.clone(),
&encrypted_group_info,
)
.await?;

if commit_options.single_welcome_message {
encrypted_path_secrets.push(secret);
} else {
welcome_messages
.push(self.make_welcome_message(vec![secret], encrypted_group_info.clone()));
})
.try_collect()?;

#[cfg(any(mls_build_async, not(feature = "rayon")))]
let encrypted_path_secrets = {
let mut secrets = Vec::new();

for (key_package, leaf_index) in added_key_pkgs
.into_iter()
.zip(provisional_state.indexes_of_added_kpkgs)
{
secrets.push(
self.encrypt_group_secrets(
&key_package,
leaf_index,
&key_schedule_result.joiner_secret,
path_secrets,
#[cfg(feature = "psk")]
psks.clone(),
&encrypted_group_info,
)
.await?,
);
}
}

if commit_options.single_welcome_message && !encrypted_path_secrets.is_empty() {
welcome_messages =
vec![self.make_welcome_message(encrypted_path_secrets, encrypted_group_info)];
}
secrets
};

let welcome_messages =
if commit_options.single_welcome_message && !encrypted_path_secrets.is_empty() {
vec![self.make_welcome_message(encrypted_path_secrets, encrypted_group_info)]
} else {
encrypted_path_secrets
.into_iter()
.map(|s| self.make_welcome_message(vec![s], encrypted_group_info.clone()))
.collect()
};

let commit_message = self.format_for_wire(auth_content.clone()).await?;

Expand Down
3 changes: 0 additions & 3 deletions mls-rs/src/group/mod.rs
Expand Up @@ -2176,9 +2176,6 @@ mod tests {
(test_group, commit)
}

// This test actually compiles without the by_ref_proposal feature, but it fails at runtime
// because the group context extensions seem to be updated only when this feature is enabled.
#[cfg(feature = "by_ref_proposal")]
#[maybe_async::test(not(mls_build_async), async(mls_build_async, crate::futures_test))]
async fn test_group_context_ext_proposal_commit() {
let mut extension_list = ExtensionList::new();
Expand Down
4 changes: 2 additions & 2 deletions mls-rs/test_harness_integration/Cargo.toml
Expand Up @@ -6,7 +6,7 @@ edition = "2021"
publish = false

[dependencies]
mls-rs = { path = "..", default-features = false, features = ["std", "external_client", "external_commit", "state_update", "all_extensions"]}
mls-rs = { path = "..", default-features = false, features = ["std", "external_client", "state_update"]}
tonic = "0.7"
prost = "0.10"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
Expand All @@ -22,7 +22,7 @@ prior_epoch = [ "mls-rs/prior_epoch" ]
out_of_order = [ "mls-rs/out_of_order", "private_message" ]
psk = [ "mls-rs/psk" ]
custom_proposal = [ "mls-rs/custom_proposal" ]
by_ref_proposal = [ "mls-rs/by_ref_proposal", "mls-rs/external_proposal" ]
by_ref_proposal = [ "mls-rs/by_ref_proposal" ]
default = ["tree_index", "private_message", "prior_epoch", "out_of_order", "psk", "custom_proposal", "by_ref_proposal"]

[target.'cfg(target_arch = "wasm32")'.dependencies]
Expand Down

0 comments on commit 144c7c6

Please sign in to comment.