Conformance corpus

C2PA test vectors, with the answer key.

One small signed (or unsigned) sample per verification state, each paired with the exact result a verifier should report. Download any file, drop it on verify.reconize.me, and confirm the verdict matches.

01

Download a sample

Each file below is a real signed asset (or a plain control), hosted for anyone to fetch.

02

Check it

Drop it on verify.reconize.me, or run it through any C2PA verifier you are testing.

03

Compare

Confirm the verifier reports the expected verdict listed here (and in the machine-readable manifest).

The vectors

Signed by Robert Angelo with Reconize 2.5 (build 39) on October 2, 2026. Name confirmed through four linked accounts in a CAWG identity credential (did:web:id.reconize.me). Each file also shows what two independent validators reported for this exact file.

trusted trusted-photo.jpg image/jpeg · 1.7 MB
Expected: Credentials valid

iPhone photo (Display P3, kept on signing). C2PA signature from a certificate on the C2PA trust list, trusted RFC 3161 timestamp, CAWG identity credential with 4 confirmed accounts, Do Not Train assertion, and the hidden mark with its registered soft binding (me.reconize.videoseal.1). Compare with none-photo.jpg (the unsigned original) to see the mark: PSNR 39.9 dB, visible only by switching back and forth.

c2patool 0.27.15: Trusted · assertion.dataHash.match · claimSignature.validated · signingCredential.trusted · timeStamp.trusted · cawg.ica.credential_valid · soft binding me.reconize.videoseal.1
Credentio: no failures   c2patool JSON Credentio output

sha256 773617c8894f0d2488dc61252c31af3e1888dd802aa5eb3f6cfd284381ac288c
trusted trusted-print.tiff image/tiff · 8.5 MB
Expected: Credentials valid

TIFF print master, C2PA only. No hidden mark on TIFF by design, so no soft binding. Identity credential and Do Not Train as above.

c2patool 0.27.15: Trusted · assertion.dataHash.match · claimSignature.validated · signingCredential.trusted · timeStamp.trusted · cawg.ica.credential_valid
Credentio: no failures   c2patool JSON Credentio output

sha256 1262ffd9afc9968a0f8af6283fadc09b5557a7c613c88c84440fb8547ee23687
trusted trusted-video.mov video/quicktime · 6.3 MB
Expected: Credentials valid

10-second H.264 clip. BMFF hash binding, hidden mark in the pixels with the registered soft binding, plus an audio mark.

c2patool 0.27.15: Trusted · assertion.bmffHash.match · claimSignature.validated · signingCredential.trusted · timeStamp.trusted · cawg.ica.credential_valid · soft binding me.reconize.videoseal.1
Credentio: no failures   c2patool JSON Credentio output

sha256 ec3b262ff6b1188338ce1b8b9e89156b3fa741ce1e386c0d16ab683ff3c8514f
trusted trusted-audio.m4a audio/mp4 · 360 KB
Expected: Credentials valid

AAC audio. BMFF hash binding and an audio mark. The audio mark algorithm is not in the C2PA soft-binding list, so the file carries no soft-binding assertion for it.

c2patool 0.27.15: Trusted · assertion.bmffHash.match · claimSignature.validated · signingCredential.trusted · timeStamp.trusted · cawg.ica.credential_valid
Credentio: no failures   c2patool JSON Credentio output

sha256 d3b5f3b1330c341be61749da48bb95099dfa8d8e726534f023d8951ef088523e
altered altered-photo.jpg image/jpeg · 1.7 MB
Expected: Changed after signing

trusted-photo.jpg with one byte of image data flipped. Signature, timestamp and identity still validate; the content hash does not, so the file must not verify.

c2patool 0.27.15: Invalid · assertion.dataHash.mismatch · claimSignature.validated · signingCredential.trusted · timeStamp.trusted · cawg.ica.credential_valid · soft binding me.reconize.videoseal.1
Credentio: assertion.dataHash.mismatch   c2patool JSON Credentio output

sha256 ad0debd6379cad26582d656cb3342502d9e6a8588e2bc43ebba2219b09161f7d
mark only mark-only-photo.jpg image/jpeg · 976 KB
Expected: No Content Credentials found, hidden mark found

What an upload site does to trusted-photo.jpg: converted to sRGB, re-saved at quality 85, all metadata removed. No C2PA manifest remains. The hidden mark survives and reads back the same 256-bit id (BCH-corrected). verify.reconize.me and the Reconize app both read the hidden mark and resolve the picture to the signer through the registry when the content matches.

c2patool 0.27.15: No claim found
Credentio: no claim   c2patool JSON Credentio output

sha256 385ad1e4b2b6d5b928525287a20468b905a891f6b738da2e6fdbb6c0b5327875
untrusted untrusted-photo.jpg image/jpeg · 1.7 MB
Expected: Credentials valid, not on the trust list

Signed while the trusted signing service was unreachable, so the claim is signed with a certificate that is not on the C2PA trust list. Signature and content validate; trust does not. With the service down there is also no trusted timestamp and no identity credential, so the linked accounts read as claimed, not confirmed. The hidden mark and soft binding are still there.

c2patool 0.27.15: Valid · assertion.dataHash.match · claimSignature.validated · signingCredential.untrusted · soft binding me.reconize.videoseal.1
Credentio: signingCredential.untrusted   c2patool JSON Credentio output

sha256 3fad2044d839797f6b5ccdadd5e7cf33dd1a2df55d9f7c5dd605c9388fb945ec
none none-photo.jpg image/jpeg · 1.5 MB
Expected: No Content Credentials found

The unsigned original of trusted-photo.jpg: no manifest, no mark. The control case, and the reference for the switch-back-and-forth comparison.

sha256 379f0946ea0d268a579f102b530ab4251853c3cc2c303ba75654958c17c084e3
What these files do not claim.
Machine-readable manifest: every file, its SHA-256, the expected verdict and the independent results are in corpus.json. Revoked and higher-assurance (IAL2) vectors are planned.

Known limits

We were tested in public. Here is what broke, and what we changed.

The hidden mark can be removed or copied.

It is built on Meta's open VideoSeal model, so anyone can read it, subtract it or paint it onto another picture. A researcher on the C2PA Discord removed it from these samples on October 8, 2026.

A stripped copy can still be found by what it looks like.
What we fixed on October 14, 2026 (after attacking this corpus ourselves)

Each new check was run against 5,000 COCO photos first. No unrelated photo came near the line.

False matches
What still gets through

A copy like this is not attributed to anyone.

Try it yourself: stripped copies to test, each with the result to expect.