mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-10-01 01:26:01 -04:00
Extract readKeyFromLine.
This commit is contained in:
parent
1ca5b72073
commit
798041fe11
@ -18,12 +18,15 @@
|
|||||||
#include "CompositeKey.h"
|
#include "CompositeKey.h"
|
||||||
#include "CompositeKey_p.h"
|
#include "CompositeKey_p.h"
|
||||||
|
|
||||||
#include <QtConcurrent>
|
|
||||||
#include <QElapsedTimer>
|
#include <QElapsedTimer>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QtConcurrent>
|
||||||
|
|
||||||
#include "core/Global.h"
|
#include "core/Global.h"
|
||||||
#include "crypto/CryptoHash.h"
|
#include "crypto/CryptoHash.h"
|
||||||
#include "crypto/SymmetricCipher.h"
|
#include "crypto/SymmetricCipher.h"
|
||||||
|
#include "keys/FileKey.h"
|
||||||
|
#include "keys/PasswordKey.h"
|
||||||
|
|
||||||
CompositeKey::CompositeKey()
|
CompositeKey::CompositeKey()
|
||||||
{
|
{
|
||||||
@ -71,6 +74,29 @@ CompositeKey& CompositeKey::operator=(const CompositeKey& key)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read a key from a line of input.
|
||||||
|
* If the line references a valid file
|
||||||
|
* path, the key is loaded from file.
|
||||||
|
*/
|
||||||
|
CompositeKey CompositeKey::readFromLine(QString line)
|
||||||
|
{
|
||||||
|
|
||||||
|
CompositeKey key;
|
||||||
|
if (QFile::exists(line)) {
|
||||||
|
FileKey fileKey;
|
||||||
|
fileKey.load(line);
|
||||||
|
key.addKey(fileKey);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PasswordKey password;
|
||||||
|
password.setPassword(line);
|
||||||
|
key.addKey(password);
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
QByteArray CompositeKey::rawKey() const
|
QByteArray CompositeKey::rawKey() const
|
||||||
{
|
{
|
||||||
CryptoHash cryptoHash(CryptoHash::Sha256);
|
CryptoHash cryptoHash(CryptoHash::Sha256);
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#define KEEPASSX_COMPOSITEKEY_H
|
#define KEEPASSX_COMPOSITEKEY_H
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
#include "keys/Key.h"
|
#include "keys/Key.h"
|
||||||
|
|
||||||
@ -39,6 +40,7 @@ public:
|
|||||||
void addKey(const Key& key);
|
void addKey(const Key& key);
|
||||||
|
|
||||||
static int transformKeyBenchmark(int msec);
|
static int transformKeyBenchmark(int msec);
|
||||||
|
static CompositeKey readFromLine(QString line);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QByteArray transformKeyRaw(const QByteArray& key, const QByteArray& seed,
|
static QByteArray transformKeyRaw(const QByteArray& key, const QByteArray& seed,
|
||||||
|
@ -83,6 +83,22 @@ void TestKeys::testComposite()
|
|||||||
delete compositeKey4;
|
delete compositeKey4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestKeys::testCompositeKeyReadFromLine()
|
||||||
|
{
|
||||||
|
|
||||||
|
QString keyFilename = QString("%1/FileKeyXml.key").arg(QString(KEEPASSX_TEST_DATA_DIR));
|
||||||
|
|
||||||
|
CompositeKey compositeFileKey = CompositeKey::readFromLine(keyFilename);
|
||||||
|
FileKey fileKey;
|
||||||
|
fileKey.load(keyFilename);
|
||||||
|
QCOMPARE(compositeFileKey.rawKey().size(), fileKey.rawKey().size());
|
||||||
|
|
||||||
|
CompositeKey compositePasswordKey = CompositeKey::readFromLine(QString("password"));
|
||||||
|
PasswordKey passwordKey(QString("password"));
|
||||||
|
QCOMPARE(compositePasswordKey.rawKey().size(), passwordKey.rawKey().size());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void TestKeys::testFileKey()
|
void TestKeys::testFileKey()
|
||||||
{
|
{
|
||||||
QFETCH(QString, type);
|
QFETCH(QString, type);
|
||||||
|
@ -27,6 +27,7 @@ class TestKeys : public QObject
|
|||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void initTestCase();
|
void initTestCase();
|
||||||
void testComposite();
|
void testComposite();
|
||||||
|
void testCompositeKeyReadFromLine();
|
||||||
void testFileKey();
|
void testFileKey();
|
||||||
void testFileKey_data();
|
void testFileKey_data();
|
||||||
void testCreateFileKey();
|
void testCreateFileKey();
|
||||||
|
@ -33,8 +33,8 @@ int main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
|
|
||||||
if (app.arguments().size() != 3) {
|
if (app.arguments().size() != 2) {
|
||||||
qCritical("Usage: kdbx-extract <password/key file> <kdbx file>");
|
qCritical("Usage: kdbx-extract <kdbx file>");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,19 +42,11 @@ int main(int argc, char **argv)
|
|||||||
qFatal("Fatal error while testing the cryptographic functions:\n%s", qPrintable(Crypto::errorString()));
|
qFatal("Fatal error while testing the cryptographic functions:\n%s", qPrintable(Crypto::errorString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
CompositeKey key;
|
static QTextStream inputTextStream(stdin, QIODevice::ReadOnly);
|
||||||
if (QFile::exists(app.arguments().at(1))) {
|
QString line = inputTextStream.readLine();
|
||||||
FileKey fileKey;
|
CompositeKey key = CompositeKey::readFromLine(line);
|
||||||
fileKey.load(app.arguments().at(1));
|
|
||||||
key.addKey(fileKey);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PasswordKey password;
|
|
||||||
password.setPassword(app.arguments().at(1));
|
|
||||||
key.addKey(password);
|
|
||||||
}
|
|
||||||
|
|
||||||
QFile dbFile(app.arguments().at(2));
|
QFile dbFile(app.arguments().at(1));
|
||||||
if (!dbFile.exists()) {
|
if (!dbFile.exists()) {
|
||||||
qCritical("File does not exist.");
|
qCritical("File does not exist.");
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -29,31 +29,6 @@
|
|||||||
#include "format/KeePass2Reader.h"
|
#include "format/KeePass2Reader.h"
|
||||||
#include "format/KeePass2Writer.h"
|
#include "format/KeePass2Writer.h"
|
||||||
#include "keys/CompositeKey.h"
|
#include "keys/CompositeKey.h"
|
||||||
#include "keys/FileKey.h"
|
|
||||||
#include "keys/PasswordKey.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read a key from a line of input.
|
|
||||||
* If the line references a valid file
|
|
||||||
* path, the key is loaded from file.
|
|
||||||
*/
|
|
||||||
CompositeKey readKeyFromLine(QString line)
|
|
||||||
{
|
|
||||||
|
|
||||||
CompositeKey key;
|
|
||||||
if (QFile::exists(line)) {
|
|
||||||
FileKey fileKey;
|
|
||||||
fileKey.load(line);
|
|
||||||
key.addKey(fileKey);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
PasswordKey password;
|
|
||||||
password.setPassword(line);
|
|
||||||
key.addKey(password);
|
|
||||||
}
|
|
||||||
return key;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -85,7 +60,7 @@ int main(int argc, char **argv)
|
|||||||
static QTextStream inputTextStream(stdin, QIODevice::ReadOnly);
|
static QTextStream inputTextStream(stdin, QIODevice::ReadOnly);
|
||||||
|
|
||||||
QString line1 = inputTextStream.readLine();
|
QString line1 = inputTextStream.readLine();
|
||||||
CompositeKey key1 = readKeyFromLine(line1);
|
CompositeKey key1 = CompositeKey::readFromLine(line1);
|
||||||
|
|
||||||
CompositeKey key2;
|
CompositeKey key2;
|
||||||
if (parser.isSet("same-password")) {
|
if (parser.isSet("same-password")) {
|
||||||
@ -93,7 +68,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
QString line2 = inputTextStream.readLine();
|
QString line2 = inputTextStream.readLine();
|
||||||
key2 = readKeyFromLine(line2);
|
key2 = CompositeKey::readFromLine(line2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user