Skip to content

Commit 9ce4cbd

Browse files
committed
Expore ASN utilities
1 parent a1fb546 commit 9ce4cbd

5 files changed

Lines changed: 19 additions & 21 deletions

File tree

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"testing"
55

66
"github.com/ethereum/go-ethereum/crypto"
7-
kmsinternal "github.com/smartcontractkit/chainlink-common/keystore/kms/internal"
7+
kms "github.com/smartcontractkit/chainlink-common/keystore/kms"
88
"github.com/stretchr/testify/require"
99
)
1010

@@ -18,11 +18,11 @@ func TestSEC1ToASN1PublicKey(t *testing.T) {
1818
require.Equal(t, byte(0x04), sec1PubKey[0])
1919

2020
// Convert to ASN.1
21-
asn1PubKey, err := kmsinternal.SEC1ToASN1PublicKey(sec1PubKey)
21+
asn1PubKey, err := kms.SEC1ToASN1PublicKey(sec1PubKey)
2222
require.NoError(t, err)
2323

2424
// Convert back to SEC1
25-
sec1PubKey2, err := kmsinternal.ASN1ToSEC1PublicKey(asn1PubKey)
25+
sec1PubKey2, err := kms.ASN1ToSEC1PublicKey(asn1PubKey)
2626
require.NoError(t, err)
2727
require.Len(t, sec1PubKey2, 65)
2828
require.Equal(t, byte(0x04), sec1PubKey2[0])
@@ -40,11 +40,11 @@ func TestASN1SignatureToSEC1Signature(t *testing.T) {
4040
sig, err := crypto.Sign(hash[:], privateKey)
4141
require.NoError(t, err)
4242

43-
asn1Sig, err := kmsinternal.SEC1ToASN1Sig(sig)
43+
asn1Sig, err := kms.SEC1ToASN1Sig(sig)
4444
require.NoError(t, err)
4545

4646
// We pass the expected SEC1 public key for verification.
47-
sec1Sig, err := kmsinternal.ASN1ToSEC1Sig(asn1Sig, sec1PubKey, hash[:])
47+
sec1Sig, err := kms.ASN1ToSEC1Sig(asn1Sig, sec1PubKey, hash[:])
4848
require.NoError(t, err)
4949
require.Len(t, sec1Sig, 65)
5050
require.Equal(t, sig, sec1Sig)
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/ethereum/go-ethereum/crypto"
1212
)
1313

14-
type MockKMSClient struct {
14+
type FakeKMSClient struct {
1515
keys []Key
1616
createdAt time.Time
1717
}
@@ -21,14 +21,14 @@ type Key struct {
2121
KeyID string
2222
}
2323

24-
func NewMockKMSClient(keys []Key) (*MockKMSClient, error) {
25-
return &MockKMSClient{
24+
func NewFakeKMSClient(keys []Key) (*FakeKMSClient, error) {
25+
return &FakeKMSClient{
2626
keys: keys,
2727
createdAt: time.Now(),
2828
}, nil
2929
}
3030

31-
func (m *MockKMSClient) GetPublicKey(input *kmslib.GetPublicKeyInput) (*kmslib.GetPublicKeyOutput, error) {
31+
func (m *FakeKMSClient) GetPublicKey(input *kmslib.GetPublicKeyInput) (*kmslib.GetPublicKeyOutput, error) {
3232
for _, key := range m.keys {
3333
if aws.StringValue(input.KeyId) == key.KeyID {
3434
asn1PubKey, err := SEC1ToASN1PublicKey(crypto.FromECDSAPub(&key.PrivateKey.PublicKey))
@@ -44,7 +44,7 @@ func (m *MockKMSClient) GetPublicKey(input *kmslib.GetPublicKeyInput) (*kmslib.G
4444
return nil, awserr.New(kmslib.ErrCodeNotFoundException, "key not found", errors.New("key not found"))
4545
}
4646

47-
func (m *MockKMSClient) Sign(input *kmslib.SignInput) (*kmslib.SignOutput, error) {
47+
func (m *FakeKMSClient) Sign(input *kmslib.SignInput) (*kmslib.SignOutput, error) {
4848
for _, key := range m.keys {
4949
if aws.StringValue(input.KeyId) == key.KeyID {
5050
sig, err := crypto.Sign(input.Message, key.PrivateKey)
@@ -65,7 +65,7 @@ func (m *MockKMSClient) Sign(input *kmslib.SignInput) (*kmslib.SignOutput, error
6565
}
6666

6767
// DescribeKey returns metadata about the key.
68-
func (m *MockKMSClient) DescribeKey(input *kmslib.DescribeKeyInput) (*kmslib.DescribeKeyOutput, error) {
68+
func (m *FakeKMSClient) DescribeKey(input *kmslib.DescribeKeyInput) (*kmslib.DescribeKeyOutput, error) {
6969
for _, key := range m.keys {
7070
if aws.StringValue(input.KeyId) == key.KeyID {
7171
return &kmslib.DescribeKeyOutput{
@@ -81,7 +81,7 @@ func (m *MockKMSClient) DescribeKey(input *kmslib.DescribeKeyInput) (*kmslib.Des
8181
}
8282

8383
// ListKeys returns a list of key IDs.
84-
func (m *MockKMSClient) ListKeys(_ *kmslib.ListKeysInput) (*kmslib.ListKeysOutput, error) {
84+
func (m *FakeKMSClient) ListKeys(_ *kmslib.ListKeysInput) (*kmslib.ListKeysOutput, error) {
8585
keys := make([]*kmslib.KeyListEntry, 0, len(m.keys))
8686
for _, key := range m.keys {
8787
keys = append(keys, &kmslib.KeyListEntry{

keystore/kms/keystore.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/aws/aws-sdk-go/aws"
99
kmslib "github.com/aws/aws-sdk-go/service/kms"
1010
"github.com/smartcontractkit/chainlink-common/keystore"
11-
kms "github.com/smartcontractkit/chainlink-common/keystore/kms/internal"
1211
)
1312

1413
type keystoreSignerReader struct {
@@ -77,7 +76,7 @@ func (k *keystoreSignerReader) GetKeys(ctx context.Context, req keystore.GetKeys
7776
var publicKeyBytes []byte
7877
switch keyType {
7978
case keystore.ECDSA_S256:
80-
publicKeyBytes, err = kms.ASN1ToSEC1PublicKey(key.PublicKey)
79+
publicKeyBytes, err = ASN1ToSEC1PublicKey(key.PublicKey)
8180
if err != nil {
8281
return keystore.GetKeysResponse{}, fmt.Errorf("failed to convert public key for key %s: %w", keyID, err)
8382
}
@@ -122,7 +121,7 @@ func (k *keystoreSignerReader) Sign(ctx context.Context, req keystore.SignReques
122121
if len(req.Data) != 32 {
123122
return keystore.SignResponse{}, fmt.Errorf("data must be 32 bytes for ECDSA_S256, got %d: %w", len(req.Data), keystore.ErrInvalidSignRequest)
124123
}
125-
pubKeyBytes, err := kms.ASN1ToSEC1PublicKey(key.PublicKey)
124+
pubKeyBytes, err := ASN1ToSEC1PublicKey(key.PublicKey)
126125
if err != nil {
127126
return keystore.SignResponse{}, fmt.Errorf("failed to convert public key for KeyId=%s: %w", req.KeyName, err)
128127
}
@@ -137,7 +136,7 @@ func (k *keystoreSignerReader) Sign(ctx context.Context, req keystore.SignReques
137136
if err != nil {
138137
return keystore.SignResponse{}, fmt.Errorf("failed to sign data: %w", err)
139138
}
140-
signature, err := kms.ASN1ToSEC1Sig(sig.Signature, pubKeyBytes, req.Data)
139+
signature, err := ASN1ToSEC1Sig(sig.Signature, pubKeyBytes, req.Data)
141140
if err != nil {
142141
return keystore.SignResponse{}, fmt.Errorf("failed to convert KMS signature to SEC1 signature: %w", err)
143142
}

keystore/kms/keystore_test.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"github.com/ethereum/go-ethereum/crypto"
77
"github.com/smartcontractkit/chainlink-common/keystore"
88
kms "github.com/smartcontractkit/chainlink-common/keystore/kms"
9-
kmsinternal "github.com/smartcontractkit/chainlink-common/keystore/kms/internal"
109
"github.com/stretchr/testify/require"
1110
)
1211

@@ -16,18 +15,18 @@ func TestKMSKeystore(t *testing.T) {
1615
require.NoError(t, err)
1716
key2, err := crypto.GenerateKey()
1817
require.NoError(t, err)
19-
mockClient, err := kmsinternal.NewMockKMSClient([]kmsinternal.Key{
18+
fakeClient, err := kms.NewFakeKMSClient([]kms.Key{
2019
{
21-
KeyID: keyID,
2220
PrivateKey: key,
21+
KeyID: keyID,
2322
},
2423
{
25-
KeyID: keyID2,
2624
PrivateKey: key2,
25+
KeyID: keyID2,
2726
},
2827
})
2928
require.NoError(t, err)
30-
ks, err := kms.NewKeystore(mockClient)
29+
ks, err := kms.NewKeystore(fakeClient)
3130
require.NoError(t, err)
3231
ctx := t.Context()
3332

0 commit comments

Comments
 (0)