refactor(crypto): Inline Account::sign_master_key

Co-Authored-By: Richard van der Hoff <richard@matrix.org>
Co-Authored-By: Andy Balaam <andy.balaam@matrix.org>
Signed-off-by: Skye Elliot <actuallyori@gmail.com>
This commit is contained in:
Skye Elliot
2026-07-03 12:56:30 +01:00
parent cd5692088f
commit 3bedac0e91
2 changed files with 22 additions and 27 deletions

View File

@@ -25,7 +25,7 @@ use as_variant::as_variant;
use matrix_sdk_common::locks::RwLock;
use ruma::{
DeviceId, EventId, OwnedDeviceId, OwnedUserId, RoomId, UserId,
api::client::keys::upload_signatures::v3::Request as SignatureUploadRequest,
api::client::keys::upload_signatures::v3::{Request as SignatureUploadRequest, SignedKeys},
events::{key::verification::VerificationMethod, room::message::MessageType},
};
use serde::{Deserialize, Deserializer, Serialize};
@@ -40,7 +40,8 @@ use crate::{
types::{Changes, IdentityChanges},
},
types::{
MasterPubkey, SelfSigningPubkey, UserSigningPubkey, requests::OutgoingVerificationRequest,
CrossSigningKey, MasterPubkey, SelfSigningPubkey, UserSigningPubkey,
requests::OutgoingVerificationRequest,
},
verification::VerificationMachine,
};
@@ -230,7 +231,23 @@ impl OwnUserIdentity {
let cache = self.store.cache().await?;
let account = cache.account().await?;
account.sign_master_key(&self.master_key)
let public_key = self
.master_key
.get_first_key()
.ok_or(SignatureError::MissingSigningKey)?
.to_base64()
.into();
let mut cross_signing_key: CrossSigningKey = (*self.master_key).as_ref().clone();
cross_signing_key.signatures.clear();
account.sign_cross_signing_key(&mut cross_signing_key)?;
let mut user_signed_keys = SignedKeys::new();
user_signed_keys.add_cross_signing_keys(public_key, cross_signing_key.to_raw());
let signed_keys = [(self.user_id().to_owned(), user_signed_keys)].into();
Ok(SignatureUploadRequest::new(signed_keys))
}
/// Send a verification request to our other devices.

View File

@@ -31,10 +31,7 @@ use ruma::{
OwnedUserId, RoomId, SecondsSinceUnixEpoch, UInt, UserId,
api::client::{
dehydrated_device::{DehydratedDeviceData, DehydratedDeviceV2},
keys::{
upload_keys,
upload_signatures::v3::{Request as SignatureUploadRequest, SignedKeys},
},
keys::{upload_keys, upload_signatures::v3::Request as SignatureUploadRequest},
},
canonical_json::to_canonical_value,
events::{AnyToDeviceEvent, room::history_visibility::HistoryVisibility},
@@ -70,7 +67,7 @@ use crate::{
types::{Changes, DeviceChanges},
},
types::{
CrossSigningKey, DeviceKeys, EventEncryptionAlgorithm, MasterPubkey, OneTimeKey, SignedKey,
CrossSigningKey, DeviceKeys, EventEncryptionAlgorithm, OneTimeKey, SignedKey,
events::{
olm_v1::AnyDecryptedOlmEvent,
room::encrypted::{
@@ -846,25 +843,6 @@ impl Account {
Ok(())
}
/// Sign the given Master Key
pub fn sign_master_key(
&self,
master_key: &MasterPubkey,
) -> Result<SignatureUploadRequest, SignatureError> {
let public_key =
master_key.get_first_key().ok_or(SignatureError::MissingSigningKey)?.to_base64().into();
let mut cross_signing_key: CrossSigningKey = master_key.as_ref().clone();
cross_signing_key.signatures.clear();
self.sign_cross_signing_key(&mut cross_signing_key)?;
let mut user_signed_keys = SignedKeys::new();
user_signed_keys.add_cross_signing_keys(public_key, cross_signing_key.to_raw());
let signed_keys = [(self.user_id().to_owned(), user_signed_keys)].into();
Ok(SignatureUploadRequest::new(signed_keys))
}
/// Convert a JSON value to the canonical representation and sign the JSON
/// string.
///