crypto: Fix user-signing signature uploads
This commit is contained in:
parent
680f77beb9
commit
00e11d33f1
2 changed files with 30 additions and 24 deletions
|
@ -395,7 +395,7 @@ impl PrivateCrossSigningIdentity {
|
|||
&self,
|
||||
user_identity: &ReadOnlyUserIdentity,
|
||||
) -> Result<SignatureUploadRequest, SignatureError> {
|
||||
let signed_keys = self
|
||||
let master_key = self
|
||||
.user_signing_key
|
||||
.lock()
|
||||
.await
|
||||
|
@ -404,6 +404,17 @@ impl PrivateCrossSigningIdentity {
|
|||
.sign_user(user_identity)
|
||||
.await?;
|
||||
|
||||
let mut signed_keys = BTreeMap::new();
|
||||
|
||||
signed_keys.entry(user_identity.user_id().to_owned()).or_insert_with(BTreeMap::new).insert(
|
||||
user_identity
|
||||
.master_key()
|
||||
.get_first_key()
|
||||
.ok_or(SignatureError::MissingSigningKey)?
|
||||
.to_owned(),
|
||||
serde_json::to_value(master_key)?,
|
||||
);
|
||||
|
||||
Ok(SignatureUploadRequest::new(signed_keys))
|
||||
}
|
||||
|
||||
|
@ -632,10 +643,10 @@ impl PrivateCrossSigningIdentity {
|
|||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::{collections::BTreeMap, sync::Arc};
|
||||
use std::sync::Arc;
|
||||
|
||||
use matrix_sdk_test::async_test;
|
||||
use ruma::{encryption::CrossSigningKey, user_id, UserId};
|
||||
use ruma::{user_id, UserId};
|
||||
|
||||
use super::{PrivateCrossSigningIdentity, Signing};
|
||||
use crate::{
|
||||
|
@ -755,24 +766,7 @@ mod test {
|
|||
let user_signing = identity.user_signing_key.lock().await;
|
||||
let user_signing = user_signing.as_ref().unwrap();
|
||||
|
||||
let signatures = user_signing.sign_user(&bob_public).await.unwrap();
|
||||
|
||||
let (key_id, signature) = signatures
|
||||
.iter()
|
||||
.next()
|
||||
.unwrap()
|
||||
.1
|
||||
.iter()
|
||||
.next()
|
||||
.map(|(k, s)| (k.to_string(), serde_json::from_value(s.to_owned()).unwrap()))
|
||||
.unwrap();
|
||||
|
||||
let mut master: CrossSigningKey = bob_public.master_key.as_ref().clone();
|
||||
master
|
||||
.signatures
|
||||
.entry(identity.user_id().to_owned())
|
||||
.or_insert_with(BTreeMap::new)
|
||||
.insert(key_id, signature);
|
||||
let master = user_signing.sign_user(&bob_public).await.unwrap();
|
||||
|
||||
bob_public.master_key = master.into();
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ use olm_rs::pk::OlmPkSigning;
|
|||
#[cfg(test)]
|
||||
use olm_rs::{errors::OlmUtilityError, utility::OlmUtility};
|
||||
use ruma::{
|
||||
encryption::{CrossSigningKey, DeviceKeys, KeyUsage},
|
||||
encryption::{CrossSigningKey, CrossSigningKeySignatures, DeviceKeys, KeyUsage},
|
||||
serde::CanonicalJsonValue,
|
||||
DeviceKeyAlgorithm, DeviceKeyId, UserId,
|
||||
};
|
||||
|
@ -209,7 +209,19 @@ impl UserSigning {
|
|||
pub async fn sign_user(
|
||||
&self,
|
||||
user: &ReadOnlyUserIdentity,
|
||||
) -> Result<BTreeMap<UserId, BTreeMap<String, Value>>, SignatureError> {
|
||||
) -> Result<CrossSigningKey, SignatureError> {
|
||||
let signature = self.sign_user_helper(user).await?;
|
||||
let mut master_key: CrossSigningKey = user.master_key().to_owned().into();
|
||||
|
||||
master_key.signatures.extend(signature);
|
||||
|
||||
Ok(master_key)
|
||||
}
|
||||
|
||||
pub async fn sign_user_helper(
|
||||
&self,
|
||||
user: &ReadOnlyUserIdentity,
|
||||
) -> Result<CrossSigningKeySignatures, SignatureError> {
|
||||
let user_master: &CrossSigningKey = user.master_key().as_ref();
|
||||
let signature = self.inner.sign_json(serde_json::to_value(user_master)?).await?;
|
||||
|
||||
|
@ -224,7 +236,7 @@ impl UserSigning {
|
|||
self.inner.public_key.as_str().into(),
|
||||
)
|
||||
.to_string(),
|
||||
serde_json::to_value(signature.0)?,
|
||||
signature.0,
|
||||
);
|
||||
|
||||
Ok(signatures)
|
||||
|
|
Loading…
Reference in a new issue