/ src / core / api / mod.rs
mod.rs
 1  //! Core API for MLS group operations.
 2  //!
 3  //! This module provides the fundamental building blocks for MLS group management.
 4  //! All functions operate on [`GroupHandle`] instances for app-level state and
 5  //! [`MlsService`] for MLS cryptographic operations.
 6  //!
 7  //! # Overview
 8  //!
 9  //! The API is organized into three categories:
10  //!
11  //! ## Group Lifecycle
12  //! - [`create_group`] - Create a new group as steward
13  //! - [`prepare_to_join`] - Prepare a handle for joining
14  //! - [`join_group_from_invite`] - Complete join with welcome message
15  //!
16  //! ## Message Operations
17  //! - [`build_message`] - Encrypt an application message for the group
18  //! - [`build_key_package_message`] - Create key package for joining
19  //!
20  //! ## Inbound Processing
21  //! - [`process_inbound`] - Process received packets, returns [`ProcessResult`]
22  //!
23  //! ## Steward Operations
24  //! - [`create_commit_candidate`] - Build/broadcast commit candidate (no immediate merge)
25  //! - [`finalize_freeze_round`] - Select and apply a buffered candidate
26  
27  use openmls_rust_crypto::MemoryStorage;
28  use prost::Message;
29  use sha2::{Digest, Sha256};
30  use std::collections::{HashMap, VecDeque};
31  use tracing::{info, warn};
32  
33  use crate::core::{
34      ProposalId,
35      error::CoreError,
36      group_handle::{BufferedCommitCandidate, GroupHandle},
37      types::ProcessResult,
38      types::invitation_from_bytes,
39  };
40  use crate::ds::{APP_MSG_SUBTOPIC, OutboundPacket, WELCOME_SUBTOPIC};
41  use crate::mls_crypto::{
42      CommitCandidate as MlsCommitCandidate, DeMlsStorage, DecryptResult, GroupUpdate,
43      KeyPackageBytes, MlsMessageKind, MlsProposalAction, MlsService, StagedCommitResult,
44      key_package_bytes_from_json,
45  };
46  use crate::protos::de_mls::messages::v1::{
47      AppMessage, CommitCandidate, GroupUpdateRequest, InviteMember, UserKeyPackage,
48      ViolationEvidence, WelcomeMessage, app_message, group_update_request, welcome_message,
49  };
50  
51  mod freeze;
52  mod inbound;
53  mod lifecycle;
54  mod steward;
55  mod validation;
56  
57  #[cfg(test)]
58  mod tests;
59  
60  pub use freeze::{FreezeFinalizeResult, finalize_freeze_round};
61  pub use inbound::process_inbound;
62  pub use lifecycle::{
63      build_key_package_message, build_message, create_group, join_group_from_invite, prepare_to_join,
64  };
65  pub use steward::{
66      approved_proposals, approved_proposals_count, create_commit_candidate, epoch_history,
67      group_members,
68  };
69  
70  #[cfg(test)]
71  pub(crate) use validation::validate_commit_candidate;