diff --git a/libsignal-service/src/cipher.rs b/libsignal-service/src/cipher.rs index 7cdf23441..9641b3089 100644 --- a/libsignal-service/src/cipher.rs +++ b/libsignal-service/src/cipher.rs @@ -104,6 +104,15 @@ where }); }; + let server_guid = + envelope.server_guid.as_ref().and_then(|g| match g.parse() { + Ok(uuid) => Some(uuid), + Err(e) => { + log::error!("Unparseable server_guid ({})", e); + None + }, + }); + use crate::proto::envelope::Type; let plaintext = match envelope.r#type() { Type::PrekeyBundle => { @@ -119,6 +128,7 @@ where timestamp: envelope.server_timestamp(), needs_receipt: false, unidentified_sender: false, + server_guid, }; let mut data = message_decrypt_prekey( @@ -156,6 +166,7 @@ where timestamp: envelope.server_timestamp(), needs_receipt: false, unidentified_sender: false, + server_guid, }; Plaintext { metadata, @@ -175,6 +186,7 @@ where timestamp: envelope.timestamp(), needs_receipt: false, unidentified_sender: false, + server_guid, }; let mut data = message_decrypt_signal( @@ -245,6 +257,7 @@ where timestamp: envelope.timestamp(), unidentified_sender: true, needs_receipt, + server_guid, }; strip_padding(&mut message)?; diff --git a/libsignal-service/src/content.rs b/libsignal-service/src/content.rs index 81da1c1d7..b82882342 100644 --- a/libsignal-service/src/content.rs +++ b/libsignal-service/src/content.rs @@ -1,4 +1,5 @@ use libsignal_protocol::ProtocolAddress; +use uuid::Uuid; use crate::proto::PniSignatureMessage; pub use crate::{ @@ -22,6 +23,8 @@ pub struct Metadata { pub timestamp: u64, pub needs_receipt: bool, pub unidentified_sender: bool, + + pub server_guid: Option, } impl Metadata {