diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index e3c0d190..59b804ee 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include "Config.h" #include "MatrixClient.h" @@ -499,7 +500,7 @@ UserSettingsPage::importSessionKeys() try { auto sessions = mtx::crypto::decrypt_exported_sessions( - mtx::crypto::base642bin(payload), password.toStdString()); + payload, password.toStdString()); cache::client()->importSessionKeys(std::move(sessions)); } catch (const mtx::crypto::sodium_exception &e) { QMessageBox::warning(this, tr("Error"), e.what()); @@ -534,7 +535,7 @@ UserSettingsPage::exportSessionKeys() QFileDialog::getSaveFileName(this, tr("File to save the exported session keys"), "", ""); QFile file(fileName); - if (!file.open(QIODevice::WriteOnly)) { + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox::warning(this, tr("Error"), file.errorString()); return; } @@ -544,9 +545,14 @@ UserSettingsPage::exportSessionKeys() auto encrypted_blob = mtx::crypto::encrypt_exported_sessions( cache::client()->exportSessionKeys(), password.toStdString()); - auto b64 = mtx::crypto::bin2base64(encrypted_blob); + QString b64 = QString::fromStdString( mtx::crypto::bin2base64(encrypted_blob)); - file.write(b64.data(), b64.size()); + QString prefix("-----BEGIN MEGOLM SESSION DATA-----"); + QString suffix("-----END MEGOLM SESSION DATA-----"); + QString newline("\n"); + QTextStream out(&file); + out << prefix << newline << b64 << newline << suffix; + file.close(); } catch (const mtx::crypto::sodium_exception &e) { QMessageBox::warning(this, tr("Error"), e.what()); } catch (const lmdb::error &e) {