// 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 "google/protobuf/timestamp.proto";
import "proto/assurance_level.proto";

// Information about a C2PA claim signature.
message SignatureInfo {
  // The serial number of the certificate.
  string cert_serial_number = 1;

  // Signer of the claim, a DN in RFC 2253 format (e.g., "CN=C2PA Signer,OU=FOR
  // TESTING_ONLY,O=C2PA Test Signing Cert,L=Somewhere,ST=CA,C=US").
  //
  // The field name is `issuer` (as in the open-source SDK) because this is the
  // entity that issued the content credentials.
  string issuer = 2;

  // Issuer of the claim signer's certificate, a DN in RFC 2253 format (e.g.,
  // "CN=Intermediate CA,OU=FOR TESTING_ONLY,O=C2PA Test Intermediate Root CA,
  // L=Somewhere,ST=CA,C=US"). The identities of any other CAs in the trust
  // chain are not included.
  string certificate_issuer = 4;

  // A time-stamp applied to the signature, produced by a trusted Time-Stamp
  // Authority.
  //
  // NOTE: Assuming claim validation succeeds, the asset itself can be assumed
  // to have been created at or before this time. Any display of this time to
  // users should take care not to give the impression that the asset was
  // created *at* that time -- it could have been created years earlier.
  google.protobuf.Timestamp timestamping_time = 3;

  // Assurance levels for the signing cert, matching the C2PA Generator Product
  // Security requirements.
  AssuranceLevel assurance_level = 5;

  // The string value of the UUID for the conforming products list record
  // (e.g., "0197aa34-665b-7811-9bbc-317cfd988d0a").
  string conforming_product_id = 6;
}
