Skip to content

Commit

Permalink
attestation: forward context to KDS getter
Browse files Browse the repository at this point in the history
  • Loading branch information
burgerdev committed Feb 28, 2025
1 parent 52a98e4 commit bd312cd
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 4 deletions.
2 changes: 1 addition & 1 deletion internal/attestation/certcache/cached_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ type CachedHTTPSGetter struct {
// NewCachedHTTPSGetter returns a new CachedHTTPSGetter.
func NewCachedHTTPSGetter(s store, ticker clock.Ticker, log *slog.Logger) *CachedHTTPSGetter {
c := &CachedHTTPSGetter{
HTTPSGetter: trust.DefaultHTTPSGetter(),
HTTPSGetter: &trust.SimpleHTTPSGetter{},
logger: log,
cache: s,
gcTicker: ticker,
Expand Down
33 changes: 30 additions & 3 deletions internal/attestation/snp/validator.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,12 @@ import (
"github.com/edgelesssys/contrast/internal/attestation/reportdata"
"github.com/edgelesssys/contrast/internal/constants"
"github.com/edgelesssys/contrast/internal/oid"
"github.com/edgelesssys/contrast/internal/retry"
"github.com/google/go-sev-guest/kds"
"github.com/google/go-sev-guest/proto/sevsnp"
"github.com/google/go-sev-guest/validate"
"github.com/google/go-sev-guest/verify"
"github.com/google/go-sev-guest/verify/trust"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/proto"
)
Expand Down Expand Up @@ -63,7 +65,7 @@ func (v *Validator) OID() asn1.ObjectIdentifier {
}

// Validate a SNP based attestation.
func (v *Validator) Validate(_ context.Context, attDocRaw []byte, nonce []byte, peerPublicKey []byte) (err error) {
func (v *Validator) Validate(ctx context.Context, attDocRaw []byte, nonce []byte, peerPublicKey []byte) (err error) {
v.logger.Info("Validate called", "name", v.name, "nonce", hex.EncodeToString(nonce))
defer func() {
if err != nil {
Expand Down Expand Up @@ -96,8 +98,9 @@ func (v *Validator) Validate(_ context.Context, attDocRaw []byte, nonce []byte,
}

// Report signature verification.
// TODO(burgerdev): equip HTTPSGetter with context.
if err := verify.SnpAttestation(attestationData, v.verifyOpts); err != nil {
verifyOpts := *v.verifyOpts
verifyOpts.Getter = wrapWithRetrier(ctx, verifyOpts.Getter)
if err := verify.SnpAttestation(attestationData, &verifyOpts); err != nil {
return fmt.Errorf("verifying report: %w", err)
}
v.logger.Info("Successfully verified report signature")
Expand Down Expand Up @@ -164,3 +167,27 @@ func addCRLtoVerifyOptions(attestationData *sevsnp.Attestation, verifyOpts *veri

return nil
}

type httpsGetterFunc func(url string) ([]byte, error)

func (f httpsGetterFunc) Get(url string) ([]byte, error) {
return f(url)
}

func wrapWithRetrier(ctx context.Context, getter trust.HTTPSGetter) trust.HTTPSGetter {
return httpsGetterFunc(func(url string) ([]byte, error) {
var body []byte
doer := retry.DoerFunc(func(_ context.Context) error {
b, err := getter.Get(url)
if err != nil {
return err
}
body = b
return nil
})
if err := retry.NewIntervalRetrier(doer, constants.KDSRetryInterval, retry.Always).Do(ctx); err != nil {
return nil, err
}
return body, nil
})
}
3 changes: 3 additions & 0 deletions internal/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,7 @@ const (
// attestation docs. It's deliberately smaller than ATLSClientTimeout to allow proper error
// propagation.
ATLSServerTimeout = ATLSClientTimeout - 5*time.Second

// KDSRetryInterval specifies the amount of time to wait before retrying a KDS query.
KDSRetryInterval = 2 * time.Second
)

0 comments on commit bd312cd

Please sign in to comment.