From 5ecdee79d5300495703a890652a4d5aafbb17e8d Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Thu, 4 Jan 2024 15:25:32 +0100 Subject: [PATCH 01/13] Allow ACI/PNI store to be distinct types --- libsignal-service/src/provisioning/mod.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libsignal-service/src/provisioning/mod.rs b/libsignal-service/src/provisioning/mod.rs index 3fe28684e..aba0bf200 100644 --- a/libsignal-service/src/provisioning/mod.rs +++ b/libsignal-service/src/provisioning/mod.rs @@ -108,11 +108,12 @@ pub struct NewDeviceRegistration { pub async fn link_device< R: rand::Rng + rand::CryptoRng, - S: PreKeysStore, + Aci: PreKeysStore, + Pni: PreKeysStore, P: PushService, >( - aci_store: &mut S, - pni_store: &mut S, + aci_store: &mut Aci, + pni_store: &mut Pni, csprng: &mut R, mut push_service: P, password: &str, From 3972b8f12ea4374602773bf9a4dd3495ced393cd Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Thu, 4 Jan 2024 15:43:25 +0100 Subject: [PATCH 02/13] Make pre-key methods async --- libsignal-service/src/pre_keys.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/libsignal-service/src/pre_keys.rs b/libsignal-service/src/pre_keys.rs index c1c45ca6d..7e206d65d 100644 --- a/libsignal-service/src/pre_keys.rs +++ b/libsignal-service/src/pre_keys.rs @@ -1,6 +1,7 @@ use std::{convert::TryFrom, time::SystemTime}; use crate::utils::{serde_base64, serde_public_key}; +use async_trait::async_trait; use libsignal_protocol::{ error::SignalProtocolError, kem, GenericSignedPreKey, KeyPair, KyberPreKeyRecord, KyberPreKeyStore, PreKeyRecord, PreKeyStore, PublicKey, @@ -12,32 +13,33 @@ use serde::{Deserialize, Serialize}; /// Stores the ID of keys published ahead of time /// /// +#[async_trait(?Send)] pub trait PreKeysStore: PreKeyStore + SignedPreKeyStore + KyberPreKeyStore { /// ID of the next pre key - fn pre_keys_offset_id(&self) -> Result; + async fn pre_keys_offset_id(&self) -> Result; /// ID of the next signed pre key - fn next_signed_pre_key_id(&self) -> Result; + async fn next_signed_pre_key_id(&self) -> Result; /// ID of the next PQ pre key - fn next_pq_pre_key_id(&self) -> Result; + async fn next_pq_pre_key_id(&self) -> Result; /// set the ID of the next pre key - fn set_pre_keys_offset_id( + async fn set_pre_keys_offset_id( &mut self, id: u32, ) -> Result<(), SignalProtocolError>; /// set the ID of the next signed pre key - fn set_next_signed_pre_key_id( + async fn set_next_signed_pre_key_id( &mut self, id: u32, ) -> Result<(), SignalProtocolError>; /// set the ID of the next PQ pre key - fn set_next_pq_pre_key_id( + async fn set_next_pq_pre_key_id( &mut self, id: u32, ) -> Result<(), SignalProtocolError>; @@ -132,7 +134,7 @@ pub(crate) async fn generate_last_resort_kyber_key( store: &mut S, identity_key: &KeyPair, ) -> Result { - let id = store.next_pq_pre_key_id()?; + let id = store.next_pq_pre_key_id().await?; let id = id.max(1); // TODO: Hack, keys start with 1 let record = KyberPreKeyRecord::generate( @@ -142,7 +144,7 @@ pub(crate) async fn generate_last_resort_kyber_key( )?; store.save_kyber_pre_key(id.into(), &record).await?; - store.set_next_pq_pre_key_id(id + 1)?; + store.set_next_pq_pre_key_id(id + 1).await?; Ok(record) } @@ -155,7 +157,7 @@ pub(crate) async fn generate_signed_pre_key< csprng: &mut R, identity_key: &KeyPair, ) -> Result { - let id = store.next_signed_pre_key_id()?; + let id = store.next_signed_pre_key_id().await?; let id = id.max(1); // TODO: Hack, keys start with 1 let key_pair = KeyPair::generate(csprng); @@ -171,7 +173,7 @@ pub(crate) async fn generate_signed_pre_key< SignedPreKeyRecord::new(id.into(), unix_time, &key_pair, &signature); store.save_signed_pre_key(id.into(), &record).await?; - store.set_next_signed_pre_key_id(id + 1)?; + store.set_next_signed_pre_key_id(id + 1).await?; Ok(record) } From 19315addfbd1e61d55dc586fbc48d056583d2e3d Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Thu, 4 Jan 2024 15:43:31 +0100 Subject: [PATCH 03/13] Make `update_pre_key_bundle` generic over ServiceIdType --- libsignal-service/src/account_manager.rs | 33 ++++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/libsignal-service/src/account_manager.rs b/libsignal-service/src/account_manager.rs index cc2e2d1a2..982c800b9 100644 --- a/libsignal-service/src/account_manager.rs +++ b/libsignal-service/src/account_manager.rs @@ -7,7 +7,7 @@ use hmac::digest::Output; use hmac::{Hmac, Mac}; use libsignal_protocol::{ kem, GenericSignedPreKey, IdentityKeyStore, KeyPair, KyberPreKeyRecord, - PreKeyRecord, PrivateKey, ProtocolStore, PublicKey, SignalProtocolError, + PreKeyRecord, PrivateKey, PublicKey, SignalProtocolError, SignedPreKeyRecord, }; use prost::Message; @@ -16,7 +16,7 @@ use sha2::Sha256; use tracing_futures::Instrument; use zkgroup::profiles::ProfileKey; -use crate::pre_keys::KyberPreKeyEntity; +use crate::pre_keys::{KyberPreKeyEntity, PreKeysStore}; use crate::proto::DeviceName; use crate::push_service::{AvatarWrite, RecaptchaAttributes, ServiceIdType}; use crate::ServiceAddress; @@ -90,22 +90,27 @@ impl AccountManager { /// /// Returns the next pre-key offset, pq pre-key offset, and next signed pre-key offset as a tuple. #[allow(clippy::too_many_arguments)] - #[tracing::instrument(skip(self, protocol_store, csprng))] + #[tracing::instrument(skip(self, identity_store, pre_key_store, csprng))] pub async fn update_pre_key_bundle< R: rand::Rng + rand::CryptoRng, - P: ProtocolStore, + P: PreKeysStore, + I: IdentityKeyStore, >( &mut self, - protocol_store: &mut P, + identity_store: &mut I, + pre_key_store: &mut P, + service_id_type: ServiceIdType, csprng: &mut R, - pre_keys_offset_id: u32, - next_signed_pre_key_id: u32, - pq_pre_keys_offset_id: u32, use_last_resort_key: bool, ) -> Result<(u32, u32, u32), ServiceError> { + let pre_keys_offset_id = pre_key_store.pre_keys_offset_id().await?; + let next_signed_pre_key_id = + pre_key_store.next_signed_pre_key_id().await?; + let pq_pre_keys_offset_id = pre_key_store.next_pq_pre_key_id().await?; + let prekey_status = match self .service - .get_pre_key_status(ServiceIdType::AccountIdentity) + .get_pre_key_status(service_id_type) .instrument(tracing::span!( tracing::Level::DEBUG, "Fetching pre key status" @@ -142,7 +147,7 @@ impl AccountManager { tracing::span!(tracing::Level::DEBUG, "Generating pre keys"); let identity_key_pair = - protocol_store.get_identity_key_pair().instrument(tracing::trace_span!(parent: &span, "get identity key pair")).await?; + identity_store.get_identity_key_pair().instrument(tracing::trace_span!(parent: &span, "get identity key pair")).await?; let mut pre_key_entities = vec![]; let mut pq_pre_key_entities = vec![]; @@ -155,7 +160,7 @@ impl AccountManager { + 1) .into(); let pre_key_record = PreKeyRecord::new(pre_key_id, &key_pair); - protocol_store + pre_key_store .save_pre_key(pre_key_id, &pre_key_record) .instrument(tracing::trace_span!(parent: &span, "save pre key", ?pre_key_id)).await?; // TODO: Shouldn't this also remove the previous pre-keys from storage? @@ -176,7 +181,7 @@ impl AccountManager { pre_key_id, identity_key_pair.private_key(), )?; - protocol_store + pre_key_store .save_kyber_pre_key(pre_key_id, &pre_key_record) .instrument(tracing::trace_span!(parent: &span, "save kyber pre key", ?pre_key_id)).await?; // TODO: Shouldn't this also remove the previous pre-keys from storage? @@ -207,7 +212,7 @@ impl AccountManager { &signed_pre_key_signature, ); - protocol_store + pre_key_store .save_signed_pre_key( next_signed_pre_key_id.into(), &signed_prekey_record, @@ -239,7 +244,7 @@ impl AccountManager { }; self.service - .register_pre_keys(ServiceIdType::AccountIdentity, pre_key_state) + .register_pre_keys(service_id_type, pre_key_state) .instrument(tracing::span!( tracing::Level::DEBUG, "Uploading pre keys" From 59ecc90507d28bcfdc8ba0bdb40d28e8388e4fa3 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Thu, 4 Jan 2024 15:44:40 +0100 Subject: [PATCH 04/13] Rename pre_keys_offset_id for consistency --- libsignal-service/src/account_manager.rs | 2 +- libsignal-service/src/pre_keys.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libsignal-service/src/account_manager.rs b/libsignal-service/src/account_manager.rs index 982c800b9..e91cd0573 100644 --- a/libsignal-service/src/account_manager.rs +++ b/libsignal-service/src/account_manager.rs @@ -103,7 +103,7 @@ impl AccountManager { csprng: &mut R, use_last_resort_key: bool, ) -> Result<(u32, u32, u32), ServiceError> { - let pre_keys_offset_id = pre_key_store.pre_keys_offset_id().await?; + let pre_keys_offset_id = pre_key_store.next_pre_key_id().await?; let next_signed_pre_key_id = pre_key_store.next_signed_pre_key_id().await?; let pq_pre_keys_offset_id = pre_key_store.next_pq_pre_key_id().await?; diff --git a/libsignal-service/src/pre_keys.rs b/libsignal-service/src/pre_keys.rs index 7e206d65d..9f7673992 100644 --- a/libsignal-service/src/pre_keys.rs +++ b/libsignal-service/src/pre_keys.rs @@ -18,7 +18,7 @@ pub trait PreKeysStore: PreKeyStore + SignedPreKeyStore + KyberPreKeyStore { /// ID of the next pre key - async fn pre_keys_offset_id(&self) -> Result; + async fn next_pre_key_id(&self) -> Result; /// ID of the next signed pre key async fn next_signed_pre_key_id(&self) -> Result; From 1736145f1953916c0a5a439daa20b5e131126b49 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Thu, 4 Jan 2024 15:52:49 +0100 Subject: [PATCH 05/13] Rename set_pre_keys_offset_id for consistency --- libsignal-service/src/pre_keys.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsignal-service/src/pre_keys.rs b/libsignal-service/src/pre_keys.rs index 9f7673992..354840c76 100644 --- a/libsignal-service/src/pre_keys.rs +++ b/libsignal-service/src/pre_keys.rs @@ -27,7 +27,7 @@ pub trait PreKeysStore: async fn next_pq_pre_key_id(&self) -> Result; /// set the ID of the next pre key - async fn set_pre_keys_offset_id( + async fn set_next_pre_key_id( &mut self, id: u32, ) -> Result<(), SignalProtocolError>; From f63da04f9f2ab50b45817dffdc97b7b64eaf6fcd Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 5 Jan 2024 15:09:18 +0100 Subject: [PATCH 06/13] Add ServiceAddress::pni --- libsignal-service/src/service_address.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libsignal-service/src/service_address.rs b/libsignal-service/src/service_address.rs index 56121de67..423ff3737 100644 --- a/libsignal-service/src/service_address.rs +++ b/libsignal-service/src/service_address.rs @@ -29,6 +29,10 @@ impl ServiceAddress { pub fn aci(&self) -> libsignal_protocol::Aci { libsignal_protocol::Aci::from_uuid_bytes(self.uuid.into_bytes()) } + + pub fn pni(&self) -> libsignal_protocol::Pni { + libsignal_protocol::Pni::from_uuid_bytes(self.uuid.into_bytes()) + } } impl From for ServiceAddress { From 6b96bda15ed0af9e346af29d3dce9207aabc3133 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 5 Jan 2024 15:09:35 +0100 Subject: [PATCH 07/13] Add Eq/PartialEq to ServiceIdType --- libsignal-service/src/push_service.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsignal-service/src/push_service.rs b/libsignal-service/src/push_service.rs index 50e643035..8fd16e789 100644 --- a/libsignal-service/src/push_service.rs +++ b/libsignal-service/src/push_service.rs @@ -73,7 +73,7 @@ pub const STICKER_PATH: &str = "stickers/%s/full/%d"; pub const KEEPALIVE_TIMEOUT_SECONDS: Duration = Duration::from_secs(55); pub const DEFAULT_DEVICE_ID: u32 = 1; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Eq, PartialEq)] pub enum ServiceIdType { /// Account Identity (ACI) /// From e312c27180cf204a0c450dc21c64dbbb75dd5893 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 12 Jan 2024 13:01:21 +0100 Subject: [PATCH 08/13] Unsplit IdentityKeyStore from PreKeysStore --- libsignal-service/src/account_manager.rs | 20 +++++++++----------- libsignal-service/src/pre_keys.rs | 8 ++++---- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/libsignal-service/src/account_manager.rs b/libsignal-service/src/account_manager.rs index e91cd0573..330bfbc63 100644 --- a/libsignal-service/src/account_manager.rs +++ b/libsignal-service/src/account_manager.rs @@ -90,23 +90,21 @@ impl AccountManager { /// /// Returns the next pre-key offset, pq pre-key offset, and next signed pre-key offset as a tuple. #[allow(clippy::too_many_arguments)] - #[tracing::instrument(skip(self, identity_store, pre_key_store, csprng))] + #[tracing::instrument(skip(self, protocol_store, csprng))] pub async fn update_pre_key_bundle< R: rand::Rng + rand::CryptoRng, P: PreKeysStore, - I: IdentityKeyStore, >( &mut self, - identity_store: &mut I, - pre_key_store: &mut P, + protocol_store: &mut P, service_id_type: ServiceIdType, csprng: &mut R, use_last_resort_key: bool, ) -> Result<(u32, u32, u32), ServiceError> { - let pre_keys_offset_id = pre_key_store.next_pre_key_id().await?; + let pre_keys_offset_id = protocol_store.next_pre_key_id().await?; let next_signed_pre_key_id = - pre_key_store.next_signed_pre_key_id().await?; - let pq_pre_keys_offset_id = pre_key_store.next_pq_pre_key_id().await?; + protocol_store.next_signed_pre_key_id().await?; + let pq_pre_keys_offset_id = protocol_store.next_pq_pre_key_id().await?; let prekey_status = match self .service @@ -147,7 +145,7 @@ impl AccountManager { tracing::span!(tracing::Level::DEBUG, "Generating pre keys"); let identity_key_pair = - identity_store.get_identity_key_pair().instrument(tracing::trace_span!(parent: &span, "get identity key pair")).await?; + protocol_store.get_identity_key_pair().instrument(tracing::trace_span!(parent: &span, "get identity key pair")).await?; let mut pre_key_entities = vec![]; let mut pq_pre_key_entities = vec![]; @@ -160,7 +158,7 @@ impl AccountManager { + 1) .into(); let pre_key_record = PreKeyRecord::new(pre_key_id, &key_pair); - pre_key_store + protocol_store .save_pre_key(pre_key_id, &pre_key_record) .instrument(tracing::trace_span!(parent: &span, "save pre key", ?pre_key_id)).await?; // TODO: Shouldn't this also remove the previous pre-keys from storage? @@ -181,7 +179,7 @@ impl AccountManager { pre_key_id, identity_key_pair.private_key(), )?; - pre_key_store + protocol_store .save_kyber_pre_key(pre_key_id, &pre_key_record) .instrument(tracing::trace_span!(parent: &span, "save kyber pre key", ?pre_key_id)).await?; // TODO: Shouldn't this also remove the previous pre-keys from storage? @@ -212,7 +210,7 @@ impl AccountManager { &signed_pre_key_signature, ); - pre_key_store + protocol_store .save_signed_pre_key( next_signed_pre_key_id.into(), &signed_prekey_record, diff --git a/libsignal-service/src/pre_keys.rs b/libsignal-service/src/pre_keys.rs index 354840c76..17123c4b4 100644 --- a/libsignal-service/src/pre_keys.rs +++ b/libsignal-service/src/pre_keys.rs @@ -3,9 +3,9 @@ use std::{convert::TryFrom, time::SystemTime}; use crate::utils::{serde_base64, serde_public_key}; use async_trait::async_trait; use libsignal_protocol::{ - error::SignalProtocolError, kem, GenericSignedPreKey, KeyPair, - KyberPreKeyRecord, KyberPreKeyStore, PreKeyRecord, PreKeyStore, PublicKey, - SignedPreKeyRecord, SignedPreKeyStore, + error::SignalProtocolError, kem, GenericSignedPreKey, IdentityKeyStore, + KeyPair, KyberPreKeyRecord, KyberPreKeyStore, PreKeyRecord, PreKeyStore, + PublicKey, SignedPreKeyRecord, SignedPreKeyStore, }; use serde::{Deserialize, Serialize}; @@ -15,7 +15,7 @@ use serde::{Deserialize, Serialize}; /// #[async_trait(?Send)] pub trait PreKeysStore: - PreKeyStore + SignedPreKeyStore + KyberPreKeyStore + PreKeyStore + IdentityKeyStore + SignedPreKeyStore + KyberPreKeyStore { /// ID of the next pre key async fn next_pre_key_id(&self) -> Result; From a4d65b4823663a67787469104975882ec3e7160c Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 12 Jan 2024 13:23:36 +0100 Subject: [PATCH 09/13] Add PNI to ServiceCredentials --- libsignal-service/src/configuration.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/libsignal-service/src/configuration.rs b/libsignal-service/src/configuration.rs index de58b09e7..fdee9e2f8 100644 --- a/libsignal-service/src/configuration.rs +++ b/libsignal-service/src/configuration.rs @@ -26,6 +26,7 @@ pub type SignalingKey = [u8; CIPHER_KEY_SIZE + MAC_KEY_SIZE]; #[derive(Clone)] pub struct ServiceCredentials { pub uuid: Option, + pub pni: Option, pub phonenumber: phonenumber::PhoneNumber, pub password: Option, pub signaling_key: Option, From 22e199dc9e3be603b13be19d078342d80c46a8e7 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 12 Jan 2024 13:23:46 +0100 Subject: [PATCH 10/13] Add PNI to device linking --- libsignal-service/src/account_manager.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/libsignal-service/src/account_manager.rs b/libsignal-service/src/account_manager.rs index 330bfbc63..b76c2fa6f 100644 --- a/libsignal-service/src/account_manager.rs +++ b/libsignal-service/src/account_manager.rs @@ -318,7 +318,8 @@ impl AccountManager { pub async fn link_device( &mut self, url: url::Url, - identity_store: &dyn IdentityKeyStore, + aci_identity_store: &dyn IdentityKeyStore, + pni_identity_store: &dyn IdentityKeyStore, credentials: ServiceCredentials, ) -> Result<(), LinkError> { let query: HashMap<_, _> = url.query_pairs().collect(); @@ -330,7 +331,10 @@ impl AccountManager { let pub_key = PublicKey::deserialize(&pub_key) .map_err(|_e| LinkError::InvalidPublicKey)?; - let identity_key_pair = identity_store.get_identity_key_pair().await?; + let aci_identity_key_pair = + aci_identity_store.get_identity_key_pair().await?; + let pni_identity_key_pair = + pni_identity_store.get_identity_key_pair().await?; if credentials.uuid.is_none() { tracing::warn!("No local UUID set"); @@ -341,16 +345,19 @@ impl AccountManager { let msg = ProvisionMessage { aci: credentials.uuid.as_ref().map(|u| u.to_string()), aci_identity_key_public: Some( - identity_key_pair.public_key().serialize().into_vec(), + aci_identity_key_pair.public_key().serialize().into_vec(), ), aci_identity_key_private: Some( - identity_key_pair.private_key().serialize(), + aci_identity_key_pair.private_key().serialize(), ), number: Some(credentials.e164()), - // TODO: implement pni fields - pni_identity_key_public: None, - pni_identity_key_private: None, - pni: None, + pni_identity_key_public: Some( + pni_identity_key_pair.public_key().serialize().into_vec(), + ), + pni_identity_key_private: Some( + pni_identity_key_pair.private_key().serialize(), + ), + pni: credentials.pni.as_ref().map(uuid::Uuid::to_string), profile_key: self.profile_key.as_ref().map(|x| x.bytes.to_vec()), // CURRENT is not exposed by prost :( provisioning_version: Some(i32::from( From 36dd95eb6805e68aa1ea4e9560f949d2dac809d2 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 12 Jan 2024 13:28:59 +0100 Subject: [PATCH 11/13] Rename UUID to ACI in ServiceCredentials --- libsignal-service-actix/examples/registering.rs | 2 +- libsignal-service-hyper/examples/registering.rs | 2 +- libsignal-service/src/account_manager.rs | 6 +++--- libsignal-service/src/configuration.rs | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libsignal-service-actix/examples/registering.rs b/libsignal-service-actix/examples/registering.rs index fe3c8df2b..2d462a30f 100644 --- a/libsignal-service-actix/examples/registering.rs +++ b/libsignal-service-actix/examples/registering.rs @@ -58,7 +58,7 @@ async fn main() -> Result<(), Error> { let mut push_service = AwcPushService::new( servers, Some(ServiceCredentials { - uuid: None, + aci: None, phonenumber: phonenumber.clone(), password, signaling_key: None, diff --git a/libsignal-service-hyper/examples/registering.rs b/libsignal-service-hyper/examples/registering.rs index 6d6833b69..7e0313e75 100644 --- a/libsignal-service-hyper/examples/registering.rs +++ b/libsignal-service-hyper/examples/registering.rs @@ -148,7 +148,7 @@ fn create_push_service( HyperPushService::new( SignalServers::Staging, // You might want to switch to Production servers Some(ServiceCredentials { - uuid: None, + aci: None, phonenumber, password: Some(password), signaling_key: None, diff --git a/libsignal-service/src/account_manager.rs b/libsignal-service/src/account_manager.rs index b76c2fa6f..84a969eb0 100644 --- a/libsignal-service/src/account_manager.rs +++ b/libsignal-service/src/account_manager.rs @@ -336,14 +336,14 @@ impl AccountManager { let pni_identity_key_pair = pni_identity_store.get_identity_key_pair().await?; - if credentials.uuid.is_none() { - tracing::warn!("No local UUID set"); + if credentials.aci.is_none() { + tracing::warn!("No local ACI set"); } let provisioning_code = self.new_device_provisioning_code().await?; let msg = ProvisionMessage { - aci: credentials.uuid.as_ref().map(|u| u.to_string()), + aci: credentials.aci.as_ref().map(|u| u.to_string()), aci_identity_key_public: Some( aci_identity_key_pair.public_key().serialize().into_vec(), ), diff --git a/libsignal-service/src/configuration.rs b/libsignal-service/src/configuration.rs index fdee9e2f8..ac3d2e3fd 100644 --- a/libsignal-service/src/configuration.rs +++ b/libsignal-service/src/configuration.rs @@ -25,7 +25,7 @@ pub type SignalingKey = [u8; CIPHER_KEY_SIZE + MAC_KEY_SIZE]; #[derive(Clone)] pub struct ServiceCredentials { - pub uuid: Option, + pub aci: Option, pub pni: Option, pub phonenumber: phonenumber::PhoneNumber, pub password: Option, @@ -50,7 +50,7 @@ impl ServiceCredentials { pub fn login(&self) -> String { let identifier = { - if let Some(uuid) = self.uuid.as_ref() { + if let Some(uuid) = self.aci.as_ref() { uuid.to_string() } else { self.e164() From 1c3ccb211d5f49c4ba8cf8a13f45c8708a23d265 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 12 Jan 2024 13:29:18 +0100 Subject: [PATCH 12/13] Warn when no PNI is set --- libsignal-service/src/account_manager.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libsignal-service/src/account_manager.rs b/libsignal-service/src/account_manager.rs index 84a969eb0..7d0da2bf1 100644 --- a/libsignal-service/src/account_manager.rs +++ b/libsignal-service/src/account_manager.rs @@ -339,6 +339,9 @@ impl AccountManager { if credentials.aci.is_none() { tracing::warn!("No local ACI set"); } + if credentials.pni.is_none() { + tracing::warn!("No local PNI set"); + } let provisioning_code = self.new_device_provisioning_code().await?; From e42688cb74fe50a23249fe6f498eceed35310f66 Mon Sep 17 00:00:00 2001 From: Ruben De Smet Date: Fri, 12 Jan 2024 13:38:48 +0100 Subject: [PATCH 13/13] fixup! Add PNI to ServiceCredentials --- libsignal-service-actix/examples/registering.rs | 1 + libsignal-service-hyper/examples/registering.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/libsignal-service-actix/examples/registering.rs b/libsignal-service-actix/examples/registering.rs index 2d462a30f..727e55ad4 100644 --- a/libsignal-service-actix/examples/registering.rs +++ b/libsignal-service-actix/examples/registering.rs @@ -59,6 +59,7 @@ async fn main() -> Result<(), Error> { servers, Some(ServiceCredentials { aci: None, + pni: None, phonenumber: phonenumber.clone(), password, signaling_key: None, diff --git a/libsignal-service-hyper/examples/registering.rs b/libsignal-service-hyper/examples/registering.rs index 7e0313e75..12623ddf0 100644 --- a/libsignal-service-hyper/examples/registering.rs +++ b/libsignal-service-hyper/examples/registering.rs @@ -149,6 +149,7 @@ fn create_push_service( SignalServers::Staging, // You might want to switch to Production servers Some(ServiceCredentials { aci: None, + pni: None, phonenumber, password: Some(password), signaling_key: None,