Skip to content

Commit 89bafcc

Browse files
authored
feat: V2 Claims are now generated by default (#1266)
feat: Use V2 Claims by default updates the unit tests to work with V2 by default bump min rust version to 1.86 The c2pa_rs SDK will now generate v2 claims by default aligning with the c2pa 2.2 specification> v1 claims (c2pa 1.4) generation is still available when requested but may be deprecated soon. Reading, validating and ingredient support for v1 claims will continue to be supported. We now support actions.parameters.ingredientIds to replace org.cai.ingredientIds (due to not owning cai.org. Neither of those parameter values will be written to the store action once they are converted to an ingredients array. added Actions try_from(str) to convert a string into an Action added an actions.ingredients() method to return hashed_uris since they are difficult to parse from values. updated make_test_images to produce v2 claims and updated all the known good v2 json samples ClaimDecoding Error now has a detailed message string to help with debugging. We support saving a store that was just loaded (no added signature) verify_after_sign setting now will verify the entire manifest, not just the signature. Fixed support for assertions vs databoxes in some cases. added test_to_and_from_jumbf for store disabled the unresolvable_did unit test since it was timing out on every run. Added DigitalSourceType Enum to builder Added Builder Create constructor using DigtitalSourceType Added Builder Update constructor for auto parent ingredient generation Added BuilderFlow Enum to keep track of the Builder constructor mode. Added Builder.add_action method to add an individual action from a serializable. do not generate the claim_generator field for v2 claims (claim_generator_info only) remove support for adding claim metadata (it will be ignored) fixed status tracker validation info/error message Added test_settings.toml with certs and trust lists for running unit tests. Updated many unit tests and integration tests for v2 compatibility and Settings api.
1 parent 1629414 commit 89bafcc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+3246
-2774
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ jobs:
432432
env:
433433
FEATURES: ${{needs.get-features.outputs.openssl-features}}
434434
run: |
435-
cargo +nightly-2025-01-24 test -Z direct-minimal-versions --all-targets --features "$FEATURES"
435+
cargo +nightly-2025-07-28 test -Z direct-minimal-versions --all-targets --features "$FEATURES"
436436
437437
clippy_check:
438438
name: Clippy
@@ -482,11 +482,11 @@ jobs:
482482
- name: Install nightly toolchain
483483
uses: dtolnay/rust-toolchain@master
484484
with:
485-
toolchain: nightly-2025-06-28
485+
toolchain: nightly-2025-07-28
486486
components: rustfmt
487487

488488
- name: Check format
489-
run: cargo +nightly-2025-06-28 fmt --all -- --check
489+
run: cargo +nightly-2025-07-28 fmt --all -- --check
490490

491491
docs_rs:
492492
name: Preflight docs.rs build

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

c2pa_c_ffi/src/c_api.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1667,7 +1667,7 @@ mod tests {
16671667

16681668
#[test]
16691669
fn test_c2pa_free_string_array_with_count_1() {
1670-
let strings = vec![CString::new("image/jpg").unwrap()];
1670+
let strings = vec![CString::new("image/jpeg").unwrap()];
16711671
let ptrs: Vec<*mut c_char> = strings.into_iter().map(|s| s.into_raw()).collect();
16721672
let ptr = ptrs.as_ptr() as *const *const c_char;
16731673
let count = ptrs.len();

c2pa_c_ffi/src/error.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ impl Error {
8080
| UpdateManifestInvalid
8181
| TooManyManifestStores => Self::Manifest(err_str),
8282
ClaimMissing { label } => Self::ManifestNotFound(err_str),
83-
AssertionDecoding(_) | ClaimDecoding => Self::Decoding(err_str),
83+
AssertionDecoding(_) | ClaimDecoding(_) => Self::Decoding(err_str),
8484
AssertionEncoding(_) | XmlWriteError | ClaimEncoding => Self::Encoding(err_str),
8585
InvalidCoseSignature { coset_error } => Self::Signature(err_str),
8686
CoseSignatureAlgorithmNotSupported

cli/sample/test.json

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,6 @@
77
}],
88
"title": "My Title",
99
"assertions": [
10-
{
11-
"label": "stds.schema-org.CreativeWork",
12-
"data": {
13-
"@context": "https://schema.org",
14-
"@type": "CreativeWork",
15-
"author": [
16-
{
17-
"@type": "Person",
18-
"name": "Joe Bloggs"
19-
}
20-
]
21-
}
22-
},
2310
{
2411
"label": "c2pa.actions",
2512
"data": {

cli/tests/fixtures/ingredient_test.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
"actions": [
2222
{
2323
"action": "c2pa.created",
24-
"instanceId": "xmp.iid:7b57930e-2f23-47fc-affe-0400d70b738d",
2524
"digitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/algorithmicMedia",
2625
"softwareAgent": {
2726
"name": "TestApp",
@@ -31,7 +30,7 @@
3130
},
3231
{
3332
"action": "c2pa.opened",
34-
"instanceId": "xmp.iid:7b57930e-2f23-47fc-affe-0400d70b738d",
33+
"instanceId": "xmp.iid:9867c3b4-465e-42e4-8064-76c0c0fe3d16",
3534
"parameters": {
3635
"description": "import"
3736
},
@@ -122,7 +121,7 @@
122121
"format": "image/jpeg",
123122
"identifier": "verify.jpeg"
124123
},
125-
"relationship": "componentOf"
124+
"relationship": "parentOf"
126125
}
127126
],
128127
"ingredient_paths": [

make_test_images/Cargo.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ unexpected_cfgs = { level = "warn", check-cfg = ['cfg(test)'] }
1212

1313
[dependencies]
1414
anyhow = "1.0.40"
15-
c2pa = { workspace = true }
15+
c2pa = { path = "../sdk", version = "0.58.0", features = [
16+
"fetch_remote_manifests",
17+
"file_io",
18+
"add_thumbnails",
19+
"pdf"
20+
]}
1621
env_logger = "0.11"
1722
log = "0.4.8"
1823
lazy_static = "1.4.0"
@@ -26,4 +31,4 @@ regex = "1.5.6"
2631
serde = "1.0.197"
2732
serde_json = { version = "1.0.117", features = ["preserve_order"] }
2833
tempfile = "3.15.0"
29-
34+
toml = "0.8.23"

make_test_images/json_manifests_v2/C.json

Lines changed: 19 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
{
2-
"active_manifest": "urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth",
2+
"active_manifest": "urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth",
33
"manifests": {
4-
"urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth": {
4+
"urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth": {
55
"claim_generator_info": [
66
{
77
"name": "make_test_images",
8-
"version": "0.57.0",
9-
"org.cai.c2pa_rs": "0.57.0"
8+
"version": "0.58.0",
9+
"org.contentauth.c2pa_rs": "0.58.0"
1010
}
1111
],
1212
"title": "C.jpg",
13-
"instance_id": "xmp:iid:bef593e6-3517-4433-8bec-43cd996cff9b",
13+
"instance_id": "xmp:iid:f31e250d-3fdf-48f4-bb10-afc1def59d80",
1414
"thumbnail": {
1515
"format": "image/jpeg",
16-
"identifier": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.assertions/c2pa.thumbnail.claim"
16+
"identifier": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.assertions/c2pa.thumbnail.claim"
1717
},
1818
"ingredients": [],
1919
"assertions": [
@@ -23,87 +23,69 @@
2323
"actions": [
2424
{
2525
"action": "c2pa.created",
26-
"softwareAgent": "Make Test Images 0.57.0",
26+
"softwareAgent": "Make Test Images 0.58.0",
2727
"parameters": {
2828
"name": "gradient"
2929
},
3030
"digitalSourceType": "http://cv.iptc.org/newscodes/digitalsourcetype/algorithmicMedia"
3131
}
32-
]
32+
],
33+
"allActionsIncluded": true
3334
}
34-
},
35-
{
36-
"label": "stds.schema-org.CreativeWork",
37-
"data": {
38-
"@context": "http://schema.org/",
39-
"@type": "CreativeWork",
40-
"author": [
41-
{
42-
"name": "John Doe",
43-
"@type": "Person"
44-
}
45-
]
46-
},
47-
"kind": "Json"
4835
}
4936
],
5037
"signature_info": {
5138
"alg": "Ps256",
5239
"issuer": "C2PA Test Signing Cert",
5340
"cert_serial_number": "720724073027128164015125666832722375746636448153",
54-
"time": "2025-07-15T22:31:15+00:00"
41+
"time": "2025-07-28T05:55:47+00:00"
5542
},
56-
"label": "urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth"
43+
"label": "urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth"
5744
}
5845
},
5946
"validation_results": {
6047
"activeManifest": {
6148
"success": [
6249
{
6350
"code": "timeStamp.validated",
64-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.signature",
51+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.signature",
6552
"explanation": "timestamp message digest matched: DigiCert SHA256 RSA4096 Timestamp Responder 2025 1"
6653
},
6754
{
6855
"code": "claimSignature.insideValidity",
69-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.signature",
56+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.signature",
7057
"explanation": "claim signature valid"
7158
},
7259
{
7360
"code": "claimSignature.validated",
74-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.signature",
61+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.signature",
7562
"explanation": "claim signature valid"
7663
},
7764
{
7865
"code": "assertion.hashedURI.match",
79-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.assertions/c2pa.thumbnail.claim",
66+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.assertions/c2pa.thumbnail.claim",
8067
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.thumbnail.claim"
8168
},
8269
{
8370
"code": "assertion.hashedURI.match",
84-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.assertions/c2pa.actions.v2",
71+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.assertions/c2pa.actions.v2",
8572
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.actions.v2"
8673
},
8774
{
8875
"code": "assertion.hashedURI.match",
89-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.assertions/c2pa.hash.data",
76+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.assertions/c2pa.hash.data",
9077
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.hash.data"
9178
},
92-
{
93-
"code": "assertion.hashedURI.match",
94-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.assertions/stds.schema-org.CreativeWork",
95-
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/stds.schema-org.CreativeWork"
96-
},
9779
{
9880
"code": "assertion.dataHash.match",
99-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.assertions/c2pa.hash.data",
81+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.assertions/c2pa.hash.data",
10082
"explanation": "data hash valid"
10183
}
10284
],
10385
"informational": [
10486
{
10587
"code": "timeStamp.untrusted",
106-
"url": "self#jumbf=/c2pa/urn:c2pa:22daa42e-a5b6-4944-bda3-8db575c6c730:contentauth/c2pa.signature",
88+
"url": "self#jumbf=/c2pa/urn:c2pa:e8cfb0d0-8bd3-41db-abb9-68a8e4aa1bbf:contentauth/c2pa.signature",
10789
"explanation": "timestamp cert untrusted: DigiCert SHA256 RSA4096 Timestamp Responder 2025 1"
10890
}
10991
],

make_test_images/json_manifests_v2/CA.json

Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
{
2-
"active_manifest": "urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth",
2+
"active_manifest": "urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth",
33
"manifests": {
4-
"urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth": {
4+
"urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth": {
55
"claim_generator_info": [
66
{
77
"name": "make_test_images",
8-
"version": "0.57.0",
9-
"org.cai.c2pa_rs": "0.57.0"
8+
"version": "0.58.0",
9+
"org.contentauth.c2pa_rs": "0.58.0"
1010
}
1111
],
1212
"title": "CA.jpg",
13-
"instance_id": "xmp:iid:3cc224a9-aaf9-4d82-adf0-d677b0eeaea2",
13+
"instance_id": "xmp:iid:d5032a83-ac47-40c4-a3f9-77b0d3d4b11b",
1414
"thumbnail": {
1515
"format": "image/jpeg",
16-
"identifier": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.thumbnail.claim"
16+
"identifier": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.thumbnail.claim"
1717
},
1818
"ingredients": [
1919
{
@@ -39,11 +39,8 @@
3939
"ingredients": [
4040
{
4141
"url": "self#jumbf=c2pa.assertions/c2pa.ingredient.v3",
42-
"hash": "IopH69XyF+OZm13aAafpzXFZap0VOazjg9XhJn1AC98="
42+
"hash": "Q5NDuiDFY1u6xbFURXm9lCvn18CK8C5AuxFyGQ1Mw7U="
4343
}
44-
],
45-
"org.cai.ingredientIds": [
46-
"xmp.iid:813ee422-9736-4cdc-9be6-4e35ed8e41cb"
4744
]
4845
}
4946
},
@@ -53,96 +50,78 @@
5350
"name": "brightnesscontrast"
5451
}
5552
}
56-
]
53+
],
54+
"allActionsIncluded": true
5755
}
58-
},
59-
{
60-
"label": "stds.schema-org.CreativeWork",
61-
"data": {
62-
"@context": "http://schema.org/",
63-
"@type": "CreativeWork",
64-
"author": [
65-
{
66-
"name": "John Doe",
67-
"@type": "Person"
68-
}
69-
]
70-
},
71-
"kind": "Json"
7256
}
7357
],
7458
"signature_info": {
7559
"alg": "Ps256",
7660
"issuer": "C2PA Test Signing Cert",
7761
"cert_serial_number": "720724073027128164015125666832722375746636448153",
78-
"time": "2025-07-15T22:31:15+00:00"
62+
"time": "2025-07-28T05:55:47+00:00"
7963
},
80-
"label": "urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth"
64+
"label": "urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth"
8165
}
8266
},
8367
"validation_results": {
8468
"activeManifest": {
8569
"success": [
8670
{
8771
"code": "timeStamp.validated",
88-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.signature",
72+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.signature",
8973
"explanation": "timestamp message digest matched: DigiCert SHA256 RSA4096 Timestamp Responder 2025 1"
9074
},
9175
{
9276
"code": "claimSignature.insideValidity",
93-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.signature",
77+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.signature",
9478
"explanation": "claim signature valid"
9579
},
9680
{
9781
"code": "claimSignature.validated",
98-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.signature",
82+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.signature",
9983
"explanation": "claim signature valid"
10084
},
10185
{
10286
"code": "assertion.hashedURI.match",
103-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.thumbnail.claim",
87+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.thumbnail.claim",
10488
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.thumbnail.claim"
10589
},
10690
{
10791
"code": "assertion.hashedURI.match",
108-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.thumbnail.ingredient",
92+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.thumbnail.ingredient",
10993
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.thumbnail.ingredient"
11094
},
11195
{
11296
"code": "assertion.hashedURI.match",
113-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.ingredient.v3",
97+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.ingredient.v3",
11498
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.ingredient.v3"
11599
},
116100
{
117101
"code": "assertion.hashedURI.match",
118-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.actions.v2",
102+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.actions.v2",
119103
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.actions.v2"
120104
},
121105
{
122106
"code": "assertion.hashedURI.match",
123-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.hash.data",
107+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.hash.data",
124108
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/c2pa.hash.data"
125109
},
126-
{
127-
"code": "assertion.hashedURI.match",
128-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/stds.schema-org.CreativeWork",
129-
"explanation": "hashed uri matched: self#jumbf=c2pa.assertions/stds.schema-org.CreativeWork"
130-
},
131110
{
132111
"code": "assertion.dataHash.match",
133-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.hash.data",
112+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.hash.data",
134113
"explanation": "data hash valid"
135114
}
136115
],
137116
"informational": [
138117
{
139118
"code": "ingredient.unknownProvenance",
140-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.assertions/c2pa.ingredient.v3",
119+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.assertions/c2pa.ingredient.v3",
141120
"explanation": "A.jpg: ingredient does not have provenance"
142121
},
143122
{
144123
"code": "timeStamp.untrusted",
145-
"url": "self#jumbf=/c2pa/urn:c2pa:4d9e9570-a2d4-496e-a1d0-5d98d39aa686:contentauth/c2pa.signature",
124+
"url": "self#jumbf=/c2pa/urn:c2pa:bb0da609-a5cb-4923-9e74-35540472478d:contentauth/c2pa.signature",
146125
"explanation": "timestamp cert untrusted: DigiCert SHA256 RSA4096 Timestamp Responder 2025 1"
147126
}
148127
],

0 commit comments

Comments
 (0)