From 70e5300a76a3b9ea283102b04ecbfd83809bfd1d Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 31 Aug 2022 08:54:40 +0100 Subject: [PATCH 1/7] attestations: tidy up AddAttestation function Signed-off-by: Justin Chadwell --- client/client_test.go | 14 ++++++-------- solver/result/result.go | 10 +++------- 2 files changed, 9 insertions(+), 15 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index c824172a21c5..70c28f21d65f 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -6489,24 +6489,22 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, &result.InTotoAttestation{ - PredicateRefKey: "foo", - PredicatePath: "/attestation.json", - PredicateType: "https://example.com/attestations/v1.0", + PredicatePath: "/attestation.json", + PredicateType: "https://example.com/attestations/v1.0", Subjects: []result.InTotoSubject{ &result.InTotoSubjectSelf{}, }, - }, map[string]gateway.Reference{"foo": refAttest}) + }, refAttest) res.AddAttestation(pk, &result.InTotoAttestation{ - PredicateRefKey: "bar", - PredicatePath: "/attestation2.json", - PredicateType: "https://example.com/attestations2/v1.0", + PredicatePath: "/attestation2.json", + PredicateType: "https://example.com/attestations2/v1.0", Subjects: []result.InTotoSubject{ &result.InTotoSubjectRaw{ Name: "/attestation.json", Digest: []digest.Digest{successDigest}, }, }, - }, map[string]gateway.Reference{"bar": refAttest}) + }, refAttest) } dt, err := json.Marshal(expPlatforms) diff --git a/solver/result/result.go b/solver/result/result.go index 1fa6c2ff617d..6c5158c5c9c5 100644 --- a/solver/result/result.go +++ b/solver/result/result.go @@ -39,23 +39,19 @@ func (r *Result[T]) AddRef(k string, ref T) { r.mu.Unlock() } -func (r *Result[T]) AddAttestation(k string, v Attestation, refs map[string]T) { +func (r *Result[T]) AddAttestation(k string, v Attestation, ref T) { r.mu.Lock() if r.Attestations == nil { r.Attestations = map[string][]Attestation{} } - - // if the attestation refs aren't already internal, then insert them switch v := v.(type) { case *InTotoAttestation: if !strings.HasPrefix(v.PredicateRefKey, attestationRefPrefix) { - internalKey := attestationRefPrefix + identity.NewID() - r.Refs[internalKey] = refs[v.PredicateRefKey] - v.PredicateRefKey = internalKey + v.PredicateRefKey = "attestation:" + identity.NewID() + r.Refs[v.PredicateRefKey] = ref } } r.Attestations[k] = append(r.Attestations[k], v) - r.mu.Unlock() } From 41565de6887a10a9148c01b52a33ecd1353755e0 Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 31 Aug 2022 09:43:44 +0100 Subject: [PATCH 2/7] attestations: unionize the attestations into a single struct Signed-off-by: Justin Chadwell --- client/client_test.go | 30 +- exporter/containerimage/writer.go | 40 +- frontend/gateway/gateway.go | 4 +- frontend/gateway/grpcclient/client.go | 4 +- frontend/gateway/pb/attestation.go | 118 +-- frontend/gateway/pb/gateway.pb.go | 1413 ++++++++----------------- frontend/gateway/pb/gateway.proto | 47 +- solver/result/attestation.go | 43 +- solver/result/result.go | 9 +- 9 files changed, 553 insertions(+), 1155 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index 70c28f21d65f..cc752a6d3518 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -6488,22 +6488,22 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) { if err != nil { return nil, err } - res.AddAttestation(pk, &result.InTotoAttestation{ - PredicatePath: "/attestation.json", - PredicateType: "https://example.com/attestations/v1.0", - Subjects: []result.InTotoSubject{ - &result.InTotoSubjectSelf{}, - }, + res.AddAttestation(pk, result.Attestation{ + Kind: result.AttestationKindInToto, + Path: "/attestation.json", + InTotoPredicateType: "https://example.com/attestations/v1.0", + InTotoSubjects: []result.InTotoSubject{{ + Kind: result.InTotoSubjectKindSelf, + }}, }, refAttest) - res.AddAttestation(pk, &result.InTotoAttestation{ - PredicatePath: "/attestation2.json", - PredicateType: "https://example.com/attestations2/v1.0", - Subjects: []result.InTotoSubject{ - &result.InTotoSubjectRaw{ - Name: "/attestation.json", - Digest: []digest.Digest{successDigest}, - }, - }, + res.AddAttestation(pk, result.Attestation{ + Path: "/attestation2.json", + InTotoPredicateType: "https://example.com/attestations2/v1.0", + InTotoSubjects: []result.InTotoSubject{{ + Kind: result.InTotoSubjectKindRaw, + Name: "/attestation.json", + Digest: []digest.Digest{successDigest}, + }}, }, refAttest) } diff --git a/exporter/containerimage/writer.go b/exporter/containerimage/writer.go index bfdb04c0e5a9..7012533b26df 100644 --- a/exporter/containerimage/writer.go +++ b/exporter/containerimage/writer.go @@ -104,7 +104,7 @@ func (ic *ImageWriter) Commit(ctx context.Context, inp *exporter.Source, session attestCount += len(attests) } if count := attestCount + len(p.Platforms); count != len(inp.Refs) { - return nil, errors.Errorf("number of required refs does not match references %d %d", count, len(inp.Refs)) + return nil, errors.Errorf("number of required refs (%d) does not match number of references (%d)", count, len(inp.Refs)) } if attestCount > 0 { @@ -264,11 +264,11 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, for i, att := range attestations { i, att := i, att eg.Go(func() error { - switch att := att.(type) { - case *result.InTotoAttestation: - ref, ok := refs[att.PredicateRefKey] + switch att.Kind { + case result.AttestationKindInToto: + ref, ok := refs[att.Ref] if !ok { - return errors.Errorf("key %s not found in refs map", att.PredicateRefKey) + return errors.Errorf("key %s not found in refs map", att.Ref) } mount, err := ref.Mount(ctx, true, s) @@ -282,7 +282,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, return err } defer lm.Unmount() - predicate, err := os.ReadFile(path.Join(src, att.PredicatePath)) + predicate, err := os.ReadFile(path.Join(src, att.Path)) if err != nil { return err } @@ -292,24 +292,24 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, statements[i] = intoto.Statement{ StatementHeader: intoto.StatementHeader{ Type: intoto.StatementInTotoV01, - PredicateType: att.PredicateType, + PredicateType: att.InTotoPredicateType, }, Predicate: json.RawMessage(predicate), } - for _, subject := range att.Subjects { - switch subject2 := subject.(type) { - case *result.InTotoSubjectSelf: - statements[i].Subject = append(statements[i].Subject, intoto.Subject{ - Name: "_", - Digest: result.DigestToDigestMap(desc.Digest), - }) - case *result.InTotoSubjectRaw: - statements[i].Subject = append(statements[i].Subject, intoto.Subject{ - Name: subject2.Name, - Digest: subject2.DigestMap(), - }) + + statements[i].Subject = make([]intoto.Subject, len(att.InTotoSubjects)) + for j, subject := range att.InTotoSubjects { + statements[i].Subject[j].Name = "_" + if subject.Name != "" { + statements[i].Subject[j].Name = subject.Name + } + switch subject.Kind { + case result.InTotoSubjectKindSelf: + statements[i].Subject[j].Digest = result.DigestMap(desc.Digest) + case result.InTotoSubjectKindRaw: + statements[i].Subject[j].Digest = result.DigestMap(subject.Digest...) default: - return errors.Errorf("unknown attestation subject type %T", subject) + return errors.Errorf("unknown attestation subject kind") } } } diff --git a/frontend/gateway/gateway.go b/frontend/gateway/gateway.go index 2154782b7020..7ba80490cdd9 100644 --- a/frontend/gateway/gateway.go +++ b/frontend/gateway/gateway.go @@ -709,7 +709,7 @@ func (lbf *llbBridgeForwarder) Solve(ctx context.Context, req *pb.SolveRequest) pbRes.Attestations = map[string]*pb.Attestations{} for k, atts := range res.Attestations { for _, att := range atts { - pbAtt, err := pb.ToAttestationPB(att) + pbAtt, err := pb.ToAttestationPB(&att) if err != nil { return nil, err } @@ -920,7 +920,7 @@ func (lbf *llbBridgeForwarder) Return(ctx context.Context, in *pb.ReturnRequest) if err != nil { return nil, err } - r.AddAttestation(k, att, nil) + r.AddAttestation(k, *att, nil) } } } diff --git a/frontend/gateway/grpcclient/client.go b/frontend/gateway/grpcclient/client.go index 3013992d6cdf..34434d4fbe02 100644 --- a/frontend/gateway/grpcclient/client.go +++ b/frontend/gateway/grpcclient/client.go @@ -165,7 +165,7 @@ func (c *grpcClient) Run(ctx context.Context, f client.BuildFunc) (retError erro attestations := map[string]*pb.Attestations{} for k, as := range res.Attestations { for _, a := range as { - pbAtt, err := pb.ToAttestationPB(a) + pbAtt, err := pb.ToAttestationPB(&a) if err != nil { retError = err continue @@ -470,7 +470,7 @@ func (c *grpcClient) Solve(ctx context.Context, creq client.SolveRequest) (res * if err != nil { return nil, err } - res.AddAttestation(p, att, nil) + res.AddAttestation(p, *att, nil) } } } diff --git a/frontend/gateway/pb/attestation.go b/frontend/gateway/pb/attestation.go index 838d14e3de6a..3eb4082dbcde 100644 --- a/frontend/gateway/pb/attestation.go +++ b/frontend/gateway/pb/attestation.go @@ -5,71 +5,71 @@ import ( "github.com/pkg/errors" ) -func ToAttestationPB(a result.Attestation) (*Attestations_Attestation, error) { - switch a := a.(type) { - case *result.InTotoAttestation: - subjects := []*InToto_Subject{} - for _, subject := range a.Subjects { - switch s := subject.(type) { - case *result.InTotoSubjectRaw: - subjects = append(subjects, &InToto_Subject{ - Subject: &InToto_Subject_Raw{ - Raw: &InToto_Subject_RawSubject{ - Name: s.Name, - Digest: s.Digest, - }, - }, - }) - case *result.InTotoSubjectSelf: - subjects = append(subjects, &InToto_Subject{ - Subject: &InToto_Subject_Self{ - Self: &InToto_Subject_SelfSubject{}, - }, - }) - default: - return nil, errors.Errorf("unknown in toto subject type %T", s) - } - } +var toAttestationKind = map[int]Attestation_Kind{ + result.AttestationKindInToto: Attestation_InToto, +} +var toSubjectKind = map[int]InTotoSubject_Kind{ + result.InTotoSubjectKindRaw: InTotoSubject_Raw, + result.InTotoSubjectKindSelf: InTotoSubject_Self, +} +var fromAttestationKind = map[Attestation_Kind]int{ + Attestation_InToto: result.AttestationKindInToto, +} +var fromSubjectKind = map[InTotoSubject_Kind]int{ + InTotoSubject_Raw: result.InTotoSubjectKindRaw, + InTotoSubject_Self: result.InTotoSubjectKindSelf, +} - intoto := &InToto{ - PredicateType: a.PredicateType, - PredicatePath: a.PredicatePath, - PredicateRefKey: a.PredicateRefKey, - Subjects: subjects, +func ToAttestationPB(a *result.Attestation) (*Attestation, error) { + subjects := make([]*InTotoSubject, len(a.InTotoSubjects)) + for i, subject := range a.InTotoSubjects { + k, ok := toSubjectKind[subject.Kind] + if !ok { + return nil, errors.New("unknown in toto subject kind") } - return &Attestations_Attestation{ - Attestation: &Attestations_Attestation_Intoto{intoto}, - }, nil - default: - return nil, errors.Errorf("unknown result type %T", a) + subjects[i] = &InTotoSubject{ + Kind: k, + RawName: subject.Name, + RawDigest: subject.Digest, + } + } + + k, ok := toAttestationKind[a.Kind] + if !ok { + return nil, errors.New("unknown attestation kind") } + return &Attestation{ + Kind: k, + Path: a.Path, + Ref: a.Ref, + InTotoPredicateType: a.InTotoPredicateType, + InTotoSubjects: subjects, + }, nil } -func FromAttestationPB(a *Attestations_Attestation) (result.Attestation, error) { - switch a := a.Attestation.(type) { - case *Attestations_Attestation_Intoto: - subjects := []result.InTotoSubject{} - for _, pbSubject := range a.Intoto.Subjects { - switch pbSubject := pbSubject.Subject.(type) { - case *InToto_Subject_Raw: - subjects = append(subjects, &result.InTotoSubjectRaw{ - Name: pbSubject.Raw.Name, - Digest: pbSubject.Raw.Digest, - }) - case *InToto_Subject_Self: - subjects = append(subjects, &result.InTotoSubjectSelf{}) - default: - return nil, errors.Errorf("unknown in toto subject type %T", pbSubject) - } +func FromAttestationPB(a *Attestation) (*result.Attestation, error) { + subjects := make([]result.InTotoSubject, len(a.InTotoSubjects)) + for i, subject := range a.InTotoSubjects { + k, ok := fromSubjectKind[subject.Kind] + if !ok { + return nil, errors.New("unknown in toto subject kind") } + subjects[i] = result.InTotoSubject{ + Kind: k, + Name: subject.RawName, + Digest: subject.RawDigest, + } + } - return &result.InTotoAttestation{ - PredicateType: a.Intoto.PredicateType, - PredicatePath: a.Intoto.PredicatePath, - PredicateRefKey: a.Intoto.PredicateRefKey, - Subjects: subjects, - }, nil - default: - return nil, errors.Errorf("unknown attestation type %T", a) + k, ok := fromAttestationKind[a.Kind] + if !ok { + return nil, errors.New("unknown attestation kind") } + return &result.Attestation{ + Kind: k, + Path: a.Path, + Ref: a.Ref, + InTotoPredicateType: a.InTotoPredicateType, + InTotoSubjects: subjects, + }, nil } diff --git a/frontend/gateway/pb/gateway.pb.go b/frontend/gateway/pb/gateway.pb.go index 39908cbd3f20..2009b9a2707c 100644 --- a/frontend/gateway/pb/gateway.pb.go +++ b/frontend/gateway/pb/gateway.pb.go @@ -33,6 +33,53 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package +type Attestation_Kind int32 + +const ( + Attestation_InToto Attestation_Kind = 0 +) + +var Attestation_Kind_name = map[int32]string{ + 0: "InToto", +} + +var Attestation_Kind_value = map[string]int32{ + "InToto": 0, +} + +func (x Attestation_Kind) String() string { + return proto.EnumName(Attestation_Kind_name, int32(x)) +} + +func (Attestation_Kind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_f1a937782ebbded5, []int{5, 0} +} + +type InTotoSubject_Kind int32 + +const ( + InTotoSubject_Raw InTotoSubject_Kind = 0 + InTotoSubject_Self InTotoSubject_Kind = 1 +) + +var InTotoSubject_Kind_name = map[int32]string{ + 0: "Raw", + 1: "Self", +} + +var InTotoSubject_Kind_value = map[string]int32{ + "Raw": 0, + "Self": 1, +} + +func (x InTotoSubject_Kind) String() string { + return proto.EnumName(InTotoSubject_Kind_name, int32(x)) +} + +func (InTotoSubject_Kind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_f1a937782ebbded5, []int{6, 0} +} + type Result struct { // Types that are valid to be assigned to Result: // @@ -314,10 +361,10 @@ func (m *RefMap) GetRefs() map[string]*Ref { } type Attestations struct { - Attestation []*Attestations_Attestation `protobuf:"bytes,1,rep,name=attestation,proto3" json:"attestation,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Attestation []*Attestation `protobuf:"bytes,1,rep,name=attestation,proto3" json:"attestation,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Attestations) Reset() { *m = Attestations{} } @@ -353,35 +400,36 @@ func (m *Attestations) XXX_DiscardUnknown() { var xxx_messageInfo_Attestations proto.InternalMessageInfo -func (m *Attestations) GetAttestation() []*Attestations_Attestation { +func (m *Attestations) GetAttestation() []*Attestation { if m != nil { return m.Attestation } return nil } -type Attestations_Attestation struct { - // Types that are valid to be assigned to Attestation: - // - // *Attestations_Attestation_Intoto - Attestation isAttestations_Attestation_Attestation `protobuf_oneof:"Attestation"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type Attestation struct { + Kind Attestation_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=moby.buildkit.v1.frontend.Attestation_Kind" json:"kind,omitempty"` + Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` + Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` + InTotoPredicateType string `protobuf:"bytes,4,opt,name=inTotoPredicateType,proto3" json:"inTotoPredicateType,omitempty"` + InTotoSubjects []*InTotoSubject `protobuf:"bytes,5,rep,name=inTotoSubjects,proto3" json:"inTotoSubjects,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *Attestations_Attestation) Reset() { *m = Attestations_Attestation{} } -func (m *Attestations_Attestation) String() string { return proto.CompactTextString(m) } -func (*Attestations_Attestation) ProtoMessage() {} -func (*Attestations_Attestation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{4, 0} +func (m *Attestation) Reset() { *m = Attestation{} } +func (m *Attestation) String() string { return proto.CompactTextString(m) } +func (*Attestation) ProtoMessage() {} +func (*Attestation) Descriptor() ([]byte, []int) { + return fileDescriptor_f1a937782ebbded5, []int{5} } -func (m *Attestations_Attestation) XXX_Unmarshal(b []byte) error { +func (m *Attestation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *Attestations_Attestation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *Attestation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_Attestations_Attestation.Marshal(b, m, deterministic) + return xxx_messageInfo_Attestation.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -391,145 +439,74 @@ func (m *Attestations_Attestation) XXX_Marshal(b []byte, deterministic bool) ([] return b[:n], nil } } -func (m *Attestations_Attestation) XXX_Merge(src proto.Message) { - xxx_messageInfo_Attestations_Attestation.Merge(m, src) +func (m *Attestation) XXX_Merge(src proto.Message) { + xxx_messageInfo_Attestation.Merge(m, src) } -func (m *Attestations_Attestation) XXX_Size() int { +func (m *Attestation) XXX_Size() int { return m.Size() } -func (m *Attestations_Attestation) XXX_DiscardUnknown() { - xxx_messageInfo_Attestations_Attestation.DiscardUnknown(m) -} - -var xxx_messageInfo_Attestations_Attestation proto.InternalMessageInfo - -type isAttestations_Attestation_Attestation interface { - isAttestations_Attestation_Attestation() - MarshalTo([]byte) (int, error) - Size() int -} - -type Attestations_Attestation_Intoto struct { - Intoto *InToto `protobuf:"bytes,1,opt,name=intoto,proto3,oneof" json:"intoto,omitempty"` +func (m *Attestation) XXX_DiscardUnknown() { + xxx_messageInfo_Attestation.DiscardUnknown(m) } -func (*Attestations_Attestation_Intoto) isAttestations_Attestation_Attestation() {} +var xxx_messageInfo_Attestation proto.InternalMessageInfo -func (m *Attestations_Attestation) GetAttestation() isAttestations_Attestation_Attestation { +func (m *Attestation) GetKind() Attestation_Kind { if m != nil { - return m.Attestation - } - return nil -} - -func (m *Attestations_Attestation) GetIntoto() *InToto { - if x, ok := m.GetAttestation().(*Attestations_Attestation_Intoto); ok { - return x.Intoto - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*Attestations_Attestation) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*Attestations_Attestation_Intoto)(nil), - } -} - -type InToto struct { - PredicateType string `protobuf:"bytes,1,opt,name=predicateType,proto3" json:"predicateType,omitempty"` - PredicateRefKey string `protobuf:"bytes,2,opt,name=predicateRefKey,proto3" json:"predicateRefKey,omitempty"` - PredicatePath string `protobuf:"bytes,3,opt,name=predicatePath,proto3" json:"predicatePath,omitempty"` - Subjects []*InToto_Subject `protobuf:"bytes,4,rep,name=subjects,proto3" json:"subjects,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InToto) Reset() { *m = InToto{} } -func (m *InToto) String() string { return proto.CompactTextString(m) } -func (*InToto) ProtoMessage() {} -func (*InToto) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{5} -} -func (m *InToto) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *InToto) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_InToto.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil + return m.Kind } -} -func (m *InToto) XXX_Merge(src proto.Message) { - xxx_messageInfo_InToto.Merge(m, src) -} -func (m *InToto) XXX_Size() int { - return m.Size() -} -func (m *InToto) XXX_DiscardUnknown() { - xxx_messageInfo_InToto.DiscardUnknown(m) + return Attestation_InToto } -var xxx_messageInfo_InToto proto.InternalMessageInfo - -func (m *InToto) GetPredicateType() string { +func (m *Attestation) GetRef() string { if m != nil { - return m.PredicateType + return m.Ref } return "" } -func (m *InToto) GetPredicateRefKey() string { +func (m *Attestation) GetPath() string { if m != nil { - return m.PredicateRefKey + return m.Path } return "" } -func (m *InToto) GetPredicatePath() string { +func (m *Attestation) GetInTotoPredicateType() string { if m != nil { - return m.PredicatePath + return m.InTotoPredicateType } return "" } -func (m *InToto) GetSubjects() []*InToto_Subject { +func (m *Attestation) GetInTotoSubjects() []*InTotoSubject { if m != nil { - return m.Subjects + return m.InTotoSubjects } return nil } -type InToto_Subject struct { - // Types that are valid to be assigned to Subject: - // - // *InToto_Subject_Self - // *InToto_Subject_Raw - Subject isInToto_Subject_Subject `protobuf_oneof:"Subject"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` +type InTotoSubject struct { + Kind InTotoSubject_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=moby.buildkit.v1.frontend.InTotoSubject_Kind" json:"kind,omitempty"` + RawDigest []github_com_opencontainers_go_digest.Digest `protobuf:"bytes,2,rep,name=rawDigest,proto3,customtype=github.com/opencontainers/go-digest.Digest" json:"rawDigest"` + RawName string `protobuf:"bytes,3,opt,name=rawName,proto3" json:"rawName,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *InToto_Subject) Reset() { *m = InToto_Subject{} } -func (m *InToto_Subject) String() string { return proto.CompactTextString(m) } -func (*InToto_Subject) ProtoMessage() {} -func (*InToto_Subject) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{5, 0} +func (m *InTotoSubject) Reset() { *m = InTotoSubject{} } +func (m *InTotoSubject) String() string { return proto.CompactTextString(m) } +func (*InTotoSubject) ProtoMessage() {} +func (*InTotoSubject) Descriptor() ([]byte, []int) { + return fileDescriptor_f1a937782ebbded5, []int{6} } -func (m *InToto_Subject) XXX_Unmarshal(b []byte) error { +func (m *InTotoSubject) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *InToto_Subject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *InTotoSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_InToto_Subject.Marshal(b, m, deterministic) + return xxx_messageInfo_InTotoSubject.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -539,146 +516,28 @@ func (m *InToto_Subject) XXX_Marshal(b []byte, deterministic bool) ([]byte, erro return b[:n], nil } } -func (m *InToto_Subject) XXX_Merge(src proto.Message) { - xxx_messageInfo_InToto_Subject.Merge(m, src) +func (m *InTotoSubject) XXX_Merge(src proto.Message) { + xxx_messageInfo_InTotoSubject.Merge(m, src) } -func (m *InToto_Subject) XXX_Size() int { +func (m *InTotoSubject) XXX_Size() int { return m.Size() } -func (m *InToto_Subject) XXX_DiscardUnknown() { - xxx_messageInfo_InToto_Subject.DiscardUnknown(m) -} - -var xxx_messageInfo_InToto_Subject proto.InternalMessageInfo - -type isInToto_Subject_Subject interface { - isInToto_Subject_Subject() - MarshalTo([]byte) (int, error) - Size() int -} - -type InToto_Subject_Self struct { - Self *InToto_Subject_SelfSubject `protobuf:"bytes,1,opt,name=self,proto3,oneof" json:"self,omitempty"` -} -type InToto_Subject_Raw struct { - Raw *InToto_Subject_RawSubject `protobuf:"bytes,2,opt,name=raw,proto3,oneof" json:"raw,omitempty"` +func (m *InTotoSubject) XXX_DiscardUnknown() { + xxx_messageInfo_InTotoSubject.DiscardUnknown(m) } -func (*InToto_Subject_Self) isInToto_Subject_Subject() {} -func (*InToto_Subject_Raw) isInToto_Subject_Subject() {} +var xxx_messageInfo_InTotoSubject proto.InternalMessageInfo -func (m *InToto_Subject) GetSubject() isInToto_Subject_Subject { +func (m *InTotoSubject) GetKind() InTotoSubject_Kind { if m != nil { - return m.Subject - } - return nil -} - -func (m *InToto_Subject) GetSelf() *InToto_Subject_SelfSubject { - if x, ok := m.GetSubject().(*InToto_Subject_Self); ok { - return x.Self - } - return nil -} - -func (m *InToto_Subject) GetRaw() *InToto_Subject_RawSubject { - if x, ok := m.GetSubject().(*InToto_Subject_Raw); ok { - return x.Raw - } - return nil -} - -// XXX_OneofWrappers is for the internal use of the proto package. -func (*InToto_Subject) XXX_OneofWrappers() []interface{} { - return []interface{}{ - (*InToto_Subject_Self)(nil), - (*InToto_Subject_Raw)(nil), - } -} - -type InToto_Subject_SelfSubject struct { - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InToto_Subject_SelfSubject) Reset() { *m = InToto_Subject_SelfSubject{} } -func (m *InToto_Subject_SelfSubject) String() string { return proto.CompactTextString(m) } -func (*InToto_Subject_SelfSubject) ProtoMessage() {} -func (*InToto_Subject_SelfSubject) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{5, 0, 0} -} -func (m *InToto_Subject_SelfSubject) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *InToto_Subject_SelfSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_InToto_Subject_SelfSubject.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil - } -} -func (m *InToto_Subject_SelfSubject) XXX_Merge(src proto.Message) { - xxx_messageInfo_InToto_Subject_SelfSubject.Merge(m, src) -} -func (m *InToto_Subject_SelfSubject) XXX_Size() int { - return m.Size() -} -func (m *InToto_Subject_SelfSubject) XXX_DiscardUnknown() { - xxx_messageInfo_InToto_Subject_SelfSubject.DiscardUnknown(m) -} - -var xxx_messageInfo_InToto_Subject_SelfSubject proto.InternalMessageInfo - -type InToto_Subject_RawSubject struct { - Digest []github_com_opencontainers_go_digest.Digest `protobuf:"bytes,1,rep,name=Digest,proto3,customtype=github.com/opencontainers/go-digest.Digest" json:"Digest"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *InToto_Subject_RawSubject) Reset() { *m = InToto_Subject_RawSubject{} } -func (m *InToto_Subject_RawSubject) String() string { return proto.CompactTextString(m) } -func (*InToto_Subject_RawSubject) ProtoMessage() {} -func (*InToto_Subject_RawSubject) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{5, 0, 1} -} -func (m *InToto_Subject_RawSubject) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *InToto_Subject_RawSubject) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - if deterministic { - return xxx_messageInfo_InToto_Subject_RawSubject.Marshal(b, m, deterministic) - } else { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil + return m.Kind } + return InTotoSubject_Raw } -func (m *InToto_Subject_RawSubject) XXX_Merge(src proto.Message) { - xxx_messageInfo_InToto_Subject_RawSubject.Merge(m, src) -} -func (m *InToto_Subject_RawSubject) XXX_Size() int { - return m.Size() -} -func (m *InToto_Subject_RawSubject) XXX_DiscardUnknown() { - xxx_messageInfo_InToto_Subject_RawSubject.DiscardUnknown(m) -} - -var xxx_messageInfo_InToto_Subject_RawSubject proto.InternalMessageInfo -func (m *InToto_Subject_RawSubject) GetName() string { +func (m *InTotoSubject) GetRawName() string { if m != nil { - return m.Name + return m.RawName } return "" } @@ -695,7 +554,7 @@ func (m *ReturnRequest) Reset() { *m = ReturnRequest{} } func (m *ReturnRequest) String() string { return proto.CompactTextString(m) } func (*ReturnRequest) ProtoMessage() {} func (*ReturnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{6} + return fileDescriptor_f1a937782ebbded5, []int{7} } func (m *ReturnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -748,7 +607,7 @@ func (m *ReturnResponse) Reset() { *m = ReturnResponse{} } func (m *ReturnResponse) String() string { return proto.CompactTextString(m) } func (*ReturnResponse) ProtoMessage() {} func (*ReturnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{7} + return fileDescriptor_f1a937782ebbded5, []int{8} } func (m *ReturnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -787,7 +646,7 @@ func (m *InputsRequest) Reset() { *m = InputsRequest{} } func (m *InputsRequest) String() string { return proto.CompactTextString(m) } func (*InputsRequest) ProtoMessage() {} func (*InputsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{8} + return fileDescriptor_f1a937782ebbded5, []int{9} } func (m *InputsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -827,7 +686,7 @@ func (m *InputsResponse) Reset() { *m = InputsResponse{} } func (m *InputsResponse) String() string { return proto.CompactTextString(m) } func (*InputsResponse) ProtoMessage() {} func (*InputsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{9} + return fileDescriptor_f1a937782ebbded5, []int{10} } func (m *InputsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -879,7 +738,7 @@ func (m *ResolveImageConfigRequest) Reset() { *m = ResolveImageConfigReq func (m *ResolveImageConfigRequest) String() string { return proto.CompactTextString(m) } func (*ResolveImageConfigRequest) ProtoMessage() {} func (*ResolveImageConfigRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{10} + return fileDescriptor_f1a937782ebbded5, []int{11} } func (m *ResolveImageConfigRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -962,7 +821,7 @@ func (m *ResolveImageConfigResponse) Reset() { *m = ResolveImageConfigRe func (m *ResolveImageConfigResponse) String() string { return proto.CompactTextString(m) } func (*ResolveImageConfigResponse) ProtoMessage() {} func (*ResolveImageConfigResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{11} + return fileDescriptor_f1a937782ebbded5, []int{12} } func (m *ResolveImageConfigResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1023,7 +882,7 @@ func (m *SolveRequest) Reset() { *m = SolveRequest{} } func (m *SolveRequest) String() string { return proto.CompactTextString(m) } func (*SolveRequest) ProtoMessage() {} func (*SolveRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{12} + return fileDescriptor_f1a937782ebbded5, []int{13} } func (m *SolveRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1135,7 +994,7 @@ func (m *CacheOptionsEntry) Reset() { *m = CacheOptionsEntry{} } func (m *CacheOptionsEntry) String() string { return proto.CompactTextString(m) } func (*CacheOptionsEntry) ProtoMessage() {} func (*CacheOptionsEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{13} + return fileDescriptor_f1a937782ebbded5, []int{14} } func (m *CacheOptionsEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1192,7 +1051,7 @@ func (m *SolveResponse) Reset() { *m = SolveResponse{} } func (m *SolveResponse) String() string { return proto.CompactTextString(m) } func (*SolveResponse) ProtoMessage() {} func (*SolveResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{14} + return fileDescriptor_f1a937782ebbded5, []int{15} } func (m *SolveResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1248,7 +1107,7 @@ func (m *ReadFileRequest) Reset() { *m = ReadFileRequest{} } func (m *ReadFileRequest) String() string { return proto.CompactTextString(m) } func (*ReadFileRequest) ProtoMessage() {} func (*ReadFileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{15} + return fileDescriptor_f1a937782ebbded5, []int{16} } func (m *ReadFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1310,7 +1169,7 @@ func (m *FileRange) Reset() { *m = FileRange{} } func (m *FileRange) String() string { return proto.CompactTextString(m) } func (*FileRange) ProtoMessage() {} func (*FileRange) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{16} + return fileDescriptor_f1a937782ebbded5, []int{17} } func (m *FileRange) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1364,7 +1223,7 @@ func (m *ReadFileResponse) Reset() { *m = ReadFileResponse{} } func (m *ReadFileResponse) String() string { return proto.CompactTextString(m) } func (*ReadFileResponse) ProtoMessage() {} func (*ReadFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{17} + return fileDescriptor_f1a937782ebbded5, []int{18} } func (m *ReadFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1413,7 +1272,7 @@ func (m *ReadDirRequest) Reset() { *m = ReadDirRequest{} } func (m *ReadDirRequest) String() string { return proto.CompactTextString(m) } func (*ReadDirRequest) ProtoMessage() {} func (*ReadDirRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{18} + return fileDescriptor_f1a937782ebbded5, []int{19} } func (m *ReadDirRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1474,7 +1333,7 @@ func (m *ReadDirResponse) Reset() { *m = ReadDirResponse{} } func (m *ReadDirResponse) String() string { return proto.CompactTextString(m) } func (*ReadDirResponse) ProtoMessage() {} func (*ReadDirResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{19} + return fileDescriptor_f1a937782ebbded5, []int{20} } func (m *ReadDirResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1522,7 +1381,7 @@ func (m *StatFileRequest) Reset() { *m = StatFileRequest{} } func (m *StatFileRequest) String() string { return proto.CompactTextString(m) } func (*StatFileRequest) ProtoMessage() {} func (*StatFileRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{20} + return fileDescriptor_f1a937782ebbded5, []int{21} } func (m *StatFileRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1576,7 +1435,7 @@ func (m *StatFileResponse) Reset() { *m = StatFileResponse{} } func (m *StatFileResponse) String() string { return proto.CompactTextString(m) } func (*StatFileResponse) ProtoMessage() {} func (*StatFileResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{21} + return fileDescriptor_f1a937782ebbded5, []int{22} } func (m *StatFileResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1622,7 +1481,7 @@ func (m *PingRequest) Reset() { *m = PingRequest{} } func (m *PingRequest) String() string { return proto.CompactTextString(m) } func (*PingRequest) ProtoMessage() {} func (*PingRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{22} + return fileDescriptor_f1a937782ebbded5, []int{23} } func (m *PingRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1664,7 +1523,7 @@ func (m *PongResponse) Reset() { *m = PongResponse{} } func (m *PongResponse) String() string { return proto.CompactTextString(m) } func (*PongResponse) ProtoMessage() {} func (*PongResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{23} + return fileDescriptor_f1a937782ebbded5, []int{24} } func (m *PongResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1731,7 +1590,7 @@ func (m *WarnRequest) Reset() { *m = WarnRequest{} } func (m *WarnRequest) String() string { return proto.CompactTextString(m) } func (*WarnRequest) ProtoMessage() {} func (*WarnRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{24} + return fileDescriptor_f1a937782ebbded5, []int{25} } func (m *WarnRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1812,7 +1671,7 @@ func (m *WarnResponse) Reset() { *m = WarnResponse{} } func (m *WarnResponse) String() string { return proto.CompactTextString(m) } func (*WarnResponse) ProtoMessage() {} func (*WarnResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{25} + return fileDescriptor_f1a937782ebbded5, []int{26} } func (m *WarnResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1858,7 +1717,7 @@ func (m *NewContainerRequest) Reset() { *m = NewContainerRequest{} } func (m *NewContainerRequest) String() string { return proto.CompactTextString(m) } func (*NewContainerRequest) ProtoMessage() {} func (*NewContainerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{26} + return fileDescriptor_f1a937782ebbded5, []int{27} } func (m *NewContainerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1939,7 +1798,7 @@ func (m *NewContainerResponse) Reset() { *m = NewContainerResponse{} } func (m *NewContainerResponse) String() string { return proto.CompactTextString(m) } func (*NewContainerResponse) ProtoMessage() {} func (*NewContainerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{27} + return fileDescriptor_f1a937782ebbded5, []int{28} } func (m *NewContainerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1979,7 +1838,7 @@ func (m *ReleaseContainerRequest) Reset() { *m = ReleaseContainerRequest func (m *ReleaseContainerRequest) String() string { return proto.CompactTextString(m) } func (*ReleaseContainerRequest) ProtoMessage() {} func (*ReleaseContainerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{28} + return fileDescriptor_f1a937782ebbded5, []int{29} } func (m *ReleaseContainerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2025,7 +1884,7 @@ func (m *ReleaseContainerResponse) Reset() { *m = ReleaseContainerRespon func (m *ReleaseContainerResponse) String() string { return proto.CompactTextString(m) } func (*ReleaseContainerResponse) ProtoMessage() {} func (*ReleaseContainerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{29} + return fileDescriptor_f1a937782ebbded5, []int{30} } func (m *ReleaseContainerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2075,7 +1934,7 @@ func (m *ExecMessage) Reset() { *m = ExecMessage{} } func (m *ExecMessage) String() string { return proto.CompactTextString(m) } func (*ExecMessage) ProtoMessage() {} func (*ExecMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{30} + return fileDescriptor_f1a937782ebbded5, []int{31} } func (m *ExecMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2231,7 +2090,7 @@ func (m *InitMessage) Reset() { *m = InitMessage{} } func (m *InitMessage) String() string { return proto.CompactTextString(m) } func (*InitMessage) ProtoMessage() {} func (*InitMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{31} + return fileDescriptor_f1a937782ebbded5, []int{32} } func (m *InitMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2307,7 +2166,7 @@ func (m *ExitMessage) Reset() { *m = ExitMessage{} } func (m *ExitMessage) String() string { return proto.CompactTextString(m) } func (*ExitMessage) ProtoMessage() {} func (*ExitMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{32} + return fileDescriptor_f1a937782ebbded5, []int{33} } func (m *ExitMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2360,7 +2219,7 @@ func (m *StartedMessage) Reset() { *m = StartedMessage{} } func (m *StartedMessage) String() string { return proto.CompactTextString(m) } func (*StartedMessage) ProtoMessage() {} func (*StartedMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{33} + return fileDescriptor_f1a937782ebbded5, []int{34} } func (m *StartedMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2399,7 +2258,7 @@ func (m *DoneMessage) Reset() { *m = DoneMessage{} } func (m *DoneMessage) String() string { return proto.CompactTextString(m) } func (*DoneMessage) ProtoMessage() {} func (*DoneMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{34} + return fileDescriptor_f1a937782ebbded5, []int{35} } func (m *DoneMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2441,7 +2300,7 @@ func (m *FdMessage) Reset() { *m = FdMessage{} } func (m *FdMessage) String() string { return proto.CompactTextString(m) } func (*FdMessage) ProtoMessage() {} func (*FdMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{35} + return fileDescriptor_f1a937782ebbded5, []int{36} } func (m *FdMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2503,7 +2362,7 @@ func (m *ResizeMessage) Reset() { *m = ResizeMessage{} } func (m *ResizeMessage) String() string { return proto.CompactTextString(m) } func (*ResizeMessage) ProtoMessage() {} func (*ResizeMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{36} + return fileDescriptor_f1a937782ebbded5, []int{37} } func (m *ResizeMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2559,7 +2418,7 @@ func (m *SignalMessage) Reset() { *m = SignalMessage{} } func (m *SignalMessage) String() string { return proto.CompactTextString(m) } func (*SignalMessage) ProtoMessage() {} func (*SignalMessage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{37} + return fileDescriptor_f1a937782ebbded5, []int{38} } func (m *SignalMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2596,6 +2455,8 @@ func (m *SignalMessage) GetName() string { } func init() { + proto.RegisterEnum("moby.buildkit.v1.frontend.Attestation_Kind", Attestation_Kind_name, Attestation_Kind_value) + proto.RegisterEnum("moby.buildkit.v1.frontend.InTotoSubject_Kind", InTotoSubject_Kind_name, InTotoSubject_Kind_value) proto.RegisterType((*Result)(nil), "moby.buildkit.v1.frontend.Result") proto.RegisterMapType((map[string]*Attestations)(nil), "moby.buildkit.v1.frontend.Result.AttestationsEntry") proto.RegisterMapType((map[string][]byte)(nil), "moby.buildkit.v1.frontend.Result.MetadataEntry") @@ -2605,11 +2466,8 @@ func init() { proto.RegisterType((*RefMap)(nil), "moby.buildkit.v1.frontend.RefMap") proto.RegisterMapType((map[string]*Ref)(nil), "moby.buildkit.v1.frontend.RefMap.RefsEntry") proto.RegisterType((*Attestations)(nil), "moby.buildkit.v1.frontend.Attestations") - proto.RegisterType((*Attestations_Attestation)(nil), "moby.buildkit.v1.frontend.Attestations.Attestation") - proto.RegisterType((*InToto)(nil), "moby.buildkit.v1.frontend.InToto") - proto.RegisterType((*InToto_Subject)(nil), "moby.buildkit.v1.frontend.InToto.Subject") - proto.RegisterType((*InToto_Subject_SelfSubject)(nil), "moby.buildkit.v1.frontend.InToto.Subject.SelfSubject") - proto.RegisterType((*InToto_Subject_RawSubject)(nil), "moby.buildkit.v1.frontend.InToto.Subject.RawSubject") + proto.RegisterType((*Attestation)(nil), "moby.buildkit.v1.frontend.Attestation") + proto.RegisterType((*InTotoSubject)(nil), "moby.buildkit.v1.frontend.InTotoSubject") proto.RegisterType((*ReturnRequest)(nil), "moby.buildkit.v1.frontend.ReturnRequest") proto.RegisterType((*ReturnResponse)(nil), "moby.buildkit.v1.frontend.ReturnResponse") proto.RegisterType((*InputsRequest)(nil), "moby.buildkit.v1.frontend.InputsRequest") @@ -2651,153 +2509,152 @@ func init() { func init() { proto.RegisterFile("gateway.proto", fileDescriptor_f1a937782ebbded5) } var fileDescriptor_f1a937782ebbded5 = []byte{ - // 2321 bytes of a gzipped FileDescriptorProto + // 2307 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x8a, 0x14, 0x3f, 0x1e, 0x49, 0x59, 0x99, 0xa4, 0x29, 0xb3, 0x08, 0x1c, 0x65, 0xeb, - 0x3a, 0xb4, 0xe3, 0x2c, 0x53, 0xd9, 0x86, 0x5c, 0xbb, 0x4d, 0x6a, 0xea, 0x03, 0x62, 0x2c, 0xd9, - 0xea, 0xc8, 0x81, 0xd1, 0x20, 0x05, 0xba, 0xe2, 0x0e, 0xe9, 0xad, 0x57, 0x3b, 0xdb, 0xd9, 0xa1, - 0x65, 0x25, 0x97, 0xf6, 0x3f, 0xe8, 0xa9, 0xd7, 0x02, 0x3d, 0xf5, 0xd8, 0x53, 0x8f, 0x45, 0x8f, - 0x01, 0x7a, 0xe9, 0xa5, 0x40, 0xd1, 0x43, 0x50, 0xf8, 0x2f, 0xe8, 0xa9, 0x40, 0x6f, 0xc5, 0x9b, - 0x9d, 0x25, 0x87, 0x14, 0xbd, 0xa4, 0xe0, 0x93, 0x66, 0xde, 0xbe, 0xf7, 0x9b, 0x79, 0xdf, 0x6f, - 0x28, 0x68, 0x0c, 0x3c, 0xc9, 0x4e, 0xbd, 0x33, 0x37, 0x16, 0x5c, 0x72, 0xf2, 0xce, 0x09, 0x3f, - 0x3e, 0x73, 0x8f, 0x87, 0x41, 0xe8, 0x3f, 0x0b, 0xa4, 0xfb, 0xfc, 0x07, 0x6e, 0x5f, 0xf0, 0x48, - 0xb2, 0xc8, 0xb7, 0x3f, 0x1a, 0x04, 0xf2, 0xe9, 0xf0, 0xd8, 0xed, 0xf1, 0x93, 0xf6, 0x80, 0x0f, - 0x78, 0x5b, 0x49, 0x1c, 0x0f, 0xfb, 0x6a, 0xa7, 0x36, 0x6a, 0x95, 0x22, 0xd9, 0x1b, 0xd3, 0xec, - 0x03, 0xce, 0x07, 0x21, 0xf3, 0xe2, 0x20, 0xd1, 0xcb, 0xb6, 0x88, 0x7b, 0xed, 0x44, 0x7a, 0x72, - 0x98, 0x68, 0x99, 0x1b, 0x86, 0x0c, 0x5e, 0xa4, 0x9d, 0x5d, 0xa4, 0x9d, 0xf0, 0xf0, 0x39, 0x13, - 0xed, 0xf8, 0xb8, 0xcd, 0xe3, 0x8c, 0xbb, 0xfd, 0x4a, 0x6e, 0x2f, 0x0e, 0xda, 0xf2, 0x2c, 0x66, - 0x49, 0xfb, 0x94, 0x8b, 0x67, 0x4c, 0x68, 0x81, 0x9b, 0xaf, 0x14, 0x18, 0xca, 0x20, 0x44, 0xa9, - 0x9e, 0x17, 0x27, 0x78, 0x08, 0xfe, 0xd5, 0x42, 0xa6, 0xda, 0x92, 0x47, 0x41, 0x22, 0x83, 0x60, - 0x10, 0xb4, 0xfb, 0x89, 0x92, 0x49, 0x4f, 0x41, 0x25, 0x52, 0x76, 0xe7, 0x6f, 0x45, 0x28, 0x51, - 0x96, 0x0c, 0x43, 0x49, 0xae, 0x42, 0x43, 0xb0, 0xfe, 0x36, 0x8b, 0x05, 0xeb, 0x79, 0x92, 0xf9, - 0x4d, 0x6b, 0xdd, 0x6a, 0x55, 0xf7, 0x96, 0xe8, 0x24, 0x99, 0x7c, 0x0e, 0xab, 0x82, 0xf5, 0x13, - 0x83, 0x71, 0x79, 0xdd, 0x6a, 0xd5, 0x36, 0x3e, 0x74, 0x5f, 0xe9, 0x0c, 0x97, 0xb2, 0xfe, 0x81, - 0x17, 0x8f, 0x45, 0xf6, 0x96, 0xe8, 0x14, 0x08, 0xd9, 0x80, 0x82, 0x60, 0xfd, 0x66, 0x41, 0x61, - 0x5d, 0xce, 0xc7, 0xda, 0x5b, 0xa2, 0xc8, 0x4c, 0x36, 0xa1, 0x88, 0x28, 0xcd, 0xa2, 0x12, 0x7a, - 0x7f, 0xee, 0x05, 0xf6, 0x96, 0xa8, 0x12, 0x20, 0x0f, 0xa0, 0x72, 0xc2, 0xa4, 0xe7, 0x7b, 0xd2, - 0x6b, 0xc2, 0x7a, 0xa1, 0x55, 0xdb, 0x68, 0xe7, 0x0a, 0xa3, 0x81, 0xdc, 0x03, 0x2d, 0xb1, 0x13, - 0x49, 0x71, 0x46, 0x47, 0x00, 0xe4, 0x09, 0xd4, 0x3d, 0x29, 0x19, 0x5a, 0x35, 0xe0, 0x51, 0xd2, - 0xac, 0x29, 0xc0, 0x9b, 0xf3, 0x01, 0xef, 0x1b, 0x52, 0x29, 0xe8, 0x04, 0x90, 0x7d, 0x0f, 0x1a, - 0x13, 0x67, 0x92, 0x35, 0x28, 0x3c, 0x63, 0x67, 0xa9, 0x63, 0x28, 0x2e, 0xc9, 0x5b, 0xb0, 0xf2, - 0xdc, 0x0b, 0x87, 0x4c, 0xf9, 0xa0, 0x4e, 0xd3, 0xcd, 0xdd, 0xe5, 0x3b, 0x96, 0xfd, 0x14, 0xde, - 0x38, 0x87, 0x3f, 0x03, 0xe0, 0xc7, 0x26, 0x40, 0x6d, 0xe3, 0x83, 0x9c, 0x5b, 0x9b, 0x70, 0xc6, - 0x49, 0x9d, 0x0a, 0x94, 0x84, 0x52, 0xc8, 0xf9, 0x9d, 0x05, 0x6b, 0xd3, 0xae, 0x26, 0x5d, 0xed, - 0x24, 0x4b, 0x99, 0xe5, 0xf6, 0x05, 0xa2, 0x04, 0x09, 0xda, 0x30, 0x0a, 0xc2, 0xde, 0x84, 0xea, - 0x88, 0x34, 0xcf, 0x18, 0x55, 0xe3, 0x8a, 0xce, 0x26, 0x14, 0x28, 0xeb, 0x93, 0x55, 0x58, 0x0e, - 0x74, 0x5c, 0xd3, 0xe5, 0xc0, 0x27, 0xeb, 0x50, 0xf0, 0x59, 0x5f, 0xab, 0xbe, 0xea, 0xc6, 0xc7, - 0xee, 0x36, 0xeb, 0x07, 0x51, 0x80, 0x2a, 0x52, 0xfc, 0xe4, 0xfc, 0xc1, 0xc2, 0xfc, 0xc0, 0x6b, - 0x91, 0x4f, 0x27, 0xf4, 0x98, 0x1f, 0xed, 0xe7, 0x6e, 0xff, 0x24, 0xff, 0xf6, 0xb7, 0x26, 0x3d, - 0x31, 0x27, 0x05, 0x4c, 0xed, 0xfe, 0x6a, 0x41, 0xdd, 0x74, 0x0e, 0xf9, 0x1c, 0x6a, 0x46, 0x20, - 0xe9, 0x1b, 0xdf, 0x5c, 0xd0, 0xb5, 0xe6, 0x86, 0x9a, 0x38, 0xf6, 0xcf, 0xa0, 0x66, 0x7c, 0x23, - 0xf7, 0xa0, 0x14, 0x44, 0x92, 0x4b, 0xae, 0xb4, 0xc8, 0xcf, 0xbf, 0x6e, 0xf4, 0x98, 0x4b, 0xbe, - 0xb7, 0x44, 0xb5, 0x48, 0xa7, 0x31, 0x81, 0xe5, 0xfc, 0xa7, 0x00, 0xa5, 0x94, 0x87, 0x5c, 0x81, - 0x46, 0x2c, 0x98, 0x1f, 0x60, 0x08, 0x3c, 0x3e, 0x8b, 0x99, 0xb6, 0xd1, 0x24, 0x91, 0xb4, 0xe0, - 0xd2, 0x88, 0x40, 0x59, 0xff, 0x01, 0x3b, 0xd3, 0x5e, 0x9f, 0x26, 0x4f, 0xe0, 0x1d, 0x7a, 0xf2, - 0xa9, 0x2a, 0x31, 0x26, 0x1e, 0x12, 0xc9, 0x0e, 0x54, 0x92, 0xe1, 0xf1, 0x2f, 0x59, 0x4f, 0x62, - 0x39, 0x41, 0x7b, 0x5d, 0x9b, 0xab, 0x8e, 0x7b, 0x94, 0x4a, 0xd0, 0x91, 0xa8, 0xfd, 0xc7, 0x65, - 0x28, 0x6b, 0x2a, 0x79, 0x00, 0xc5, 0x84, 0x85, 0x7d, 0x6d, 0x9d, 0xdb, 0x0b, 0xc3, 0xb9, 0x47, - 0x2c, 0xec, 0xeb, 0x35, 0x56, 0x2c, 0x04, 0x21, 0x7b, 0x50, 0x10, 0xde, 0xa9, 0x8e, 0x8d, 0x5b, - 0x8b, 0x63, 0x51, 0xef, 0x74, 0x0c, 0x85, 0x10, 0x76, 0x03, 0x6a, 0xc6, 0x01, 0x76, 0x08, 0x30, - 0xe6, 0x21, 0x9f, 0x41, 0x69, 0x3b, 0x18, 0xb0, 0x44, 0xaa, 0xa0, 0xa9, 0x76, 0x36, 0xbe, 0xf9, - 0xf6, 0xbd, 0xa5, 0x7f, 0x7d, 0xfb, 0xde, 0x75, 0xa3, 0xad, 0xf0, 0x98, 0x45, 0x3d, 0x1e, 0x49, - 0x2f, 0x88, 0x98, 0xc0, 0xee, 0xf8, 0x91, 0xaf, 0x44, 0xdc, 0x54, 0x92, 0x6a, 0x04, 0x42, 0xa0, - 0x18, 0x79, 0x27, 0x59, 0x36, 0xaa, 0x75, 0xa7, 0x3a, 0x32, 0x8f, 0x23, 0xa1, 0x41, 0x99, 0x1c, - 0x8a, 0x88, 0xb2, 0x5f, 0x0d, 0x91, 0xff, 0x87, 0x59, 0x1d, 0x59, 0x20, 0x9e, 0xd2, 0x0a, 0x4a, - 0xb5, 0x00, 0x69, 0xc1, 0x0a, 0x13, 0x82, 0x0b, 0x6d, 0x1f, 0xe2, 0xa6, 0x2d, 0xdb, 0x15, 0x71, - 0xcf, 0x3d, 0x52, 0x2d, 0x9b, 0xa6, 0x0c, 0xce, 0x1a, 0xac, 0x66, 0xa7, 0x26, 0x31, 0x8f, 0x12, - 0xe6, 0x5c, 0x82, 0x46, 0x37, 0x8a, 0x87, 0x32, 0xd1, 0xf7, 0x70, 0xfe, 0x62, 0xc1, 0x6a, 0x46, - 0x49, 0x79, 0xc8, 0x97, 0x50, 0x1b, 0x57, 0x86, 0xac, 0x04, 0xdc, 0xcd, 0xf5, 0x82, 0x29, 0x6f, - 0x94, 0x15, 0x5d, 0x11, 0x4c, 0x38, 0xfb, 0x21, 0xac, 0x4d, 0x33, 0xcc, 0xa8, 0x0f, 0x57, 0x26, - 0xeb, 0xc3, 0x74, 0xb9, 0x32, 0xea, 0xc1, 0x3f, 0x2c, 0x78, 0x87, 0x32, 0x35, 0x83, 0x74, 0x4f, - 0xbc, 0x01, 0xdb, 0xe2, 0x51, 0x3f, 0x18, 0x64, 0x66, 0x5e, 0x53, 0xb5, 0x30, 0x43, 0xc6, 0xb2, - 0xd8, 0x82, 0xca, 0x61, 0xe8, 0xc9, 0x3e, 0x17, 0x27, 0x1a, 0xbc, 0x8e, 0xe0, 0x19, 0x8d, 0x8e, - 0xbe, 0x92, 0x75, 0xa8, 0x69, 0xe0, 0x03, 0xee, 0x33, 0x9d, 0x49, 0x26, 0x89, 0x34, 0xa1, 0xbc, - 0xcf, 0x07, 0x0f, 0xd1, 0xef, 0x45, 0xf5, 0x35, 0xdb, 0x12, 0x07, 0xea, 0x9a, 0x51, 0xa8, 0xb4, - 0x5e, 0x59, 0xb7, 0x5a, 0x2b, 0x74, 0x82, 0x46, 0xde, 0x85, 0xea, 0x11, 0x4b, 0x92, 0x80, 0x47, - 0xdd, 0xed, 0x66, 0x49, 0xc9, 0x8f, 0x09, 0xce, 0xaf, 0x2d, 0xb0, 0x67, 0xe9, 0xa5, 0x9d, 0x64, - 0xc6, 0xae, 0xf5, 0x9a, 0xb1, 0xfb, 0x36, 0x94, 0x52, 0x74, 0xdd, 0x58, 0xf5, 0xce, 0xf9, 0xf3, - 0x0a, 0xd4, 0x8f, 0xf0, 0x02, 0x99, 0x35, 0x5d, 0x80, 0xb1, 0x13, 0x74, 0xe0, 0x4e, 0xbb, 0xc6, - 0xe0, 0x20, 0x36, 0x54, 0x76, 0x75, 0x90, 0xe8, 0xc4, 0x18, 0xed, 0xc9, 0x17, 0x50, 0xcb, 0xd6, - 0x8f, 0x62, 0xd9, 0x2c, 0xa8, 0x28, 0xbb, 0x93, 0x13, 0x65, 0xe6, 0x4d, 0x5c, 0x43, 0x54, 0xc7, - 0x98, 0x41, 0x21, 0x37, 0xe0, 0x0d, 0x2f, 0x0c, 0xf9, 0xa9, 0x4e, 0x1c, 0x95, 0x02, 0xca, 0x05, - 0x15, 0x7a, 0xfe, 0x03, 0xf9, 0x18, 0xde, 0x34, 0x88, 0xf7, 0x85, 0xf0, 0xce, 0x30, 0x66, 0x4a, - 0x8a, 0x7f, 0xd6, 0x27, 0xec, 0xbd, 0xbb, 0x41, 0xe4, 0x85, 0x4d, 0x50, 0x3c, 0xe9, 0x06, 0x7d, - 0xbe, 0xf3, 0x22, 0xe6, 0x42, 0x32, 0x71, 0x5f, 0x4a, 0xd1, 0xac, 0x29, 0x63, 0x4e, 0xd0, 0xc8, - 0x21, 0xd4, 0xb7, 0xbc, 0xde, 0x53, 0xd6, 0x3d, 0x41, 0x62, 0xd2, 0xac, 0x2b, 0xb5, 0x6f, 0xe4, - 0xa8, 0xad, 0xd8, 0x1f, 0xc5, 0xe6, 0xdc, 0x64, 0x22, 0x90, 0x1e, 0xac, 0x66, 0xaa, 0xa7, 0x79, - 0xd8, 0x6c, 0x28, 0xcc, 0x7b, 0x17, 0x35, 0x65, 0x2a, 0x9d, 0x1e, 0x31, 0x05, 0x89, 0x8e, 0xdc, - 0xc1, 0x94, 0xf3, 0x24, 0x6b, 0xae, 0x2a, 0x9d, 0x47, 0x7b, 0xfb, 0x13, 0x58, 0x9b, 0xf6, 0xc6, - 0x45, 0xc6, 0x15, 0xfb, 0xa7, 0xf0, 0xe6, 0x8c, 0x2b, 0xbc, 0x56, 0x4d, 0xf8, 0x93, 0x05, 0x6f, - 0x9c, 0xb3, 0x1b, 0x96, 0x68, 0xa3, 0xc5, 0xaa, 0x35, 0x39, 0x80, 0x15, 0xf4, 0x4b, 0xd2, 0x5c, - 0x56, 0x46, 0xdb, 0xbc, 0x88, 0x23, 0x5c, 0x25, 0x99, 0x1a, 0x2c, 0x45, 0xb1, 0xef, 0x00, 0x8c, - 0x89, 0x17, 0x1a, 0xda, 0xbe, 0x84, 0x86, 0xf6, 0x8a, 0x4e, 0xf0, 0xb5, 0xf4, 0x89, 0xa0, 0x85, - 0xf1, 0x01, 0x30, 0x6e, 0x19, 0x85, 0x0b, 0xb6, 0x0c, 0xe7, 0x6b, 0xb8, 0x44, 0x99, 0xe7, 0xef, - 0x06, 0x21, 0x7b, 0x75, 0x65, 0xc4, 0x6c, 0x0d, 0xc2, 0x74, 0x6c, 0xc8, 0xb2, 0x55, 0xef, 0xc9, - 0x5d, 0x58, 0xa1, 0x5e, 0x34, 0x60, 0xfa, 0xe8, 0x2b, 0x39, 0x47, 0xab, 0x43, 0x90, 0x97, 0xa6, - 0x22, 0xce, 0x3d, 0xa8, 0x8e, 0x68, 0x58, 0x6b, 0x1e, 0xf5, 0xfb, 0x09, 0x4b, 0xeb, 0x56, 0x81, - 0xea, 0x1d, 0xd2, 0xf7, 0x59, 0x34, 0xd0, 0x47, 0x17, 0xa8, 0xde, 0x39, 0x57, 0x71, 0xc8, 0xce, - 0x6e, 0xae, 0x4d, 0x43, 0xa0, 0xb8, 0x8d, 0x8f, 0x19, 0x4b, 0x25, 0x98, 0x5a, 0x3b, 0x3e, 0xb6, - 0x3a, 0xcf, 0xdf, 0x0e, 0xc4, 0xab, 0x15, 0x6c, 0x42, 0x79, 0x3b, 0x10, 0x86, 0x7e, 0xd9, 0x96, - 0x5c, 0xc5, 0x26, 0xd8, 0x0b, 0x87, 0x3e, 0x6a, 0x2b, 0x99, 0x88, 0x74, 0xb5, 0x9f, 0xa2, 0x3a, - 0x9f, 0xa6, 0x76, 0x54, 0xa7, 0xe8, 0xcb, 0xdc, 0x80, 0x32, 0x8b, 0xa4, 0x08, 0x58, 0xd6, 0x29, - 0x89, 0x9b, 0xbe, 0x3f, 0x5d, 0xf5, 0xfe, 0x54, 0x1d, 0x99, 0x66, 0x2c, 0xce, 0x26, 0x5c, 0x42, - 0x42, 0xbe, 0x23, 0x08, 0x14, 0x8d, 0x4b, 0xaa, 0xb5, 0x73, 0x17, 0xd6, 0xc6, 0x82, 0xfa, 0xe8, - 0xab, 0x50, 0xc4, 0x91, 0x52, 0x17, 0xe2, 0x59, 0xe7, 0xaa, 0xef, 0x4e, 0x03, 0x6a, 0x87, 0x41, - 0x94, 0xf5, 0x44, 0xe7, 0xa5, 0x05, 0xf5, 0x43, 0x1e, 0x8d, 0x7b, 0xc9, 0x21, 0x5c, 0xca, 0x32, - 0xf0, 0xfe, 0x61, 0x77, 0xcb, 0x8b, 0x33, 0x55, 0xd6, 0xcf, 0xbb, 0x59, 0x3f, 0xc4, 0xdd, 0x94, - 0xb1, 0x53, 0xc4, 0xb6, 0x43, 0xa7, 0xc5, 0xc9, 0x4f, 0xa0, 0xbc, 0xbf, 0xdf, 0x51, 0x48, 0xcb, - 0x17, 0x42, 0xca, 0xc4, 0xc8, 0x27, 0x50, 0x7e, 0xa2, 0x7e, 0x1f, 0x48, 0x74, 0x6b, 0x98, 0x11, - 0x72, 0xa9, 0xa2, 0x29, 0x1b, 0x65, 0x3d, 0x2e, 0x7c, 0x9a, 0x09, 0x39, 0xff, 0xb5, 0xa0, 0xf6, - 0xc4, 0x1b, 0xcf, 0x5b, 0x9f, 0x41, 0xc9, 0x7f, 0xed, 0x7e, 0x99, 0x6e, 0x31, 0x8b, 0x43, 0xf6, - 0x9c, 0x85, 0x3a, 0x54, 0xd3, 0x0d, 0x52, 0x93, 0xa7, 0x5c, 0xa4, 0xd9, 0x59, 0xa7, 0xe9, 0x06, - 0xe3, 0xda, 0x67, 0xd2, 0x0b, 0x42, 0x35, 0x68, 0xd7, 0xa9, 0xde, 0xa1, 0xd7, 0x87, 0x22, 0x54, - 0x4d, 0xa9, 0x4a, 0x71, 0x49, 0x1c, 0x28, 0x06, 0x51, 0x9f, 0xab, 0xbe, 0xa3, 0xab, 0xdb, 0x11, - 0x1f, 0x8a, 0x1e, 0xeb, 0x46, 0x7d, 0x4e, 0xd5, 0x37, 0xf2, 0x3e, 0x94, 0x04, 0xa6, 0x51, 0xd2, - 0x2c, 0x2b, 0xa3, 0x54, 0x91, 0x2b, 0x4d, 0x36, 0xfd, 0xc1, 0x59, 0x85, 0x7a, 0xaa, 0xb7, 0x9e, - 0xf8, 0x7e, 0xbb, 0x0c, 0x6f, 0x3e, 0x64, 0xa7, 0x5b, 0x99, 0x5e, 0x99, 0x41, 0xd6, 0xa1, 0x36, - 0xa2, 0x75, 0xb7, 0x75, 0xf8, 0x99, 0x24, 0x3c, 0xec, 0x80, 0x0f, 0x23, 0x99, 0xf9, 0x50, 0x1d, - 0xa6, 0x28, 0x54, 0x7f, 0x20, 0xdf, 0x87, 0xf2, 0x43, 0x26, 0x4f, 0xb9, 0x78, 0xa6, 0xb4, 0x5e, - 0xdd, 0xa8, 0x21, 0xcf, 0x43, 0x26, 0x71, 0x3c, 0xa2, 0xd9, 0x37, 0x9c, 0xb9, 0xe2, 0x6c, 0xe6, - 0x2a, 0xce, 0x9a, 0xb9, 0xb2, 0xaf, 0x64, 0x13, 0x6a, 0x3d, 0x1e, 0x25, 0x52, 0x78, 0x01, 0x1e, - 0xbc, 0xa2, 0x98, 0xbf, 0x83, 0xcc, 0xa9, 0x63, 0xb7, 0xc6, 0x1f, 0xa9, 0xc9, 0x49, 0xae, 0x03, - 0xb0, 0x17, 0x52, 0x78, 0x7b, 0x3c, 0x91, 0x49, 0xb3, 0xa4, 0x2e, 0x0c, 0x28, 0x87, 0x84, 0xee, - 0x21, 0x35, 0xbe, 0x3a, 0x6f, 0xc3, 0x5b, 0x93, 0x16, 0xd1, 0xa6, 0xba, 0x07, 0xdf, 0xa5, 0x2c, - 0x64, 0x5e, 0xc2, 0x2e, 0x6e, 0x2d, 0xc7, 0x86, 0xe6, 0x79, 0x61, 0x0d, 0xfc, 0xbf, 0x02, 0xd4, - 0x76, 0x5e, 0xb0, 0xde, 0x01, 0x4b, 0x12, 0x6f, 0xa0, 0x26, 0xbf, 0x43, 0xc1, 0x7b, 0x2c, 0x49, - 0x46, 0x58, 0x63, 0x02, 0xf9, 0x11, 0x14, 0xbb, 0x51, 0x20, 0x75, 0x9b, 0xbb, 0x9a, 0x3b, 0x78, - 0x07, 0x52, 0x63, 0xe2, 0xdb, 0x09, 0xb7, 0xe4, 0x2e, 0x14, 0xb1, 0x48, 0x2c, 0x52, 0xa8, 0x7d, - 0x43, 0x16, 0x65, 0x48, 0x47, 0xfd, 0x3e, 0x16, 0x7c, 0xc5, 0xb4, 0x97, 0x5a, 0xf9, 0x1d, 0x26, - 0xf8, 0x8a, 0x8d, 0x11, 0xb4, 0x24, 0xd9, 0x81, 0xf2, 0x91, 0xf4, 0x84, 0x64, 0xbe, 0xf6, 0x5e, - 0xde, 0xd3, 0x52, 0x73, 0x8e, 0x51, 0x32, 0x59, 0x34, 0xc2, 0xce, 0x8b, 0x40, 0xea, 0x6c, 0xc8, - 0x33, 0x02, 0xb2, 0x19, 0x8a, 0xe0, 0x16, 0xa5, 0xb7, 0x79, 0xc4, 0x9a, 0xe5, 0xb9, 0xd2, 0xc8, - 0x66, 0x48, 0xe3, 0x16, 0xcd, 0x70, 0x14, 0x0c, 0x70, 0xbe, 0xab, 0xcc, 0x35, 0x43, 0xca, 0x68, - 0x98, 0x21, 0x25, 0x74, 0xca, 0xb0, 0xa2, 0xa6, 0x19, 0xe7, 0xf7, 0x16, 0xd4, 0x0c, 0x3f, 0x2d, - 0x90, 0x77, 0xef, 0x42, 0xf1, 0x80, 0x49, 0x4f, 0xfb, 0xbf, 0xa2, 0xb2, 0x8e, 0x49, 0x8f, 0x2a, - 0x2a, 0x16, 0x8e, 0x5d, 0x3f, 0x2d, 0x8a, 0x0d, 0x8a, 0x4b, 0xa4, 0x3c, 0x96, 0x67, 0xca, 0x65, - 0x15, 0x8a, 0x4b, 0x72, 0x03, 0x2a, 0x47, 0xac, 0x37, 0x14, 0x81, 0x3c, 0x53, 0x4e, 0x58, 0xdd, - 0x58, 0x53, 0xe5, 0x44, 0xd3, 0x54, 0x72, 0x8e, 0x38, 0x9c, 0x07, 0x18, 0x9c, 0xe3, 0x0b, 0x12, - 0x28, 0x6e, 0xe1, 0x7b, 0x07, 0x6f, 0xd6, 0xa0, 0x6a, 0x8d, 0x4f, 0xce, 0x9d, 0x79, 0x4f, 0xce, - 0x9d, 0xec, 0xc9, 0x39, 0xe9, 0x54, 0xec, 0x3e, 0x86, 0x91, 0x9d, 0xfb, 0x50, 0x1d, 0x05, 0x1e, - 0x59, 0x85, 0xe5, 0x5d, 0x5f, 0x9f, 0xb4, 0xbc, 0xeb, 0xa3, 0x2a, 0x3b, 0x8f, 0x76, 0xd5, 0x29, - 0x15, 0x8a, 0xcb, 0x51, 0xaf, 0x2f, 0x18, 0xbd, 0x7e, 0x13, 0x1f, 0xd3, 0x46, 0xf4, 0x21, 0x13, - 0xe5, 0xa7, 0x49, 0x76, 0x65, 0x5c, 0xa7, 0x6a, 0x84, 0x89, 0xc2, 0x52, 0x6a, 0x84, 0x89, 0xf3, - 0x3d, 0x68, 0x4c, 0xf8, 0x0b, 0x99, 0xd4, 0xeb, 0x4d, 0x8f, 0x84, 0xb8, 0xde, 0xf8, 0x67, 0x15, - 0xaa, 0xfb, 0xfb, 0x9d, 0x8e, 0x08, 0xfc, 0x01, 0x23, 0xbf, 0xb1, 0x80, 0x9c, 0x7f, 0x86, 0x91, - 0x5b, 0xf9, 0x99, 0x31, 0xfb, 0x35, 0x6a, 0xdf, 0xbe, 0xa0, 0x94, 0xee, 0xcf, 0x5f, 0xc0, 0x8a, - 0x9a, 0x0d, 0xc9, 0x07, 0x0b, 0xce, 0xf4, 0x76, 0x6b, 0x3e, 0xa3, 0xc6, 0xee, 0x41, 0x25, 0x9b, - 0xaf, 0xc8, 0xf5, 0xdc, 0xeb, 0x4d, 0x8c, 0x8f, 0xf6, 0x87, 0x0b, 0xf1, 0xea, 0x43, 0x7e, 0x01, - 0x65, 0x3d, 0x36, 0x91, 0x6b, 0x73, 0xe4, 0xc6, 0x03, 0x9c, 0x7d, 0x7d, 0x11, 0xd6, 0xb1, 0x1a, - 0xd9, 0x78, 0x94, 0xab, 0xc6, 0xd4, 0xf0, 0x95, 0xab, 0xc6, 0xb9, 0x79, 0xeb, 0x09, 0x14, 0x71, - 0x8e, 0x22, 0x79, 0xf5, 0xc4, 0x18, 0xb4, 0xec, 0x3c, 0x77, 0x4d, 0x0c, 0x60, 0x3f, 0xc7, 0xba, - 0xab, 0xde, 0xa2, 0xf9, 0x15, 0xd7, 0xf8, 0x01, 0xc9, 0xbe, 0xb6, 0x00, 0xe7, 0x18, 0x5e, 0xbf, - 0xe3, 0x5a, 0x0b, 0xfc, 0x8a, 0x33, 0x1f, 0x7e, 0xea, 0xf7, 0x22, 0x0e, 0x75, 0xb3, 0x9d, 0x12, - 0x37, 0x47, 0x74, 0xc6, 0x24, 0x62, 0xb7, 0x17, 0xe6, 0xd7, 0x07, 0x7e, 0x8d, 0x6f, 0x82, 0xc9, - 0x56, 0x4b, 0x36, 0x72, 0xcd, 0x31, 0xb3, 0xa9, 0xdb, 0x37, 0x2f, 0x24, 0xa3, 0x0f, 0xf7, 0xd2, - 0x56, 0xae, 0xdb, 0x35, 0xc9, 0xef, 0x4c, 0xa3, 0x96, 0x6f, 0x2f, 0xc8, 0xd7, 0xb2, 0x3e, 0xb6, - 0x30, 0xce, 0x70, 0x84, 0xcb, 0xc5, 0x36, 0x66, 0xdb, 0xdc, 0x38, 0x33, 0x67, 0xc1, 0x4e, 0xfd, - 0x9b, 0x97, 0x97, 0xad, 0xbf, 0xbf, 0xbc, 0x6c, 0xfd, 0xfb, 0xe5, 0x65, 0xeb, 0xb8, 0xa4, 0xfe, - 0x2b, 0x76, 0xf3, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x93, 0xc5, 0x33, 0x68, 0x67, 0x1c, 0x00, - 0x00, + 0x15, 0xd7, 0x8a, 0x94, 0x48, 0x3e, 0x7e, 0x98, 0x1e, 0xa7, 0x29, 0x4d, 0x04, 0x8e, 0xb2, 0x4d, + 0x15, 0xda, 0xb1, 0x97, 0x29, 0x9d, 0x40, 0xae, 0xdd, 0x26, 0xd5, 0x27, 0xa4, 0x58, 0xb2, 0xd9, + 0x91, 0x0b, 0x17, 0x41, 0x0a, 0x74, 0xc5, 0x1d, 0xd2, 0x5b, 0xaf, 0x76, 0xb7, 0xb3, 0x43, 0xcb, + 0x4a, 0x2e, 0xed, 0xbd, 0x87, 0x9e, 0x7a, 0x2d, 0xd0, 0xbf, 0xa0, 0xa7, 0x1e, 0x7b, 0x0e, 0xd0, + 0x4b, 0x2f, 0x05, 0xda, 0x1e, 0x82, 0xc2, 0x7f, 0x44, 0x81, 0xde, 0x8a, 0x37, 0x33, 0x4b, 0x0e, + 0x29, 0x7a, 0x49, 0x25, 0x27, 0xcd, 0xbc, 0x7d, 0xbf, 0x37, 0xef, 0x73, 0xde, 0x1b, 0x0a, 0xaa, + 0x03, 0x57, 0xb0, 0x33, 0xf7, 0xdc, 0x89, 0x79, 0x24, 0x22, 0x72, 0xfd, 0x34, 0x3a, 0x39, 0x77, + 0x4e, 0x86, 0x7e, 0xe0, 0x3d, 0xf7, 0x85, 0xf3, 0xe2, 0x07, 0x4e, 0x9f, 0x47, 0xa1, 0x60, 0xa1, + 0xd7, 0xbc, 0x33, 0xf0, 0xc5, 0xb3, 0xe1, 0x89, 0xd3, 0x8b, 0x4e, 0xdb, 0x83, 0x68, 0x10, 0xb5, + 0x25, 0xe2, 0x64, 0xd8, 0x97, 0x3b, 0xb9, 0x91, 0x2b, 0x25, 0xa9, 0xd9, 0x99, 0x66, 0x1f, 0x44, + 0xd1, 0x20, 0x60, 0x6e, 0xec, 0x27, 0x7a, 0xd9, 0xe6, 0x71, 0xaf, 0x9d, 0x08, 0x57, 0x0c, 0x13, + 0x8d, 0xb9, 0x6d, 0x60, 0x50, 0x91, 0x76, 0xaa, 0x48, 0x3b, 0x89, 0x82, 0x17, 0x8c, 0xb7, 0xe3, + 0x93, 0x76, 0x14, 0xa7, 0xdc, 0xed, 0xd7, 0x72, 0xbb, 0xb1, 0xdf, 0x16, 0xe7, 0x31, 0x4b, 0xda, + 0x67, 0x11, 0x7f, 0xce, 0xb8, 0x06, 0xdc, 0x7d, 0x2d, 0x60, 0x28, 0xfc, 0x00, 0x51, 0x3d, 0x37, + 0x4e, 0xf0, 0x10, 0xfc, 0xab, 0x41, 0xa6, 0xd9, 0x22, 0x0a, 0xfd, 0x44, 0xf8, 0xfe, 0xc0, 0x6f, + 0xf7, 0x13, 0x89, 0x51, 0xa7, 0xa0, 0x11, 0x8a, 0xdd, 0xfe, 0x5b, 0x1e, 0x56, 0x29, 0x4b, 0x86, + 0x81, 0x20, 0xeb, 0x50, 0xe5, 0xac, 0xbf, 0xc3, 0x62, 0xce, 0x7a, 0xae, 0x60, 0x5e, 0xc3, 0x5a, + 0xb3, 0x5a, 0xa5, 0xfd, 0x25, 0x3a, 0x49, 0x26, 0x3f, 0x83, 0x1a, 0x67, 0xfd, 0xc4, 0x60, 0x5c, + 0x5e, 0xb3, 0x5a, 0xe5, 0xce, 0xfb, 0xce, 0x6b, 0x83, 0xe1, 0x50, 0xd6, 0x3f, 0x72, 0xe3, 0x31, + 0x64, 0x7f, 0x89, 0x4e, 0x09, 0x21, 0x1d, 0xc8, 0x71, 0xd6, 0x6f, 0xe4, 0xa4, 0xac, 0x1b, 0xd9, + 0xb2, 0xf6, 0x97, 0x28, 0x32, 0x93, 0x0d, 0xc8, 0xa3, 0x94, 0x46, 0x5e, 0x82, 0xde, 0x99, 0xab, + 0xc0, 0xfe, 0x12, 0x95, 0x00, 0xf2, 0x10, 0x8a, 0xa7, 0x4c, 0xb8, 0x9e, 0x2b, 0xdc, 0x06, 0xac, + 0xe5, 0x5a, 0xe5, 0x4e, 0x3b, 0x13, 0x8c, 0x0e, 0x72, 0x8e, 0x34, 0x62, 0x37, 0x14, 0xfc, 0x9c, + 0x8e, 0x04, 0x90, 0xa7, 0x50, 0x71, 0x85, 0x60, 0xe8, 0x55, 0x3f, 0x0a, 0x93, 0x46, 0x59, 0x0a, + 0xbc, 0x3b, 0x5f, 0xe0, 0xa6, 0x81, 0x52, 0x42, 0x27, 0x04, 0x35, 0x1f, 0x40, 0x75, 0xe2, 0x4c, + 0x52, 0x87, 0xdc, 0x73, 0x76, 0xae, 0x02, 0x43, 0x71, 0x49, 0xde, 0x80, 0x95, 0x17, 0x6e, 0x30, + 0x64, 0x32, 0x06, 0x15, 0xaa, 0x36, 0xf7, 0x97, 0xef, 0x59, 0xcd, 0x67, 0x70, 0xf5, 0x82, 0xfc, + 0x19, 0x02, 0x7e, 0x6c, 0x0a, 0x28, 0x77, 0xde, 0xcb, 0xd0, 0xda, 0x14, 0x67, 0x9c, 0xb4, 0x55, + 0x84, 0x55, 0x2e, 0x0d, 0xb2, 0xff, 0x60, 0x41, 0x7d, 0x3a, 0xd4, 0xe4, 0x40, 0x07, 0xc9, 0x92, + 0x6e, 0xf9, 0xe8, 0x12, 0x59, 0x82, 0x04, 0xed, 0x18, 0x29, 0xa2, 0xb9, 0x01, 0xa5, 0x11, 0x69, + 0x9e, 0x33, 0x4a, 0x86, 0x8a, 0xf6, 0x06, 0xe4, 0x28, 0xeb, 0x93, 0x1a, 0x2c, 0xfb, 0x3a, 0xaf, + 0xe9, 0xb2, 0xef, 0x91, 0x35, 0xc8, 0x79, 0xac, 0xaf, 0x4d, 0xaf, 0x39, 0xf1, 0x89, 0xb3, 0xc3, + 0xfa, 0x7e, 0xe8, 0xa3, 0x89, 0x14, 0x3f, 0xd9, 0x7f, 0xb2, 0xb0, 0x3e, 0x50, 0x2d, 0xf2, 0xc9, + 0x84, 0x1d, 0xf3, 0xb3, 0xfd, 0x82, 0xf6, 0x4f, 0xb3, 0xb5, 0xff, 0x70, 0x32, 0x12, 0x73, 0x4a, + 0xc0, 0xb4, 0xee, 0xe7, 0x50, 0x31, 0x63, 0x43, 0xf6, 0xa1, 0x6c, 0xe4, 0x91, 0x56, 0x78, 0x7d, + 0xb1, 0xc8, 0x52, 0x13, 0x6a, 0xff, 0x6e, 0x19, 0xca, 0xc6, 0x47, 0xf4, 0xc1, 0x73, 0x3f, 0x54, + 0x2e, 0xac, 0x65, 0xfa, 0xc0, 0x40, 0x39, 0x0f, 0xfd, 0xd0, 0xa3, 0x12, 0x88, 0x66, 0x73, 0xed, + 0xf1, 0x92, 0xaa, 0x61, 0x02, 0xf9, 0xd8, 0x15, 0xcf, 0x64, 0xe1, 0x97, 0xa8, 0x5c, 0x93, 0x0f, + 0xe0, 0x9a, 0x1f, 0x3e, 0x89, 0x44, 0xd4, 0xe5, 0xcc, 0xf3, 0x31, 0x17, 0x9e, 0x9c, 0xc7, 0x4c, + 0x96, 0x79, 0x89, 0xce, 0xfa, 0x44, 0xba, 0x50, 0x53, 0xe4, 0xe3, 0xe1, 0xc9, 0xaf, 0x58, 0x4f, + 0x24, 0x8d, 0x15, 0x69, 0x75, 0x2b, 0x43, 0xc5, 0x03, 0x13, 0x40, 0xa7, 0xf0, 0x36, 0x81, 0x3c, + 0xea, 0x4d, 0x00, 0x56, 0x15, 0x63, 0x7d, 0xc9, 0xfe, 0x97, 0x05, 0xd5, 0x09, 0x14, 0xd9, 0x9c, + 0x70, 0xc8, 0x9d, 0x45, 0x4f, 0x33, 0x5d, 0xd2, 0x85, 0x12, 0x77, 0xcf, 0x76, 0xfc, 0x01, 0x4b, + 0x44, 0x63, 0x79, 0x2d, 0xd7, 0x2a, 0x6d, 0x75, 0xbe, 0xfa, 0xfa, 0xed, 0xa5, 0x7f, 0x7f, 0xfd, + 0xf6, 0x2d, 0xe3, 0x32, 0x8f, 0x62, 0x16, 0xf6, 0xa2, 0x50, 0xb8, 0x7e, 0xc8, 0x38, 0xf6, 0xa4, + 0x3b, 0x9e, 0x84, 0x38, 0x0a, 0x49, 0xc7, 0x42, 0x48, 0x03, 0x0a, 0xdc, 0x3d, 0x7b, 0xe4, 0x9e, + 0x32, 0xed, 0xd5, 0x74, 0x6b, 0x5f, 0xd7, 0x46, 0x15, 0x20, 0x47, 0xdd, 0xb3, 0xfa, 0x12, 0x29, + 0x42, 0xfe, 0x98, 0x05, 0xfd, 0xba, 0x65, 0x0b, 0xa8, 0x52, 0x26, 0x86, 0x3c, 0xa4, 0xec, 0xd7, + 0x43, 0x94, 0xf2, 0xc3, 0xb4, 0xac, 0xa5, 0x71, 0xf3, 0xae, 0x57, 0x64, 0xa4, 0x1a, 0x40, 0x5a, + 0xb0, 0xc2, 0x38, 0x8f, 0xb8, 0x4e, 0x65, 0xe2, 0xa8, 0x0e, 0xea, 0xf0, 0xb8, 0xe7, 0x1c, 0xcb, + 0x0e, 0x4a, 0x15, 0x83, 0x5d, 0x87, 0x5a, 0x7a, 0x6a, 0x12, 0x47, 0x61, 0xc2, 0xec, 0x2b, 0xe8, + 0xe2, 0x78, 0x28, 0x12, 0xad, 0x87, 0xfd, 0x57, 0x0b, 0x6a, 0x29, 0x45, 0xf1, 0x90, 0xcf, 0xa1, + 0x3c, 0x2e, 0xd4, 0xb4, 0x22, 0xef, 0x67, 0x3a, 0xdf, 0xc4, 0x1b, 0x55, 0xae, 0x0b, 0xd4, 0x14, + 0xd7, 0x7c, 0x04, 0xf5, 0x69, 0x86, 0x19, 0xe5, 0xfa, 0xee, 0x64, 0xb9, 0x4e, 0xdf, 0x1e, 0x46, + 0x79, 0xfe, 0xc3, 0x82, 0xeb, 0x94, 0xc9, 0x91, 0xe0, 0xe0, 0xd4, 0x1d, 0xb0, 0xed, 0x28, 0xec, + 0xfb, 0x83, 0xd4, 0xcd, 0x75, 0x79, 0x35, 0xa5, 0x92, 0xf1, 0x96, 0x6a, 0x41, 0xb1, 0x1b, 0xb8, + 0xa2, 0x1f, 0xf1, 0x53, 0x2d, 0xbc, 0x82, 0xc2, 0x53, 0x1a, 0x1d, 0x7d, 0x25, 0x6b, 0x50, 0xd6, + 0x82, 0x8f, 0x22, 0x2f, 0x0d, 0xb6, 0x49, 0xc2, 0x54, 0x38, 0x8c, 0x06, 0x32, 0x15, 0x54, 0xf5, + 0xa4, 0x5b, 0x62, 0x43, 0x45, 0x33, 0x72, 0x59, 0x5c, 0x2b, 0x6b, 0x56, 0x6b, 0x85, 0x4e, 0xd0, + 0xc8, 0x5b, 0x50, 0x3a, 0x66, 0x49, 0xe2, 0x47, 0xe1, 0xc1, 0x4e, 0x63, 0x55, 0xe2, 0xc7, 0x04, + 0xfb, 0x37, 0x16, 0x34, 0x67, 0xd9, 0xa5, 0x83, 0xf4, 0x29, 0xac, 0xea, 0xa4, 0x96, 0xb6, 0x7d, + 0xa3, 0xa4, 0xd6, 0x12, 0xc8, 0x9b, 0xb0, 0xaa, 0xa4, 0xeb, 0x3e, 0xa7, 0x77, 0xf6, 0x5f, 0x56, + 0xa0, 0x72, 0x8c, 0x0a, 0xa4, 0xde, 0x74, 0x00, 0xc6, 0x41, 0xd0, 0x89, 0x3b, 0x1d, 0x1a, 0x83, + 0x83, 0x34, 0xa1, 0xb8, 0xa7, 0x93, 0x44, 0x5f, 0x4a, 0xa3, 0x3d, 0xf9, 0x0c, 0xca, 0xe9, 0xfa, + 0x71, 0x2c, 0x1a, 0x39, 0x99, 0x65, 0xf7, 0x32, 0xb2, 0xcc, 0xd4, 0xc4, 0x31, 0xa0, 0x3a, 0xc7, + 0x0c, 0x0a, 0xb9, 0x0d, 0x57, 0xdd, 0x20, 0x88, 0xce, 0x74, 0xe1, 0xc8, 0x12, 0x90, 0x21, 0x28, + 0xd2, 0x8b, 0x1f, 0xf0, 0x3e, 0x34, 0x88, 0x9b, 0x9c, 0xbb, 0xe7, 0x98, 0x33, 0xab, 0x92, 0x7f, + 0xd6, 0x27, 0x6c, 0x85, 0x7b, 0x7e, 0xe8, 0x06, 0x0d, 0x90, 0x3c, 0x6a, 0x83, 0x31, 0xdf, 0x7d, + 0x19, 0x47, 0x5c, 0x30, 0xbe, 0x29, 0x04, 0x6f, 0x94, 0xa5, 0x33, 0x27, 0x68, 0xa4, 0x0b, 0x95, + 0x6d, 0xb7, 0xf7, 0x8c, 0x1d, 0x9c, 0x22, 0x31, 0x69, 0x54, 0xa4, 0xd9, 0xb7, 0x33, 0xcc, 0x96, + 0xec, 0x8f, 0x63, 0x73, 0x8c, 0x31, 0x25, 0x90, 0x1e, 0xd4, 0x52, 0xd3, 0x55, 0x1d, 0x36, 0xaa, + 0x52, 0xe6, 0x83, 0xcb, 0xba, 0x52, 0xa1, 0xd5, 0x11, 0x53, 0x22, 0x31, 0x90, 0xbb, 0x58, 0x72, + 0xae, 0x60, 0x8d, 0x9a, 0xb4, 0x79, 0xb4, 0x6f, 0x7e, 0x0c, 0xf5, 0xe9, 0x68, 0x5c, 0x66, 0x7a, + 0x68, 0xfe, 0x14, 0xae, 0xcd, 0x50, 0xe1, 0x5b, 0xdd, 0x09, 0x7f, 0xb6, 0xe0, 0xea, 0x05, 0xbf, + 0x61, 0x2f, 0x94, 0xb5, 0xa8, 0x44, 0xca, 0x35, 0x39, 0x82, 0x15, 0x8c, 0x4b, 0x22, 0x5b, 0x43, + 0xb9, 0xb3, 0x71, 0x99, 0x40, 0x38, 0x12, 0xa9, 0x1c, 0xa6, 0xa4, 0x34, 0xef, 0x01, 0x8c, 0x89, + 0x97, 0x9a, 0xa1, 0x3e, 0x87, 0xaa, 0x8e, 0x8a, 0x2e, 0x70, 0xdd, 0xcb, 0xad, 0x71, 0x2f, 0x1f, + 0xb7, 0x8c, 0xdc, 0x25, 0x5b, 0x86, 0xfd, 0x25, 0x5c, 0xa1, 0xcc, 0xf5, 0xf6, 0xfc, 0x80, 0xbd, + 0xfe, 0x66, 0xc4, 0x6a, 0xf5, 0x03, 0xd6, 0xc5, 0x79, 0x21, 0xad, 0x56, 0xbd, 0x27, 0xf7, 0x61, + 0x85, 0xba, 0xe1, 0x80, 0xe9, 0xa3, 0xdf, 0xcd, 0x38, 0x5a, 0x1e, 0x82, 0xbc, 0x54, 0x41, 0xec, + 0x07, 0x50, 0x1a, 0xd1, 0xf0, 0xae, 0x79, 0xdc, 0xef, 0x27, 0x4c, 0xdd, 0x5b, 0x39, 0xaa, 0x77, + 0x48, 0x3f, 0x64, 0xe1, 0x40, 0x1f, 0x9d, 0xa3, 0x7a, 0x67, 0xaf, 0xe3, 0xcc, 0x9b, 0x6a, 0xae, + 0x5d, 0x43, 0x20, 0xbf, 0x83, 0x6f, 0x0b, 0x4b, 0x16, 0x98, 0x5c, 0xdb, 0x1e, 0xb6, 0x3a, 0xd7, + 0xdb, 0xf1, 0xf9, 0xeb, 0x0d, 0x6c, 0x40, 0x61, 0xc7, 0xe7, 0x86, 0x7d, 0xe9, 0x96, 0xac, 0x63, + 0x13, 0xec, 0x05, 0x43, 0x0f, 0xad, 0x15, 0x8c, 0x87, 0xfa, 0xb6, 0x9f, 0xa2, 0xda, 0x9f, 0x28, + 0x3f, 0xca, 0x53, 0xb4, 0x32, 0xb7, 0xa1, 0xc0, 0x42, 0xc1, 0x7d, 0x96, 0x76, 0x4a, 0xe2, 0xa8, + 0xe7, 0xa0, 0x23, 0x9f, 0x83, 0xb2, 0x23, 0xd3, 0x94, 0xc5, 0xde, 0x80, 0x2b, 0x48, 0xc8, 0x0e, + 0x04, 0x81, 0xbc, 0xa1, 0xa4, 0x5c, 0xdb, 0xf7, 0xa1, 0x3e, 0x06, 0xea, 0xa3, 0xd7, 0x21, 0x8f, + 0x43, 0xa0, 0xbe, 0x88, 0x67, 0x9d, 0x2b, 0xbf, 0xdb, 0x55, 0x28, 0x77, 0xfd, 0x30, 0xed, 0x89, + 0xf6, 0x2b, 0x0b, 0x2a, 0xdd, 0x28, 0x1c, 0xf7, 0x92, 0x2e, 0x5c, 0x49, 0x2b, 0x70, 0xb3, 0x7b, + 0xb0, 0xed, 0xc6, 0xa9, 0x29, 0x6b, 0x17, 0xc3, 0xac, 0xdf, 0xc5, 0x8e, 0x62, 0xdc, 0xca, 0x63, + 0xdb, 0xa1, 0xd3, 0x70, 0xf2, 0x13, 0x28, 0x1c, 0x1e, 0x6e, 0x49, 0x49, 0xcb, 0x97, 0x92, 0x94, + 0xc2, 0xc8, 0xc7, 0x50, 0x78, 0x2a, 0x9f, 0xeb, 0x89, 0x6e, 0x0d, 0x33, 0x52, 0x4e, 0x19, 0xaa, + 0xd8, 0x28, 0xeb, 0x45, 0xdc, 0xa3, 0x29, 0xc8, 0xfe, 0xaf, 0x05, 0xe5, 0xa7, 0xee, 0x78, 0xde, + 0xfa, 0x14, 0x56, 0xbd, 0x6f, 0xdd, 0x2f, 0xd5, 0x16, 0xab, 0x38, 0x60, 0x2f, 0x58, 0xa0, 0x53, + 0x55, 0x6d, 0x90, 0x9a, 0x3c, 0x8b, 0xb8, 0xaa, 0xce, 0x0a, 0x55, 0x1b, 0xcc, 0x6b, 0x8f, 0x09, + 0xd7, 0x0f, 0x1a, 0xf9, 0xb5, 0x1c, 0xf6, 0x56, 0xb5, 0xc3, 0xa8, 0x0f, 0x79, 0x20, 0x9b, 0x52, + 0x89, 0xe2, 0x92, 0xd8, 0x90, 0xf7, 0xc3, 0x7e, 0x24, 0xfb, 0x8e, 0xbe, 0xdd, 0x8e, 0xa3, 0x21, + 0xef, 0xb1, 0x83, 0xb0, 0x1f, 0x51, 0xf9, 0x8d, 0xbc, 0x03, 0xab, 0x1c, 0xcb, 0x28, 0x69, 0x14, + 0xa4, 0x53, 0x4a, 0xc8, 0xa5, 0x8a, 0x4d, 0x7f, 0xb0, 0x6b, 0x50, 0x51, 0x76, 0xeb, 0x89, 0xef, + 0xf7, 0xcb, 0x70, 0xed, 0x11, 0x3b, 0xdb, 0x4e, 0xed, 0x4a, 0x1d, 0xb2, 0x06, 0xe5, 0x11, 0xed, + 0x60, 0x47, 0xa7, 0x9f, 0x49, 0xc2, 0xc3, 0x8e, 0xa2, 0x61, 0x28, 0xd2, 0x18, 0xca, 0xc3, 0x24, + 0x85, 0xea, 0x0f, 0xe4, 0xfb, 0x50, 0x78, 0xc4, 0xc4, 0x59, 0xc4, 0x9f, 0x4b, 0xab, 0x6b, 0x9d, + 0x32, 0xf2, 0x3c, 0x62, 0x02, 0xc7, 0x23, 0x9a, 0x7e, 0xc3, 0x99, 0x2b, 0x4e, 0x67, 0xae, 0xfc, + 0xac, 0x99, 0x2b, 0xfd, 0x4a, 0x36, 0xa0, 0xdc, 0x8b, 0xc2, 0x44, 0x70, 0xd7, 0x0f, 0xe5, 0x33, + 0x03, 0x99, 0xbf, 0x83, 0xcc, 0x2a, 0xb0, 0xdb, 0xe3, 0x8f, 0xd4, 0xe4, 0x24, 0xb7, 0x00, 0xd8, + 0x4b, 0xc1, 0xdd, 0xfd, 0x28, 0x11, 0x49, 0x63, 0x55, 0x2a, 0x0c, 0x88, 0x43, 0xc2, 0x41, 0x97, + 0x1a, 0x5f, 0xed, 0x37, 0xe1, 0x8d, 0x49, 0x8f, 0x68, 0x57, 0x3d, 0x80, 0xef, 0x52, 0x16, 0x30, + 0x37, 0x61, 0x97, 0xf7, 0x96, 0xdd, 0x84, 0xc6, 0x45, 0xb0, 0x16, 0xfc, 0xbf, 0x1c, 0x94, 0x77, + 0x5f, 0xb2, 0xde, 0x11, 0x4b, 0x12, 0x77, 0x20, 0x27, 0xbf, 0x2e, 0x8f, 0x7a, 0x2c, 0x49, 0x46, + 0xb2, 0xc6, 0x04, 0xf2, 0x23, 0xc8, 0x1f, 0x84, 0xbe, 0xd0, 0x6d, 0x6e, 0x3d, 0x73, 0xf0, 0xf6, + 0x85, 0x96, 0xb9, 0xbf, 0x44, 0x25, 0x8a, 0xdc, 0x87, 0x3c, 0x5e, 0x12, 0x8b, 0x5c, 0xd4, 0x9e, + 0x81, 0x45, 0x0c, 0xd9, 0x92, 0x3f, 0x57, 0xf9, 0x5f, 0x30, 0x1d, 0xa5, 0x56, 0x76, 0x87, 0xf1, + 0xbf, 0x60, 0x63, 0x09, 0x1a, 0x49, 0x76, 0xa1, 0x70, 0x2c, 0x5c, 0x2e, 0x98, 0xa7, 0xa3, 0x77, + 0x33, 0x6b, 0x10, 0x51, 0x9c, 0x63, 0x29, 0x29, 0x16, 0x9d, 0xb0, 0xfb, 0xd2, 0x17, 0xba, 0x1a, + 0xb2, 0x9c, 0x80, 0x6c, 0x86, 0x21, 0xb8, 0x45, 0xf4, 0x4e, 0x14, 0xb2, 0x46, 0x61, 0x2e, 0x1a, + 0xd9, 0x0c, 0x34, 0x6e, 0xd1, 0x0d, 0xc7, 0xfe, 0x00, 0xe7, 0xbb, 0xe2, 0x5c, 0x37, 0x28, 0x46, + 0xc3, 0x0d, 0x8a, 0xb0, 0x55, 0x80, 0x15, 0x39, 0xcd, 0xd8, 0x7f, 0xb4, 0xa0, 0x6c, 0xc4, 0x69, + 0x81, 0xba, 0x7b, 0x0b, 0xf2, 0x47, 0x4c, 0xb8, 0x3a, 0xfe, 0x45, 0x59, 0x75, 0x4c, 0xb8, 0x54, + 0x52, 0xf1, 0xe2, 0xd8, 0xf3, 0xd4, 0xa5, 0x58, 0xa5, 0xb8, 0x44, 0xca, 0x13, 0x71, 0x2e, 0x43, + 0x56, 0xa4, 0xb8, 0x24, 0xb7, 0xa1, 0x78, 0xcc, 0x7a, 0x43, 0xee, 0x8b, 0x73, 0x19, 0x84, 0x5a, + 0xa7, 0x2e, 0xaf, 0x13, 0x4d, 0x93, 0xc5, 0x39, 0xe2, 0xb0, 0x1f, 0x62, 0x72, 0x8e, 0x15, 0x24, + 0x90, 0xdf, 0xc6, 0xf7, 0x0e, 0x6a, 0x56, 0xa5, 0x72, 0x8d, 0x4f, 0xce, 0xdd, 0x79, 0x4f, 0xce, + 0xdd, 0xf4, 0xc9, 0x39, 0x19, 0x54, 0xec, 0x3e, 0x86, 0x93, 0xed, 0x4d, 0x28, 0x8d, 0x12, 0x8f, + 0xd4, 0x60, 0x79, 0xcf, 0xd3, 0x27, 0x2d, 0xef, 0xc9, 0x1f, 0x30, 0x76, 0x1f, 0xef, 0xc9, 0x53, + 0x8a, 0x14, 0x97, 0xa3, 0x5e, 0x9f, 0x33, 0x7a, 0xfd, 0x06, 0x3e, 0xa6, 0x8d, 0xec, 0x43, 0x26, + 0x1a, 0x9d, 0x25, 0xa9, 0xca, 0xb8, 0x56, 0x66, 0x04, 0x89, 0x94, 0x25, 0xcd, 0x08, 0x12, 0xfb, + 0x7b, 0x50, 0x9d, 0x88, 0x17, 0x32, 0xc9, 0xd7, 0x9b, 0x1e, 0x09, 0x71, 0xdd, 0xf9, 0x67, 0x09, + 0x4a, 0x87, 0x87, 0x5b, 0x5b, 0xdc, 0xf7, 0x06, 0x8c, 0xfc, 0xd6, 0x02, 0x72, 0xf1, 0x19, 0x46, + 0x3e, 0xcc, 0xae, 0x8c, 0xd9, 0xaf, 0xd1, 0xe6, 0x47, 0x97, 0x44, 0xe9, 0xfe, 0xfc, 0x19, 0xac, + 0xc8, 0xd9, 0x90, 0xbc, 0xb7, 0xe0, 0x4c, 0xdf, 0x6c, 0xcd, 0x67, 0xd4, 0xb2, 0x7b, 0x50, 0x4c, + 0xe7, 0x2b, 0x72, 0x2b, 0x53, 0xbd, 0x89, 0xf1, 0xb1, 0xf9, 0xfe, 0x42, 0xbc, 0xfa, 0x90, 0x5f, + 0x42, 0x41, 0x8f, 0x4d, 0xe4, 0xe6, 0x1c, 0xdc, 0x78, 0x80, 0x6b, 0xde, 0x5a, 0x84, 0x75, 0x6c, + 0x46, 0x3a, 0x1e, 0x65, 0x9a, 0x31, 0x35, 0x7c, 0x65, 0x9a, 0x71, 0x61, 0xde, 0x7a, 0x0a, 0x79, + 0x9c, 0xa3, 0x48, 0xd6, 0x7d, 0x62, 0x0c, 0x5a, 0xcd, 0xac, 0x70, 0x4d, 0x0c, 0x60, 0xbf, 0xc0, + 0x7b, 0x57, 0xbe, 0x45, 0xb3, 0x6f, 0x5c, 0xe3, 0x07, 0xa4, 0xe6, 0xcd, 0x05, 0x38, 0xc7, 0xe2, + 0xf5, 0x3b, 0xae, 0xb5, 0xc0, 0xaf, 0x38, 0xf3, 0xc5, 0x4f, 0xfd, 0x5e, 0x14, 0x41, 0xc5, 0x6c, + 0xa7, 0xc4, 0xc9, 0x80, 0xce, 0x98, 0x44, 0x9a, 0xed, 0x85, 0xf9, 0xf5, 0x81, 0x5f, 0xe2, 0x9b, + 0x60, 0xb2, 0xd5, 0x92, 0x4e, 0xa6, 0x3b, 0x66, 0x36, 0xf5, 0xe6, 0xdd, 0x4b, 0x61, 0xf4, 0xe1, + 0xae, 0x6a, 0xe5, 0xba, 0x5d, 0x93, 0xec, 0xce, 0x34, 0x6a, 0xf9, 0xcd, 0x05, 0xf9, 0x5a, 0xd6, + 0x07, 0x16, 0xe6, 0x19, 0x8e, 0x70, 0x99, 0xb2, 0x8d, 0xd9, 0x36, 0x33, 0xcf, 0xcc, 0x59, 0x70, + 0xab, 0xf2, 0xd5, 0xab, 0x1b, 0xd6, 0xdf, 0x5f, 0xdd, 0xb0, 0xfe, 0xf3, 0xea, 0x86, 0x75, 0xb2, + 0x2a, 0xff, 0x49, 0x75, 0xf7, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x68, 0x2c, 0xe9, 0xf6, + 0x1b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3669,7 +3526,7 @@ func (m *Attestations) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *Attestations_Attestation) Marshal() (dAtA []byte, err error) { +func (m *Attestation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -3679,12 +3536,12 @@ func (m *Attestations_Attestation) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Attestations_Attestation) MarshalTo(dAtA []byte) (int, error) { +func (m *Attestation) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Attestations_Attestation) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *Attestation) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3693,55 +3550,65 @@ func (m *Attestations_Attestation) MarshalToSizedBuffer(dAtA []byte) (int, error i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if m.Attestation != nil { - { - size := m.Attestation.Size() - i -= size - if _, err := m.Attestation.MarshalTo(dAtA[i:]); err != nil { - return 0, err + if len(m.InTotoSubjects) > 0 { + for iNdEx := len(m.InTotoSubjects) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.InTotoSubjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGateway(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x2a } } + if len(m.InTotoPredicateType) > 0 { + i -= len(m.InTotoPredicateType) + copy(dAtA[i:], m.InTotoPredicateType) + i = encodeVarintGateway(dAtA, i, uint64(len(m.InTotoPredicateType))) + i-- + dAtA[i] = 0x22 + } + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintGateway(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x1a + } + if len(m.Ref) > 0 { + i -= len(m.Ref) + copy(dAtA[i:], m.Ref) + i = encodeVarintGateway(dAtA, i, uint64(len(m.Ref))) + i-- + dAtA[i] = 0x12 + } + if m.Kind != 0 { + i = encodeVarintGateway(dAtA, i, uint64(m.Kind)) + i-- + dAtA[i] = 0x8 + } return len(dAtA) - i, nil } -func (m *Attestations_Attestation_Intoto) MarshalTo(dAtA []byte) (int, error) { +func (m *InTotoSubject) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *InTotoSubject) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Attestations_Attestation_Intoto) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Intoto != nil { - { - size, err := m.Intoto.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGateway(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} -func (m *InToto) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InToto) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InToto) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *InTotoSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -3750,188 +3617,26 @@ func (m *InToto) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.Subjects) > 0 { - for iNdEx := len(m.Subjects) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Subjects[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGateway(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 - } - } - if len(m.PredicatePath) > 0 { - i -= len(m.PredicatePath) - copy(dAtA[i:], m.PredicatePath) - i = encodeVarintGateway(dAtA, i, uint64(len(m.PredicatePath))) + if len(m.RawName) > 0 { + i -= len(m.RawName) + copy(dAtA[i:], m.RawName) + i = encodeVarintGateway(dAtA, i, uint64(len(m.RawName))) i-- dAtA[i] = 0x1a } - if len(m.PredicateRefKey) > 0 { - i -= len(m.PredicateRefKey) - copy(dAtA[i:], m.PredicateRefKey) - i = encodeVarintGateway(dAtA, i, uint64(len(m.PredicateRefKey))) - i-- - dAtA[i] = 0x12 - } - if len(m.PredicateType) > 0 { - i -= len(m.PredicateType) - copy(dAtA[i:], m.PredicateType) - i = encodeVarintGateway(dAtA, i, uint64(len(m.PredicateType))) - i-- - dAtA[i] = 0xa - } - return len(dAtA) - i, nil -} - -func (m *InToto_Subject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InToto_Subject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InToto_Subject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if m.Subject != nil { - { - size := m.Subject.Size() - i -= size - if _, err := m.Subject.MarshalTo(dAtA[i:]); err != nil { - return 0, err - } - } - } - return len(dAtA) - i, nil -} - -func (m *InToto_Subject_Self) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InToto_Subject_Self) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Self != nil { - { - size, err := m.Self.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGateway(dAtA, i, uint64(size)) + if len(m.RawDigest) > 0 { + for iNdEx := len(m.RawDigest) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.RawDigest[iNdEx]) + copy(dAtA[i:], m.RawDigest[iNdEx]) + i = encodeVarintGateway(dAtA, i, uint64(len(m.RawDigest[iNdEx]))) + i-- + dAtA[i] = 0x12 } - i-- - dAtA[i] = 0xa } - return len(dAtA) - i, nil -} -func (m *InToto_Subject_Raw) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InToto_Subject_Raw) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - if m.Raw != nil { - { - size, err := m.Raw.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGateway(dAtA, i, uint64(size)) - } + if m.Kind != 0 { + i = encodeVarintGateway(dAtA, i, uint64(m.Kind)) i-- - dAtA[i] = 0x12 - } - return len(dAtA) - i, nil -} -func (m *InToto_Subject_SelfSubject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InToto_Subject_SelfSubject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InToto_Subject_SelfSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - return len(dAtA) - i, nil -} - -func (m *InToto_Subject_RawSubject) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *InToto_Subject_RawSubject) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *InToto_Subject_RawSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintGateway(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0x12 - } - if len(m.Digest) > 0 { - for iNdEx := len(m.Digest) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Digest[iNdEx]) - copy(dAtA[i:], m.Digest[iNdEx]) - i = encodeVarintGateway(dAtA, i, uint64(len(m.Digest[iNdEx]))) - i-- - dAtA[i] = 0xa - } + dAtA[i] = 0x8 } return len(dAtA) - i, nil } @@ -5371,20 +5076,20 @@ func (m *InitMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0x20 } if len(m.Fds) > 0 { - dAtA30 := make([]byte, len(m.Fds)*10) - var j29 int + dAtA27 := make([]byte, len(m.Fds)*10) + var j26 int for _, num := range m.Fds { for num >= 1<<7 { - dAtA30[j29] = uint8(uint64(num)&0x7f | 0x80) + dAtA27[j26] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 - j29++ + j26++ } - dAtA30[j29] = uint8(num) - j29++ + dAtA27[j26] = uint8(num) + j26++ } - i -= j29 - copy(dAtA[i:], dAtA30[:j29]) - i = encodeVarintGateway(dAtA, i, uint64(j29)) + i -= j26 + copy(dAtA[i:], dAtA27[:j26]) + i = encodeVarintGateway(dAtA, i, uint64(j26)) i-- dAtA[i] = 0x1a } @@ -5808,53 +5513,29 @@ func (m *Attestations) Size() (n int) { return n } -func (m *Attestations_Attestation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Attestation != nil { - n += m.Attestation.Size() - } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *Attestations_Attestation_Intoto) Size() (n int) { +func (m *Attestation) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Intoto != nil { - l = m.Intoto.Size() - n += 1 + l + sovGateway(uint64(l)) + if m.Kind != 0 { + n += 1 + sovGateway(uint64(m.Kind)) } - return n -} -func (m *InToto) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.PredicateType) + l = len(m.Ref) if l > 0 { n += 1 + l + sovGateway(uint64(l)) } - l = len(m.PredicateRefKey) + l = len(m.Path) if l > 0 { n += 1 + l + sovGateway(uint64(l)) } - l = len(m.PredicatePath) + l = len(m.InTotoPredicateType) if l > 0 { n += 1 + l + sovGateway(uint64(l)) } - if len(m.Subjects) > 0 { - for _, e := range m.Subjects { + if len(m.InTotoSubjects) > 0 { + for _, e := range m.InTotoSubjects { l = e.Size() n += 1 + l + sovGateway(uint64(l)) } @@ -5865,70 +5546,22 @@ func (m *InToto) Size() (n int) { return n } -func (m *InToto_Subject) Size() (n int) { +func (m *InTotoSubject) Size() (n int) { if m == nil { return 0 } var l int _ = l - if m.Subject != nil { - n += m.Subject.Size() + if m.Kind != 0 { + n += 1 + sovGateway(uint64(m.Kind)) } - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *InToto_Subject_Self) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Self != nil { - l = m.Self.Size() - n += 1 + l + sovGateway(uint64(l)) - } - return n -} -func (m *InToto_Subject_Raw) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.Raw != nil { - l = m.Raw.Size() - n += 1 + l + sovGateway(uint64(l)) - } - return n -} -func (m *InToto_Subject_SelfSubject) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if m.XXX_unrecognized != nil { - n += len(m.XXX_unrecognized) - } - return n -} - -func (m *InToto_Subject_RawSubject) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Digest) > 0 { - for _, s := range m.Digest { + if len(m.RawDigest) > 0 { + for _, s := range m.RawDigest { l = len(s) n += 1 + l + sovGateway(uint64(l)) } } - l = len(m.Name) + l = len(m.RawName) if l > 0 { n += 1 + l + sovGateway(uint64(l)) } @@ -7702,7 +7335,7 @@ func (m *Attestations) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Attestation = append(m.Attestation, &Attestations_Attestation{}) + m.Attestation = append(m.Attestation, &Attestation{}) if err := m.Attestation[len(m.Attestation)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -7729,7 +7362,7 @@ func (m *Attestations) Unmarshal(dAtA []byte) error { } return nil } -func (m *Attestations_Attestation) Unmarshal(dAtA []byte) error { +func (m *Attestation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -7759,10 +7392,10 @@ func (m *Attestations_Attestation) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Intoto", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var msglen int + m.Kind = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGateway @@ -7772,81 +7405,14 @@ func (m *Attestations_Attestation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Kind |= Attestation_Kind(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGateway - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGateway - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &InToto{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Attestation = &Attestations_Attestation_Intoto{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGateway(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGateway - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InToto) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGateway - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: InToto: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: InToto: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PredicateType", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ref", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7874,11 +7440,11 @@ func (m *InToto) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PredicateType = string(dAtA[iNdEx:postIndex]) + m.Ref = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PredicateRefKey", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7906,11 +7472,11 @@ func (m *InToto) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PredicateRefKey = string(dAtA[iNdEx:postIndex]) + m.Path = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PredicatePath", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field InTotoPredicateType", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7938,11 +7504,11 @@ func (m *InToto) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PredicatePath = string(dAtA[iNdEx:postIndex]) + m.InTotoPredicateType = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Subjects", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field InTotoSubjects", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -7969,8 +7535,8 @@ func (m *InToto) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Subjects = append(m.Subjects, &InToto_Subject{}) - if err := m.Subjects[len(m.Subjects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.InTotoSubjects = append(m.InTotoSubjects, &InTotoSubject{}) + if err := m.InTotoSubjects[len(m.InTotoSubjects)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -7996,7 +7562,7 @@ func (m *InToto) Unmarshal(dAtA []byte) error { } return nil } -func (m *InToto_Subject) Unmarshal(dAtA []byte) error { +func (m *InTotoSubject) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -8019,17 +7585,17 @@ func (m *InToto_Subject) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: Subject: wiretype end group for non-group") + return fmt.Errorf("proto: InTotoSubject: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: Subject: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: InTotoSubject: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Self", wireType) + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } - var msglen int + m.Kind = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGateway @@ -8039,167 +7605,14 @@ func (m *InToto_Subject) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + m.Kind |= InTotoSubject_Kind(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGateway - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGateway - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &InToto_Subject_SelfSubject{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Subject = &InToto_Subject_Self{v} - iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Raw", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGateway - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGateway - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGateway - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - v := &InToto_Subject_RawSubject{} - if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - m.Subject = &InToto_Subject_Raw{v} - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGateway(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGateway - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InToto_Subject_SelfSubject) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGateway - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: SelfSubject: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: SelfSubject: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipGateway(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGateway - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *InToto_Subject_RawSubject) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGateway - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: RawSubject: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: RawSubject: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Digest", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RawDigest", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8227,11 +7640,11 @@ func (m *InToto_Subject_RawSubject) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Digest = append(m.Digest, github_com_opencontainers_go_digest.Digest(dAtA[iNdEx:postIndex])) + m.RawDigest = append(m.RawDigest, github_com_opencontainers_go_digest.Digest(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field RawName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -8259,7 +7672,7 @@ func (m *InToto_Subject_RawSubject) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = string(dAtA[iNdEx:postIndex]) + m.RawName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/frontend/gateway/pb/gateway.proto b/frontend/gateway/pb/gateway.proto index ed0937e247d2..d488921ecf97 100644 --- a/frontend/gateway/pb/gateway.proto +++ b/frontend/gateway/pb/gateway.proto @@ -65,34 +65,31 @@ message RefMap { } message Attestations { - message Attestation { - oneof Attestation { - InToto intoto = 1; - } - } - repeated Attestation attestation = 1; -} - -message InToto { - string predicateType = 1; - string predicateRefKey = 2; - string predicatePath = 3; - - message Subject { - message SelfSubject { - } - message RawSubject { - repeated string Digest = 1 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; - string name = 2; - } - oneof Subject { - SelfSubject self = 1; - RawSubject raw = 2; - } + repeated Attestation attestation = 1; +} + +message Attestation { + enum Kind { + InToto = 0; } - repeated Subject subjects = 4; + Kind kind = 1; + + string ref = 2; + string path = 3; + string inTotoPredicateType = 4; + repeated InTotoSubject inTotoSubjects = 5; } +message InTotoSubject { + enum Kind { + Raw = 0; + Self = 1; + } + Kind kind = 1; + + repeated string rawDigest = 2 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; + string rawName = 3; +} message ReturnRequest { Result result = 1; diff --git a/solver/result/attestation.go b/solver/result/attestation.go index 2db3dfac468f..26d0d13daf2b 100644 --- a/solver/result/attestation.go +++ b/solver/result/attestation.go @@ -4,44 +4,35 @@ import ( digest "github.com/opencontainers/go-digest" ) -type Attestation interface { - isAttestation() -} +const ( + AttestationKindInToto = iota +) -type InTotoAttestation struct { - PredicateType string - PredicateRefKey string - PredicatePath string - Subjects []InTotoSubject -} +const ( + InTotoSubjectKindRaw = iota + InTotoSubjectKindSelf +) -func (a *InTotoAttestation) isAttestation() {} +type Attestation struct { + Kind int -type InTotoSubject interface { - isInTotoSubject() + Ref string + Path string + InTotoPredicateType string + InTotoSubjects []InTotoSubject } -type InTotoSubjectSelf struct{} - -func (as *InTotoSubjectSelf) isInTotoSubject() {} +type InTotoSubject struct { + Kind int -type InTotoSubjectRaw struct { Name string Digest []digest.Digest } -func (as *InTotoSubjectRaw) isInTotoSubject() {} - -func (as *InTotoSubjectRaw) DigestMap() map[string]string { +func DigestMap(ds ...digest.Digest) map[string]string { m := map[string]string{} - for _, d := range as.Digest { + for _, d := range ds { m[d.Algorithm().String()] = d.Encoded() } return m } - -func DigestToDigestMap(d digest.Digest) map[string]string { - return map[string]string{ - d.Algorithm().String(): d.Encoded(), - } -} diff --git a/solver/result/result.go b/solver/result/result.go index 6c5158c5c9c5..8401ffbc5914 100644 --- a/solver/result/result.go +++ b/solver/result/result.go @@ -44,12 +44,9 @@ func (r *Result[T]) AddAttestation(k string, v Attestation, ref T) { if r.Attestations == nil { r.Attestations = map[string][]Attestation{} } - switch v := v.(type) { - case *InTotoAttestation: - if !strings.HasPrefix(v.PredicateRefKey, attestationRefPrefix) { - v.PredicateRefKey = "attestation:" + identity.NewID() - r.Refs[v.PredicateRefKey] = ref - } + if !strings.HasPrefix(v.Ref, attestationRefPrefix) { + v.Ref = "attestation:" + identity.NewID() + r.Refs[v.Ref] = ref } r.Attestations[k] = append(r.Attestations[k], v) r.mu.Unlock() From dc2a43058d755d9879e1e925e69aceb8f117709a Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Thu, 1 Sep 2022 14:55:28 +0100 Subject: [PATCH 3/7] attestations: default to self subject if no subjects are present Signed-off-by: Justin Chadwell --- client/client_test.go | 131 ++++++++++++++++++++++++++++++ exporter/containerimage/writer.go | 6 ++ 2 files changed, 137 insertions(+) diff --git a/client/client_test.go b/client/client_test.go index cc752a6d3518..833113d9ae59 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -173,6 +173,7 @@ func TestIntegration(t *testing.T) { testExportAnnotations, testExportAnnotationsMediaTypes, testExportAttestations, + testAttestationDefaultSubject, ) tests = append(tests, diffOpTestCases()...) integration.Run(t, tests, mirrors) @@ -6604,6 +6605,136 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) { checkAllReleasable(t, c, sb, true) } +func testAttestationDefaultSubject(t *testing.T, sb integration.Sandbox) { + requiresLinux(t) + c, err := New(sb.Context(), sb.Address()) + require.NoError(t, err) + + registry, err := sb.NewRegistry() + if errors.Is(err, integration.ErrRequirements) { + t.Skip(err.Error()) + } + + ps := []ocispecs.Platform{ + platforms.MustParse("linux/amd64"), + } + + success := []byte(`{"success": true}`) + + frontend := func(ctx context.Context, c gateway.Client) (*gateway.Result, error) { + res := gateway.NewResult() + expPlatforms := &exptypes.Platforms{} + + for _, p := range ps { + pk := platforms.Format(p) + expPlatforms.Platforms = append(expPlatforms.Platforms, exptypes.Platform{ID: pk, Platform: p}) + + // build image + st := llb.Scratch().File( + llb.Mkfile("/greeting", 0600, []byte(fmt.Sprintf("hello %s!", pk))), + ) + def, err := st.Marshal(ctx) + if err != nil { + return nil, err + } + r, err := c.Solve(ctx, gateway.SolveRequest{ + Definition: def.ToPB(), + }) + if err != nil { + return nil, err + } + ref, err := r.SingleRef() + if err != nil { + return nil, err + } + _, err = ref.ToState() + if err != nil { + return nil, err + } + res.AddRef(pk, ref) + + // build attestations + st = llb.Scratch().File(llb.Mkfile("/attestation.json", 0600, success)) + def, err = st.Marshal(ctx) + if err != nil { + return nil, err + } + r, err = c.Solve(ctx, gateway.SolveRequest{ + Definition: def.ToPB(), + }) + if err != nil { + return nil, err + } + refAttest, err := r.SingleRef() + if err != nil { + return nil, err + } + _, err = ref.ToState() + if err != nil { + return nil, err + } + res.AddAttestation(pk, result.Attestation{ + Kind: result.AttestationKindInToto, + Path: "/attestation.json", + InTotoPredicateType: "https://example.com/attestations/v1.0", + }, refAttest) + } + + dt, err := json.Marshal(expPlatforms) + if err != nil { + return nil, err + } + res.AddMeta(exptypes.ExporterPlatformsKey, dt) + + return res, nil + } + + target := registry + "/buildkit/testattestationsemptysubject:latest" + _, err = c.Build(sb.Context(), SolveOpt{ + Exports: []ExportEntry{ + { + Type: ExporterImage, + Attrs: map[string]string{ + "name": target, + "push": "true", + }, + }, + }, + }, "", frontend, nil) + require.NoError(t, err) + + desc, provider, err := contentutil.ProviderFromRef(target) + require.NoError(t, err) + + imgs, err := testutil.ReadImages(sb.Context(), provider, desc) + require.NoError(t, err) + require.Equal(t, len(ps)*2, len(imgs.Images)) + + var bases []*testutil.ImageInfo + for _, p := range ps { + pk := platforms.Format(p) + bases = append(bases, imgs.Find(pk)) + } + + atts := imgs.Filter("unknown/unknown") + require.Equal(t, len(ps), len(atts.Images)) + for i, att := range atts.Images { + var attest intoto.Statement + require.NoError(t, json.Unmarshal(att.LayersRaw[0], &attest)) + + require.Equal(t, "https://in-toto.io/Statement/v0.1", attest.Type) + require.Equal(t, "https://example.com/attestations/v1.0", attest.PredicateType) + require.Equal(t, map[string]interface{}{"success": true}, attest.Predicate) + subjects := []intoto.Subject{{ + Name: "_", + Digest: map[string]string{ + "sha256": bases[i].Desc.Digest.Encoded(), + }, + }} + require.Equal(t, subjects, attest.Subject) + } +} + func makeSSHAgentSock(t *testing.T, agent agent.Agent) (p string, err error) { tmpDir, err := integration.Tmpdir(t) if err != nil { diff --git a/exporter/containerimage/writer.go b/exporter/containerimage/writer.go index 7012533b26df..a5cc416c37ad 100644 --- a/exporter/containerimage/writer.go +++ b/exporter/containerimage/writer.go @@ -297,6 +297,12 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, Predicate: json.RawMessage(predicate), } + if len(att.InTotoSubjects) == 0 { + att.InTotoSubjects = []result.InTotoSubject{{ + Kind: result.InTotoSubjectKindSelf, + }} + } + statements[i].Subject = make([]intoto.Subject, len(att.InTotoSubjects)) for j, subject := range att.InTotoSubjects { statements[i].Subject[j].Name = "_" From d392e45ec0ad7372145ebe407875f9eb1e0bc174 Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 31 Aug 2022 09:44:20 +0100 Subject: [PATCH 4/7] attestations: fixup from review Signed-off-by: Justin Chadwell --- client/client_test.go | 15 +++++++------ exporter/containerimage/writer.go | 16 ++++++------- frontend/gateway/pb/attestation.go | 36 +++++++++++++++--------------- solver/pb/caps.go | 6 ++--- solver/result/attestation.go | 17 ++++++++------ solver/result/result.go | 6 ++--- 6 files changed, 50 insertions(+), 46 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index 833113d9ae59..fa39bd63e775 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -6490,18 +6490,19 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, result.Attestation{ - Kind: result.AttestationKindInToto, - Path: "/attestation.json", + Kind: result.InToto, + InTotoPath: "/attestation.json", InTotoPredicateType: "https://example.com/attestations/v1.0", InTotoSubjects: []result.InTotoSubject{{ - Kind: result.InTotoSubjectKindSelf, + Kind: result.Self, }}, }, refAttest) res.AddAttestation(pk, result.Attestation{ - Path: "/attestation2.json", + Kind: result.InToto, + InTotoPath: "/attestation2.json", InTotoPredicateType: "https://example.com/attestations2/v1.0", InTotoSubjects: []result.InTotoSubject{{ - Kind: result.InTotoSubjectKindRaw, + Kind: result.Raw, Name: "/attestation.json", Digest: []digest.Digest{successDigest}, }}, @@ -6674,8 +6675,8 @@ func testAttestationDefaultSubject(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, result.Attestation{ - Kind: result.AttestationKindInToto, - Path: "/attestation.json", + Kind: result.InToto, + InTotoPath: "/attestation.json", InTotoPredicateType: "https://example.com/attestations/v1.0", }, refAttest) } diff --git a/exporter/containerimage/writer.go b/exporter/containerimage/writer.go index a5cc416c37ad..3a47a40c25f8 100644 --- a/exporter/containerimage/writer.go +++ b/exporter/containerimage/writer.go @@ -265,10 +265,10 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, i, att := i, att eg.Go(func() error { switch att.Kind { - case result.AttestationKindInToto: - ref, ok := refs[att.Ref] + case result.InToto: + ref, ok := refs[att.InTotoRef] if !ok { - return errors.Errorf("key %s not found in refs map", att.Ref) + return errors.Errorf("key %s not found in refs map", att.InTotoRef) } mount, err := ref.Mount(ctx, true, s) @@ -282,7 +282,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, return err } defer lm.Unmount() - predicate, err := os.ReadFile(path.Join(src, att.Path)) + predicate, err := os.ReadFile(path.Join(src, att.InTotoPath)) if err != nil { return err } @@ -299,7 +299,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, if len(att.InTotoSubjects) == 0 { att.InTotoSubjects = []result.InTotoSubject{{ - Kind: result.InTotoSubjectKindSelf, + Kind: result.Self, }} } @@ -310,12 +310,12 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, statements[i].Subject[j].Name = subject.Name } switch subject.Kind { - case result.InTotoSubjectKindSelf: + case result.Self: statements[i].Subject[j].Digest = result.DigestMap(desc.Digest) - case result.InTotoSubjectKindRaw: + case result.Raw: statements[i].Subject[j].Digest = result.DigestMap(subject.Digest...) default: - return errors.Errorf("unknown attestation subject kind") + return errors.Errorf("unknown attestation subject kind %q", subject.Kind) } } } diff --git a/frontend/gateway/pb/attestation.go b/frontend/gateway/pb/attestation.go index 3eb4082dbcde..9f321816b4ac 100644 --- a/frontend/gateway/pb/attestation.go +++ b/frontend/gateway/pb/attestation.go @@ -5,19 +5,19 @@ import ( "github.com/pkg/errors" ) -var toAttestationKind = map[int]Attestation_Kind{ - result.AttestationKindInToto: Attestation_InToto, +var toAttestationKind = map[result.AttestationKind]Attestation_Kind{ + result.InToto: Attestation_InToto, } -var toSubjectKind = map[int]InTotoSubject_Kind{ - result.InTotoSubjectKindRaw: InTotoSubject_Raw, - result.InTotoSubjectKindSelf: InTotoSubject_Self, +var toSubjectKind = map[result.InTotoSubjectKind]InTotoSubject_Kind{ + result.Raw: InTotoSubject_Raw, + result.Self: InTotoSubject_Self, } -var fromAttestationKind = map[Attestation_Kind]int{ - Attestation_InToto: result.AttestationKindInToto, +var fromAttestationKind = map[Attestation_Kind]result.AttestationKind{ + Attestation_InToto: result.InToto, } -var fromSubjectKind = map[InTotoSubject_Kind]int{ - InTotoSubject_Raw: result.InTotoSubjectKindRaw, - InTotoSubject_Self: result.InTotoSubjectKindSelf, +var fromSubjectKind = map[InTotoSubject_Kind]result.InTotoSubjectKind{ + InTotoSubject_Raw: result.Raw, + InTotoSubject_Self: result.Self, } func ToAttestationPB(a *result.Attestation) (*Attestation, error) { @@ -25,7 +25,7 @@ func ToAttestationPB(a *result.Attestation) (*Attestation, error) { for i, subject := range a.InTotoSubjects { k, ok := toSubjectKind[subject.Kind] if !ok { - return nil, errors.New("unknown in toto subject kind") + return nil, errors.Errorf("unknown in toto subject kind %q", subject.Kind) } subjects[i] = &InTotoSubject{ Kind: k, @@ -36,12 +36,12 @@ func ToAttestationPB(a *result.Attestation) (*Attestation, error) { k, ok := toAttestationKind[a.Kind] if !ok { - return nil, errors.New("unknown attestation kind") + return nil, errors.Errorf("unknown attestation kind %q", a.Kind) } return &Attestation{ Kind: k, - Path: a.Path, - Ref: a.Ref, + Path: a.InTotoPath, + Ref: a.InTotoRef, InTotoPredicateType: a.InTotoPredicateType, InTotoSubjects: subjects, }, nil @@ -52,7 +52,7 @@ func FromAttestationPB(a *Attestation) (*result.Attestation, error) { for i, subject := range a.InTotoSubjects { k, ok := fromSubjectKind[subject.Kind] if !ok { - return nil, errors.New("unknown in toto subject kind") + return nil, errors.Errorf("unknown in toto subject kind %q", subject.Kind) } subjects[i] = result.InTotoSubject{ Kind: k, @@ -63,12 +63,12 @@ func FromAttestationPB(a *Attestation) (*result.Attestation, error) { k, ok := fromAttestationKind[a.Kind] if !ok { - return nil, errors.New("unknown attestation kind") + return nil, errors.Errorf("unknown attestation kind %q", a.Kind) } return &result.Attestation{ Kind: k, - Path: a.Path, - Ref: a.Ref, + InTotoPath: a.Path, + InTotoRef: a.Ref, InTotoPredicateType: a.InTotoPredicateType, InTotoSubjects: subjects, }, nil diff --git a/solver/pb/caps.go b/solver/pb/caps.go index df863f200eda..3d78882032ac 100644 --- a/solver/pb/caps.go +++ b/solver/pb/caps.go @@ -451,8 +451,8 @@ func init() { // FIXME: enable once attestations gateway api is stable // Caps.Init(apicaps.Cap{ - // ID: CapAttestations, - // Enabled: true, - // Status: apicaps.CapStatusExperimental, + // ID: CapAttestations, + // Enabled: true, + // Status: apicaps.CapStatusExperimental, // }) } diff --git a/solver/result/attestation.go b/solver/result/attestation.go index 26d0d13daf2b..34be2a35a447 100644 --- a/solver/result/attestation.go +++ b/solver/result/attestation.go @@ -4,26 +4,29 @@ import ( digest "github.com/opencontainers/go-digest" ) +type AttestationKind string +type InTotoSubjectKind string + const ( - AttestationKindInToto = iota + InToto AttestationKind = "in-toto" ) const ( - InTotoSubjectKindRaw = iota - InTotoSubjectKindSelf + Self InTotoSubjectKind = "self" + Raw InTotoSubjectKind = "raw" ) type Attestation struct { - Kind int + Kind AttestationKind - Ref string - Path string + InTotoRef string + InTotoPath string InTotoPredicateType string InTotoSubjects []InTotoSubject } type InTotoSubject struct { - Kind int + Kind InTotoSubjectKind Name string Digest []digest.Digest diff --git a/solver/result/result.go b/solver/result/result.go index 8401ffbc5914..736d30d182bc 100644 --- a/solver/result/result.go +++ b/solver/result/result.go @@ -44,9 +44,9 @@ func (r *Result[T]) AddAttestation(k string, v Attestation, ref T) { if r.Attestations == nil { r.Attestations = map[string][]Attestation{} } - if !strings.HasPrefix(v.Ref, attestationRefPrefix) { - v.Ref = "attestation:" + identity.NewID() - r.Refs[v.Ref] = ref + if !strings.HasPrefix(v.InTotoRef, attestationRefPrefix) { + v.InTotoRef = "attestation:" + identity.NewID() + r.Refs[v.InTotoRef] = ref } r.Attestations[k] = append(r.Attestations[k], v) r.mu.Unlock() From 3c64e516ce1ac7094c24f41ae5b2a8bf4892771b Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 7 Sep 2022 17:24:19 +0100 Subject: [PATCH 5/7] attestations: enable attestations cap Signed-off-by: Justin Chadwell --- solver/pb/caps.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/solver/pb/caps.go b/solver/pb/caps.go index 3d78882032ac..3863385fcf3c 100644 --- a/solver/pb/caps.go +++ b/solver/pb/caps.go @@ -449,10 +449,9 @@ func init() { Status: apicaps.CapStatusExperimental, }) - // FIXME: enable once attestations gateway api is stable - // Caps.Init(apicaps.Cap{ - // ID: CapAttestations, - // Enabled: true, - // Status: apicaps.CapStatusExperimental, - // }) + Caps.Init(apicaps.Cap{ + ID: CapAttestations, + Enabled: true, + Status: apicaps.CapStatusExperimental, + }) } From a1f13f9bb348d9c5137c13ec6086011d88bd3d0d Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Wed, 7 Sep 2022 17:21:22 +0100 Subject: [PATCH 6/7] attestations: use intoto struct for specific fields Signed-off-by: Justin Chadwell --- client/client_test.go | 40 +++++++++++++++++------------- exporter/containerimage/writer.go | 16 ++++++------ frontend/gateway/pb/attestation.go | 22 ++++++++-------- solver/result/attestation.go | 13 +++++++--- solver/result/result.go | 6 ++--- 5 files changed, 55 insertions(+), 42 deletions(-) diff --git a/client/client_test.go b/client/client_test.go index fa39bd63e775..ae1b498f8c81 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -6490,22 +6490,26 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, result.Attestation{ - Kind: result.InToto, - InTotoPath: "/attestation.json", - InTotoPredicateType: "https://example.com/attestations/v1.0", - InTotoSubjects: []result.InTotoSubject{{ - Kind: result.Self, - }}, + Kind: result.InToto, + Path: "/attestation.json", + InToto: result.InTotoAttestation{ + PredicateType: "https://example.com/attestations/v1.0", + Subjects: []result.InTotoSubject{{ + Kind: result.Self, + }}, + }, }, refAttest) res.AddAttestation(pk, result.Attestation{ - Kind: result.InToto, - InTotoPath: "/attestation2.json", - InTotoPredicateType: "https://example.com/attestations2/v1.0", - InTotoSubjects: []result.InTotoSubject{{ - Kind: result.Raw, - Name: "/attestation.json", - Digest: []digest.Digest{successDigest}, - }}, + Kind: result.InToto, + Path: "/attestation2.json", + InToto: result.InTotoAttestation{ + PredicateType: "https://example.com/attestations2/v1.0", + Subjects: []result.InTotoSubject{{ + Kind: result.Raw, + Name: "/attestation.json", + Digest: []digest.Digest{successDigest}, + }}, + }, }, refAttest) } @@ -6675,9 +6679,11 @@ func testAttestationDefaultSubject(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, result.Attestation{ - Kind: result.InToto, - InTotoPath: "/attestation.json", - InTotoPredicateType: "https://example.com/attestations/v1.0", + Kind: result.InToto, + Path: "/attestation.json", + InToto: result.InTotoAttestation{ + PredicateType: "https://example.com/attestations/v1.0", + }, }, refAttest) } diff --git a/exporter/containerimage/writer.go b/exporter/containerimage/writer.go index 3a47a40c25f8..cd8fc9926187 100644 --- a/exporter/containerimage/writer.go +++ b/exporter/containerimage/writer.go @@ -266,9 +266,9 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, eg.Go(func() error { switch att.Kind { case result.InToto: - ref, ok := refs[att.InTotoRef] + ref, ok := refs[att.Ref] if !ok { - return errors.Errorf("key %s not found in refs map", att.InTotoRef) + return errors.Errorf("key %s not found in refs map", att.Ref) } mount, err := ref.Mount(ctx, true, s) @@ -282,7 +282,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, return err } defer lm.Unmount() - predicate, err := os.ReadFile(path.Join(src, att.InTotoPath)) + predicate, err := os.ReadFile(path.Join(src, att.Path)) if err != nil { return err } @@ -292,19 +292,19 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, statements[i] = intoto.Statement{ StatementHeader: intoto.StatementHeader{ Type: intoto.StatementInTotoV01, - PredicateType: att.InTotoPredicateType, + PredicateType: att.InToto.PredicateType, }, Predicate: json.RawMessage(predicate), } - if len(att.InTotoSubjects) == 0 { - att.InTotoSubjects = []result.InTotoSubject{{ + if len(att.InToto.Subjects) == 0 { + att.InToto.Subjects = []result.InTotoSubject{{ Kind: result.Self, }} } - statements[i].Subject = make([]intoto.Subject, len(att.InTotoSubjects)) - for j, subject := range att.InTotoSubjects { + statements[i].Subject = make([]intoto.Subject, len(att.InToto.Subjects)) + for j, subject := range att.InToto.Subjects { statements[i].Subject[j].Name = "_" if subject.Name != "" { statements[i].Subject[j].Name = subject.Name diff --git a/frontend/gateway/pb/attestation.go b/frontend/gateway/pb/attestation.go index 9f321816b4ac..72391acc4643 100644 --- a/frontend/gateway/pb/attestation.go +++ b/frontend/gateway/pb/attestation.go @@ -21,8 +21,8 @@ var fromSubjectKind = map[InTotoSubject_Kind]result.InTotoSubjectKind{ } func ToAttestationPB(a *result.Attestation) (*Attestation, error) { - subjects := make([]*InTotoSubject, len(a.InTotoSubjects)) - for i, subject := range a.InTotoSubjects { + subjects := make([]*InTotoSubject, len(a.InToto.Subjects)) + for i, subject := range a.InToto.Subjects { k, ok := toSubjectKind[subject.Kind] if !ok { return nil, errors.Errorf("unknown in toto subject kind %q", subject.Kind) @@ -40,9 +40,9 @@ func ToAttestationPB(a *result.Attestation) (*Attestation, error) { } return &Attestation{ Kind: k, - Path: a.InTotoPath, - Ref: a.InTotoRef, - InTotoPredicateType: a.InTotoPredicateType, + Path: a.Path, + Ref: a.Ref, + InTotoPredicateType: a.InToto.PredicateType, InTotoSubjects: subjects, }, nil } @@ -66,10 +66,12 @@ func FromAttestationPB(a *Attestation) (*result.Attestation, error) { return nil, errors.Errorf("unknown attestation kind %q", a.Kind) } return &result.Attestation{ - Kind: k, - InTotoPath: a.Path, - InTotoRef: a.Ref, - InTotoPredicateType: a.InTotoPredicateType, - InTotoSubjects: subjects, + Kind: k, + Path: a.Path, + Ref: a.Ref, + InToto: result.InTotoAttestation{ + PredicateType: a.InTotoPredicateType, + Subjects: subjects, + }, }, nil } diff --git a/solver/result/attestation.go b/solver/result/attestation.go index 34be2a35a447..d14d8161a83a 100644 --- a/solver/result/attestation.go +++ b/solver/result/attestation.go @@ -19,10 +19,15 @@ const ( type Attestation struct { Kind AttestationKind - InTotoRef string - InTotoPath string - InTotoPredicateType string - InTotoSubjects []InTotoSubject + Ref string + Path string + + InToto InTotoAttestation +} + +type InTotoAttestation struct { + PredicateType string + Subjects []InTotoSubject } type InTotoSubject struct { diff --git a/solver/result/result.go b/solver/result/result.go index 736d30d182bc..8401ffbc5914 100644 --- a/solver/result/result.go +++ b/solver/result/result.go @@ -44,9 +44,9 @@ func (r *Result[T]) AddAttestation(k string, v Attestation, ref T) { if r.Attestations == nil { r.Attestations = map[string][]Attestation{} } - if !strings.HasPrefix(v.InTotoRef, attestationRefPrefix) { - v.InTotoRef = "attestation:" + identity.NewID() - r.Refs[v.InTotoRef] = ref + if !strings.HasPrefix(v.Ref, attestationRefPrefix) { + v.Ref = "attestation:" + identity.NewID() + r.Refs[v.Ref] = ref } r.Attestations[k] = append(r.Attestations[k], v) r.mu.Unlock() From 23d778c058d4eed04a82e2ef39c015fcb382b166 Mon Sep 17 00:00:00 2001 From: Justin Chadwell Date: Thu, 8 Sep 2022 10:29:48 +0100 Subject: [PATCH 7/7] attestations: use protobuf kind constants Signed-off-by: Justin Chadwell --- client/client_test.go | 11 +- exporter/containerimage/writer.go | 9 +- frontend/gateway/client/attestation.go | 46 +++ frontend/gateway/gateway.go | 4 +- frontend/gateway/grpcclient/client.go | 4 +- frontend/gateway/pb/attestation.go | 77 ----- frontend/gateway/pb/gateway.pb.go | 396 +++++++++++++------------ frontend/gateway/pb/gateway.proto | 26 +- solver/result/attestation.go | 17 +- 9 files changed, 278 insertions(+), 312 deletions(-) create mode 100644 frontend/gateway/client/attestation.go delete mode 100644 frontend/gateway/pb/attestation.go diff --git a/client/client_test.go b/client/client_test.go index ae1b498f8c81..e6916a30a677 100644 --- a/client/client_test.go +++ b/client/client_test.go @@ -38,6 +38,7 @@ import ( "github.com/moby/buildkit/client/llb" "github.com/moby/buildkit/exporter/containerimage/exptypes" gateway "github.com/moby/buildkit/frontend/gateway/client" + gatewaypb "github.com/moby/buildkit/frontend/gateway/pb" "github.com/moby/buildkit/identity" "github.com/moby/buildkit/session" "github.com/moby/buildkit/session/secrets/secretsprovider" @@ -6490,22 +6491,22 @@ func testExportAttestations(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, result.Attestation{ - Kind: result.InToto, + Kind: gatewaypb.AttestationKindInToto, Path: "/attestation.json", InToto: result.InTotoAttestation{ PredicateType: "https://example.com/attestations/v1.0", Subjects: []result.InTotoSubject{{ - Kind: result.Self, + Kind: gatewaypb.InTotoSubjectKindSelf, }}, }, }, refAttest) res.AddAttestation(pk, result.Attestation{ - Kind: result.InToto, + Kind: gatewaypb.AttestationKindInToto, Path: "/attestation2.json", InToto: result.InTotoAttestation{ PredicateType: "https://example.com/attestations2/v1.0", Subjects: []result.InTotoSubject{{ - Kind: result.Raw, + Kind: gatewaypb.InTotoSubjectKindRaw, Name: "/attestation.json", Digest: []digest.Digest{successDigest}, }}, @@ -6679,7 +6680,7 @@ func testAttestationDefaultSubject(t *testing.T, sb integration.Sandbox) { return nil, err } res.AddAttestation(pk, result.Attestation{ - Kind: result.InToto, + Kind: gatewaypb.AttestationKindInToto, Path: "/attestation.json", InToto: result.InTotoAttestation{ PredicateType: "https://example.com/attestations/v1.0", diff --git a/exporter/containerimage/writer.go b/exporter/containerimage/writer.go index cd8fc9926187..a6520b544652 100644 --- a/exporter/containerimage/writer.go +++ b/exporter/containerimage/writer.go @@ -19,6 +19,7 @@ import ( cacheconfig "github.com/moby/buildkit/cache/config" "github.com/moby/buildkit/exporter" "github.com/moby/buildkit/exporter/containerimage/exptypes" + gatewaypb "github.com/moby/buildkit/frontend/gateway/pb" "github.com/moby/buildkit/session" "github.com/moby/buildkit/snapshot" "github.com/moby/buildkit/solver" @@ -265,7 +266,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, i, att := i, att eg.Go(func() error { switch att.Kind { - case result.InToto: + case gatewaypb.AttestationKindInToto: ref, ok := refs[att.Ref] if !ok { return errors.Errorf("key %s not found in refs map", att.Ref) @@ -299,7 +300,7 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, if len(att.InToto.Subjects) == 0 { att.InToto.Subjects = []result.InTotoSubject{{ - Kind: result.Self, + Kind: gatewaypb.InTotoSubjectKindSelf, }} } @@ -310,9 +311,9 @@ func (ic *ImageWriter) extractAttestations(ctx context.Context, s session.Group, statements[i].Subject[j].Name = subject.Name } switch subject.Kind { - case result.Self: + case gatewaypb.InTotoSubjectKindSelf: statements[i].Subject[j].Digest = result.DigestMap(desc.Digest) - case result.Raw: + case gatewaypb.InTotoSubjectKindRaw: statements[i].Subject[j].Digest = result.DigestMap(subject.Digest...) default: return errors.Errorf("unknown attestation subject kind %q", subject.Kind) diff --git a/frontend/gateway/client/attestation.go b/frontend/gateway/client/attestation.go new file mode 100644 index 000000000000..56fedb0b5529 --- /dev/null +++ b/frontend/gateway/client/attestation.go @@ -0,0 +1,46 @@ +package client + +import ( + pb "github.com/moby/buildkit/frontend/gateway/pb" + "github.com/moby/buildkit/solver/result" +) + +func AttestationToPB(a *result.Attestation) (*pb.Attestation, error) { + subjects := make([]*pb.InTotoSubject, len(a.InToto.Subjects)) + for i, subject := range a.InToto.Subjects { + subjects[i] = &pb.InTotoSubject{ + Kind: subject.Kind, + Name: subject.Name, + Digest: subject.Digest, + } + } + + return &pb.Attestation{ + Kind: a.Kind, + Path: a.Path, + Ref: a.Ref, + InTotoPredicateType: a.InToto.PredicateType, + InTotoSubjects: subjects, + }, nil +} + +func AttestationFromPB(a *pb.Attestation) (*result.Attestation, error) { + subjects := make([]result.InTotoSubject, len(a.InTotoSubjects)) + for i, subject := range a.InTotoSubjects { + subjects[i] = result.InTotoSubject{ + Kind: subject.Kind, + Name: subject.Name, + Digest: subject.Digest, + } + } + + return &result.Attestation{ + Kind: a.Kind, + Path: a.Path, + Ref: a.Ref, + InToto: result.InTotoAttestation{ + PredicateType: a.InTotoPredicateType, + Subjects: subjects, + }, + }, nil +} diff --git a/frontend/gateway/gateway.go b/frontend/gateway/gateway.go index 7ba80490cdd9..327fee6fb7cb 100644 --- a/frontend/gateway/gateway.go +++ b/frontend/gateway/gateway.go @@ -709,7 +709,7 @@ func (lbf *llbBridgeForwarder) Solve(ctx context.Context, req *pb.SolveRequest) pbRes.Attestations = map[string]*pb.Attestations{} for k, atts := range res.Attestations { for _, att := range atts { - pbAtt, err := pb.ToAttestationPB(&att) + pbAtt, err := gwclient.AttestationToPB(&att) if err != nil { return nil, err } @@ -916,7 +916,7 @@ func (lbf *llbBridgeForwarder) Return(ctx context.Context, in *pb.ReturnRequest) if in.Result.Attestations != nil { for k, pbAtts := range in.Result.Attestations { for _, pbAtt := range pbAtts.Attestation { - att, err := pb.FromAttestationPB(pbAtt) + att, err := gwclient.AttestationFromPB(pbAtt) if err != nil { return nil, err } diff --git a/frontend/gateway/grpcclient/client.go b/frontend/gateway/grpcclient/client.go index 34434d4fbe02..8a8c794a8465 100644 --- a/frontend/gateway/grpcclient/client.go +++ b/frontend/gateway/grpcclient/client.go @@ -165,7 +165,7 @@ func (c *grpcClient) Run(ctx context.Context, f client.BuildFunc) (retError erro attestations := map[string]*pb.Attestations{} for k, as := range res.Attestations { for _, a := range as { - pbAtt, err := pb.ToAttestationPB(&a) + pbAtt, err := client.AttestationToPB(&a) if err != nil { retError = err continue @@ -466,7 +466,7 @@ func (c *grpcClient) Solve(ctx context.Context, creq client.SolveRequest) (res * if resp.Result.Attestations != nil { for p, as := range resp.Result.Attestations { for _, a := range as.Attestation { - att, err := pb.FromAttestationPB(a) + att, err := client.AttestationFromPB(a) if err != nil { return nil, err } diff --git a/frontend/gateway/pb/attestation.go b/frontend/gateway/pb/attestation.go deleted file mode 100644 index 72391acc4643..000000000000 --- a/frontend/gateway/pb/attestation.go +++ /dev/null @@ -1,77 +0,0 @@ -package moby_buildkit_v1_frontend //nolint:revive - -import ( - "github.com/moby/buildkit/solver/result" - "github.com/pkg/errors" -) - -var toAttestationKind = map[result.AttestationKind]Attestation_Kind{ - result.InToto: Attestation_InToto, -} -var toSubjectKind = map[result.InTotoSubjectKind]InTotoSubject_Kind{ - result.Raw: InTotoSubject_Raw, - result.Self: InTotoSubject_Self, -} -var fromAttestationKind = map[Attestation_Kind]result.AttestationKind{ - Attestation_InToto: result.InToto, -} -var fromSubjectKind = map[InTotoSubject_Kind]result.InTotoSubjectKind{ - InTotoSubject_Raw: result.Raw, - InTotoSubject_Self: result.Self, -} - -func ToAttestationPB(a *result.Attestation) (*Attestation, error) { - subjects := make([]*InTotoSubject, len(a.InToto.Subjects)) - for i, subject := range a.InToto.Subjects { - k, ok := toSubjectKind[subject.Kind] - if !ok { - return nil, errors.Errorf("unknown in toto subject kind %q", subject.Kind) - } - subjects[i] = &InTotoSubject{ - Kind: k, - RawName: subject.Name, - RawDigest: subject.Digest, - } - } - - k, ok := toAttestationKind[a.Kind] - if !ok { - return nil, errors.Errorf("unknown attestation kind %q", a.Kind) - } - return &Attestation{ - Kind: k, - Path: a.Path, - Ref: a.Ref, - InTotoPredicateType: a.InToto.PredicateType, - InTotoSubjects: subjects, - }, nil -} - -func FromAttestationPB(a *Attestation) (*result.Attestation, error) { - subjects := make([]result.InTotoSubject, len(a.InTotoSubjects)) - for i, subject := range a.InTotoSubjects { - k, ok := fromSubjectKind[subject.Kind] - if !ok { - return nil, errors.Errorf("unknown in toto subject kind %q", subject.Kind) - } - subjects[i] = result.InTotoSubject{ - Kind: k, - Name: subject.RawName, - Digest: subject.RawDigest, - } - } - - k, ok := fromAttestationKind[a.Kind] - if !ok { - return nil, errors.Errorf("unknown attestation kind %q", a.Kind) - } - return &result.Attestation{ - Kind: k, - Path: a.Path, - Ref: a.Ref, - InToto: result.InTotoAttestation{ - PredicateType: a.InTotoPredicateType, - Subjects: subjects, - }, - }, nil -} diff --git a/frontend/gateway/pb/gateway.pb.go b/frontend/gateway/pb/gateway.pb.go index 2009b9a2707c..762ce2cfbf39 100644 --- a/frontend/gateway/pb/gateway.pb.go +++ b/frontend/gateway/pb/gateway.pb.go @@ -33,51 +33,51 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type Attestation_Kind int32 +type AttestationKind int32 const ( - Attestation_InToto Attestation_Kind = 0 + AttestationKindInToto AttestationKind = 0 ) -var Attestation_Kind_name = map[int32]string{ +var AttestationKind_name = map[int32]string{ 0: "InToto", } -var Attestation_Kind_value = map[string]int32{ +var AttestationKind_value = map[string]int32{ "InToto": 0, } -func (x Attestation_Kind) String() string { - return proto.EnumName(Attestation_Kind_name, int32(x)) +func (x AttestationKind) String() string { + return proto.EnumName(AttestationKind_name, int32(x)) } -func (Attestation_Kind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{5, 0} +func (AttestationKind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_f1a937782ebbded5, []int{0} } -type InTotoSubject_Kind int32 +type InTotoSubjectKind int32 const ( - InTotoSubject_Raw InTotoSubject_Kind = 0 - InTotoSubject_Self InTotoSubject_Kind = 1 + InTotoSubjectKindSelf InTotoSubjectKind = 0 + InTotoSubjectKindRaw InTotoSubjectKind = 1 ) -var InTotoSubject_Kind_name = map[int32]string{ - 0: "Raw", - 1: "Self", +var InTotoSubjectKind_name = map[int32]string{ + 0: "Self", + 1: "Raw", } -var InTotoSubject_Kind_value = map[string]int32{ - "Raw": 0, - "Self": 1, +var InTotoSubjectKind_value = map[string]int32{ + "Self": 0, + "Raw": 1, } -func (x InTotoSubject_Kind) String() string { - return proto.EnumName(InTotoSubject_Kind_name, int32(x)) +func (x InTotoSubjectKind) String() string { + return proto.EnumName(InTotoSubjectKind_name, int32(x)) } -func (InTotoSubject_Kind) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_f1a937782ebbded5, []int{6, 0} +func (InTotoSubjectKind) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_f1a937782ebbded5, []int{1} } type Result struct { @@ -408,7 +408,7 @@ func (m *Attestations) GetAttestation() []*Attestation { } type Attestation struct { - Kind Attestation_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=moby.buildkit.v1.frontend.Attestation_Kind" json:"kind,omitempty"` + Kind AttestationKind `protobuf:"varint,1,opt,name=kind,proto3,enum=moby.buildkit.v1.frontend.AttestationKind" json:"kind,omitempty"` Ref string `protobuf:"bytes,2,opt,name=ref,proto3" json:"ref,omitempty"` Path string `protobuf:"bytes,3,opt,name=path,proto3" json:"path,omitempty"` InTotoPredicateType string `protobuf:"bytes,4,opt,name=inTotoPredicateType,proto3" json:"inTotoPredicateType,omitempty"` @@ -451,11 +451,11 @@ func (m *Attestation) XXX_DiscardUnknown() { var xxx_messageInfo_Attestation proto.InternalMessageInfo -func (m *Attestation) GetKind() Attestation_Kind { +func (m *Attestation) GetKind() AttestationKind { if m != nil { return m.Kind } - return Attestation_InToto + return AttestationKindInToto } func (m *Attestation) GetRef() string { @@ -487,9 +487,9 @@ func (m *Attestation) GetInTotoSubjects() []*InTotoSubject { } type InTotoSubject struct { - Kind InTotoSubject_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=moby.buildkit.v1.frontend.InTotoSubject_Kind" json:"kind,omitempty"` - RawDigest []github_com_opencontainers_go_digest.Digest `protobuf:"bytes,2,rep,name=rawDigest,proto3,customtype=github.com/opencontainers/go-digest.Digest" json:"rawDigest"` - RawName string `protobuf:"bytes,3,opt,name=rawName,proto3" json:"rawName,omitempty"` + Kind InTotoSubjectKind `protobuf:"varint,1,opt,name=kind,proto3,enum=moby.buildkit.v1.frontend.InTotoSubjectKind" json:"kind,omitempty"` + Digest []github_com_opencontainers_go_digest.Digest `protobuf:"bytes,2,rep,name=digest,proto3,customtype=github.com/opencontainers/go-digest.Digest" json:"digest"` + Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -528,16 +528,16 @@ func (m *InTotoSubject) XXX_DiscardUnknown() { var xxx_messageInfo_InTotoSubject proto.InternalMessageInfo -func (m *InTotoSubject) GetKind() InTotoSubject_Kind { +func (m *InTotoSubject) GetKind() InTotoSubjectKind { if m != nil { return m.Kind } - return InTotoSubject_Raw + return InTotoSubjectKindSelf } -func (m *InTotoSubject) GetRawName() string { +func (m *InTotoSubject) GetName() string { if m != nil { - return m.RawName + return m.Name } return "" } @@ -2455,8 +2455,8 @@ func (m *SignalMessage) GetName() string { } func init() { - proto.RegisterEnum("moby.buildkit.v1.frontend.Attestation_Kind", Attestation_Kind_name, Attestation_Kind_value) - proto.RegisterEnum("moby.buildkit.v1.frontend.InTotoSubject_Kind", InTotoSubject_Kind_name, InTotoSubject_Kind_value) + proto.RegisterEnum("moby.buildkit.v1.frontend.AttestationKind", AttestationKind_name, AttestationKind_value) + proto.RegisterEnum("moby.buildkit.v1.frontend.InTotoSubjectKind", InTotoSubjectKind_name, InTotoSubjectKind_value) proto.RegisterType((*Result)(nil), "moby.buildkit.v1.frontend.Result") proto.RegisterMapType((map[string]*Attestations)(nil), "moby.buildkit.v1.frontend.Result.AttestationsEntry") proto.RegisterMapType((map[string][]byte)(nil), "moby.buildkit.v1.frontend.Result.MetadataEntry") @@ -2509,152 +2509,154 @@ func init() { func init() { proto.RegisterFile("gateway.proto", fileDescriptor_f1a937782ebbded5) } var fileDescriptor_f1a937782ebbded5 = []byte{ - // 2307 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x59, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xd7, 0x8a, 0x94, 0x48, 0x3e, 0x7e, 0x98, 0x1e, 0xa7, 0x29, 0x4d, 0x04, 0x8e, 0xb2, 0x4d, - 0x15, 0xda, 0xb1, 0x97, 0x29, 0x9d, 0x40, 0xae, 0xdd, 0x26, 0xd5, 0x27, 0xa4, 0x58, 0xb2, 0xd9, - 0x91, 0x0b, 0x17, 0x41, 0x0a, 0x74, 0xc5, 0x1d, 0xd2, 0x5b, 0xaf, 0x76, 0xb7, 0xb3, 0x43, 0xcb, - 0x4a, 0x2e, 0xed, 0xbd, 0x87, 0x9e, 0x7a, 0x2d, 0xd0, 0xbf, 0xa0, 0xa7, 0x1e, 0x7b, 0x0e, 0xd0, - 0x4b, 0x2f, 0x05, 0xda, 0x1e, 0x82, 0xc2, 0x7f, 0x44, 0x81, 0xde, 0x8a, 0x37, 0x33, 0x4b, 0x0e, - 0x29, 0x7a, 0x49, 0x25, 0x27, 0xcd, 0xbc, 0x7d, 0xbf, 0x37, 0xef, 0x73, 0xde, 0x1b, 0x0a, 0xaa, - 0x03, 0x57, 0xb0, 0x33, 0xf7, 0xdc, 0x89, 0x79, 0x24, 0x22, 0x72, 0xfd, 0x34, 0x3a, 0x39, 0x77, - 0x4e, 0x86, 0x7e, 0xe0, 0x3d, 0xf7, 0x85, 0xf3, 0xe2, 0x07, 0x4e, 0x9f, 0x47, 0xa1, 0x60, 0xa1, - 0xd7, 0xbc, 0x33, 0xf0, 0xc5, 0xb3, 0xe1, 0x89, 0xd3, 0x8b, 0x4e, 0xdb, 0x83, 0x68, 0x10, 0xb5, - 0x25, 0xe2, 0x64, 0xd8, 0x97, 0x3b, 0xb9, 0x91, 0x2b, 0x25, 0xa9, 0xd9, 0x99, 0x66, 0x1f, 0x44, - 0xd1, 0x20, 0x60, 0x6e, 0xec, 0x27, 0x7a, 0xd9, 0xe6, 0x71, 0xaf, 0x9d, 0x08, 0x57, 0x0c, 0x13, - 0x8d, 0xb9, 0x6d, 0x60, 0x50, 0x91, 0x76, 0xaa, 0x48, 0x3b, 0x89, 0x82, 0x17, 0x8c, 0xb7, 0xe3, - 0x93, 0x76, 0x14, 0xa7, 0xdc, 0xed, 0xd7, 0x72, 0xbb, 0xb1, 0xdf, 0x16, 0xe7, 0x31, 0x4b, 0xda, - 0x67, 0x11, 0x7f, 0xce, 0xb8, 0x06, 0xdc, 0x7d, 0x2d, 0x60, 0x28, 0xfc, 0x00, 0x51, 0x3d, 0x37, - 0x4e, 0xf0, 0x10, 0xfc, 0xab, 0x41, 0xa6, 0xd9, 0x22, 0x0a, 0xfd, 0x44, 0xf8, 0xfe, 0xc0, 0x6f, - 0xf7, 0x13, 0x89, 0x51, 0xa7, 0xa0, 0x11, 0x8a, 0xdd, 0xfe, 0x5b, 0x1e, 0x56, 0x29, 0x4b, 0x86, - 0x81, 0x20, 0xeb, 0x50, 0xe5, 0xac, 0xbf, 0xc3, 0x62, 0xce, 0x7a, 0xae, 0x60, 0x5e, 0xc3, 0x5a, - 0xb3, 0x5a, 0xa5, 0xfd, 0x25, 0x3a, 0x49, 0x26, 0x3f, 0x83, 0x1a, 0x67, 0xfd, 0xc4, 0x60, 0x5c, - 0x5e, 0xb3, 0x5a, 0xe5, 0xce, 0xfb, 0xce, 0x6b, 0x83, 0xe1, 0x50, 0xd6, 0x3f, 0x72, 0xe3, 0x31, - 0x64, 0x7f, 0x89, 0x4e, 0x09, 0x21, 0x1d, 0xc8, 0x71, 0xd6, 0x6f, 0xe4, 0xa4, 0xac, 0x1b, 0xd9, - 0xb2, 0xf6, 0x97, 0x28, 0x32, 0x93, 0x0d, 0xc8, 0xa3, 0x94, 0x46, 0x5e, 0x82, 0xde, 0x99, 0xab, - 0xc0, 0xfe, 0x12, 0x95, 0x00, 0xf2, 0x10, 0x8a, 0xa7, 0x4c, 0xb8, 0x9e, 0x2b, 0xdc, 0x06, 0xac, - 0xe5, 0x5a, 0xe5, 0x4e, 0x3b, 0x13, 0x8c, 0x0e, 0x72, 0x8e, 0x34, 0x62, 0x37, 0x14, 0xfc, 0x9c, - 0x8e, 0x04, 0x90, 0xa7, 0x50, 0x71, 0x85, 0x60, 0xe8, 0x55, 0x3f, 0x0a, 0x93, 0x46, 0x59, 0x0a, - 0xbc, 0x3b, 0x5f, 0xe0, 0xa6, 0x81, 0x52, 0x42, 0x27, 0x04, 0x35, 0x1f, 0x40, 0x75, 0xe2, 0x4c, - 0x52, 0x87, 0xdc, 0x73, 0x76, 0xae, 0x02, 0x43, 0x71, 0x49, 0xde, 0x80, 0x95, 0x17, 0x6e, 0x30, - 0x64, 0x32, 0x06, 0x15, 0xaa, 0x36, 0xf7, 0x97, 0xef, 0x59, 0xcd, 0x67, 0x70, 0xf5, 0x82, 0xfc, - 0x19, 0x02, 0x7e, 0x6c, 0x0a, 0x28, 0x77, 0xde, 0xcb, 0xd0, 0xda, 0x14, 0x67, 0x9c, 0xb4, 0x55, - 0x84, 0x55, 0x2e, 0x0d, 0xb2, 0xff, 0x60, 0x41, 0x7d, 0x3a, 0xd4, 0xe4, 0x40, 0x07, 0xc9, 0x92, - 0x6e, 0xf9, 0xe8, 0x12, 0x59, 0x82, 0x04, 0xed, 0x18, 0x29, 0xa2, 0xb9, 0x01, 0xa5, 0x11, 0x69, - 0x9e, 0x33, 0x4a, 0x86, 0x8a, 0xf6, 0x06, 0xe4, 0x28, 0xeb, 0x93, 0x1a, 0x2c, 0xfb, 0x3a, 0xaf, - 0xe9, 0xb2, 0xef, 0x91, 0x35, 0xc8, 0x79, 0xac, 0xaf, 0x4d, 0xaf, 0x39, 0xf1, 0x89, 0xb3, 0xc3, - 0xfa, 0x7e, 0xe8, 0xa3, 0x89, 0x14, 0x3f, 0xd9, 0x7f, 0xb2, 0xb0, 0x3e, 0x50, 0x2d, 0xf2, 0xc9, - 0x84, 0x1d, 0xf3, 0xb3, 0xfd, 0x82, 0xf6, 0x4f, 0xb3, 0xb5, 0xff, 0x70, 0x32, 0x12, 0x73, 0x4a, - 0xc0, 0xb4, 0xee, 0xe7, 0x50, 0x31, 0x63, 0x43, 0xf6, 0xa1, 0x6c, 0xe4, 0x91, 0x56, 0x78, 0x7d, - 0xb1, 0xc8, 0x52, 0x13, 0x6a, 0xff, 0x6e, 0x19, 0xca, 0xc6, 0x47, 0xf4, 0xc1, 0x73, 0x3f, 0x54, - 0x2e, 0xac, 0x65, 0xfa, 0xc0, 0x40, 0x39, 0x0f, 0xfd, 0xd0, 0xa3, 0x12, 0x88, 0x66, 0x73, 0xed, - 0xf1, 0x92, 0xaa, 0x61, 0x02, 0xf9, 0xd8, 0x15, 0xcf, 0x64, 0xe1, 0x97, 0xa8, 0x5c, 0x93, 0x0f, - 0xe0, 0x9a, 0x1f, 0x3e, 0x89, 0x44, 0xd4, 0xe5, 0xcc, 0xf3, 0x31, 0x17, 0x9e, 0x9c, 0xc7, 0x4c, - 0x96, 0x79, 0x89, 0xce, 0xfa, 0x44, 0xba, 0x50, 0x53, 0xe4, 0xe3, 0xe1, 0xc9, 0xaf, 0x58, 0x4f, - 0x24, 0x8d, 0x15, 0x69, 0x75, 0x2b, 0x43, 0xc5, 0x03, 0x13, 0x40, 0xa7, 0xf0, 0x36, 0x81, 0x3c, - 0xea, 0x4d, 0x00, 0x56, 0x15, 0x63, 0x7d, 0xc9, 0xfe, 0x97, 0x05, 0xd5, 0x09, 0x14, 0xd9, 0x9c, - 0x70, 0xc8, 0x9d, 0x45, 0x4f, 0x33, 0x5d, 0xd2, 0x85, 0x12, 0x77, 0xcf, 0x76, 0xfc, 0x01, 0x4b, - 0x44, 0x63, 0x79, 0x2d, 0xd7, 0x2a, 0x6d, 0x75, 0xbe, 0xfa, 0xfa, 0xed, 0xa5, 0x7f, 0x7f, 0xfd, - 0xf6, 0x2d, 0xe3, 0x32, 0x8f, 0x62, 0x16, 0xf6, 0xa2, 0x50, 0xb8, 0x7e, 0xc8, 0x38, 0xf6, 0xa4, - 0x3b, 0x9e, 0x84, 0x38, 0x0a, 0x49, 0xc7, 0x42, 0x48, 0x03, 0x0a, 0xdc, 0x3d, 0x7b, 0xe4, 0x9e, - 0x32, 0xed, 0xd5, 0x74, 0x6b, 0x5f, 0xd7, 0x46, 0x15, 0x20, 0x47, 0xdd, 0xb3, 0xfa, 0x12, 0x29, - 0x42, 0xfe, 0x98, 0x05, 0xfd, 0xba, 0x65, 0x0b, 0xa8, 0x52, 0x26, 0x86, 0x3c, 0xa4, 0xec, 0xd7, - 0x43, 0x94, 0xf2, 0xc3, 0xb4, 0xac, 0xa5, 0x71, 0xf3, 0xae, 0x57, 0x64, 0xa4, 0x1a, 0x40, 0x5a, - 0xb0, 0xc2, 0x38, 0x8f, 0xb8, 0x4e, 0x65, 0xe2, 0xa8, 0x0e, 0xea, 0xf0, 0xb8, 0xe7, 0x1c, 0xcb, - 0x0e, 0x4a, 0x15, 0x83, 0x5d, 0x87, 0x5a, 0x7a, 0x6a, 0x12, 0x47, 0x61, 0xc2, 0xec, 0x2b, 0xe8, - 0xe2, 0x78, 0x28, 0x12, 0xad, 0x87, 0xfd, 0x57, 0x0b, 0x6a, 0x29, 0x45, 0xf1, 0x90, 0xcf, 0xa1, - 0x3c, 0x2e, 0xd4, 0xb4, 0x22, 0xef, 0x67, 0x3a, 0xdf, 0xc4, 0x1b, 0x55, 0xae, 0x0b, 0xd4, 0x14, - 0xd7, 0x7c, 0x04, 0xf5, 0x69, 0x86, 0x19, 0xe5, 0xfa, 0xee, 0x64, 0xb9, 0x4e, 0xdf, 0x1e, 0x46, - 0x79, 0xfe, 0xc3, 0x82, 0xeb, 0x94, 0xc9, 0x91, 0xe0, 0xe0, 0xd4, 0x1d, 0xb0, 0xed, 0x28, 0xec, - 0xfb, 0x83, 0xd4, 0xcd, 0x75, 0x79, 0x35, 0xa5, 0x92, 0xf1, 0x96, 0x6a, 0x41, 0xb1, 0x1b, 0xb8, - 0xa2, 0x1f, 0xf1, 0x53, 0x2d, 0xbc, 0x82, 0xc2, 0x53, 0x1a, 0x1d, 0x7d, 0x25, 0x6b, 0x50, 0xd6, - 0x82, 0x8f, 0x22, 0x2f, 0x0d, 0xb6, 0x49, 0xc2, 0x54, 0x38, 0x8c, 0x06, 0x32, 0x15, 0x54, 0xf5, - 0xa4, 0x5b, 0x62, 0x43, 0x45, 0x33, 0x72, 0x59, 0x5c, 0x2b, 0x6b, 0x56, 0x6b, 0x85, 0x4e, 0xd0, - 0xc8, 0x5b, 0x50, 0x3a, 0x66, 0x49, 0xe2, 0x47, 0xe1, 0xc1, 0x4e, 0x63, 0x55, 0xe2, 0xc7, 0x04, - 0xfb, 0x37, 0x16, 0x34, 0x67, 0xd9, 0xa5, 0x83, 0xf4, 0x29, 0xac, 0xea, 0xa4, 0x96, 0xb6, 0x7d, - 0xa3, 0xa4, 0xd6, 0x12, 0xc8, 0x9b, 0xb0, 0xaa, 0xa4, 0xeb, 0x3e, 0xa7, 0x77, 0xf6, 0x5f, 0x56, - 0xa0, 0x72, 0x8c, 0x0a, 0xa4, 0xde, 0x74, 0x00, 0xc6, 0x41, 0xd0, 0x89, 0x3b, 0x1d, 0x1a, 0x83, - 0x83, 0x34, 0xa1, 0xb8, 0xa7, 0x93, 0x44, 0x5f, 0x4a, 0xa3, 0x3d, 0xf9, 0x0c, 0xca, 0xe9, 0xfa, - 0x71, 0x2c, 0x1a, 0x39, 0x99, 0x65, 0xf7, 0x32, 0xb2, 0xcc, 0xd4, 0xc4, 0x31, 0xa0, 0x3a, 0xc7, - 0x0c, 0x0a, 0xb9, 0x0d, 0x57, 0xdd, 0x20, 0x88, 0xce, 0x74, 0xe1, 0xc8, 0x12, 0x90, 0x21, 0x28, - 0xd2, 0x8b, 0x1f, 0xf0, 0x3e, 0x34, 0x88, 0x9b, 0x9c, 0xbb, 0xe7, 0x98, 0x33, 0xab, 0x92, 0x7f, - 0xd6, 0x27, 0x6c, 0x85, 0x7b, 0x7e, 0xe8, 0x06, 0x0d, 0x90, 0x3c, 0x6a, 0x83, 0x31, 0xdf, 0x7d, - 0x19, 0x47, 0x5c, 0x30, 0xbe, 0x29, 0x04, 0x6f, 0x94, 0xa5, 0x33, 0x27, 0x68, 0xa4, 0x0b, 0x95, - 0x6d, 0xb7, 0xf7, 0x8c, 0x1d, 0x9c, 0x22, 0x31, 0x69, 0x54, 0xa4, 0xd9, 0xb7, 0x33, 0xcc, 0x96, - 0xec, 0x8f, 0x63, 0x73, 0x8c, 0x31, 0x25, 0x90, 0x1e, 0xd4, 0x52, 0xd3, 0x55, 0x1d, 0x36, 0xaa, - 0x52, 0xe6, 0x83, 0xcb, 0xba, 0x52, 0xa1, 0xd5, 0x11, 0x53, 0x22, 0x31, 0x90, 0xbb, 0x58, 0x72, - 0xae, 0x60, 0x8d, 0x9a, 0xb4, 0x79, 0xb4, 0x6f, 0x7e, 0x0c, 0xf5, 0xe9, 0x68, 0x5c, 0x66, 0x7a, - 0x68, 0xfe, 0x14, 0xae, 0xcd, 0x50, 0xe1, 0x5b, 0xdd, 0x09, 0x7f, 0xb6, 0xe0, 0xea, 0x05, 0xbf, - 0x61, 0x2f, 0x94, 0xb5, 0xa8, 0x44, 0xca, 0x35, 0x39, 0x82, 0x15, 0x8c, 0x4b, 0x22, 0x5b, 0x43, - 0xb9, 0xb3, 0x71, 0x99, 0x40, 0x38, 0x12, 0xa9, 0x1c, 0xa6, 0xa4, 0x34, 0xef, 0x01, 0x8c, 0x89, - 0x97, 0x9a, 0xa1, 0x3e, 0x87, 0xaa, 0x8e, 0x8a, 0x2e, 0x70, 0xdd, 0xcb, 0xad, 0x71, 0x2f, 0x1f, - 0xb7, 0x8c, 0xdc, 0x25, 0x5b, 0x86, 0xfd, 0x25, 0x5c, 0xa1, 0xcc, 0xf5, 0xf6, 0xfc, 0x80, 0xbd, - 0xfe, 0x66, 0xc4, 0x6a, 0xf5, 0x03, 0xd6, 0xc5, 0x79, 0x21, 0xad, 0x56, 0xbd, 0x27, 0xf7, 0x61, - 0x85, 0xba, 0xe1, 0x80, 0xe9, 0xa3, 0xdf, 0xcd, 0x38, 0x5a, 0x1e, 0x82, 0xbc, 0x54, 0x41, 0xec, - 0x07, 0x50, 0x1a, 0xd1, 0xf0, 0xae, 0x79, 0xdc, 0xef, 0x27, 0x4c, 0xdd, 0x5b, 0x39, 0xaa, 0x77, - 0x48, 0x3f, 0x64, 0xe1, 0x40, 0x1f, 0x9d, 0xa3, 0x7a, 0x67, 0xaf, 0xe3, 0xcc, 0x9b, 0x6a, 0xae, - 0x5d, 0x43, 0x20, 0xbf, 0x83, 0x6f, 0x0b, 0x4b, 0x16, 0x98, 0x5c, 0xdb, 0x1e, 0xb6, 0x3a, 0xd7, - 0xdb, 0xf1, 0xf9, 0xeb, 0x0d, 0x6c, 0x40, 0x61, 0xc7, 0xe7, 0x86, 0x7d, 0xe9, 0x96, 0xac, 0x63, - 0x13, 0xec, 0x05, 0x43, 0x0f, 0xad, 0x15, 0x8c, 0x87, 0xfa, 0xb6, 0x9f, 0xa2, 0xda, 0x9f, 0x28, - 0x3f, 0xca, 0x53, 0xb4, 0x32, 0xb7, 0xa1, 0xc0, 0x42, 0xc1, 0x7d, 0x96, 0x76, 0x4a, 0xe2, 0xa8, - 0xe7, 0xa0, 0x23, 0x9f, 0x83, 0xb2, 0x23, 0xd3, 0x94, 0xc5, 0xde, 0x80, 0x2b, 0x48, 0xc8, 0x0e, - 0x04, 0x81, 0xbc, 0xa1, 0xa4, 0x5c, 0xdb, 0xf7, 0xa1, 0x3e, 0x06, 0xea, 0xa3, 0xd7, 0x21, 0x8f, - 0x43, 0xa0, 0xbe, 0x88, 0x67, 0x9d, 0x2b, 0xbf, 0xdb, 0x55, 0x28, 0x77, 0xfd, 0x30, 0xed, 0x89, - 0xf6, 0x2b, 0x0b, 0x2a, 0xdd, 0x28, 0x1c, 0xf7, 0x92, 0x2e, 0x5c, 0x49, 0x2b, 0x70, 0xb3, 0x7b, - 0xb0, 0xed, 0xc6, 0xa9, 0x29, 0x6b, 0x17, 0xc3, 0xac, 0xdf, 0xc5, 0x8e, 0x62, 0xdc, 0xca, 0x63, - 0xdb, 0xa1, 0xd3, 0x70, 0xf2, 0x13, 0x28, 0x1c, 0x1e, 0x6e, 0x49, 0x49, 0xcb, 0x97, 0x92, 0x94, - 0xc2, 0xc8, 0xc7, 0x50, 0x78, 0x2a, 0x9f, 0xeb, 0x89, 0x6e, 0x0d, 0x33, 0x52, 0x4e, 0x19, 0xaa, - 0xd8, 0x28, 0xeb, 0x45, 0xdc, 0xa3, 0x29, 0xc8, 0xfe, 0xaf, 0x05, 0xe5, 0xa7, 0xee, 0x78, 0xde, - 0xfa, 0x14, 0x56, 0xbd, 0x6f, 0xdd, 0x2f, 0xd5, 0x16, 0xab, 0x38, 0x60, 0x2f, 0x58, 0xa0, 0x53, - 0x55, 0x6d, 0x90, 0x9a, 0x3c, 0x8b, 0xb8, 0xaa, 0xce, 0x0a, 0x55, 0x1b, 0xcc, 0x6b, 0x8f, 0x09, - 0xd7, 0x0f, 0x1a, 0xf9, 0xb5, 0x1c, 0xf6, 0x56, 0xb5, 0xc3, 0xa8, 0x0f, 0x79, 0x20, 0x9b, 0x52, - 0x89, 0xe2, 0x92, 0xd8, 0x90, 0xf7, 0xc3, 0x7e, 0x24, 0xfb, 0x8e, 0xbe, 0xdd, 0x8e, 0xa3, 0x21, - 0xef, 0xb1, 0x83, 0xb0, 0x1f, 0x51, 0xf9, 0x8d, 0xbc, 0x03, 0xab, 0x1c, 0xcb, 0x28, 0x69, 0x14, - 0xa4, 0x53, 0x4a, 0xc8, 0xa5, 0x8a, 0x4d, 0x7f, 0xb0, 0x6b, 0x50, 0x51, 0x76, 0xeb, 0x89, 0xef, - 0xf7, 0xcb, 0x70, 0xed, 0x11, 0x3b, 0xdb, 0x4e, 0xed, 0x4a, 0x1d, 0xb2, 0x06, 0xe5, 0x11, 0xed, - 0x60, 0x47, 0xa7, 0x9f, 0x49, 0xc2, 0xc3, 0x8e, 0xa2, 0x61, 0x28, 0xd2, 0x18, 0xca, 0xc3, 0x24, - 0x85, 0xea, 0x0f, 0xe4, 0xfb, 0x50, 0x78, 0xc4, 0xc4, 0x59, 0xc4, 0x9f, 0x4b, 0xab, 0x6b, 0x9d, - 0x32, 0xf2, 0x3c, 0x62, 0x02, 0xc7, 0x23, 0x9a, 0x7e, 0xc3, 0x99, 0x2b, 0x4e, 0x67, 0xae, 0xfc, - 0xac, 0x99, 0x2b, 0xfd, 0x4a, 0x36, 0xa0, 0xdc, 0x8b, 0xc2, 0x44, 0x70, 0xd7, 0x0f, 0xe5, 0x33, - 0x03, 0x99, 0xbf, 0x83, 0xcc, 0x2a, 0xb0, 0xdb, 0xe3, 0x8f, 0xd4, 0xe4, 0x24, 0xb7, 0x00, 0xd8, - 0x4b, 0xc1, 0xdd, 0xfd, 0x28, 0x11, 0x49, 0x63, 0x55, 0x2a, 0x0c, 0x88, 0x43, 0xc2, 0x41, 0x97, - 0x1a, 0x5f, 0xed, 0x37, 0xe1, 0x8d, 0x49, 0x8f, 0x68, 0x57, 0x3d, 0x80, 0xef, 0x52, 0x16, 0x30, - 0x37, 0x61, 0x97, 0xf7, 0x96, 0xdd, 0x84, 0xc6, 0x45, 0xb0, 0x16, 0xfc, 0xbf, 0x1c, 0x94, 0x77, - 0x5f, 0xb2, 0xde, 0x11, 0x4b, 0x12, 0x77, 0x20, 0x27, 0xbf, 0x2e, 0x8f, 0x7a, 0x2c, 0x49, 0x46, - 0xb2, 0xc6, 0x04, 0xf2, 0x23, 0xc8, 0x1f, 0x84, 0xbe, 0xd0, 0x6d, 0x6e, 0x3d, 0x73, 0xf0, 0xf6, - 0x85, 0x96, 0xb9, 0xbf, 0x44, 0x25, 0x8a, 0xdc, 0x87, 0x3c, 0x5e, 0x12, 0x8b, 0x5c, 0xd4, 0x9e, - 0x81, 0x45, 0x0c, 0xd9, 0x92, 0x3f, 0x57, 0xf9, 0x5f, 0x30, 0x1d, 0xa5, 0x56, 0x76, 0x87, 0xf1, - 0xbf, 0x60, 0x63, 0x09, 0x1a, 0x49, 0x76, 0xa1, 0x70, 0x2c, 0x5c, 0x2e, 0x98, 0xa7, 0xa3, 0x77, - 0x33, 0x6b, 0x10, 0x51, 0x9c, 0x63, 0x29, 0x29, 0x16, 0x9d, 0xb0, 0xfb, 0xd2, 0x17, 0xba, 0x1a, - 0xb2, 0x9c, 0x80, 0x6c, 0x86, 0x21, 0xb8, 0x45, 0xf4, 0x4e, 0x14, 0xb2, 0x46, 0x61, 0x2e, 0x1a, - 0xd9, 0x0c, 0x34, 0x6e, 0xd1, 0x0d, 0xc7, 0xfe, 0x00, 0xe7, 0xbb, 0xe2, 0x5c, 0x37, 0x28, 0x46, - 0xc3, 0x0d, 0x8a, 0xb0, 0x55, 0x80, 0x15, 0x39, 0xcd, 0xd8, 0x7f, 0xb4, 0xa0, 0x6c, 0xc4, 0x69, - 0x81, 0xba, 0x7b, 0x0b, 0xf2, 0x47, 0x4c, 0xb8, 0x3a, 0xfe, 0x45, 0x59, 0x75, 0x4c, 0xb8, 0x54, - 0x52, 0xf1, 0xe2, 0xd8, 0xf3, 0xd4, 0xa5, 0x58, 0xa5, 0xb8, 0x44, 0xca, 0x13, 0x71, 0x2e, 0x43, - 0x56, 0xa4, 0xb8, 0x24, 0xb7, 0xa1, 0x78, 0xcc, 0x7a, 0x43, 0xee, 0x8b, 0x73, 0x19, 0x84, 0x5a, - 0xa7, 0x2e, 0xaf, 0x13, 0x4d, 0x93, 0xc5, 0x39, 0xe2, 0xb0, 0x1f, 0x62, 0x72, 0x8e, 0x15, 0x24, - 0x90, 0xdf, 0xc6, 0xf7, 0x0e, 0x6a, 0x56, 0xa5, 0x72, 0x8d, 0x4f, 0xce, 0xdd, 0x79, 0x4f, 0xce, - 0xdd, 0xf4, 0xc9, 0x39, 0x19, 0x54, 0xec, 0x3e, 0x86, 0x93, 0xed, 0x4d, 0x28, 0x8d, 0x12, 0x8f, - 0xd4, 0x60, 0x79, 0xcf, 0xd3, 0x27, 0x2d, 0xef, 0xc9, 0x1f, 0x30, 0x76, 0x1f, 0xef, 0xc9, 0x53, - 0x8a, 0x14, 0x97, 0xa3, 0x5e, 0x9f, 0x33, 0x7a, 0xfd, 0x06, 0x3e, 0xa6, 0x8d, 0xec, 0x43, 0x26, - 0x1a, 0x9d, 0x25, 0xa9, 0xca, 0xb8, 0x56, 0x66, 0x04, 0x89, 0x94, 0x25, 0xcd, 0x08, 0x12, 0xfb, - 0x7b, 0x50, 0x9d, 0x88, 0x17, 0x32, 0xc9, 0xd7, 0x9b, 0x1e, 0x09, 0x71, 0xdd, 0xf9, 0x67, 0x09, - 0x4a, 0x87, 0x87, 0x5b, 0x5b, 0xdc, 0xf7, 0x06, 0x8c, 0xfc, 0xd6, 0x02, 0x72, 0xf1, 0x19, 0x46, - 0x3e, 0xcc, 0xae, 0x8c, 0xd9, 0xaf, 0xd1, 0xe6, 0x47, 0x97, 0x44, 0xe9, 0xfe, 0xfc, 0x19, 0xac, - 0xc8, 0xd9, 0x90, 0xbc, 0xb7, 0xe0, 0x4c, 0xdf, 0x6c, 0xcd, 0x67, 0xd4, 0xb2, 0x7b, 0x50, 0x4c, - 0xe7, 0x2b, 0x72, 0x2b, 0x53, 0xbd, 0x89, 0xf1, 0xb1, 0xf9, 0xfe, 0x42, 0xbc, 0xfa, 0x90, 0x5f, - 0x42, 0x41, 0x8f, 0x4d, 0xe4, 0xe6, 0x1c, 0xdc, 0x78, 0x80, 0x6b, 0xde, 0x5a, 0x84, 0x75, 0x6c, - 0x46, 0x3a, 0x1e, 0x65, 0x9a, 0x31, 0x35, 0x7c, 0x65, 0x9a, 0x71, 0x61, 0xde, 0x7a, 0x0a, 0x79, - 0x9c, 0xa3, 0x48, 0xd6, 0x7d, 0x62, 0x0c, 0x5a, 0xcd, 0xac, 0x70, 0x4d, 0x0c, 0x60, 0xbf, 0xc0, - 0x7b, 0x57, 0xbe, 0x45, 0xb3, 0x6f, 0x5c, 0xe3, 0x07, 0xa4, 0xe6, 0xcd, 0x05, 0x38, 0xc7, 0xe2, - 0xf5, 0x3b, 0xae, 0xb5, 0xc0, 0xaf, 0x38, 0xf3, 0xc5, 0x4f, 0xfd, 0x5e, 0x14, 0x41, 0xc5, 0x6c, - 0xa7, 0xc4, 0xc9, 0x80, 0xce, 0x98, 0x44, 0x9a, 0xed, 0x85, 0xf9, 0xf5, 0x81, 0x5f, 0xe2, 0x9b, - 0x60, 0xb2, 0xd5, 0x92, 0x4e, 0xa6, 0x3b, 0x66, 0x36, 0xf5, 0xe6, 0xdd, 0x4b, 0x61, 0xf4, 0xe1, - 0xae, 0x6a, 0xe5, 0xba, 0x5d, 0x93, 0xec, 0xce, 0x34, 0x6a, 0xf9, 0xcd, 0x05, 0xf9, 0x5a, 0xd6, - 0x07, 0x16, 0xe6, 0x19, 0x8e, 0x70, 0x99, 0xb2, 0x8d, 0xd9, 0x36, 0x33, 0xcf, 0xcc, 0x59, 0x70, - 0xab, 0xf2, 0xd5, 0xab, 0x1b, 0xd6, 0xdf, 0x5f, 0xdd, 0xb0, 0xfe, 0xf3, 0xea, 0x86, 0x75, 0xb2, - 0x2a, 0xff, 0x49, 0x75, 0xf7, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xd3, 0x68, 0x2c, 0xe9, 0xf6, - 0x1b, 0x00, 0x00, + // 2349 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x39, 0xcd, 0x6f, 0x1b, 0xc7, + 0xf5, 0x5a, 0x91, 0x12, 0xc9, 0xc7, 0x0f, 0xcb, 0x13, 0x27, 0xbf, 0xcd, 0x22, 0x70, 0xe8, 0x4d, + 0xa2, 0xd0, 0x8a, 0x43, 0xe6, 0x47, 0x27, 0x90, 0x6b, 0xb7, 0x4e, 0xac, 0x2f, 0x48, 0xb1, 0x64, + 0xb3, 0x23, 0x17, 0x2e, 0x82, 0x14, 0xe8, 0x8a, 0x1c, 0xd2, 0x5b, 0x53, 0xbb, 0xdb, 0xd9, 0xa1, + 0x65, 0x25, 0x97, 0xf6, 0x56, 0xe4, 0xd4, 0x53, 0x6f, 0x41, 0x81, 0xf6, 0x1f, 0x68, 0x2f, 0x3d, + 0xf6, 0x1c, 0xa0, 0x97, 0x5e, 0x0a, 0x14, 0x3d, 0x04, 0x85, 0xff, 0x88, 0x16, 0xbd, 0x15, 0x6f, + 0x66, 0x96, 0x1c, 0x7e, 0x78, 0x49, 0x35, 0x27, 0xce, 0xbc, 0x79, 0xef, 0xcd, 0xfb, 0x7e, 0x6f, + 0x96, 0x50, 0xee, 0x79, 0x82, 0x9d, 0x79, 0xe7, 0xf5, 0x88, 0x87, 0x22, 0x24, 0xaf, 0x9f, 0x86, + 0x27, 0xe7, 0xf5, 0x93, 0x81, 0xdf, 0xef, 0x3c, 0xf5, 0x45, 0xfd, 0xd9, 0xff, 0xd7, 0xbb, 0x3c, + 0x0c, 0x04, 0x0b, 0x3a, 0xce, 0xfb, 0x3d, 0x5f, 0x3c, 0x19, 0x9c, 0xd4, 0xdb, 0xe1, 0x69, 0xa3, + 0x17, 0xf6, 0xc2, 0x86, 0xa4, 0x38, 0x19, 0x74, 0xe5, 0x4e, 0x6e, 0xe4, 0x4a, 0x71, 0x72, 0x9a, + 0x93, 0xe8, 0xbd, 0x30, 0xec, 0xf5, 0x99, 0x17, 0xf9, 0xb1, 0x5e, 0x36, 0x78, 0xd4, 0x6e, 0xc4, + 0xc2, 0x13, 0x83, 0x58, 0xd3, 0xdc, 0x30, 0x68, 0x50, 0x90, 0x46, 0x22, 0x48, 0x23, 0x0e, 0xfb, + 0xcf, 0x18, 0x6f, 0x44, 0x27, 0x8d, 0x30, 0x4a, 0xb0, 0x1b, 0x2f, 0xc5, 0xf6, 0x22, 0xbf, 0x21, + 0xce, 0x23, 0x16, 0x37, 0xce, 0x42, 0xfe, 0x94, 0x71, 0x4d, 0x70, 0xf3, 0xa5, 0x04, 0x03, 0xe1, + 0xf7, 0x91, 0xaa, 0xed, 0x45, 0x31, 0x5e, 0x82, 0xbf, 0x9a, 0xc8, 0x54, 0x5b, 0x84, 0x81, 0x1f, + 0x0b, 0xdf, 0xef, 0xf9, 0x8d, 0x6e, 0x2c, 0x69, 0xd4, 0x2d, 0xa8, 0x84, 0x42, 0x77, 0xff, 0x92, + 0x85, 0x55, 0xca, 0xe2, 0x41, 0x5f, 0x90, 0x75, 0x28, 0x73, 0xd6, 0xdd, 0x61, 0x11, 0x67, 0x6d, + 0x4f, 0xb0, 0x8e, 0x6d, 0x55, 0xad, 0x5a, 0x61, 0x7f, 0x89, 0x8e, 0x83, 0xc9, 0x8f, 0xa0, 0xc2, + 0x59, 0x37, 0x36, 0x10, 0x97, 0xab, 0x56, 0xad, 0xd8, 0x7c, 0xaf, 0xfe, 0x52, 0x67, 0xd4, 0x29, + 0xeb, 0x1e, 0x79, 0xd1, 0x88, 0x64, 0x7f, 0x89, 0x4e, 0x30, 0x21, 0x4d, 0xc8, 0x70, 0xd6, 0xb5, + 0x33, 0x92, 0xd7, 0xd5, 0x74, 0x5e, 0xfb, 0x4b, 0x14, 0x91, 0xc9, 0x26, 0x64, 0x91, 0x8b, 0x9d, + 0x95, 0x44, 0xd7, 0xe6, 0x0a, 0xb0, 0xbf, 0x44, 0x25, 0x01, 0xb9, 0x0f, 0xf9, 0x53, 0x26, 0xbc, + 0x8e, 0x27, 0x3c, 0x1b, 0xaa, 0x99, 0x5a, 0xb1, 0xd9, 0x48, 0x25, 0x46, 0x03, 0xd5, 0x8f, 0x34, + 0xc5, 0x6e, 0x20, 0xf8, 0x39, 0x1d, 0x32, 0x20, 0x8f, 0xa1, 0xe4, 0x09, 0xc1, 0xd0, 0xaa, 0x7e, + 0x18, 0xc4, 0x76, 0x51, 0x32, 0xbc, 0x39, 0x9f, 0xe1, 0x3d, 0x83, 0x4a, 0x31, 0x1d, 0x63, 0xe4, + 0xdc, 0x81, 0xf2, 0xd8, 0x9d, 0x64, 0x0d, 0x32, 0x4f, 0xd9, 0xb9, 0x72, 0x0c, 0xc5, 0x25, 0xb9, + 0x02, 0x2b, 0xcf, 0xbc, 0xfe, 0x80, 0x49, 0x1f, 0x94, 0xa8, 0xda, 0xdc, 0x5e, 0xbe, 0x65, 0x39, + 0x4f, 0xe0, 0xf2, 0x14, 0xff, 0x19, 0x0c, 0x7e, 0x60, 0x32, 0x28, 0x36, 0xdf, 0x4d, 0x91, 0xda, + 0x64, 0x67, 0xdc, 0xb4, 0x95, 0x87, 0x55, 0x2e, 0x15, 0x72, 0x7f, 0x63, 0xc1, 0xda, 0xa4, 0xab, + 0xc9, 0x81, 0x76, 0x92, 0x25, 0xcd, 0xf2, 0xd1, 0x05, 0xa2, 0x04, 0x01, 0xda, 0x30, 0x92, 0x85, + 0xb3, 0x09, 0x85, 0x21, 0x68, 0x9e, 0x31, 0x0a, 0x86, 0x88, 0xee, 0x26, 0x64, 0x28, 0xeb, 0x92, + 0x0a, 0x2c, 0xfb, 0x3a, 0xae, 0xe9, 0xb2, 0xdf, 0x21, 0x55, 0xc8, 0x74, 0x58, 0x57, 0xab, 0x5e, + 0xa9, 0x47, 0x27, 0xf5, 0x1d, 0xd6, 0xf5, 0x03, 0x1f, 0x55, 0xa4, 0x78, 0xe4, 0xfe, 0xce, 0xc2, + 0xfc, 0x40, 0xb1, 0xc8, 0xc7, 0x63, 0x7a, 0xcc, 0x8f, 0xf6, 0x29, 0xe9, 0x1f, 0xa7, 0x4b, 0xff, + 0xe1, 0xb8, 0x27, 0xe6, 0xa4, 0x80, 0xa9, 0xdd, 0x8f, 0xa1, 0x64, 0xfa, 0x86, 0xec, 0x43, 0xd1, + 0x88, 0x23, 0x2d, 0xf0, 0xfa, 0x62, 0x9e, 0xa5, 0x26, 0xa9, 0xfb, 0x6f, 0x0b, 0x8a, 0xc6, 0x21, + 0xb9, 0x0b, 0xd9, 0xa7, 0x7e, 0xa0, 0x4c, 0x58, 0x69, 0x6e, 0x2c, 0xc6, 0xf2, 0xbe, 0x1f, 0x74, + 0xa8, 0xa4, 0x43, 0xad, 0xb9, 0x36, 0x78, 0x41, 0xa5, 0x30, 0x81, 0x6c, 0xe4, 0x89, 0x27, 0x32, + 0xef, 0x0b, 0x54, 0xae, 0xc9, 0x07, 0xf0, 0x8a, 0x1f, 0x3c, 0x0a, 0x45, 0xd8, 0xe2, 0xac, 0xe3, + 0x63, 0x28, 0x3c, 0x3a, 0x8f, 0x98, 0xcc, 0xf2, 0x02, 0x9d, 0x75, 0x44, 0x5a, 0x50, 0x51, 0xe0, + 0xe3, 0xc1, 0xc9, 0xcf, 0x58, 0x5b, 0xc4, 0xf6, 0x8a, 0x54, 0xba, 0x96, 0x22, 0xe1, 0x81, 0x49, + 0x40, 0x27, 0xe8, 0xdd, 0x3f, 0x5a, 0x50, 0x1e, 0xc3, 0x20, 0x9f, 0x8c, 0xe9, 0x7e, 0x63, 0x51, + 0xce, 0x86, 0xf6, 0x9f, 0xc2, 0x6a, 0xc7, 0xef, 0xb1, 0x58, 0xd8, 0xcb, 0xd5, 0x4c, 0xad, 0xb0, + 0xd5, 0xfc, 0xe6, 0xdb, 0x37, 0x97, 0xfe, 0xf1, 0xed, 0x9b, 0x1b, 0x46, 0xcd, 0x0e, 0x23, 0x16, + 0xb4, 0xc3, 0x40, 0x78, 0x7e, 0xc0, 0x38, 0xb6, 0x9e, 0xf7, 0x15, 0x49, 0x7d, 0x47, 0xfe, 0x50, + 0xcd, 0x01, 0xed, 0x16, 0x78, 0xa7, 0x2c, 0xb1, 0x1b, 0xae, 0x5d, 0x01, 0x65, 0xca, 0xc4, 0x80, + 0x07, 0x94, 0xfd, 0x7c, 0x80, 0x48, 0xdf, 0x4b, 0x32, 0x53, 0x0a, 0x3d, 0xaf, 0x42, 0x22, 0x22, + 0xd5, 0x04, 0xa4, 0x06, 0x2b, 0x8c, 0xf3, 0x90, 0xeb, 0x68, 0x24, 0x75, 0xd5, 0x04, 0xeb, 0x3c, + 0x6a, 0xd7, 0x8f, 0x65, 0x13, 0xa4, 0x0a, 0xc1, 0x5d, 0x83, 0x4a, 0x72, 0x6b, 0x1c, 0x85, 0x41, + 0xcc, 0xdc, 0x4b, 0x68, 0xba, 0x68, 0x20, 0x62, 0x2d, 0x87, 0xfb, 0x67, 0x0b, 0x2a, 0x09, 0x44, + 0xe1, 0x90, 0xcf, 0xa1, 0x38, 0xca, 0xb5, 0x24, 0xa9, 0x6e, 0xa7, 0x1a, 0xd5, 0xa4, 0x37, 0x12, + 0x55, 0xe7, 0x98, 0xc9, 0xce, 0x79, 0x00, 0x6b, 0x93, 0x08, 0x33, 0x32, 0xee, 0xed, 0xf1, 0x8c, + 0x9b, 0x2c, 0x00, 0x46, 0x86, 0xfd, 0xcd, 0x82, 0xd7, 0x29, 0x93, 0x5d, 0xfd, 0xe0, 0xd4, 0xeb, + 0xb1, 0xed, 0x30, 0xe8, 0xfa, 0xbd, 0xc4, 0xcc, 0x6b, 0xb2, 0xba, 0x24, 0x9c, 0xb1, 0xd0, 0xd4, + 0x20, 0xdf, 0xea, 0x7b, 0xa2, 0x1b, 0xf2, 0x53, 0xcd, 0xbc, 0x84, 0xcc, 0x13, 0x18, 0x1d, 0x9e, + 0x92, 0x2a, 0x14, 0x35, 0xe3, 0xa3, 0xb0, 0x93, 0xb8, 0xd3, 0x04, 0x11, 0x1b, 0x72, 0x87, 0x61, + 0xef, 0x01, 0x3a, 0x5b, 0x65, 0x40, 0xb2, 0x25, 0x2e, 0x94, 0x34, 0x22, 0x97, 0x09, 0xb2, 0x52, + 0xb5, 0x6a, 0x2b, 0x74, 0x0c, 0x46, 0xde, 0x80, 0xc2, 0x31, 0x8b, 0x63, 0x3f, 0x0c, 0x0e, 0x76, + 0xec, 0x55, 0x49, 0x3f, 0x02, 0xb8, 0xbf, 0xb0, 0xc0, 0x99, 0xa5, 0x97, 0x76, 0xd2, 0xa7, 0xb0, + 0xaa, 0xc2, 0x4e, 0xe9, 0xf6, 0xbf, 0x05, 0xac, 0xfa, 0x25, 0xaf, 0xc1, 0xaa, 0xe2, 0xae, 0x5b, + 0x95, 0xde, 0xb9, 0x7f, 0x5a, 0x81, 0xd2, 0x31, 0x0a, 0x90, 0x58, 0xb3, 0x0e, 0x30, 0x72, 0x82, + 0x0e, 0xdc, 0x49, 0xd7, 0x18, 0x18, 0xc4, 0x81, 0xfc, 0x9e, 0x0e, 0x12, 0x5d, 0x58, 0x86, 0x7b, + 0xf2, 0x19, 0x14, 0x93, 0xf5, 0xc3, 0x48, 0xd8, 0x19, 0x19, 0x65, 0xb7, 0x52, 0xa2, 0xcc, 0x94, + 0xa4, 0x6e, 0x90, 0xea, 0x18, 0x33, 0x20, 0xe4, 0x06, 0x5c, 0xf6, 0xfa, 0xfd, 0xf0, 0x4c, 0x27, + 0x8e, 0x4c, 0x01, 0xe9, 0x82, 0x3c, 0x9d, 0x3e, 0xc0, 0x9a, 0x66, 0x00, 0xef, 0x71, 0xee, 0x9d, + 0x63, 0xcc, 0xac, 0x4a, 0xfc, 0x59, 0x47, 0xd8, 0xcd, 0xf6, 0xfc, 0xc0, 0xeb, 0xdb, 0x20, 0x71, + 0xd4, 0x06, 0x7d, 0xbe, 0xfb, 0x3c, 0x0a, 0xb9, 0x60, 0xfc, 0x9e, 0x10, 0xdc, 0x2e, 0x4a, 0x63, + 0x8e, 0xc1, 0x48, 0x0b, 0x4a, 0xdb, 0x5e, 0xfb, 0x09, 0x3b, 0x38, 0x45, 0x60, 0x6c, 0x97, 0xa4, + 0xda, 0x69, 0x15, 0x4b, 0xa2, 0x3f, 0x8c, 0xcc, 0x49, 0xc4, 0xe4, 0x40, 0xda, 0x50, 0x49, 0x54, + 0x57, 0x79, 0x68, 0x97, 0x25, 0xcf, 0x3b, 0x17, 0x35, 0xa5, 0xa2, 0x56, 0x57, 0x4c, 0xb0, 0x44, + 0x47, 0xee, 0x62, 0xca, 0x79, 0x82, 0xd9, 0x15, 0xa9, 0xf3, 0x70, 0xef, 0xdc, 0x85, 0xb5, 0x49, + 0x6f, 0x5c, 0x64, 0x00, 0x70, 0x7e, 0x08, 0xaf, 0xcc, 0x10, 0xe1, 0x3b, 0xd5, 0x84, 0x3f, 0x58, + 0x70, 0x79, 0xca, 0x6e, 0x58, 0x97, 0x65, 0x2e, 0x2a, 0x96, 0x72, 0x4d, 0x8e, 0x60, 0x05, 0xfd, + 0x12, 0xcb, 0xb2, 0x5f, 0x6c, 0x6e, 0x5e, 0xc4, 0x11, 0x75, 0x49, 0xa9, 0x0c, 0xa6, 0xb8, 0x38, + 0xb7, 0x00, 0x46, 0xc0, 0x0b, 0x8d, 0x41, 0x9f, 0x43, 0x59, 0x7b, 0x45, 0x27, 0xb8, 0xee, 0xc7, + 0xd6, 0xa8, 0x1f, 0x8f, 0x5a, 0x46, 0xe6, 0x82, 0x2d, 0xc3, 0xfd, 0x12, 0x2e, 0x51, 0xe6, 0x75, + 0xf6, 0xfc, 0x3e, 0x7b, 0x79, 0x65, 0xc4, 0x6c, 0xf5, 0xfb, 0xac, 0x85, 0x3d, 0x3f, 0xc9, 0x56, + 0xbd, 0x27, 0xb7, 0x61, 0x85, 0x7a, 0x41, 0x8f, 0xe9, 0xab, 0xdf, 0x4e, 0xb9, 0x5a, 0x5e, 0x82, + 0xb8, 0x54, 0x91, 0xb8, 0x77, 0xa0, 0x30, 0x84, 0x61, 0xad, 0x79, 0xd8, 0xed, 0xc6, 0x4c, 0xd5, + 0xad, 0x0c, 0xd5, 0x3b, 0x84, 0x1f, 0xb2, 0xa0, 0xa7, 0xaf, 0xce, 0x50, 0xbd, 0x73, 0xd7, 0x71, + 0x6c, 0x4d, 0x24, 0xd7, 0xa6, 0x21, 0x90, 0xdd, 0xc1, 0xe7, 0x81, 0x25, 0x13, 0x4c, 0xae, 0xdd, + 0x0e, 0xb6, 0x3a, 0xaf, 0xb3, 0xe3, 0xf3, 0x97, 0x2b, 0x68, 0x43, 0x6e, 0xc7, 0xe7, 0x86, 0x7e, + 0xc9, 0x96, 0xac, 0x63, 0x13, 0x6c, 0xf7, 0x07, 0x1d, 0xd4, 0x56, 0x30, 0x1e, 0xe8, 0x6a, 0x3f, + 0x01, 0x75, 0x3f, 0x56, 0x76, 0x94, 0xb7, 0x68, 0x61, 0x6e, 0x40, 0x8e, 0x05, 0x82, 0xfb, 0x2c, + 0xe9, 0x94, 0xa4, 0xae, 0x5e, 0x74, 0x75, 0xf9, 0xa2, 0x93, 0x1d, 0x99, 0x26, 0x28, 0xee, 0x26, + 0x5c, 0x42, 0x40, 0xba, 0x23, 0x08, 0x64, 0x0d, 0x21, 0xe5, 0xda, 0xbd, 0x0d, 0x6b, 0x23, 0x42, + 0x7d, 0xf5, 0x3a, 0x64, 0x71, 0x8e, 0xd3, 0x85, 0x78, 0xd6, 0xbd, 0xf2, 0xdc, 0x2d, 0x43, 0xb1, + 0xe5, 0x07, 0x49, 0x4f, 0x74, 0x5f, 0x58, 0x50, 0x6a, 0x85, 0xc1, 0xa8, 0x97, 0xb4, 0xe0, 0x52, + 0x92, 0x81, 0xf7, 0x5a, 0x07, 0xdb, 0x5e, 0x94, 0xa8, 0x52, 0x9d, 0x76, 0xb3, 0x7e, 0xda, 0xd6, + 0x15, 0xe2, 0x56, 0x16, 0xdb, 0x0e, 0x9d, 0x24, 0x27, 0x9f, 0x40, 0xee, 0xf0, 0x70, 0x4b, 0x72, + 0x5a, 0xbe, 0x10, 0xa7, 0x84, 0x8c, 0xdc, 0x85, 0xdc, 0x63, 0xf9, 0xe2, 0x8e, 0x75, 0x6b, 0x98, + 0x11, 0x72, 0x4a, 0x51, 0x85, 0x46, 0x59, 0x3b, 0xe4, 0x1d, 0x9a, 0x10, 0xb9, 0xff, 0xb2, 0xa0, + 0xf8, 0xd8, 0x1b, 0xcd, 0x5b, 0xa3, 0x01, 0xef, 0x3b, 0xf4, 0x4b, 0x3d, 0xe0, 0x5d, 0x81, 0x95, + 0x3e, 0x7b, 0xc6, 0xfa, 0x3a, 0x54, 0xd5, 0x06, 0xa1, 0xf1, 0x93, 0x90, 0xab, 0xec, 0x2c, 0x51, + 0xb5, 0xc1, 0xb8, 0xee, 0x30, 0xe1, 0xf9, 0x7d, 0x3b, 0x5b, 0xcd, 0x60, 0x6f, 0x55, 0x3b, 0xf4, + 0xfa, 0x80, 0xf7, 0x65, 0x53, 0x2a, 0x50, 0x5c, 0x12, 0x17, 0xb2, 0x7e, 0xd0, 0x0d, 0x65, 0xdf, + 0xd1, 0xd5, 0xed, 0x38, 0x1c, 0xf0, 0x36, 0x3b, 0x08, 0xba, 0x21, 0x95, 0x67, 0xe4, 0x1a, 0xac, + 0x72, 0x4c, 0xa3, 0xd8, 0xce, 0x49, 0xa3, 0x14, 0x10, 0x4b, 0x25, 0x9b, 0x3e, 0x70, 0x2b, 0x50, + 0x52, 0x7a, 0xeb, 0x89, 0xef, 0xd7, 0xcb, 0xf0, 0xca, 0x03, 0x76, 0xb6, 0x9d, 0xe8, 0x95, 0x18, + 0xa4, 0x0a, 0xc5, 0x21, 0xec, 0x60, 0x47, 0x87, 0x9f, 0x09, 0xc2, 0xcb, 0x8e, 0xc2, 0x41, 0x20, + 0x12, 0x1f, 0xca, 0xcb, 0x24, 0x84, 0xea, 0x03, 0xf2, 0x0e, 0xe4, 0x1e, 0x30, 0x71, 0x16, 0xf2, + 0xa7, 0x52, 0xeb, 0x4a, 0xb3, 0x88, 0x38, 0x0f, 0x98, 0xc0, 0xf1, 0x88, 0x26, 0x67, 0x38, 0x73, + 0x45, 0xc9, 0xcc, 0x95, 0x9d, 0x35, 0x73, 0x25, 0xa7, 0x64, 0x13, 0x8a, 0xed, 0x30, 0x88, 0x05, + 0xf7, 0xfc, 0x40, 0x3e, 0x15, 0x10, 0xf9, 0x55, 0x44, 0x56, 0x8e, 0xdd, 0x1e, 0x1d, 0x52, 0x13, + 0x93, 0x6c, 0x00, 0xb0, 0xe7, 0x82, 0x7b, 0xfb, 0x61, 0x2c, 0x62, 0x7b, 0x55, 0x0a, 0x0c, 0x48, + 0x87, 0x80, 0x83, 0x16, 0x35, 0x4e, 0xdd, 0xd7, 0xe0, 0xca, 0xb8, 0x45, 0xb4, 0xa9, 0xee, 0xc0, + 0xff, 0x51, 0xd6, 0x67, 0x5e, 0xcc, 0x2e, 0x6e, 0x2d, 0xd7, 0x01, 0x7b, 0x9a, 0x58, 0x33, 0xfe, + 0x4f, 0x06, 0x8a, 0xbb, 0xcf, 0x59, 0xfb, 0x88, 0xc5, 0xb1, 0xd7, 0x93, 0x93, 0x5f, 0x8b, 0x87, + 0x6d, 0x16, 0xc7, 0x43, 0x5e, 0x23, 0x00, 0xf9, 0x3e, 0x64, 0x0f, 0x02, 0x5f, 0xe8, 0x36, 0xb7, + 0x9e, 0x3a, 0x78, 0xfb, 0x42, 0xf3, 0xdc, 0x5f, 0xa2, 0x92, 0x8a, 0xdc, 0x86, 0x2c, 0x16, 0x89, + 0x45, 0x0a, 0x75, 0xc7, 0xa0, 0x45, 0x1a, 0xb2, 0x25, 0xbf, 0x38, 0xf9, 0x5f, 0x30, 0xed, 0xa5, + 0x5a, 0x7a, 0x87, 0xf1, 0xbf, 0x60, 0x23, 0x0e, 0x9a, 0x92, 0xec, 0x42, 0xee, 0x58, 0x78, 0x5c, + 0xb0, 0x8e, 0xf6, 0xde, 0xf5, 0xb4, 0x41, 0x44, 0x61, 0x8e, 0xb8, 0x24, 0xb4, 0x68, 0x84, 0xdd, + 0xe7, 0xbe, 0xd0, 0xd9, 0x90, 0x66, 0x04, 0x44, 0x33, 0x14, 0xc1, 0x2d, 0x52, 0xef, 0x84, 0x01, + 0xb3, 0x73, 0x73, 0xa9, 0x11, 0xcd, 0xa0, 0xc6, 0x2d, 0x9a, 0xe1, 0xd8, 0xef, 0xe1, 0x7c, 0x97, + 0x9f, 0x6b, 0x06, 0x85, 0x68, 0x98, 0x41, 0x01, 0xb6, 0x72, 0xb0, 0x22, 0xa7, 0x19, 0xf7, 0xb7, + 0x16, 0x14, 0x0d, 0x3f, 0x2d, 0x90, 0x77, 0x6f, 0x40, 0xf6, 0x88, 0x09, 0x4f, 0xfb, 0x3f, 0x2f, + 0xb3, 0x8e, 0x09, 0x8f, 0x4a, 0x28, 0x16, 0x8e, 0xbd, 0x8e, 0x2a, 0x8a, 0x65, 0x8a, 0x4b, 0x84, + 0x3c, 0x12, 0xe7, 0xd2, 0x65, 0x79, 0x8a, 0x4b, 0x72, 0x03, 0xf2, 0xc7, 0xac, 0x3d, 0xe0, 0xbe, + 0x38, 0x97, 0x4e, 0xa8, 0x34, 0xd7, 0x64, 0x39, 0xd1, 0x30, 0x99, 0x9c, 0x43, 0x0c, 0xf7, 0x3e, + 0x06, 0xe7, 0x48, 0x40, 0x02, 0xd9, 0x6d, 0x7c, 0xef, 0xa0, 0x64, 0x65, 0x2a, 0xd7, 0xf8, 0xe4, + 0xdc, 0x9d, 0xf7, 0xe4, 0xdc, 0x4d, 0x9e, 0x9c, 0xe3, 0x4e, 0xc5, 0xee, 0x63, 0x18, 0xd9, 0xbd, + 0x07, 0x85, 0x61, 0xe0, 0x91, 0x0a, 0x2c, 0xef, 0x75, 0xf4, 0x4d, 0xcb, 0x7b, 0xf2, 0x23, 0xc4, + 0xee, 0xc3, 0x3d, 0x79, 0x4b, 0x9e, 0xe2, 0x72, 0xd8, 0xeb, 0x33, 0x46, 0xaf, 0xdf, 0xc4, 0xc7, + 0xb4, 0x11, 0x7d, 0x88, 0x44, 0xc3, 0xb3, 0x38, 0x11, 0x19, 0xd7, 0x4a, 0x8d, 0x7e, 0x2c, 0x79, + 0x49, 0x35, 0xfa, 0xb1, 0xfb, 0x16, 0x94, 0xc7, 0xfc, 0x85, 0x48, 0xf2, 0xf5, 0xa6, 0x47, 0x42, + 0x5c, 0x6f, 0xdc, 0x85, 0x4b, 0x13, 0x5f, 0x48, 0xc8, 0x3b, 0xb0, 0xaa, 0x3e, 0x1c, 0xac, 0x2d, + 0x39, 0xaf, 0x7f, 0xf5, 0x75, 0xf5, 0xd5, 0x09, 0x04, 0x75, 0xe8, 0x64, 0x7f, 0xf5, 0xfb, 0xab, + 0x4b, 0x1b, 0x1e, 0x5c, 0x9e, 0xfa, 0xca, 0x40, 0xde, 0x82, 0xec, 0x31, 0xeb, 0x77, 0x13, 0xfa, + 0x29, 0x04, 0x3c, 0x24, 0xd7, 0x20, 0x43, 0xbd, 0xb3, 0x35, 0xcb, 0xb1, 0xbf, 0xfa, 0xba, 0x7a, + 0x65, 0xfa, 0x53, 0x85, 0x77, 0xa6, 0xae, 0x68, 0xfe, 0xbd, 0x00, 0x85, 0xc3, 0xc3, 0xad, 0x2d, + 0xee, 0x77, 0x7a, 0x8c, 0xfc, 0xd2, 0x02, 0x32, 0xfd, 0x52, 0x24, 0x1f, 0xa6, 0x27, 0xef, 0xec, + 0x07, 0xb3, 0xf3, 0xd1, 0x05, 0xa9, 0xf4, 0x08, 0xf1, 0x19, 0xac, 0xc8, 0xf1, 0x95, 0xbc, 0xbb, + 0xe0, 0xb3, 0xc3, 0xa9, 0xcd, 0x47, 0xd4, 0xbc, 0xdb, 0x90, 0x4f, 0x46, 0x40, 0xb2, 0x91, 0x2a, + 0xde, 0xd8, 0x84, 0xeb, 0xbc, 0xb7, 0x10, 0xae, 0xbe, 0xe4, 0xa7, 0x90, 0xd3, 0x93, 0x1d, 0xb9, + 0x3e, 0x87, 0x6e, 0x34, 0x63, 0x3a, 0x1b, 0x8b, 0xa0, 0x8e, 0xd4, 0x48, 0x26, 0xb8, 0x54, 0x35, + 0x26, 0xe6, 0xc3, 0x54, 0x35, 0xa6, 0x46, 0xc2, 0xc7, 0x90, 0xc5, 0x51, 0x8f, 0xa4, 0x95, 0x3c, + 0x63, 0x16, 0x74, 0xd2, 0xdc, 0x35, 0x36, 0x23, 0xfe, 0x04, 0x5b, 0x83, 0x7c, 0x2e, 0xa7, 0x37, + 0x05, 0xe3, 0x1b, 0x97, 0x73, 0x7d, 0x01, 0xcc, 0x11, 0x7b, 0xfd, 0xd4, 0xac, 0x2d, 0xf0, 0xa1, + 0x69, 0x3e, 0xfb, 0x89, 0x4f, 0x5a, 0x21, 0x94, 0xcc, 0x8e, 0x4f, 0xea, 0x29, 0xa4, 0x33, 0x86, + 0x25, 0xa7, 0xb1, 0x30, 0xbe, 0xbe, 0xf0, 0x4b, 0x7c, 0xb6, 0x8c, 0x4f, 0x03, 0xa4, 0x99, 0x6a, + 0x8e, 0x99, 0x73, 0x87, 0x73, 0xf3, 0x42, 0x34, 0xfa, 0x72, 0x4f, 0x4d, 0x1b, 0x7a, 0xa2, 0x20, + 0xe9, 0xcd, 0x73, 0x38, 0x95, 0x38, 0x0b, 0xe2, 0xd5, 0xac, 0x0f, 0x2c, 0x8c, 0x33, 0x9c, 0x32, + 0x53, 0x79, 0x1b, 0xe3, 0x77, 0x6a, 0x9c, 0x99, 0xe3, 0xea, 0x56, 0xe9, 0x9b, 0x17, 0x57, 0xad, + 0xbf, 0xbe, 0xb8, 0x6a, 0xfd, 0xf3, 0xc5, 0x55, 0xeb, 0x64, 0x55, 0xfe, 0x15, 0x76, 0xf3, 0xbf, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x78, 0x82, 0xaf, 0xf3, 0x5c, 0x1c, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3617,18 +3619,18 @@ func (m *InTotoSubject) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.RawName) > 0 { - i -= len(m.RawName) - copy(dAtA[i:], m.RawName) - i = encodeVarintGateway(dAtA, i, uint64(len(m.RawName))) + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintGateway(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0x1a } - if len(m.RawDigest) > 0 { - for iNdEx := len(m.RawDigest) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.RawDigest[iNdEx]) - copy(dAtA[i:], m.RawDigest[iNdEx]) - i = encodeVarintGateway(dAtA, i, uint64(len(m.RawDigest[iNdEx]))) + if len(m.Digest) > 0 { + for iNdEx := len(m.Digest) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Digest[iNdEx]) + copy(dAtA[i:], m.Digest[iNdEx]) + i = encodeVarintGateway(dAtA, i, uint64(len(m.Digest[iNdEx]))) i-- dAtA[i] = 0x12 } @@ -5555,13 +5557,13 @@ func (m *InTotoSubject) Size() (n int) { if m.Kind != 0 { n += 1 + sovGateway(uint64(m.Kind)) } - if len(m.RawDigest) > 0 { - for _, s := range m.RawDigest { + if len(m.Digest) > 0 { + for _, s := range m.Digest { l = len(s) n += 1 + l + sovGateway(uint64(l)) } } - l = len(m.RawName) + l = len(m.Name) if l > 0 { n += 1 + l + sovGateway(uint64(l)) } @@ -7405,7 +7407,7 @@ func (m *Attestation) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Kind |= Attestation_Kind(b&0x7F) << shift + m.Kind |= AttestationKind(b&0x7F) << shift if b < 0x80 { break } @@ -7605,14 +7607,14 @@ func (m *InTotoSubject) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Kind |= InTotoSubject_Kind(b&0x7F) << shift + m.Kind |= InTotoSubjectKind(b&0x7F) << shift if b < 0x80 { break } } case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RawDigest", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Digest", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7640,11 +7642,11 @@ func (m *InTotoSubject) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RawDigest = append(m.RawDigest, github_com_opencontainers_go_digest.Digest(dAtA[iNdEx:postIndex])) + m.Digest = append(m.Digest, github_com_opencontainers_go_digest.Digest(dAtA[iNdEx:postIndex])) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RawName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -7672,7 +7674,7 @@ func (m *InTotoSubject) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.RawName = string(dAtA[iNdEx:postIndex]) + m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/frontend/gateway/pb/gateway.proto b/frontend/gateway/pb/gateway.proto index d488921ecf97..314fa94c09ca 100644 --- a/frontend/gateway/pb/gateway.proto +++ b/frontend/gateway/pb/gateway.proto @@ -69,10 +69,7 @@ message Attestations { } message Attestation { - enum Kind { - InToto = 0; - } - Kind kind = 1; + AttestationKind kind = 1; string ref = 2; string path = 3; @@ -80,15 +77,22 @@ message Attestation { repeated InTotoSubject inTotoSubjects = 5; } +enum AttestationKind { + option (gogoproto.goproto_enum_prefix) = false; + InToto = 0 [(gogoproto.enumvalue_customname) = "AttestationKindInToto"]; +} + message InTotoSubject { - enum Kind { - Raw = 0; - Self = 1; - } - Kind kind = 1; + InTotoSubjectKind kind = 1; + + repeated string digest = 2 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; + string name = 3; +} - repeated string rawDigest = 2 [(gogoproto.customtype) = "github.com/opencontainers/go-digest.Digest", (gogoproto.nullable) = false]; - string rawName = 3; +enum InTotoSubjectKind { + option (gogoproto.goproto_enum_prefix) = false; + Self = 0 [(gogoproto.enumvalue_customname) = "InTotoSubjectKindSelf"]; + Raw = 1 [(gogoproto.enumvalue_customname) = "InTotoSubjectKindRaw"]; } message ReturnRequest { diff --git a/solver/result/attestation.go b/solver/result/attestation.go index d14d8161a83a..51ec1c0bf257 100644 --- a/solver/result/attestation.go +++ b/solver/result/attestation.go @@ -1,23 +1,12 @@ package result import ( + pb "github.com/moby/buildkit/frontend/gateway/pb" digest "github.com/opencontainers/go-digest" ) -type AttestationKind string -type InTotoSubjectKind string - -const ( - InToto AttestationKind = "in-toto" -) - -const ( - Self InTotoSubjectKind = "self" - Raw InTotoSubjectKind = "raw" -) - type Attestation struct { - Kind AttestationKind + Kind pb.AttestationKind Ref string Path string @@ -31,7 +20,7 @@ type InTotoAttestation struct { } type InTotoSubject struct { - Kind InTotoSubjectKind + Kind pb.InTotoSubjectKind Name string Digest []digest.Digest