// 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 "proto/signature_info.proto";
import "proto/validation_status.proto";

option java_outer_classname = "CoseVerificationResultOuterClass";

// Result of a COSE signature verification.
message CoseVerificationResult {
  // Provided when the entire verification completes successfully.
  credentio.SignatureInfo signature_info = 1;

  // Set of validation statuses encountered during verification.
  // Validation should be considered failed if any failure statuses are present.
  credentio.ValidationStatusSet validation_status = 2;
}
