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 C2PA Tool
The command-line C2PA 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"
}
]
}