"""ads_foundation -- Generic authenticated data structure library for Python."""

from .core import (
    Auth,
    Mode,
    ProofStream,
    auth,
    prover_context,
    run_prover,
    run_verifier,
    unauth,
    verifier_context,
)
from .errors import ADSError, ProofError, VerificationError
from .hash import EMPTY_HASH, combine_hashes, sha256, shallow_hash
from .prooftrail import ProofTrailMonitor, Receipt, Session
from .merkle import (
    EMPTY_TREE_HASH,
    MerkleNode,
    MerkleProof,
    Side,
    build_merkle,
    generate_proof,
    height as merkle_height,
    leaves as merkle_leaves,
    root_hash,
    size as merkle_size,
    verify_proof as merkle_verify_proof,
)

__all__ = [
    # core
    "Auth",
    "Mode",
    "ProofStream",
    "auth",
    "unauth",
    "prover_context",
    "verifier_context",
    "run_prover",
    "run_verifier",
    # hash
    "shallow_hash",
    "sha256",
    "combine_hashes",
    "EMPTY_HASH",
    # errors
    "ADSError",
    "ProofError",
    "VerificationError",
    # prooftrail
    "ProofTrailMonitor",
    "Receipt",
    "Session",
    # merkle
    "MerkleNode",
    "MerkleProof",
    "Side",
    "EMPTY_TREE_HASH",
    "build_merkle",
    "root_hash",
    "generate_proof",
    "merkle_verify_proof",
    "merkle_size",
    "merkle_height",
    "merkle_leaves",
]
