// Copyright 2023 The Grafeas Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// 	protoc-gen-go v1.26.0
// 	protoc        v4.24.4
// source: grafeas/v1/vex.proto

package grafeas

import (
	reflect "reflect"
	sync "sync"

	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
)

const (
	// Verify that this generated code is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
	// Verify that runtime/protoimpl is sufficiently up-to-date.
	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)

// Provides the state of this Vulnerability assessment.
type VulnerabilityAssessmentNote_Assessment_State int32

const (
	// No state is specified.
	VulnerabilityAssessmentNote_Assessment_STATE_UNSPECIFIED VulnerabilityAssessmentNote_Assessment_State = 0
	// This product is known to be affected by this vulnerability.
	VulnerabilityAssessmentNote_Assessment_AFFECTED VulnerabilityAssessmentNote_Assessment_State = 1
	// This product is known to be not affected by this vulnerability.
	VulnerabilityAssessmentNote_Assessment_NOT_AFFECTED VulnerabilityAssessmentNote_Assessment_State = 2
	// This product contains a fix for this vulnerability.
	VulnerabilityAssessmentNote_Assessment_FIXED VulnerabilityAssessmentNote_Assessment_State = 3
	// It is not known yet whether these versions are or are not affected
	// by the vulnerability. However, it is still under investigation.
	VulnerabilityAssessmentNote_Assessment_UNDER_INVESTIGATION VulnerabilityAssessmentNote_Assessment_State = 4
)

// Enum value maps for VulnerabilityAssessmentNote_Assessment_State.
var (
	VulnerabilityAssessmentNote_Assessment_State_name = map[int32]string{
		0: "STATE_UNSPECIFIED",
		1: "AFFECTED",
		2: "NOT_AFFECTED",
		3: "FIXED",
		4: "UNDER_INVESTIGATION",
	}
	VulnerabilityAssessmentNote_Assessment_State_value = map[string]int32{
		"STATE_UNSPECIFIED":   0,
		"AFFECTED":            1,
		"NOT_AFFECTED":        2,
		"FIXED":               3,
		"UNDER_INVESTIGATION": 4,
	}
)

func (x VulnerabilityAssessmentNote_Assessment_State) Enum() *VulnerabilityAssessmentNote_Assessment_State {
	p := new(VulnerabilityAssessmentNote_Assessment_State)
	*p = x
	return p
}

func (x VulnerabilityAssessmentNote_Assessment_State) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (VulnerabilityAssessmentNote_Assessment_State) Descriptor() protoreflect.EnumDescriptor {
	return file_grafeas_v1_vex_proto_enumTypes[0].Descriptor()
}

func (VulnerabilityAssessmentNote_Assessment_State) Type() protoreflect.EnumType {
	return &file_grafeas_v1_vex_proto_enumTypes[0]
}

func (x VulnerabilityAssessmentNote_Assessment_State) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Assessment_State.Descriptor instead.
func (VulnerabilityAssessmentNote_Assessment_State) EnumDescriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 2, 0}
}

// Provides the type of justification.
type VulnerabilityAssessmentNote_Assessment_Justification_JustificationType int32

const (
	// JUSTIFICATION_TYPE_UNSPECIFIED.
	VulnerabilityAssessmentNote_Assessment_Justification_JUSTIFICATION_TYPE_UNSPECIFIED VulnerabilityAssessmentNote_Assessment_Justification_JustificationType = 0
	// The vulnerable component is not present in the product.
	VulnerabilityAssessmentNote_Assessment_Justification_COMPONENT_NOT_PRESENT VulnerabilityAssessmentNote_Assessment_Justification_JustificationType = 1
	// The vulnerable code is not present. Typically this case
	// occurs when source code is configured or built in a way that excludes
	// the vulnerable code.
	VulnerabilityAssessmentNote_Assessment_Justification_VULNERABLE_CODE_NOT_PRESENT VulnerabilityAssessmentNote_Assessment_Justification_JustificationType = 2
	// The vulnerable code can not be executed.
	// Typically this case occurs when the product includes the vulnerable
	// code but does not call or use the vulnerable code.
	VulnerabilityAssessmentNote_Assessment_Justification_VULNERABLE_CODE_NOT_IN_EXECUTE_PATH VulnerabilityAssessmentNote_Assessment_Justification_JustificationType = 3
	// The vulnerable code cannot be controlled by an attacker to exploit
	// the vulnerability.
	VulnerabilityAssessmentNote_Assessment_Justification_VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY VulnerabilityAssessmentNote_Assessment_Justification_JustificationType = 4
	// The product includes built-in protections or features that prevent
	// exploitation of the vulnerability. These built-in protections cannot
	// be subverted by the attacker and cannot be configured or disabled by
	// the user. These mitigations completely prevent exploitation based on
	// known attack vectors.
	VulnerabilityAssessmentNote_Assessment_Justification_INLINE_MITIGATIONS_ALREADY_EXIST VulnerabilityAssessmentNote_Assessment_Justification_JustificationType = 5
)

// Enum value maps for VulnerabilityAssessmentNote_Assessment_Justification_JustificationType.
var (
	VulnerabilityAssessmentNote_Assessment_Justification_JustificationType_name = map[int32]string{
		0: "JUSTIFICATION_TYPE_UNSPECIFIED",
		1: "COMPONENT_NOT_PRESENT",
		2: "VULNERABLE_CODE_NOT_PRESENT",
		3: "VULNERABLE_CODE_NOT_IN_EXECUTE_PATH",
		4: "VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY",
		5: "INLINE_MITIGATIONS_ALREADY_EXIST",
	}
	VulnerabilityAssessmentNote_Assessment_Justification_JustificationType_value = map[string]int32{
		"JUSTIFICATION_TYPE_UNSPECIFIED":                    0,
		"COMPONENT_NOT_PRESENT":                             1,
		"VULNERABLE_CODE_NOT_PRESENT":                       2,
		"VULNERABLE_CODE_NOT_IN_EXECUTE_PATH":               3,
		"VULNERABLE_CODE_CANNOT_BE_CONTROLLED_BY_ADVERSARY": 4,
		"INLINE_MITIGATIONS_ALREADY_EXIST":                  5,
	}
)

func (x VulnerabilityAssessmentNote_Assessment_Justification_JustificationType) Enum() *VulnerabilityAssessmentNote_Assessment_Justification_JustificationType {
	p := new(VulnerabilityAssessmentNote_Assessment_Justification_JustificationType)
	*p = x
	return p
}

func (x VulnerabilityAssessmentNote_Assessment_Justification_JustificationType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (VulnerabilityAssessmentNote_Assessment_Justification_JustificationType) Descriptor() protoreflect.EnumDescriptor {
	return file_grafeas_v1_vex_proto_enumTypes[1].Descriptor()
}

func (VulnerabilityAssessmentNote_Assessment_Justification_JustificationType) Type() protoreflect.EnumType {
	return &file_grafeas_v1_vex_proto_enumTypes[1]
}

func (x VulnerabilityAssessmentNote_Assessment_Justification_JustificationType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Assessment_Justification_JustificationType.Descriptor instead.
func (VulnerabilityAssessmentNote_Assessment_Justification_JustificationType) EnumDescriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 2, 0, 0}
}

// The type of remediation that can be applied.
type VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType int32

const (
	// No remediation type specified.
	VulnerabilityAssessmentNote_Assessment_Remediation_REMEDIATION_TYPE_UNSPECIFIED VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType = 0
	// A MITIGATION is available.
	VulnerabilityAssessmentNote_Assessment_Remediation_MITIGATION VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType = 1
	// No fix is planned.
	VulnerabilityAssessmentNote_Assessment_Remediation_NO_FIX_PLANNED VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType = 2
	// Not available.
	VulnerabilityAssessmentNote_Assessment_Remediation_NONE_AVAILABLE VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType = 3
	// A vendor fix is available.
	VulnerabilityAssessmentNote_Assessment_Remediation_VENDOR_FIX VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType = 4
	// A workaround is available.
	VulnerabilityAssessmentNote_Assessment_Remediation_WORKAROUND VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType = 5
)

// Enum value maps for VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType.
var (
	VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType_name = map[int32]string{
		0: "REMEDIATION_TYPE_UNSPECIFIED",
		1: "MITIGATION",
		2: "NO_FIX_PLANNED",
		3: "NONE_AVAILABLE",
		4: "VENDOR_FIX",
		5: "WORKAROUND",
	}
	VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType_value = map[string]int32{
		"REMEDIATION_TYPE_UNSPECIFIED": 0,
		"MITIGATION":                   1,
		"NO_FIX_PLANNED":               2,
		"NONE_AVAILABLE":               3,
		"VENDOR_FIX":                   4,
		"WORKAROUND":                   5,
	}
)

func (x VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType) Enum() *VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType {
	p := new(VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType)
	*p = x
	return p
}

func (x VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType) String() string {
	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}

func (VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType) Descriptor() protoreflect.EnumDescriptor {
	return file_grafeas_v1_vex_proto_enumTypes[2].Descriptor()
}

func (VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType) Type() protoreflect.EnumType {
	return &file_grafeas_v1_vex_proto_enumTypes[2]
}

func (x VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType) Number() protoreflect.EnumNumber {
	return protoreflect.EnumNumber(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType.Descriptor instead.
func (VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType) EnumDescriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 2, 1, 0}
}

// A single VulnerabilityAssessmentNote represents
// one particular product's vulnerability assessment for one CVE.
type VulnerabilityAssessmentNote struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The title of the note. E.g. `Vex-Debian-11.4`
	Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"`
	// A one sentence description of this Vex.
	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
	// A detailed description of this Vex.
	LongDescription string `protobuf:"bytes,3,opt,name=long_description,json=longDescription,proto3" json:"long_description,omitempty"`
	// Identifies the language used by this document,
	// corresponding to IETF BCP 47 / RFC 5646.
	LanguageCode string `protobuf:"bytes,4,opt,name=language_code,json=languageCode,proto3" json:"language_code,omitempty"`
	// Publisher details of this Note.
	Publisher *VulnerabilityAssessmentNote_Publisher `protobuf:"bytes,5,opt,name=publisher,proto3" json:"publisher,omitempty"`
	// The product affected by this vex.
	Product *VulnerabilityAssessmentNote_Product `protobuf:"bytes,6,opt,name=product,proto3" json:"product,omitempty"`
	// Represents a vulnerability assessment for the product.
	Assessment *VulnerabilityAssessmentNote_Assessment `protobuf:"bytes,7,opt,name=assessment,proto3" json:"assessment,omitempty"`
}

func (x *VulnerabilityAssessmentNote) Reset() {
	*x = VulnerabilityAssessmentNote{}
	if protoimpl.UnsafeEnabled {
		mi := &file_grafeas_v1_vex_proto_msgTypes[0]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VulnerabilityAssessmentNote) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VulnerabilityAssessmentNote) ProtoMessage() {}

func (x *VulnerabilityAssessmentNote) ProtoReflect() protoreflect.Message {
	mi := &file_grafeas_v1_vex_proto_msgTypes[0]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VulnerabilityAssessmentNote.ProtoReflect.Descriptor instead.
func (*VulnerabilityAssessmentNote) Descriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0}
}

func (x *VulnerabilityAssessmentNote) GetTitle() string {
	if x != nil {
		return x.Title
	}
	return ""
}

func (x *VulnerabilityAssessmentNote) GetShortDescription() string {
	if x != nil {
		return x.ShortDescription
	}
	return ""
}

func (x *VulnerabilityAssessmentNote) GetLongDescription() string {
	if x != nil {
		return x.LongDescription
	}
	return ""
}

func (x *VulnerabilityAssessmentNote) GetLanguageCode() string {
	if x != nil {
		return x.LanguageCode
	}
	return ""
}

func (x *VulnerabilityAssessmentNote) GetPublisher() *VulnerabilityAssessmentNote_Publisher {
	if x != nil {
		return x.Publisher
	}
	return nil
}

func (x *VulnerabilityAssessmentNote) GetProduct() *VulnerabilityAssessmentNote_Product {
	if x != nil {
		return x.Product
	}
	return nil
}

func (x *VulnerabilityAssessmentNote) GetAssessment() *VulnerabilityAssessmentNote_Assessment {
	if x != nil {
		return x.Assessment
	}
	return nil
}

// Publisher contains information about the publisher of
// this Note.
// (-- api-linter: core::0123::resource-annotation=disabled
//
//	aip.dev/not-precedent: Publisher is not a separate resource. --)
type VulnerabilityAssessmentNote_Publisher struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Name of the publisher.
	// Examples: 'Google', 'Google Cloud Platform'.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Provides information about the authority of the issuing party to
	// release the document, in particular, the party's constituency and
	// responsibilities or other obligations.
	IssuingAuthority string `protobuf:"bytes,2,opt,name=issuing_authority,json=issuingAuthority,proto3" json:"issuing_authority,omitempty"`
	// The context or namespace.
	// Contains a URL which is under control of the issuing party and can
	// be used as a globally unique identifier for that issuing party.
	// Example: https://csaf.io
	PublisherNamespace string `protobuf:"bytes,3,opt,name=publisher_namespace,json=publisherNamespace,proto3" json:"publisher_namespace,omitempty"`
}

func (x *VulnerabilityAssessmentNote_Publisher) Reset() {
	*x = VulnerabilityAssessmentNote_Publisher{}
	if protoimpl.UnsafeEnabled {
		mi := &file_grafeas_v1_vex_proto_msgTypes[1]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VulnerabilityAssessmentNote_Publisher) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VulnerabilityAssessmentNote_Publisher) ProtoMessage() {}

func (x *VulnerabilityAssessmentNote_Publisher) ProtoReflect() protoreflect.Message {
	mi := &file_grafeas_v1_vex_proto_msgTypes[1]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Publisher.ProtoReflect.Descriptor instead.
func (*VulnerabilityAssessmentNote_Publisher) Descriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 0}
}

func (x *VulnerabilityAssessmentNote_Publisher) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Publisher) GetIssuingAuthority() string {
	if x != nil {
		return x.IssuingAuthority
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Publisher) GetPublisherNamespace() string {
	if x != nil {
		return x.PublisherNamespace
	}
	return ""
}

// Product contains information about a product and how to uniquely identify
// it.
// (-- api-linter: core::0123::resource-annotation=disabled
//
//	aip.dev/not-precedent: Product is not a separate resource. --)
type VulnerabilityAssessmentNote_Product struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Name of the product.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Token that identifies a product so that it can be referred to from other
	// parts in the document. There is no predefined format as long as it
	// uniquely identifies a group in the context of the current document.
	Id string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"`
	// Types that are assignable to Identifier:
	//
	//	*VulnerabilityAssessmentNote_Product_GenericUri
	Identifier isVulnerabilityAssessmentNote_Product_Identifier `protobuf_oneof:"identifier"`
}

func (x *VulnerabilityAssessmentNote_Product) Reset() {
	*x = VulnerabilityAssessmentNote_Product{}
	if protoimpl.UnsafeEnabled {
		mi := &file_grafeas_v1_vex_proto_msgTypes[2]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VulnerabilityAssessmentNote_Product) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VulnerabilityAssessmentNote_Product) ProtoMessage() {}

func (x *VulnerabilityAssessmentNote_Product) ProtoReflect() protoreflect.Message {
	mi := &file_grafeas_v1_vex_proto_msgTypes[2]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Product.ProtoReflect.Descriptor instead.
func (*VulnerabilityAssessmentNote_Product) Descriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 1}
}

func (x *VulnerabilityAssessmentNote_Product) GetName() string {
	if x != nil {
		return x.Name
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Product) GetId() string {
	if x != nil {
		return x.Id
	}
	return ""
}

func (m *VulnerabilityAssessmentNote_Product) GetIdentifier() isVulnerabilityAssessmentNote_Product_Identifier {
	if m != nil {
		return m.Identifier
	}
	return nil
}

func (x *VulnerabilityAssessmentNote_Product) GetGenericUri() string {
	if x, ok := x.GetIdentifier().(*VulnerabilityAssessmentNote_Product_GenericUri); ok {
		return x.GenericUri
	}
	return ""
}

type isVulnerabilityAssessmentNote_Product_Identifier interface {
	isVulnerabilityAssessmentNote_Product_Identifier()
}

type VulnerabilityAssessmentNote_Product_GenericUri struct {
	// Contains a URI which is vendor-specific.
	// Example: The artifact repository URL of an image.
	GenericUri string `protobuf:"bytes,3,opt,name=generic_uri,json=genericUri,proto3,oneof"`
}

func (*VulnerabilityAssessmentNote_Product_GenericUri) isVulnerabilityAssessmentNote_Product_Identifier() {
}

// Assessment provides all information that is related to a single
// vulnerability for this product.
type VulnerabilityAssessmentNote_Assessment struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// Holds the MITRE standard Common Vulnerabilities and Exposures (CVE)
	// tracking number for the vulnerability.
	// Deprecated: Use vulnerability_id instead to denote CVEs.
	//
	// Deprecated: Do not use.
	Cve string `protobuf:"bytes,1,opt,name=cve,proto3" json:"cve,omitempty"`
	// The vulnerability identifier for this Assessment. Will hold one of
	// common identifiers e.g. CVE, GHSA etc.
	VulnerabilityId string `protobuf:"bytes,9,opt,name=vulnerability_id,json=vulnerabilityId,proto3" json:"vulnerability_id,omitempty"`
	// A one sentence description of this Vex.
	ShortDescription string `protobuf:"bytes,2,opt,name=short_description,json=shortDescription,proto3" json:"short_description,omitempty"`
	// A detailed description of this Vex.
	LongDescription string `protobuf:"bytes,3,opt,name=long_description,json=longDescription,proto3" json:"long_description,omitempty"`
	// Holds a list of references associated with this vulnerability item and
	// assessment. These uris have additional information about the
	// vulnerability and the assessment itself. E.g. Link to a document which
	// details how this assessment concluded the state of this vulnerability.
	RelatedUris []*RelatedUrl `protobuf:"bytes,4,rep,name=related_uris,json=relatedUris,proto3" json:"related_uris,omitempty"`
	// Provides the state of this Vulnerability assessment.
	State VulnerabilityAssessmentNote_Assessment_State `protobuf:"varint,5,opt,name=state,proto3,enum=grafeas.v1.VulnerabilityAssessmentNote_Assessment_State" json:"state,omitempty"`
	// Contains information about the impact of this vulnerability,
	// this will change with time.
	Impacts []string `protobuf:"bytes,6,rep,name=impacts,proto3" json:"impacts,omitempty"`
	// Justification provides the justification when the state of the
	// assessment if NOT_AFFECTED.
	Justification *VulnerabilityAssessmentNote_Assessment_Justification `protobuf:"bytes,7,opt,name=justification,proto3" json:"justification,omitempty"`
	// Specifies details on how to handle (and presumably, fix) a vulnerability.
	Remediations []*VulnerabilityAssessmentNote_Assessment_Remediation `protobuf:"bytes,8,rep,name=remediations,proto3" json:"remediations,omitempty"`
}

func (x *VulnerabilityAssessmentNote_Assessment) Reset() {
	*x = VulnerabilityAssessmentNote_Assessment{}
	if protoimpl.UnsafeEnabled {
		mi := &file_grafeas_v1_vex_proto_msgTypes[3]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VulnerabilityAssessmentNote_Assessment) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VulnerabilityAssessmentNote_Assessment) ProtoMessage() {}

func (x *VulnerabilityAssessmentNote_Assessment) ProtoReflect() protoreflect.Message {
	mi := &file_grafeas_v1_vex_proto_msgTypes[3]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Assessment.ProtoReflect.Descriptor instead.
func (*VulnerabilityAssessmentNote_Assessment) Descriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 2}
}

// Deprecated: Do not use.
func (x *VulnerabilityAssessmentNote_Assessment) GetCve() string {
	if x != nil {
		return x.Cve
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Assessment) GetVulnerabilityId() string {
	if x != nil {
		return x.VulnerabilityId
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Assessment) GetShortDescription() string {
	if x != nil {
		return x.ShortDescription
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Assessment) GetLongDescription() string {
	if x != nil {
		return x.LongDescription
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Assessment) GetRelatedUris() []*RelatedUrl {
	if x != nil {
		return x.RelatedUris
	}
	return nil
}

func (x *VulnerabilityAssessmentNote_Assessment) GetState() VulnerabilityAssessmentNote_Assessment_State {
	if x != nil {
		return x.State
	}
	return VulnerabilityAssessmentNote_Assessment_STATE_UNSPECIFIED
}

func (x *VulnerabilityAssessmentNote_Assessment) GetImpacts() []string {
	if x != nil {
		return x.Impacts
	}
	return nil
}

func (x *VulnerabilityAssessmentNote_Assessment) GetJustification() *VulnerabilityAssessmentNote_Assessment_Justification {
	if x != nil {
		return x.Justification
	}
	return nil
}

func (x *VulnerabilityAssessmentNote_Assessment) GetRemediations() []*VulnerabilityAssessmentNote_Assessment_Remediation {
	if x != nil {
		return x.Remediations
	}
	return nil
}

// Justification provides the justification when the state of the
// assessment if NOT_AFFECTED.
type VulnerabilityAssessmentNote_Assessment_Justification struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The justification type for this vulnerability.
	JustificationType VulnerabilityAssessmentNote_Assessment_Justification_JustificationType `protobuf:"varint,1,opt,name=justification_type,json=justificationType,proto3,enum=grafeas.v1.VulnerabilityAssessmentNote_Assessment_Justification_JustificationType" json:"justification_type,omitempty"`
	// Additional details on why this justification was chosen.
	Details string `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"`
}

func (x *VulnerabilityAssessmentNote_Assessment_Justification) Reset() {
	*x = VulnerabilityAssessmentNote_Assessment_Justification{}
	if protoimpl.UnsafeEnabled {
		mi := &file_grafeas_v1_vex_proto_msgTypes[4]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VulnerabilityAssessmentNote_Assessment_Justification) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VulnerabilityAssessmentNote_Assessment_Justification) ProtoMessage() {}

func (x *VulnerabilityAssessmentNote_Assessment_Justification) ProtoReflect() protoreflect.Message {
	mi := &file_grafeas_v1_vex_proto_msgTypes[4]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Assessment_Justification.ProtoReflect.Descriptor instead.
func (*VulnerabilityAssessmentNote_Assessment_Justification) Descriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 2, 0}
}

func (x *VulnerabilityAssessmentNote_Assessment_Justification) GetJustificationType() VulnerabilityAssessmentNote_Assessment_Justification_JustificationType {
	if x != nil {
		return x.JustificationType
	}
	return VulnerabilityAssessmentNote_Assessment_Justification_JUSTIFICATION_TYPE_UNSPECIFIED
}

func (x *VulnerabilityAssessmentNote_Assessment_Justification) GetDetails() string {
	if x != nil {
		return x.Details
	}
	return ""
}

// Specifies details on how to handle (and presumably, fix) a vulnerability.
type VulnerabilityAssessmentNote_Assessment_Remediation struct {
	state         protoimpl.MessageState
	sizeCache     protoimpl.SizeCache
	unknownFields protoimpl.UnknownFields

	// The type of remediation that can be applied.
	RemediationType VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType `protobuf:"varint,1,opt,name=remediation_type,json=remediationType,proto3,enum=grafeas.v1.VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType" json:"remediation_type,omitempty"`
	// Contains a comprehensive human-readable discussion of the remediation.
	Details string `protobuf:"bytes,2,opt,name=details,proto3" json:"details,omitempty"`
	// Contains the URL where to obtain the remediation.
	RemediationUri *RelatedUrl `protobuf:"bytes,3,opt,name=remediation_uri,json=remediationUri,proto3" json:"remediation_uri,omitempty"`
}

func (x *VulnerabilityAssessmentNote_Assessment_Remediation) Reset() {
	*x = VulnerabilityAssessmentNote_Assessment_Remediation{}
	if protoimpl.UnsafeEnabled {
		mi := &file_grafeas_v1_vex_proto_msgTypes[5]
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		ms.StoreMessageInfo(mi)
	}
}

func (x *VulnerabilityAssessmentNote_Assessment_Remediation) String() string {
	return protoimpl.X.MessageStringOf(x)
}

func (*VulnerabilityAssessmentNote_Assessment_Remediation) ProtoMessage() {}

func (x *VulnerabilityAssessmentNote_Assessment_Remediation) ProtoReflect() protoreflect.Message {
	mi := &file_grafeas_v1_vex_proto_msgTypes[5]
	if protoimpl.UnsafeEnabled && x != nil {
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
		if ms.LoadMessageInfo() == nil {
			ms.StoreMessageInfo(mi)
		}
		return ms
	}
	return mi.MessageOf(x)
}

// Deprecated: Use VulnerabilityAssessmentNote_Assessment_Remediation.ProtoReflect.Descriptor instead.
func (*VulnerabilityAssessmentNote_Assessment_Remediation) Descriptor() ([]byte, []int) {
	return file_grafeas_v1_vex_proto_rawDescGZIP(), []int{0, 2, 1}
}

func (x *VulnerabilityAssessmentNote_Assessment_Remediation) GetRemediationType() VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType {
	if x != nil {
		return x.RemediationType
	}
	return VulnerabilityAssessmentNote_Assessment_Remediation_REMEDIATION_TYPE_UNSPECIFIED
}

func (x *VulnerabilityAssessmentNote_Assessment_Remediation) GetDetails() string {
	if x != nil {
		return x.Details
	}
	return ""
}

func (x *VulnerabilityAssessmentNote_Assessment_Remediation) GetRemediationUri() *RelatedUrl {
	if x != nil {
		return x.RemediationUri
	}
	return nil
}

var File_grafeas_v1_vex_proto protoreflect.FileDescriptor

var file_grafeas_v1_vex_proto_rawDesc = []byte{
	0x0a, 0x14, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x65, 0x78,
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e,
	0x76, 0x31, 0x1a, 0x17, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2f, 0x76, 0x31, 0x2f, 0x63,
	0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9c, 0x10, 0x0a, 0x1b,
	0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73,
	0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74,
	0x69, 0x74, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c,
	0x65, 0x12, 0x2b, 0x0a, 0x11, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72,
	0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x68,
	0x6f, 0x72, 0x74, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29,
	0x0a, 0x10, 0x6c, 0x6f, 0x6e, 0x67, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x44, 0x65,
	0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6c, 0x61, 0x6e,
	0x67, 0x75, 0x61, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
	0x52, 0x0c, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x4f,
	0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56,
	0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65,
	0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69,
	0x73, 0x68, 0x65, 0x72, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12,
	0x49, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x2f, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x75,
	0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65, 0x73,
	0x73, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63,
	0x74, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x52, 0x0a, 0x0a, 0x61, 0x73,
	0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32,
	0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x75, 0x6c, 0x6e,
	0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d,
	0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65,
	0x6e, 0x74, 0x52, 0x0a, 0x61, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x1a, 0x7d,
	0x0a, 0x09, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e,
	0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12,
	0x2b, 0x0a, 0x11, 0x69, 0x73, 0x73, 0x75, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f,
	0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x69, 0x73, 0x73, 0x75,
	0x69, 0x6e, 0x67, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x0a, 0x13,
	0x70, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70,
	0x61, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x70, 0x75, 0x62, 0x6c, 0x69,
	0x73, 0x68, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x5e, 0x0a,
	0x07, 0x50, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65,
	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x0e, 0x0a, 0x02,
	0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0b,
	0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28,
	0x09, 0x48, 0x00, 0x52, 0x0a, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x55, 0x72, 0x69, 0x42,
	0x0c, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x1a, 0x9a, 0x0b,
	0x0a, 0x0a, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x03,
	0x63, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x03, 0x63,
	0x76, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x76, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c,
	0x69, 0x74, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x75,
	0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x49, 0x64, 0x12, 0x2b, 0x0a,
	0x11, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69,
	0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x44,
	0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, 0x6f,
	0x6e, 0x67, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03,
	0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x6f, 0x6e, 0x67, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69,
	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x0c, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64,
	0x5f, 0x75, 0x72, 0x69, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x72,
	0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64,
	0x55, 0x72, 0x6c, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, 0x72, 0x69, 0x73,
	0x12, 0x4e, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32,
	0x38, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x75, 0x6c,
	0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73,
	0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d,
	0x65, 0x6e, 0x74, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
	0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
	0x09, 0x52, 0x07, 0x69, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x73, 0x12, 0x66, 0x0a, 0x0d, 0x6a, 0x75,
	0x73, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28,
	0x0b, 0x32, 0x40, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56,
	0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65,
	0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x73,
	0x73, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
	0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x6a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x0c, 0x72, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65,
	0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c,
	0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74,
	0x65, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x6d,
	0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x72, 0x65, 0x6d, 0x65, 0x64, 0x69,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0xa9, 0x03, 0x0a, 0x0d, 0x4a, 0x75, 0x73, 0x74, 0x69,
	0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x81, 0x01, 0x0a, 0x12, 0x6a, 0x75, 0x73,
	0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
	0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x52, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e,
	0x76, 0x31, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79,
	0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x41,
	0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x4a, 0x75, 0x73, 0x74, 0x69, 0x66,
	0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4a, 0x75, 0x73, 0x74, 0x69, 0x66, 0x69, 0x63,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x11, 0x6a, 0x75, 0x73, 0x74, 0x69,
	0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07,
	0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64,
	0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0xf9, 0x01, 0x0a, 0x11, 0x4a, 0x75, 0x73, 0x74, 0x69,
	0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x1e,
	0x4a, 0x55, 0x53, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59,
	0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00,
	0x12, 0x19, 0x0a, 0x15, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x4e, 0x4f,
	0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x56,
	0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x4e,
	0x4f, 0x54, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x27, 0x0a, 0x23,
	0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f,
	0x4e, 0x4f, 0x54, 0x5f, 0x49, 0x4e, 0x5f, 0x45, 0x58, 0x45, 0x43, 0x55, 0x54, 0x45, 0x5f, 0x50,
	0x41, 0x54, 0x48, 0x10, 0x03, 0x12, 0x35, 0x0a, 0x31, 0x56, 0x55, 0x4c, 0x4e, 0x45, 0x52, 0x41,
	0x42, 0x4c, 0x45, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x43, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x5f,
	0x42, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x4c, 0x45, 0x44, 0x5f, 0x42, 0x59,
	0x5f, 0x41, 0x44, 0x56, 0x45, 0x52, 0x53, 0x41, 0x52, 0x59, 0x10, 0x04, 0x12, 0x24, 0x0a, 0x20,
	0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x4d, 0x49, 0x54, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f,
	0x4e, 0x53, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54,
	0x10, 0x05, 0x1a, 0xf1, 0x02, 0x0a, 0x0b, 0x52, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69,
	0x6f, 0x6e, 0x12, 0x79, 0x0a, 0x10, 0x72, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f,
	0x6e, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4e, 0x2e, 0x67,
	0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x75, 0x6c, 0x6e, 0x65, 0x72,
	0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e,
	0x74, 0x4e, 0x6f, 0x74, 0x65, 0x2e, 0x41, 0x73, 0x73, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x6e, 0x74,
	0x2e, 0x52, 0x65, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x52, 0x65, 0x6d,
	0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0f, 0x72, 0x65,
	0x6d, 0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a,
	0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
	0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x65, 0x64,
	0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b,
	0x32, 0x16, 0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65,
	0x6c, 0x61, 0x74, 0x65, 0x64, 0x55, 0x72, 0x6c, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x65, 0x64, 0x69,
	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x72, 0x69, 0x22, 0x8b, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x6d,
	0x65, 0x64, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x20, 0x0a, 0x1c,
	0x52, 0x45, 0x4d, 0x45, 0x44, 0x49, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45,
	0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0e,
	0x0a, 0x0a, 0x4d, 0x49, 0x54, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x12,
	0x0a, 0x0e, 0x4e, 0x4f, 0x5f, 0x46, 0x49, 0x58, 0x5f, 0x50, 0x4c, 0x41, 0x4e, 0x4e, 0x45, 0x44,
	0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4e, 0x4f, 0x4e, 0x45, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c,
	0x41, 0x42, 0x4c, 0x45, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x45, 0x4e, 0x44, 0x4f, 0x52,
	0x5f, 0x46, 0x49, 0x58, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x4f, 0x52, 0x4b, 0x41, 0x52,
	0x4f, 0x55, 0x4e, 0x44, 0x10, 0x05, 0x22, 0x62, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
	0x15, 0x0a, 0x11, 0x53, 0x54, 0x41, 0x54, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49,
	0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x46, 0x46, 0x45, 0x43, 0x54,
	0x45, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x46, 0x46, 0x45,
	0x43, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10,
	0x03, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x44, 0x45, 0x52, 0x5f, 0x49, 0x4e, 0x56, 0x45, 0x53,
	0x54, 0x49, 0x47, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x42, 0x51, 0x0a, 0x0d, 0x69, 0x6f,
	0x2e, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2e, 0x76, 0x31, 0x50, 0x01, 0x5a, 0x38, 0x67,
	0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67,
	0x2f, 0x67, 0x65, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
	0x61, 0x70, 0x69, 0x73, 0x2f, 0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0x2f, 0x76, 0x31, 0x3b,
	0x67, 0x72, 0x61, 0x66, 0x65, 0x61, 0x73, 0xa2, 0x02, 0x03, 0x47, 0x52, 0x41, 0x62, 0x06, 0x70,
	0x72, 0x6f, 0x74, 0x6f, 0x33,
}

var (
	file_grafeas_v1_vex_proto_rawDescOnce sync.Once
	file_grafeas_v1_vex_proto_rawDescData = file_grafeas_v1_vex_proto_rawDesc
)

func file_grafeas_v1_vex_proto_rawDescGZIP() []byte {
	file_grafeas_v1_vex_proto_rawDescOnce.Do(func() {
		file_grafeas_v1_vex_proto_rawDescData = protoimpl.X.CompressGZIP(file_grafeas_v1_vex_proto_rawDescData)
	})
	return file_grafeas_v1_vex_proto_rawDescData
}

var file_grafeas_v1_vex_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
var file_grafeas_v1_vex_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
var file_grafeas_v1_vex_proto_goTypes = []interface{}{
	(VulnerabilityAssessmentNote_Assessment_State)(0),                           // 0: grafeas.v1.VulnerabilityAssessmentNote.Assessment.State
	(VulnerabilityAssessmentNote_Assessment_Justification_JustificationType)(0), // 1: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Justification.JustificationType
	(VulnerabilityAssessmentNote_Assessment_Remediation_RemediationType)(0),     // 2: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Remediation.RemediationType
	(*VulnerabilityAssessmentNote)(nil),                                         // 3: grafeas.v1.VulnerabilityAssessmentNote
	(*VulnerabilityAssessmentNote_Publisher)(nil),                               // 4: grafeas.v1.VulnerabilityAssessmentNote.Publisher
	(*VulnerabilityAssessmentNote_Product)(nil),                                 // 5: grafeas.v1.VulnerabilityAssessmentNote.Product
	(*VulnerabilityAssessmentNote_Assessment)(nil),                              // 6: grafeas.v1.VulnerabilityAssessmentNote.Assessment
	(*VulnerabilityAssessmentNote_Assessment_Justification)(nil),                // 7: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Justification
	(*VulnerabilityAssessmentNote_Assessment_Remediation)(nil),                  // 8: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Remediation
	(*RelatedUrl)(nil), // 9: grafeas.v1.RelatedUrl
}
var file_grafeas_v1_vex_proto_depIdxs = []int32{
	4,  // 0: grafeas.v1.VulnerabilityAssessmentNote.publisher:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Publisher
	5,  // 1: grafeas.v1.VulnerabilityAssessmentNote.product:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Product
	6,  // 2: grafeas.v1.VulnerabilityAssessmentNote.assessment:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Assessment
	9,  // 3: grafeas.v1.VulnerabilityAssessmentNote.Assessment.related_uris:type_name -> grafeas.v1.RelatedUrl
	0,  // 4: grafeas.v1.VulnerabilityAssessmentNote.Assessment.state:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Assessment.State
	7,  // 5: grafeas.v1.VulnerabilityAssessmentNote.Assessment.justification:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Assessment.Justification
	8,  // 6: grafeas.v1.VulnerabilityAssessmentNote.Assessment.remediations:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Assessment.Remediation
	1,  // 7: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Justification.justification_type:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Assessment.Justification.JustificationType
	2,  // 8: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Remediation.remediation_type:type_name -> grafeas.v1.VulnerabilityAssessmentNote.Assessment.Remediation.RemediationType
	9,  // 9: grafeas.v1.VulnerabilityAssessmentNote.Assessment.Remediation.remediation_uri:type_name -> grafeas.v1.RelatedUrl
	10, // [10:10] is the sub-list for method output_type
	10, // [10:10] is the sub-list for method input_type
	10, // [10:10] is the sub-list for extension type_name
	10, // [10:10] is the sub-list for extension extendee
	0,  // [0:10] is the sub-list for field type_name
}

func init() { file_grafeas_v1_vex_proto_init() }
func file_grafeas_v1_vex_proto_init() {
	if File_grafeas_v1_vex_proto != nil {
		return
	}
	file_grafeas_v1_common_proto_init()
	if !protoimpl.UnsafeEnabled {
		file_grafeas_v1_vex_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VulnerabilityAssessmentNote); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_grafeas_v1_vex_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VulnerabilityAssessmentNote_Publisher); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_grafeas_v1_vex_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VulnerabilityAssessmentNote_Product); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_grafeas_v1_vex_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VulnerabilityAssessmentNote_Assessment); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_grafeas_v1_vex_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VulnerabilityAssessmentNote_Assessment_Justification); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
		file_grafeas_v1_vex_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
			switch v := v.(*VulnerabilityAssessmentNote_Assessment_Remediation); i {
			case 0:
				return &v.state
			case 1:
				return &v.sizeCache
			case 2:
				return &v.unknownFields
			default:
				return nil
			}
		}
	}
	file_grafeas_v1_vex_proto_msgTypes[2].OneofWrappers = []interface{}{
		(*VulnerabilityAssessmentNote_Product_GenericUri)(nil),
	}
	type x struct{}
	out := protoimpl.TypeBuilder{
		File: protoimpl.DescBuilder{
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
			RawDescriptor: file_grafeas_v1_vex_proto_rawDesc,
			NumEnums:      3,
			NumMessages:   6,
			NumExtensions: 0,
			NumServices:   0,
		},
		GoTypes:           file_grafeas_v1_vex_proto_goTypes,
		DependencyIndexes: file_grafeas_v1_vex_proto_depIdxs,
		EnumInfos:         file_grafeas_v1_vex_proto_enumTypes,
		MessageInfos:      file_grafeas_v1_vex_proto_msgTypes,
	}.Build()
	File_grafeas_v1_vex_proto = out.File
	file_grafeas_v1_vex_proto_rawDesc = nil
	file_grafeas_v1_vex_proto_goTypes = nil
	file_grafeas_v1_vex_proto_depIdxs = nil
}
