// 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 option "google/protobuf/cpp_features.proto";

// The asset reference assertion (ARA) describes where a copy of the asset may
// be obtained.
// Based on `asset-ref-map`:
// https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_asset_reference.
message AssetReferenceAssertion {
  repeated AraReferenceBlock references = 1
      [(cbor.tags) = { is_required: true, disallow_empty: true }];
}

message AraReferenceBlock {
  AraReferenceUri reference = 1 [(cbor.tags) = { is_required: true }];

  // Human readable description of the location.
  string description = 2 [features.(pb.cpp).string_type = STRING];
}

message AraReferenceUri {
  // URI reference a location where a copy of the asset may be obtained from.
  string uri = 1 [
    features.(pb.cpp).string_type = STRING,
    (cbor.tags) = { is_required: true }
  ];
}
