// 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";

// Based on `box-hash-map`:
// https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_general_boxes_hash.
message BoxesHashAssertion {
  repeated BoxHash boxes = 1
      [(cbor.tags) = { is_required: true, disallow_empty: true }];
  string alg = 2;
}

message BoxExclusion {
  int64 start = 1 [(cbor.tags) = { is_required: true, type: TYPE_UINT }];
  int64 length = 2 [(cbor.tags) = { is_required: true, type: TYPE_UINT }];
  int32 box_index = 3 [(cbor.tags) = { name: "boxIndex" }];
}

message BoxHash {
  repeated string names = 1
      [(cbor.tags) = { is_required: true, disallow_empty: true }];
  string alg = 2;
  bytes hash = 3 [(cbor.tags) = { is_required: true }];
  // Is the hash value excluded for this set of boxes.
  bool excluded = 6;
  // An array of hash exclusion ranges. Ranges have monotonically increasing
  // `start` values, and no two ranges may overlap.
  repeated BoxExclusion exclusions = 7;

  // For internal use in the manifest generator -- do not set or read.
  bytes pad = 4 [(cbor.tags) = { mode: MODE_WRITE_ONLY }];
  // For internal use in the manifest generator -- do not set or read.
  bytes pad2 = 5 [(cbor.tags) = { mode: MODE_WRITE_ONLY }];
}
