diff --git a/src/encryption/Olm.cpp b/src/encryption/Olm.cpp
index 14c97984..01a16ba7 100644
--- a/src/encryption/Olm.cpp
+++ b/src/encryption/Olm.cpp
@@ -1540,6 +1540,7 @@ request_cross_signing_keys()
});
};
+ request(mtx::secret_storage::secrets::cross_signing_master);
request(mtx::secret_storage::secrets::cross_signing_self_signing);
request(mtx::secret_storage::secrets::cross_signing_user_signing);
request(mtx::secret_storage::secrets::megolm_backup_v1);
@@ -1574,36 +1575,52 @@ download_cross_signing_keys()
backup_key = secret;
http::client()->secret_storage_secret(
- secrets::cross_signing_self_signing,
- [backup_key](Secret secret, mtx::http::RequestErr err) {
- std::optional<Secret> self_signing_key;
+ secrets::cross_signing_master, [backup_key](Secret secret, mtx::http::RequestErr err) {
+ std::optional<Secret> master_key;
if (!err)
- self_signing_key = secret;
+ master_key = secret;
http::client()->secret_storage_secret(
- secrets::cross_signing_user_signing,
- [backup_key, self_signing_key](Secret secret, mtx::http::RequestErr err) {
- std::optional<Secret> user_signing_key;
+ secrets::cross_signing_self_signing,
+ [backup_key, master_key](Secret secret, mtx::http::RequestErr err) {
+ std::optional<Secret> self_signing_key;
if (!err)
- user_signing_key = secret;
+ self_signing_key = secret;
- std::map<std::string, std::map<std::string, AesHmacSha2EncryptedData>>
- secrets;
+ http::client()->secret_storage_secret(
+ secrets::cross_signing_user_signing,
+ [backup_key, self_signing_key, master_key](Secret secret,
+ mtx::http::RequestErr err) {
+ std::optional<Secret> user_signing_key;
+ if (!err)
+ user_signing_key = secret;
- if (backup_key && !backup_key->encrypted.empty())
- secrets[backup_key->encrypted.begin()->first][secrets::megolm_backup_v1] =
- backup_key->encrypted.begin()->second;
- if (self_signing_key && !self_signing_key->encrypted.empty())
- secrets[self_signing_key->encrypted.begin()->first]
- [secrets::cross_signing_self_signing] =
- self_signing_key->encrypted.begin()->second;
- if (user_signing_key && !user_signing_key->encrypted.empty())
- secrets[user_signing_key->encrypted.begin()->first]
- [secrets::cross_signing_user_signing] =
- user_signing_key->encrypted.begin()->second;
+ std::map<std::string, std::map<std::string, AesHmacSha2EncryptedData>>
+ secrets;
- for (const auto &[key, secrets] : secrets)
- unlock_secrets(key, secrets);
+ if (backup_key && !backup_key->encrypted.empty())
+ secrets[backup_key->encrypted.begin()->first]
+ [secrets::megolm_backup_v1] =
+ backup_key->encrypted.begin()->second;
+
+ if (master_key && !master_key->encrypted.empty())
+ secrets[master_key->encrypted.begin()->first]
+ [secrets::cross_signing_master] =
+ master_key->encrypted.begin()->second;
+
+ if (self_signing_key && !self_signing_key->encrypted.empty())
+ secrets[self_signing_key->encrypted.begin()->first]
+ [secrets::cross_signing_self_signing] =
+ self_signing_key->encrypted.begin()->second;
+
+ if (user_signing_key && !user_signing_key->encrypted.empty())
+ secrets[user_signing_key->encrypted.begin()->first]
+ [secrets::cross_signing_user_signing] =
+ user_signing_key->encrypted.begin()->second;
+
+ for (const auto &[key, secrets] : secrets)
+ unlock_secrets(key, secrets);
+ });
});
});
});
|