diff --git a/coev/cbor.go b/coev/cbor.go index 64b07a21..7d07eed5 100644 --- a/coev/cbor.go +++ b/coev/cbor.go @@ -39,7 +39,7 @@ func coevTags() cbor.TagSet { func initCBOREncMode() (en cbor.EncMode, err error) { encOpt := cbor.EncOptions{ Sort: cbor.SortCoreDeterministic, - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.EncTagRequired, } return encOpt.EncModeWithTags(coevTags()) @@ -47,7 +47,7 @@ func initCBOREncMode() (en cbor.EncMode, err error) { func initCBORDecMode() (dm cbor.DecMode, err error) { decOpt := cbor.DecOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, } return decOpt.DecModeWithTags(coevTags()) } diff --git a/comid/cbor.go b/comid/cbor.go index 9f6313ea..330d8e15 100644 --- a/comid/cbor.go +++ b/comid/cbor.go @@ -59,7 +59,7 @@ func comidTags() cbor.TagSet { func initCBOREncMode() (en cbor.EncMode, err error) { encOpt := cbor.EncOptions{ Sort: cbor.SortCoreDeterministic, - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.EncTagRequired, } return encOpt.EncModeWithTags(comidTags()) @@ -67,7 +67,7 @@ func initCBOREncMode() (en cbor.EncMode, err error) { func initCBORDecMode() (dm cbor.DecMode, err error) { decOpt := cbor.DecOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, } return decOpt.DecModeWithTags(comidTags()) } diff --git a/comid/tdx/cbor.go b/comid/tdx/cbor.go index c850fbd5..cfbda766 100644 --- a/comid/tdx/cbor.go +++ b/comid/tdx/cbor.go @@ -41,7 +41,7 @@ func tdxTags() cbor.TagSet { func initCBOREncMode() (en cbor.EncMode, err error) { encOpt := cbor.EncOptions{ Sort: cbor.SortCoreDeterministic, - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.EncTagRequired, } return encOpt.EncModeWithTags(tdxTags()) @@ -49,7 +49,7 @@ func initCBOREncMode() (en cbor.EncMode, err error) { func initCBORDecMode() (dm cbor.DecMode, err error) { decOpt := cbor.DecOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, } return decOpt.DecModeWithTags(tdxTags()) } diff --git a/corim/cbor.go b/corim/cbor.go index c47166e2..0404bb89 100644 --- a/corim/cbor.go +++ b/corim/cbor.go @@ -45,7 +45,7 @@ func corimTags() cbor.TagSet { func initCBOREncMode() (en cbor.EncMode, err error) { encOpt := cbor.EncOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.EncTagRequired, } return encOpt.EncModeWithTags(corimTags()) @@ -53,7 +53,7 @@ func initCBOREncMode() (en cbor.EncMode, err error) { func initCBORDecMode() (dm cbor.DecMode, err error) { decOpt := cbor.DecOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.DecTagRequired, } return decOpt.DecModeWithTags(corimTags()) diff --git a/coserv/quads.go b/coserv/quads.go index e8af8096..731138ff 100644 --- a/coserv/quads.go +++ b/coserv/quads.go @@ -10,6 +10,13 @@ type RefValQuad struct { RVTriple *comid.ValueTriple `cbor:"2,keyasint"` } +// EndorsedValQuad represents an endorsed-values result quad as per CoSERV +// It mirrors RefValQuad but carries endorsed values instead of reference values +type EndorsedValQuad struct { + Authorities *[]comid.CryptoKey `cbor:"1,keyasint"` + EVTriple *comid.ValueTriple `cbor:"2,keyasint"` +} + type AKQuad struct { Authorities *[]comid.CryptoKey `cbor:"1,keyasint"` AKTriple *comid.KeyTriple `cbor:"2,keyasint"` diff --git a/coserv/resultset.go b/coserv/resultset.go index 87d9b711..68e216bd 100644 --- a/coserv/resultset.go +++ b/coserv/resultset.go @@ -11,9 +11,9 @@ import ( ) type ResultSet struct { - RVQ *[]RefValQuad `cbor:"0,keyasint,omitempty"` - AKQ *[]AKQuad `cbor:"3,keyasint,omitempty"` - // TODO(tho) add endorsed values + RVQ *[]RefValQuad `cbor:"0,keyasint,omitempty"` + EVQ *[]EndorsedValQuad `cbor:"1,keyasint,omitempty"` + AKQ *[]AKQuad `cbor:"3,keyasint,omitempty"` // TODO(tho) add CoTS Expiry *time.Time `cbor:"10,keyasint"` SourceArtifacts *[]cmw.CMW `cbor:"11,keyasint,omitempty"` @@ -35,6 +35,17 @@ func (o *ResultSet) AddReferenceValues(v RefValQuad) *ResultSet { return o } +// AddEndorsedValues adds the supplied endorsed-values quad to the target ResultSet +func (o *ResultSet) AddEndorsedValues(v EndorsedValQuad) *ResultSet { + if o.EVQ == nil { + o.EVQ = new([]EndorsedValQuad) + } + + *o.EVQ = append(*o.EVQ, v) + + return o +} + // AddAttestationKeys adds the supplied ak quad to the target ResultSet func (o *ResultSet) AddAttestationKeys(v AKQuad) *ResultSet { if o.AKQ == nil { @@ -68,6 +79,7 @@ func (o ResultSet) Valid() error { if o.Expiry == nil { return errors.New("missing mandatory expiry") } + // Nothing else to validate structurally here; combinations are checked at Coserv level // The coherency between query and results must be checked by the Coserv's // Valid() return nil diff --git a/cots/cbor.go b/cots/cbor.go index aa6f2af6..9f909b0e 100644 --- a/cots/cbor.go +++ b/cots/cbor.go @@ -42,7 +42,7 @@ func cotsTags() cbor.TagSet { func initCBOREncMode() (en cbor.EncMode, err error) { encOpt := cbor.EncOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.EncTagRequired, } return encOpt.EncModeWithTags(cotsTags()) @@ -50,7 +50,7 @@ func initCBOREncMode() (en cbor.EncMode, err error) { func initCBORDecMode() (dm cbor.DecMode, err error) { decOpt := cbor.DecOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.DecTagRequired, } return decOpt.DecModeWithTags(cotsTags()) diff --git a/extensions/cbor.go b/extensions/cbor.go index 03ef31ca..dbfecc78 100644 --- a/extensions/cbor.go +++ b/extensions/cbor.go @@ -15,7 +15,7 @@ var ( func initCBOREncMode() (en cbor.EncMode, err error) { encOpt := cbor.EncOptions{ Sort: cbor.SortCoreDeterministic, - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, TimeTag: cbor.EncTagRequired, } return encOpt.EncMode() @@ -23,7 +23,7 @@ func initCBOREncMode() (en cbor.EncMode, err error) { func initCBORDecMode() (dm cbor.DecMode, err error) { decOpt := cbor.DecOptions{ - IndefLength: cbor.IndefLengthForbidden, + IndefLength: cbor.IndefLengthAllowed, } return decOpt.DecMode() }