blob: a9ca2e680c64dbf23fc57017050a792dce8dca1e [file] [edit]
// 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 "proto/assertion.proto";
import "proto/bmff_based_hash_assertion.proto";
import "proto/boxes_hash_assertion.proto";
import "proto/collection_data_hash_assertion.proto";
import "proto/data_hash_assertion.proto";
import "proto/generator_info.proto";
import "proto/ingredient_assertion.proto";
import "proto/signature_info.proto";
import option "google/protobuf/cpp_features.proto";
option features.(pb.cpp).string_type = STRING;
option java_outer_classname = "IngredientValidationResult";
option objc_class_prefix = "C2PA";
// Result of a successful or failed validation of an ingredient asset.
message IngredientValidationResultProto {
// Optional.
// If omitted, the ingredient will be treated as having unknown provenance and
// ingredient_validation_results will be ignored.
bytes manifest_store_bytes = 1;
// The IANA media type of the asset (e.g. "image/jpeg"), if known.
string media_type = 6;
// Optional. Full validation results for the ingredient.
// SHOULD BE SET IF `manifest_store_bytes` IS SET.
IngredientValidationResults ingredient_validation_results = 2;
// Metadata about the ingredient asset for logging/monitoring purposes.
IngredientValidationLoggingMetadata logging_metadata = 3;
// Optional. Metadata about the ingredient asset for legacy manifests.
LegacyIngredientMetadata legacy_ingredient_metadata = 5;
// Contains the URI and redaction reason for a redacted assertion.
message RedactedAssertion {
string uri = 1;
string reason = 2;
}
// DO NOT MANUALLY SET. If set then `manifest_store_bytes` contains the
// redacted ingredient manifest store. Should only be set by the
// ManifestStoreRedactor.
repeated RedactedAssertion redactions = 7;
// Optional. The summarized digital source type of the ingredient asset, if
// known. Used in cases of unknown provenance or if the ingredient manifest
// store was redacted.
string digital_source_type = 8;
reserved 4;
}
// Result of a partial validation of an ingredient manifest store, where the
// content binding has not yet been validated.
message PartialIngredientValidationResultProto {
// Required. Validation results for the ingredient not including hard binding
// validation results.
IngredientValidationResults ingredient_validation_results = 1;
// Metadata about the ingredient asset for logging/monitoring purposes.
IngredientValidationLoggingMetadata logging_metadata = 3;
// Contains the relevant hard binding assertion binding the c2pa manifest
// store to the asset.
message HardBindingAssertion {
// Required.
string hard_binding_uri = 1;
// JUMBF URI of the relevant multi-asset hash assertion, if one was found.
// This must be located in the same manifest as the `hard_binding_uri`.
string multi_asset_hash_uri = 7;
// Required. The relevant hard binding assertion.
oneof hard_binding_assertion {
BmffBasedHashAssertion bmff_based_hash = 2;
DataHashAssertion data_hash = 3;
BoxesHashAssertion boxes_hash = 4;
CollectionDataHashAssertion collection_data_hash = 8;
}
// All hash assertions for the asset, including the primary hard binding
// assertion as well as (if present) the multi-asset hash assertion and the
// part hash assertions it references. Order is not significant.
repeated Assertion assertions = 6;
// Optional. If the active manifest is an update manifest then the
// `hard_binding_uri` will point into a different manifest from the
// `active_manifest_uri`.
string active_manifest_uri = 5;
}
// Optional. The relevant hard binding assertion, if one was found.
HardBindingAssertion hard_binding_assertion = 2;
// Optional. Metadata about the ingredient asset for legacy manifests.
LegacyIngredientMetadata legacy_ingredient_metadata = 5;
// Optional. The summarized digital source type of the ingredient asset, if
// known. Currently only set for assets with AI generation usage.
string digital_source_type = 6;
}
message LegacyIngredientMetadata {
// True if the active manifest is a legacy manifest.
bool is_legacy_ingredient = 1;
// Includes labels of legacy manifests unsupported by this validator.
repeated string unsupported_manifests = 2;
// Includes JUMBF URIs of ingredient assertions that point to legacy manifests
// unsupported by this validator. Assertions may be in any of the ingredient
// manifests or the active manifest.
repeated string unsupported_ingredient_assertion_uris = 3;
}
// Metadata about an ingredient asset for logging/monitoring purposes.
message IngredientValidationLoggingMetadata {
message ManifestInfo {
GeneratorInfo claim_generator = 1;
SignatureInfo signature = 2;
}
// Information about the active manifest.
ManifestInfo active_manifest = 1;
}