Skip to content

v0.1.0 — initial release: pure-Go read-only C2PA reader

Choose a tag to compare

@richardwooding richardwooding released this 27 Aug 08:00
· 15 commits to main since this release

Backfilled release notes — the v0.1.0 tag was pushed 2026-06-11 without a GitHub release entry.

Initial release: a small, pure-Go, read-only reader for C2PA / Content Credentials provenance manifests embedded in JPEG and PNG files.

Extracted from file-search-on, where it powers the is_c2pa / c2pa_* search attributes.

What it does

Surfaces what a file claims about its provenance — creating tool, title, declared format, whether it declares AI-generated content, and the claimed signer identity + signing time — by parsing the embedded JUMBF manifest (ISO 19566-5), CBOR-decoding the active manifest's claim and c2pa.actions assertion, and decoding the COSE_Sign1 signature envelope.

info := c2pa.Read(context.Background(), c2pa.JPEG, f) // or c2pa.PNG
info.Present, info.ClaimGenerator, info.Title, info.Format,
info.AIGenerated, info.SignedBy, info.SignedAt

Read is best-effort and never returns an error: a missing or malformed manifest yields Info{Present: false}. It reads at most c2pa.MaxScan (16 MiB) and honours the context, surrendering promptly mid-scan on cancel.

⚠️ Unverified — read, not validate

At this version the library is the equivalent of reading EXIF, or an email From: header: it reports the file's claims and does not authenticate them. No COSE signature verification, no certificate-chain check against the C2PA trust list — SignedBy is who the file claims signed it. Useful for search, indexing, triage and inventory; not for trust decisions.

(Cryptographic validation arrived later, in v0.2.0's Validate.)

Public API

Read(ctx, container, r) Info; WalkBoxes(ctx, jumbf, fn) for assertions Read doesn't model (depth-capped against adversarial nesting); Info; MaxScan.

Requirements

Go 1.23+. Pure Go, no cgo — depends only on fxamacker/cbor and veraison/go-cose. Context-aware and fuzzed (FuzzRead, FuzzWalkBoxes).