Reader reference
This is a beta release of this reference. It is a work in progress and may have issues or errors.
Reader
Use a Reader to read and validate a manifest store.
Properties
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| active_manifest | String | A label for the active (most recent) manifest in the store | NO | N/A |
| manifests | Object | A HashMap of Manifests | NO | {} |
| validation_results | Either ValidationResults or Null | ValidationStatus generated when loading the ManifestStore from an asset | NO | N/A |
| validation_state | Either ValidationState or Null | The validation state of the manifest store | NO | N/A |
| validation_status | Array of ValidationStatus | ValidationStatus generated when loading the ManifestStore from an asset | NO | N/A |
Definitions
Actor
Identifies a person responsible for an action.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| credentials | Array of HashedUri | List of references to W3C Verifiable Credentials. | NO | N/A |
| identifier | String | An identifier for a human actor, used when the "type" is | NO | N/A |
AssertionMetadata
The AssertionMetadata structure can be used as part of other assertions or on its own to reference others
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| dataSource | Either DataSource or Null | N/A | NO | N/A |
| dateTime | Either DateT or Null | N/A | NO | N/A |
| localizations | Array of Object | N/A | NO | N/A |
| reference | Either HashedUri or Null | N/A | NO | N/A |
| regionOfInterest | Either RegionOfInterest or Null | N/A | NO | N/A |
| reviewRatings | Array of ReviewRating | N/A | NO | N/A |
AssetType
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| type | String | N/A | YES | N/A |
| version | String | N/A | NO | N/A |
ClaimGeneratorInfo
Description of the claim generator, or the software used in generating the claim.
This structure is also used for actions softwareAgent
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| icon | Either UriOrResource or Null | hashed URI to the icon (either embedded or remote) | NO | N/A |
| name | String | A human readable string naming the claim_generator | YES | N/A |
| operating_system | String | A human readable string of the OS the claim generator is running on.
CrJSON schema uses | NO | N/A |
| version | String | A human readable string of the product's version | NO | N/A |
Coordinate
An x, y coordinate used for specifying vertices in polygons.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| x | Number | The coordinate along the x-axis. | YES | N/A |
| y | Number | The coordinate along the y-axis. | YES | N/A |
DataSource
A description of the source for assertion data
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| actors | Array of Actor | A list of | NO | N/A |
| details | String | A human-readable string giving details about the source of the assertion data. | NO | N/A |
| type | String | A value from among the enumerated list indicating the source of the assertion. | YES | N/A |
DateT
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| type | String | N/A | NO | N/A |
Frame
A frame range representing starting and ending frames or pages.
If both start and end are missing, the frame will span the entire asset.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| end | Integer | The end of the frame inclusive or the end of the asset if not present. | NO | N/A |
| start | Integer | The start of the frame or the end of the asset if not present. The first frame/page starts at 0. | NO | N/A |
HashedUri
A HashedUri provides a reference to content available within the same
manifest store.
This is described in URI References in the C2PA Technical Specification.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| alg | String | A string identifying the cryptographic hash algorithm used to compute the hash | NO | N/A |
| hash | Array of Integer | Byte string containing the hash value | YES | N/A |
| url | String | JUMBF URI reference | YES | N/A |
Ingredient
An Ingredient is any external asset that has been used in the creation of an asset.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| active_manifest | String | The active manifest label (if one exists). If this ingredient has a | NO | N/A |
| data | Either ResourceRef or Null | A reference to the actual data of the ingredient. | NO | N/A |
| data_types | Array of AssetType | Additional information about the data's type to the ingredient V2 structure. | NO | N/A |
| description | String | Additional description of the ingredient. | NO | N/A |
| document_id | String | Document ID from | NO | N/A |
| format | String | The format of the source file as a MIME type. | NO | N/A |
| hash | String | An optional hash of the asset to prevent duplicates. | NO | N/A |
| informational_URI | String | URI to an informational page about the ingredient or its data. | NO | N/A |
| instance_id | String | Instance ID from | NO | N/A |
| label | String | The ingredient's label as assigned in the manifest. | NO | N/A |
| manifest_data | Either ResourceRef or Null | A | NO | N/A |
| metadata | Either AssertionMetadata or Null | Any additional | NO | N/A |
| ocsp_responses | Array of ResourceRef | N/A | NO | N/A |
| provenance | String | URI from | NO | N/A |
| relationship | Relationship | Set to There can only be one parent ingredient in the ingredients. | NO | "componentOf" |
| thumbnail | Either ResourceRef or Null | A thumbnail image capturing the visual state at the time of import. A tuple of thumbnail MIME format (for example | NO | N/A |
| title | String | A human-readable title, generally source filename. | NO | N/A |
| validation_results | Either ValidationResults or Null | Validation results (Ingredient.V3) | NO | N/A |
| validation_status | Array of ValidationStatus | Validation status (Ingredient v1 & v2) | NO | N/A |
IngredientDeltaValidationResult
Represents any changes or deltas between the current and previous validation results for an ingredient's manifest.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| ingredientAssertionURI | String | JUMBF URI reference to the ingredient assertion | YES | N/A |
| validationDeltas | StatusCodes | Validation results for the ingredient's active manifest | YES | N/A |
Item
Description of the boundaries of an identified range.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| identifier | String | The container-specific term used to identify items, such as "track_id" for MP4 or "item_ID" for HEIF. | YES | N/A |
| value | String | The value of the identifier, e.g. a value of "2" for an identifier of "track_id" would imply track 2 of the asset. | YES | N/A |
Manifest
A Manifest represents all the information in a c2pa manifest
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| assertions | Array of ManifestAssertion | A list of assertions | NO | [] |
| claim_generator | String | A User Agent formatted string identifying the software/hardware/system produced this claim Spaces are not allowed in names, versions can be specified with product/1.0 syntax. | NO | N/A |
| claim_generator_info | Array of ClaimGeneratorInfo | A list of claim generator info data identifying the software/hardware/system produced this claim. | NO | N/A |
| claim_version | Integer | The version of the claim, parsed from the claim label. For example:
- | NO | N/A |
| credentials | Array | A List of verified credentials | NO | N/A |
| format | String | The format of the source file as a MIME type. | NO | N/A |
| ingredients | Array of Ingredient | A List of ingredients | NO | N/A |
| instance_id | String | Instance ID from | NO | "xmp:iid:f76c3bfc-3ab0-4d69-9d17-4198272bdc4a" |
| label | String | N/A | NO | N/A |
| metadata | Array of AssertionMetadata | A list of user metadata for this claim. | NO | N/A |
| redactions | Array of String | JUMBF URIs of assertions that were redacted by this manifest. Each entry has the form
| NO | N/A |
| signature_info | Either SignatureInfo or Null | Signature data (only used for reporting) | NO | N/A |
| thumbnail | Either ResourceRef or Null | N/A | NO | N/A |
| title | String | A human-readable title, generally source filename. | NO | N/A |
| vendor | String | Optional prefix added to the generated Manifest label.
This is typically an internet domain name for the vendor (i.e. | NO | N/A |
ManifestAssertion
A labeled container for an Assertion value in a Manifest
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| created | Boolean | True if this assertion is attributed to the signer This maps to a created vs a gathered assertion. (defaults to false) | NO | N/A |
| data | ManifestData | The data of the assertion as Value | YES | N/A |
| instance | Integer | There can be more than one assertion for any label | NO | N/A |
| kind | Either ManifestAssertionKind or Null | The ManifestAssertionKind for this assertion (as stored in c2pa content) | NO | N/A |
| label | String | An assertion label in reverse domain format | YES | N/A |
ManifestAssertionKind
Assertions in C2PA can be stored in several formats
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| type | Enum (Cbor, Json, Binary, Uri) | Assertions in C2PA can be stored in several formats | NO | N/A |
ManifestData
| Type | Description | Value |
|---|---|---|
| Array | N/A | N/A |
Range
A spatial, temporal, frame, or textual range describing the region of interest.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| frame | Either Frame or Null | A frame range. | NO | N/A |
| item | Either Item or Null | A item identifier. | NO | N/A |
| shape | Either Shape or Null | A spatial range. | NO | N/A |
| text | Either Text or Null | A textual range. | NO | N/A |
| time | Either Time or Null | A temporal range. | NO | N/A |
| type | RangeType | The type of range of interest. | YES | N/A |
RangeType
The type of range for the region of interest.
| Type | Description | Value |
|---|---|---|
| String | A spatial range, see | spatial |
| String | A temporal range, see | temporal |
| String | A spatial range, see | frame |
| String | A textual range, see | textual |
| String | A range identified by a specific identifier and value, see | identified |
RegionOfInterest
A region of interest within an asset describing the change.
This struct can be used from Action::changes,
AssertionMetadata::region_of_interest, or
SoftBindingScope::region.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| description | String | A free-text string. | NO | N/A |
| identifier | String | A free-text string representing a machine-readable, unique to this assertion, identifier for the region. | NO | N/A |
| metadata | Either AssertionMetadata or Null | Additional information about the asset. | NO | N/A |
| name | String | A free-text string representing a human-readable name for the region which might be used in a user interface. | NO | N/A |
| region | Array of Range | A range describing the region of interest for the specific asset. | YES | N/A |
| role | Either Role or Null | A value from our controlled vocabulary or an entity-specific value (e.g., com.litware.coolArea) that represents the role of a region among other regions. | NO | N/A |
| type | String | A value from a controlled vocabulary such as https://cv.iptc.org/newscodes/imageregiontype/ or an entity-specific value (e.g., com.litware.newType) that represents the type of thing(s) depicted by a region. Note this field serializes/deserializes into the name | NO | N/A |
Relationship
The relationship of the ingredient to the current asset.
| Type | Description | Value |
|---|---|---|
| String | The current asset is derived from this ingredient. | parentOf |
| String | The current asset is a part of this ingredient. | componentOf |
| String | The ingredient was used as an input to a computational process to create or modify the asset. | inputTo |
ResourceRef
A reference to a resource to be used in JSON serialization.
The underlying data can be read as a stream via Reader::resource_to_streamcrate::Reader::resource_to_stream.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| alg | String | The algorithm used to hash the resource (if applicable). | NO | N/A |
| data_types | Array of AssetType | More detailed data types as defined in the C2PA spec. | NO | N/A |
| format | String | The mime type of the referenced resource. | YES | N/A |
| hash | String | The hash of the resource (if applicable). | NO | N/A |
| identifier | String | A URI that identifies the resource as referenced from the manifest. This may be a JUMBF URI, a file path, a URL or any other string. Relative JUMBF URIs will be resolved with the manifest label. Relative file paths will be resolved with the base path if provided. | YES | N/A |
ReviewRating
A rating on an Assertion.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| code | String | N/A | NO | N/A |
| explanation | String | N/A | YES | N/A |
| value | Integer | N/A | YES | N/A |
Role
A role describing the region.
| Type | Description | Value |
|---|---|---|
| String | Arbitrary area worth identifying. | c2pa.areaOfInterest |
| String | This area is all that is left after a crop action. | c2pa.cropped |
| String | This area has had edits applied to it. | c2pa.edited |
| String | The area where an ingredient was placed/added. | c2pa.placed |
| String | Something in this area was redacted. | c2pa.redacted |
| String | Area specific to a subject (human or not). | c2pa.subjectArea |
| String | A range of information was removed/deleted. | c2pa.deleted |
| String | Styling was applied to this area. | c2pa.styled |
| String | Invisible watermarking was applied to this area for the purpose of soft binding. | c2pa.watermarked |
Shape
A spatial range representing rectangle, circle, or a polygon.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| height | Number | The height of a rectnagle. This field can be ignored for circles and polygons. | NO | N/A |
| inside | Boolean | If the range is inside the shape. The default value is true. | NO | N/A |
| origin | Coordinate | THe origin of the coordinate in the shape. | YES | N/A |
| type | ShapeType | The type of shape. | YES | N/A |
| unit | UnitType | The type of unit for the shape range. | YES | N/A |
| vertices | Array of Coordinate | The vertices of the polygon. This field can be ignored for rectangles and circles. | NO | N/A |
| width | Number | The width for rectangles or diameter for circles. This field can be ignored for polygons. | NO | N/A |
ShapeType
The type of shape for the range.
| Type | Description | Value |
|---|---|---|
| String | A rectangle. | rectangle |
| String | A circle. | circle |
| String | A polygon. | polygon |
SignatureInfo
Holds information about a signature
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| alg | Either SigningAlgSchema or Null | Human-readable issuing authority for this signature. | NO | N/A |
| cert_serial_number | String | The serial number of the certificate. | NO | N/A |
| common_name | String | Human-readable for common name of this certificate. | NO | N/A |
| issuer | String | Human-readable issuing authority for this signature. | NO | N/A |
| revocation_status | Boolean | Revocation status of the certificate. | NO | N/A |
| time | String | The time the signature was created. | NO | N/A |
SigningAlgSchema
JSON Schema proxy for SigningAlg.
c2pa_raw_crypto::SigningAlg intentionally does not depend on schemars,
so it does not implement schemars::JsonSchema. SDK types that expose a
SigningAlg in their JSON schema reference this mirror (whose variants match
SigningAlg's serialized form) via #[schemars(with = "...")].
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| type | Enum (Es256, Es384, Es512, Ps256, Ps384, Ps512, Ed25519) | JSON Schema proxy for
| NO | N/A |
StatusCodes
Contains a set of success, informational, and failure validation status codes.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| failure | Array of ValidationStatus | An array of validation failure codes. May be empty. | YES | N/A |
| informational | Array of ValidationStatus | An array of validation informational codes. May be empty. | YES | N/A |
| success | Array of ValidationStatus | An array of validation success codes. May be empty. | YES | N/A |
Text
A textual range representing multiple (possibly discontinuous) ranges of text.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| selectors | Array of TextSelectorRange | The ranges of text to select. | YES | N/A |
TextSelector
Selects a range of text via a fragment identifier.
This is modeled after the W3C Web Annotation selector model.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| end | Integer | The end character offset or the end of the fragment if not present. | NO | N/A |
| fragment | String | Fragment identifier as per RFC3023 (XML) or ISO 32000-2 (PDF), Annex O. | YES | N/A |
| start | Integer | The start character offset or the start of the fragment if not present. | NO | N/A |
TextSelectorRange
One or two TextSelector identifiying the range to select.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| end | Either TextSelector or Null | The end of the text range. | NO | N/A |
| selector | TextSelector | The start (or entire) text range. | YES | N/A |
Time
A temporal range representing a starting time to an ending time.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| end | String | The end time or the end of the asset if not present. | NO | N/A |
| start | String | The start time or the start of the asset if not present. | NO | N/A |
| type | TimeType | The type of time. | NO | "npt" |
TimeType
The type of time.
| Type | Description | Value |
|---|---|---|
| String | Times are described using Normal Play Time (npt) as described in RFC 2326. | npt |
UnitType
The type of unit for the range.
| Type | Description | Value |
|---|---|---|
| String | Use pixels. | pixel |
| String | Use percentage. | percent |
UriOrResource
| Type | Description | Value |
|---|---|---|
| ResourceRef | N/A | N/A |
| HashedUri | N/A | N/A |
ValidationResults
A map of validation results for a manifest store.
The map contains the validation results for the active manifest and any ingredient deltas. It is normal for there to be many
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| activeManifest | Either StatusCodes or Null | Validation status codes for the ingredient's active manifest. Present if ingredient is a C2PA asset. Not present if the ingredient is not a C2PA asset. | NO | N/A |
| ingredientDeltas | Array of IngredientDeltaValidationResult | List of any changes/deltas between the current and previous validation results for each ingredient's manifest. Present if the the ingredient is a C2PA asset. | NO | N/A |
| validationTime | String | Time when the validation was performed (RFC 3339 date-time). Used only for document-level validationInfo; not serialized in validationResults (e.g. ingredient assertions). | NO | N/A |
ValidationState
Represents the levels of assurance a manifest store achieves when evaluated against the C2PA specifications structural, cryptographic, and trust requirements.
| Type | Description | Value |
|---|---|---|
| String | The manifest store fails to meet ValidationState::WellFormed requirements, meaning it cannot even be parsed or its basic structure is non-compliant. This case may also occur if validation is disabled in the SDK. | Invalid |
| String | The manifest store is well-formed and the cryptographic integrity checks succeed. | Valid |
| String | The manifest store is valid and signed by a certificate that chains up to a trusted root or known authority in the trust list. | Trusted |
ValidationStatus
A ValidationStatus struct describes the validation status of a
specific part of a manifest.
| Property | Type | Description | Required? | Default Value |
|---|---|---|---|---|
| code | String | N/A | YES | N/A |
| explanation | String | N/A | NO | N/A |
| success | Boolean | N/A | NO | N/A |
| url | String | N/A | NO | N/A |