import { HashStrategy } from '../hash/HashStrategy';
import { MerkleProof, ProofDirection } from './MerkleProof';
/**
 * MerkleProofVerifier - Class responsible for verifying Merkle proofs
 */
export declare class MerkleProofVerifier {
    private leafHashStrategy;
    private branchHashStrategy;
    /**
     * Initialize a verifier with the hash strategies
     *
     * @param leafHashStrategy - Strategy for hashing leaves (default: TaggedSha256 with 'MERKLE_LEAF' tag)
     * @param branchHashStrategy - Strategy for hashing branches (default: TaggedSha256 with 'MERKLE_BRANCH' tag)
     */
    constructor(leafHashStrategy?: HashStrategy, branchHashStrategy?: HashStrategy);
    /**
     * Verify a Merkle proof
     *
     * @param proof - The proof to verify
     * @returns True if the proof is valid, false otherwise
     */
    verify(proof: MerkleProof): boolean;
    /**
     * @deprecated Use verify() with MerkleProof objects instead
     * Legacy verification method for backward compatibility
     *
     * @param leafData - The original leaf data
     * @param proofPath - Array of {sibling, position} objects
     * @param expectedRoot - The expected Merkle root as hex string
     * @returns True if the proof is valid, false otherwise
     */
    legacyVerify(leafData: string, proofPath: Array<{
        sibling: string;
        position: 'left' | 'right';
    }>, expectedRoot: string): boolean;
    /**
     * Apply a single proof element to calculate the next hash
     *
     * @param currentHash - The current hash
     * @param element - The proof element to apply
     * @returns The next hash in the path
     */
    private applyProofElement;
    /**
     * Verify a proof with simplified inputs
     *
     * @param leafData - The original leaf data
     * @param proof - Array of proof elements
     * @param merkleRoot - The expected Merkle root
     * @returns True if valid, false otherwise
     */
    verifySimple(leafData: string, proof: Array<[string, ProofDirection]>, merkleRoot: string): boolean;
    /**
     * Set the leaf hash strategy
     *
     * @param strategy - The hash strategy to use for leaf nodes
     */
    setLeafHashStrategy(strategy: HashStrategy): void;
    /**
     * Set the branch hash strategy
     *
     * @param strategy - The hash strategy to use for branch nodes
     */
    setBranchHashStrategy(strategy: HashStrategy): void;
}
