Skip to content

Commit c71c010

Browse files
committed
Improve encrypt test coverage
1 parent 8b9d49e commit c71c010

File tree

2 files changed

+44
-9
lines changed

2 files changed

+44
-9
lines changed

keystore/encryptor_test.go

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestEncryptDecrypt(t *testing.T) {
2727
keyName := func(keyType keystore.KeyType, index int) string {
2828
return fmt.Sprintf("key-%s-%d", keyType, index)
2929
}
30-
for _, keyType := range keystore.AllEncryptionKeyTypes {
30+
for _, keyType := range keystore.AllKeyTypes {
3131
keys, err := ks.CreateKeys(ctx, keystore.CreateKeysRequest{
3232
Keys: []keystore.CreateKeyRequest{
3333
{KeyName: keyName(keyType, 0), KeyType: keyType},
@@ -45,18 +45,43 @@ func TestEncryptDecrypt(t *testing.T) {
4545
}{keyType: keys.Keys[1].KeyInfo.KeyType, publicKey: keys.Keys[1].KeyInfo.PublicKey}
4646
}
4747

48-
var tt = []struct {
48+
var tt []struct {
4949
name string
5050
fromKey string
5151
toKey string
5252
expectedError error
53-
}{
54-
{name: "Encrypt to self x25519", fromKey: keyName(keystore.X25519, 0), toKey: keyName(keystore.X25519, 0), expectedError: nil},
55-
{name: "Encrypt to other x25519", fromKey: keyName(keystore.X25519, 0), toKey: keyName(keystore.X25519, 1), expectedError: nil},
56-
{name: "Encrypt to self ecdh-p256", fromKey: keyName(keystore.ECDH_P256, 0), toKey: keyName(keystore.ECDH_P256, 0), expectedError: nil},
57-
{name: "Encrypt to other ecdh-p256", fromKey: keyName(keystore.ECDH_P256, 0), toKey: keyName(keystore.ECDH_P256, 1), expectedError: nil},
58-
{name: "Encrypt x25519 to ecdh-p256 should fail", fromKey: keyName(keystore.X25519, 0), toKey: keyName(keystore.ECDH_P256, 0), expectedError: keystore.ErrEncryptionFailed},
59-
{name: "Encrypt ecdh-p256 to x25519 should fail", fromKey: keyName(keystore.ECDH_P256, 0), toKey: keyName(keystore.X25519, 0), expectedError: keystore.ErrEncryptionFailed},
53+
}
54+
55+
for _, fromType := range keystore.AllKeyTypes {
56+
for _, toType := range keystore.AllKeyTypes {
57+
// Test both same key (index 0) and different key (index 1) scenarios
58+
for keyIndex := 0; keyIndex < 2; keyIndex++ {
59+
testName := fmt.Sprintf("Encrypt %s to %s (key %d)", fromType, toType, keyIndex)
60+
fromKey := keyName(fromType, 0) // Always use key 0 as source
61+
toKey := keyName(toType, keyIndex)
62+
63+
var expectedError error
64+
if fromType == toType && fromType.IsEncryptionKeyType() {
65+
// Same key types should succeed
66+
expectedError = nil
67+
} else {
68+
// Different key types or non-encryption key types should fail
69+
expectedError = keystore.ErrEncryptionFailed
70+
}
71+
72+
tt = append(tt, struct {
73+
name string
74+
fromKey string
75+
toKey string
76+
expectedError error
77+
}{
78+
name: testName,
79+
fromKey: fromKey,
80+
toKey: toKey,
81+
expectedError: expectedError,
82+
})
83+
}
84+
}
6085
}
6186
for _, tt := range tt {
6287
t.Run(tt.name, func(t *testing.T) {

keystore/keystore.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"sync"
1111
"time"
1212

13+
"slices"
14+
1315
"golang.org/x/crypto/curve25519"
1416

1517
gethkeystore "github.com/ethereum/go-ethereum/accounts/keystore"
@@ -26,6 +28,14 @@ func (k KeyType) String() string {
2628
return string(k)
2729
}
2830

31+
func (k KeyType) IsEncryptionKeyType() bool {
32+
return slices.Contains(AllEncryptionKeyTypes, k)
33+
}
34+
35+
func (k KeyType) IsDigitalSignatureKeyType() bool {
36+
return slices.Contains(AllDigitalSignatureKeyTypes, k)
37+
}
38+
2939
const (
3040
// Hybrid encryption (key exchange + encryption) key types.
3141
// Naming schema is generally <key exchange algorithm><encryption algorithm>.

0 commit comments

Comments
 (0)