import type { AttributionAxes, AttributionAxisTag } from './types.js';
export interface MerkleFrame {
    /** Canonically-ordered axes used to derive the leaves. */
    axes: AttributionAxes;
    leaves: {
        D: Buffer;
        P: Buffer;
        G: Buffer;
        C: Buffer;
    };
    nodes: {
        N_content: Buffer;
        N_auth_infra: Buffer;
    };
    root: Buffer;
}
/** Build the full tree for a set of axes. Callers pass the raw (possibly
 *  unsorted) axes; we normalize before hashing so the caller can't produce
 *  two different canonical representations of the same logical content. */
export declare function buildMerkleFrame(rawAxes: AttributionAxes): MerkleFrame;
/** The sibling path for a projection, in the order §2.2 specifies:
 *  [sibling_leaf_within_pair_hex, sibling_internal_node_hex]. */
export declare function projectionPath(frame: MerkleFrame, axis: AttributionAxisTag): [string, string];
/** Reconstruct the root from an axis's canonical leaf hash and the two-hop
 *  sibling path. §2.3 algorithm. Returns raw bytes so callers can diff the
 *  buffers; hex comparison is lossy under case normalization. */
export declare function reconstructRoot(axisLeaf: Buffer, path: [string, string], axis: AttributionAxisTag): Buffer;
//# sourceMappingURL=merkle.d.ts.map