diff --git a/bindings/matrix-sdk-crypto-ffi/src/machine.rs b/bindings/matrix-sdk-crypto-ffi/src/machine.rs index f9c707379..597cac6f1 100644 --- a/bindings/matrix-sdk-crypto-ffi/src/machine.rs +++ b/bindings/matrix-sdk-crypto-ffi/src/machine.rs @@ -1222,8 +1222,10 @@ impl OlmMachine { /// /// This method returns `None` if we don't have any private cross signing /// keys. - pub fn export_cross_signing_keys(&self) -> Option { - self.runtime.block_on(self.inner.export_cross_signing_keys()).map(|e| e.into()) + pub fn export_cross_signing_keys( + &self, + ) -> Result, CryptoStoreError> { + Ok(self.runtime.block_on(self.inner.export_cross_signing_keys())?.map(|e| e.into())) } /// Import our private cross signing keys. diff --git a/bindings/matrix-sdk-crypto-js/src/machine.rs b/bindings/matrix-sdk-crypto-js/src/machine.rs index 959ed39e5..842145f0c 100644 --- a/bindings/matrix-sdk-crypto-js/src/machine.rs +++ b/bindings/matrix-sdk-crypto-js/src/machine.rs @@ -407,7 +407,7 @@ impl OlmMachine { let me = self.inner.clone(); future_to_promise(async move { - Ok(me.export_cross_signing_keys().await.map(store::CrossSigningKeyExport::from)) + Ok(me.export_cross_signing_keys().await?.map(store::CrossSigningKeyExport::from)) }) } diff --git a/crates/matrix-sdk-crypto/CHANGELOG.md b/crates/matrix-sdk-crypto/CHANGELOG.md index 3d29af830..510afefb0 100644 --- a/crates/matrix-sdk-crypto/CHANGELOG.md +++ b/crates/matrix-sdk-crypto/CHANGELOG.md @@ -1,5 +1,8 @@ # v0.7.0 +- The `OlmMachine::export_cross_signing_keys()` method now returns a `Result`. + This removes an `unwrap()` from the codebase. + - Add support for the `hkdf-hmac-sha256.v2` SAS message authentication code. - Ensure that the correct short authentication strings are used when accepting a diff --git a/crates/matrix-sdk-crypto/src/gossiping/machine.rs b/crates/matrix-sdk-crypto/src/gossiping/machine.rs index 4d0bb8f37..49759c201 100644 --- a/crates/matrix-sdk-crypto/src/gossiping/machine.rs +++ b/crates/matrix-sdk-crypto/src/gossiping/machine.rs @@ -269,7 +269,7 @@ impl GossipMachine { } }; - let content = if let Some(secret) = self.inner.store.export_secret(secret_name).await { + let content = if let Some(secret) = self.inner.store.export_secret(secret_name).await? { SecretSendContent::new(event.content.request_id.to_owned(), secret) } else { info!(?secret_name, "Can't serve a secret request, secret isn't found"); diff --git a/crates/matrix-sdk-crypto/src/machine.rs b/crates/matrix-sdk-crypto/src/machine.rs index 26cd49af8..e1a1c071f 100644 --- a/crates/matrix-sdk-crypto/src/machine.rs +++ b/crates/matrix-sdk-crypto/src/machine.rs @@ -1674,18 +1674,18 @@ impl OlmMachine { /// /// This method returns `None` if we don't have any private cross signing /// keys. - pub async fn export_cross_signing_keys(&self) -> Option { - let master_key = self.store().export_secret(&SecretName::CrossSigningMasterKey).await; + pub async fn export_cross_signing_keys(&self) -> StoreResult> { + let master_key = self.store().export_secret(&SecretName::CrossSigningMasterKey).await?; let self_signing_key = - self.store().export_secret(&SecretName::CrossSigningSelfSigningKey).await; + self.store().export_secret(&SecretName::CrossSigningSelfSigningKey).await?; let user_signing_key = - self.store().export_secret(&SecretName::CrossSigningUserSigningKey).await; + self.store().export_secret(&SecretName::CrossSigningUserSigningKey).await?; - if master_key.is_none() && self_signing_key.is_none() && user_signing_key.is_none() { + Ok(if master_key.is_none() && self_signing_key.is_none() && user_signing_key.is_none() { None } else { Some(CrossSigningKeyExport { master_key, self_signing_key, user_signing_key }) - } + }) } /// Import our private cross signing keys. diff --git a/crates/matrix-sdk-crypto/src/store/mod.rs b/crates/matrix-sdk-crypto/src/store/mod.rs index 49c2bd76d..8be1e062f 100644 --- a/crates/matrix-sdk-crypto/src/store/mod.rs +++ b/crates/matrix-sdk-crypto/src/store/mod.rs @@ -640,8 +640,11 @@ impl Store { /// # Arguments /// /// * `secret_name` - The name of the secret that should be exported. - pub(crate) async fn export_secret(&self, secret_name: &SecretName) -> Option { - match secret_name { + pub async fn export_secret( + &self, + secret_name: &SecretName, + ) -> Result, CryptoStoreError> { + Ok(match secret_name { SecretName::CrossSigningMasterKey | SecretName::CrossSigningUserSigningKey | SecretName::CrossSigningSelfSigningKey => { @@ -649,7 +652,7 @@ impl Store { } SecretName::RecoveryKey => { #[cfg(feature = "backups_v1")] - if let Some(key) = self.load_backup_keys().await.unwrap().recovery_key { + if let Some(key) = self.load_backup_keys().await?.recovery_key { let exported = key.to_base64(); Some(exported) } else { @@ -663,7 +666,7 @@ impl Store { warn!(secret = ?name, "Unknown secret was requested"); None } - } + }) } /// Import the Cross Signing Keys