protocol: Clean up pending Kyber pre-keys from sessions

This commit is contained in:
moiseev-signal
2023-11-17 14:46:03 -08:00
committed by GitHub
parent 55b61dd1dd
commit 0ae3eb3c14
3 changed files with 47 additions and 9 deletions

View File

@@ -68,6 +68,7 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
) -> Result<PreKeyBundle, SignalProtocolError> {
let pre_key_pair = KeyPair::generate(&mut csprng);
let signed_pre_key_pair = KeyPair::generate(&mut csprng);
let kyber_pre_key_pair = kem::KeyPair::generate(kem::KeyType::Kyber1024);
let signed_pre_key_public = signed_pre_key_pair.public_key.serialize();
let signed_pre_key_signature = store
@@ -76,9 +77,17 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
.private_key()
.calculate_signature(&signed_pre_key_public, &mut csprng)?;
let kyber_pre_key_public = kyber_pre_key_pair.public_key.serialize();
let kyber_pre_key_signature = store
.get_identity_key_pair()
.await?
.private_key()
.calculate_signature(&kyber_pre_key_public, &mut csprng)?;
let device_id: u32 = csprng.gen();
let pre_key_id: u32 = csprng.gen();
let signed_pre_key_id: u32 = csprng.gen();
let kyber_pre_key_id: u32 = csprng.gen();
let pre_key_bundle = PreKeyBundle::new(
store.get_local_registration_id().await?,
@@ -89,6 +98,11 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
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
.save_pre_key(
@@ -111,6 +125,17 @@ pub async fn create_pre_key_bundle<R: Rng + CryptoRng>(
)
.await?;
store
.save_kyber_pre_key(
kyber_pre_key_id.into(),
&KyberPreKeyRecord::new(
kyber_pre_key_id.into(),
43,
&kyber_pre_key_pair,
&kyber_pre_key_signature,
),
)
.await?;
Ok(pre_key_bundle)
}