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

// Information about the claim or action generator.
// See `generator-info-map` in
// https://spec.c2pa.org/specifications/specifications/2.4/specs/C2PA_Specification.html#_syntax
// for more details.
message GeneratorInfo {
  // Name of the claim generator.
  string name = 1 [(cbor.tags) = { is_required: true }];
  // Version of the claim generator.
  string version = 2;
  // URI to the icon of the claim generator.
  InternalOrExternalHashedUri icon = 3;
  // The operating system the claim generator is running on
  string operating_system = 4;
  // The spec version of the claim generator.
  string spec_version = 5 [(cbor.tags) = { name: "specVersion" }];
}
