Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlouib <L0U13@protonmail.com>2020-01-07 05:00:39 +0300
committerJonathan White <support@dmapps.us>2020-01-28 07:00:34 +0300
commit0b6d9cb4725d059ae8150c3eaa32268dd52d0f5f (patch)
tree20a3efbab16259b3a0548e798b4e886b55b194e3 /tests/TestCli.cpp
parenta41c26e9cdab5050181354c1fc3c67bc51d49a26 (diff)
CLI: set decryption time on create.
Added an option to set the target decryption time on database creation for the CLI create command. This required some refactoring, in particular the extraction of the min, max and defaut decryption times in the `Kdf` module. Some work was done to allow changing those constant only in the `Kdf` module, should we ever want to change them.
Diffstat (limited to 'tests/TestCli.cpp')
-rw-r--r--tests/TestCli.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/TestCli.cpp b/tests/TestCli.cpp
index d73cdeddd..bc96de974 100644
--- a/tests/TestCli.cpp
+++ b/tests/TestCli.cpp
@@ -608,6 +608,48 @@ void TestCli::testCreate()
auto db3 =
QSharedPointer<Database>(Utils::unlockDatabase(databaseFilename3, true, keyfilePath, "", Utils::DEVNULL));
QVERIFY(db3);
+
+ // Invalid decryption time (format).
+ QString databaseFilename4 = testDir->path() + "/testCreate4.kdbx";
+ pos = m_stdoutFile->pos();
+ errPos = m_stderrFile->pos();
+ createCmd.execute({"create", databaseFilename4, "-t", "NAN"});
+ m_stdoutFile->seek(pos);
+ m_stderrFile->seek(errPos);
+
+ QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ QCOMPARE(m_stderrFile->readAll(), QByteArray("Invalid decryption time NAN.\n"));
+
+ // Invalid decryption time (range).
+ pos = m_stdoutFile->pos();
+ errPos = m_stderrFile->pos();
+ createCmd.execute({"create", databaseFilename4, "-t", "10"});
+ m_stdoutFile->seek(pos);
+ m_stderrFile->seek(errPos);
+
+ QCOMPARE(m_stdoutFile->readAll(), QByteArray(""));
+ QVERIFY(m_stderrFile->readAll().contains(QByteArray("Target decryption time must be between")));
+
+ int encryptionTime = 500;
+ // Custom encryption time
+ pos = m_stdoutFile->pos();
+ errPos = m_stderrFile->pos();
+ Utils::Test::setNextPassword("a");
+ int epochBefore = QDateTime::currentMSecsSinceEpoch();
+ createCmd.execute({"create", databaseFilename4, "-t", QString::number(encryptionTime)});
+ // Removing 100ms to make sure we account for changes in computation time.
+ QVERIFY(QDateTime::currentMSecsSinceEpoch() > (epochBefore + encryptionTime - 100));
+ m_stdoutFile->seek(pos);
+ m_stderrFile->seek(errPos);
+
+ QCOMPARE(m_stderrFile->readAll(), QByteArray(""));
+ QCOMPARE(m_stdoutFile->readLine(), QByteArray("Enter password to encrypt database (optional): \n"));
+ QCOMPARE(m_stdoutFile->readLine(), QByteArray("Benchmarking key derivation function for 500ms delay.\n"));
+ QVERIFY(m_stdoutFile->readLine().contains(QByteArray("rounds for key derivation function.\n")));
+
+ Utils::Test::setNextPassword("a");
+ auto db4 = QSharedPointer<Database>(Utils::unlockDatabase(databaseFilename4, true, "", "", Utils::DEVNULL));
+ QVERIFY(db4);
}
void TestCli::testInfo()