# -*- coding: utf-8 -*-
# Generated by the protocol buffer compiler.  DO NOT EDIT!
# source: chromiumos/signing.proto
"""Generated protocol buffer code."""
from google.protobuf import descriptor as _descriptor
from google.protobuf import descriptor_pool as _descriptor_pool
from google.protobuf import symbol_database as _symbol_database
from google.protobuf.internal import builder as _builder
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()


from chromite.api.gen_sdk.chromiumos import build_report_pb2 as chromiumos_dot_build__report__pb2
from chromite.api.gen_sdk.chromiumos import common_pb2 as chromiumos_dot_common__pb2


DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x63hromiumos/signing.proto\x12\nchromiumos\x1a\x1d\x63hromiumos/build_report.proto\x1a\x17\x63hromiumos/common.proto\"\x98\x02\n\rSigningConfig\x12\x14\n\x0c\x64isplay_name\x18\x01 \x01(\t\x12\x0e\n\x06keyset\x18\x02 \x01(\t\x12$\n\x07\x63hannel\x18\n \x01(\x0e\x32\x13.chromiumos.Channel\x12)\n\nimage_type\x18\x03 \x01(\x0e\x32\x15.chromiumos.ImageType\x12\x14\n\x0crecovery_zip\x18\x04 \x01(\x08\x12\x1a\n\x12\x65nsure_no_password\x18\x05 \x01(\x08\x12\x17\n\x0f\x66irmware_update\x18\x06 \x01(\x08\x12\x13\n\x0binput_files\x18\x07 \x03(\t\x12\x14\n\x0coutput_names\x18\x08 \x03(\t\x12\x14\n\x0c\x61rchive_path\x18\t \x01(\tJ\x04\x08\x0b\x10\x0c\"\x85\x01\n\x18\x42uildTargetSigningConfig\x12\x14\n\x0c\x62uild_target\x18\x01 \x01(\t\x12\x0e\n\x06keyset\x18\x03 \x01(\t\x12\x0f\n\x07version\x18\x04 \x01(\t\x12\x32\n\x0fsigning_configs\x18\x02 \x03(\x0b\x32\x19.chromiumos.SigningConfig\"g\n\x19\x42uildTargetSigningConfigs\x12J\n\x1c\x62uild_target_signing_configs\x18\x01 \x03(\x0b\x32$.chromiumos.BuildTargetSigningConfig\"\x8e\x01\n\x0eSignedArtifact\x12)\n\x06status\x18\x01 \x01(\x0e\x32\x19.chromiumos.SigningStatus\x12\x1c\n\x14signed_artifact_name\x18\x02 \x01(\t\x12\x33\n\x0f\x61rtifact_hashes\x18\x03 \x01(\x0b\x32\x1a.chromiumos.ArtifactHashes\"\xff\x02\n\x10\x41rchiveArtifacts\x12\x1a\n\x12input_archive_name\x18\x01 \x01(\t\x12)\n\nimage_type\x18\x07 \x01(\x0e\x32\x15.chromiumos.ImageType\x12\x0e\n\x06keyset\x18\x02 \x01(\t\x12\x14\n\x0ckeyset_is_mp\x18\n \x01(\x08\x12\x34\n\x10signed_artifacts\x18\x03 \x03(\x0b\x32\x1a.chromiumos.SignedArtifact\x12\x14\n\x0c\x62uild_target\x18\x04 \x01(\t\x12$\n\x07\x63hannel\x18\x05 \x01(\x0e\x32\x13.chromiumos.Channel\x12\x33\n\x0fkeyset_versions\x18\x08 \x01(\x0b\x32\x1a.chromiumos.KeysetVersions\x12Q\n\x0esigning_status\x18\t \x01(\x0e\x32\x39.chromiumos.BuildReport.SignedBuildMetadata.SigningStatusJ\x04\x08\x06\x10\x07\"U\n\x1a\x42uildTargetSignedArtifacts\x12\x37\n\x11\x61rchive_artifacts\x18\x01 \x03(\x0b\x32\x1c.chromiumos.ArchiveArtifacts\"|\n\x0eKeysetVersions\x12\x1c\n\x14\x66irmware_key_version\x18\x01 \x01(\x05\x12\x18\n\x10\x66irmware_version\x18\x02 \x01(\x05\x12\x1a\n\x12kernel_key_version\x18\x03 \x01(\x05\x12\x16\n\x0ekernel_version\x18\x04 \x01(\x05\"P\n\x0e\x41rtifactHashes\x12\x12\n\nsigned_md5\x18\x01 \x01(\t\x12\x13\n\x0bsigned_sha1\x18\x02 \x01(\t\x12\x15\n\rsigned_sha256\x18\x03 \x01(\t*M\n\rSigningStatus\x12\x14\n\x10STATUS_UNDEFINED\x10\x00\x12\x12\n\x0eSTATUS_SUCCESS\x10\x01\x12\x12\n\x0eSTATUS_FAILURE\x10\x02\x42Y\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumosb\x06proto3')

_globals = globals()
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'chromiumos.signing_pb2', _globals)
if _descriptor._USE_C_DESCRIPTORS == False:

  DESCRIPTOR._options = None
  DESCRIPTOR._serialized_options = b'\n!com.google.chrome.crosinfra.protoZ4go.chromium.org/chromiumos/infra/proto/go/chromiumos'
  _globals['_SIGNINGSTATUS']._serialized_start=1446
  _globals['_SIGNINGSTATUS']._serialized_end=1523
  _globals['_SIGNINGCONFIG']._serialized_start=97
  _globals['_SIGNINGCONFIG']._serialized_end=377
  _globals['_BUILDTARGETSIGNINGCONFIG']._serialized_start=380
  _globals['_BUILDTARGETSIGNINGCONFIG']._serialized_end=513
  _globals['_BUILDTARGETSIGNINGCONFIGS']._serialized_start=515
  _globals['_BUILDTARGETSIGNINGCONFIGS']._serialized_end=618
  _globals['_SIGNEDARTIFACT']._serialized_start=621
  _globals['_SIGNEDARTIFACT']._serialized_end=763
  _globals['_ARCHIVEARTIFACTS']._serialized_start=766
  _globals['_ARCHIVEARTIFACTS']._serialized_end=1149
  _globals['_BUILDTARGETSIGNEDARTIFACTS']._serialized_start=1151
  _globals['_BUILDTARGETSIGNEDARTIFACTS']._serialized_end=1236
  _globals['_KEYSETVERSIONS']._serialized_start=1238
  _globals['_KEYSETVERSIONS']._serialized_end=1362
  _globals['_ARTIFACTHASHES']._serialized_start=1364
  _globals['_ARTIFACTHASHES']._serialized_end=1444
# @@protoc_insertion_point(module_scope)
