1// SPDX-License-Identifier: AGPL-3.0-or-later
2
3package sigverify_test
4
5import (
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9
10 "bnema.dev/ermite/internal/adapters/sigverify"
11 "bnema.dev/ermite/internal/domain"
12)
13
14func TestVerifierDispatch(t *testing.T) {
15 const email = "dev@example.org"
16 priv, sshPub := sshKey(t, "ed25519")
17 sshC := sshCommit(t, priv, email)
18 g := newGPGHome(t)
19 fpr := g.generate("dispatch <"+email+">", "ed25519", "never")
20 gpgC := g.commit(fpr, email)
21 keys := []domain.TrustedKey{trustedSSH(sshPub, email), trustedGPG(g.public(fpr), email)}
22
23 tests := []struct {
24 name string
25 payload []byte
26 signature []byte
27 wantFormat domain.SignatureFormat
28 wantStatus domain.SignatureStatus
29 }{
30 {"ssh", sshC.payload, sshC.signature, domain.FormatSSH, domain.StatusVerified},
31 {"gpg", gpgC.payload, gpgC.signature, domain.FormatGPG, domain.StatusVerified},
32 {"ssh signature of another commit", append(sshC.payload[:len(sshC.payload):len(sshC.payload)], 0), sshC.signature, domain.FormatSSH, domain.StatusBadSignature},
33 {"x509", sshC.payload, []byte("-----BEGIN SIGNED MESSAGE-----\nMIIB\n-----END SIGNED MESSAGE-----\n"), domain.FormatX509, domain.StatusUnsupported},
34 {"unknown armor", sshC.payload, []byte("-----BEGIN SOMETHING-----\nAAAA\n-----END SOMETHING-----\n"), domain.FormatNone, domain.StatusBadSignature},
35 {"empty", sshC.payload, nil, domain.FormatNone, domain.StatusBadSignature},
36 }
37 for _, tt := range tests {
38 t.Run(tt.name, func(t *testing.T) {
39 v := sigverify.Verifier{}.Verify(tt.payload, tt.signature, email, sshC.signedAt, keys)
40 assert.Equal(t, tt.wantFormat, v.Format)
41 assert.Equal(t, tt.wantStatus, v.Status)
42 })
43 }
44}