pub struct Signal<'a> { /* private fields */ }Expand description
Feature handle for Signal protocol operations.
Implementations§
Source§impl<'a> Signal<'a>
impl<'a> Signal<'a>
Sourcepub async fn install_prekey_bundle(
&self,
jid: &Jid,
bundle: &PreKeyBundle,
) -> Result<IdentityChange, SignalError>
pub async fn install_prekey_bundle( &self, jid: &Jid, bundle: &PreKeyBundle, ) -> Result<IdentityChange, SignalError>
Install a supplied pairwise pre-key bundle and durably expose the new session before returning.
Sourcepub async fn process_sender_key_distribution(
&self,
group_jid: &Jid,
sender_jid: &Jid,
distribution: &[u8],
) -> Result<(), SignalError>
pub async fn process_sender_key_distribution( &self, group_jid: &Jid, sender_jid: &Jid, distribution: &[u8], ) -> Result<(), SignalError>
Process a sender-key distribution and durably expose it before return.
Sourcepub async fn sender_key_distribution(
&self,
group_jid: &Jid,
sender_jid: &Jid,
) -> Result<Vec<u8>, SignalError>
pub async fn sender_key_distribution( &self, group_jid: &Jid, sender_jid: &Jid, ) -> Result<Vec<u8>, SignalError>
Create the current sender-key distribution for a group.
Sourcepub async fn has_sender_key(
&self,
group_jid: &Jid,
sender_jid: &Jid,
) -> Result<bool, SignalError>
pub async fn has_sender_key( &self, group_jid: &Jid, sender_jid: &Jid, ) -> Result<bool, SignalError>
Check whether sender-key state exists for a group and sender.
Sourcepub async fn delete_sender_key(
&self,
group_jid: &Jid,
sender_jid: &Jid,
) -> Result<(), SignalError>
pub async fn delete_sender_key( &self, group_jid: &Jid, sender_jid: &Jid, ) -> Result<(), SignalError>
Delete one sender-key chain and make the removal durable before returning.
Sourcepub async fn session_info(
&self,
jid: &Jid,
) -> Result<Option<SignalSessionInfo>, SignalError>
pub async fn session_info( &self, jid: &Jid, ) -> Result<Option<SignalSessionInfo>, SignalError>
Inspect the currently open pairwise session for a JID.
Sourcepub async fn migrate_sessions(
&self,
from: &Jid,
to: &Jid,
) -> Result<SignalSessionMigration, SignalError>
pub async fn migrate_sessions( &self, from: &Jid, to: &Jid, ) -> Result<SignalSessionMigration, SignalError>
Move pairwise session state from a phone-number namespace to its linked identifier namespace across known device slots.
Sourcepub async fn encrypt_message(
&self,
jid: &Jid,
plaintext: &[u8],
) -> Result<(EncType, Vec<u8>), SignalError>
pub async fn encrypt_message( &self, jid: &Jid, plaintext: &[u8], ) -> Result<(EncType, Vec<u8>), SignalError>
Encrypt plaintext for a single recipient using the Signal protocol.
Returns (EncType, ciphertext_bytes). The caller is responsible
for padding if needed; this method encrypts raw bytes.
PN JIDs are resolved to LID, with a legacy PN session migrated lazily if the resolved lookup misses.
Sourcepub async fn decrypt_message(
&self,
jid: &Jid,
enc_type: EncType,
ciphertext: &[u8],
) -> Result<Vec<u8>, SignalError>
pub async fn decrypt_message( &self, jid: &Jid, enc_type: EncType, ciphertext: &[u8], ) -> Result<Vec<u8>, SignalError>
Decrypt a Signal protocol message from a sender.
Returns raw padded plaintext. Use MessageUtils::unpad_message_ref
with the stanza’s v attribute if WhatsApp message unpadding is needed.
PN JIDs are resolved to LID, with a legacy PN session migrated lazily if the resolved lookup misses.
Sourcepub async fn encrypt_group_message(
&self,
group_jid: &Jid,
plaintext: &[u8],
) -> Result<(Option<Vec<u8>>, Vec<u8>), SignalError>
pub async fn encrypt_group_message( &self, group_jid: &Jid, plaintext: &[u8], ) -> Result<(Option<Vec<u8>>, Vec<u8>), SignalError>
Encrypt plaintext for a group using sender keys.
Returns (Option<skdm_bytes>, ciphertext_bytes). The SKDM is Some
while a new sender key still requires distribution (first encrypt for
this group, after key rotation, or a retry whose earlier durability
gate failed). Callers must distribute the SKDM to all group participants
when present.
Concurrent calls for the same (group, sender) are serialized on the
sender-key chain, so the SKDM and the skmsg can’t be split across keys.
Sourcepub async fn decrypt_group_message(
&self,
group_jid: &Jid,
sender_jid: &Jid,
ciphertext: &[u8],
) -> Result<Vec<u8>, SignalError>
pub async fn decrypt_group_message( &self, group_jid: &Jid, sender_jid: &Jid, ciphertext: &[u8], ) -> Result<Vec<u8>, SignalError>
Decrypt a group (sender-key) message.
Returns raw padded plaintext. Use MessageUtils::unpad_message_ref
with the stanza’s v attribute if WhatsApp message unpadding is needed.
Concurrent mutations of the same sender-key chain are serialized.
Sourcepub async fn validate_session(&self, jid: &Jid) -> Result<bool, SignalError>
pub async fn validate_session(&self, jid: &Jid) -> Result<bool, SignalError>
Check whether a Signal session exists for jid.
PN JIDs are resolved to LID when a LID mapping exists, matching the encrypt/decrypt paths.
Sourcepub async fn delete_sessions(&self, jids: &[Jid]) -> Result<(), SignalError>
pub async fn delete_sessions(&self, jids: &[Jid]) -> Result<(), SignalError>
Delete Signal sessions and identity keys for the given JIDs.
Matches WA Web’s deleteRemoteSession which removes both session
and identity as a paired operation. Changes are flushed to the
persistent backend before returning.
When a supplied PN JID resolves to LID, both namespace representations are removed so legacy PN state cannot be migrated back after deletion.
Sourcepub async fn create_participant_nodes(
&self,
recipient_jids: &[Jid],
message: &Message,
) -> Result<(Vec<Node>, bool), SignalError>
pub async fn create_participant_nodes( &self, recipient_jids: &[Jid], message: &Message, ) -> Result<(Vec<Node>, bool), SignalError>
Create encrypted participant <to> nodes for the given recipient JIDs.
Resolves devices, ensures Signal sessions, encrypts the message for each device, and returns the resulting XML nodes.
Returns (nodes, should_include_device_identity).
Sourcepub async fn assert_sessions(&self, jids: &[Jid]) -> Result<(), SignalError>
pub async fn assert_sessions(&self, jids: &[Jid]) -> Result<(), SignalError>
Ensure E2E sessions exist for the given JIDs.
Sourcepub async fn get_user_devices(
&self,
jids: &[Jid],
) -> Result<Vec<Jid>, SignalError>
pub async fn get_user_devices( &self, jids: &[Jid], ) -> Result<Vec<Jid>, SignalError>
Get all known device JIDs for the given user JIDs via usync.
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for Signal<'a>
impl<'a> !UnwindSafe for Signal<'a>
impl<'a> Freeze for Signal<'a>
impl<'a> Send for Signal<'a>
impl<'a> Sync for Signal<'a>
impl<'a> Unpin for Signal<'a>
impl<'a> UnsafeUnpin for Signal<'a>
Blanket Implementations§
Source§impl<T> AggregateExpressionMethods for T
impl<T> AggregateExpressionMethods for T
Source§fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
fn aggregate_distinct(self) -> Self::Outputwhere
Self: DistinctDsl,
DISTINCT modifier for aggregate functions Read moreSource§fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
fn aggregate_all(self) -> Self::Outputwhere
Self: AllDsl,
ALL modifier for aggregate functions Read moreSource§fn aggregate_filter<P>(self, f: P) -> Self::Output
fn aggregate_filter<P>(self, f: P) -> Self::Output
Source§fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
fn aggregate_order<O>(self, o: O) -> Self::Outputwhere
Self: OrderAggregateDsl<O>,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> IntoSql for T
impl<T> IntoSql for T
Source§fn into_sql<T>(self) -> Self::Expression
fn into_sql<T>(self) -> Self::Expression
self to an expression for Diesel’s query builder. Read moreSource§fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
fn as_sql<'a, T>(&'a self) -> <&'a Self as AsExpression<T>>::Expression
&self to an expression for Diesel’s query builder. Read more