From f7920c12d5a81298cbea2292b2bdad18024fead3 Mon Sep 17 00:00:00 2001 From: Jonathan White Date: Sat, 18 Feb 2023 14:49:13 -0800 Subject: [PATCH] Translate Cipher and KDF strings * Fix #8952 - move translations for Cipher and KDF strings into evaluated code instead of globally defined code. The strings were being baked prior to the language being set resulting in only english being displayed. --- share/translations/keepassxc_en.ts | 8 ++++ src/cli/DatabaseInfo.cpp | 4 +- src/format/KeePass2.cpp | 40 ++++++++++++++----- src/format/KeePass2.h | 8 ++-- .../DatabaseSettingsWidgetEncryption.cpp | 6 +-- 5 files changed, 48 insertions(+), 18 deletions(-) diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index d209e0e6d..762d9c201 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -7888,6 +7888,14 @@ Kernel: %3 %4 Failed to sign challenge using Windows Hello. + + Invalid Cipher + + + + Invalid KDF + + Please present or touch your YubiKey to continue. diff --git a/src/cli/DatabaseInfo.cpp b/src/cli/DatabaseInfo.cpp index b5569ae84..f0e5e0f03 100644 --- a/src/cli/DatabaseInfo.cpp +++ b/src/cli/DatabaseInfo.cpp @@ -39,8 +39,8 @@ int DatabaseInfo::executeWithDatabase(QSharedPointer database, QShared out << QObject::tr("Name: ") << database->metadata()->name() << endl; out << QObject::tr("Description: ") << database->metadata()->description() << endl; for (auto& cipher : asConst(KeePass2::CIPHERS)) { - if (cipher.first == database->cipher()) { - out << QObject::tr("Cipher: ") << cipher.second << endl; + if (cipher == database->cipher()) { + out << QObject::tr("Cipher: ") << KeePass2::cipherToString(cipher) << endl; } } out << QObject::tr("KDF: ") << database->kdf()->toString() << endl; diff --git a/src/format/KeePass2.cpp b/src/format/KeePass2.cpp index bf991f880..b19316741 100644 --- a/src/format/KeePass2.cpp +++ b/src/format/KeePass2.cpp @@ -47,16 +47,12 @@ const QString KeePass2::KDFPARAM_ARGON2_VERSION("V"); const QString KeePass2::KDFPARAM_ARGON2_SECRET("K"); const QString KeePass2::KDFPARAM_ARGON2_ASSOCDATA("A"); -const QList> KeePass2::CIPHERS{ - qMakePair(KeePass2::CIPHER_AES256, QObject::tr("AES 256-bit")), - qMakePair(KeePass2::CIPHER_TWOFISH, QObject::tr("Twofish 256-bit")), - qMakePair(KeePass2::CIPHER_CHACHA20, QObject::tr("ChaCha20 256-bit"))}; +const QList KeePass2::CIPHERS{KeePass2::CIPHER_AES256, KeePass2::CIPHER_TWOFISH, KeePass2::CIPHER_CHACHA20}; -const QList> KeePass2::KDFS{ - qMakePair(KeePass2::KDF_ARGON2D, QObject::tr("Argon2d (KDBX 4 – recommended)")), - qMakePair(KeePass2::KDF_ARGON2ID, QObject::tr("Argon2id (KDBX 4)")), - qMakePair(KeePass2::KDF_AES_KDBX4, QObject::tr("AES-KDF (KDBX 4)")), - qMakePair(KeePass2::KDF_AES_KDBX3, QObject::tr("AES-KDF (KDBX 3)"))}; +const QList KeePass2::KDFS{KeePass2::KDF_ARGON2D, + KeePass2::KDF_ARGON2ID, + KeePass2::KDF_AES_KDBX4, + KeePass2::KDF_AES_KDBX3}; QByteArray KeePass2::hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey) { @@ -133,3 +129,29 @@ KeePass2::ProtectedStreamAlgo KeePass2::idToProtectedStreamAlgo(quint32 id) return KeePass2::ProtectedStreamAlgo::InvalidProtectedStreamAlgo; } } + +QString KeePass2::cipherToString(QUuid cipherUuid) +{ + if (cipherUuid == KeePass2::CIPHER_AES256) { + return QObject::tr("AES 256-bit"); + } else if (cipherUuid == KeePass2::CIPHER_TWOFISH) { + return QObject::tr("Twofish 256-bit"); + } else if (cipherUuid == KeePass2::CIPHER_CHACHA20) { + return QObject::tr("ChaCha20 256-bit"); + } + return QObject::tr("Invalid Cipher"); +} + +QString KeePass2::kdfToString(QUuid kdfUuid) +{ + if (kdfUuid == KeePass2::KDF_ARGON2D) { + return QObject::tr("Argon2d (KDBX 4 – recommended)"); + } else if (kdfUuid == KeePass2::KDF_ARGON2ID) { + return QObject::tr("Argon2id (KDBX 4)"); + } else if (kdfUuid == KeePass2::KDF_AES_KDBX4) { + return QObject::tr("AES-KDF (KDBX 4)"); + } else if (kdfUuid == KDF_AES_KDBX3) { + return QObject::tr("AES-KDF (KDBX 3)"); + } + return QObject::tr("Invalid KDF"); +} diff --git a/src/format/KeePass2.h b/src/format/KeePass2.h index 5aed903c3..1d18a18ba 100644 --- a/src/format/KeePass2.h +++ b/src/format/KeePass2.h @@ -26,7 +26,6 @@ class Kdf; namespace KeePass2 { - constexpr quint32 SIGNATURE_1 = 0x9AA2D903; constexpr quint32 SIGNATURE_2 = 0xB54BFB67; @@ -67,8 +66,8 @@ namespace KeePass2 extern const QString KDFPARAM_ARGON2_SECRET; extern const QString KDFPARAM_ARGON2_ASSOCDATA; - extern const QList> CIPHERS; - extern const QList> KDFS; + extern const QList CIPHERS; + extern const QList KDFS; enum class HeaderFieldID { @@ -130,7 +129,8 @@ namespace KeePass2 QVariantMap kdfToParameters(const QSharedPointer& kdf); QSharedPointer uuidToKdf(const QUuid& uuid); ProtectedStreamAlgo idToProtectedStreamAlgo(quint32 id); - + QString cipherToString(QUuid cipherUuid); + QString kdfToString(QUuid kdfUuid); } // namespace KeePass2 #endif // KEEPASSX_KEEPASS2_H diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp index be13cd188..76f86fcae 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp @@ -143,7 +143,7 @@ void DatabaseSettingsWidgetEncryption::setupAlgorithmComboBox() { m_ui->algorithmComboBox->clear(); for (auto& cipher : asConst(KeePass2::CIPHERS)) { - m_ui->algorithmComboBox->addItem(cipher.second.toUtf8(), cipher.first.toByteArray()); + m_ui->algorithmComboBox->addItem(KeePass2::cipherToString(cipher), cipher.toByteArray()); } int cipherIndex = m_ui->algorithmComboBox->findData(m_db->cipher().toByteArray()); if (cipherIndex > -1) { @@ -157,8 +157,8 @@ void DatabaseSettingsWidgetEncryption::setupKdfComboBox(bool enableKdbx3) bool block = m_ui->kdfComboBox->blockSignals(true); m_ui->kdfComboBox->clear(); for (auto& kdf : asConst(KeePass2::KDFS)) { - if (kdf.first != KeePass2::KDF_AES_KDBX3 or enableKdbx3) { - m_ui->kdfComboBox->addItem(kdf.second.toUtf8(), kdf.first.toByteArray()); + if (kdf != KeePass2::KDF_AES_KDBX3 or enableKdbx3) { + m_ui->kdfComboBox->addItem(KeePass2::kdfToString(kdf), kdf.toByteArray()); } } m_ui->kdfComboBox->blockSignals(block);