mirror of
https://github.com/signalapp/libsignal.git
synced 2026-04-26 09:45:16 +02:00
Require Kyber keys/ciphertexts throughout all XDH APIs
This commit is contained in:
@@ -100,13 +100,11 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
|
||||
signed_pre_key_id.into(),
|
||||
signed_pre_key_pair.public_key,
|
||||
signed_pre_key_signature.to_vec(),
|
||||
*store.get_identity_key_pair().await?.identity_key(),
|
||||
)?;
|
||||
let pre_key_bundle = pre_key_bundle.with_kyber_pre_key(
|
||||
kyber_pre_key_id.into(),
|
||||
kyber_pre_key_pair.public_key.clone(),
|
||||
kyber_pre_key_signature.to_vec(),
|
||||
);
|
||||
*store.get_identity_key_pair().await?.identity_key(),
|
||||
)?;
|
||||
|
||||
store
|
||||
.save_pre_key(
|
||||
@@ -143,44 +141,6 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
|
||||
Ok(pre_key_bundle)
|
||||
}
|
||||
|
||||
pub fn initialize_sessions_v3() -> Result<(SessionRecord, SessionRecord), SignalProtocolError> {
|
||||
let mut csprng = OsRng.unwrap_err();
|
||||
let alice_identity = IdentityKeyPair::generate(&mut csprng);
|
||||
let bob_identity = IdentityKeyPair::generate(&mut csprng);
|
||||
|
||||
let alice_base_key = KeyPair::generate(&mut csprng);
|
||||
|
||||
let bob_base_key = KeyPair::generate(&mut csprng);
|
||||
let bob_ephemeral_key = bob_base_key;
|
||||
|
||||
let alice_params = AliceSignalProtocolParameters::new(
|
||||
alice_identity,
|
||||
alice_base_key,
|
||||
*bob_identity.identity_key(),
|
||||
bob_base_key.public_key,
|
||||
bob_ephemeral_key.public_key,
|
||||
UsePQRatchet::No,
|
||||
);
|
||||
|
||||
let alice_session = initialize_alice_session_record(&alice_params, &mut csprng)?;
|
||||
|
||||
let bob_params = BobSignalProtocolParameters::new(
|
||||
bob_identity,
|
||||
bob_base_key,
|
||||
None,
|
||||
bob_ephemeral_key,
|
||||
None,
|
||||
*alice_identity.identity_key(),
|
||||
alice_base_key.public_key,
|
||||
None,
|
||||
UsePQRatchet::No,
|
||||
);
|
||||
|
||||
let bob_session = initialize_bob_session_record(&bob_params)?;
|
||||
|
||||
Ok((alice_session, bob_session))
|
||||
}
|
||||
|
||||
pub fn initialize_sessions_v4() -> Result<(SessionRecord, SessionRecord), SignalProtocolError> {
|
||||
let mut csprng = OsRng.unwrap_err();
|
||||
let alice_identity = IdentityKeyPair::generate(&mut csprng);
|
||||
@@ -199,9 +159,9 @@ pub fn initialize_sessions_v4() -> Result<(SessionRecord, SessionRecord), Signal
|
||||
*bob_identity.identity_key(),
|
||||
bob_base_key.public_key,
|
||||
bob_ephemeral_key.public_key,
|
||||
bob_kyber_key.public_key.clone(),
|
||||
UsePQRatchet::No,
|
||||
)
|
||||
.with_their_kyber_pre_key(&bob_kyber_key.public_key);
|
||||
);
|
||||
|
||||
let alice_session = initialize_alice_session_record(&alice_params, &mut csprng)?;
|
||||
let kyber_ciphertext = {
|
||||
@@ -217,10 +177,10 @@ pub fn initialize_sessions_v4() -> Result<(SessionRecord, SessionRecord), Signal
|
||||
bob_base_key,
|
||||
None,
|
||||
bob_ephemeral_key,
|
||||
Some(bob_kyber_key),
|
||||
bob_kyber_key,
|
||||
*alice_identity.identity_key(),
|
||||
alice_base_key.public_key,
|
||||
Some(&kyber_ciphertext),
|
||||
&kyber_ciphertext,
|
||||
UsePQRatchet::No,
|
||||
);
|
||||
|
||||
@@ -393,14 +353,19 @@ impl TestStoreBuilder {
|
||||
.expect("has signed pre key")
|
||||
})
|
||||
.expect("contains at least one signed pre key");
|
||||
let maybe_kyber_pre_key_record = self.store.all_kyber_pre_key_ids().max().map(|id| {
|
||||
self.store
|
||||
.get_kyber_pre_key(*id)
|
||||
.now_or_never()
|
||||
.expect("sync")
|
||||
.expect("has kyber pre key")
|
||||
});
|
||||
let mut bundle = PreKeyBundle::new(
|
||||
let kyber_pre_key_record = self
|
||||
.store
|
||||
.all_kyber_pre_key_ids()
|
||||
.max()
|
||||
.map(|id| {
|
||||
self.store
|
||||
.get_kyber_pre_key(*id)
|
||||
.now_or_never()
|
||||
.expect("sync")
|
||||
.expect("has kyber pre key")
|
||||
})
|
||||
.expect("contains at least one kyber key");
|
||||
PreKeyBundle::new(
|
||||
registration_id,
|
||||
device_id,
|
||||
maybe_pre_key_record.map(|rec| {
|
||||
@@ -412,17 +377,12 @@ impl TestStoreBuilder {
|
||||
signed_pre_key_record.id().expect("has id"),
|
||||
signed_pre_key_record.public_key().expect("has public key"),
|
||||
signed_pre_key_record.signature().expect("has signature"),
|
||||
kyber_pre_key_record.id().expect("has id"),
|
||||
kyber_pre_key_record.public_key().expect("has public key"),
|
||||
kyber_pre_key_record.signature().expect("has signature"),
|
||||
*identity_key,
|
||||
)
|
||||
.expect("can make pre key bundle from store");
|
||||
if let Some(rec) = maybe_kyber_pre_key_record {
|
||||
bundle = bundle.with_kyber_pre_key(
|
||||
rec.id().expect("has id"),
|
||||
rec.public_key().expect("has public key"),
|
||||
rec.signature().expect("has signature"),
|
||||
);
|
||||
}
|
||||
bundle
|
||||
.expect("can make pre key bundle from store")
|
||||
}
|
||||
|
||||
fn sign(&mut self, message: &[u8]) -> Box<[u8]> {
|
||||
|
||||
Reference in New Issue
Block a user