Skip to main content

kdbx 2.6.0 copy "kdbx: ^2.6.0" to clipboard
kdbx: ^2.6.0 copied to clipboard

KeepassX format implementation in pure dart. (kdbx 3.x and 4.x support).

2.6.0 #

  • Entry history is now bounded by the HistoryMaxItems and HistoryMaxSize the database itself declares, which nothing had ever read. Oldest-first by modification time, when a revision is taken and once at the end of a merge, never on save — so a database already over its limits keeps the history of every entry nobody touches. A negative limit means unlimited, zero keeps nothing, and a limit the file does not declare at all is treated as unlimited rather than defaulted.
  • The revisions a duplicate-uuid repair folds into the survivor are held back from those limits until the file has been saved and read again. They are stamped older than the survivor's own revisions, so the limits would reach for them first and delete the last copy of that content on the user's next unrelated edit.
  • Fix: merging a copy which was older than the local one appended a revision of that copy's state on every merge, because the check for whether we already had that state compared against our own modification time, which can never appear in our own history. Repeated syncs against a replica that was never written to again piled up identical revisions.
  • Unreferenced attachments are now dropped from the binary pool when a file is saved, instead of staying in it for good. Nothing used to shrink the pool: detaching an attachment deliberately left the bytes for the revisions which still held it, and when those revisions went there was no second pass. With the history limits above, a revision can now disappear without the user deleting anything, which makes those limits the one thing that can orphan an attachment by itself - so the two belong together. The pool is rebuilt from what the entries and their revisions still point at, which is also what renumbers it.
  • Fix: a merge discarded the changes to an object which the incoming copy had both edited and moved. The move was applied first and bumped the object's own modification time, so the comparison which decides whose data is newer then found the local copy newer and kept it - the incoming edit was lost with no record of it anywhere.
  • A move is no longer treated as a modification of the object. Moving an entry between groups, which includes sending it to the recycle bin, updates LocationChanged and leaves LastModificationTime alone, and no longer records a history revision - so a trashed entry keeps the history someone restoring it would want. The revision belonging to the next real change is still recorded.
  • Fix: a merge copied the incoming copy's LocationChanged along with its data, so an object that had been moved locally kept its new group but recorded the location time of the group it came from. The two copies then never agreed on where it belongs, and a third copy with an older move could move it back out again.
  • Fix: merging a file which contained an entry the local copy did not have yet added every one of that entry's history revisions to the group as a live entry, sharing the new entry's uuid, so the database gained duplicate entries which look identical in the entry list. The entry's own history was unaffected. With assertions enabled the first revision instead tripped an assertion in KdbxGroup.addEntry, leaving the file partially merged.
  • Databases which were already merged by an affected release build still carry those duplicates, and nothing noticed them. Reading one now logs it and records the uuids in KdbxFile.duplicateUuidsOnOpen; reading still succeeds. KdbxFile.findDuplicateUuidObjects() answers the same question about the current state.
  • Merging a file which carries duplicates reports them as merge warnings instead of failing with an unhelpful StateError part way through, and an incoming deleted object now removes every copy of that uuid instead of leaving the rest behind forever.
  • Fix: an object removed by an incoming deletion during a merge kept pointing at the group it was removed from, so code still holding it saw a parent that no longer listed it - and deletePermanently on such an object recorded a second deleted object for that uuid before failing. It is now detached, the way KdbxDao.deletePermanently detaches, and KdbxDao.move says so instead of failing on a null parent.
  • New KdbxDao.mergeDuplicateUuidEntries() repairs such a file: for each affected uuid the newest entry which is not in the recycle bin survives, and the other copies are folded into its history. It records no deleted object, since the uuid lives on, and it has to be run on every replica.
  • Breaking: KdbxGroup.addEntry now throws a KdbxDuplicateUuidException where it previously only asserted that the uuid is not already in the group, so it no longer passes unnoticed in a release build. KdbxDao.move checks the same condition up front and throws the same exception, which means move, deleteEntry and deleteGroup can now throw where they used to return - on a file that carries duplicates, they have to, because completing the move would drop an entry. Callers moving entries around in a file that may carry duplicates need to catch it.
  • Fix: a TransformedKeyCredentials of the wrong length is rejected instead of deriving the wrong cipher key and reporting itself as a wrong password - the length assertion only fired in debug builds. Refusing to save now says 'original credentials' rather than 'master password', and getHash is documented as able to throw.

2.5.0 #

  • TransformedKeyCredentials: open a file from the post-KDF key, skipping argon2 entirely. Intended for memory constrained callers such as an iOS autofill extension. Export one from KdbxFile.transformedKeyCredentials after a read or save.
  • KdbxFile.kdfFingerprint to tell whether a stored transformed key still matches a file; a mismatch throws KdbxTransformedKeyStaleException.
  • Fix: generateSalts() did not actually rotate the kdbx4 kdf salt, so every save reused the salt the file was created with.

2.4.2 #

  • Update dependencies. (archive, pointycastle)

2.4.1 #

  • Update dependencies.

2.4.0 #

  • Migrate to latest dart version.

2.3.0 #

  • Mark objects only as clean when saving was successful.
  • Only mark objects as clean if they have not been modified since we started saving.
  • Make credentials changeable.
  • Add support for CustomData in entries.
  • Upgrade dependencies.

2.2.0 #

  • If argon2 ffi implementation is not available, fallback to pointycastle (dart-only) implementation.

2.1.1 #

  • Throw KdbxInvalidFileStructure for invalid files.

2.1.0 #

  • Implement permanently removing entries and groups.
  • Fix merging of files with incoming deleted objects.

2.0.0+1 #

  • Small Null-safety improvement.
  • add debugging to AES decryption.

2.0.0 #

  • Null-safety migration

1.0.0 #

  • Use kdbx 4.x by default when creating new files.
  • Implemented support for custom icons.
  • Implemented file merging/synchronization.
  • Fixed threading problem on save: only allow one save at a time for each file.
  • Support for V2 keyfile https://forum.authpass.app/t/issuues-with-keyfile/84/3

0.4.1 #

  • fix bug saving files with history entries which contain attachments.
  • fix bug which would create wrong history entries.

0.4.0+1 #

  • Fix UsageCount typo (vs. Usagecount) #1

0.4.0 #

  • Upgraded xml package dependency to 4.x

0.3.1 #

  • Fixed error handling nil UUIDs in recycle bin. Also, only create recycle bin on demand (when deleting items).

0.3.0+1 #

  • Minor fixes for kdbx 4.x

0.3.0 #

  • Initial support for kdbx 4.x

0.2.1 #

  • Throw unsupported exception when trying to read kdbx 4.x files.

0.2.0 #

  • Fixed writing of packet index for payload.
  • Fixed big endian vs. little endian encoding.
  • Compatibility fixes with other kdbx apps.

0.1.0 #

  • Support for reading and writing kdbx 2.x files (with a master password)

0.0.1 #

  • Initial version, created by Stagehand
12
likes
120
points
908
downloads

Documentation

API reference

Publisher

verified publishercodeux.design

Weekly Downloads

KeepassX format implementation in pure dart. (kdbx 3.x and 4.x support).

Repository (GitHub)
View/report issues

License

GPL-3.0 (license)

Dependencies

archive, argon2_ffi_base, args, clock, collection, convert, crypto, isolates, logging, logging_appenders, meta, path, pointycastle, quiver, supercharged_dart, synchronized, uuid, xml

More

Packages that depend on kdbx