Skip to content

Commit 86f198a

Browse files
committed
Wip ed25519
1 parent b601921 commit 86f198a

7 files changed

Lines changed: 196 additions & 79 deletions

File tree

keystore/cli/cli.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import (
1111
"strings"
1212
"time"
1313

14-
"github.com/aws/aws-sdk-go/aws/session"
15-
1614
"github.com/jmoiron/sqlx"
1715
_ "github.com/lib/pq" // Register postgres driver
1816
"github.com/spf13/cobra"
@@ -396,9 +394,8 @@ func loadKeystoreSignerReader(ctx context.Context, cmd *cobra.Command) (interfac
396394
// Check if KMS mode is enabled
397395
kmsProfile := os.Getenv("KEYSTORE_KMS_PROFILE")
398396
if kmsProfile != "" {
399-
client, err := kms.NewClient(session.Options{
400-
SharedConfigState: session.SharedConfigEnable,
401-
Profile: kmsProfile,
397+
client, err := kms.NewClient(ctx, kms.ClientOptions{
398+
Profile: kmsProfile,
402399
})
403400
if err != nil {
404401
return nil, fmt.Errorf("create KMS client: %w", err)

keystore/go.mod

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ module github.com/smartcontractkit/chainlink-common/keystore
33
go 1.25.3
44

55
require (
6-
github.com/aws/aws-sdk-go v1.55.5
6+
github.com/aws/aws-sdk-go-v2 v1.41.1
7+
github.com/aws/aws-sdk-go-v2/config v1.28.4
8+
github.com/aws/aws-sdk-go-v2/service/kms v1.49.5
79
github.com/ethereum/go-ethereum v1.16.2
810
github.com/jmoiron/sqlx v1.4.0
911
github.com/lib/pq v1.10.9
@@ -18,6 +20,17 @@ require (
1820
require (
1921
github.com/XSAM/otelsql v0.37.0 // indirect
2022
github.com/apache/arrow-go/v18 v18.3.1 // indirect
23+
github.com/aws/aws-sdk-go-v2/credentials v1.17.45 // indirect
24+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 // indirect
25+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 // indirect
26+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 // indirect
27+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
28+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 // indirect
29+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 // indirect
30+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.5 // indirect
31+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4 // indirect
32+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.0 // indirect
33+
github.com/aws/smithy-go v1.24.0 // indirect
2134
github.com/bahlo/generic-list-go v0.2.0 // indirect
2235
github.com/beorn7/perks v1.0.1 // indirect
2336
github.com/bits-and-blooms/bitset v1.20.0 // indirect
@@ -59,7 +72,6 @@ require (
5972
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
6073
github.com/jackc/pgtype v1.14.4 // indirect
6174
github.com/jackc/pgx/v4 v4.18.3 // indirect
62-
github.com/jmespath/go-jmespath v0.4.0 // indirect
6375
github.com/json-iterator/go v1.1.12 // indirect
6476
github.com/klauspost/compress v1.18.0 // indirect
6577
github.com/klauspost/cpuid/v2 v2.2.10 // indirect

keystore/go.sum

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,34 @@ github.com/apache/arrow-go/v18 v18.3.1 h1:oYZT8FqONiK74JhlH3WKVv+2NKYoyZ7C2ioD4D
1414
github.com/apache/arrow-go/v18 v18.3.1/go.mod h1:12QBya5JZT6PnBihi5NJTzbACrDGXYkrgjujz3MRQXU=
1515
github.com/apache/thrift v0.21.0 h1:tdPmh/ptjE1IJnhbhrcl2++TauVjy242rkV/UzJChnE=
1616
github.com/apache/thrift v0.21.0/go.mod h1:W1H8aR/QRtYNvrPeFXBtobyRkd0/YVhTc6i07XIAgDw=
17-
github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU=
18-
github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU=
17+
github.com/aws/aws-sdk-go-v2 v1.41.1 h1:ABlyEARCDLN034NhxlRUSZr4l71mh+T5KAeGh6cerhU=
18+
github.com/aws/aws-sdk-go-v2 v1.41.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0=
19+
github.com/aws/aws-sdk-go-v2/config v1.28.4 h1:qgD0MKmkIzZR2DrAjWJcI9UkndjR+8f6sjUQvXh0mb0=
20+
github.com/aws/aws-sdk-go-v2/config v1.28.4/go.mod h1:LgnWnNzHZw4MLplSyEGia0WgJ/kCGD86zGCjvNpehJs=
21+
github.com/aws/aws-sdk-go-v2/credentials v1.17.45 h1:DUgm5lFso57E7150RBgu1JpVQoF8fAPretiDStIuVjg=
22+
github.com/aws/aws-sdk-go-v2/credentials v1.17.45/go.mod h1:dnBpENcPC1ekZrGpSWspX+ZRGzhkvqngT2Qp5xBR1dY=
23+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19 h1:woXadbf0c7enQ2UGCi8gW/WuKmE0xIzxBF/eD94jMKQ=
24+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.19/go.mod h1:zminj5ucw7w0r65bP6nhyOd3xL6veAUMc3ElGMoLVb4=
25+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17 h1:xOLELNKGp2vsiteLsvLPwxC+mYmO6OZ8PYgiuPJzF8U=
26+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17/go.mod h1:5M5CI3D12dNOtH3/mk6minaRwI2/37ifCURZISxA/IQ=
27+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17 h1:WWLqlh79iO48yLkj1v3ISRNiv+3KdQoZ6JWyfcsyQik=
28+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17/go.mod h1:EhG22vHRrvF8oXSTYStZhJc1aUgKtnJe+aOiFEV90cM=
29+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ=
30+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc=
31+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0 h1:TToQNkvGguu209puTojY/ozlqy2d/SFNcoLIqTFi42g=
32+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.0/go.mod h1:0jp+ltwkf+SwG2fm/PKo8t4y8pJSgOCO4D8Lz3k0aHQ=
33+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4 h1:tHxQi/XHPK0ctd/wdOw0t7Xrc2OxcRCnVzv8lwWPu0c=
34+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.4/go.mod h1:4GQbF1vJzG60poZqWatZlhP31y8PGCCVTvIGPdaaYJ0=
35+
github.com/aws/aws-sdk-go-v2/service/kms v1.49.5 h1:DKibav4XF66XSeaXcrn9GlWGHos6D/vJ4r7jsK7z5CE=
36+
github.com/aws/aws-sdk-go-v2/service/kms v1.49.5/go.mod h1:1SdcmEGUEQE1mrU2sIgeHtcMSxHuybhPvuEPANzIDfI=
37+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.5 h1:HJwZwRt2Z2Tdec+m+fPjvdmkq2s9Ra+VR0hjF7V2o40=
38+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.5/go.mod h1:wrMCEwjFPms+V86TCQQeOxQF/If4vT44FGIOFiMC2ck=
39+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4 h1:zcx9LiGWZ6i6pjdcoE9oXAB6mUdeyC36Ia/QEiIvYdg=
40+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.4/go.mod h1:Tp/ly1cTjRLGBBmNccFumbZ8oqpZlpdhFf80SrRh4is=
41+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.0 h1:s7LRgBqhwLaxcocnAniBJp7gaAB+4I4vHzqUqjH18yc=
42+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.0/go.mod h1:9XEUty5v5UAsMiFOBJrNibZgwCeOma73jgGwwhgffa8=
43+
github.com/aws/smithy-go v1.24.0 h1:LpilSUItNPFr1eY85RYgTIg5eIEPtvFbskaFcmmIUnk=
44+
github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
1945
github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
2046
github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
2147
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -173,10 +199,6 @@ github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0f
173199
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
174200
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
175201
github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
176-
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
177-
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
178-
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
179-
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
180202
github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o=
181203
github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY=
182204
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -511,7 +533,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV
511533
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
512534
gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s=
513535
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
514-
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
515536
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
516537
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
517538
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

keystore/kms/asn1.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,22 @@ func padTo32Bytes(buffer []byte) []byte {
240240

241241
return buffer
242242
}
243+
244+
// ASN1ToEd25519PublicKey extracts an Ed25519 public key from AWS KMS ASN.1 DER-encoded SPKI format.
245+
//
246+
// AWS KMS returns Ed25519 public keys in ASN.1 DER-encoded SubjectPublicKeyInfo (SPKI) format.
247+
// The actual Ed25519 public key is 32 bytes and is contained in the SubjectPublicKey BitString.
248+
func ASN1ToEd25519PublicKey(asn1PublicKey []byte) ([]byte, error) {
249+
var spki SPKI
250+
if _, err := asn1.Unmarshal(asn1PublicKey, &spki); err != nil {
251+
return nil, fmt.Errorf("failed to unmarshal ASN.1 public key: %w", err)
252+
}
253+
254+
// Ed25519 public keys are 32 bytes raw in the BitString
255+
pubKeyBytes := spki.SubjectPublicKey.Bytes
256+
if len(pubKeyBytes) != 32 {
257+
return nil, fmt.Errorf("invalid Ed25519 public key length in BitString: expected 32 bytes, got %d", len(pubKeyBytes))
258+
}
259+
260+
return pubKeyBytes, nil
261+
}

keystore/kms/client.go

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,62 @@
11
package kms
22

33
import (
4+
"context"
45
"fmt"
56

6-
"github.com/aws/aws-sdk-go/aws/session"
7-
kmslib "github.com/aws/aws-sdk-go/service/kms"
7+
"github.com/aws/aws-sdk-go-v2/aws"
8+
"github.com/aws/aws-sdk-go-v2/config"
9+
"github.com/aws/aws-sdk-go-v2/service/kms"
810
)
911

1012
// Client is an interface that defines the methods for interacting with AWS KMS. We only expose
1113
// the methods that are needed for our use case, which is to get a public key and sign data.
1214
//
13-
// These methods are directly copied from the kms.Client interface in the AWS SDK for Go v1.
14-
// // https://pkg.go.dev/github.com/aws/aws-sdk-go@v1.55.7/service/kms
15+
// These methods are based on the AWS SDK for Go v2 KMS client interface.
16+
// https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/kms
1517
type Client interface {
16-
GetPublicKey(input *kmslib.GetPublicKeyInput) (*kmslib.GetPublicKeyOutput, error)
17-
Sign(input *kmslib.SignInput) (*kmslib.SignOutput, error)
18-
DescribeKey(input *kmslib.DescribeKeyInput) (*kmslib.DescribeKeyOutput, error)
19-
ListKeys(input *kmslib.ListKeysInput) (*kmslib.ListKeysOutput, error)
18+
GetPublicKey(ctx context.Context, input *kms.GetPublicKeyInput, opts ...func(*kms.Options)) (*kms.GetPublicKeyOutput, error)
19+
Sign(ctx context.Context, input *kms.SignInput, opts ...func(*kms.Options)) (*kms.SignOutput, error)
20+
DescribeKey(ctx context.Context, input *kms.DescribeKeyInput, opts ...func(*kms.Options)) (*kms.DescribeKeyOutput, error)
21+
ListKeys(ctx context.Context, input *kms.ListKeysInput, opts ...func(*kms.Options)) (*kms.ListKeysOutput, error)
2022
}
2123

22-
// NewClient constructs a new kmslib.KMS instance using the provided AWS profile. This adheres to
23-
// the KMSClient interface, allowing for signing and public key retrieval using AWS KMS.
24-
// The region is automatically read from the AWS profile configuration.
25-
func NewClient(options session.Options) (Client, error) {
26-
sess, err := session.NewSessionWithOptions(options)
27-
if err != nil {
28-
return nil, fmt.Errorf("failed to create AWS session: %w", err)
24+
// ClientOptions contains options for creating a KMS client.
25+
type ClientOptions struct {
26+
// Profile is the AWS profile name to use (for local development).
27+
// If empty, uses default credential chain (IRSA, EC2 instance profiles, etc.).
28+
Profile string
29+
// Region is the AWS region. If empty, will be read from profile or environment.
30+
Region string
31+
}
32+
33+
// NewClient constructs a new KMS client using AWS SDK v2.
34+
// If Profile is specified, it uses profile-based authentication (for local dev).
35+
// Otherwise, it uses the default credential chain (IRSA in production, EC2 instance profiles, etc.).
36+
func NewClient(ctx context.Context, opts ClientOptions) (Client, error) {
37+
var cfg aws.Config
38+
var err error
39+
40+
if opts.Profile != "" {
41+
// Use profile-based config
42+
cfg, err = config.LoadDefaultConfig(ctx,
43+
config.WithSharedConfigProfile(opts.Profile),
44+
)
45+
if err != nil {
46+
return nil, fmt.Errorf("failed to load AWS config with profile %s: %w", opts.Profile, err)
47+
}
48+
} else {
49+
// Use default credential chain
50+
cfg, err = config.LoadDefaultConfig(ctx)
51+
if err != nil {
52+
return nil, fmt.Errorf("failed to load AWS config: %w", err)
53+
}
2954
}
30-
return kmslib.New(sess), nil
55+
56+
// Set region if provided
57+
if opts.Region != "" {
58+
cfg.Region = opts.Region
59+
}
60+
61+
return kms.NewFromConfig(cfg), nil
3162
}

keystore/kms/fake_client.go

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package kms
22

33
import (
4+
"context"
45
"crypto/ecdsa"
56
"errors"
67
"time"
78

8-
"github.com/aws/aws-sdk-go/aws"
9-
"github.com/aws/aws-sdk-go/aws/awserr"
10-
kmslib "github.com/aws/aws-sdk-go/service/kms"
9+
"github.com/aws/aws-sdk-go-v2/service/kms"
10+
kmstypes "github.com/aws/aws-sdk-go-v2/service/kms/types"
1111
"github.com/ethereum/go-ethereum/crypto"
1212
)
1313

@@ -28,25 +28,31 @@ func NewFakeKMSClient(keys []Key) (*FakeKMSClient, error) {
2828
}, nil
2929
}
3030

31-
func (m *FakeKMSClient) GetPublicKey(input *kmslib.GetPublicKeyInput) (*kmslib.GetPublicKeyOutput, error) {
31+
func (m *FakeKMSClient) GetPublicKey(ctx context.Context, input *kms.GetPublicKeyInput, opts ...func(*kms.Options)) (*kms.GetPublicKeyOutput, error) {
32+
if input.KeyId == nil {
33+
return nil, errors.New("key ID is required")
34+
}
3235
for _, key := range m.keys {
33-
if aws.StringValue(input.KeyId) == key.KeyID {
36+
if *input.KeyId == key.KeyID {
3437
asn1PubKey, err := SEC1ToASN1PublicKey(crypto.FromECDSAPub(&key.PrivateKey.PublicKey))
3538
if err != nil {
3639
return nil, err
3740
}
38-
return &kmslib.GetPublicKeyOutput{
39-
KeyId: aws.String(key.KeyID),
41+
return &kms.GetPublicKeyOutput{
42+
KeyId: &key.KeyID,
4043
PublicKey: asn1PubKey,
4144
}, nil
4245
}
4346
}
44-
return nil, awserr.New(kmslib.ErrCodeNotFoundException, "key not found", errors.New("key not found"))
47+
return nil, errors.New("key not found")
4548
}
4649

47-
func (m *FakeKMSClient) Sign(input *kmslib.SignInput) (*kmslib.SignOutput, error) {
50+
func (m *FakeKMSClient) Sign(ctx context.Context, input *kms.SignInput, opts ...func(*kms.Options)) (*kms.SignOutput, error) {
51+
if input.KeyId == nil {
52+
return nil, errors.New("key ID is required")
53+
}
4854
for _, key := range m.keys {
49-
if aws.StringValue(input.KeyId) == key.KeyID {
55+
if *input.KeyId == key.KeyID {
5056
sig, err := crypto.Sign(input.Message, key.PrivateKey)
5157
if err != nil {
5258
return nil, err
@@ -55,40 +61,45 @@ func (m *FakeKMSClient) Sign(input *kmslib.SignInput) (*kmslib.SignOutput, error
5561
if err != nil {
5662
return nil, err
5763
}
58-
return &kmslib.SignOutput{
59-
KeyId: aws.String(key.KeyID),
64+
return &kms.SignOutput{
65+
KeyId: &key.KeyID,
6066
Signature: asn1Sig,
6167
}, nil
6268
}
6369
}
64-
return nil, awserr.New(kmslib.ErrCodeNotFoundException, "key not found", errors.New("key not found"))
70+
return nil, errors.New("key not found")
6571
}
6672

6773
// DescribeKey returns metadata about the key.
68-
func (m *FakeKMSClient) DescribeKey(input *kmslib.DescribeKeyInput) (*kmslib.DescribeKeyOutput, error) {
74+
func (m *FakeKMSClient) DescribeKey(ctx context.Context, input *kms.DescribeKeyInput, opts ...func(*kms.Options)) (*kms.DescribeKeyOutput, error) {
75+
if input.KeyId == nil {
76+
return nil, errors.New("key ID is required")
77+
}
6978
for _, key := range m.keys {
70-
if aws.StringValue(input.KeyId) == key.KeyID {
71-
return &kmslib.DescribeKeyOutput{
72-
KeyMetadata: &kmslib.KeyMetadata{
73-
KeyId: aws.String(key.KeyID),
74-
KeySpec: aws.String(kmslib.KeySpecEccSecgP256k1),
75-
CreationDate: aws.Time(m.createdAt),
79+
if *input.KeyId == key.KeyID {
80+
keySpec := kmstypes.KeySpecEccSecgP256k1
81+
return &kms.DescribeKeyOutput{
82+
KeyMetadata: &kmstypes.KeyMetadata{
83+
KeyId: &key.KeyID,
84+
KeySpec: keySpec,
85+
CreationDate: &m.createdAt,
7686
},
7787
}, nil
7888
}
7989
}
80-
return nil, awserr.New(kmslib.ErrCodeNotFoundException, "key not found", errors.New("key not found"))
90+
return nil, errors.New("key not found")
8191
}
8292

8393
// ListKeys returns a list of key IDs.
84-
func (m *FakeKMSClient) ListKeys(_ *kmslib.ListKeysInput) (*kmslib.ListKeysOutput, error) {
85-
keys := make([]*kmslib.KeyListEntry, 0, len(m.keys))
94+
func (m *FakeKMSClient) ListKeys(ctx context.Context, input *kms.ListKeysInput, opts ...func(*kms.Options)) (*kms.ListKeysOutput, error) {
95+
keys := make([]kmstypes.KeyListEntry, 0, len(m.keys))
8696
for _, key := range m.keys {
87-
keys = append(keys, &kmslib.KeyListEntry{
88-
KeyId: aws.String(key.KeyID),
97+
keyID := key.KeyID
98+
keys = append(keys, kmstypes.KeyListEntry{
99+
KeyId: &keyID,
89100
})
90101
}
91-
return &kmslib.ListKeysOutput{
102+
return &kms.ListKeysOutput{
92103
Keys: keys,
93104
}, nil
94105
}

0 commit comments

Comments
 (0)