...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package layout
17
18 import (
19 v1 "github.com/google/go-containerregistry/pkg/v1"
20 "github.com/sigstore/cosign/v2/pkg/oci"
21 "github.com/sigstore/cosign/v2/pkg/oci/internal/signature"
22 )
23
24 const maxLayers = 1000
25
26 type sigs struct {
27 v1.Image
28 }
29
30 var _ oci.Signatures = (*sigs)(nil)
31
32
33 func (s *sigs) Get() ([]oci.Signature, error) {
34 manifest, err := s.Image.Manifest()
35 if err != nil {
36 return nil, err
37 }
38 numLayers := int64(len(manifest.Layers))
39 if numLayers > maxLayers {
40 return nil, oci.NewMaxLayersExceeded(numLayers, maxLayers)
41 }
42 signatures := make([]oci.Signature, 0, numLayers)
43 for _, desc := range manifest.Layers {
44 l, err := s.Image.LayerByDigest(desc.Digest)
45 if err != nil {
46 return nil, err
47 }
48 signatures = append(signatures, signature.New(l, desc))
49 }
50 return signatures, nil
51 }
52
View as plain text