Skip to content

Commit e545a00

Browse files
committed
ed25519: Fix method receivers, add DSSE test
Signed-off-by: Aditya Sirish <[email protected]>
1 parent 6b0d6ed commit e545a00

File tree

2 files changed

+73
-23
lines changed

2 files changed

+73
-23
lines changed

signerverifier/ed25519.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ import (
88
"os"
99
)
1010

11-
const Ed25519KeyType = "ed25519"
11+
const ED25519KeyType = "ed25519"
1212

13-
type Ed25519SignerVerifier struct {
13+
type ED25519SignerVerifier struct {
1414
keyID string
1515
private ed25519.PrivateKey
1616
public ed25519.PublicKey
1717
}
1818

19-
// NewEd25519SignerVerifierFromSSLibKey creates an Ed25519SignerVerifier from an
19+
// NewED25519SignerVerifierFromSSLibKey creates an Ed25519SignerVerifier from an
2020
// SSLibKey.
21-
func NewEd25519SignerVerifierFromSSLibKey(key *SSLibKey) (*Ed25519SignerVerifier, error) {
21+
func NewED25519SignerVerifierFromSSLibKey(key *SSLibKey) (*ED25519SignerVerifier, error) {
2222
public, err := hex.DecodeString(key.KeyVal.Public)
2323
if err != nil {
2424
return nil, err
@@ -42,15 +42,15 @@ func NewEd25519SignerVerifierFromSSLibKey(key *SSLibKey) (*Ed25519SignerVerifier
4242
}
4343
}
4444

45-
return &Ed25519SignerVerifier{
45+
return &ED25519SignerVerifier{
4646
keyID: key.KeyID(),
4747
public: ed25519.PublicKey(public),
4848
private: ed25519.PrivateKey(private),
4949
}, nil
5050
}
5151

5252
// Sign creates a signature for `data`.
53-
func (sv *Ed25519SignerVerifier) Sign(ctx context.Context, data []byte) ([]byte, error) {
53+
func (sv *ED25519SignerVerifier) Sign(ctx context.Context, data []byte) ([]byte, error) {
5454
if len(sv.private) == 0 {
5555
return nil, ErrNotPrivateKey
5656
}
@@ -60,26 +60,26 @@ func (sv *Ed25519SignerVerifier) Sign(ctx context.Context, data []byte) ([]byte,
6060
}
6161

6262
// Verify verifies the `sig` value passed in against `data`.
63-
func (sv Ed25519SignerVerifier) Verify(ctx context.Context, data []byte, sig []byte) error {
63+
func (sv *ED25519SignerVerifier) Verify(ctx context.Context, data []byte, sig []byte) error {
6464
if ok := ed25519.Verify(sv.public, data, sig); ok {
6565
return nil
6666
}
6767
return ErrSignatureVerificationFailed
6868
}
6969

7070
// KeyID returns the identifier of the key used to create the
71-
// Ed25519SignerVerifier instance.
72-
func (sv Ed25519SignerVerifier) KeyID() (string, error) {
71+
// ED25519SignerVerifier instance.
72+
func (sv *ED25519SignerVerifier) KeyID() (string, error) {
7373
return sv.keyID, nil
7474
}
7575

7676
// Public returns the public portion of the key used to create the
77-
// Ed25519SignerVerifier instance.
78-
func (sv Ed25519SignerVerifier) Public() crypto.PublicKey {
77+
// ED25519SignerVerifier instance.
78+
func (sv *ED25519SignerVerifier) Public() crypto.PublicKey {
7979
return sv.public
8080
}
8181

82-
func LoadEd25519KeyFromFile(path string) (*SSLibKey, error) {
82+
func LoadED25519KeyFromFile(path string) (*SSLibKey, error) {
8383
contents, err := os.ReadFile(path)
8484
if err != nil {
8585
return nil, err

signerverifier/ed25519_test.go

Lines changed: 61 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ import (
77
"path/filepath"
88
"testing"
99

10+
"github.com/secure-systems-lab/go-securesystemslib/dsse"
1011
"github.com/stretchr/testify/assert"
1112
)
1213

13-
func TestNewEd25519SignerVerifierFromSSLibKey(t *testing.T) {
14-
key, err := LoadEd25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
14+
func TestNewED25519SignerVerifierFromSSLibKey(t *testing.T) {
15+
key, err := LoadED25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
1516
if err != nil {
1617
t.Error(err)
1718
}
1819

19-
sv, err := NewEd25519SignerVerifierFromSSLibKey(key)
20+
sv, err := NewED25519SignerVerifierFromSSLibKey(key)
2021
if err != nil {
2122
t.Error(err)
2223
}
@@ -29,13 +30,13 @@ func TestNewEd25519SignerVerifierFromSSLibKey(t *testing.T) {
2930
assert.Nil(t, sv.private)
3031
}
3132

32-
func TestEd25519SignerVerifierSign(t *testing.T) {
33-
key, err := LoadEd25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key"))
33+
func TestED25519SignerVerifierSign(t *testing.T) {
34+
key, err := LoadED25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key"))
3435
if err != nil {
3536
t.Fatal(err)
3637
}
3738

38-
sv, err := NewEd25519SignerVerifierFromSSLibKey(key)
39+
sv, err := NewED25519SignerVerifierFromSSLibKey(key)
3940
if err != nil {
4041
t.Error(err)
4142
}
@@ -50,12 +51,12 @@ func TestEd25519SignerVerifierSign(t *testing.T) {
5051
expectedSignature := []byte{0x80, 0x72, 0xb4, 0x31, 0xc5, 0xa3, 0x7e, 0xc, 0xf3, 0x91, 0x22, 0x3, 0x60, 0xbf, 0x92, 0xa4, 0x46, 0x31, 0x84, 0x83, 0xf1, 0x31, 0x3, 0xdc, 0xbc, 0x5, 0x6f, 0xab, 0x84, 0xe4, 0xdc, 0xe9, 0xf5, 0x1c, 0xa9, 0xb3, 0x95, 0xa5, 0xa0, 0x16, 0xd3, 0xaa, 0x4d, 0xe7, 0xde, 0xaf, 0xc2, 0x5e, 0x1e, 0x9a, 0x9d, 0xc8, 0xb2, 0x5c, 0x1c, 0x68, 0xf7, 0x28, 0xb4, 0x1, 0x4d, 0x9f, 0xc8, 0x4}
5152
assert.Equal(t, expectedSignature, signature)
5253

53-
key, err = LoadEd25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
54+
key, err = LoadED25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
5455
if err != nil {
5556
t.Fatal(err)
5657
}
5758

58-
sv, err = NewEd25519SignerVerifierFromSSLibKey(key)
59+
sv, err = NewED25519SignerVerifierFromSSLibKey(key)
5960
if err != nil {
6061
t.Error(err)
6162
}
@@ -64,13 +65,13 @@ func TestEd25519SignerVerifierSign(t *testing.T) {
6465
assert.ErrorIs(t, err, ErrNotPrivateKey)
6566
}
6667

67-
func TestEd25519SignerVerifierVerify(t *testing.T) {
68-
key, err := LoadEd25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
68+
func TestED25519SignerVerifierVerify(t *testing.T) {
69+
key, err := LoadED25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
6970
if err != nil {
7071
t.Fatal(err)
7172
}
7273

73-
sv, err := NewEd25519SignerVerifierFromSSLibKey(key)
74+
sv, err := NewED25519SignerVerifierFromSSLibKey(key)
7475
if err != nil {
7576
t.Error(err)
7677
}
@@ -92,3 +93,52 @@ func hexDecode(t *testing.T, data string) []byte {
9293
}
9394
return b
9495
}
96+
97+
func TestED25519SignerVerifierWithDSSEEnvelope(t *testing.T) {
98+
key, err := LoadED25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key"))
99+
if err != nil {
100+
t.Fatal(err)
101+
}
102+
103+
sv, err := NewED25519SignerVerifierFromSSLibKey(key)
104+
if err != nil {
105+
t.Fatal(err)
106+
}
107+
108+
payloadType := "application/vnd.dsse+json"
109+
payload := []byte("test message")
110+
111+
es, err := dsse.NewEnvelopeSigner(sv)
112+
if err != nil {
113+
t.Error(err)
114+
}
115+
116+
env, err := es.SignPayload(context.Background(), payloadType, payload)
117+
if err != nil {
118+
t.Error(err)
119+
}
120+
121+
assert.Equal(t, "52e3b8e73279d6ebdd62a5016e2725ff284f569665eb92ccb145d83817a02997", env.Signatures[0].KeyID)
122+
envPayload, err := env.DecodeB64Payload()
123+
assert.Equal(t, payload, envPayload)
124+
assert.Nil(t, err)
125+
126+
key, err = LoadED25519KeyFromFile(filepath.Join("test-data", "ed25519-test-key.pub"))
127+
if err != nil {
128+
t.Fatal(err)
129+
}
130+
131+
sv, err = NewED25519SignerVerifierFromSSLibKey(key)
132+
if err != nil {
133+
t.Fatal(err)
134+
}
135+
136+
ev, err := dsse.NewEnvelopeVerifier(sv)
137+
if err != nil {
138+
t.Error(err)
139+
}
140+
141+
acceptedKeys, err := ev.Verify(context.Background(), env)
142+
assert.Nil(t, err)
143+
assert.Equal(t, "52e3b8e73279d6ebdd62a5016e2725ff284f569665eb92ccb145d83817a02997", acceptedKeys[0].KeyID)
144+
}

0 commit comments

Comments
 (0)