kdbxtool.parsing.header

KDBX header parsing and structures.

This module provides typed structures for KDBX file headers: - Magic bytes and version detection - Outer header fields (cipher, compression, KDF parameters, etc.) - Inner header fields (binary attachments, protected stream cipher)

KDBX format reference: https://keepass.info/help/kb/kdbx_4.html

Classes

CompressionType(*values)

Compression algorithms for KDBX payload.

HeaderFieldType(*values)

Outer header field types for KDBX format.

InnerHeaderFieldType(*values)

Inner header field types for KDBX4 format.

KdbxHeader(version, cipher, compression, ...)

Parsed KDBX header data.

KdbxVersion(*values)

KDBX file format versions.

class kdbxtool.parsing.header.KdbxVersion(*values)[source]

Bases: IntEnum

KDBX file format versions.

KDBX3 = 3
KDBX4 = 4
class kdbxtool.parsing.header.HeaderFieldType(*values)[source]

Bases: IntEnum

Outer header field types for KDBX format.

These are the TLV (Type-Length-Value) field identifiers in the outer (unencrypted) header.

END = 0
COMMENT = 1
CIPHER_ID = 2
COMPRESSION_FLAGS = 3
MASTER_SEED = 4
TRANSFORM_SEED = 5
TRANSFORM_ROUNDS = 6
ENCRYPTION_IV = 7
PROTECTED_STREAM_KEY = 8
STREAM_START_BYTES = 9
INNER_RANDOM_STREAM_ID = 10
KDF_PARAMETERS = 11
PUBLIC_CUSTOM_DATA = 12
class kdbxtool.parsing.header.InnerHeaderFieldType(*values)[source]

Bases: IntEnum

Inner header field types for KDBX4 format.

These appear after decryption, before the XML payload.

END = 0
INNER_RANDOM_STREAM_ID = 1
INNER_RANDOM_STREAM_KEY = 2
BINARY = 3
class kdbxtool.parsing.header.CompressionType(*values)[source]

Bases: IntEnum

Compression algorithms for KDBX payload.

NONE = 0
GZIP = 1
class kdbxtool.parsing.header.KdbxHeader(version, cipher, compression, master_seed, encryption_iv, kdf_type, kdf_salt, argon2_memory_kib=None, argon2_iterations=None, argon2_parallelism=None, aes_kdf_rounds=None, inner_random_stream_id=None, inner_random_stream_key=None, stream_start_bytes=None, protected_stream_key=None, raw_header=b'')[source]

Bases: object

Parsed KDBX header data.

This class holds all fields from the outer header in a typed format. It supports both KDBX3 and KDBX4, with version-specific fields optional.

Parameters:
version: KdbxVersion
cipher: Cipher
compression: CompressionType
master_seed: bytes
encryption_iv: bytes
kdf_type: KdfType
kdf_salt: bytes
argon2_memory_kib: int | None
argon2_iterations: int | None
argon2_parallelism: int | None
aes_kdf_rounds: int | None
inner_random_stream_id: int | None
inner_random_stream_key: bytes | None
stream_start_bytes: bytes | None
protected_stream_key: bytes | None
raw_header: bytes
classmethod parse(data)[source]

Parse KDBX header from raw bytes.

Parameters:

data (bytes) – Raw file data starting from beginning

Returns:

Tuple of (parsed header, number of bytes consumed)

Raises:
Return type:

tuple[Self, int]

to_bytes()[source]

Serialize header to KDBX4 binary format.

Returns:

Binary header data ready to be written to file

Raises:
Return type:

bytes

__init__(version, cipher, compression, master_seed, encryption_iv, kdf_type, kdf_salt, argon2_memory_kib=None, argon2_iterations=None, argon2_parallelism=None, aes_kdf_rounds=None, inner_random_stream_id=None, inner_random_stream_key=None, stream_start_bytes=None, protected_stream_key=None, raw_header=b'')
Parameters:
Return type:

None