// 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/manifest.proto";

option java_outer_classname = "ValidationResult";

// Result of a successful or failed validation of content credentials.
message ValidationResultProto {
  Manifest active_manifest = 3;

  // Validation results for all ingredient manifests.
  repeated Manifest ingredient_manifests = 4;

  // The IANA media type of the asset (e.g. "image/jpeg"), if known.
  string media_type = 6;

  // The C2PA spec version of the validator used to validate the manifest.
  string spec_version = 7;

  // The trust list URI used by the validator.
  string trust_list_uri = 8;

  reserved 1, 2, 5;
}

// Result of a partial validation of content credentials, where the content
// binding has not yet been validated.
message PartialValidationResultProto {
  Manifest active_manifest = 1;

  // Validation results for all ingredient manifests.
  repeated Manifest ingredient_manifests = 2;

  // JUMBF URI of the relevant hard binding assertion, if one was found.
  // This will be in the active manifest if it is a standard manifest, and
  // in an ingredient manifest otherwise.
  string hard_binding_uri = 3;

  // 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 = 4;

  // The C2PA spec version of the validator used to validate the manifest.
  string spec_version = 5;

  // The trust list URI used by the validator.
  string trust_list_uri = 6;
}
