mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2026-01-06 02:55:43 -05:00
Implements KDBX4 format with Argon2 KDF
* Adds KDBX4 reader/writer interfaces * Adds KDBX4 XML reader/write interfaces * Implements test cases for KDBX4 * Fully compatible with KeePass2 * Corrects minor issues with Argon2 KDF
This commit is contained in:
parent
7dba788d09
commit
bef7ba2cfe
36 changed files with 3305 additions and 51 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#include "format/KeePass1.h"
|
||||
#include "format/KeePass2.h"
|
||||
#include "format/Kdbx3Reader.h"
|
||||
#include "format/Kdbx4Reader.h"
|
||||
|
||||
BaseKeePass2Reader::BaseKeePass2Reader()
|
||||
: m_error(false)
|
||||
|
|
@ -118,14 +119,21 @@ Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& ke
|
|||
|
||||
m_version = Endian::readSizedInt<quint32>(device, KeePass2::BYTEORDER, &ok)
|
||||
& KeePass2::FILE_VERSION_CRITICAL_MASK;
|
||||
quint32 maxVersion = KeePass2::FILE_VERSION & KeePass2::FILE_VERSION_CRITICAL_MASK;
|
||||
quint32 maxVersion = KeePass2::FILE_VERSION_4 & KeePass2::FILE_VERSION_CRITICAL_MASK;
|
||||
if (!ok || (m_version < KeePass2::FILE_VERSION_MIN) || (m_version > maxVersion)) {
|
||||
raiseError(tr("Unsupported KeePass 2 database version."));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
device->seek(0);
|
||||
m_reader.reset(static_cast<BaseKeePass2Reader*>(new Kdbx3Reader()));
|
||||
|
||||
// Determine KDBX3 vs KDBX4
|
||||
if (m_version < KeePass2::FILE_VERSION_4) {
|
||||
m_reader.reset(new Kdbx3Reader());
|
||||
} else {
|
||||
m_reader.reset(new Kdbx4Reader());
|
||||
}
|
||||
|
||||
m_reader->setSaveXml(m_saveXml);
|
||||
return m_reader->readDatabase(device, key, keepDatabase);
|
||||
}
|
||||
|
|
@ -159,3 +167,8 @@ quint32 KeePass2Reader::version() const
|
|||
{
|
||||
return m_version;
|
||||
}
|
||||
|
||||
QSharedPointer<BaseKeePass2Reader> KeePass2Reader::reader()
|
||||
{
|
||||
return m_reader;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue