From a417aa23fa8632e026dbedf2fffe65003565f42a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Damir=20Jeli=C4=87?= Date: Fri, 12 Nov 2021 16:08:36 +0100 Subject: [PATCH] fix(crypto): Load the recovery key from the sled store --- .../src/backups/keys/recovery.rs | 1 - crates/matrix-sdk-crypto/src/store/sled.rs | 22 ++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/crates/matrix-sdk-crypto/src/backups/keys/recovery.rs b/crates/matrix-sdk-crypto/src/backups/keys/recovery.rs index de74ae93d..e929a8d0c 100644 --- a/crates/matrix-sdk-crypto/src/backups/keys/recovery.rs +++ b/crates/matrix-sdk-crypto/src/backups/keys/recovery.rs @@ -260,7 +260,6 @@ impl RecoveryKey { /// Try to import a `RecoveryKey` from a previously exported pickle. pub fn from_pickle( - &self, pickle: PickledRecoveryKey, pickle_key: &[u8], ) -> Result { diff --git a/crates/matrix-sdk-crypto/src/store/sled.rs b/crates/matrix-sdk-crypto/src/store/sled.rs index 76d649ced..f109da128 100644 --- a/crates/matrix-sdk-crypto/src/store/sled.rs +++ b/crates/matrix-sdk-crypto/src/store/sled.rs @@ -917,11 +917,23 @@ impl CryptoStore for SledStore { .map(|v| serde_json::from_slice(&v)) .transpose()?; - Ok(BackupKeys { - backup_version: version, - // TODO fetch the key as well. - recovery_key: None, - }) + #[cfg(feature = "backups_v1")] + let recovery_key = { + self.account + .get("recovery_key_v1".encode())? + .map(|p| serde_json::from_slice(&p)) + .transpose()? + .map(|p| { + crate::backups::RecoveryKey::from_pickle(p, self.get_pickle_key()) + .map_err(|_| CryptoStoreError::UnpicklingError) + }) + .transpose()? + }; + + #[cfg(not(feature = "backups_v1"))] + let recovery_key = None; + + Ok(BackupKeys { backup_version: version, recovery_key }) } }