Skip to main content

A modern, secure Python library for reading and writing KeePass KDBX databases

Project description

kdbxtool

CI Coverage mypy Docs Python 3.12+ License

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

kdbxtool-0.1.6.tar.gz (219.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kdbxtool-0.1.6-py3-none-any.whl (85.4 kB view details)

Uploaded Python 3

File details

Details for the file kdbxtool-0.1.6.tar.gz.

File metadata

  • Download URL: kdbxtool-0.1.6.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

Hashes for kdbxtool-0.1.6.tar.gz
Algorithm Hash digest
SHA256 7a15b732753f2b877cad17a51b8aa36e3be804cecab160a78055b9e0a7d0ae5e
MD5 e272a723ada8f74c44b63d236f6fbae9
BLAKE2b-256 55f905ef65a6e7ebe0464c62e35175e2789b1b4b0d43470ce6c8766d603c56df

See more details on using hashes here.

Provenance

The following attestation bundles were made for kdbxtool-0.1.6.tar.gz:

Publisher: release.yml on coreyleavitt/kdbxtool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file kdbxtool-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: kdbxtool-0.1.6-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

Hashes for kdbxtool-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 fb8bcc6dea3d5f8555034c03c759b10bf79f910664bedca92e8d98c52e9f5844
MD5 4d75edb21d4f6151354fc90f52e431d4
BLAKE2b-256 1aa3e2ddfde6d0b63532f80802af1d76a353a3d32bf985c92969aee2b04ab9f3

See more details on using hashes here.

Provenance

The following attestation bundles were made for kdbxtool-0.1.6-py3-none-any.whl:

Publisher: release.yml on coreyleavitt/kdbxtool

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page