/** * Hash Function Interface * * Abstraction layer for ZK-friendly hash functions. * Allows plugging in different hash functions (Poseidon-BN254, Poseidon-BLS12-381, etc.) * depending on the required security level and target proof system. */ /** * Interface for ZK-friendly hash functions used in Merkle trees and identity commitments. */ interface IHashFunction { /** * Hash two field elements (for Merkle tree internal nodes). * This is the hot path — called once per tree level per proof. */ hash2(left: bigint, right: bigint): Promise; /** * Hash N field elements (for identity commitments, etc.). * Used for flexible-arity hashing outside of Merkle trees. */ hashN(inputs: bigint[]): Promise; /** * The prime of the underlying field. * All hash outputs are elements of F_p where p is this prime. */ readonly fieldPrime: bigint; /** * Human-readable name (e.g., "Poseidon-BN254", "Poseidon-BLS12-381"). */ readonly name: string; /** * Approximate security level in bits. */ readonly securityBits: number; } /** * Core types for Universal Private Compliance SDK */ /** * Merkle proof for a leaf in an ASP tree */ interface MerkleProof { /** Path elements (siblings) */ pathElements: bigint[]; /** Path indices (0 = left, 1 = right) */ pathIndices: number[]; /** Leaf index in the tree */ leafIndex: number; /** Tree root */ root: bigint; } /** * ASP membership proof — ready for circuit input */ interface MembershipProof { /** ASP's published Merkle root */ root: bigint; /** Path elements (siblings), padded to tree depth */ pathElements: bigint[]; /** Path indices, padded to tree depth */ pathIndices: number[]; } /** * On-chain ASP information */ interface ASPInfo { /** ASP identifier */ id: bigint; /** Operator address */ operator: `0x${string}`; /** Human-readable name */ name: string; /** Current Merkle root */ currentRoot: bigint; /** Last update timestamp */ lastUpdated: bigint; } /** * Configuration for creating an ASP client */ interface ASPClientConfig { /** Provider for off-chain member storage */ provider: IASPProvider; /** viem PublicClient for reading chain data */ publicClient: unknown; /** ASP Registry Hub contract address */ registryAddress: `0x${string}`; /** ASP ID (if already registered) */ aspId?: bigint; /** * Hash function for Merkle tree operations. * Default: Poseidon-BLS12-381 (128-bit security). * Use PoseidonBN254 for legacy/testing (100-bit security). */ hashFunction?: IHashFunction; } /** * Options for registering a new ASP */ interface RegisterASPOptions { /** Human-readable name for the ASP */ name: string; /** viem WalletClient for sending transactions */ walletClient: unknown; } /** * Options for publishing a root on-chain */ interface PublishRootOptions { /** viem WalletClient for sending transactions */ walletClient: unknown; } /** * Provider interface for ASP member storage * * Implementations handle where and how members are stored. * The SDK is agnostic to the storage backend. */ interface IASPProvider { /** Add a member identity to the tree */ addMember(identity: bigint): Promise; /** Remove a member identity from the tree */ removeMember(identity: bigint): Promise; /** Get all member identities */ getMembers(): Promise; /** Check if an identity is a member */ hasMember(identity: bigint): Promise; /** Get the current Merkle root */ getRoot(): Promise; /** Get a Merkle proof for a specific identity */ getMerkleProof(identity: bigint): Promise; /** Human-readable provider name */ readonly name: string; /** Merkle tree depth (determines max members: 2^depth) */ readonly treeDepth: number; } export type { ASPClientConfig as A, IASPProvider as I, MembershipProof as M, PublishRootOptions as P, RegisterASPOptions as R, ASPInfo as a, IHashFunction as b, MerkleProof as c };