Skip to content

Commit 6566f09

Browse files
committed
ffi: Deprecate import_decrypted_room_keys
... and expose a new method `import_room_keys_from_backup` which does the right thing.
1 parent 1df9148 commit 6566f09

File tree

1 file changed

+39
-7
lines changed

1 file changed

+39
-7
lines changed

bindings/matrix-sdk-crypto-ffi/src/machine.rs

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,7 @@ impl OlmMachine {
991991
) -> Result<KeysImportResult, KeyImportError> {
992992
let keys = Cursor::new(keys);
993993
let keys = decrypt_room_key_export(keys, &passphrase)?;
994-
self.import_room_keys_helper(keys, false, progress_listener)
994+
self.import_room_keys_helper(keys, None, progress_listener)
995995
}
996996

997997
/// Import room keys from the given serialized unencrypted key export.
@@ -1001,6 +1001,9 @@ impl OlmMachine {
10011001
/// should be used if the room keys are coming from the server-side backup,
10021002
/// the method will mark all imported room keys as backed up.
10031003
///
1004+
/// **Note**: This has been deprecated. Use
1005+
/// [`OlmMachine::import_room_keys_from_backup`] instead.
1006+
///
10041007
/// # Arguments
10051008
///
10061009
/// * `keys` - The serialized version of the unencrypted key export.
@@ -1012,11 +1015,38 @@ impl OlmMachine {
10121015
keys: String,
10131016
progress_listener: Box<dyn ProgressListener>,
10141017
) -> Result<KeysImportResult, KeyImportError> {
1018+
// Assume that the keys came from the current backup version.
1019+
let backup_version = self.runtime.block_on(self.inner.backup_machine().backup_version());
10151020
let keys: Vec<Value> = serde_json::from_str(&keys)?;
1016-
10171021
let keys = keys.into_iter().map(serde_json::from_value).filter_map(|k| k.ok()).collect();
1022+
self.import_room_keys_helper(keys, backup_version.as_deref(), progress_listener)
1023+
}
10181024

1019-
self.import_room_keys_helper(keys, true, progress_listener)
1025+
/// Import room keys from the given serialized unencrypted key export.
1026+
///
1027+
/// This method is the same as [`OlmMachine::import_room_keys`] but the
1028+
/// decryption step is skipped and should be performed by the caller. This
1029+
/// should be used if the room keys are coming from the server-side backup.
1030+
/// The method will mark all imported room keys as backed up.
1031+
///
1032+
/// # Arguments
1033+
///
1034+
/// * `keys` - The serialized version of the unencrypted key export.
1035+
///
1036+
/// * `backup_version` - The version of the backup that these keys came
1037+
/// from.
1038+
///
1039+
/// * `progress_listener` - A callback that can be used to introspect the
1040+
/// progress of the key import.
1041+
pub fn import_room_keys_from_backup(
1042+
&self,
1043+
keys: String,
1044+
backup_version: String,
1045+
progress_listener: Box<dyn ProgressListener>,
1046+
) -> Result<KeysImportResult, KeyImportError> {
1047+
let keys: Vec<Value> = serde_json::from_str(&keys)?;
1048+
let keys = keys.into_iter().map(serde_json::from_value).filter_map(|k| k.ok()).collect();
1049+
self.import_room_keys_helper(keys, Some(&backup_version), progress_listener)
10201050
}
10211051

10221052
/// Discard the currently active room key for the given room if there is
@@ -1506,16 +1536,18 @@ impl OlmMachine {
15061536
fn import_room_keys_helper(
15071537
&self,
15081538
keys: Vec<ExportedRoomKey>,
1509-
from_backup: bool,
1539+
from_backup_version: Option<&str>,
15101540
progress_listener: Box<dyn ProgressListener>,
15111541
) -> Result<KeysImportResult, KeyImportError> {
15121542
let listener = |progress: usize, total: usize| {
15131543
progress_listener.on_progress(progress as i32, total as i32)
15141544
};
15151545

1516-
#[allow(deprecated)]
1517-
let result =
1518-
self.runtime.block_on(self.inner.import_room_keys(keys, from_backup, listener))?;
1546+
let result = self.runtime.block_on(self.inner.store().import_room_keys(
1547+
keys,
1548+
from_backup_version,
1549+
listener,
1550+
))?;
15191551

15201552
Ok(KeysImportResult {
15211553
imported: result.imported_count as i64,

0 commit comments

Comments
 (0)