用途:该库位于 src/main/lib/merkle.ts,用于为审计事件生成防篡改根和 O(log n) 证明,是 Latch Enclave 证明系统的一部分。它基于 Node.js crypto 的 SHA-256,无外部依赖。
主要能力:所有哈希采用域分隔前缀。叶哈希为 SHA-256("leaf:" + data),由 computeLeafHash() 计算;节点哈希为 SHA-256("node:" + leftHash + rightHash),由内部 nodeHash() 计算,从而避免内部节点与叶哈希混淆。当叶子数非 2 的幂时,使用空叶哈希 computeLeafHash('') 填充到下一个 2 的幂,保证每层为平衡二叉树,调用方无感知。
API:computeLeafHash(eventJson: string): string 返回 64 位小写十六进制字符串;buildMerkleRoot(leafHashes: string[]): string | null 对空输入返回 null,单元素返回该叶哈希,2 个及以上填充后计算完整树;buildInclusionProof(leafHashes: string[], index: number): MerkleProof | null 生成包含证明,越界返回 null;verifyInclusionProof(proof: MerkleProof): boolean 通过重算根验证;buildConsistencyProof(oldLeaves: string[], newLeaves: string[]): ConsistencyProof | null 生成新旧日志一致性证明,oldLeaves 为空或大于 newLeaves 时返回 null。
类型:MerkleProof 含 leafIndex、leafHash、siblings(自底向上)、root;ConsistencyProof 含 fromSize、toSize、fromRoot、toRoot、proof。
测试:使用 npx vitest run src/main/lib/merkle.test.ts 运行 13 个测试,覆盖叶哈希格式与域分隔、根计算(空、单、多、确定性、篡改检测)、包含证明生成验证与篡改检测、非 2 的幂处理、一致性证明、越界索引处理。