Skip to main content

Manifest examples

C2PA test files

The C2PA public-testfiles repository contains numerous examples of asset files with Content Credentials. See https://c2pa.org/public-testfiles/ for links to easily inspect each asset file using Verify using an asset URL and to the corresponding manifest report and detailed manifest report from C2PA Tool.

Examples from c2patool

The command-line tool c2patool is helpful when developing applications to work with manifest data. When saving a manifest, it has two modes:

  • Standard mode (the default), where it saves a manifest file in JSON format, which is simplified and slightly different from the underlying binary manifest structure.
  • Detailed mode (specified with the -d option), where it saves a file that more closely reflects the actual structure of the binary data, including assertions with JUMBF URLs and their associated hashes.

Simple manifest

This manifest was saved using c2patool with no options.

{
"active_manifest": "contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5",
"manifests": {
"contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5": {
"claim_generator": "make_test_images/0.12.0 c2pa-rs/0.12.0",
"title": "C.jpg",
"format": "image/jpeg",
"instance_id": "xmp:iid:e928fac1-8473-4c70-8219-369e91d4e58d",
"thumbnail": {
"format": "image/jpeg",
"identifier": "contentauth-urn-uuid-5a08e472-974c-422e-b38a-d6c7326481a5.jpg"
},
"ingredients": [],
"assertions": [
{
"label": "stds.schema-org.CreativeWork",
"data": {
"@context": "http://schema.org/",
"@type": "CreativeWork",
"author": [
{
"@type": "Person",
"name": "Gavin Peacock"
}
]
},
"kind": "Json"
},
{
"label": "c2pa.actions",
"data": {
"actions": [
{
"action": "c2pa.created"
},
{
"action": "c2pa.drawing",
"parameters": {
"name": "gradient"
}
}
]
}
}
],
"signature_info": {
"issuer": "C2PA Test Signing Cert",
"cert_serial_number": "720724073027128164015125666832722375746636448153",
"time": "2022-08-19T19:03:41+00:00"
},
"label": "contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5"
}
}
}

Detailed manifest

This manifest was saved using c2patool with the -d option. Even though it was generated for the same asset and Content Credentials as the simple manifest example, you can see that it's about twice as long.

{
"active_manifest": "contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5",
"manifests": {
"contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5": {
"claim": {
"alg": "sha256",
"assertions": [
{
"hash": "BzyThXbTh88KAa5Wb8ckQHMH+Z+noRAUxuv0OmhSQes=",
"url": "self#jumbf=c2pa.assertions/c2pa.thumbnail.claim.jpeg"
},
{
"hash": "lEORvVMPdP8FK5rTLk0zF0SttylTbG5r/6t4Svx0lXA=",
"url": "self#jumbf=c2pa.assertions/stds.schema-org.CreativeWork"
},
{
"hash": "42l0mSt4ue0hIk5YSZ3Q8cwcotNphWsScwvDyq+qyP8=",
"url": "self#jumbf=c2pa.assertions/c2pa.actions"
},
{
"hash": "PMfHnzmyMA2CWqP4rdBd6GrORasLnYmtnFkpAnaIs94=",
"url": "self#jumbf=c2pa.assertions/c2pa.hash.data"
}
],
"claim_generator": "make_test_images/0.12.0 c2pa-rs/0.12.0",
"claim_generator_info": null,
"dc:format": "image/jpeg",
"dc:title": "C.jpg",
"instanceID": "xmp:iid:e928fac1-8473-4c70-8219-369e91d4e58d",
"signature": "self#jumbf=c2pa.signature"
},
"assertion_store": {
"c2pa.thumbnail.claim.jpeg": "<omitted> len = 31659",
"c2pa.actions": {
"actions": [
{
"action": "c2pa.created"
},
{
"action": "c2pa.drawing",
"parameters": {
"name": "gradient"
}
}
]
},
"c2pa.hash.data": {
"alg": "sha256",
"exclusions": [
{
"length": 51179,
"start": 20
}
],
"hash": "DcGR4k9M6aLXXCeDii4tSdX45rrIM5HSr1Wy/czQ6ro=",
"name": "jumbf manifest",
"pad": "<omitted>"
},
"stds.schema-org.CreativeWork": {
"@context": "http://schema.org/",
"@type": "CreativeWork",
"author": [
{
"@type": "Person",
"name": "Gavin Peacock"
}
]
}
},
"signature": {
"alg": "ps256",
"issuer": "C2PA Test Signing Cert",
"time": "2022-08-19T19:03:41+00:00"
}
}
},
"validation_status": [
{
"code": "claimSignature.validated",
"url": "self#jumbf=/c2pa/contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5/c2pa.signature",
"explanation": "claim signature valid"
},
{
"code": "assertion.hashedURI.match",
"url": "self#jumbf=c2pa.assertions/c2pa.thumbnail.claim.jpeg",
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.thumbnail.claim.jpeg"
},
{
"code": "assertion.hashedURI.match",
"url": "self#jumbf=c2pa.assertions/stds.schema-org.CreativeWork",
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/stds.schema-org.CreativeWork"
},
{
"code": "assertion.hashedURI.match",
"url": "self#jumbf=c2pa.assertions/c2pa.actions",
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.actions"
},
{
"code": "assertion.hashedURI.match",
"url": "self#jumbf=c2pa.assertions/c2pa.hash.data",
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.hash.data"
},
{
"code": "assertion.dataHash.match",
"url": "self#jumbf=/c2pa/contentauth:urn:uuid:5a08e472-974c-422e-b38a-d6c7326481a5/c2pa.assertions/c2pa.hash.data",
"explanation": "data hash valid"
}
]
}