A modern, secure Python library for reading and writing KeePass KDBX databases
Project description
kdbxtool
A modern, secure Python library for reading and writing KeePass KDBX databases.
Features
- Secure by default: Memory zeroization, constant-time comparisons, hardened XML parsing
- Type-safe: Full type hints, Python 3.12+ features, mypy strict compatible
- Modern API: Clean, Pythonic interface with context manager support
- KDBX4 focused: First-class support for modern KeePass format with Argon2
- Multiple ciphers: AES-256-CBC, ChaCha20, and Twofish-256-CBC (optional)
Installation
pip install kdbxtool
Optional: Twofish Support
For legacy databases encrypted with Twofish-256-CBC:
pip install kdbxtool[twofish]
This installs oxifish, a Rust-based Twofish implementation.
Optional: YubiKey Support
For hardware-backed authentication with YubiKey HMAC-SHA1 challenge-response:
pip install kdbxtool[yubikey]
This installs yubikey-manager for YubiKey communication.
Quick Start
from kdbxtool import Database
# Open a database with context manager
with Database.open("vault.kdbx", password="my-password") as db:
# Find entries
entries = db.find_entries(title="Gmail")
if entries:
print(f"Username: {entries[0].username}")
# Create new entries
db.root_group.create_entry(
title="New Account",
username="user@example.com",
password="secure-password",
)
db.save()
# Create a new database
db = Database.create(password="my-password", database_name="My Vault")
db.root_group.create_entry(title="First Entry", username="me", password="secret")
db.save("my-vault.kdbx")
Keyfile Support
kdbxtool supports all KeePass keyfile formats for two-factor authentication:
from kdbxtool import Database, create_keyfile, KeyFileVersion
# Create a new keyfile (XML v2.0 recommended)
create_keyfile("vault.keyx") # Default: XML v2.0 with hash verification
# Other formats available
create_keyfile("vault.key", version=KeyFileVersion.XML_V1) # Legacy XML
create_keyfile("vault.key", version=KeyFileVersion.RAW_32) # Raw 32 bytes
create_keyfile("vault.key", version=KeyFileVersion.HEX_64) # Hex-encoded
# Open a database with password + keyfile
with Database.open("vault.kdbx", password="my-password", keyfile="vault.keyx") as db:
print(f"Entries: {len(db.find_entries())}")
# Create a new database with keyfile protection
db = Database.create(password="my-password", keyfile="vault.keyx")
db.save("protected.kdbx")
# Keyfile-only authentication (no password)
db = Database.create(keyfile="vault.keyx")
db.save("keyfile-only.kdbx")
YubiKey Support
kdbxtool supports YubiKey HMAC-SHA1 challenge-response authentication, compatible with KeePassXC:
from kdbxtool import Database
from kdbxtool.security import list_yubikeys
# List connected YubiKeys (raises YubiKeyNotAvailableError if yubikey-manager not installed)
for device in list_yubikeys():
print(f"Found: {device['name']} (serial: {device.get('serial', 'N/A')})")
# Open a YubiKey-protected database
with Database.open("vault.kdbx", password="my-password", yubikey_slot=2) as db:
print(f"Entries: {len(db.find_entries())}")
db.save()
# Create a new database with YubiKey protection
db = Database.create(
password="my-password",
yubikey_slot=2, # Use slot 2 (recommended)
yubikey_serial=12345678, # Optional: specific YubiKey serial
)
db.save("protected.kdbx")
# Open with specific YubiKey when multiple are connected
with Database.open(
"vault.kdbx",
password="my-password",
yubikey_slot=2,
yubikey_serial=12345678,
) as db:
pass
Requirements:
- YubiKey with HMAC-SHA1 configured in slot 1 or 2
- Configure with:
ykman otp chalresp -g 2(generates random secret for slot 2)
Security
kdbxtool prioritizes security:
- SecureBytes: Sensitive data is stored in zeroizable buffers
- Constant-time comparisons: All authentication uses
hmac.compare_digest - Hardened XML: Uses defusedxml to prevent XXE attacks
- Modern KDF: Enforces minimum Argon2 parameters
License
Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file kdbxtool-0.1.7.tar.gz.
File metadata
- Download URL: kdbxtool-0.1.7.tar.gz
- Upload date:
- Size: 219.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c0751e308bf779147ace821e67a710df3cb8aa7a4b8de12b60adec5b3e97f3f
|
|
| MD5 |
a483f277e95bcd2301a15d76b66b486c
|
|
| BLAKE2b-256 |
02c1360d648ac8f9fa30d1c7d2f155cf73a7c3706e105223ae0d9e657eb2966a
|
Provenance
The following attestation bundles were made for kdbxtool-0.1.7.tar.gz:
Publisher:
release.yml on coreyleavitt/kdbxtool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kdbxtool-0.1.7.tar.gz -
Subject digest:
2c0751e308bf779147ace821e67a710df3cb8aa7a4b8de12b60adec5b3e97f3f - Sigstore transparency entry: 836102648
- Sigstore integration time:
-
Permalink:
coreyleavitt/kdbxtool@fa5c6bfc1522474e44e764bb82e1711abf012d3a -
Branch / Tag:
refs/heads/master - Owner: https://github.com/coreyleavitt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@fa5c6bfc1522474e44e764bb82e1711abf012d3a -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file kdbxtool-0.1.7-py3-none-any.whl.
File metadata
- Download URL: kdbxtool-0.1.7-py3-none-any.whl
- Upload date:
- Size: 85.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
48c8d5c6499514ff59bd75e29c8714cacfb32bbf178bac10394ce571b29df645
|
|
| MD5 |
d4fb5f11cd0f26f5151bad084d36dca9
|
|
| BLAKE2b-256 |
5b64906be3abdac361e5ee2e8a49bbbc0b778a35c64c7d2ee21c1db7a67b08f2
|
Provenance
The following attestation bundles were made for kdbxtool-0.1.7-py3-none-any.whl:
Publisher:
release.yml on coreyleavitt/kdbxtool
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
kdbxtool-0.1.7-py3-none-any.whl -
Subject digest:
48c8d5c6499514ff59bd75e29c8714cacfb32bbf178bac10394ce571b29df645 - Sigstore transparency entry: 836102649
- Sigstore integration time:
-
Permalink:
coreyleavitt/kdbxtool@fa5c6bfc1522474e44e764bb82e1711abf012d3a -
Branch / Tag:
refs/heads/master - Owner: https://github.com/coreyleavitt
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@fa5c6bfc1522474e44e764bb82e1711abf012d3a -
Trigger Event:
workflow_dispatch
-
Statement type: