Skip to content

Commit b67f14e

Browse files
Some bits of business logic
Signed-off-by: Yogesh Deshpande <[email protected]>
1 parent a2e3e2b commit b67f14e

File tree

3 files changed

+96
-21
lines changed

3 files changed

+96
-21
lines changed

vts/compositeevidenceparser/icompositeevidenceparser.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,23 @@ type ComponentEvidence struct {
1919
parentLabel string // label of the parent component evidence (empty for root)
2020
depth uint // depth in the component evidence tree (0 for root)
2121
}
22+
23+
func (e ComponentEvidence) GetMediaType() string {
24+
return e.mediaType
25+
}
26+
27+
func (e ComponentEvidence) GetLabel() string {
28+
return e.label
29+
}
30+
31+
func (e ComponentEvidence) GetevidenceData() []byte {
32+
return e.data
33+
}
34+
35+
func (e ComponentEvidence) GetParentLabel() string {
36+
return e.parentLabel
37+
}
38+
39+
func (e ComponentEvidence) GetDepth() uint {
40+
return e.depth
41+
}

vts/trustedservices/dispatcher.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"encoding/json"
77
"fmt"
88
"os"
9+
10+
"github.com/veraison/services/handler"
911
)
1012

1113
type clientDetails struct {
@@ -32,3 +34,8 @@ func LoadDispatchTable(fp string) error {
3234
}
3335
return nil
3436
}
37+
38+
func GetComponentVerifierFromMediaType(mt string) (handler.IComponentVerifierClientHandler, error) {
39+
40+
return nil, nil
41+
}

vts/trustedservices/trustedservices_grpc.go

Lines changed: 69 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/veraison/services/plugin"
3232
"github.com/veraison/services/proto"
3333
"github.com/veraison/services/vts/appraisal"
34+
"github.com/veraison/services/vts/compositeevidenceparser"
3435
"github.com/veraison/services/vts/coservsigner"
3536
"github.com/veraison/services/vts/earsigner"
3637
"github.com/veraison/services/vts/policymanager"
@@ -412,27 +413,68 @@ func (o *GRPC) GetCompositeAttestation(
412413
o.logger.Infow("get composite attestation", "media-type", token.MediaType,
413414
"tenant-id", token.TenantId)
414415

415-
// TODO(tho)
416-
//
417-
// lead_verifier(CE, ce-type, n) -> CAR {
418-
// // lookup CE parser
419-
// parser = ce_parsers_table[ce-type]
420-
//
421-
// // tokenise the composite evidence
422-
// {CE_i, ce_i-type, label_i} = parser(CE)
423-
//
424-
// // walk the items in the composite evidence
425-
// foreach c, t, l in {CE_i, ce_i-type, label_i}:
426-
// client = dispatch_table[ce_i-type]
427-
// if !client:
428-
// EAR[label_i] = { raw-evidence: c, status: unknown }
429-
// else:
430-
// EAR[label_i] = client(c, n)
431-
//
432-
// CAR = make_car(EAR, lead_verifier_signing_key)
433-
//
434-
// return CAR
435-
// }
416+
/****************/
417+
// For Master Plugin at the start to track the context
418+
handler, err := o.EvPluginManager.LookupByMediaType(token.MediaType)
419+
if err != nil {
420+
appraisal := appraisal.New(token.TenantId, token.Nonce, "ERROR")
421+
appraisal.SetAllClaims(ear.UnexpectedEvidenceClaim)
422+
appraisal.AddPolicyClaim("problem", "could not resolve media type")
423+
return o.finalize(appraisal, err)
424+
}
425+
426+
scheme := handler.GetAttestationScheme()
427+
stHandler, err := o.StorePluginManager.LookupByAttestationScheme(scheme)
428+
if err != nil {
429+
appraisal := appraisal.New(token.TenantId, token.Nonce, "ERROR")
430+
appraisal.SetAllClaims(ear.UnexpectedEvidenceClaim)
431+
appraisal.AddPolicyClaim("problem", "could not resolve scheme name")
432+
return o.finalize(appraisal, err)
433+
}
434+
435+
masterAppraisal, err := o.initEvidenceContext(stHandler, token)
436+
if err != nil {
437+
return o.finalize(masterAppraisal, err)
438+
}
439+
440+
/******************/
441+
p, err := compositeevidenceparser.GetCEParserFromMediaType(token.MediaType)
442+
if err != nil {
443+
return nil, fmt.Errorf("unable to fecth parser from received MediaType: %s, %w", token.MediaType, err)
444+
}
445+
446+
evs, err := p.Parse(token.Data)
447+
if err != nil {
448+
return nil, fmt.Errorf("unable to parse Composite Evidence for the MediaType: %s, %w", token.MediaType, err)
449+
}
450+
451+
for i, ev := range evs {
452+
var clientCfg []byte
453+
mt := ev.GetMediaType()
454+
client, err := o.LeadVerifierPluginManager.LookupByMediaType(mt)
455+
if err != nil {
456+
return nil, fmt.Errorf("unable to get component verifier client for component evidence at index: %d, media type: %s, %w", i, mt, err)
457+
}
458+
459+
// TO DO Check if this is ear.Appraisal or ear.AttestationResults
460+
ar, err := client.AppraiseComponentEvidence(ev.GetevidenceData(), mt, token.Nonce, clientCfg)
461+
462+
if err != nil {
463+
appraisal := appraisal.New(token.TenantId, token.Nonce, "ERROR")
464+
appraisal.SetAllClaims(ear.UnexpectedEvidenceClaim)
465+
appraisal.AddPolicyClaim("problem", "could not appraise component evidence")
466+
aggregatePartialAttestationResults(masterAppraisal.Result, appraisal.Result)
467+
return o.finalize(appraisal, err)
468+
}
469+
var compAR *ear.AttestationResult = &ear.AttestationResult{}
470+
if err := compAR.UnmarshalJSON(ar); err != nil {
471+
// finalise appraisal
472+
}
473+
masterAppraisal.Result, err = aggregatePartialAttestationResults(masterAppraisal.Result, compAR)
474+
if err != nil {
475+
//finalise appraisal
476+
}
477+
}
436478

437479
return nil, errors.New("not implemented")
438480
}
@@ -947,3 +989,9 @@ func SerializeCertPEMBytes(certPEMs [][]byte) ([]byte, error) {
947989

948990
return allPEM.Bytes(), nil
949991
}
992+
993+
// TO DO THis Function should be in EAR Library
994+
func aggregatePartialAttestationResults(overall *ear.AttestationResult, apprInput *ear.AttestationResult) (appraisal *ear.AttestationResult, err error) {
995+
996+
return nil, nil
997+
}

0 commit comments

Comments
 (0)