Commit Graph

97 Commits

Author SHA1 Message Date
Janek Bevendorff
13eb1c0bbd Improve resilience against memory attacks
To reduce residual fragments of secret data in memory after
deallocation, this patch replaces the global delete operator with a
version that zeros out previously allocated memory. It makes use of
the new C++14 sized deallocation, but provides an unsized fallback
with platform-specific size deductions.

This change is only a minor mitigation and cannot protect against
buffer reallocations by the operating system or non-C++ libraries.
Thus, we still cannot guarantee all memory to be wiped after free.

As a further improvement, this patch uses libgcrypt and libsodium
to write long-lived master key component hashes into a secure
memory area and wipe it afterwards.

The patch also fixes compiler flags not being set properly on macOS.
2019-04-21 09:39:28 -04:00
Johan Fleury
a2bd08ca8a
fix(YubiKey): call yk_release on errors
Fix #2643 and #2721
2019-03-06 21:45:10 -05:00
Jonathan White
7e1b16250c Performed project-wide code formatting
* Updated format CMake command to properly
ignore new directories and files
* Added output when command is run
* Resolves #2623
2019-01-28 22:38:59 -05:00
Gianluca Recchia
fc930bae69
Restore correct formatting
Many lines were not conformant with the project's formatting rules.
This patch should fix all formatting and whitespace issues in the code
base.
A clang-format directive was put around the connect() calls containing
SIGNALs and SLOTs whose signatures would be denormalized because of the
formatting rules.
2018-11-28 18:29:15 -05:00
Jonathan White
1a2721529d Correct simultaneous saving with Yubikey
* Move mutex lock to right before challenge call and wait for up to 1 second for unlock
* Fix bug where ALREADY_RUNNING was interpreted as success and causing database corruption
2018-11-28 16:14:17 -05:00
Janek Bevendorff
d612cad09a
Refactor Database and Database widgets (#2491)
The Database, DatabaseWidget, and DatabaseTabWidget classes share many responsibilities in inconsistent ways resulting in impenetrable and unmaintainable code and a diverse set of bugs and architecture restrictions. This patch reworks the architecture, responsibilities of, and dependencies between these classes.

The core changes are:

* Move loading and saving logic from widgets into the Database class
* Get rid of the DatabaseManagerStruct and move all the information contained in it into the Database
* Let database objects keep track of modifications and dirty/clean state instead of handing this to external widgets
* Move GUI interactions for loading and saving from the DatabaseTabWidget into the DatabaseWidget (resolves #2494 as a side-effect)
* Heavily clean up DatabaseTabWidget and degrade it to a slightly glorified QTabWidget
* Use QSharedPointers for all Database objects
* Remove the modifiedImmediate signal and replace it with a markAsModified() method
* Implement proper tabName() method instead of reading back titles from GUI widgets (resolves #1389 and its duplicates #2146 #855)
* Fix unwanted AES-KDF downgrade if database uses Argon2 and has CustomData
* Improve code

This patch is also the first major step towards solving issues #476 and #2322.
2018-11-22 11:47:31 +01:00
Jonathan White
880c3aeb34
Add search help pop-up
* Support ! modifier (same as '-')
* Create reusable PopupHelpWidget as self-contained popup that can
be positioned around a parent widget and will follow the movement
and sizing of the window
* Eliminated KEEPASSXC_MAIN_WINDOW macro and replaced with
getMainWindow() function
* Add tests to cover search help show/hide
2018-11-17 09:04:15 -05:00
Gianluca Recchia
896a66e6d8
Improve readability and type-safety
Use nullptr instead of 0 or NULL to initialize a null pointer. In some
cases, readability was enhanced by replacing 0 with more meaningful
values according to the type of the pointer being initialized.
2018-10-31 15:16:04 +01:00
Gianluca Recchia
da9afd3f6f
Reduce number of unneeded copies
This patch aims at reducing the number of copies for obejcts that could
be referenced rather than copied, because they're not modified during
the computation.
2018-10-31 15:16:04 +01:00
Gianluca Recchia
1d9f46ebc5 Fix the position of the Q_REQUIRED_RESULT macro (#2411)
The Q_REQUIRED_RESULT macro was appended to a few method declarations.
It should've been prepended instead.
2018-10-24 08:09:12 -04:00
Janek Bevendorff
e443cde452 Add a new database settings wizard
This patch implements a new database wizard to guide users through the process
of setting up a new database and choosing sane encryption settings.

It also reimplements the master key settings to be more
user-friendly. Users can now add, change, or remove individual composite
key components instead of having to set all components at once. This
avoids confusion about a password being reset if the user only wants to
add a key file.

With these changes comes a major refactor of how database composite keys and key
components are handled. Copying of keys is prohibited and each key
exists only once in memory and is referenced via shared pointers. GUI
components for changing individual keys are encapsulated into separate
classes to be more reusable. The password edit and generator widgets
have also been refactored to be more reusable.
2018-09-25 21:12:47 +02:00
Max Kolhagen
d9fcdd2920 Add TouchID support on macOS 2018-09-18 22:42:05 -04:00
Louis-Bertrand Varin
8324d03f0a Formatting the code. 2018-03-31 16:01:30 -04:00
Janek Bevendorff
2f821af0a0 Raise error if challenge-response failed during KDBX4 key transformation, resolves #1656 2018-03-06 22:08:09 +01:00
Janek Bevendorff
e6c19fdcb1 Add MockChallengeResponseKey and additional composite key component test 2018-03-01 19:26:18 -05:00
Janek Bevendorff
871332ecf0 Add warning when using legacy key file formats. 2018-01-14 18:26:28 -05:00
Janek Bevendorff
b04c8c2b6e
Explicitly support AES-KDF in KDBX4 and don't convert KDBX4 files with AES-KDF back to KDBX3 when saving 2018-01-13 14:25:00 -05:00
Janek Bevendorff
df728083cc
Add challenge response to key before transformation, resolves #1060
* Re-implement KDBX4 challenge-response key assembly with transform
seed instead of master seed
2018-01-13 14:24:59 -05:00
Janek Bevendorff
15648991fc
Refactor Kdf class, remove fields concept 2018-01-13 14:23:28 -05:00
angelsl
2e19af5032
Pull out KDFs into their own class hierarchy
In preparation for multiple KDFs in KDBX 4
2018-01-13 14:23:20 -05:00
Janek Bevendorff
901bf62213 Generate random 128-byte stream instead of legacy XML format when creating key files
Add API documentation for FileKey class
Resolves #1325
2017-12-26 22:37:45 +01:00
Janek Bevendorff
ab21f718ba Merge branch 'release/2.2.2' into develop 2017-10-12 14:10:20 +02:00
Jonathan White
3bc8a79b9b Both slots on Yubikey are now polled for challenge/response 2017-10-09 09:39:47 -04:00
Jonathan White
14e3d9d576
Merge remote-tracking branch 'origin/master' into develop
# Conflicts:
#	src/core/Group.cpp
2017-10-01 11:10:10 -04:00
Jonathan White
8e7fa3d3d6 Corrected multiple Yubikey bugs (#880)
* Fixed database not showing modified after failed save
* Fixed Yubikey not being redetected after replug
* Fixed single shot challenge resulting in failed saves
2017-09-23 11:45:20 -04:00
louib
1d30283514 Feature : --key-file option for CLI (#816)
* removing readFromLine

* Removing gui-prompt

* execute uses an arg list.

* Testing with key-file

* Fixing the -a option in EntropyMeter.
2017-07-25 13:41:52 -04:00
thez3ro
a53b111182
Update and fix copyright headers 2017-06-14 15:54:43 +02:00
seatedscribe
06bbd6e066
Get rid of Q_{EMIT,SLOTS,SIGNALS} 2017-03-16 21:46:53 +01:00
Janek Bevendorff
429bef6830
Remove unused debug function 2017-03-10 18:06:22 +01:00
Janek Bevendorff
44206cf088
Fix stub compilation 2017-02-25 17:04:00 +01:00
Janek Bevendorff
9a94c6d85e
Remove debug output to reduce console spam when running in debug mode 2017-02-24 20:50:06 +01:00
Janek Bevendorff
46942413db
Fix unit test crash 2017-02-24 19:47:03 +01:00
Janek Bevendorff
18844d096a
Make other YubiKey driver methods thread-safe 2017-02-24 17:50:19 +01:00
Janek Bevendorff
b10cb1c83c
Show YubiKey message from MainWindow to ensure it's always shown when a challenge is generated 2017-02-24 17:27:27 +01:00
Janek Bevendorff
d6c48a5cf1
Show message when user needs to touch their YubiKey (still buggy when using multiple databases) 2017-02-24 03:25:08 +01:00
Janek Bevendorff
44ac7d152b
Use better variable names 2017-02-24 01:09:24 +01:00
Janek Bevendorff
70816f90b2
Make challenge() member thread-safe 2017-02-24 01:05:31 +01:00
Janek Bevendorff
093fe5c7ef
Use QSharedPointer instead of cloning YkChallengeResponseKey and make it a QObject to allow emitting signals 2017-02-23 23:52:36 +01:00
Janek Bevendorff
b2650c5a96
Hide UI elements when KeePassXC was compiled without -DWITH_XC_YUBIKEY 2017-02-21 01:06:32 +01:00
Janek Bevendorff
8d3e0687a0
Restructure doc comments and make hard-coded strings translatable 2017-02-21 00:28:01 +01:00
Janek Bevendorff
eb23dda99b
Remember if challenge-response was used for each database and allow to re-detect Yubikeys without closing the database first 2017-02-20 22:07:01 +01:00
Janek Bevendorff
e17576a6f7 Merge branch 'develop' into feature/yubikey 2017-01-15 03:20:21 +02:00
Janek Bevendorff
6fd7427cae Merge branch 'develop' into feature/updateKdbxExtract 2017-01-14 22:21:41 +02:00
Louis-Bertrand Varin
798041fe11 Extract readKeyFromLine. 2017-01-14 13:25:30 -05:00
Josh Soref
53e0893b51 spelling: correct 2017-01-14 17:31:38 +01:00
Kyle Manna
ef06165ea2 keys: CompositeKey: Change Q_FOREACH to C++11 for()
* Use the C++11 range based loop as recommended from
  https://github.com/keepassxreboot/keepassxc/pull/119

Signed-off-by: Kyle Manna <kyle@kylemanna.com>
2017-01-08 18:47:54 -08:00
Pedro Alves
d398d367c1 Allow a previously yubikey protected database to be saved without the yubikey challenge-response code. 2017-01-08 16:48:12 -08:00
Kyle Manna
62190d79be YubiKey: Whitespace clean-up
* This was bugging me.  Oops.
* No functional changes.

Signed-off-by: Kyle Manna <kyle@kylemanna.com>
2017-01-08 16:43:30 -08:00
Kyle Manna
f7ee528d41 YubiKey: Retry to recover hotplugging
* Attempt one retry in the event the event the device was removed and
  re-inserted.

Signed-off-by: Kyle Manna <kyle@kylemanna.com>
2017-01-08 16:43:23 -08:00
Kyle Manna
faa055010f challenge: Propagate failed challenge to caller
* If a removed Yubikey is to blame, re-inserting the Yubikey won't
  resolve the issue.  Hot plug isn't supported at this point.
* The caller should detect the error and cancel the database write.

Signed-off-by: Kyle Manna <kyle@kylemanna.com>
2017-01-08 16:40:25 -08:00