# Generated by cstruct-stubgen
from typing import BinaryIO, Literal, TypeAlias, overload

import dissect.cstruct as __cs__

class _c_veracrypt(__cs__.cstruct):
    class VolumeHeader(__cs__.Structure):
        magic: __cs__.CharArray
        version: _c_veracrypt.uint16
        client_version: _c_veracrypt.uint16
        crc32: __cs__.CharArray
        reserved_1: __cs__.CharArray
        hidden_volume_size: _c_veracrypt.uint64
        volume_size: _c_veracrypt.uint64
        mk_scope_offset: _c_veracrypt.uint64
        mk_scope_size: _c_veracrypt.uint64
        flags: _c_veracrypt.uint32
        sector_size: _c_veracrypt.uint32
        reserved_2: __cs__.CharArray
        crc32_decrypted: __cs__.CharArray
        master_keys: __cs__.CharArray
        @overload
        def __init__(
            self,
            magic: __cs__.CharArray | None = ...,
            version: _c_veracrypt.uint16 | None = ...,
            client_version: _c_veracrypt.uint16 | None = ...,
            crc32: __cs__.CharArray | None = ...,
            reserved_1: __cs__.CharArray | None = ...,
            hidden_volume_size: _c_veracrypt.uint64 | None = ...,
            volume_size: _c_veracrypt.uint64 | None = ...,
            mk_scope_offset: _c_veracrypt.uint64 | None = ...,
            mk_scope_size: _c_veracrypt.uint64 | None = ...,
            flags: _c_veracrypt.uint32 | None = ...,
            sector_size: _c_veracrypt.uint32 | None = ...,
            reserved_2: __cs__.CharArray | None = ...,
            crc32_decrypted: __cs__.CharArray | None = ...,
            master_keys: __cs__.CharArray | None = ...,
        ): ...
        @overload
        def __init__(self, fh: bytes | memoryview | bytearray | BinaryIO, /): ...

# Technically `c_veracrypt` is an instance of `_c_veracrypt`, but then we can't use it in type hints
c_veracrypt: TypeAlias = _c_veracrypt

TC_BOOT_VOLUME_HEADER_SECTOR_OFFSET: Literal[31744]
