@apertrue/trust-list
v0.1.0
Published
Trust list management for C2PA signer verification with Merkle proofs
Maintainers
Readme
@apertrue/trust-list
Merkle tree operations for C2PA signer verification. Manages a trust list of intermediate CA certificates and generates inclusion proofs for ZK circuits.
Installation
npm install @apertrue/trust-listHow It Works
The trust list is a Merkle tree of intermediate CA certificate public keys. When a user uploads a C2PA-signed image, the ZK circuit proves that the signing certificate's issuer is in this tree — without revealing which specific certificate was used.
Hash Schemes
Different certificate algorithm families use different hash schemes to fit within the BN254 scalar field:
| Algorithm | Key Representation | Hash Scheme |
|-----------|-------------------|-------------|
| RSA-2048 | 18 BN254-field limbs | Two-level tree: pedersen([hash_lo, hash_hi]) |
| RSA-4096 | 8 BN254-field limbs | Flat: pedersen(limbs[0..8]) |
| ECDSA P-256 | (x, y) coordinates | pedersen([x, y]) |
| ECDSA P-384 | (x, y) mod BN254 | pedersen([x % BN254, y % BN254]) |
| ProofMode (2-cert) | DN bytes | hashIssuerDN() — packs DN into 31-byte field chunks |
Oracle Bundle
The trust list is distributed as a signed oracle bundle (bundle.json) with multi-signature governance. New intermediate CAs are added through an append-only promotion process.
Usage
import { TrustList } from '@apertrue/trust-list';
const trustList = await TrustList.fromBundle(bundleJson);
// Generate Merkle inclusion proof for a certificate
const proof = trustList.generateProof(certificateLeafHash);
// Returns: { root, pathElements, pathIndices }Building
npm run build # Compile TypeScriptLicense
Apache 2.0 — see LICENSE.
