From cf716f820f593ce8f2938e6f14932b847375e27c Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Sat, 20 Nov 2021 00:32:09 +0100 Subject: [PATCH] Correctly set KDBX envelope version Shows a warning when trying to open with a newer minor version than what is currently supported. We always try to save with the lowest KDBX version possible for maximum compatibility. --- share/demo.kdbx | Bin 79189 -> 78629 bytes share/translations/keepassxc_en.ts | 58 +++++++++++++----- src/core/Database.cpp | 25 ++++++-- src/core/Database.h | 13 ++-- src/format/Kdbx3Reader.cpp | 4 +- src/format/Kdbx3Writer.cpp | 9 +-- src/format/Kdbx3Writer.h | 1 - src/format/Kdbx4Reader.cpp | 2 +- src/format/Kdbx4Writer.cpp | 9 +-- src/format/Kdbx4Writer.h | 1 - src/format/KdbxReader.cpp | 8 +-- src/format/KdbxReader.h | 2 - src/format/KdbxWriter.cpp | 2 +- src/format/KdbxWriter.h | 5 -- src/format/KdbxXmlWriter.cpp | 12 ++-- src/format/KeePass2.cpp | 2 +- src/format/KeePass2.h | 4 +- src/format/KeePass2Reader.cpp | 42 ++++++++----- src/format/KeePass2Reader.h | 12 +++- src/format/KeePass2Writer.cpp | 56 ++++++++++------- src/format/KeePass2Writer.h | 2 +- src/gui/DatabaseOpenWidget.cpp | 24 +++++++- .../DatabaseSettingsWidgetEncryption.cpp | 24 +++++--- .../DatabaseSettingsWidgetEncryption.h | 2 +- .../DatabaseSettingsWidgetEncryption.ui | 17 ++++- tests/TestKdbx2.cpp | 4 +- tests/TestKdbx3.cpp | 17 +---- tests/TestKdbx3.h | 5 -- tests/TestKdbx4.cpp | 54 ++++++---------- tests/TestKdbx4.h | 5 -- tests/TestKeePass2Format.h | 5 -- 31 files changed, 242 insertions(+), 184 deletions(-) diff --git a/share/demo.kdbx b/share/demo.kdbx index 7be77579f04e55d3facfb4acb3672418b15a6bdc..b1a37e99fc7504e8845db32fb2af83d5597ec8bc 100644 GIT binary patch literal 78629 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

R0!vjvoN;DrG0w9$s0s5<9N2 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 XzJhH3>tlk7)`rX@KmRzr00000J=*6C diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts index daef0a8de5..b30987eee6 100644 --- a/share/translations/keepassxc_en.ts +++ b/share/translations/keepassxc_en.ts @@ -1535,6 +1535,28 @@ If you do not have a key file, please leave the field empty. Please present or touch your YubiKey to continue… + + Database Version Mismatch + + + + The database you are trying to open was most likely +created by a newer version of KeePassXC. + +You can try to open it anyway, but it may be incomplete +and saving any changes may incur data loss. + +We recommend you update your KeePassXC installation. + + + + Open database anyway + + + + Database unlock canceled. + + DatabaseSettingWidgetMetaData @@ -1808,18 +1830,6 @@ Are you sure you want to continue without a password? Database format: Database format: - - This is only important if you need to use your database with other programs. - This is only important if you need to use your database with other programs. - - - KDBX 4.0 (recommended) - KDBX 4.0 (recommended) - - - KDBX 3.1 - KDBX 3.1 - unchanged Database decryption time is unchanged @@ -1919,6 +1929,22 @@ If you keep this number, your database may take hours, days, or even longer to o If you keep this number, your database will not be protected from brute force attacks. + + Format cannot be changed: Your database uses KDBX 4 features + + + + Unless you need to open your database with other programs, always use the latest format. + + + + KDBX 4 (recommended) + KDBX 4.0 (recommended) {4 ?} + + + KDBX 3 + KDBX 3 + DatabaseSettingsWidgetFdoSecrets @@ -6523,10 +6549,6 @@ Available commands: AES-KDF (KDBX 4) AES-KDF (KDBX 4) - - AES-KDF (KDBX 3.1) - AES-KDF (KDBX 3.1) - Invalid Settings TOTP @@ -7498,6 +7520,10 @@ Please consider generating a new key file. Attachments: + + AES-KDF (KDBX 3) + AES-KDF (KDBX 3.1) {3)?} + QtIOCompressor diff --git a/src/core/Database.cpp b/src/core/Database.cpp index 5738a3b0aa..9bdf2cd0c2 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -116,14 +116,15 @@ bool Database::open(QSharedPointer key, QString* error, bool * @param error error message in case of failure * @return true on success */ -bool Database::open(const QString& filePath, QSharedPointer key, QString* error, bool readOnly) +KeePass2Reader::Status +Database::open(const QString& filePath, QSharedPointer key, QString* error, bool readOnly) { QFile dbFile(filePath); if (!dbFile.exists()) { if (error) { *error = tr("File %1 does not exist.").arg(filePath); } - return false; + return KeePass2Reader::Status::Error; } // Don't autodetect read-only mode, as it triggers an upstream bug. @@ -137,17 +138,18 @@ bool Database::open(const QString& filePath, QSharedPointer if (error) { *error = tr("Unable to open file %1.").arg(filePath); } - return false; + return KeePass2Reader::Status::Error; } setEmitModified(false); KeePass2Reader reader; - if (!reader.readDatabase(&dbFile, std::move(key), this)) { + KeePass2Reader::Status status = reader.readDatabase(&dbFile, std::move(key), this); + if (status == KeePass2Reader::Status::Error) { if (error) { *error = tr("Error while reading the database: %1").arg(reader.errorString()); } - return false; + return status; } setReadOnly(readOnly); @@ -160,7 +162,17 @@ bool Database::open(const QString& filePath, QSharedPointer m_fileWatcher->start(canonicalFilePath(), 30, 1); setEmitModified(true); - return true; + return status; +} + +quint32 Database::formatVersion() const +{ + return m_data.formatVersion; +} + +void Database::setFormatVersion(quint32 version) +{ + m_data.formatVersion = version; } bool Database::isSaving() @@ -935,6 +947,7 @@ void Database::setKdf(QSharedPointer kdf) { Q_ASSERT(!m_data.isReadOnly); m_data.kdf = std::move(kdf); + setFormatVersion(KeePass2Writer::needsKdbxVersion(this, true, m_data.kdf.isNull())); } bool Database::changeKdf(const QSharedPointer& kdf) diff --git a/src/core/Database.h b/src/core/Database.h index c42025f850..b9cbed0f8f 100644 --- a/src/core/Database.h +++ b/src/core/Database.h @@ -29,6 +29,7 @@ #include "core/ModifiableObject.h" #include "crypto/kdf/AesKdf.h" #include "format/KeePass2.h" +#include "format/KeePass2Reader.h" #include "keys/CompositeKey.h" #include "keys/PasswordKey.h" @@ -75,10 +76,10 @@ class Database : public ModifiableObject ~Database() override; bool open(QSharedPointer key, QString* error = nullptr, bool readOnly = false); - bool open(const QString& filePath, - QSharedPointer key, - QString* error = nullptr, - bool readOnly = false); + KeePass2Reader::Status open(const QString& filePath, + QSharedPointer key, + QString* error = nullptr, + bool readOnly = false); bool save(SaveAction action = Atomic, const QString& backupFilePath = QString(), QString* error = nullptr); bool saveAs(const QString& filePath, SaveAction action = Atomic, @@ -87,6 +88,9 @@ class Database : public ModifiableObject bool extract(QByteArray&, QString* error = nullptr); bool import(const QString& xmlExportPath, QString* error = nullptr); + quint32 formatVersion() const; + void setFormatVersion(quint32 version); + void releaseData(); bool isInitialized() const; @@ -166,6 +170,7 @@ public slots: private: struct DatabaseData { + quint32 formatVersion = 0; QString filePath; bool isReadOnly = false; QUuid cipher = KeePass2::CIPHER_AES256; diff --git a/src/format/Kdbx3Reader.cpp b/src/format/Kdbx3Reader.cpp index 5c718d6a0d..66935b7f79 100644 --- a/src/format/Kdbx3Reader.cpp +++ b/src/format/Kdbx3Reader.cpp @@ -34,7 +34,7 @@ bool Kdbx3Reader::readDatabaseImpl(QIODevice* device, QSharedPointer key, Database* db) { - Q_ASSERT(m_kdbxVersion <= KeePass2::FILE_VERSION_3_1); + Q_ASSERT((db->formatVersion() & KeePass2::FILE_VERSION_CRITICAL_MASK) <= KeePass2::FILE_VERSION_3); if (hasError()) { return false; @@ -120,7 +120,7 @@ bool Kdbx3Reader::readDatabaseImpl(QIODevice* device, return false; } - Q_ASSERT(!xmlReader.headerHash().isEmpty() || m_kdbxVersion < KeePass2::FILE_VERSION_3_1); + Q_ASSERT(!xmlReader.headerHash().isEmpty() || db->formatVersion() < KeePass2::FILE_VERSION_3_1); if (!xmlReader.headerHash().isEmpty()) { QByteArray headerHash = CryptoHash::hash(headerData, CryptoHash::Sha256); diff --git a/src/format/Kdbx3Writer.cpp b/src/format/Kdbx3Writer.cpp index 7ba4c3f36c..2770239a7b 100644 --- a/src/format/Kdbx3Writer.cpp +++ b/src/format/Kdbx3Writer.cpp @@ -68,7 +68,7 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) QBuffer header; header.open(QIODevice::WriteOnly); - writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, formatVersion()); + writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, db->formatVersion()); CHECK_RETURN_FALSE(writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); CHECK_RETURN_FALSE( @@ -137,7 +137,7 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) return false; } - KdbxXmlWriter xmlWriter(formatVersion()); + KdbxXmlWriter xmlWriter(db->formatVersion()); xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); // Explicitly close/reset streams so they are flushed and we can detect @@ -161,8 +161,3 @@ bool Kdbx3Writer::writeDatabase(QIODevice* device, Database* db) return true; } - -quint32 Kdbx3Writer::formatVersion() -{ - return KeePass2::FILE_VERSION_3_1; -} diff --git a/src/format/Kdbx3Writer.h b/src/format/Kdbx3Writer.h index 45b0a8b510..eb98a470db 100644 --- a/src/format/Kdbx3Writer.h +++ b/src/format/Kdbx3Writer.h @@ -29,7 +29,6 @@ class Kdbx3Writer : public KdbxWriter public: bool writeDatabase(QIODevice* device, Database* db) override; - quint32 formatVersion() override; }; #endif // KEEPASSX_KDBX3WRITER_H diff --git a/src/format/Kdbx4Reader.cpp b/src/format/Kdbx4Reader.cpp index c25c3e31b0..1dc7067dd2 100644 --- a/src/format/Kdbx4Reader.cpp +++ b/src/format/Kdbx4Reader.cpp @@ -36,7 +36,7 @@ bool Kdbx4Reader::readDatabaseImpl(QIODevice* device, QSharedPointer key, Database* db) { - Q_ASSERT(m_kdbxVersion == KeePass2::FILE_VERSION_4); + Q_ASSERT((db->formatVersion() & KeePass2::FILE_VERSION_CRITICAL_MASK) == KeePass2::FILE_VERSION_4); m_binaryPool.clear(); diff --git a/src/format/Kdbx4Writer.cpp b/src/format/Kdbx4Writer.cpp index cbd6f95119..08a0df013e 100644 --- a/src/format/Kdbx4Writer.cpp +++ b/src/format/Kdbx4Writer.cpp @@ -66,7 +66,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) QBuffer header; header.open(QIODevice::WriteOnly); - writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, formatVersion()); + writeMagicNumbers(&header, KeePass2::SIGNATURE_1, KeePass2::SIGNATURE_2, db->formatVersion()); CHECK_RETURN_FALSE( writeHeaderField(&header, KeePass2::HeaderFieldID::CipherID, db->cipher().toRfc4122())); @@ -166,7 +166,7 @@ bool Kdbx4Writer::writeDatabase(QIODevice* device, Database* db) return false; } - KdbxXmlWriter xmlWriter(formatVersion()); + KdbxXmlWriter xmlWriter(db->formatVersion()); xmlWriter.writeDatabase(outputDevice, db, &randomStream, headerHash); // Explicitly close/reset streams so they are flushed and we can detect @@ -306,8 +306,3 @@ bool Kdbx4Writer::serializeVariantMap(const QVariantMap& map, QByteArray& output CHECK_RETURN_FALSE(buf.write(endBytes) == 1); return true; } - -quint32 Kdbx4Writer::formatVersion() -{ - return KeePass2::FILE_VERSION_4; -} diff --git a/src/format/Kdbx4Writer.h b/src/format/Kdbx4Writer.h index 8ef82f18f7..c8540245b1 100644 --- a/src/format/Kdbx4Writer.h +++ b/src/format/Kdbx4Writer.h @@ -29,7 +29,6 @@ class Kdbx4Writer : public KdbxWriter public: bool writeDatabase(QIODevice* device, Database* db) override; - quint32 formatVersion() override; private: bool writeInnerHeaderField(QIODevice* device, KeePass2::InnerHeaderFieldID fieldId, const QByteArray& data); diff --git a/src/format/KdbxReader.cpp b/src/format/KdbxReader.cpp index 94ccf33423..5610897c84 100644 --- a/src/format/KdbxReader.cpp +++ b/src/format/KdbxReader.cpp @@ -74,14 +74,12 @@ bool KdbxReader::readDatabase(QIODevice* device, QSharedPointersetFormatVersion(version); // read header fields while (readHeaderField(headerStream, m_db) && !hasError()) { diff --git a/src/format/KdbxReader.h b/src/format/KdbxReader.h index cbc13b20bd..a7b9fc37e4 100644 --- a/src/format/KdbxReader.h +++ b/src/format/KdbxReader.h @@ -83,8 +83,6 @@ class KdbxReader void raiseError(const QString& errorMessage); - quint32 m_kdbxVersion = 0; - QByteArray m_masterSeed; QByteArray m_encryptionIV; QByteArray m_streamStartBytes; diff --git a/src/format/KdbxWriter.cpp b/src/format/KdbxWriter.cpp index b69cedbf78..b7758c7517 100644 --- a/src/format/KdbxWriter.cpp +++ b/src/format/KdbxWriter.cpp @@ -71,7 +71,7 @@ void KdbxWriter::extractDatabase(QByteArray& xmlOutput, Database* db) QBuffer buffer; buffer.setBuffer(&xmlOutput); buffer.open(QIODevice::WriteOnly); - KdbxXmlWriter writer(formatVersion()); + KdbxXmlWriter writer(db->formatVersion()); writer.disableInnerStreamProtection(true); writer.writeDatabase(&buffer, db); } diff --git a/src/format/KdbxWriter.h b/src/format/KdbxWriter.h index d5e214a512..bec8fc8df9 100644 --- a/src/format/KdbxWriter.h +++ b/src/format/KdbxWriter.h @@ -52,11 +52,6 @@ class KdbxWriter */ virtual bool writeDatabase(QIODevice* device, Database* db) = 0; - /** - * Get the database format version for the writer. - */ - virtual quint32 formatVersion() = 0; - void extractDatabase(QByteArray& xmlOutput, Database* db); bool hasError() const; diff --git a/src/format/KdbxXmlWriter.cpp b/src/format/KdbxXmlWriter.cpp index 4b49b69728..35ed5ffdb3 100644 --- a/src/format/KdbxXmlWriter.cpp +++ b/src/format/KdbxXmlWriter.cpp @@ -166,7 +166,7 @@ void KdbxXmlWriter::writeIcon(const QUuid& uuid, const Metadata::CustomIconData& m_xml.writeStartElement("Icon"); writeUuid("UUID", uuid); - if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { + if (m_kdbxVersion >= KeePass2::FILE_VERSION_4_1) { if (!iconData.name.isEmpty()) { writeString("Name", iconData.name); } @@ -243,7 +243,7 @@ void KdbxXmlWriter::writeCustomDataItem(const QString& key, writeString("Key", key); writeString("Value", item.value); - if (writeLastModified && m_kdbxVersion >= KeePass2::FILE_VERSION_4 && item.lastModified.isValid()) { + if (writeLastModified && m_kdbxVersion >= KeePass2::FILE_VERSION_4_1 && item.lastModified.isValid()) { writeDateTime("LastModificationTime", item.lastModified); } @@ -291,9 +291,9 @@ void KdbxXmlWriter::writeGroup(const Group* group) if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { writeCustomData(group->customData()); - if (!group->previousParentGroupUuid().isNull()) { - writeUuid("PreviousParentGroup", group->previousParentGroupUuid()); - } + } + if (m_kdbxVersion >= KeePass2::FILE_VERSION_4_1 && !group->previousParentGroupUuid().isNull()) { + writeUuid("PreviousParentGroup", group->previousParentGroupUuid()); } const QList& entryList = group->entries(); @@ -363,7 +363,7 @@ void KdbxXmlWriter::writeEntry(const Entry* entry) writeString("Tags", entry->tags()); writeTimes(entry->timeInfo()); - if (m_kdbxVersion >= KeePass2::FILE_VERSION_4) { + if (m_kdbxVersion >= KeePass2::FILE_VERSION_4_1) { if (entry->excludeFromReports()) { writeBool("QualityCheck", false); } diff --git a/src/format/KeePass2.cpp b/src/format/KeePass2.cpp index cc57ccffa5..bf991f8805 100644 --- a/src/format/KeePass2.cpp +++ b/src/format/KeePass2.cpp @@ -56,7 +56,7 @@ 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.1)"))}; + qMakePair(KeePass2::KDF_AES_KDBX3, QObject::tr("AES-KDF (KDBX 3)"))}; QByteArray KeePass2::hmacKey(const QByteArray& masterSeed, const QByteArray& transformedMasterKey) { diff --git a/src/format/KeePass2.h b/src/format/KeePass2.h index c42183295c..5aed903c3a 100644 --- a/src/format/KeePass2.h +++ b/src/format/KeePass2.h @@ -31,16 +31,18 @@ namespace KeePass2 constexpr quint32 SIGNATURE_2 = 0xB54BFB67; constexpr quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFF0000; + constexpr quint32 FILE_VERSION_4_1 = 0x00040001; constexpr quint32 FILE_VERSION_4 = 0x00040000; constexpr quint32 FILE_VERSION_3_1 = 0x00030001; constexpr quint32 FILE_VERSION_3 = 0x00030000; constexpr quint32 FILE_VERSION_2 = 0x00020000; constexpr quint32 FILE_VERSION_MIN = FILE_VERSION_2; + constexpr quint32 FILE_VERSION_MAX = FILE_VERSION_4_1; constexpr quint16 VARIANTMAP_VERSION = 0x0100; constexpr quint16 VARIANTMAP_CRITICAL_MASK = 0xFF00; - const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; + constexpr QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; extern const QUuid CIPHER_AES128; extern const QUuid CIPHER_AES256; diff --git a/src/format/KeePass2Reader.cpp b/src/format/KeePass2Reader.cpp index 3c9cd23bed..fed62d87ce 100644 --- a/src/format/KeePass2Reader.cpp +++ b/src/format/KeePass2Reader.cpp @@ -31,22 +31,23 @@ * @param db Database to read into * @return true on success */ -bool KeePass2Reader::readDatabase(const QString& filename, QSharedPointer key, Database* db) +KeePass2Reader::Status +KeePass2Reader::readDatabase(const QString& filename, QSharedPointer key, Database* db) { QFile file(filename); if (!file.open(QFile::ReadOnly)) { raiseError(file.errorString()); - return false; + return Error; } - bool ok = readDatabase(&file, std::move(key), db); + Status status = readDatabase(&file, std::move(key), db); if (file.error() != QFile::NoError) { raiseError(file.errorString()); - return false; + return Error; } - return ok; + return status; } /** @@ -57,7 +58,8 @@ bool KeePass2Reader::readDatabase(const QString& filename, QSharedPointer key, Database* db) +KeePass2Reader::Status +KeePass2Reader::readDatabase(QIODevice* device, QSharedPointer key, Database* db) { m_error = false; m_errorStr.clear(); @@ -67,7 +69,7 @@ bool KeePass2Reader::readDatabase(QIODevice* device, QSharedPointer 'Import KeePass 1 database…'.\n" "This is a one-way migration. You won't be able to open the imported " "database with the old KeePassX 0.4 version.")); - return false; + return Error; } else if (!(signature1 == KeePass2::SIGNATURE_1 && signature2 == KeePass2::SIGNATURE_2)) { raiseError(tr("Not a KeePass database.")); - return false; + return Error; } - // mask out minor version - m_version &= KeePass2::FILE_VERSION_CRITICAL_MASK; - - quint32 maxVersion = KeePass2::FILE_VERSION_4 & KeePass2::FILE_VERSION_CRITICAL_MASK; - if (m_version < KeePass2::FILE_VERSION_MIN || m_version > maxVersion) { + if (m_version < KeePass2::FILE_VERSION_MIN + || (m_version & KeePass2::FILE_VERSION_CRITICAL_MASK) > KeePass2::FILE_VERSION_MAX) { raiseError(tr("Unsupported KeePass 2 database version.")); - return false; + return Error; } // determine file format (KDBX 2/3 or 4) @@ -97,7 +96,10 @@ bool KeePass2Reader::readDatabase(QIODevice* device, QSharedPointerreadDatabase(device, std::move(key), db); + if (!m_reader->readDatabase(device, std::move(key), db)) { + return Error; + } + return hasMinorVersionMismatch() ? VersionWarn : Ok; } bool KeePass2Reader::hasError() const @@ -110,6 +112,14 @@ QString KeePass2Reader::errorString() const return !m_reader.isNull() ? m_reader->errorString() : m_errorStr; } +/** + * @return whether the KDBX minor version is greater than the newest supported. + */ +bool KeePass2Reader::hasMinorVersionMismatch() const +{ + return m_version > KeePass2::FILE_VERSION_MAX; +} + /** * @return detected KDBX version */ diff --git a/src/format/KeePass2Reader.h b/src/format/KeePass2Reader.h index a3f5c38b8d..6372d5ea4c 100644 --- a/src/format/KeePass2Reader.h +++ b/src/format/KeePass2Reader.h @@ -27,10 +27,18 @@ class KeePass2Reader Q_DECLARE_TR_FUNCTIONS(KdbxReader) public: - bool readDatabase(const QString& filename, QSharedPointer key, Database* db); - bool readDatabase(QIODevice* device, QSharedPointer key, Database* db); + enum Status + { + Error = 0, + Ok = 1, + VersionWarn = 2 + }; + + Status readDatabase(const QString& filename, QSharedPointer key, Database* db); + Status readDatabase(QIODevice* device, QSharedPointer key, Database* db); bool hasError() const; + bool hasMinorVersionMismatch() const; QString errorString() const; QSharedPointer reader() const; diff --git a/src/format/KeePass2Writer.cpp b/src/format/KeePass2Writer.cpp index 86480e74cc..5ff810a9e2 100644 --- a/src/format/KeePass2Writer.cpp +++ b/src/format/KeePass2Writer.cpp @@ -40,44 +40,56 @@ bool KeePass2Writer::writeDatabase(const QString& filename, Database* db) return writeDatabase(&file, db); } +#define VERSION_MAX(a, b) \ + a = qMax(a, b); \ + if (a >= KeePass2::FILE_VERSION_MAX) { \ + return a; \ + } + /** - * @return true if the database should upgrade to KDBX4. + * Get the minimum KDBX version required for writing the database. */ -bool KeePass2Writer::implicitKDBXUpgradeNeeded(Database const* db) +quint32 KeePass2Writer::needsKdbxVersion(Database const* db, bool ignoreCurrent, bool ignoreKdf) { - if (db->kdf()->uuid() != KeePass2::KDF_AES_KDBX3) { - return false; + quint32 version = KeePass2::FILE_VERSION_3_1; + if (!ignoreCurrent) { + VERSION_MAX(version, db->formatVersion()) + } + + if (!ignoreKdf && !db->kdf().isNull() && !db->kdf()->uuid().isNull() + && db->kdf()->uuid() != KeePass2::KDF_AES_KDBX3) { + VERSION_MAX(version, KeePass2::FILE_VERSION_4) } if (!db->publicCustomData().isEmpty()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4) } for (const auto& group : db->rootGroup()->groupsRecursive(true)) { if (group->customData() && !group->customData()->isEmpty()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4) } if (!group->tags().isEmpty()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4_1) } if (group->previousParentGroup()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4_1) } for (const auto& entry : group->entries()) { if (entry->customData() && !entry->customData()->isEmpty()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4) } if (entry->excludeFromReports()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4_1) } if (entry->previousParentGroup()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4_1) } for (const auto& historyItem : entry->historyItems()) { if (historyItem->customData() && !historyItem->customData()->isEmpty()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4) } } } @@ -87,11 +99,11 @@ bool KeePass2Writer::implicitKDBXUpgradeNeeded(Database const* db) for (const QUuid& uuid : customIconsOrder) { const auto& icon = db->metadata()->customIcon(uuid); if (!icon.name.isEmpty() || icon.lastModified.isValid()) { - return true; + VERSION_MAX(version, KeePass2::FILE_VERSION_4_1) } } - return false; + return version; } /** @@ -106,8 +118,8 @@ bool KeePass2Writer::writeDatabase(QIODevice* device, Database* db) m_error = false; m_errorStr.clear(); - bool upgradeNeeded = implicitKDBXUpgradeNeeded(db); - if (upgradeNeeded) { + m_version = needsKdbxVersion(db); + if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 && m_version >= KeePass2::FILE_VERSION_4) { // We MUST re-transform the key, because challenge-response hashing has changed in KDBX 4. // If we forget to re-transform, the database will be saved WITHOUT a challenge-response key component! auto kdf = KeePass2::uuidToKdf(KeePass2::KDF_AES_KDBX4); @@ -115,12 +127,12 @@ bool KeePass2Writer::writeDatabase(QIODevice* device, Database* db) db->changeKdf(kdf); } + db->setFormatVersion(m_version); if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { - Q_ASSERT(!upgradeNeeded); - m_version = KeePass2::FILE_VERSION_3_1; + Q_ASSERT(m_version <= KeePass2::FILE_VERSION_3_1); m_writer.reset(new Kdbx3Writer()); } else { - m_version = KeePass2::FILE_VERSION_4; + Q_ASSERT(m_version >= KeePass2::FILE_VERSION_4); m_writer.reset(new Kdbx4Writer()); } @@ -132,11 +144,13 @@ void KeePass2Writer::extractDatabase(Database* db, QByteArray& xmlOutput) m_error = false; m_errorStr.clear(); + m_version = needsKdbxVersion(db); + db->setFormatVersion(m_version); if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { - m_version = KeePass2::FILE_VERSION_3_1; + Q_ASSERT(m_version <= KeePass2::FILE_VERSION_3_1); m_writer.reset(new Kdbx3Writer()); } else { - m_version = KeePass2::FILE_VERSION_4; + Q_ASSERT(m_version >= KeePass2::FILE_VERSION_4); m_writer.reset(new Kdbx4Writer()); } diff --git a/src/format/KeePass2Writer.h b/src/format/KeePass2Writer.h index 049b1555cd..88f66336c2 100644 --- a/src/format/KeePass2Writer.h +++ b/src/format/KeePass2Writer.h @@ -33,7 +33,7 @@ class KeePass2Writer bool writeDatabase(const QString& filename, Database* db); bool writeDatabase(QIODevice* device, Database* db); void extractDatabase(Database* db, QByteArray& xmlOutput); - static bool implicitKDBXUpgradeNeeded(Database const* db); + static quint32 needsKdbxVersion(Database const* db, bool ignoreCurrent = false, bool ignoreKdf = false); QSharedPointer writer() const; quint32 version() const; diff --git a/src/gui/DatabaseOpenWidget.cpp b/src/gui/DatabaseOpenWidget.cpp index 43e529551e..e708f31e75 100644 --- a/src/gui/DatabaseOpenWidget.cpp +++ b/src/gui/DatabaseOpenWidget.cpp @@ -202,11 +202,31 @@ void DatabaseOpenWidget::openDatabase() QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_ui->passwordFormFrame->setEnabled(false); QCoreApplication::processEvents(); - bool ok = m_db->open(m_filename, databaseKey, &error, false); + KeePass2Reader::Status status = m_db->open(m_filename, databaseKey, &error, false); QApplication::restoreOverrideCursor(); m_ui->passwordFormFrame->setEnabled(true); - if (ok) { + if (status == KeePass2Reader::Status::VersionWarn) { + QScopedPointer msgBox(new QMessageBox(this)); + msgBox->setIcon(QMessageBox::Warning); + msgBox->setWindowTitle(tr("Database Version Mismatch")); + msgBox->setText(tr("The database you are trying to open was most likely\n" + "created by a newer version of KeePassXC.\n\n" + "You can try to open it anyway, but it may be incomplete\n" + "and saving any changes may incur data loss.\n\n" + "We recommend you update your KeePassXC installation.")); + auto btn = msgBox->addButton(tr("Open database anyway"), QMessageBox::ButtonRole::AcceptRole); + msgBox->setDefaultButton(btn); + msgBox->addButton(QMessageBox::Cancel); + msgBox->exec(); + if (msgBox->clickedButton() != btn) { + m_db.reset(new Database()); + m_ui->messageWidget->showMessage(tr("Database unlock canceled."), MessageWidget::MessageType::Error); + return; + } + } + + if (status != KeePass2Reader::Status::Error) { #ifdef WITH_XC_TOUCHID QHash useTouchID = config()->get(Config::UseTouchID).toHash(); diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp index 1a967b7739..03d30798cf 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.cpp @@ -24,6 +24,7 @@ #include "core/Metadata.h" #include "crypto/kdf/Argon2Kdf.h" #include "format/KeePass2.h" +#include "format/KeePass2Writer.h" #include "gui/MessageBox.h" const char* DatabaseSettingsWidgetEncryption::CD_DECRYPTION_TIME_PREFERENCE_KEY = "KPXC_DECRYPTION_TIME_PREFERENCE"; @@ -36,12 +37,13 @@ DatabaseSettingsWidgetEncryption::DatabaseSettingsWidgetEncryption(QWidget* pare connect(m_ui->transformBenchmarkButton, SIGNAL(clicked()), SLOT(benchmarkTransformRounds())); connect(m_ui->kdfComboBox, SIGNAL(currentIndexChanged(int)), SLOT(changeKdf(int))); + m_ui->formatCannotBeChanged->setVisible(false); connect(m_ui->memorySpinBox, SIGNAL(valueChanged(int)), this, SLOT(memoryChanged(int))); connect(m_ui->parallelismSpinBox, SIGNAL(valueChanged(int)), this, SLOT(parallelismChanged(int))); - m_ui->compatibilitySelection->addItem(tr("KDBX 4.0 (recommended)"), KeePass2::KDF_ARGON2D.toByteArray()); - m_ui->compatibilitySelection->addItem(tr("KDBX 3.1"), KeePass2::KDF_AES_KDBX3.toByteArray()); + m_ui->compatibilitySelection->addItem(tr("KDBX 4 (recommended)"), KeePass2::KDF_ARGON2D.toByteArray()); + m_ui->compatibilitySelection->addItem(tr("KDBX 3"), KeePass2::KDF_AES_KDBX3.toByteArray()); m_ui->decryptionTimeSlider->setMinimum(Kdf::MIN_ENCRYPTION_TIME / 100); m_ui->decryptionTimeSlider->setMaximum(Kdf::MAX_ENCRYPTION_TIME / 100); m_ui->decryptionTimeSlider->setValue(Kdf::DEFAULT_ENCRYPTION_TIME / 100); @@ -93,6 +95,7 @@ void DatabaseSettingsWidgetEncryption::initialize() m_db->setCipher(KeePass2::CIPHER_AES256); isDirty = true; } + bool kdbx3Enabled = KeePass2Writer::needsKdbxVersion(m_db.data(), true, true) <= KeePass2::FILE_VERSION_3_1; // check if the DB's custom data has a decryption time setting stored // and set the slider to it, otherwise just state that the time is unchanged @@ -115,9 +118,14 @@ void DatabaseSettingsWidgetEncryption::initialize() updateFormatCompatibility(m_db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3 ? KDBX3 : KDBX4, isDirty); setupAlgorithmComboBox(); - setupKdfComboBox(); + setupKdfComboBox(kdbx3Enabled); loadKdfParameters(); + if (!kdbx3Enabled) { + m_ui->compatibilitySelection->setEnabled(false); + m_ui->formatCannotBeChanged->setVisible(true); + } + m_isDirty = isDirty; } @@ -143,13 +151,15 @@ void DatabaseSettingsWidgetEncryption::setupAlgorithmComboBox() } } -void DatabaseSettingsWidgetEncryption::setupKdfComboBox() +void DatabaseSettingsWidgetEncryption::setupKdfComboBox(bool enableKdbx3) { - // Setup kdf combo box + // Set up kdf combo box bool block = m_ui->kdfComboBox->blockSignals(true); m_ui->kdfComboBox->clear(); for (auto& kdf : asConst(KeePass2::KDFS)) { - m_ui->kdfComboBox->addItem(kdf.second.toUtf8(), kdf.first.toByteArray()); + if (kdf.first != KeePass2::KDF_AES_KDBX3 or enableKdbx3) { + m_ui->kdfComboBox->addItem(kdf.second.toUtf8(), kdf.first.toByteArray()); + } } m_ui->kdfComboBox->blockSignals(block); } @@ -393,8 +403,8 @@ void DatabaseSettingsWidgetEncryption::updateFormatCompatibility(int index, bool m_ui->compatibilitySelection->blockSignals(block); } + QUuid kdfUuid(m_ui->compatibilitySelection->itemData(index).toByteArray()); if (retransform) { - QUuid kdfUuid(m_ui->compatibilitySelection->itemData(index).toByteArray()); auto kdf = KeePass2::uuidToKdf(kdfUuid); m_db->setKdf(kdf); diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h index 2c7b5bac9f..c3d7ccf749 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.h @@ -61,7 +61,7 @@ private slots: void updateDecryptionTime(int value); void updateFormatCompatibility(int index, bool retransform = true); void setupAlgorithmComboBox(); - void setupKdfComboBox(); + void setupKdfComboBox(bool enableKdbx3); void loadKdfParameters(); void updateKdfFields(); void activateChangeDecryptionTime(); diff --git a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui index 97da37475e..2b8598862e 100644 --- a/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui +++ b/src/gui/dbsettings/DatabaseSettingsWidgetEncryption.ui @@ -183,6 +183,9 @@ + + 2 + @@ -203,12 +206,24 @@ + + + + + true + + + + Format cannot be changed: Your database uses KDBX 4 features + + + - This is only important if you need to use your database with other programs. + Unless you need to open your database with other programs, always use the latest format. diff --git a/tests/TestKdbx2.cpp b/tests/TestKdbx2.cpp index bf22be375a..c0da4d4a39 100644 --- a/tests/TestKdbx2.cpp +++ b/tests/TestKdbx2.cpp @@ -87,7 +87,7 @@ void TestKdbx2::testFormat200Upgrade() reader.readDatabase(filename, key, db.data()); QVERIFY2(!reader.hasError(), reader.errorString().toStdString().c_str()); QVERIFY(!db.isNull()); - QCOMPARE(reader.version(), KeePass2::FILE_VERSION_2 & KeePass2::FILE_VERSION_CRITICAL_MASK); + QCOMPARE(reader.version(), KeePass2::FILE_VERSION_2); QCOMPARE(db->kdf()->uuid(), KeePass2::KDF_AES_KDBX3); QBuffer buffer; @@ -110,6 +110,6 @@ void TestKdbx2::testFormat200Upgrade() // database should now be upgraded to KDBX 3 without data loss verifyKdbx2Db(targetDb); - QCOMPARE(reader.version(), KeePass2::FILE_VERSION_3_1 & KeePass2::FILE_VERSION_CRITICAL_MASK); + QCOMPARE(reader.version(), KeePass2::FILE_VERSION_3_1); QCOMPARE(targetDb->kdf()->uuid(), KeePass2::KDF_AES_KDBX3); } diff --git a/tests/TestKdbx3.cpp b/tests/TestKdbx3.cpp index 27fa70c11b..bab8ab8dc5 100644 --- a/tests/TestKdbx3.cpp +++ b/tests/TestKdbx3.cpp @@ -75,22 +75,7 @@ void TestKdbx3::readKdbx(QIODevice* device, if (hasError) { errorString = reader.errorString(); } - QCOMPARE(reader.version(), KeePass2::FILE_VERSION_3_1 & KeePass2::FILE_VERSION_CRITICAL_MASK); -} - -void TestKdbx3::readKdbx(const QString& path, - QSharedPointer key, - QSharedPointer db, - bool& hasError, - QString& errorString) -{ - KeePass2Reader reader; - reader.readDatabase(path, key, db.data()); - hasError = reader.hasError(); - if (hasError) { - errorString = reader.errorString(); - } - QCOMPARE(reader.version(), KeePass2::FILE_VERSION_3_1 & KeePass2::FILE_VERSION_CRITICAL_MASK); + QCOMPARE(reader.version(), KeePass2::FILE_VERSION_3_1); } void TestKdbx3::writeKdbx(QIODevice* device, Database* db, bool& hasError, QString& errorString) diff --git a/tests/TestKdbx3.h b/tests/TestKdbx3.h index ca571fbc88..deb965d903 100644 --- a/tests/TestKdbx3.h +++ b/tests/TestKdbx3.h @@ -44,11 +44,6 @@ private slots: QSharedPointer db, bool& hasError, QString& errorString) override; - void readKdbx(const QString& path, - QSharedPointer key, - QSharedPointer db, - bool& hasError, - QString& errorString) override; void writeKdbx(QIODevice* device, Database* db, bool& hasError, QString& errorString) override; }; diff --git a/tests/TestKdbx4.cpp b/tests/TestKdbx4.cpp index 4521140dc4..9bd210ca50 100644 --- a/tests/TestKdbx4.cpp +++ b/tests/TestKdbx4.cpp @@ -92,21 +92,6 @@ void TestKdbx4Argon2::readKdbx(QIODevice* device, QCOMPARE(reader.version(), KeePass2::FILE_VERSION_4); } -void TestKdbx4Argon2::readKdbx(const QString& path, - QSharedPointer key, - QSharedPointer db, - bool& hasError, - QString& errorString) -{ - KeePass2Reader reader; - reader.readDatabase(path, key, db.data()); - hasError = reader.hasError(); - if (hasError) { - errorString = reader.errorString(); - } - QCOMPARE(reader.version(), KeePass2::FILE_VERSION_4); -} - void TestKdbx4Argon2::writeKdbx(QIODevice* device, Database* db, bool& hasError, QString& errorString) { if (db->kdf()->uuid() == KeePass2::KDF_AES_KDBX3) { @@ -218,8 +203,8 @@ void TestKdbx4Format::testFormat400Upgrade_data() QTest::addColumn("addCustomData"); QTest::addColumn("expectedVersion"); - auto constexpr kdbx3 = KeePass2::FILE_VERSION_3_1 & KeePass2::FILE_VERSION_CRITICAL_MASK; - auto constexpr kdbx4 = KeePass2::FILE_VERSION_4 & KeePass2::FILE_VERSION_CRITICAL_MASK; + auto constexpr kdbx3 = KeePass2::FILE_VERSION_3_1; + auto constexpr kdbx4 = KeePass2::FILE_VERSION_4; QTest::newRow("Argon2d + AES") << KeePass2::KDF_ARGON2D << KeePass2::CIPHER_AES256 << false << kdbx4; QTest::newRow("Argon2id + AES") << KeePass2::KDF_ARGON2ID << KeePass2::CIPHER_AES256 << false << kdbx4; @@ -255,7 +240,7 @@ void TestKdbx4Format::testFormat410Upgrade() Database db; db.changeKdf(fastKdf(db.kdf())); QCOMPARE(db.kdf()->uuid(), KeePass2::KDF_AES_KDBX3); - QVERIFY(!KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); auto group1 = new Group(); group1->setUuid(QUuid::createUuid()); @@ -271,44 +256,45 @@ void TestKdbx4Format::testFormat410Upgrade() // Groups with tags group1->setTags("tag"); - QVERIFY(KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_4_1); group1->setTags(""); - QVERIFY(!KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); // PasswordQuality flag set entry->setExcludeFromReports(true); - QVERIFY(KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_4_1); entry->setExcludeFromReports(false); - QVERIFY(!KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); // Previous parent group set on group group1->setPreviousParentGroup(group2); QCOMPARE(group1->previousParentGroup(), group2); - QVERIFY(KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_4_1); group1->setPreviousParentGroup(nullptr); - QVERIFY(!KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); // Previous parent group set on entry entry->setPreviousParentGroup(group2); QCOMPARE(entry->previousParentGroup(), group2); - QVERIFY(KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_4_1); entry->setPreviousParentGroup(nullptr); - QVERIFY(!KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); // Custom icons with name or modification date Metadata::CustomIconData customIcon; auto iconUuid = QUuid::createUuid(); db.metadata()->addCustomIcon(iconUuid, customIcon); - QVERIFY(!KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); customIcon.name = "abc"; db.metadata()->removeCustomIcon(iconUuid); db.metadata()->addCustomIcon(iconUuid, customIcon); - QVERIFY(KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_4_1); customIcon.name.clear(); customIcon.lastModified = Clock::currentDateTimeUtc(); db.metadata()->removeCustomIcon(iconUuid); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_3_1); db.metadata()->addCustomIcon(iconUuid, customIcon); - QVERIFY(KeePass2Writer::implicitKDBXUpgradeNeeded(&db)); + QCOMPARE(KeePass2Writer::needsKdbxVersion(&db), KeePass2::FILE_VERSION_4_1); } void TestKdbx4Format::testUpgradeMasterKeyIntegrity() @@ -394,8 +380,8 @@ void TestKdbx4Format::testUpgradeMasterKeyIntegrity() if (reader.hasError()) { QFAIL(qPrintable(reader.errorString())); } - QCOMPARE(reader.version(), expectedVersion & KeePass2::FILE_VERSION_CRITICAL_MASK); - if (expectedVersion != KeePass2::FILE_VERSION_3) { + QCOMPARE(reader.version(), expectedVersion); + if (expectedVersion >= KeePass2::FILE_VERSION_4) { QVERIFY(db2->kdf()->uuid() != KeePass2::KDF_AES_KDBX3); } } @@ -405,9 +391,9 @@ void TestKdbx4Format::testUpgradeMasterKeyIntegrity_data() QTest::addColumn("upgradeAction"); QTest::addColumn("expectedVersion"); - QTest::newRow("Upgrade: none") << QString("none") << KeePass2::FILE_VERSION_3; - QTest::newRow("Upgrade: none (meta-customdata)") << QString("meta-customdata") << KeePass2::FILE_VERSION_3; - QTest::newRow("Upgrade: none (explicit kdf-aes-kdbx3)") << QString("kdf-aes-kdbx3") << KeePass2::FILE_VERSION_3; + QTest::newRow("Upgrade: none") << QString("none") << KeePass2::FILE_VERSION_3_1; + QTest::newRow("Upgrade: none (meta-customdata)") << QString("meta-customdata") << KeePass2::FILE_VERSION_3_1; + QTest::newRow("Upgrade: none (explicit kdf-aes-kdbx3)") << QString("kdf-aes-kdbx3") << KeePass2::FILE_VERSION_3_1; QTest::newRow("Upgrade (explicit): kdf-argon2") << QString("kdf-argon2") << KeePass2::FILE_VERSION_4; QTest::newRow("Upgrade (explicit): kdf-aes-kdbx4") << QString("kdf-aes-kdbx4") << KeePass2::FILE_VERSION_4; QTest::newRow("Upgrade (implicit): public-customdata") << QString("public-customdata") << KeePass2::FILE_VERSION_4; diff --git a/tests/TestKdbx4.h b/tests/TestKdbx4.h index 0eddef6c0d..5d7f6cc500 100644 --- a/tests/TestKdbx4.h +++ b/tests/TestKdbx4.h @@ -32,11 +32,6 @@ class TestKdbx4Argon2 : public TestKeePass2Format readXml(const QString& path, bool strictMode, bool& hasError, QString& errorString) override; void writeXml(QBuffer* buf, Database* db, bool& hasError, QString& errorString) override; - void readKdbx(const QString& path, - QSharedPointer key, - QSharedPointer db, - bool& hasError, - QString& errorString) override; void readKdbx(QIODevice* device, QSharedPointer key, QSharedPointer db, diff --git a/tests/TestKeePass2Format.h b/tests/TestKeePass2Format.h index 759172ce61..140739c031 100644 --- a/tests/TestKeePass2Format.h +++ b/tests/TestKeePass2Format.h @@ -76,11 +76,6 @@ private slots: QSharedPointer db, bool& hasError, QString& errorString) = 0; - virtual void readKdbx(const QString& path, - QSharedPointer key, - QSharedPointer db, - bool& hasError, - QString& errorString) = 0; virtual void writeKdbx(QIODevice* device, Database* db, bool& hasError, QString& errorString) = 0; QSharedPointer m_xmlDb;