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

// A custom assertion that has been redacted by the validator.
// The original assertion label will be replaced with one starting with
// com.google.redacted_custom_assertion.
// This redaction is a separate process from redaction by a claim generator.
message RedactedCustomAssertion {}

// A gathered assertion that has been redacted by the validator.
// The original assertion label will be replaced with one starting with
// com.google.redacted_gathered_assertion.
// This redaction is a separate process from redaction by a claim generator.
message RedactedGatheredAssertion {
  // The original label of the assertion.
  string original_label = 1;
}

// A deprecated standard assertion that has been redacted by the validator.
// The original assertion label will be replaced with one starting with
// com.google.redacted_deprecated_assertion.
// This redaction is a separate process from redaction by a claim generator.
message RedactedDeprecatedAssertion {
  // The original label of the assertion.
  string original_label = 1;
}

// An assertion that was redacted by a subsequent claim generator.
message RedactedByGeneratorAssertion {}
