Documentation
¶
Overview ¶
attest.go
Index ¶
- Variables
- func AttestVSA(ctx context.Context, attestor PredicateAttestor) (string, error)
- func GenerateAndWriteVSA[T any](ctx context.Context, generator PredicateGenerator[T], ...) (string, error)
- func IsVSAExpired(vsaTimestamp time.Time, expirationThreshold time.Duration) bool
- func UploadVSAEnvelope(ctx context.Context, envelopePath string, storageConfigs []string, ...) error
- type Attestor
- type FilteredReport
- type Generator
- type LocalBackend
- type Predicate
- type PredicateAttestor
- type PredicateGenerator
- type PredicateWriter
- type RekorBackend
- type RekorClient
- type RekorVSARetriever
- type RetrievalOptions
- type Service
- func (s *Service) ProcessAllVSAs(ctx context.Context, report applicationsnapshot.Report, ...) (*VSAProcessingResult, error)
- func (s *Service) ProcessComponentVSA(ctx context.Context, report applicationsnapshot.Report, ...) (string, error)
- func (s *Service) ProcessSnapshotVSA(ctx context.Context, report applicationsnapshot.Report) (string, error)
- type Signer
- type SignerAwareUploader
- type StorageBackend
- type StorageConfig
- type VSAChecker
- type VSALookupResult
- type VSAProcessingResult
- type VSARetriever
- type Writer
Constants ¶
This section is empty.
Variables ¶
var LoadPrivateKey = cosign.LoadPrivateKey
LoadPrivateKey is aliased to allow easy testing.
Functions ¶
func AttestVSA ¶ added in v0.7.108
func AttestVSA(ctx context.Context, attestor PredicateAttestor) (string, error)
AttestVSA handles VSA attestation and envelope writing for the target component.
func GenerateAndWriteVSA ¶ added in v0.7.108
func GenerateAndWriteVSA[T any](ctx context.Context, generator PredicateGenerator[T], writer PredicateWriter[T]) (string, error)
GenerateAndWriteVSA generates a VSA predicate and writes it to a file, returning the written path.
func IsVSAExpired ¶ added in v0.8.18
IsVSAExpired checks if a VSA is expired based on the timestamp and threshold
Types ¶
type Attestor ¶ added in v0.7.108
type Attestor struct {
PredicatePath string // path to the raw VSA (predicate) JSON
PredicateType string // e.g. "https://enterprisecontract.dev/attestations/vsa/v1" // TODO: make this configurable
Digest string // sha256:abcd… (as returned by `skopeo inspect --format {{.Digest}}`)
Repo string // "quay.io/acme/widget" (hostname/namespace/repo)
Signer *Signer // Signer is the signer used to sign the VSA
}
func NewAttestor ¶ added in v0.7.108
Add a constructor with sensible defaults
func (Attestor) AttestPredicate ¶ added in v0.7.108
AttestPredicate builds an in‑toto Statement around the predicate and returns the fully‑signed **DSSE envelope** (identical to cosign's --no-upload output). Nothing is pushed to a registry or the TLog.
func (Attestor) TargetDigest ¶ added in v0.7.117
type FilteredReport ¶ added in v0.7.136
type FilteredReport struct {
Snapshot string `json:"snapshot"`
Components []applicationsnapshot.Component `json:"components"`
Key string `json:"key"`
Policy ecc.EnterpriseContractPolicySpec `json:"policy"`
EcVersion string `json:"ec-version"`
EffectiveTime time.Time `json:"effective-time"`
}
FilteredReport represents a filtered version of the application snapshot report that contains the target component and its architecture variants if it's a manifest.
func FilterReportForTargetRef ¶ added in v0.8.9
func FilterReportForTargetRef(report applicationsnapshot.Report, targetRef string) *FilteredReport
FilterReportForTargetRef filters the report based on the target image reference. If the target is an image index (manifest), it includes the index and all its child manifests. If the target is a single-arch image, it includes only that image.
Parameters:
- report: The complete application snapshot report
- targetRef: The container image reference to filter for
Returns:
- A FilteredReport containing the target and its children if it's a manifest
type Generator ¶
type Generator struct {
Report applicationsnapshot.Report
Component applicationsnapshot.Component
}
Generator handles VSA predicate generation
func NewGenerator ¶
func NewGenerator(report applicationsnapshot.Report, comp applicationsnapshot.Component) *Generator
NewGenerator creates a new VSA predicate generator
type LocalBackend ¶ added in v0.7.148
type LocalBackend struct {
// contains filtered or unexported fields
}
LocalBackend implements VSA storage to local filesystem
func (*LocalBackend) Name ¶ added in v0.7.148
func (l *LocalBackend) Name() string
Name returns the backend name
type Predicate ¶
type Predicate struct {
ImageRef string `json:"imageRef"`
Timestamp string `json:"timestamp"`
Verifier string `json:"verifier"`
PolicySource string `json:"policySource"`
Component map[string]interface{} `json:"component"`
Results *FilteredReport `json:"results,omitempty"` // Filtered report containing the target and its children if it's a manifest
}
Predicate represents a Verification Summary Attestation (VSA) predicate.
type PredicateAttestor ¶ added in v0.7.108
type PredicateAttestor interface {
AttestPredicate(ctx context.Context) ([]byte, error)
WriteEnvelope(data []byte) (string, error)
TargetDigest() string
}
PredicateAttestor interface for attesting VSA predicates and writing envelopes
type PredicateGenerator ¶ added in v0.7.108
PredicateGenerator interface for generating VSA predicates
type PredicateWriter ¶ added in v0.7.108
PredicateWriter interface for writing VSA predicates to files
type RekorBackend ¶ added in v0.7.148
type RekorBackend struct {
// contains filtered or unexported fields
}
RekorBackend implements VSA storage in Rekor transparency log using single in-toto 0.0.2 entries
func (*RekorBackend) Name ¶ added in v0.7.148
func (r *RekorBackend) Name() string
Name returns the backend name
func (*RekorBackend) Upload ¶ added in v0.7.148
func (r *RekorBackend) Upload(ctx context.Context, envelopeContent []byte) error
Upload is not supported for Rekor backend - use UploadWithSigner instead
func (*RekorBackend) UploadWithSigner ¶ added in v0.7.148
func (r *RekorBackend) UploadWithSigner(ctx context.Context, envelopeContent []byte, signer *Signer) (string, error)
UploadWithSigner uploads a VSA envelope to the Rekor transparency log with access to the signer for public key extraction
type RekorClient ¶ added in v0.7.134
type RekorClient interface {
SearchIndex(ctx context.Context, query *models.SearchIndex) ([]models.LogEntryAnon, error)
SearchLogQuery(ctx context.Context, query *models.SearchLogQuery) ([]models.LogEntryAnon, error)
GetLogEntryByIndex(ctx context.Context, index int64) (*models.LogEntryAnon, error)
GetLogEntryByUUID(ctx context.Context, uuid string) (*models.LogEntryAnon, error)
}
RekorClient defines the interface for Rekor client operations This allows for easy mocking in tests
type RekorVSARetriever ¶ added in v0.7.134
type RekorVSARetriever struct {
// contains filtered or unexported fields
}
RekorVSARetriever implements VSARetriever using Rekor API
func NewRekorVSARetriever ¶ added in v0.7.134
func NewRekorVSARetriever(opts RetrievalOptions) (*RekorVSARetriever, error)
NewRekorVSARetriever creates a new Rekor-based VSA retriever
func NewRekorVSARetrieverWithClient ¶ added in v0.7.134
func NewRekorVSARetrieverWithClient(client RekorClient, opts RetrievalOptions) *RekorVSARetriever
NewRekorVSARetrieverWithClient creates a new Rekor-based VSA retriever with a custom client This is primarily for testing purposes
func (*RekorVSARetriever) RetrieveVSA ¶ added in v0.7.134
func (r *RekorVSARetriever) RetrieveVSA(ctx context.Context, imageDigest string) (*ssldsse.Envelope, error)
RetrieveVSA retrieves the latest VSA data as a DSSE envelope for a given image digest This is the main method used by validation functions to get VSA data for signature verification
type RetrievalOptions ¶ added in v0.7.134
RetrievalOptions configures VSA retrieval behavior
func DefaultRetrievalOptions ¶ added in v0.7.134
func DefaultRetrievalOptions() RetrievalOptions
DefaultRetrievalOptions returns default options for VSA retrieval
type Service ¶ added in v0.7.117
type Service struct {
// contains filtered or unexported fields
}
Service encapsulates all VSA processing logic for both components and snapshots
func NewServiceWithFS ¶ added in v0.7.117
NewServiceWithFS creates a new VSA service with the given signer and filesystem
func (*Service) ProcessAllVSAs ¶ added in v0.7.117
func (s *Service) ProcessAllVSAs(ctx context.Context, report applicationsnapshot.Report, getGitURL func(applicationsnapshot.Component) string, getDigest func(applicationsnapshot.Component) (string, error)) (*VSAProcessingResult, error)
ProcessAllVSAs processes VSAs for all components and the snapshot, returning envelope paths
func (*Service) ProcessComponentVSA ¶ added in v0.7.117
func (s *Service) ProcessComponentVSA(ctx context.Context, report applicationsnapshot.Report, comp applicationsnapshot.Component, gitURL, digest string) (string, error)
ProcessComponentVSA processes VSA generation, writing, and attestation for a single component
func (*Service) ProcessSnapshotVSA ¶ added in v0.7.117
func (s *Service) ProcessSnapshotVSA(ctx context.Context, report applicationsnapshot.Report) (string, error)
ProcessSnapshotVSA processes VSA generation, writing, and attestation for the application snapshot
type Signer ¶
type SignerAwareUploader ¶ added in v0.7.148
type SignerAwareUploader interface {
StorageBackend
UploadWithSigner(ctx context.Context, envelopeContent []byte, signer *Signer) (string, error)
}
SignerAwareUploader extends StorageBackend for backends that need access to the signer (e.g., Rekor backend needs the public key for transparency log upload)
type StorageBackend ¶ added in v0.7.148
type StorageBackend interface {
Name() string
Upload(ctx context.Context, envelopeContent []byte) error
}
StorageBackend defines the interface for VSA storage implementations
func CreateStorageBackend ¶ added in v0.7.148
func CreateStorageBackend(config *StorageConfig) (StorageBackend, error)
CreateStorageBackend creates the appropriate storage backend based on config
func NewLocalBackend ¶ added in v0.7.148
func NewLocalBackend(config *StorageConfig) (StorageBackend, error)
NewLocalBackend creates a new local file storage backend
func NewRekorBackend ¶ added in v0.7.148
func NewRekorBackend(config *StorageConfig) (StorageBackend, error)
NewRekorBackend creates a new Rekor storage backend
type StorageConfig ¶ added in v0.7.148
type StorageConfig struct {
Backend string // rekor, local (maybe others in future)
BaseURL string // Primary URL
Parameters map[string]string // Additional parameters
}
StorageConfig represents parsed storage configuration
func ParseStorageFlag ¶ added in v0.7.148
func ParseStorageFlag(storageFlag string) (*StorageConfig, error)
ParseStorageFlag parses the --vsa-upload flag format Supported formats:
- rekor@https://rekor.sigstore.dev
- local@/path/to/directory
- rekor?server=custom.rekor.com&timeout=30s
type VSAChecker ¶ added in v0.8.18
type VSAChecker struct {
// contains filtered or unexported fields
}
VSAChecker handles checking for existing VSAs using any VSARetriever
func CreateVSACheckerFromUploadFlags ¶ added in v0.8.18
func CreateVSACheckerFromUploadFlags(vsaUpload []string) *VSAChecker
CreateVSACheckerFromUploadFlags creates a VSA checker based on available upload flags Returns nil if no suitable retriever can be created
func NewVSAChecker ¶ added in v0.8.18
func NewVSAChecker(retriever VSARetriever) *VSAChecker
NewVSAChecker creates a new VSA checker with a VSARetriever
func (*VSAChecker) CheckExistingVSA ¶ added in v0.8.18
func (c *VSAChecker) CheckExistingVSA(ctx context.Context, imageRef string, expirationThreshold time.Duration) (*VSALookupResult, error)
CheckExistingVSA looks up existing VSAs for an image and determines if they're valid/expired
func (*VSAChecker) IsValidVSA ¶ added in v0.8.18
func (c *VSAChecker) IsValidVSA(ctx context.Context, imageRef string, expirationThreshold time.Duration) (bool, error)
IsValidVSA checks if a VSA exists and is not expired for the given image Returns true if validation should be skipped, false if validation should proceed
type VSALookupResult ¶ added in v0.8.18
VSALookupResult represents the result of looking up an existing VSA
type VSAProcessingResult ¶ added in v0.7.148
type VSAProcessingResult struct {
ComponentEnvelopes map[string]string // imageRef -> envelopePath
SnapshotEnvelope string
}
VSAProcessingResult contains the results of VSA processing
type VSARetriever ¶ added in v0.7.134
type VSARetriever interface {
// RetrieveVSA retrieves VSA data as a DSSE envelope for a given image digest
// This is the main method used by validation functions to get VSA data for signature verification
RetrieveVSA(ctx context.Context, imageDigest string) (*ssldsse.Envelope, error)
}
VSARetriever defines the interface for retrieving VSA records from various sources
func CreateRetrieverFromUploadFlags ¶ added in v0.8.18
func CreateRetrieverFromUploadFlags(vsaUpload []string) VSARetriever
CreateRetrieverFromUploadFlags creates a VSA retriever based on upload flags Currently supports Rekor, but can be extended for other retrievers