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

package credentio;

import "cbor/tags.proto";
import "proto/asset_type.proto";

option java_multiple_files = true;
option java_outer_classname = "HashedUriOuterClass";

// An internal (within the manifest store) hashed URI reference.
message HashedUri {
  // The URI reference.
  string url = 1 [(cbor.tags) = { is_required: true }];
  // The algorithm used to compute the hash.
  string algorithm = 2 [(cbor.tags) = { name: "alg" }];
  // The hash value.
  bytes hash = 3 [(cbor.tags) = { is_required: true }];
}

// An internal (within the manifest store) or external hashed URI reference.
message InternalOrExternalHashedUri {
  // The URI reference.
  string url = 1 [(cbor.tags) = { is_required: true }];
  // The algorithm used to compute the hash.
  string algorithm = 2 [(cbor.tags) = { name: "alg" }];
  // The hash value.
  bytes hash = 3 [(cbor.tags) = { is_required: true }];
  // The media type of the data (for external URIs).
  string media_type = 4 [(cbor.tags) = { name: "dc:format" }];
  // The size of the data (for external URIs).
  int64 size = 5;
  // Additional information about the data's type (for external URIs).
  repeated AssetType data_types = 6;
}
