| // Copyright 2026 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| edition = "2024"; |
| |
| package credentio; |
| |
| import "cbor/tags.proto"; |
| import "proto/asset_type.proto"; |
| import "proto/hashed_uri.proto"; |
| import "proto/validation_status.proto"; |
| |
| // Represents an assertion about an ingredient used in the asset. |
| // Based on `ingredient-map-v2` in |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#ingredient_schema. |
| message IngredientAssertionV2 { |
| // The name of the ingredient. |
| string title = 1 [(cbor.tags) = { is_required: true, name: "dc:title" }]; |
| // The media type of the ingredient. |
| string media_type = 2 |
| [(cbor.tags) = { is_required: true, name: "dc:format" }]; |
| // The relationship of this ingredient to the asset it is an ingredient of. |
| string relationship = 3; |
| // The value of the ingredient's `xmpMM:DocumentID`. |
| string document_id = 4 [(cbor.tags) = { name: "documentID" }]; |
| // Unique identifier, such as the value of the ingredient's |
| // `xmpMM:InstanceID`. |
| string instance_id = 5 [(cbor.tags) = { name: "instanceID" }]; |
| // URI reference to a data box or external data containing the ingredient |
| // asset itself. |
| InternalOrExternalHashedUri data = 6; |
| // Additional information about the data's type. |
| repeated AssetType data_types = 7; |
| // URI reference to the C2PA Manifest of the ingredient. |
| HashedUri c2pa_manifest = 8; |
| // URI reference to a thumbnail in a data box. |
| HashedUri thumbnail = 9; |
| // Validation status of the ingredient (provided by the claim generator). |
| repeated ValidationStatus validation_status = 14 |
| [(cbor.tags) = { name: "validationStatus" }]; |
| // Additional description of the ingredient. |
| string description = 11; |
| // URI to an informational page about the ingredient or its data. |
| string informational_uri = 12 [(cbor.tags) = { name: "informational_URI" }]; |
| reserved 13; |
| |
| reserved 10; |
| } |
| |
| // Represents an assertion about an ingredient used in the asset. |
| // Based on `ingredient-map` in |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#ingredient_schema. |
| message IngredientAssertionV1 { |
| // The name of the ingredient. |
| string title = 1 [(cbor.tags) = { is_required: true, name: "dc:title" }]; |
| // The media type of the ingredient. |
| string media_type = 2 |
| [(cbor.tags) = { is_required: true, name: "dc:format" }]; |
| // The value of the ingredient's `xmpMM:DocumentID`. |
| string document_id = 3 [(cbor.tags) = { name: "documentID" }]; |
| // Unique identifier, such as the value of the ingredient's |
| // `xmpMM:InstanceID`. |
| string instance_id = 4 |
| [(cbor.tags) = { is_required: true, name: "instanceID" }]; |
| // The relationship of this ingredient to the asset it is an ingredient of. |
| string relationship = 5; |
| // URI reference to the C2PA Manifest of the ingredient. |
| HashedUri c2pa_manifest = 6; |
| // URI reference to a thumbnail in a data box. |
| HashedUri thumbnail = 7; |
| // Validation status of the ingredient (provided by the claim generator). |
| repeated ValidationStatus validation_status = 10 |
| [(cbor.tags) = { name: "validationStatus" }]; |
| reserved 9; |
| |
| reserved 8; |
| } |
| |
| // Represents an assertion about an ingredient used in the asset. |
| // Based on `ingredient-map-v3` in |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#ingredient_schema. |
| message IngredientAssertionV3 { |
| string title = 1 [(cbor.tags) = { name: "dc:title" }]; |
| string media_type = 2 [(cbor.tags) = { name: "dc:format" }]; |
| string relationship = 3; |
| IngredientValidationResults validation_results = 4 |
| [(cbor.tags) = { name: "validationResults" }]; |
| string instance_id = 5 [(cbor.tags) = { name: "instanceID" }]; |
| InternalOrExternalHashedUri data = 6; |
| repeated AssetType data_types = 7 [(cbor.tags) = { name: "dataTypes" }]; |
| HashedUri active_manifest = 8 [(cbor.tags) = { name: "activeManifest" }]; |
| HashedUri claim_signature = 9 [(cbor.tags) = { name: "claimSignature" }]; |
| HashedUri thumbnail = 10; |
| string description = 11; |
| string informational_uri = 12 [(cbor.tags) = { name: "informationalURI" }]; |
| string digital_source_type = 14 [(cbor.tags) = { name: "digitalSourceType" }]; |
| reserved 13; |
| } |
| |
| // Changes/deltas between the current and previous validation results for each |
| // ingredient's manifest. |
| // See `ingredient-delta-validation-result-map` at |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_returning_validation_results. |
| message IngredientDeltaValidationResult { |
| string ingredient_assertion_uri = 1 |
| [(cbor.tags) = { name: "ingredientAssertionURI", is_required: true }]; |
| ValidationStatusSet validation_deltas = 2 |
| [(cbor.tags) = { name: "validationDeltas", is_required: true }]; |
| } |
| |
| // Results from the claim generator performing full validation. |
| // See `validation-results-map` at |
| // https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_returning_validation_results. |
| message IngredientValidationResults { |
| ValidationStatusSet active_manifest = 1 |
| [(cbor.tags) = { name: "activeManifest" }]; |
| repeated IngredientDeltaValidationResult ingredient_deltas = 2 |
| [(cbor.tags) = { name: "ingredientDeltas" }]; |
| string spec_version = 6 [(cbor.tags) = { name: "specVersion" }]; |
| string trust_list_uri = 7 [(cbor.tags) = { name: "trustListUri" }]; |
| reserved 3, 4, 5; |
| } |