0
0
mirror of https://github.com/signalapp/libsignal.git synced 2024-09-20 20:03:07 +02:00

[#289] introduce wrapper structs for DeviceId, SignedPreKeyId, and PreKeyId

This commit is contained in:
Danny McClanahan 2021-10-09 16:09:26 -04:00 committed by Jordan Rose
parent 9ad236264d
commit ec3c2d32bc
24 changed files with 327 additions and 246 deletions

View File

@ -182,7 +182,7 @@ pub unsafe extern "C" fn signal_sealed_session_cipher_decrypt(
timestamp,
local_e164,
local_uuid,
local_device_id,
local_device_id.into(),
&mut identity_store,
&mut session_store,
&mut prekey_store,
@ -194,7 +194,7 @@ pub unsafe extern "C" fn signal_sealed_session_cipher_decrypt(
write_optional_cstr_to(sender_e164, Ok(decrypted.sender_e164))?;
write_cstr_to(sender_uuid, Ok(decrypted.sender_uuid))?;
write_result_to(sender_device_id, decrypted.device_id)?;
write_result_to(sender_device_id, u32::from(decrypted.device_id))?;
write_bytearray_to(out, out_len, Some(decrypted.message))
})
}

View File

@ -197,12 +197,12 @@ pub struct FfiPreKeyStoreStruct {
impl PreKeyStore for &FfiPreKeyStoreStruct {
async fn get_pre_key(
&self,
prekey_id: u32,
prekey_id: PreKeyId,
ctx: Context,
) -> Result<PreKeyRecord, SignalProtocolError> {
let ctx = ctx.unwrap_or(std::ptr::null_mut());
let mut record = std::ptr::null_mut();
let result = (self.load_pre_key)(self.ctx, &mut record, prekey_id, ctx);
let result = (self.load_pre_key)(self.ctx, &mut record, prekey_id.into(), ctx);
if let Some(error) = CallbackError::check(result) {
return Err(SignalProtocolError::ApplicationCallbackError(
@ -221,12 +221,12 @@ impl PreKeyStore for &FfiPreKeyStoreStruct {
async fn save_pre_key(
&mut self,
prekey_id: u32,
prekey_id: PreKeyId,
record: &PreKeyRecord,
ctx: Context,
) -> Result<(), SignalProtocolError> {
let ctx = ctx.unwrap_or(std::ptr::null_mut());
let result = (self.store_pre_key)(self.ctx, prekey_id, record, ctx);
let result = (self.store_pre_key)(self.ctx, prekey_id.into(), record, ctx);
if let Some(error) = CallbackError::check(result) {
return Err(SignalProtocolError::ApplicationCallbackError(
@ -240,11 +240,11 @@ impl PreKeyStore for &FfiPreKeyStoreStruct {
async fn remove_pre_key(
&mut self,
prekey_id: u32,
prekey_id: PreKeyId,
ctx: Context,
) -> Result<(), SignalProtocolError> {
let ctx = ctx.unwrap_or(std::ptr::null_mut());
let result = (self.remove_pre_key)(self.ctx, prekey_id, ctx);
let result = (self.remove_pre_key)(self.ctx, prekey_id.into(), ctx);
if let Some(error) = CallbackError::check(result) {
return Err(SignalProtocolError::ApplicationCallbackError(
@ -282,12 +282,12 @@ pub struct FfiSignedPreKeyStoreStruct {
impl SignedPreKeyStore for &FfiSignedPreKeyStoreStruct {
async fn get_signed_pre_key(
&self,
prekey_id: u32,
prekey_id: SignedPreKeyId,
ctx: Context,
) -> Result<SignedPreKeyRecord, SignalProtocolError> {
let ctx = ctx.unwrap_or(std::ptr::null_mut());
let mut record = std::ptr::null_mut();
let result = (self.load_signed_pre_key)(self.ctx, &mut record, prekey_id, ctx);
let result = (self.load_signed_pre_key)(self.ctx, &mut record, prekey_id.into(), ctx);
if let Some(error) = CallbackError::check(result) {
return Err(SignalProtocolError::ApplicationCallbackError(
@ -307,12 +307,12 @@ impl SignedPreKeyStore for &FfiSignedPreKeyStoreStruct {
async fn save_signed_pre_key(
&mut self,
prekey_id: u32,
prekey_id: SignedPreKeyId,
record: &SignedPreKeyRecord,
ctx: Context,
) -> Result<(), SignalProtocolError> {
let ctx = ctx.unwrap_or(std::ptr::null_mut());
let result = (self.store_signed_pre_key)(self.ctx, prekey_id, record, ctx);
let result = (self.store_signed_pre_key)(self.ctx, prekey_id.into(), record, ctx);
if let Some(error) = CallbackError::check(result) {
return Err(SignalProtocolError::ApplicationCallbackError(

View File

@ -253,27 +253,27 @@ impl<'a> JniPreKeyStore<'a> {
impl<'a> PreKeyStore for JniPreKeyStore<'a> {
async fn get_pre_key(
&self,
prekey_id: u32,
prekey_id: PreKeyId,
_ctx: Context,
) -> Result<PreKeyRecord, SignalProtocolError> {
Ok(self.do_get_pre_key(prekey_id)?)
Ok(self.do_get_pre_key(prekey_id.into())?)
}
async fn save_pre_key(
&mut self,
prekey_id: u32,
prekey_id: PreKeyId,
record: &PreKeyRecord,
_ctx: Context,
) -> Result<(), SignalProtocolError> {
Ok(self.do_save_pre_key(prekey_id, record)?)
Ok(self.do_save_pre_key(prekey_id.into(), record)?)
}
async fn remove_pre_key(
&mut self,
prekey_id: u32,
prekey_id: PreKeyId,
_ctx: Context,
) -> Result<(), SignalProtocolError> {
Ok(self.do_remove_pre_key(prekey_id)?)
Ok(self.do_remove_pre_key(prekey_id.into())?)
}
}
@ -331,19 +331,19 @@ impl<'a> JniSignedPreKeyStore<'a> {
impl<'a> SignedPreKeyStore for JniSignedPreKeyStore<'a> {
async fn get_signed_pre_key(
&self,
prekey_id: u32,
prekey_id: SignedPreKeyId,
_ctx: Context,
) -> Result<SignedPreKeyRecord, SignalProtocolError> {
Ok(self.do_get_signed_pre_key(prekey_id)?)
Ok(self.do_get_signed_pre_key(prekey_id.into())?)
}
async fn save_signed_pre_key(
&mut self,
prekey_id: u32,
prekey_id: SignedPreKeyId,
record: &SignedPreKeyRecord,
_ctx: Context,
) -> Result<(), SignalProtocolError> {
Ok(self.do_save_signed_pre_key(prekey_id, record)?)
Ok(self.do_save_signed_pre_key(prekey_id.into(), record)?)
}
}

View File

@ -105,31 +105,31 @@ impl Finalize for NodePreKeyStore {
impl PreKeyStore for NodePreKeyStore {
async fn get_pre_key(
&self,
pre_key_id: u32,
pre_key_id: PreKeyId,
_ctx: libsignal_protocol::Context,
) -> Result<PreKeyRecord, SignalProtocolError> {
self.do_get_pre_key(pre_key_id)
self.do_get_pre_key(pre_key_id.into())
.await
.map_err(|s| js_error_to_rust("getPreKey", s))
}
async fn save_pre_key(
&mut self,
pre_key_id: u32,
pre_key_id: PreKeyId,
record: &PreKeyRecord,
_ctx: libsignal_protocol::Context,
) -> Result<(), SignalProtocolError> {
self.do_save_pre_key(pre_key_id, record.clone())
self.do_save_pre_key(pre_key_id.into(), record.clone())
.await
.map_err(|s| js_error_to_rust("savePreKey", s))
}
async fn remove_pre_key(
&mut self,
pre_key_id: u32,
pre_key_id: PreKeyId,
_ctx: libsignal_protocol::Context,
) -> Result<(), SignalProtocolError> {
self.do_remove_pre_key(pre_key_id)
self.do_remove_pre_key(pre_key_id.into())
.await
.map_err(|s| js_error_to_rust("removePreKey", s))
}
@ -210,21 +210,21 @@ impl Finalize for NodeSignedPreKeyStore {
impl SignedPreKeyStore for NodeSignedPreKeyStore {
async fn get_signed_pre_key(
&self,
signed_pre_key_id: u32,
signed_pre_key_id: SignedPreKeyId,
_ctx: libsignal_protocol::Context,
) -> Result<SignedPreKeyRecord, SignalProtocolError> {
self.do_get_signed_pre_key(signed_pre_key_id)
self.do_get_signed_pre_key(signed_pre_key_id.into())
.await
.map_err(|s| js_error_to_rust("getSignedPreKey", s))
}
async fn save_signed_pre_key(
&mut self,
signed_pre_key_id: u32,
signed_pre_key_id: SignedPreKeyId,
record: &SignedPreKeyRecord,
_ctx: libsignal_protocol::Context,
) -> Result<(), SignalProtocolError> {
self.do_save_signed_pre_key(signed_pre_key_id, record.clone())
self.do_save_signed_pre_key(signed_pre_key_id.into(), record.clone())
.await
.map_err(|s| js_error_to_rust("saveSignedPreKey", s))
}

View File

@ -1,5 +1,5 @@
//
// Copyright 2021 Signal Messenger, LLC.
// Copyright 2021-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -87,7 +87,7 @@ fn HKDF_Derive(output: &mut [u8], ikm: &[u8], label: &[u8], salt: &[u8]) -> Resu
#[bridge_fn(ffi = "address_new")]
fn ProtocolAddress_New(name: String, device_id: u32) -> ProtocolAddress {
ProtocolAddress::new(name, device_id)
ProtocolAddress::new(name, device_id.into())
}
#[bridge_fn(ffi = "publickey_deserialize", jni = false)]
@ -316,8 +316,8 @@ fn PreKeySignalMessage_New(
PreKeySignalMessage::new(
message_version,
registration_id,
pre_key_id,
signed_pre_key_id,
pre_key_id.map(|id| id.into()),
signed_pre_key_id.into(),
*base_key,
IdentityKey::new(*identity_key),
signal_message.clone(),
@ -496,9 +496,9 @@ fn PreKeyBundle_New(
) -> Result<PreKeyBundle> {
let identity_key = IdentityKey::new(*identity_key);
let prekey = match (prekey, prekey_id) {
let prekey: Option<(PreKeyId, PublicKey)> = match (prekey, prekey_id) {
(None, None) => None,
(Some(k), Some(id)) => Some((id, *k)),
(Some(k), Some(id)) => Some((id.into(), *k)),
_ => {
return Err(SignalProtocolError::InvalidArgument(
"Must supply both or neither of prekey and prekey_id".to_owned(),
@ -508,9 +508,9 @@ fn PreKeyBundle_New(
PreKeyBundle::new(
registration_id,
device_id,
device_id.into(),
prekey,
signed_prekey_id,
signed_prekey_id.into(),
*signed_prekey,
signed_prekey_signature.to_vec(),
identity_key,
@ -550,7 +550,7 @@ fn SignedPreKeyRecord_New(
signature: &[u8],
) -> SignedPreKeyRecord {
let keypair = KeyPair::new(*pub_key, *priv_key);
SignedPreKeyRecord::new(id, timestamp.as_millis(), &keypair, signature)
SignedPreKeyRecord::new(id.into(), timestamp.as_millis(), &keypair, signature)
}
bridge_deserialize!(PreKeyRecord::deserialize);
@ -565,7 +565,7 @@ bridge_get!(PreKeyRecord::private_key -> PrivateKey);
#[bridge_fn]
fn PreKeyRecord_New(id: u32, pub_key: &PublicKey, priv_key: &PrivateKey) -> PreKeyRecord {
let keypair = KeyPair::new(*pub_key, *priv_key);
PreKeyRecord::new(id, &keypair)
PreKeyRecord::new(id.into(), &keypair)
}
bridge_deserialize!(SenderKeyRecord::deserialize);
@ -631,7 +631,7 @@ fn SenderCertificate_New(
sender_uuid,
sender_e164,
*sender_key,
sender_device_id,
sender_device_id.into(),
expiration.as_millis(),
signer_cert.clone(),
signer_key,
@ -1101,7 +1101,7 @@ async fn SealedSender_DecryptMessage(
timestamp.as_millis(),
local_e164,
local_uuid,
local_device_id,
local_device_id.into(),
identity_store,
session_store,
prekey_store,

View File

@ -1,5 +1,5 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -20,7 +20,7 @@ pub fn ratchet_forward_result(c: &mut Criterion) -> Result<(), SignalProtocolErr
let mut csprng = rand::rngs::OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = support::test_in_memory_protocol_store()?;

View File

@ -16,8 +16,10 @@ mod support;
pub fn v1(c: &mut Criterion) {
let mut rng = OsRng;
let alice_address = ProtocolAddress::new("9d0652a3-dcc3-4d11-975f-74d61598733f".to_owned(), 1);
let bob_address = ProtocolAddress::new("796abedb-ca4e-4f18-8803-1fde5b921f9f".to_owned(), 1);
let alice_address =
ProtocolAddress::new("9d0652a3-dcc3-4d11-975f-74d61598733f".to_owned(), 1.into());
let bob_address =
ProtocolAddress::new("796abedb-ca4e-4f18-8803-1fde5b921f9f".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store().expect("brand new store");
let mut bob_store = support::test_in_memory_protocol_store().expect("brand new store");
@ -104,8 +106,10 @@ pub fn v1(c: &mut Criterion) {
pub fn v2(c: &mut Criterion) {
let mut rng = OsRng;
let alice_address = ProtocolAddress::new("9d0652a3-dcc3-4d11-975f-74d61598733f".to_owned(), 1);
let bob_address = ProtocolAddress::new("796abedb-ca4e-4f18-8803-1fde5b921f9f".to_owned(), 1);
let alice_address =
ProtocolAddress::new("9d0652a3-dcc3-4d11-975f-74d61598733f".to_owned(), 1.into());
let bob_address =
ProtocolAddress::new("796abedb-ca4e-4f18-8803-1fde5b921f9f".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store().expect("brand new store");
let mut bob_store = support::test_in_memory_protocol_store().expect("brand new store");
@ -201,7 +205,7 @@ pub fn v2(c: &mut Criterion) {
// Fill out additional recipients.
let mut recipients = vec![bob_address.clone()];
while recipients.len() < 10 {
let next_address = ProtocolAddress::new(Uuid::from_bytes(rng.gen()).to_string(), 1);
let next_address = ProtocolAddress::new(Uuid::from_bytes(rng.gen()).to_string(), 1.into());
let mut next_store = support::test_in_memory_protocol_store().expect("brand new store");

View File

@ -14,8 +14,8 @@ mod support;
pub fn session_encrypt_result(c: &mut Criterion) -> Result<(), SignalProtocolError> {
let (alice_session_record, bob_session_record) = support::initialize_sessions_v3()?;
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -98,9 +98,9 @@ pub fn session_encrypt_result(c: &mut Criterion) -> Result<(), SignalProtocolErr
.get_local_registration_id(None)
.now_or_never()
.expect("sync")?,
1, // device id
None, // pre key
signed_pre_key_id, // signed pre key id
1.into(), // device id
None, // pre key
signed_pre_key_id.into(), // signed pre key id
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store
@ -112,9 +112,9 @@ pub fn session_encrypt_result(c: &mut Criterion) -> Result<(), SignalProtocolErr
bob_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -183,8 +183,8 @@ pub fn session_encrypt_result(c: &mut Criterion) -> Result<(), SignalProtocolErr
pub fn session_encrypt_decrypt_result(c: &mut Criterion) -> Result<(), SignalProtocolError> {
let (alice_session_record, bob_session_record) = support::initialize_sessions_v3()?;
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;

View File

@ -1,5 +1,5 @@
//
// Copyright 2021 Signal Messenger, LLC.
// Copyright 2021-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -40,11 +40,11 @@ impl Participant {
.calculate_signature(&their_signed_pre_key_public, rng)
.unwrap();
let signed_pre_key_id = rng.gen_range(0, 0xFF_FFFF);
let signed_pre_key_id: SignedPreKeyId = rng.gen_range(0, 0xFF_FFFF).into();
them.store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
/*timestamp*/ 42,
@ -57,7 +57,7 @@ impl Participant {
.unwrap();
let pre_key_info = if use_one_time_pre_key {
let pre_key_id = rng.gen_range(0, 0xFF_FFFF);
let pre_key_id: PreKeyId = rng.gen_range(0, 0xFF_FFFF).into();
let one_time_pre_key = KeyPair::generate(rng);
them.store
@ -75,9 +75,9 @@ impl Participant {
let their_pre_key_bundle = PreKeyBundle::new(
them.store.get_local_registration_id(None).await.unwrap(),
1, // device id
pre_key_info,
signed_pre_key_id,
1.into(), // device id
pre_key_info.into(),
signed_pre_key_id.into(),
their_signed_pre_key_pair.public_key,
their_signed_pre_key_signature.into_vec(),
*them
@ -188,7 +188,7 @@ fuzz_target!(|data: (u64, &[u8])| {
let mut alice = Participant {
name: "alice",
address: ProtocolAddress::new("+14151111111".to_owned(), 1),
address: ProtocolAddress::new("+14151111111".to_owned(), 1.into()),
store: InMemSignalProtocolStore::new(
IdentityKeyPair::generate(&mut csprng),
csprng.gen(),
@ -199,7 +199,7 @@ fuzz_target!(|data: (u64, &[u8])| {
};
let mut bob = Participant {
name: "bob",
address: ProtocolAddress::new("+14151111112".to_owned(), 1),
address: ProtocolAddress::new("+14151111112".to_owned(), 1.into()),
store: InMemSignalProtocolStore::new(
IdentityKeyPair::generate(&mut csprng),
csprng.gen(),

View File

@ -1,5 +1,5 @@
//
// Copyright 2020-2021 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -16,7 +16,26 @@ use std::fmt;
/// represents some user.
///
/// Used in [ProtocolAddress].
pub type DeviceId = u32;
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, PartialOrd, Ord)]
pub struct DeviceId(u32);
impl From<u32> for DeviceId {
fn from(value: u32) -> Self {
Self(value)
}
}
impl From<DeviceId> for u32 {
fn from(value: DeviceId) -> Self {
value.0
}
}
impl fmt::Display for DeviceId {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.0)
}
}
/// Represents a unique Signal client instance as `(<user ID>, <device ID>)` pair.
#[derive(Clone, Debug, Hash, Eq, PartialEq, PartialOrd, Ord)]

View File

@ -73,7 +73,9 @@ pub use {
session_cipher::{
message_decrypt, message_decrypt_prekey, message_decrypt_signal, message_encrypt,
},
state::{PreKeyBundle, PreKeyRecord, SessionRecord, SignedPreKeyRecord},
state::{
PreKeyBundle, PreKeyId, PreKeyRecord, SessionRecord, SignedPreKeyId, SignedPreKeyRecord,
},
storage::{
Context, Direction, IdentityKeyStore, InMemIdentityKeyStore, InMemPreKeyStore,
InMemSenderKeyStore, InMemSessionStore, InMemSignalProtocolStore, InMemSignedPreKeyStore,

View File

@ -4,6 +4,7 @@
//
use crate::proto;
use crate::state::{PreKeyId, SignedPreKeyId};
use crate::{IdentityKey, PrivateKey, PublicKey, Result, SignalProtocolError};
use std::convert::TryFrom;
@ -236,8 +237,8 @@ impl TryFrom<&[u8]> for SignalMessage {
pub struct PreKeySignalMessage {
message_version: u8,
registration_id: u32,
pre_key_id: Option<u32>,
signed_pre_key_id: u32,
pre_key_id: Option<PreKeyId>,
signed_pre_key_id: SignedPreKeyId,
base_key: PublicKey,
identity_key: IdentityKey,
message: SignalMessage,
@ -248,16 +249,16 @@ impl PreKeySignalMessage {
pub fn new(
message_version: u8,
registration_id: u32,
pre_key_id: Option<u32>,
signed_pre_key_id: u32,
pre_key_id: Option<PreKeyId>,
signed_pre_key_id: SignedPreKeyId,
base_key: PublicKey,
identity_key: IdentityKey,
message: SignalMessage,
) -> Result<Self> {
let proto_message = proto::wire::PreKeySignalMessage {
registration_id: Some(registration_id),
pre_key_id,
signed_pre_key_id: Some(signed_pre_key_id),
pre_key_id: pre_key_id.map(|id| id.into()),
signed_pre_key_id: Some(signed_pre_key_id.into()),
base_key: Some(base_key.serialize().into_vec()),
identity_key: Some(identity_key.serialize().into_vec()),
message: Some(Vec::from(message.as_ref())),
@ -291,12 +292,12 @@ impl PreKeySignalMessage {
}
#[inline]
pub fn pre_key_id(&self) -> Option<u32> {
pub fn pre_key_id(&self) -> Option<PreKeyId> {
self.pre_key_id
}
#[inline]
pub fn signed_pre_key_id(&self) -> u32 {
pub fn signed_pre_key_id(&self) -> SignedPreKeyId {
self.signed_pre_key_id
}
@ -368,8 +369,8 @@ impl TryFrom<&[u8]> for PreKeySignalMessage {
Ok(PreKeySignalMessage {
message_version,
registration_id: proto_structure.registration_id.unwrap_or(0),
pre_key_id: proto_structure.pre_key_id,
signed_pre_key_id,
pre_key_id: proto_structure.pre_key_id.map(|id| id.into()),
signed_pre_key_id: signed_pre_key_id.into(),
base_key,
identity_key: IdentityKey::try_from(identity_key.as_ref())?,
message: SignalMessage::try_from(message.as_ref())?,
@ -906,7 +907,7 @@ mod tests {
3,
365,
None,
97,
97.into(),
base_key_pair.public_key,
identity_key_pair.public_key.into(),
message,
@ -1016,7 +1017,7 @@ mod tests {
3,
365,
None,
97,
97.into(),
base_key_pair.public_key,
identity_key_pair.public_key.into(),
message,

View File

@ -1,13 +1,13 @@
//
// Copyright 2020-2021 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
use crate::{
message_encrypt, CiphertextMessageType, Context, Direction, IdentityKey, IdentityKeyPair,
IdentityKeyStore, KeyPair, PreKeySignalMessage, PreKeyStore, PrivateKey, ProtocolAddress,
PublicKey, Result, SessionRecord, SessionStore, SignalMessage, SignalProtocolError,
SignedPreKeyStore,
message_encrypt, CiphertextMessageType, Context, DeviceId, Direction, IdentityKey,
IdentityKeyPair, IdentityKeyStore, KeyPair, PreKeySignalMessage, PreKeyStore, PrivateKey,
ProtocolAddress, PublicKey, Result, SessionRecord, SessionStore, SignalMessage,
SignalProtocolError, SignedPreKeyStore,
};
use crate::crypto;
@ -156,7 +156,7 @@ impl ServerCertificate {
pub struct SenderCertificate {
signer: ServerCertificate,
key: PublicKey,
sender_device_id: u32,
sender_device_id: DeviceId,
sender_uuid: String,
sender_e164: Option<String>,
expiration: u64,
@ -179,9 +179,10 @@ impl SenderCertificate {
proto::sealed_sender::sender_certificate::Certificate::decode(certificate.as_ref())
.map_err(|_| SignalProtocolError::InvalidProtobufEncoding)?;
let sender_device_id = certificate_data
let sender_device_id: DeviceId = certificate_data
.sender_device
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?;
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?
.into();
let expiration = certificate_data
.expires
.ok_or(SignalProtocolError::InvalidProtobufEncoding)?;
@ -219,7 +220,7 @@ impl SenderCertificate {
sender_uuid: String,
sender_e164: Option<String>,
key: PublicKey,
sender_device_id: u32,
sender_device_id: DeviceId,
expiration: u64,
signer: ServerCertificate,
signer_key: &PrivateKey,
@ -228,7 +229,7 @@ impl SenderCertificate {
let certificate_pb = proto::sealed_sender::sender_certificate::Certificate {
sender_uuid: Some(sender_uuid.clone()),
sender_e164: sender_e164.clone(),
sender_device: Some(sender_device_id),
sender_device: Some(sender_device_id.into()),
expires: Some(expiration),
identity_key: Some(key.serialize().to_vec()),
signer: Some(signer.to_protobuf()?),
@ -292,7 +293,7 @@ impl SenderCertificate {
Ok(self.key)
}
pub fn sender_device_id(&self) -> Result<u32> {
pub fn sender_device_id(&self) -> Result<DeviceId> {
Ok(self.sender_device_id)
}
@ -1307,7 +1308,8 @@ pub async fn sealed_sender_multi_recipient_encrypt<R: Rng + CryptoRng>(
let end_of_previous_recipient_data = serialized.len();
serialized.extend_from_slice(their_uuid.as_bytes());
prost::encode_length_delimiter(destination.device_id() as usize, &mut serialized)
let device_id: u32 = destination.device_id().into();
prost::encode_length_delimiter(device_id as usize, &mut serialized)
.expect("cannot fail encoding to Vec");
serialized.extend_from_slice(&their_registration_id.to_be_bytes());
@ -1563,7 +1565,7 @@ pub async fn sealed_sender_decrypt_to_usmc(
pub struct SealedSenderDecryptionResult {
pub sender_uuid: String,
pub sender_e164: Option<String>,
pub device_id: u32,
pub device_id: DeviceId,
pub message: Vec<u8>,
}
@ -1576,7 +1578,7 @@ impl SealedSenderDecryptionResult {
Ok(self.sender_e164.as_deref())
}
pub fn device_id(&self) -> Result<u32> {
pub fn device_id(&self) -> Result<DeviceId> {
Ok(self.device_id)
}
@ -1599,7 +1601,7 @@ pub async fn sealed_sender_decrypt(
timestamp: u64,
local_e164: Option<String>,
local_uuid: String,
local_device_id: u32,
local_device_id: DeviceId,
identity_store: &mut dyn IdentityKeyStore,
session_store: &mut dyn SessionStore,
pre_key_store: &mut dyn PreKeyStore,

View File

@ -1,16 +1,16 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
use crate::{
Context, Direction, IdentityKeyStore, KeyPair, PreKeyBundle, PreKeySignalMessage, PreKeyStore,
ProtocolAddress, Result, SessionRecord, SessionStore, SignalProtocolError, SignedPreKeyStore,
Context, Direction, IdentityKeyStore, KeyPair, PreKeyBundle, PreKeyId, PreKeySignalMessage,
PreKeyStore, ProtocolAddress, Result, SessionRecord, SessionStore, SignalProtocolError,
SignedPreKeyStore,
};
use crate::ratchet;
use crate::ratchet::{AliceSignalProtocolParameters, BobSignalProtocolParameters};
use crate::state::PreKeyId;
use rand::{CryptoRng, Rng};
/*

View File

@ -1,5 +1,5 @@
//
// Copyright 2020-2021 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//

View File

@ -4,12 +4,12 @@
//
use crate::state::{PreKeyId, SignedPreKeyId};
use crate::{IdentityKey, PublicKey, Result};
use crate::{DeviceId, IdentityKey, PublicKey, Result};
#[derive(Debug, Clone)]
pub struct PreKeyBundle {
registration_id: u32,
device_id: u32,
device_id: DeviceId,
pre_key_id: Option<PreKeyId>,
pre_key_public: Option<PublicKey>,
signed_pre_key_id: SignedPreKeyId,
@ -21,7 +21,7 @@ pub struct PreKeyBundle {
impl PreKeyBundle {
pub fn new(
registration_id: u32,
device_id: u32,
device_id: DeviceId,
pre_key: Option<(PreKeyId, PublicKey)>,
signed_pre_key_id: SignedPreKeyId,
signed_pre_key_public: PublicKey,
@ -49,7 +49,7 @@ impl PreKeyBundle {
Ok(self.registration_id)
}
pub fn device_id(&self) -> Result<u32> {
pub fn device_id(&self) -> Result<DeviceId> {
Ok(self.device_id)
}

View File

@ -1,13 +1,36 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
use crate::proto::storage::PreKeyRecordStructure;
use crate::{KeyPair, PrivateKey, PublicKey, Result, SignalProtocolError};
use prost::Message;
pub type PreKeyId = u32;
use std::fmt;
/// A unique identifier selecting among this client's known pre-keys.
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
pub struct PreKeyId(u32);
impl From<u32> for PreKeyId {
fn from(value: u32) -> Self {
Self(value)
}
}
impl From<PreKeyId> for u32 {
fn from(value: PreKeyId) -> Self {
value.0
}
}
impl fmt::Display for PreKeyId {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Debug, Clone)]
pub struct PreKeyRecord {
@ -20,7 +43,7 @@ impl PreKeyRecord {
let private_key = key.private_key.serialize().to_vec();
Self {
pre_key: PreKeyRecordStructure {
id,
id: id.into(),
public_key,
private_key,
},
@ -35,7 +58,7 @@ impl PreKeyRecord {
}
pub fn id(&self) -> Result<PreKeyId> {
Ok(self.pre_key.id)
Ok(self.pre_key.id.into())
}
pub fn key_pair(&self) -> Result<KeyPair> {

View File

@ -1,5 +1,5 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -401,8 +401,9 @@ impl SessionState {
signed_pre_key_id: SignedPreKeyId,
base_key: &PublicKey,
) {
let signed_pre_key_id: u32 = signed_pre_key_id.into();
let pending = session_structure::PendingPreKey {
pre_key_id: pre_key_id.unwrap_or(0),
pre_key_id: pre_key_id.map(PreKeyId::into).unwrap_or(0),
signed_pre_key_id: signed_pre_key_id as i32,
base_key: base_key.serialize().to_vec(),
};
@ -416,9 +417,9 @@ impl SessionState {
Ok(Some(UnacknowledgedPreKeyMessageItems::new(
match pending_pre_key.pre_key_id {
0 => None,
v => Some(v),
v => Some(v.into()),
},
pending_pre_key.signed_pre_key_id as SignedPreKeyId,
(pending_pre_key.signed_pre_key_id as u32).into(),
PublicKey::deserialize(&pending_pre_key.base_key)
.map_err(|_| InvalidSessionError("invalid pending PreKey message base key"))?,
)))

View File

@ -1,13 +1,36 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
use crate::proto::storage::SignedPreKeyRecordStructure;
use crate::{KeyPair, PrivateKey, PublicKey, Result, SignalProtocolError};
use prost::Message;
pub type SignedPreKeyId = u32;
use std::fmt;
/// A unique identifier selecting among this client's known signed pre-keys.
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq)]
pub struct SignedPreKeyId(u32);
impl From<u32> for SignedPreKeyId {
fn from(value: u32) -> Self {
Self(value)
}
}
impl From<SignedPreKeyId> for u32 {
fn from(value: SignedPreKeyId) -> Self {
value.0
}
}
impl fmt::Display for SignedPreKeyId {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{}", self.0)
}
}
#[derive(Debug, Clone)]
pub struct SignedPreKeyRecord {
@ -21,7 +44,7 @@ impl SignedPreKeyRecord {
let signature = signature.to_vec();
Self {
signed_pre_key: SignedPreKeyRecordStructure {
id,
id: id.into(),
timestamp,
public_key,
private_key,
@ -38,7 +61,7 @@ impl SignedPreKeyRecord {
}
pub fn id(&self) -> Result<SignedPreKeyId> {
Ok(self.signed_pre_key.id)
Ok(self.signed_pre_key.id.into())
}
pub fn timestamp(&self) -> Result<u64> {

View File

@ -4,11 +4,10 @@
//
use crate::{
IdentityKey, IdentityKeyPair, PreKeyRecord, ProtocolAddress, Result, SenderKeyRecord,
SessionRecord, SignalProtocolError, SignedPreKeyRecord,
IdentityKey, IdentityKeyPair, PreKeyId, PreKeyRecord, ProtocolAddress, Result, SenderKeyRecord,
SessionRecord, SignalProtocolError, SignedPreKeyId, SignedPreKeyRecord,
};
use crate::state::{PreKeyId, SignedPreKeyId};
use crate::storage::traits;
use crate::storage::Context;

View File

@ -1,5 +1,5 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -19,7 +19,7 @@ use uuid::Uuid;
fn group_no_send_session() -> Result<(), SignalProtocolError> {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -86,7 +86,7 @@ fn group_using_context_arg() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let x = Box::new(1);
@ -115,7 +115,8 @@ fn group_no_recv_session() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let device_id: DeviceId = 1.into();
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), device_id);
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -164,7 +165,7 @@ fn group_basic_encrypt_decrypt() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -224,8 +225,8 @@ fn group_sealed_sender() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_device_id = 23;
let bob_device_id = 42;
let alice_device_id: DeviceId = 23.into();
let bob_device_id: DeviceId = 42.into();
let alice_e164 = "+14151111111".to_owned();
@ -235,7 +236,7 @@ fn group_sealed_sender() -> Result<(), SignalProtocolError> {
let alice_uuid_address = ProtocolAddress::new(alice_uuid.clone(), alice_device_id);
let bob_uuid_address = ProtocolAddress::new(bob_uuid.clone(), bob_device_id);
let carol_uuid_address = ProtocolAddress::new(carol_uuid.clone(), 1);
let carol_uuid_address = ProtocolAddress::new(carol_uuid.clone(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
@ -404,7 +405,7 @@ fn group_large_messages() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -466,7 +467,7 @@ fn group_basic_ratchet() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -578,7 +579,7 @@ fn group_late_join() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -650,7 +651,7 @@ fn group_out_of_order() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -729,7 +730,7 @@ fn group_too_far_in_the_future() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;
@ -797,7 +798,7 @@ fn group_message_key_limit() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1);
let sender_address = ProtocolAddress::new("+14159999111".to_owned(), 1.into());
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let mut alice_store = test_in_memory_protocol_store()?;

View File

@ -88,7 +88,7 @@ fn test_sender_cert() -> Result<(), SignalProtocolError> {
let server_cert =
ServerCertificate::new(1, server_key.public_key, &trust_root.private_key, &mut rng)?;
let device_id = 42;
let device_id: DeviceId = 42.into();
let expires = 1605722925;
let sender_cert = SenderCertificate::new(
@ -137,8 +137,8 @@ fn test_sealed_sender() -> Result<(), SignalProtocolError> {
async {
let mut rng = OsRng;
let alice_device_id = 23;
let bob_device_id = 42;
let alice_device_id: DeviceId = 23.into();
let bob_device_id: DeviceId = 42.into();
let alice_e164 = "+14151111111".to_owned();
let bob_e164 = "+14151114444".to_owned();
@ -305,8 +305,8 @@ fn test_sender_key_in_sealed_sender() -> Result<(), SignalProtocolError> {
async {
let mut rng = OsRng;
let alice_device_id = 23;
let bob_device_id = 42;
let alice_device_id: DeviceId = 23.into();
let bob_device_id: DeviceId = 42.into();
let alice_e164 = "+14151111111".to_owned();
@ -315,7 +315,8 @@ fn test_sender_key_in_sealed_sender() -> Result<(), SignalProtocolError> {
let distribution_id = Uuid::from_u128(0xd1d1d1d1_7000_11eb_b32a_33b8a8a487a6);
let alice_uuid_address = ProtocolAddress::new(alice_uuid.clone(), 1);
let device_id: DeviceId = 1.into();
let alice_uuid_address = ProtocolAddress::new(alice_uuid.clone(), device_id);
let bob_uuid_address = ProtocolAddress::new(bob_uuid.clone(), bob_device_id);
let mut alice_store = support::test_in_memory_protocol_store()?;
@ -430,8 +431,8 @@ fn test_sealed_sender_multi_recipient() -> Result<(), SignalProtocolError> {
async {
let mut rng = OsRng;
let alice_device_id = 23;
let bob_device_id = 42;
let alice_device_id: DeviceId = 23.into();
let bob_device_id: DeviceId = 42.into();
let alice_e164 = "+14151111111".to_owned();
let bob_e164 = "+14151114444".to_owned();
@ -664,8 +665,8 @@ fn test_sealed_sender_multi_recipient_encrypt_with_archived_session(
async {
let mut rng = OsRng;
let alice_device_id = 23;
let bob_device_id = 42;
let alice_device_id: DeviceId = 23.into();
let bob_device_id: DeviceId = 42.into();
let alice_e164 = "+14151111111".to_owned();
@ -777,7 +778,7 @@ fn test_sealed_sender_multi_recipient_encrypt_with_bad_registration_id(
let alice_uuid = "9d0652a3-dcc3-4d11-975f-74d61598733f".to_string();
let bob_uuid = "796abedb-ca4e-4f18-8803-1fde5b921f9f".to_string();
let bob_uuid_address = ProtocolAddress::new(bob_uuid.clone(), bob_device_id);
let bob_uuid_address = ProtocolAddress::new(bob_uuid.clone(), bob_device_id.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store =
@ -809,7 +810,7 @@ fn test_sealed_sender_multi_recipient_encrypt_with_bad_registration_id(
alice_uuid.clone(),
Some(alice_e164.clone()),
alice_pubkey,
alice_device_id,
alice_device_id.into(),
expires,
server_cert,
&server_key.private_key,
@ -865,15 +866,15 @@ fn test_decryption_error_in_sealed_sender() -> Result<(), SignalProtocolError> {
async {
let mut rng = OsRng;
let alice_device_id = 23;
let bob_device_id = 42;
let alice_device_id: DeviceId = 23.into();
let bob_device_id: DeviceId = 42.into();
let alice_e164 = "+14151111111".to_owned();
let alice_uuid = "9d0652a3-dcc3-4d11-975f-74d61598733f".to_string();
let bob_uuid = "796abedb-ca4e-4f18-8803-1fde5b921f9f".to_string();
let alice_uuid_address = ProtocolAddress::new(alice_uuid.clone(), 1);
let alice_uuid_address = ProtocolAddress::new(alice_uuid.clone(), 1.into());
let bob_uuid_address = ProtocolAddress::new(bob_uuid.clone(), bob_device_id);
let mut alice_store = support::test_in_memory_protocol_store()?;

View File

@ -1,5 +1,5 @@
//
// Copyright 2020 Signal Messenger, LLC.
// Copyright 2020-2022 Signal Messenger, LLC.
// SPDX-License-Identifier: AGPL-3.0-only
//
@ -16,8 +16,8 @@ fn test_basic_prekey_v3() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -37,9 +37,9 @@ fn test_basic_prekey_v3() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id, bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id, // signed pre key id
1.into(), // device id
Some((pre_key_id.into(), bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id.into(), // signed pre key id
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -83,16 +83,16 @@ fn test_basic_prekey_v3() -> Result<(), SignalProtocolError> {
bob_store
.save_pre_key(
pre_key_id,
&PreKeyRecord::new(pre_key_id, &bob_pre_key_pair),
pre_key_id.into(),
&PreKeyRecord::new(pre_key_id.into(), &bob_pre_key_pair),
None,
)
.await?;
bob_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -157,9 +157,9 @@ fn test_basic_prekey_v3() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id + 1, bob_pre_key_pair.public_key)), // pre key,
signed_pre_key_id + 1,
1.into(), // device id
Some(((pre_key_id + 1).into(), bob_pre_key_pair.public_key)), // pre key,
(signed_pre_key_id + 1).into(),
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -167,16 +167,16 @@ fn test_basic_prekey_v3() -> Result<(), SignalProtocolError> {
bob_store
.save_pre_key(
pre_key_id + 1,
&PreKeyRecord::new(pre_key_id + 1, &bob_pre_key_pair),
(pre_key_id + 1).into(),
&PreKeyRecord::new((pre_key_id + 1).into(), &bob_pre_key_pair),
None,
)
.await?;
bob_store
.save_signed_pre_key(
signed_pre_key_id + 1,
(signed_pre_key_id + 1).into(),
&SignedPreKeyRecord::new(
signed_pre_key_id + 1,
(signed_pre_key_id + 1).into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -226,9 +226,9 @@ fn test_basic_prekey_v3() -> Result<(), SignalProtocolError> {
// Sign pre-key with wrong key:
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id, bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id,
1.into(), // device id
Some((pre_key_id.into(), bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id.into(),
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*alice_store
@ -260,8 +260,8 @@ fn chain_jump_over_limit() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -281,9 +281,9 @@ fn chain_jump_over_limit() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id, bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id, // signed pre key id
1.into(), // device id
Some((pre_key_id.into(), bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id.into(), // signed pre key id
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -301,16 +301,16 @@ fn chain_jump_over_limit() -> Result<(), SignalProtocolError> {
bob_store
.save_pre_key(
pre_key_id,
&PreKeyRecord::new(pre_key_id, &bob_pre_key_pair),
pre_key_id.into(),
&PreKeyRecord::new(pre_key_id.into(), &bob_pre_key_pair),
None,
)
.await?;
bob_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -348,8 +348,10 @@ fn chain_jump_over_limit_with_self() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let a1_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let a2_address = ProtocolAddress::new("+14151111111".to_owned(), 2);
let device_id_1: DeviceId = 1.into();
let a1_address = ProtocolAddress::new("+14151111111".to_owned(), device_id_1);
let device_id_2: DeviceId = 2.into();
let a2_address = ProtocolAddress::new("+14151111111".to_owned(), device_id_2);
let mut a1_store = support::test_in_memory_protocol_store()?;
let mut a2_store = a1_store.clone(); // same key!
@ -369,9 +371,9 @@ fn chain_jump_over_limit_with_self() -> Result<(), SignalProtocolError> {
let a2_pre_key_bundle = PreKeyBundle::new(
a2_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id, a2_pre_key_pair.public_key)), // pre key
signed_pre_key_id, // signed pre key id
1.into(), // device id
Some((pre_key_id.into(), a2_pre_key_pair.public_key)), // pre key
signed_pre_key_id.into(), // signed pre key id
a2_signed_pre_key_pair.public_key,
a2_signed_pre_key_signature.to_vec(),
*a2_store.get_identity_key_pair(None).await?.identity_key(),
@ -389,16 +391,16 @@ fn chain_jump_over_limit_with_self() -> Result<(), SignalProtocolError> {
a2_store
.save_pre_key(
pre_key_id,
&PreKeyRecord::new(pre_key_id, &a2_pre_key_pair),
pre_key_id.into(),
&PreKeyRecord::new(pre_key_id.into(), &a2_pre_key_pair),
None,
)
.await?;
a2_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&a2_signed_pre_key_pair,
&a2_signed_pre_key_signature,
@ -441,7 +443,7 @@ fn chain_jump_over_limit_with_self() -> Result<(), SignalProtocolError> {
#[test]
fn test_bad_signed_pre_key_signature() -> Result<(), SignalProtocolError> {
async {
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let bob_store = support::test_in_memory_protocol_store()?;
@ -468,9 +470,9 @@ fn test_bad_signed_pre_key_signature() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1,
Some((pre_key_id, bob_pre_key_pair.public_key)),
signed_pre_key_id,
1.into(),
Some((pre_key_id.into(), bob_pre_key_pair.public_key)),
signed_pre_key_id.into(),
bob_signed_pre_key_pair.public_key,
bad_signature,
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -492,9 +494,9 @@ fn test_bad_signed_pre_key_signature() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1,
Some((pre_key_id, bob_pre_key_pair.public_key)),
signed_pre_key_id,
1.into(),
Some((pre_key_id.into(), bob_pre_key_pair.public_key)),
signed_pre_key_id.into(),
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature,
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -521,8 +523,8 @@ fn test_bad_signed_pre_key_signature() -> Result<(), SignalProtocolError> {
#[test]
fn repeat_bundle_message_v3() -> Result<(), SignalProtocolError> {
async {
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -543,9 +545,9 @@ fn repeat_bundle_message_v3() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id, bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id, // signed pre key id
1.into(), // device id
Some((pre_key_id.into(), bob_pre_key_pair.public_key)), // pre key
signed_pre_key_id.into(), // signed pre key id
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -594,16 +596,16 @@ fn repeat_bundle_message_v3() -> Result<(), SignalProtocolError> {
bob_store
.save_pre_key(
pre_key_id,
&PreKeyRecord::new(pre_key_id, &bob_pre_key_pair),
pre_key_id.into(),
&PreKeyRecord::new(pre_key_id.into(), &bob_pre_key_pair),
None,
)
.await?;
bob_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -656,8 +658,8 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -677,9 +679,9 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
Some((pre_key_id, bob_pre_key_pair.public_key)),
signed_pre_key_id, // signed pre key id
1.into(), // device id
Some((pre_key_id.into(), bob_pre_key_pair.public_key)),
signed_pre_key_id.into(), // signed pre key id
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -697,16 +699,16 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
bob_store
.save_pre_key(
pre_key_id,
&PreKeyRecord::new(pre_key_id, &bob_pre_key_pair),
pre_key_id.into(),
&PreKeyRecord::new(pre_key_id.into(), &bob_pre_key_pair),
None,
)
.await?;
bob_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -730,7 +732,7 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
let original_message = "L'homme est condamné à être libre";
assert!(bob_store.get_pre_key(pre_key_id, None).await.is_ok());
assert!(bob_store.get_pre_key(pre_key_id.into(), None).await.is_ok());
let outgoing_message = encrypt(&mut alice_store, &bob_address, original_message).await?;
assert_eq!(
@ -750,7 +752,7 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
assert!(decrypt(&mut bob_store, &alice_address, &incoming_message)
.await
.is_err());
assert!(bob_store.get_pre_key(pre_key_id, None).await.is_ok());
assert!(bob_store.get_pre_key(pre_key_id.into(), None).await.is_ok());
let incoming_message = CiphertextMessage::PreKeySignalMessage(
PreKeySignalMessage::try_from(outgoing_message.as_slice())?,
@ -763,7 +765,10 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
original_message
);
assert!(matches!(
bob_store.get_pre_key(pre_key_id, None).await.unwrap_err(),
bob_store
.get_pre_key(pre_key_id.into(), None)
.await
.unwrap_err(),
SignalProtocolError::InvalidPreKeyId
));
@ -776,8 +781,8 @@ fn bad_message_bundle() -> Result<(), SignalProtocolError> {
#[test]
fn optional_one_time_prekey() -> Result<(), SignalProtocolError> {
async {
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -796,9 +801,9 @@ fn optional_one_time_prekey() -> Result<(), SignalProtocolError> {
let bob_pre_key_bundle = PreKeyBundle::new(
bob_store.get_local_registration_id(None).await?,
1, // device id
None, // no pre key
signed_pre_key_id, // signed pre key id
1.into(), // device id
None, // no pre key
signed_pre_key_id.into(), // signed pre key id
bob_signed_pre_key_pair.public_key,
bob_signed_pre_key_signature.to_vec(),
*bob_store.get_identity_key_pair(None).await?.identity_key(),
@ -838,9 +843,9 @@ fn optional_one_time_prekey() -> Result<(), SignalProtocolError> {
bob_store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
/*timestamp*/ 42,
&bob_signed_pre_key_pair,
&bob_signed_pre_key_signature,
@ -874,8 +879,8 @@ fn message_key_limits() -> Result<(), SignalProtocolError> {
async {
let (alice_session_record, bob_session_record) = initialize_sessions_v3()?;
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -936,8 +941,8 @@ fn run_session_interaction(
async {
use rand::seq::SliceRandom;
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14159999999".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14158888888".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -1141,8 +1146,8 @@ fn basic_simultaneous_initiate() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -1281,8 +1286,8 @@ fn simultaneous_initiate_with_lossage() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -1403,8 +1408,8 @@ fn simultaneous_initiate_lost_message() -> Result<(), SignalProtocolError> {
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -1534,8 +1539,8 @@ fn simultaneous_initiate_repeated_messages() -> Result<(), SignalProtocolError>
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;
@ -1736,8 +1741,8 @@ fn simultaneous_initiate_lost_message_repeated_messages() -> Result<(), SignalPr
async {
let mut csprng = OsRng;
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1);
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1);
let alice_address = ProtocolAddress::new("+14151111111".to_owned(), 1.into());
let bob_address = ProtocolAddress::new("+14151111112".to_owned(), 1.into());
let mut alice_store = support::test_in_memory_protocol_store()?;
let mut bob_store = support::test_in_memory_protocol_store()?;

View File

@ -71,9 +71,9 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
let pre_key_bundle = PreKeyBundle::new(
store.get_local_registration_id(None).await?,
device_id,
Some((pre_key_id, pre_key_pair.public_key)),
signed_pre_key_id,
device_id.into(),
Some((pre_key_id.into(), pre_key_pair.public_key)),
signed_pre_key_id.into(),
signed_pre_key_pair.public_key,
signed_pre_key_signature.to_vec(),
*store.get_identity_key_pair(None).await?.identity_key(),
@ -81,8 +81,8 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
store
.save_pre_key(
pre_key_id,
&PreKeyRecord::new(pre_key_id, &pre_key_pair),
pre_key_id.into(),
&PreKeyRecord::new(pre_key_id.into(), &pre_key_pair),
None,
)
.await?;
@ -91,9 +91,9 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
store
.save_signed_pre_key(
signed_pre_key_id,
signed_pre_key_id.into(),
&SignedPreKeyRecord::new(
signed_pre_key_id,
signed_pre_key_id.into(),
timestamp,
&signed_pre_key_pair,
&signed_pre_key_signature,