Skip to main content

p2panda_encryption/traits/
mod.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3//! Interfaces to integrate `p2panda-encryption` into custom data- and messaging types, group
4//! management- and ordering strategies.
5use std::fmt::Debug;
6use std::hash::Hash as StdHash;
7
8mod dgm;
9mod key_bundle;
10mod key_manager;
11mod key_registry;
12mod message;
13mod ordering;
14
15#[cfg(any(test, feature = "message_scheme"))]
16pub use dgm::AckedGroupMembership;
17#[cfg(any(test, feature = "data_scheme"))]
18pub use dgm::GroupMembership;
19pub use key_bundle::KeyBundle;
20pub use key_manager::{IdentityManager, PreKeyManager};
21pub use key_registry::{IdentityRegistry, PreKeyRegistry};
22#[cfg(any(test, feature = "message_scheme"))]
23pub use message::{ForwardSecureGroupMessage, ForwardSecureMessageContent};
24#[cfg(any(test, feature = "data_scheme"))]
25pub use message::{GroupMessage, GroupMessageContent};
26#[cfg(any(test, feature = "message_scheme"))]
27pub use ordering::ForwardSecureOrdering;
28#[cfg(any(test, feature = "data_scheme"))]
29pub use ordering::Ordering;
30
31/// Handle to identify a group member.
32///
33/// Note that this needs to be unique within a group, can be a username, number or preferably a
34/// long byte string.
35pub trait IdentityHandle: Copy + Debug + PartialEq + Eq + StdHash {}
36
37#[cfg(any(test, feature = "test_utils"))]
38impl IdentityHandle for &str {}
39
40#[cfg(any(test, feature = "test_utils"))]
41impl IdentityHandle for usize {}
42
43/// Identifier for each group membership operation.
44///
45/// Operations trigger changes of the group state and are usually sent in form of messages over the
46/// network. Each operation needs to be uniquely identifiable, preferably by a collision-resistant
47/// hash.
48pub trait OperationId: Copy + Debug + PartialEq + Eq + StdHash {}
49
50#[cfg(any(test, feature = "test_utils"))]
51impl OperationId for (usize, usize) {} // (ID, Seq)
52
53#[cfg(any(test, feature = "test_utils"))]
54impl OperationId for usize {}