Summary
The Builder places auto-generated claim thumbnails in gathered_assertions
rather than created_assertions. The claim generator creates these thumbnails,
so C2PA spec section 14.3 requires them in created_assertions.
Root Cause
sdk/src/builder.rs, line 1422 (v0.78.4):
// todo: add setting for created added thumbnails
add_assertion(&mut claim, &thumbnail, false)?;
The false argument routes the thumbnail through claim.add_assertion(),
which passes add_as_created_assertion=false to add_assertion_impl(). The
claim_assertion_type() function then falls through to Gathered unless the
caller has configured created_assertion_labels in their settings.
Spec Reference
C2PA Technical Specification v2.3, Section 14.3:
The created_assertions field SHALL contain references to all Assertions
that were created by the Claim Generator for this Claim.
The claim generator creates the thumbnail during signing. It is not gathered
from an ingredient or a prior manifest.
Fix
Change false to true:
add_assertion(&mut claim, &thumbnail, true)?;
This matches the existing behavior for c2pa.hash.data assertions, which are
already routed to created_assertions via the HASH_LABELS check in
claim_assertion_type().
Workaround
Consumers can set builder.created_assertion_labels to include
c2pa.thumbnail.claim in their Settings/Context configuration. This works but
requires every downstream caller to compensate for what should be the
library's default behavior. It also depends on the Context being properly
attached to the Claim, which has known inconsistencies with thread-local
settings.
Impact
Any C2PA Conformance Program Level 1 Generator Product submission that uses
c2pa-rs auto-thumbnail generation will have thumbnails in the wrong claim
field. The C2PA Conformance Program Administrator flagged this during our
submission review.
Summary
The Builder places auto-generated claim thumbnails in
gathered_assertionsrather than
created_assertions. The claim generator creates these thumbnails,so C2PA spec section 14.3 requires them in
created_assertions.Root Cause
sdk/src/builder.rs, line 1422 (v0.78.4):The
falseargument routes the thumbnail throughclaim.add_assertion(),which passes
add_as_created_assertion=falsetoadd_assertion_impl(). Theclaim_assertion_type()function then falls through toGatheredunless thecaller has configured
created_assertion_labelsin their settings.Spec Reference
C2PA Technical Specification v2.3, Section 14.3:
The claim generator creates the thumbnail during signing. It is not gathered
from an ingredient or a prior manifest.
Fix
Change
falsetotrue:This matches the existing behavior for
c2pa.hash.dataassertions, which arealready routed to
created_assertionsvia theHASH_LABELScheck inclaim_assertion_type().Workaround
Consumers can set
builder.created_assertion_labelsto includec2pa.thumbnail.claimin their Settings/Context configuration. This works butrequires every downstream caller to compensate for what should be the
library's default behavior. It also depends on the Context being properly
attached to the Claim, which has known inconsistencies with thread-local
settings.
Impact
Any C2PA Conformance Program Level 1 Generator Product submission that uses
c2pa-rs auto-thumbnail generation will have thumbnails in the wrong claim
field. The C2PA Conformance Program Administrator flagged this during our
submission review.