// <auto-generated>
//     Generated by the protocol buffer compiler.  DO NOT EDIT!
//     source: google/cloud/binaryauthorization/v1/resources.proto
// </auto-generated>
#pragma warning disable 1591, 0612, 3021
#region Designer generated code

using pb = global::Google.Protobuf;
using pbc = global::Google.Protobuf.Collections;
using pbr = global::Google.Protobuf.Reflection;
using scg = global::System.Collections.Generic;
namespace Google.Cloud.BinaryAuthorization.V1 {

  /// <summary>Holder for reflection information generated from google/cloud/binaryauthorization/v1/resources.proto</summary>
  public static partial class ResourcesReflection {

    #region Descriptor
    /// <summary>File descriptor for google/cloud/binaryauthorization/v1/resources.proto</summary>
    public static pbr::FileDescriptor Descriptor {
      get { return descriptor; }
    }
    private static pbr::FileDescriptor descriptor;

    static ResourcesReflection() {
      byte[] descriptorData = global::System.Convert.FromBase64String(
          string.Concat(
            "CjNnb29nbGUvY2xvdWQvYmluYXJ5YXV0aG9yaXphdGlvbi92MS9yZXNvdXJj",
            "ZXMucHJvdG8SI2dvb2dsZS5jbG91ZC5iaW5hcnlhdXRob3JpemF0aW9uLnYx",
            "Gh9nb29nbGUvYXBpL2ZpZWxkX2JlaGF2aW9yLnByb3RvGhlnb29nbGUvYXBp",
            "L3Jlc291cmNlLnByb3RvGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnBy",
            "b3RvGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvIvgMCgZQb2xpY3kS",
            "EQoEbmFtZRgBIAEoCUID4EEDEhgKC2Rlc2NyaXB0aW9uGAYgASgJQgPgQQES",
            "cgodZ2xvYmFsX3BvbGljeV9ldmFsdWF0aW9uX21vZGUYByABKA4yRi5nb29n",
            "bGUuY2xvdWQuYmluYXJ5YXV0aG9yaXphdGlvbi52MS5Qb2xpY3kuR2xvYmFs",
            "UG9saWN5RXZhbHVhdGlvbk1vZGVCA+BBARJpChxhZG1pc3Npb25fd2hpdGVs",
            "aXN0X3BhdHRlcm5zGAIgAygLMj4uZ29vZ2xlLmNsb3VkLmJpbmFyeWF1dGhv",
            "cml6YXRpb24udjEuQWRtaXNzaW9uV2hpdGVsaXN0UGF0dGVybkID4EEBEmwK",
            "F2NsdXN0ZXJfYWRtaXNzaW9uX3J1bGVzGAMgAygLMkYuZ29vZ2xlLmNsb3Vk",
            "LmJpbmFyeWF1dGhvcml6YXRpb24udjEuUG9saWN5LkNsdXN0ZXJBZG1pc3Np",
            "b25SdWxlc0VudHJ5QgPgQQEShQEKJGt1YmVybmV0ZXNfbmFtZXNwYWNlX2Fk",
            "bWlzc2lvbl9ydWxlcxgKIAMoCzJSLmdvb2dsZS5jbG91ZC5iaW5hcnlhdXRo",
            "b3JpemF0aW9uLnYxLlBvbGljeS5LdWJlcm5ldGVzTmFtZXNwYWNlQWRtaXNz",
            "aW9uUnVsZXNFbnRyeUID4EEBEpABCiprdWJlcm5ldGVzX3NlcnZpY2VfYWNj",
            "b3VudF9hZG1pc3Npb25fcnVsZXMYCCADKAsyVy5nb29nbGUuY2xvdWQuYmlu",
            "YXJ5YXV0aG9yaXphdGlvbi52MS5Qb2xpY3kuS3ViZXJuZXRlc1NlcnZpY2VB",
            "Y2NvdW50QWRtaXNzaW9uUnVsZXNFbnRyeUID4EEBEogBCiZpc3Rpb19zZXJ2",
            "aWNlX2lkZW50aXR5X2FkbWlzc2lvbl9ydWxlcxgJIAMoCzJTLmdvb2dsZS5j",
            "bG91ZC5iaW5hcnlhdXRob3JpemF0aW9uLnYxLlBvbGljeS5Jc3Rpb1NlcnZp",
            "Y2VJZGVudGl0eUFkbWlzc2lvblJ1bGVzRW50cnlCA+BBARJXChZkZWZhdWx0",
            "X2FkbWlzc2lvbl9ydWxlGAQgASgLMjIuZ29vZ2xlLmNsb3VkLmJpbmFyeWF1",
            "dGhvcml6YXRpb24udjEuQWRtaXNzaW9uUnVsZUID4EECEjQKC3VwZGF0ZV90",
            "aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDGnAK",
            "GkNsdXN0ZXJBZG1pc3Npb25SdWxlc0VudHJ5EgsKA2tleRgBIAEoCRJBCgV2",
            "YWx1ZRgCIAEoCzIyLmdvb2dsZS5jbG91ZC5iaW5hcnlhdXRob3JpemF0aW9u",
            "LnYxLkFkbWlzc2lvblJ1bGU6AjgBGnwKJkt1YmVybmV0ZXNOYW1lc3BhY2VB",
            "ZG1pc3Npb25SdWxlc0VudHJ5EgsKA2tleRgBIAEoCRJBCgV2YWx1ZRgCIAEo",
            "CzIyLmdvb2dsZS5jbG91ZC5iaW5hcnlhdXRob3JpemF0aW9uLnYxLkFkbWlz",
            "c2lvblJ1bGU6AjgBGoEBCitLdWJlcm5ldGVzU2VydmljZUFjY291bnRBZG1p",
            "c3Npb25SdWxlc0VudHJ5EgsKA2tleRgBIAEoCRJBCgV2YWx1ZRgCIAEoCzIy",
            "Lmdvb2dsZS5jbG91ZC5iaW5hcnlhdXRob3JpemF0aW9uLnYxLkFkbWlzc2lv",
            "blJ1bGU6AjgBGn0KJ0lzdGlvU2VydmljZUlkZW50aXR5QWRtaXNzaW9uUnVs",
            "ZXNFbnRyeRILCgNrZXkYASABKAkSQQoFdmFsdWUYAiABKAsyMi5nb29nbGUu",
            "Y2xvdWQuYmluYXJ5YXV0aG9yaXphdGlvbi52MS5BZG1pc3Npb25SdWxlOgI4",
            "ASJkChpHbG9iYWxQb2xpY3lFdmFsdWF0aW9uTW9kZRItCilHTE9CQUxfUE9M",
            "SUNZX0VWQUxVQVRJT05fTU9ERV9VTlNQRUNJRklFRBAAEgoKBkVOQUJMRRAB",
            "EgsKB0RJU0FCTEUQAjpm6kFjCiliaW5hcnlhdXRob3JpemF0aW9uLmdvb2ds",
            "ZWFwaXMuY29tL1BvbGljeRIZcHJvamVjdHMve3Byb2plY3R9L3BvbGljeRIb",
            "bG9jYXRpb25zL3tsb2NhdGlvbn0vcG9saWN5IjEKGUFkbWlzc2lvbldoaXRl",
            "bGlzdFBhdHRlcm4SFAoMbmFtZV9wYXR0ZXJuGAEgASgJItoDCg1BZG1pc3Np",
            "b25SdWxlEl8KD2V2YWx1YXRpb25fbW9kZRgBIAEoDjJBLmdvb2dsZS5jbG91",
            "ZC5iaW5hcnlhdXRob3JpemF0aW9uLnYxLkFkbWlzc2lvblJ1bGUuRXZhbHVh",
            "dGlvbk1vZGVCA+BBAhIkChdyZXF1aXJlX2F0dGVzdGF0aW9uc19ieRgCIAMo",
            "CUID4EEBEmEKEGVuZm9yY2VtZW50X21vZGUYAyABKA4yQi5nb29nbGUuY2xv",
            "dWQuYmluYXJ5YXV0aG9yaXphdGlvbi52MS5BZG1pc3Npb25SdWxlLkVuZm9y",
            "Y2VtZW50TW9kZUID4EECIm0KDkV2YWx1YXRpb25Nb2RlEh8KG0VWQUxVQVRJ",
            "T05fTU9ERV9VTlNQRUNJRklFRBAAEhAKDEFMV0FZU19BTExPVxABEhcKE1JF",
            "UVVJUkVfQVRURVNUQVRJT04QAhIPCgtBTFdBWVNfREVOWRADInAKD0VuZm9y",
            "Y2VtZW50TW9kZRIgChxFTkZPUkNFTUVOVF9NT0RFX1VOU1BFQ0lGSUVEEAAS",
            "IAocRU5GT1JDRURfQkxPQ0tfQU5EX0FVRElUX0xPRxABEhkKFURSWVJVTl9B",
            "VURJVF9MT0dfT05MWRACIrcCCghBdHRlc3RvchIRCgRuYW1lGAEgASgJQgPg",
            "QQISGAoLZGVzY3JpcHRpb24YBiABKAlCA+BBARJcChd1c2VyX293bmVkX2dy",
            "YWZlYXNfbm90ZRgDIAEoCzI5Lmdvb2dsZS5jbG91ZC5iaW5hcnlhdXRob3Jp",
            "emF0aW9uLnYxLlVzZXJPd25lZEdyYWZlYXNOb3RlSAASNAoLdXBkYXRlX3Rp",
            "bWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQM6WepB",
            "VgorYmluYXJ5YXV0aG9yaXphdGlvbi5nb29nbGVhcGlzLmNvbS9BdHRlc3Rv",
            "chIncHJvamVjdHMve3Byb2plY3R9L2F0dGVzdG9ycy97YXR0ZXN0b3J9Qg8K",
            "DWF0dGVzdG9yX3R5cGUitAEKFFVzZXJPd25lZEdyYWZlYXNOb3RlEhsKDm5v",
            "dGVfcmVmZXJlbmNlGAEgASgJQgPgQQISUAoLcHVibGljX2tleXMYAiADKAsy",
            "Ni5nb29nbGUuY2xvdWQuYmluYXJ5YXV0aG9yaXphdGlvbi52MS5BdHRlc3Rv",
            "clB1YmxpY0tleUID4EEBEi0KIGRlbGVnYXRpb25fc2VydmljZV9hY2NvdW50",
            "X2VtYWlsGAMgASgJQgPgQQMivwQKDVBraXhQdWJsaWNLZXkSFgoOcHVibGlj",
            "X2tleV9wZW0YASABKAkSYgoTc2lnbmF0dXJlX2FsZ29yaXRobRgCIAEoDjJF",
            "Lmdvb2dsZS5jbG91ZC5iaW5hcnlhdXRob3JpemF0aW9uLnYxLlBraXhQdWJs",
            "aWNLZXkuU2lnbmF0dXJlQWxnb3JpdGhtIrEDChJTaWduYXR1cmVBbGdvcml0",
            "aG0SIwofU0lHTkFUVVJFX0FMR09SSVRITV9VTlNQRUNJRklFRBAAEhcKE1JT",
            "QV9QU1NfMjA0OF9TSEEyNTYQARIXChNSU0FfUFNTXzMwNzJfU0hBMjU2EAIS",
            "FwoTUlNBX1BTU180MDk2X1NIQTI1NhADEhcKE1JTQV9QU1NfNDA5Nl9TSEE1",
            "MTIQBBIeChpSU0FfU0lHTl9QS0NTMV8yMDQ4X1NIQTI1NhAFEh4KGlJTQV9T",
            "SUdOX1BLQ1MxXzMwNzJfU0hBMjU2EAYSHgoaUlNBX1NJR05fUEtDUzFfNDA5",
            "Nl9TSEEyNTYQBxIeChpSU0FfU0lHTl9QS0NTMV80MDk2X1NIQTUxMhAIEhUK",
            "EUVDRFNBX1AyNTZfU0hBMjU2EAkSFwoTRUNfU0lHTl9QMjU2X1NIQTI1NhAJ",
            "EhUKEUVDRFNBX1AzODRfU0hBMzg0EAoSFwoTRUNfU0lHTl9QMzg0X1NIQTM4",
            "NBAKEhUKEUVDRFNBX1A1MjFfU0hBNTEyEAsSFwoTRUNfU0lHTl9QNTIxX1NI",
            "QTUxMhALGgIQASK6AQoRQXR0ZXN0b3JQdWJsaWNLZXkSFAoHY29tbWVudBgB",
            "IAEoCUID4EEBEgoKAmlkGAIgASgJEiYKHGFzY2lpX2FybW9yZWRfcGdwX3B1",
            "YmxpY19rZXkYAyABKAlIABJNCg9wa2l4X3B1YmxpY19rZXkYBSABKAsyMi5n",
            "b29nbGUuY2xvdWQuYmluYXJ5YXV0aG9yaXphdGlvbi52MS5Qa2l4UHVibGlj",
            "S2V5SABCDAoKcHVibGljX2tleUKJAgo1Y29tLmdvb2dsZS5wcm90b3MuZ29v",
            "Z2xlLmNsb3VkLmJpbmFyeWF1dGhvcml6YXRpb24udjFQAFpWZ29vZ2xlLmdv",
            "bGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9jbG91ZC9iaW5hcnlhdXRo",
            "b3JpemF0aW9uL3YxO2JpbmFyeWF1dGhvcml6YXRpb274AQGqAiNHb29nbGUu",
            "Q2xvdWQuQmluYXJ5QXV0aG9yaXphdGlvbi5WMcoCI0dvb2dsZVxDbG91ZFxC",
            "aW5hcnlBdXRob3JpemF0aW9uXFYx6gImR29vZ2xlOjpDbG91ZDo6QmluYXJ5",
            "QXV0aG9yaXphdGlvbjo6VjFiBnByb3RvMw=="));
      descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
          new pbr::FileDescriptor[] { global::Google.Api.FieldBehaviorReflection.Descriptor, global::Google.Api.ResourceReflection.Descriptor, global::Google.Protobuf.WellKnownTypes.TimestampReflection.Descriptor, global::Google.Api.AnnotationsReflection.Descriptor, },
          new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.Policy), global::Google.Cloud.BinaryAuthorization.V1.Policy.Parser, new[]{ "Name", "Description", "GlobalPolicyEvaluationMode", "AdmissionWhitelistPatterns", "ClusterAdmissionRules", "KubernetesNamespaceAdmissionRules", "KubernetesServiceAccountAdmissionRules", "IstioServiceIdentityAdmissionRules", "DefaultAdmissionRule", "UpdateTime" }, null, new[]{ typeof(global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode) }, null, new pbr::GeneratedClrTypeInfo[] { null, null, null, null, }),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern), global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern.Parser, new[]{ "NamePattern" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule), global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Parser, new[]{ "EvaluationMode", "RequireAttestationsBy", "EnforcementMode" }, null, new[]{ typeof(global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode), typeof(global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode) }, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.Attestor), global::Google.Cloud.BinaryAuthorization.V1.Attestor.Parser, new[]{ "Name", "Description", "UserOwnedGrafeasNote", "UpdateTime" }, new[]{ "AttestorType" }, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote), global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote.Parser, new[]{ "NoteReference", "PublicKeys", "DelegationServiceAccountEmail" }, null, null, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey), global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Parser, new[]{ "PublicKeyPem", "SignatureAlgorithm" }, null, new[]{ typeof(global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm) }, null, null),
            new pbr::GeneratedClrTypeInfo(typeof(global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey), global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey.Parser, new[]{ "Comment", "Id", "AsciiArmoredPgpPublicKey", "PkixPublicKey" }, new[]{ "PublicKey" }, null, null, null)
          }));
    }
    #endregion

  }
  #region Messages
  /// <summary>
  /// A [policy][google.cloud.binaryauthorization.v1.Policy] for container image binary authorization.
  /// </summary>
  public sealed partial class Policy : pb::IMessage<Policy>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<Policy> _parser = new pb::MessageParser<Policy>(() => new Policy());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<Policy> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[0]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Policy() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Policy(Policy other) : this() {
      name_ = other.name_;
      description_ = other.description_;
      globalPolicyEvaluationMode_ = other.globalPolicyEvaluationMode_;
      admissionWhitelistPatterns_ = other.admissionWhitelistPatterns_.Clone();
      clusterAdmissionRules_ = other.clusterAdmissionRules_.Clone();
      kubernetesNamespaceAdmissionRules_ = other.kubernetesNamespaceAdmissionRules_.Clone();
      kubernetesServiceAccountAdmissionRules_ = other.kubernetesServiceAccountAdmissionRules_.Clone();
      istioServiceIdentityAdmissionRules_ = other.istioServiceIdentityAdmissionRules_.Clone();
      defaultAdmissionRule_ = other.defaultAdmissionRule_ != null ? other.defaultAdmissionRule_.Clone() : null;
      updateTime_ = other.updateTime_ != null ? other.updateTime_.Clone() : null;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Policy Clone() {
      return new Policy(this);
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 1;
    private string name_ = "";
    /// <summary>
    /// Output only. The resource name, in the format `projects/*/policy`. There is
    /// at most one policy per project.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "description" field.</summary>
    public const int DescriptionFieldNumber = 6;
    private string description_ = "";
    /// <summary>
    /// Optional. A descriptive comment.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Description {
      get { return description_; }
      set {
        description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "global_policy_evaluation_mode" field.</summary>
    public const int GlobalPolicyEvaluationModeFieldNumber = 7;
    private global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode globalPolicyEvaluationMode_ = global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode.Unspecified;
    /// <summary>
    /// Optional. Controls the evaluation of a Google-maintained global admission
    /// policy for common system-level images. Images not covered by the global
    /// policy will be subject to the project admission policy. This setting
    /// has no effect when specified inside a global admission policy.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode GlobalPolicyEvaluationMode {
      get { return globalPolicyEvaluationMode_; }
      set {
        globalPolicyEvaluationMode_ = value;
      }
    }

    /// <summary>Field number for the "admission_whitelist_patterns" field.</summary>
    public const int AdmissionWhitelistPatternsFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern> _repeated_admissionWhitelistPatterns_codec
        = pb::FieldCodec.ForMessage(18, global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern.Parser);
    private readonly pbc::RepeatedField<global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern> admissionWhitelistPatterns_ = new pbc::RepeatedField<global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern>();
    /// <summary>
    /// Optional. Admission policy allowlisting. A matching admission request will
    /// always be permitted. This feature is typically used to exclude Google or
    /// third-party infrastructure images from Binary Authorization policies.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Google.Cloud.BinaryAuthorization.V1.AdmissionWhitelistPattern> AdmissionWhitelistPatterns {
      get { return admissionWhitelistPatterns_; }
    }

    /// <summary>Field number for the "cluster_admission_rules" field.</summary>
    public const int ClusterAdmissionRulesFieldNumber = 3;
    private static readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec _map_clusterAdmissionRules_codec
        = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Parser), 26);
    private readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> clusterAdmissionRules_ = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>();
    /// <summary>
    /// Optional. Per-cluster admission rules. Cluster spec format:
    /// `location.clusterId`. There can be at most one admission rule per cluster
    /// spec.
    /// A `location` is either a compute zone (e.g. us-central1-a) or a region
    /// (e.g. us-central1).
    /// For `clusterId` syntax restrictions see
    /// https://cloud.google.com/container-engine/reference/rest/v1/projects.zones.clusters.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> ClusterAdmissionRules {
      get { return clusterAdmissionRules_; }
    }

    /// <summary>Field number for the "kubernetes_namespace_admission_rules" field.</summary>
    public const int KubernetesNamespaceAdmissionRulesFieldNumber = 10;
    private static readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec _map_kubernetesNamespaceAdmissionRules_codec
        = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Parser), 82);
    private readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> kubernetesNamespaceAdmissionRules_ = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>();
    /// <summary>
    /// Optional. Per-kubernetes-namespace admission rules. K8s namespace spec format:
    /// [a-z.-]+, e.g. 'some-namespace'
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> KubernetesNamespaceAdmissionRules {
      get { return kubernetesNamespaceAdmissionRules_; }
    }

    /// <summary>Field number for the "kubernetes_service_account_admission_rules" field.</summary>
    public const int KubernetesServiceAccountAdmissionRulesFieldNumber = 8;
    private static readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec _map_kubernetesServiceAccountAdmissionRules_codec
        = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Parser), 66);
    private readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> kubernetesServiceAccountAdmissionRules_ = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>();
    /// <summary>
    /// Optional. Per-kubernetes-service-account admission rules. Service account
    /// spec format: `namespace:serviceaccount`. e.g. 'test-ns:default'
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> KubernetesServiceAccountAdmissionRules {
      get { return kubernetesServiceAccountAdmissionRules_; }
    }

    /// <summary>Field number for the "istio_service_identity_admission_rules" field.</summary>
    public const int IstioServiceIdentityAdmissionRulesFieldNumber = 9;
    private static readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec _map_istioServiceIdentityAdmissionRules_codec
        = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForMessage(18, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Parser), 74);
    private readonly pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> istioServiceIdentityAdmissionRules_ = new pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule>();
    /// <summary>
    /// Optional. Per-istio-service-identity admission rules. Istio service
    /// identity spec format:
    /// spiffe://&lt;domain>/ns/&lt;namespace>/sa/&lt;serviceaccount> or
    /// &lt;domain>/ns/&lt;namespace>/sa/&lt;serviceaccount>
    /// e.g. spiffe://example.com/ns/test-ns/sa/default
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::MapField<string, global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule> IstioServiceIdentityAdmissionRules {
      get { return istioServiceIdentityAdmissionRules_; }
    }

    /// <summary>Field number for the "default_admission_rule" field.</summary>
    public const int DefaultAdmissionRuleFieldNumber = 4;
    private global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule defaultAdmissionRule_;
    /// <summary>
    /// Required. Default admission rule for a cluster without a per-cluster, per-
    /// kubernetes-service-account, or per-istio-service-identity admission rule.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule DefaultAdmissionRule {
      get { return defaultAdmissionRule_; }
      set {
        defaultAdmissionRule_ = value;
      }
    }

    /// <summary>Field number for the "update_time" field.</summary>
    public const int UpdateTimeFieldNumber = 5;
    private global::Google.Protobuf.WellKnownTypes.Timestamp updateTime_;
    /// <summary>
    /// Output only. Time when the policy was last updated.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp UpdateTime {
      get { return updateTime_; }
      set {
        updateTime_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as Policy);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(Policy other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) return false;
      if (Description != other.Description) return false;
      if (GlobalPolicyEvaluationMode != other.GlobalPolicyEvaluationMode) return false;
      if(!admissionWhitelistPatterns_.Equals(other.admissionWhitelistPatterns_)) return false;
      if (!ClusterAdmissionRules.Equals(other.ClusterAdmissionRules)) return false;
      if (!KubernetesNamespaceAdmissionRules.Equals(other.KubernetesNamespaceAdmissionRules)) return false;
      if (!KubernetesServiceAccountAdmissionRules.Equals(other.KubernetesServiceAccountAdmissionRules)) return false;
      if (!IstioServiceIdentityAdmissionRules.Equals(other.IstioServiceIdentityAdmissionRules)) return false;
      if (!object.Equals(DefaultAdmissionRule, other.DefaultAdmissionRule)) return false;
      if (!object.Equals(UpdateTime, other.UpdateTime)) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Description.Length != 0) hash ^= Description.GetHashCode();
      if (GlobalPolicyEvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode.Unspecified) hash ^= GlobalPolicyEvaluationMode.GetHashCode();
      hash ^= admissionWhitelistPatterns_.GetHashCode();
      hash ^= ClusterAdmissionRules.GetHashCode();
      hash ^= KubernetesNamespaceAdmissionRules.GetHashCode();
      hash ^= KubernetesServiceAccountAdmissionRules.GetHashCode();
      hash ^= IstioServiceIdentityAdmissionRules.GetHashCode();
      if (defaultAdmissionRule_ != null) hash ^= DefaultAdmissionRule.GetHashCode();
      if (updateTime_ != null) hash ^= UpdateTime.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      admissionWhitelistPatterns_.WriteTo(output, _repeated_admissionWhitelistPatterns_codec);
      clusterAdmissionRules_.WriteTo(output, _map_clusterAdmissionRules_codec);
      if (defaultAdmissionRule_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(DefaultAdmissionRule);
      }
      if (updateTime_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(UpdateTime);
      }
      if (Description.Length != 0) {
        output.WriteRawTag(50);
        output.WriteString(Description);
      }
      if (GlobalPolicyEvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode.Unspecified) {
        output.WriteRawTag(56);
        output.WriteEnum((int) GlobalPolicyEvaluationMode);
      }
      kubernetesServiceAccountAdmissionRules_.WriteTo(output, _map_kubernetesServiceAccountAdmissionRules_codec);
      istioServiceIdentityAdmissionRules_.WriteTo(output, _map_istioServiceIdentityAdmissionRules_codec);
      kubernetesNamespaceAdmissionRules_.WriteTo(output, _map_kubernetesNamespaceAdmissionRules_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      admissionWhitelistPatterns_.WriteTo(ref output, _repeated_admissionWhitelistPatterns_codec);
      clusterAdmissionRules_.WriteTo(ref output, _map_clusterAdmissionRules_codec);
      if (defaultAdmissionRule_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(DefaultAdmissionRule);
      }
      if (updateTime_ != null) {
        output.WriteRawTag(42);
        output.WriteMessage(UpdateTime);
      }
      if (Description.Length != 0) {
        output.WriteRawTag(50);
        output.WriteString(Description);
      }
      if (GlobalPolicyEvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode.Unspecified) {
        output.WriteRawTag(56);
        output.WriteEnum((int) GlobalPolicyEvaluationMode);
      }
      kubernetesServiceAccountAdmissionRules_.WriteTo(ref output, _map_kubernetesServiceAccountAdmissionRules_codec);
      istioServiceIdentityAdmissionRules_.WriteTo(ref output, _map_istioServiceIdentityAdmissionRules_codec);
      kubernetesNamespaceAdmissionRules_.WriteTo(ref output, _map_kubernetesNamespaceAdmissionRules_codec);
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Description.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
      }
      if (GlobalPolicyEvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) GlobalPolicyEvaluationMode);
      }
      size += admissionWhitelistPatterns_.CalculateSize(_repeated_admissionWhitelistPatterns_codec);
      size += clusterAdmissionRules_.CalculateSize(_map_clusterAdmissionRules_codec);
      size += kubernetesNamespaceAdmissionRules_.CalculateSize(_map_kubernetesNamespaceAdmissionRules_codec);
      size += kubernetesServiceAccountAdmissionRules_.CalculateSize(_map_kubernetesServiceAccountAdmissionRules_codec);
      size += istioServiceIdentityAdmissionRules_.CalculateSize(_map_istioServiceIdentityAdmissionRules_codec);
      if (defaultAdmissionRule_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(DefaultAdmissionRule);
      }
      if (updateTime_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(UpdateTime);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(Policy other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Description.Length != 0) {
        Description = other.Description;
      }
      if (other.GlobalPolicyEvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode.Unspecified) {
        GlobalPolicyEvaluationMode = other.GlobalPolicyEvaluationMode;
      }
      admissionWhitelistPatterns_.Add(other.admissionWhitelistPatterns_);
      clusterAdmissionRules_.Add(other.clusterAdmissionRules_);
      kubernetesNamespaceAdmissionRules_.Add(other.kubernetesNamespaceAdmissionRules_);
      kubernetesServiceAccountAdmissionRules_.Add(other.kubernetesServiceAccountAdmissionRules_);
      istioServiceIdentityAdmissionRules_.Add(other.istioServiceIdentityAdmissionRules_);
      if (other.defaultAdmissionRule_ != null) {
        if (defaultAdmissionRule_ == null) {
          DefaultAdmissionRule = new global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule();
        }
        DefaultAdmissionRule.MergeFrom(other.DefaultAdmissionRule);
      }
      if (other.updateTime_ != null) {
        if (updateTime_ == null) {
          UpdateTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        UpdateTime.MergeFrom(other.UpdateTime);
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 18: {
            admissionWhitelistPatterns_.AddEntriesFrom(input, _repeated_admissionWhitelistPatterns_codec);
            break;
          }
          case 26: {
            clusterAdmissionRules_.AddEntriesFrom(input, _map_clusterAdmissionRules_codec);
            break;
          }
          case 34: {
            if (defaultAdmissionRule_ == null) {
              DefaultAdmissionRule = new global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule();
            }
            input.ReadMessage(DefaultAdmissionRule);
            break;
          }
          case 42: {
            if (updateTime_ == null) {
              UpdateTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdateTime);
            break;
          }
          case 50: {
            Description = input.ReadString();
            break;
          }
          case 56: {
            GlobalPolicyEvaluationMode = (global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode) input.ReadEnum();
            break;
          }
          case 66: {
            kubernetesServiceAccountAdmissionRules_.AddEntriesFrom(input, _map_kubernetesServiceAccountAdmissionRules_codec);
            break;
          }
          case 74: {
            istioServiceIdentityAdmissionRules_.AddEntriesFrom(input, _map_istioServiceIdentityAdmissionRules_codec);
            break;
          }
          case 82: {
            kubernetesNamespaceAdmissionRules_.AddEntriesFrom(input, _map_kubernetesNamespaceAdmissionRules_codec);
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 18: {
            admissionWhitelistPatterns_.AddEntriesFrom(ref input, _repeated_admissionWhitelistPatterns_codec);
            break;
          }
          case 26: {
            clusterAdmissionRules_.AddEntriesFrom(ref input, _map_clusterAdmissionRules_codec);
            break;
          }
          case 34: {
            if (defaultAdmissionRule_ == null) {
              DefaultAdmissionRule = new global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule();
            }
            input.ReadMessage(DefaultAdmissionRule);
            break;
          }
          case 42: {
            if (updateTime_ == null) {
              UpdateTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdateTime);
            break;
          }
          case 50: {
            Description = input.ReadString();
            break;
          }
          case 56: {
            GlobalPolicyEvaluationMode = (global::Google.Cloud.BinaryAuthorization.V1.Policy.Types.GlobalPolicyEvaluationMode) input.ReadEnum();
            break;
          }
          case 66: {
            kubernetesServiceAccountAdmissionRules_.AddEntriesFrom(ref input, _map_kubernetesServiceAccountAdmissionRules_codec);
            break;
          }
          case 74: {
            istioServiceIdentityAdmissionRules_.AddEntriesFrom(ref input, _map_istioServiceIdentityAdmissionRules_codec);
            break;
          }
          case 82: {
            kubernetesNamespaceAdmissionRules_.AddEntriesFrom(ref input, _map_kubernetesNamespaceAdmissionRules_codec);
            break;
          }
        }
      }
    }
    #endif

    #region Nested types
    /// <summary>Container for nested types declared in the Policy message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static partial class Types {
      public enum GlobalPolicyEvaluationMode {
        /// <summary>
        /// Not specified: DISABLE is assumed.
        /// </summary>
        [pbr::OriginalName("GLOBAL_POLICY_EVALUATION_MODE_UNSPECIFIED")] Unspecified = 0,
        /// <summary>
        /// Enables system policy evaluation.
        /// </summary>
        [pbr::OriginalName("ENABLE")] Enable = 1,
        /// <summary>
        /// Disables system policy evaluation.
        /// </summary>
        [pbr::OriginalName("DISABLE")] Disable = 2,
      }

    }
    #endregion

  }

  /// <summary>
  /// An [admission allowlist pattern][google.cloud.binaryauthorization.v1.AdmissionWhitelistPattern] exempts images
  /// from checks by [admission rules][google.cloud.binaryauthorization.v1.AdmissionRule].
  /// </summary>
  public sealed partial class AdmissionWhitelistPattern : pb::IMessage<AdmissionWhitelistPattern>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<AdmissionWhitelistPattern> _parser = new pb::MessageParser<AdmissionWhitelistPattern>(() => new AdmissionWhitelistPattern());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<AdmissionWhitelistPattern> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[1]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdmissionWhitelistPattern() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdmissionWhitelistPattern(AdmissionWhitelistPattern other) : this() {
      namePattern_ = other.namePattern_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdmissionWhitelistPattern Clone() {
      return new AdmissionWhitelistPattern(this);
    }

    /// <summary>Field number for the "name_pattern" field.</summary>
    public const int NamePatternFieldNumber = 1;
    private string namePattern_ = "";
    /// <summary>
    /// An image name pattern to allowlist, in the form `registry/path/to/image`.
    /// This supports a trailing `*` wildcard, but this is allowed only in
    /// text after the `registry/` part. This also supports a trailing `**`
    /// wildcard which matches subdirectories of a given entry.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string NamePattern {
      get { return namePattern_; }
      set {
        namePattern_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as AdmissionWhitelistPattern);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(AdmissionWhitelistPattern other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (NamePattern != other.NamePattern) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (NamePattern.Length != 0) hash ^= NamePattern.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (NamePattern.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NamePattern);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (NamePattern.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NamePattern);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (NamePattern.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NamePattern);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(AdmissionWhitelistPattern other) {
      if (other == null) {
        return;
      }
      if (other.NamePattern.Length != 0) {
        NamePattern = other.NamePattern;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            NamePattern = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            NamePattern = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// An [admission rule][google.cloud.binaryauthorization.v1.AdmissionRule] specifies either that all container images
  /// used in a pod creation request must be attested to by one or more
  /// [attestors][google.cloud.binaryauthorization.v1.Attestor], that all pod creations will be allowed, or that all
  /// pod creations will be denied.
  ///
  /// Images matching an [admission allowlist pattern][google.cloud.binaryauthorization.v1.AdmissionWhitelistPattern]
  /// are exempted from admission rules and will never block a pod creation.
  /// </summary>
  public sealed partial class AdmissionRule : pb::IMessage<AdmissionRule>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<AdmissionRule> _parser = new pb::MessageParser<AdmissionRule>(() => new AdmissionRule());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<AdmissionRule> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[2]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdmissionRule() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdmissionRule(AdmissionRule other) : this() {
      evaluationMode_ = other.evaluationMode_;
      requireAttestationsBy_ = other.requireAttestationsBy_.Clone();
      enforcementMode_ = other.enforcementMode_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AdmissionRule Clone() {
      return new AdmissionRule(this);
    }

    /// <summary>Field number for the "evaluation_mode" field.</summary>
    public const int EvaluationModeFieldNumber = 1;
    private global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode evaluationMode_ = global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode.Unspecified;
    /// <summary>
    /// Required. How this admission rule will be evaluated.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode EvaluationMode {
      get { return evaluationMode_; }
      set {
        evaluationMode_ = value;
      }
    }

    /// <summary>Field number for the "require_attestations_by" field.</summary>
    public const int RequireAttestationsByFieldNumber = 2;
    private static readonly pb::FieldCodec<string> _repeated_requireAttestationsBy_codec
        = pb::FieldCodec.ForString(18);
    private readonly pbc::RepeatedField<string> requireAttestationsBy_ = new pbc::RepeatedField<string>();
    /// <summary>
    /// Optional. The resource names of the attestors that must attest to
    /// a container image, in the format `projects/*/attestors/*`. Each
    /// attestor must exist before a policy can reference it.  To add an attestor
    /// to a policy the principal issuing the policy change request must be able
    /// to read the attestor resource.
    ///
    /// Note: this field must be non-empty when the evaluation_mode field specifies
    /// REQUIRE_ATTESTATION, otherwise it must be empty.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<string> RequireAttestationsBy {
      get { return requireAttestationsBy_; }
    }

    /// <summary>Field number for the "enforcement_mode" field.</summary>
    public const int EnforcementModeFieldNumber = 3;
    private global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode enforcementMode_ = global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode.Unspecified;
    /// <summary>
    /// Required. The action when a pod creation is denied by the admission rule.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode EnforcementMode {
      get { return enforcementMode_; }
      set {
        enforcementMode_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as AdmissionRule);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(AdmissionRule other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (EvaluationMode != other.EvaluationMode) return false;
      if(!requireAttestationsBy_.Equals(other.requireAttestationsBy_)) return false;
      if (EnforcementMode != other.EnforcementMode) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (EvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode.Unspecified) hash ^= EvaluationMode.GetHashCode();
      hash ^= requireAttestationsBy_.GetHashCode();
      if (EnforcementMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode.Unspecified) hash ^= EnforcementMode.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (EvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode.Unspecified) {
        output.WriteRawTag(8);
        output.WriteEnum((int) EvaluationMode);
      }
      requireAttestationsBy_.WriteTo(output, _repeated_requireAttestationsBy_codec);
      if (EnforcementMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode.Unspecified) {
        output.WriteRawTag(24);
        output.WriteEnum((int) EnforcementMode);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (EvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode.Unspecified) {
        output.WriteRawTag(8);
        output.WriteEnum((int) EvaluationMode);
      }
      requireAttestationsBy_.WriteTo(ref output, _repeated_requireAttestationsBy_codec);
      if (EnforcementMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode.Unspecified) {
        output.WriteRawTag(24);
        output.WriteEnum((int) EnforcementMode);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (EvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) EvaluationMode);
      }
      size += requireAttestationsBy_.CalculateSize(_repeated_requireAttestationsBy_codec);
      if (EnforcementMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) EnforcementMode);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(AdmissionRule other) {
      if (other == null) {
        return;
      }
      if (other.EvaluationMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode.Unspecified) {
        EvaluationMode = other.EvaluationMode;
      }
      requireAttestationsBy_.Add(other.requireAttestationsBy_);
      if (other.EnforcementMode != global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode.Unspecified) {
        EnforcementMode = other.EnforcementMode;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 8: {
            EvaluationMode = (global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode) input.ReadEnum();
            break;
          }
          case 18: {
            requireAttestationsBy_.AddEntriesFrom(input, _repeated_requireAttestationsBy_codec);
            break;
          }
          case 24: {
            EnforcementMode = (global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode) input.ReadEnum();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 8: {
            EvaluationMode = (global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EvaluationMode) input.ReadEnum();
            break;
          }
          case 18: {
            requireAttestationsBy_.AddEntriesFrom(ref input, _repeated_requireAttestationsBy_codec);
            break;
          }
          case 24: {
            EnforcementMode = (global::Google.Cloud.BinaryAuthorization.V1.AdmissionRule.Types.EnforcementMode) input.ReadEnum();
            break;
          }
        }
      }
    }
    #endif

    #region Nested types
    /// <summary>Container for nested types declared in the AdmissionRule message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static partial class Types {
      public enum EvaluationMode {
        /// <summary>
        /// Do not use.
        /// </summary>
        [pbr::OriginalName("EVALUATION_MODE_UNSPECIFIED")] Unspecified = 0,
        /// <summary>
        /// This rule allows all all pod creations.
        /// </summary>
        [pbr::OriginalName("ALWAYS_ALLOW")] AlwaysAllow = 1,
        /// <summary>
        /// This rule allows a pod creation if all the attestors listed in
        /// 'require_attestations_by' have valid attestations for all of the
        /// images in the pod spec.
        /// </summary>
        [pbr::OriginalName("REQUIRE_ATTESTATION")] RequireAttestation = 2,
        /// <summary>
        /// This rule denies all pod creations.
        /// </summary>
        [pbr::OriginalName("ALWAYS_DENY")] AlwaysDeny = 3,
      }

      /// <summary>
      /// Defines the possible actions when a pod creation is denied by an admission
      /// rule.
      /// </summary>
      public enum EnforcementMode {
        /// <summary>
        /// Do not use.
        /// </summary>
        [pbr::OriginalName("ENFORCEMENT_MODE_UNSPECIFIED")] Unspecified = 0,
        /// <summary>
        /// Enforce the admission rule by blocking the pod creation.
        /// </summary>
        [pbr::OriginalName("ENFORCED_BLOCK_AND_AUDIT_LOG")] EnforcedBlockAndAuditLog = 1,
        /// <summary>
        /// Dryrun mode: Audit logging only.  This will allow the pod creation as if
        /// the admission request had specified break-glass.
        /// </summary>
        [pbr::OriginalName("DRYRUN_AUDIT_LOG_ONLY")] DryrunAuditLogOnly = 2,
      }

    }
    #endregion

  }

  /// <summary>
  /// An [attestor][google.cloud.binaryauthorization.v1.Attestor] that attests to container image
  /// artifacts. An existing attestor cannot be modified except where
  /// indicated.
  /// </summary>
  public sealed partial class Attestor : pb::IMessage<Attestor>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<Attestor> _parser = new pb::MessageParser<Attestor>(() => new Attestor());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<Attestor> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[3]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Attestor() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Attestor(Attestor other) : this() {
      name_ = other.name_;
      description_ = other.description_;
      updateTime_ = other.updateTime_ != null ? other.updateTime_.Clone() : null;
      switch (other.AttestorTypeCase) {
        case AttestorTypeOneofCase.UserOwnedGrafeasNote:
          UserOwnedGrafeasNote = other.UserOwnedGrafeasNote.Clone();
          break;
      }

      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public Attestor Clone() {
      return new Attestor(this);
    }

    /// <summary>Field number for the "name" field.</summary>
    public const int NameFieldNumber = 1;
    private string name_ = "";
    /// <summary>
    /// Required. The resource name, in the format:
    /// `projects/*/attestors/*`. This field may not be updated.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Name {
      get { return name_; }
      set {
        name_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "description" field.</summary>
    public const int DescriptionFieldNumber = 6;
    private string description_ = "";
    /// <summary>
    /// Optional. A descriptive comment.  This field may be updated.
    /// The field may be displayed in chooser dialogs.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Description {
      get { return description_; }
      set {
        description_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "user_owned_grafeas_note" field.</summary>
    public const int UserOwnedGrafeasNoteFieldNumber = 3;
    /// <summary>
    /// This specifies how an attestation will be read, and how it will be used
    /// during policy enforcement.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote UserOwnedGrafeasNote {
      get { return attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote ? (global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote) attestorType_ : null; }
      set {
        attestorType_ = value;
        attestorTypeCase_ = value == null ? AttestorTypeOneofCase.None : AttestorTypeOneofCase.UserOwnedGrafeasNote;
      }
    }

    /// <summary>Field number for the "update_time" field.</summary>
    public const int UpdateTimeFieldNumber = 4;
    private global::Google.Protobuf.WellKnownTypes.Timestamp updateTime_;
    /// <summary>
    /// Output only. Time when the attestor was last updated.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Protobuf.WellKnownTypes.Timestamp UpdateTime {
      get { return updateTime_; }
      set {
        updateTime_ = value;
      }
    }

    private object attestorType_;
    /// <summary>Enum of possible cases for the "attestor_type" oneof.</summary>
    public enum AttestorTypeOneofCase {
      None = 0,
      UserOwnedGrafeasNote = 3,
    }
    private AttestorTypeOneofCase attestorTypeCase_ = AttestorTypeOneofCase.None;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AttestorTypeOneofCase AttestorTypeCase {
      get { return attestorTypeCase_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearAttestorType() {
      attestorTypeCase_ = AttestorTypeOneofCase.None;
      attestorType_ = null;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as Attestor);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(Attestor other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Name != other.Name) return false;
      if (Description != other.Description) return false;
      if (!object.Equals(UserOwnedGrafeasNote, other.UserOwnedGrafeasNote)) return false;
      if (!object.Equals(UpdateTime, other.UpdateTime)) return false;
      if (AttestorTypeCase != other.AttestorTypeCase) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Name.Length != 0) hash ^= Name.GetHashCode();
      if (Description.Length != 0) hash ^= Description.GetHashCode();
      if (attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote) hash ^= UserOwnedGrafeasNote.GetHashCode();
      if (updateTime_ != null) hash ^= UpdateTime.GetHashCode();
      hash ^= (int) attestorTypeCase_;
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      if (attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote) {
        output.WriteRawTag(26);
        output.WriteMessage(UserOwnedGrafeasNote);
      }
      if (updateTime_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(UpdateTime);
      }
      if (Description.Length != 0) {
        output.WriteRawTag(50);
        output.WriteString(Description);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Name.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Name);
      }
      if (attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote) {
        output.WriteRawTag(26);
        output.WriteMessage(UserOwnedGrafeasNote);
      }
      if (updateTime_ != null) {
        output.WriteRawTag(34);
        output.WriteMessage(UpdateTime);
      }
      if (Description.Length != 0) {
        output.WriteRawTag(50);
        output.WriteString(Description);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Name.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Name);
      }
      if (Description.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Description);
      }
      if (attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(UserOwnedGrafeasNote);
      }
      if (updateTime_ != null) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(UpdateTime);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(Attestor other) {
      if (other == null) {
        return;
      }
      if (other.Name.Length != 0) {
        Name = other.Name;
      }
      if (other.Description.Length != 0) {
        Description = other.Description;
      }
      if (other.updateTime_ != null) {
        if (updateTime_ == null) {
          UpdateTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
        }
        UpdateTime.MergeFrom(other.UpdateTime);
      }
      switch (other.AttestorTypeCase) {
        case AttestorTypeOneofCase.UserOwnedGrafeasNote:
          if (UserOwnedGrafeasNote == null) {
            UserOwnedGrafeasNote = new global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote();
          }
          UserOwnedGrafeasNote.MergeFrom(other.UserOwnedGrafeasNote);
          break;
      }

      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 26: {
            global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote subBuilder = new global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote();
            if (attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote) {
              subBuilder.MergeFrom(UserOwnedGrafeasNote);
            }
            input.ReadMessage(subBuilder);
            UserOwnedGrafeasNote = subBuilder;
            break;
          }
          case 34: {
            if (updateTime_ == null) {
              UpdateTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdateTime);
            break;
          }
          case 50: {
            Description = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Name = input.ReadString();
            break;
          }
          case 26: {
            global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote subBuilder = new global::Google.Cloud.BinaryAuthorization.V1.UserOwnedGrafeasNote();
            if (attestorTypeCase_ == AttestorTypeOneofCase.UserOwnedGrafeasNote) {
              subBuilder.MergeFrom(UserOwnedGrafeasNote);
            }
            input.ReadMessage(subBuilder);
            UserOwnedGrafeasNote = subBuilder;
            break;
          }
          case 34: {
            if (updateTime_ == null) {
              UpdateTime = new global::Google.Protobuf.WellKnownTypes.Timestamp();
            }
            input.ReadMessage(UpdateTime);
            break;
          }
          case 50: {
            Description = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// An [user owned Grafeas note][google.cloud.binaryauthorization.v1.UserOwnedGrafeasNote] references a Grafeas
  /// Attestation.Authority Note created by the user.
  /// </summary>
  public sealed partial class UserOwnedGrafeasNote : pb::IMessage<UserOwnedGrafeasNote>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<UserOwnedGrafeasNote> _parser = new pb::MessageParser<UserOwnedGrafeasNote>(() => new UserOwnedGrafeasNote());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<UserOwnedGrafeasNote> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[4]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public UserOwnedGrafeasNote() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public UserOwnedGrafeasNote(UserOwnedGrafeasNote other) : this() {
      noteReference_ = other.noteReference_;
      publicKeys_ = other.publicKeys_.Clone();
      delegationServiceAccountEmail_ = other.delegationServiceAccountEmail_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public UserOwnedGrafeasNote Clone() {
      return new UserOwnedGrafeasNote(this);
    }

    /// <summary>Field number for the "note_reference" field.</summary>
    public const int NoteReferenceFieldNumber = 1;
    private string noteReference_ = "";
    /// <summary>
    /// Required. The Grafeas resource name of a Attestation.Authority Note,
    /// created by the user, in the format: `projects/*/notes/*`. This field may
    /// not be updated.
    ///
    /// An attestation by this attestor is stored as a Grafeas
    /// Attestation.Authority Occurrence that names a container image and that
    /// links to this Note. Grafeas is an external dependency.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string NoteReference {
      get { return noteReference_; }
      set {
        noteReference_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "public_keys" field.</summary>
    public const int PublicKeysFieldNumber = 2;
    private static readonly pb::FieldCodec<global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey> _repeated_publicKeys_codec
        = pb::FieldCodec.ForMessage(18, global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey.Parser);
    private readonly pbc::RepeatedField<global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey> publicKeys_ = new pbc::RepeatedField<global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey>();
    /// <summary>
    /// Optional. Public keys that verify attestations signed by this
    /// attestor.  This field may be updated.
    ///
    /// If this field is non-empty, one of the specified public keys must
    /// verify that an attestation was signed by this attestor for the
    /// image specified in the admission request.
    ///
    /// If this field is empty, this attestor always returns that no
    /// valid attestations exist.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public pbc::RepeatedField<global::Google.Cloud.BinaryAuthorization.V1.AttestorPublicKey> PublicKeys {
      get { return publicKeys_; }
    }

    /// <summary>Field number for the "delegation_service_account_email" field.</summary>
    public const int DelegationServiceAccountEmailFieldNumber = 3;
    private string delegationServiceAccountEmail_ = "";
    /// <summary>
    /// Output only. This field will contain the service account email address
    /// that this Attestor will use as the principal when querying Container
    /// Analysis. Attestor administrators must grant this service account the
    /// IAM role needed to read attestations from the [note_reference][Note] in
    /// Container Analysis (`containeranalysis.notes.occurrences.viewer`).
    ///
    /// This email address is fixed for the lifetime of the Attestor, but callers
    /// should not make any other assumptions about the service account email;
    /// future versions may use an email based on a different naming pattern.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string DelegationServiceAccountEmail {
      get { return delegationServiceAccountEmail_; }
      set {
        delegationServiceAccountEmail_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as UserOwnedGrafeasNote);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(UserOwnedGrafeasNote other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (NoteReference != other.NoteReference) return false;
      if(!publicKeys_.Equals(other.publicKeys_)) return false;
      if (DelegationServiceAccountEmail != other.DelegationServiceAccountEmail) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (NoteReference.Length != 0) hash ^= NoteReference.GetHashCode();
      hash ^= publicKeys_.GetHashCode();
      if (DelegationServiceAccountEmail.Length != 0) hash ^= DelegationServiceAccountEmail.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (NoteReference.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NoteReference);
      }
      publicKeys_.WriteTo(output, _repeated_publicKeys_codec);
      if (DelegationServiceAccountEmail.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(DelegationServiceAccountEmail);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (NoteReference.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(NoteReference);
      }
      publicKeys_.WriteTo(ref output, _repeated_publicKeys_codec);
      if (DelegationServiceAccountEmail.Length != 0) {
        output.WriteRawTag(26);
        output.WriteString(DelegationServiceAccountEmail);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (NoteReference.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(NoteReference);
      }
      size += publicKeys_.CalculateSize(_repeated_publicKeys_codec);
      if (DelegationServiceAccountEmail.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(DelegationServiceAccountEmail);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(UserOwnedGrafeasNote other) {
      if (other == null) {
        return;
      }
      if (other.NoteReference.Length != 0) {
        NoteReference = other.NoteReference;
      }
      publicKeys_.Add(other.publicKeys_);
      if (other.DelegationServiceAccountEmail.Length != 0) {
        DelegationServiceAccountEmail = other.DelegationServiceAccountEmail;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            NoteReference = input.ReadString();
            break;
          }
          case 18: {
            publicKeys_.AddEntriesFrom(input, _repeated_publicKeys_codec);
            break;
          }
          case 26: {
            DelegationServiceAccountEmail = input.ReadString();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            NoteReference = input.ReadString();
            break;
          }
          case 18: {
            publicKeys_.AddEntriesFrom(ref input, _repeated_publicKeys_codec);
            break;
          }
          case 26: {
            DelegationServiceAccountEmail = input.ReadString();
            break;
          }
        }
      }
    }
    #endif

  }

  /// <summary>
  /// A public key in the PkixPublicKey format (see
  /// https://tools.ietf.org/html/rfc5280#section-4.1.2.7 for details).
  /// Public keys of this type are typically textually encoded using the PEM
  /// format.
  /// </summary>
  public sealed partial class PkixPublicKey : pb::IMessage<PkixPublicKey>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<PkixPublicKey> _parser = new pb::MessageParser<PkixPublicKey>(() => new PkixPublicKey());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<PkixPublicKey> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[5]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public PkixPublicKey() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public PkixPublicKey(PkixPublicKey other) : this() {
      publicKeyPem_ = other.publicKeyPem_;
      signatureAlgorithm_ = other.signatureAlgorithm_;
      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public PkixPublicKey Clone() {
      return new PkixPublicKey(this);
    }

    /// <summary>Field number for the "public_key_pem" field.</summary>
    public const int PublicKeyPemFieldNumber = 1;
    private string publicKeyPem_ = "";
    /// <summary>
    /// A PEM-encoded public key, as described in
    /// https://tools.ietf.org/html/rfc7468#section-13
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string PublicKeyPem {
      get { return publicKeyPem_; }
      set {
        publicKeyPem_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "signature_algorithm" field.</summary>
    public const int SignatureAlgorithmFieldNumber = 2;
    private global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm signatureAlgorithm_ = global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm.Unspecified;
    /// <summary>
    /// The signature algorithm used to verify a message against a signature using
    /// this key.
    /// These signature algorithm must match the structure and any object
    /// identifiers encoded in `public_key_pem` (i.e. this algorithm must match
    /// that of the public key).
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm SignatureAlgorithm {
      get { return signatureAlgorithm_; }
      set {
        signatureAlgorithm_ = value;
      }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as PkixPublicKey);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(PkixPublicKey other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (PublicKeyPem != other.PublicKeyPem) return false;
      if (SignatureAlgorithm != other.SignatureAlgorithm) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (PublicKeyPem.Length != 0) hash ^= PublicKeyPem.GetHashCode();
      if (SignatureAlgorithm != global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm.Unspecified) hash ^= SignatureAlgorithm.GetHashCode();
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (PublicKeyPem.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(PublicKeyPem);
      }
      if (SignatureAlgorithm != global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) SignatureAlgorithm);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (PublicKeyPem.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(PublicKeyPem);
      }
      if (SignatureAlgorithm != global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm.Unspecified) {
        output.WriteRawTag(16);
        output.WriteEnum((int) SignatureAlgorithm);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (PublicKeyPem.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(PublicKeyPem);
      }
      if (SignatureAlgorithm != global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm.Unspecified) {
        size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) SignatureAlgorithm);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(PkixPublicKey other) {
      if (other == null) {
        return;
      }
      if (other.PublicKeyPem.Length != 0) {
        PublicKeyPem = other.PublicKeyPem;
      }
      if (other.SignatureAlgorithm != global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm.Unspecified) {
        SignatureAlgorithm = other.SignatureAlgorithm;
      }
      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            PublicKeyPem = input.ReadString();
            break;
          }
          case 16: {
            SignatureAlgorithm = (global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm) input.ReadEnum();
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            PublicKeyPem = input.ReadString();
            break;
          }
          case 16: {
            SignatureAlgorithm = (global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey.Types.SignatureAlgorithm) input.ReadEnum();
            break;
          }
        }
      }
    }
    #endif

    #region Nested types
    /// <summary>Container for nested types declared in the PkixPublicKey message type.</summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static partial class Types {
      /// <summary>
      /// Represents a signature algorithm and other information necessary to verify
      /// signatures with a given public key.
      /// This is based primarily on the public key types supported by Tink's
      /// PemKeyType, which is in turn based on KMS's supported signing algorithms.
      /// See https://cloud.google.com/kms/docs/algorithms. In the future, BinAuthz
      /// might support additional public key types independently of Tink and/or KMS.
      /// </summary>
      public enum SignatureAlgorithm {
        /// <summary>
        /// Not specified.
        /// </summary>
        [pbr::OriginalName("SIGNATURE_ALGORITHM_UNSPECIFIED")] Unspecified = 0,
        /// <summary>
        /// RSASSA-PSS 2048 bit key with a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("RSA_PSS_2048_SHA256")] RsaPss2048Sha256 = 1,
        /// <summary>
        /// RSASSA-PSS 3072 bit key with a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("RSA_PSS_3072_SHA256")] RsaPss3072Sha256 = 2,
        /// <summary>
        /// RSASSA-PSS 4096 bit key with a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("RSA_PSS_4096_SHA256")] RsaPss4096Sha256 = 3,
        /// <summary>
        /// RSASSA-PSS 4096 bit key with a SHA512 digest.
        /// </summary>
        [pbr::OriginalName("RSA_PSS_4096_SHA512")] RsaPss4096Sha512 = 4,
        /// <summary>
        /// RSASSA-PKCS1-v1_5 with a 2048 bit key and a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("RSA_SIGN_PKCS1_2048_SHA256")] RsaSignPkcs12048Sha256 = 5,
        /// <summary>
        /// RSASSA-PKCS1-v1_5 with a 3072 bit key and a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("RSA_SIGN_PKCS1_3072_SHA256")] RsaSignPkcs13072Sha256 = 6,
        /// <summary>
        /// RSASSA-PKCS1-v1_5 with a 4096 bit key and a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("RSA_SIGN_PKCS1_4096_SHA256")] RsaSignPkcs14096Sha256 = 7,
        /// <summary>
        /// RSASSA-PKCS1-v1_5 with a 4096 bit key and a SHA512 digest.
        /// </summary>
        [pbr::OriginalName("RSA_SIGN_PKCS1_4096_SHA512")] RsaSignPkcs14096Sha512 = 8,
        /// <summary>
        /// ECDSA on the NIST P-256 curve with a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("ECDSA_P256_SHA256")] EcdsaP256Sha256 = 9,
        /// <summary>
        /// ECDSA on the NIST P-256 curve with a SHA256 digest.
        /// </summary>
        [pbr::OriginalName("EC_SIGN_P256_SHA256", PreferredAlias = false)] EcSignP256Sha256 = 9,
        /// <summary>
        /// ECDSA on the NIST P-384 curve with a SHA384 digest.
        /// </summary>
        [pbr::OriginalName("ECDSA_P384_SHA384")] EcdsaP384Sha384 = 10,
        /// <summary>
        /// ECDSA on the NIST P-384 curve with a SHA384 digest.
        /// </summary>
        [pbr::OriginalName("EC_SIGN_P384_SHA384", PreferredAlias = false)] EcSignP384Sha384 = 10,
        /// <summary>
        /// ECDSA on the NIST P-521 curve with a SHA512 digest.
        /// </summary>
        [pbr::OriginalName("ECDSA_P521_SHA512")] EcdsaP521Sha512 = 11,
        /// <summary>
        /// ECDSA on the NIST P-521 curve with a SHA512 digest.
        /// </summary>
        [pbr::OriginalName("EC_SIGN_P521_SHA512", PreferredAlias = false)] EcSignP521Sha512 = 11,
      }

    }
    #endregion

  }

  /// <summary>
  /// An [attestor public key][google.cloud.binaryauthorization.v1.AttestorPublicKey] that will be used to verify
  /// attestations signed by this attestor.
  /// </summary>
  public sealed partial class AttestorPublicKey : pb::IMessage<AttestorPublicKey>
  #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      , pb::IBufferMessage
  #endif
  {
    private static readonly pb::MessageParser<AttestorPublicKey> _parser = new pb::MessageParser<AttestorPublicKey>(() => new AttestorPublicKey());
    private pb::UnknownFieldSet _unknownFields;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pb::MessageParser<AttestorPublicKey> Parser { get { return _parser; } }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public static pbr::MessageDescriptor Descriptor {
      get { return global::Google.Cloud.BinaryAuthorization.V1.ResourcesReflection.Descriptor.MessageTypes[6]; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    pbr::MessageDescriptor pb::IMessage.Descriptor {
      get { return Descriptor; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AttestorPublicKey() {
      OnConstruction();
    }

    partial void OnConstruction();

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AttestorPublicKey(AttestorPublicKey other) : this() {
      comment_ = other.comment_;
      id_ = other.id_;
      switch (other.PublicKeyCase) {
        case PublicKeyOneofCase.AsciiArmoredPgpPublicKey:
          AsciiArmoredPgpPublicKey = other.AsciiArmoredPgpPublicKey;
          break;
        case PublicKeyOneofCase.PkixPublicKey:
          PkixPublicKey = other.PkixPublicKey.Clone();
          break;
      }

      _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public AttestorPublicKey Clone() {
      return new AttestorPublicKey(this);
    }

    /// <summary>Field number for the "comment" field.</summary>
    public const int CommentFieldNumber = 1;
    private string comment_ = "";
    /// <summary>
    /// Optional. A descriptive comment. This field may be updated.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Comment {
      get { return comment_; }
      set {
        comment_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "id" field.</summary>
    public const int IdFieldNumber = 2;
    private string id_ = "";
    /// <summary>
    /// The ID of this public key.
    /// Signatures verified by BinAuthz must include the ID of the public key that
    /// can be used to verify them, and that ID must match the contents of this
    /// field exactly.
    /// Additional restrictions on this field can be imposed based on which public
    /// key type is encapsulated. See the documentation on `public_key` cases below
    /// for details.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string Id {
      get { return id_; }
      set {
        id_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
      }
    }

    /// <summary>Field number for the "ascii_armored_pgp_public_key" field.</summary>
    public const int AsciiArmoredPgpPublicKeyFieldNumber = 3;
    /// <summary>
    /// ASCII-armored representation of a PGP public key, as the entire output by
    /// the command `gpg --export --armor foo@example.com` (either LF or CRLF
    /// line endings).
    /// When using this field, `id` should be left blank.  The BinAuthz API
    /// handlers will calculate the ID and fill it in automatically.  BinAuthz
    /// computes this ID as the OpenPGP RFC4880 V4 fingerprint, represented as
    /// upper-case hex.  If `id` is provided by the caller, it will be
    /// overwritten by the API-calculated ID.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public string AsciiArmoredPgpPublicKey {
      get { return publicKeyCase_ == PublicKeyOneofCase.AsciiArmoredPgpPublicKey ? (string) publicKey_ : ""; }
      set {
        publicKey_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
        publicKeyCase_ = PublicKeyOneofCase.AsciiArmoredPgpPublicKey;
      }
    }

    /// <summary>Field number for the "pkix_public_key" field.</summary>
    public const int PkixPublicKeyFieldNumber = 5;
    /// <summary>
    /// A raw PKIX SubjectPublicKeyInfo format public key.
    ///
    /// NOTE: `id` may be explicitly provided by the caller when using this
    /// type of public key, but it MUST be a valid RFC3986 URI. If `id` is left
    /// blank, a default one will be computed based on the digest of the DER
    /// encoding of the public key.
    /// </summary>
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey PkixPublicKey {
      get { return publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey ? (global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey) publicKey_ : null; }
      set {
        publicKey_ = value;
        publicKeyCase_ = value == null ? PublicKeyOneofCase.None : PublicKeyOneofCase.PkixPublicKey;
      }
    }

    private object publicKey_;
    /// <summary>Enum of possible cases for the "public_key" oneof.</summary>
    public enum PublicKeyOneofCase {
      None = 0,
      AsciiArmoredPgpPublicKey = 3,
      PkixPublicKey = 5,
    }
    private PublicKeyOneofCase publicKeyCase_ = PublicKeyOneofCase.None;
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public PublicKeyOneofCase PublicKeyCase {
      get { return publicKeyCase_; }
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void ClearPublicKey() {
      publicKeyCase_ = PublicKeyOneofCase.None;
      publicKey_ = null;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override bool Equals(object other) {
      return Equals(other as AttestorPublicKey);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public bool Equals(AttestorPublicKey other) {
      if (ReferenceEquals(other, null)) {
        return false;
      }
      if (ReferenceEquals(other, this)) {
        return true;
      }
      if (Comment != other.Comment) return false;
      if (Id != other.Id) return false;
      if (AsciiArmoredPgpPublicKey != other.AsciiArmoredPgpPublicKey) return false;
      if (!object.Equals(PkixPublicKey, other.PkixPublicKey)) return false;
      if (PublicKeyCase != other.PublicKeyCase) return false;
      return Equals(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override int GetHashCode() {
      int hash = 1;
      if (Comment.Length != 0) hash ^= Comment.GetHashCode();
      if (Id.Length != 0) hash ^= Id.GetHashCode();
      if (publicKeyCase_ == PublicKeyOneofCase.AsciiArmoredPgpPublicKey) hash ^= AsciiArmoredPgpPublicKey.GetHashCode();
      if (publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey) hash ^= PkixPublicKey.GetHashCode();
      hash ^= (int) publicKeyCase_;
      if (_unknownFields != null) {
        hash ^= _unknownFields.GetHashCode();
      }
      return hash;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public override string ToString() {
      return pb::JsonFormatter.ToDiagnosticString(this);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void WriteTo(pb::CodedOutputStream output) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      output.WriteRawMessage(this);
    #else
      if (Comment.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Comment);
      }
      if (Id.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Id);
      }
      if (publicKeyCase_ == PublicKeyOneofCase.AsciiArmoredPgpPublicKey) {
        output.WriteRawTag(26);
        output.WriteString(AsciiArmoredPgpPublicKey);
      }
      if (publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey) {
        output.WriteRawTag(42);
        output.WriteMessage(PkixPublicKey);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(output);
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
      if (Comment.Length != 0) {
        output.WriteRawTag(10);
        output.WriteString(Comment);
      }
      if (Id.Length != 0) {
        output.WriteRawTag(18);
        output.WriteString(Id);
      }
      if (publicKeyCase_ == PublicKeyOneofCase.AsciiArmoredPgpPublicKey) {
        output.WriteRawTag(26);
        output.WriteString(AsciiArmoredPgpPublicKey);
      }
      if (publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey) {
        output.WriteRawTag(42);
        output.WriteMessage(PkixPublicKey);
      }
      if (_unknownFields != null) {
        _unknownFields.WriteTo(ref output);
      }
    }
    #endif

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public int CalculateSize() {
      int size = 0;
      if (Comment.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Comment);
      }
      if (Id.Length != 0) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(Id);
      }
      if (publicKeyCase_ == PublicKeyOneofCase.AsciiArmoredPgpPublicKey) {
        size += 1 + pb::CodedOutputStream.ComputeStringSize(AsciiArmoredPgpPublicKey);
      }
      if (publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey) {
        size += 1 + pb::CodedOutputStream.ComputeMessageSize(PkixPublicKey);
      }
      if (_unknownFields != null) {
        size += _unknownFields.CalculateSize();
      }
      return size;
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(AttestorPublicKey other) {
      if (other == null) {
        return;
      }
      if (other.Comment.Length != 0) {
        Comment = other.Comment;
      }
      if (other.Id.Length != 0) {
        Id = other.Id;
      }
      switch (other.PublicKeyCase) {
        case PublicKeyOneofCase.AsciiArmoredPgpPublicKey:
          AsciiArmoredPgpPublicKey = other.AsciiArmoredPgpPublicKey;
          break;
        case PublicKeyOneofCase.PkixPublicKey:
          if (PkixPublicKey == null) {
            PkixPublicKey = new global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey();
          }
          PkixPublicKey.MergeFrom(other.PkixPublicKey);
          break;
      }

      _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
    }

    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    public void MergeFrom(pb::CodedInputStream input) {
    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
      input.ReadRawMessage(this);
    #else
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
            break;
          case 10: {
            Comment = input.ReadString();
            break;
          }
          case 18: {
            Id = input.ReadString();
            break;
          }
          case 26: {
            AsciiArmoredPgpPublicKey = input.ReadString();
            break;
          }
          case 42: {
            global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey subBuilder = new global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey();
            if (publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey) {
              subBuilder.MergeFrom(PkixPublicKey);
            }
            input.ReadMessage(subBuilder);
            PkixPublicKey = subBuilder;
            break;
          }
        }
      }
    #endif
    }

    #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
    [global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
    void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
      uint tag;
      while ((tag = input.ReadTag()) != 0) {
        switch(tag) {
          default:
            _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
            break;
          case 10: {
            Comment = input.ReadString();
            break;
          }
          case 18: {
            Id = input.ReadString();
            break;
          }
          case 26: {
            AsciiArmoredPgpPublicKey = input.ReadString();
            break;
          }
          case 42: {
            global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey subBuilder = new global::Google.Cloud.BinaryAuthorization.V1.PkixPublicKey();
            if (publicKeyCase_ == PublicKeyOneofCase.PkixPublicKey) {
              subBuilder.MergeFrom(PkixPublicKey);
            }
            input.ReadMessage(subBuilder);
            PkixPublicKey = subBuilder;
            break;
          }
        }
      }
    }
    #endif

  }

  #endregion

}

#endregion Designer generated code
