ZK image authenticity proofs on the Boundless decentralized proof market.
Proves that an edited image originated from a real C2PA-signed capture (e.g., Sony camera) and was transformed only through legitimate edits -- all while keeping the original image private.
- Host reads a C2PA-signed JPEG, extracts COSE/ECDSA signature components, splits the JPEG at the JUMBF manifest boundary, and constructs the guest input
- Guest (inside risc0 zkVM) verifies the ECDSA P-256 signature, validates the C2PA asset binding hash chain, decodes the JPEG, replays transforms, and commits hashes of the original and edited images
- Boundless market matches the proof request with a prover, generates the ZK proof, and fulfills the request on-chain
The proof attests that:
- The original image has a valid C2PA signature from a trusted device
- The JPEG content matches the signed manifest (asset binding)
- The declared transforms (crop, brighten, grayscale) were faithfully applied
- Only the transform kinds are public -- parameters (crop coordinates, brightness values) remain private
- Rust (stable)
- risc0 toolchain:
curl -L https://risczero.com/install | bash && rzup install - A funded wallet on Base mainnet (for proof request fees)
- Pinata account (for IPFS storage of the guest ELF)
cp .env.example .env
# Edit .env with your PRIVATE_KEY and PINATA_JWT# Default transforms (top-left quarter crop + brighten)
cargo run --release -- assets/demo_mini.jpg
# Custom transforms
cargo run --release -- assets/demo_mini.jpg \
--transforms '[{"Crop":{"x":0,"y":0,"width":32,"height":21}},{"Brighten":{"value":10}}]'Output:
Brevis Vera on Boundless
Image: assets/demo_mini.jpg
Submitting proof request to Boundless Market...
Request ID: 0x...
Waiting for proof fulfillment...
Proof fulfilled!
Original hash: abcd1234...
Output hash: ef567890...
Transforms: [Crop, Brighten]
Explorer: https://explorer.boundless.network/orders/0x...
| Crate | Description |
|---|---|
bv-core |
Framework-agnostic types and transform functions (from brevis-vera) |
bv-capture |
Host-side C2PA extraction, JUMBF parsing, JPEG splitting (from brevis-vera) |
methods/guest |
risc0 zkVM guest -- verifies C2PA signature, asset binding, decodes JPEG, replays transforms |
host |
CLI that loads an image, constructs guest input, submits to Boundless, waits for proof |
- Boundless Explorer
- Boundless Docs
- Brevis Vera (original project)