diff options
author | Jonathan White <support@dmapps.us> | 2020-07-07 04:13:28 +0300 |
---|---|---|
committer | Jonathan White <support@dmapps.us> | 2020-07-07 04:13:28 +0300 |
commit | 07659547ce6967e4b26e5ec981dcd1324ac8ff4c (patch) | |
tree | a3dd9f3bc9dd9a931ff2c10c85a4a482af3f7c90 /tests/TestYkChallengeResponseKey.cpp | |
parent | dcca5aa0f0ee2f2b8685787c01f934cb2b506ef7 (diff) | |
parent | cf95f5e72eafe6f4d9bb8136158b8e7285326395 (diff) |
Release 2.6.02.6.0
Added
- Custom Light and Dark themes [#4110, #4769, #4791, #4796, #4892, #4915]
- Compact mode to use classic Group and Entry line height [#4910]
- View menu to quickly switch themes, compact mode, and toggle UI elements [#4910]
- Search for groups and scope search to matched groups [#4705]
- Save Database Backup feature [#4550]
- Sort entries by "natural order" and move lines up/down [#4357]
- Option to launch KeePassXC on system startup/login [#4675]
- Caps Lock warning on password input fields [#3646]
- Add "Size" column to entry view [#4588]
- Browser-like tab experience using Ctrl+[Num] (Alt+[Num] on Linux) [#4063, #4305]
- Password Generator: Define additional characters to choose from [#3876]
- Reports: Database password health check (offline) [#3993]
- Reports: HIBP online service to check for breached passwords [#4438]
- Auto-Type: DateTime placeholders [#4409]
- Browser: Show group name in results sent to browser extension [#4111]
- Browser: Ability to define a custom browser location (macOS and Linux only) [#4148]
- Browser: Ability to change root group UUID and inline edit connection ID [#4315, #4591]
- CLI: `db-info` command [#4231]
- CLI: Use wl-clipboard if xclip is not available (Linux) [#4323]
- CLI: Incorporate xclip into snap builds [#4697]
- SSH Agent: Key file path env substitution, SSH_AUTH_SOCK override, and connection test [#3769, #3801, #4545]
- SSH Agent: Context menu actions to add/remove keys [#4290]
Changed
- Complete replacement of default database icons [#4699]
- Complete replacement of application icons [#4066, #4161, #4203, #4411]
- Complete rewrite of documentation and manpages using Asciidoctor [#4937]
- Complete refactor of config files; separate between local and roaming [#4665]
- Complete refactor of browser integration and proxy code [#4680]
- Complete refactor of hardware key integration (YubiKey and OnlyKey) [#4584, #4843]
- Significantly improve performance when saving and opening databases [#4309, #4833]
- Remove read-only detection for database files [#4508]
- Overhaul of password fields and password generator [#4367]
- Replace instances of "Master Key" with "Database Credentials" [#4929]
- Change settings checkboxes to positive phrasing for consistency [#4715]
- Improve UX of using entry actions (focus fix) [#3893]
- Set expiration time to Now when enabling entry expiration [#4406]
- Always show "New Entry" in context menu [#4617]
- Issue warning before adding large attachments [#4651]
- Improve importing OPVault [#4630]
- Improve AutoOpen capability [#3901, #4752]
- Check for updates every 7 days even while still running [#4752]
- Improve Windows installer UI/UX [#4675]
- Improve config file handling of portable distribution [#4131, #4752]
- macOS: Hide dock icon when application is hidden to tray [#4782]
- Browser: Use unlock dialog to improve UX of opening a locked database [#3698]
- Browser: Improve database and entry settings experience [#4392, #4591]
- Browser: Improve confirm access dialog [#2143, #4660]
- KeeShare: Improve monitoring file changes of shares [#4720]
- CLI: Rename `create` command to `db-create` [#4231]
- CLI: Cleanup `db-create` options (`--set-key-file` and `--set-password`) [#4313]
- CLI: Use stderr for help text and password prompts [#4086, #4623]
- FdoSecrets: Display existing secret service process [#4128]
Fixed
- Fix changing focus around the main window using tab key [#4641]
- Fix search field clearing while still using the application [#4368]
- Improve search help widget displaying on macOS and Linux [#4236]
- Return keyboard focus after editing an entry [#4287]
- Reset database path after failed "Save As" [#4526]
- Use SHA256 Digest for Windows code signing [#4129]
- Improve handling of ccache when building [#4104, #4335]
- macOS: Properly re-hide application window after browser integration and Auto-Type usage [#4909]
- Auto-Type: Fix crash when performing on new entry [#4132]
- Browser: Send legacy HTTP settings to recycle bin [#4589]
- Browser: Fix merging browser keys [#4685]
- CLI: Fix encoding when exporting database [#3921]
- SSH Agent: Improve reliability and underlying code [#3833, #4256, #4549, #4595]
- FdoSecrets: Fix crash when editing settings before service is enabled [#4332]
Diffstat (limited to 'tests/TestYkChallengeResponseKey.cpp')
-rw-r--r-- | tests/TestYkChallengeResponseKey.cpp | 104 |
1 files changed, 49 insertions, 55 deletions
diff --git a/tests/TestYkChallengeResponseKey.cpp b/tests/TestYkChallengeResponseKey.cpp index 0d6f9b5c3..05161544b 100644 --- a/tests/TestYkChallengeResponseKey.cpp +++ b/tests/TestYkChallengeResponseKey.cpp @@ -19,80 +19,74 @@ #include "TestYkChallengeResponseKey.h" #include "TestGlobal.h" + +#include "core/Tools.h" #include "crypto/Crypto.h" +#include "keys/YkChallengeResponseKey.h" -#include <QtConcurrentRun> +#include <QScopedPointer> +#include <QSignalSpy> -QTEST_GUILESS_MAIN(TestYubiKeyChalResp) +QTEST_GUILESS_MAIN(TestYubiKeyChallengeResponse) -void TestYubiKeyChalResp::initTestCase() +void TestYubiKeyChallengeResponse::initTestCase() { // crypto subsystem needs to be initialized for YubiKey testing QVERIFY(Crypto::init()); -} -void TestYubiKeyChalResp::init() -{ - if (!YubiKey::instance()->init()) { - QSKIP("Unable to connect to YubiKey"); + if (!YubiKey::instance()->isInitialized()) { + QSKIP("Unable to initialize YubiKey interface."); } } -void TestYubiKeyChalResp::detectDevices() +void TestYubiKeyChallengeResponse::testDetectDevices() { - connect(YubiKey::instance(), SIGNAL(detected(int, bool)), SLOT(ykDetected(int, bool)), Qt::QueuedConnection); - QtConcurrent::run(YubiKey::instance(), &YubiKey::detect); - - // need to wait for the hardware (that's hopefully plugged in)... - QTest::qWait(2000); - QVERIFY2(m_detected > 0, "Is a YubiKey attached?"); + YubiKey::instance()->findValidKeys(); + + // Wait for the hardware to respond + QSignalSpy detected(YubiKey::instance(), SIGNAL(detectComplete(bool))); + QTRY_VERIFY_WITH_TIMEOUT(detected.count() > 0, 2000); + + // Look at the information retrieved from the key(s) + for (auto key : YubiKey::instance()->foundKeys()) { + auto displayName = YubiKey::instance()->getDisplayName(key); + QVERIFY(displayName.contains("Challenge Response - Slot") || displayName.contains("Configured Slot -")); + QVERIFY(displayName.contains(QString::number(key.first))); + QVERIFY(displayName.contains(QString::number(key.second))); + } } -void TestYubiKeyChalResp::getSerial() +/** + * Secret key for the YubiKey slot used by the unit test is + * 1c e3 0f d7 8d 20 dc fa 40 b5 0c 18 77 9a fb 0f 02 28 8d b7 + * This secret can be on either slot but must be passive. + */ +void TestYubiKeyChallengeResponse::testKeyChallenge() { - unsigned int serial; - QVERIFY(YubiKey::instance()->getSerial(serial)); -} + auto keys = YubiKey::instance()->foundKeys(); + if (keys.isEmpty()) { + QSKIP("No YubiKey devices were detected."); + } -void TestYubiKeyChalResp::keyGetName() -{ - QVERIFY(m_key); - QVERIFY(m_key->getName().length() > 0); -} + // Find a key that is configured in passive mode + bool wouldBlock = false; + YubiKeySlot pKey(0, 0); + for (auto key : keys) { + if (YubiKey::instance()->testChallenge(key, &wouldBlock) && !wouldBlock) { + pKey = key; + break; + } + Tools::wait(100); + } -void TestYubiKeyChalResp::keyIssueChallenge() -{ - QVERIFY(m_key); - if (m_key->isBlocking()) { + if (pKey.first == 0) { /* Testing active mode in unit tests is unreasonable */ - QSKIP("YubiKey not in passive mode", SkipSingle); + QSKIP("No YubiKey contains a slot in passive mode."); } - QByteArray ba("UnitTest"); - QVERIFY(m_key->challenge(ba)); - - /* TODO Determine if it's reasonable to provide a fixed secret key for - * verification testing. Obviously simple technically, but annoying - * if devs need to re-program their yubikeys or have a spare test key - * for unit tests to pass. - * - * Might be worth it for integrity verification though. - */ -} - -void TestYubiKeyChalResp::ykDetected(int slot, bool blocking) -{ - Q_UNUSED(blocking); + QScopedPointer<YkChallengeResponseKey> key(new YkChallengeResponseKey(pKey)); - if (slot > 0) - m_detected++; - - /* Key used for later testing */ - if (!m_key) - m_key.reset(new YkChallengeResponseKey(slot, blocking)); -} - -void TestYubiKeyChalResp::deinit() -{ - QVERIFY(YubiKey::instance()->deinit()); + QByteArray ba("UnitTest"); + QVERIFY(key->challenge(ba)); + QCOMPARE(key->rawKey().size(), 20); } |