Skip to content

Commit 080b886

Browse files
feat(challengeresponse): add StaticEvidenceBuilder
StaticEvidenceBuilder is a simple EvidenceBuilder that always returns the same static evidence and media type. This is can be used when the evidence is already available and does not need to be dynamically generated (RP mode) or for testing purposes. Signed-off-by: Thomas Fossati <[email protected]>
1 parent cdaf170 commit 080b886

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

verification/challengeresponse_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,3 +934,21 @@ func TestChallengeResponseConfig_setters(t *testing.T) {
934934
cfg.SetCerts(testCertPaths)
935935
assert.EqualValues(t, testCertPaths, cfg.CACerts)
936936
}
937+
938+
func TestStaticEvidenceBuilder_BuildEvidence_ok(t *testing.T) {
939+
seb := NewStaticEvidenceBuilder(testEvidence, "application/my-evidence-media-type")
940+
941+
ev, mt, err := seb.BuildEvidence(testNonce, []string{"application/my-evidence-media-type", "application/other-media-type"})
942+
943+
assert.NoError(t, err)
944+
assert.Equal(t, testEvidence, ev)
945+
assert.Equal(t, "application/my-evidence-media-type", mt)
946+
}
947+
948+
func TestStaticEvidenceBuilder_BuildEvidence_fail_media_type_not_accepted(t *testing.T) {
949+
seb := NewStaticEvidenceBuilder(testEvidence, "application/my-evidence-media-type")
950+
951+
_, _, err := seb.BuildEvidence(testNonce, []string{"application/other-media-type"})
952+
953+
assert.ErrorContains(t, err, "no match for application/my-evidence-media-type")
954+
}

verification/evidencebuilder.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,42 @@
33

44
package verification
55

6+
import "fmt"
7+
68
// EvidenceBuilder is the interface between the challenge-response protocol FSM
79
// and the user. The user is given a nonce and the list of acceptable Evidence
810
// formats and is asked to return the serialized Evidence as a byte array
911
// together with its media type - or an error if anything goes wrong.
1012
type EvidenceBuilder interface {
1113
BuildEvidence(nonce []byte, accept []string) (evidence []byte, mediaType string, err error)
1214
}
15+
16+
// StaticEvidenceBuilder is a simple EvidenceBuilder that always returns the
17+
// same static evidence and media type.
18+
// This is can be used when the evidence is already available and does not
19+
// need to be dynamically generated (RP mode) or for testing purposes.
20+
type StaticEvidenceBuilder struct {
21+
evidence []byte
22+
mediaType string
23+
}
24+
25+
// BuildEvidence returns the static evidence if the media type is in the list of
26+
// accepted media types; otherwise, it returns an error.
27+
// Note that the nonce parameter is ignored.
28+
func (s StaticEvidenceBuilder) BuildEvidence(_ []byte, accept []string) ([]byte, string, error) { // nolint: gocritic
29+
for _, ct := range accept {
30+
if ct == s.mediaType {
31+
return s.evidence, s.mediaType, nil
32+
}
33+
}
34+
return nil, "", fmt.Errorf("no match for %s on accepted media types %v", s.mediaType, accept)
35+
}
36+
37+
// NewStaticEvidenceBuilder creates a new StaticEvidenceBuilder with the
38+
// specified evidence and media type.
39+
func NewStaticEvidenceBuilder(evidence []byte, mediaType string) EvidenceBuilder {
40+
return &StaticEvidenceBuilder{
41+
evidence: evidence,
42+
mediaType: mediaType,
43+
}
44+
}

0 commit comments

Comments
 (0)