Skip to content

Commit d807ea7

Browse files
committed
PR comments
1 parent e69b870 commit d807ea7

File tree

5 files changed

+35
-22
lines changed

5 files changed

+35
-22
lines changed

keystore/admin.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ type Admin interface {
9292
ImportKeys(ctx context.Context, req ImportKeysRequest) (ImportKeysResponse, error)
9393
ExportKeys(ctx context.Context, req ExportKeysRequest) (ExportKeysResponse, error)
9494
SetMetadata(ctx context.Context, req SetMetadataRequest) (SetMetadataResponse, error)
95+
96+
mustEmbedUnimplemented()
9597
}
9698

9799
func ValidKeyName(name string) error {
@@ -162,7 +164,7 @@ func (ks *keystore) CreateKeys(ctx context.Context, req CreateKeysRequest) (Crea
162164
}
163165

164166
// Persist it to storage.
165-
if err := save(ctx, ks.storage, ks.enc, ksCopy); err != nil {
167+
if err := ks.save(ctx, ksCopy); err != nil {
166168
return CreateKeysResponse{}, fmt.Errorf("failed to save keystore: %w", err)
167169
}
168170
// If we succeed to save, update the in memory keystore.
@@ -181,7 +183,7 @@ func (k *keystore) DeleteKeys(ctx context.Context, req DeleteKeysRequest) (Delet
181183
}
182184
delete(ksCopy, name)
183185
}
184-
if err := save(ctx, k.storage, k.enc, ksCopy); err != nil {
186+
if err := k.save(ctx, ksCopy); err != nil {
185187
return DeleteKeysResponse{}, fmt.Errorf("failed to save keystore: %w", err)
186188
}
187189
k.keystore = ksCopy

keystore/encryptor.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ type Encryptor interface {
3535
Encrypt(ctx context.Context, req EncryptRequest) (EncryptResponse, error)
3636
Decrypt(ctx context.Context, req DecryptRequest) (DecryptResponse, error)
3737
DeriveSharedSecret(ctx context.Context, req DeriveSharedSecretRequest) (DeriveSharedSecretResponse, error)
38+
39+
mustEmbedUnimplemented()
3840
}
3941

4042
// TODO: Encryptor implementation.

keystore/keystore.go

Lines changed: 27 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ type Keystore interface {
7474
Encryptor
7575
}
7676

77+
type Unimplemented struct{}
78+
79+
func (Unimplemented) mustEmbedUnimplementedKey() {}
80+
7781
type key struct {
7882
keyType KeyType
7983
privateKey internal.Raw
@@ -139,57 +143,60 @@ type keystore struct {
139143
}
140144

141145
func NewKeystore(ctx context.Context, storage storage.Storage, enc EncryptionParams) (Keystore, error) {
142-
ks, err := load(ctx, storage, enc)
146+
ks := &keystore{
147+
storage: storage,
148+
enc: enc,
149+
}
150+
err := ks.load(ctx)
143151
if err != nil {
144152
return nil, fmt.Errorf("failed to load keystore: %w", err)
145153
}
146-
return &keystore{
147-
mu: sync.RWMutex{},
148-
keystore: ks,
149-
storage: storage,
150-
enc: enc,
151-
}, nil
154+
return ks, nil
152155
}
153156

154-
func load(ctx context.Context, storage storage.Storage, enc EncryptionParams) (map[string]key, error) {
155-
encryptedKeystore, err := storage.GetEncryptedKeystore(ctx)
157+
func (k *keystore) mustEmbedUnimplemented() {}
158+
159+
func (k *keystore) load(ctx context.Context) error {
160+
encryptedKeystore, err := k.storage.GetEncryptedKeystore(ctx)
156161
if err != nil {
157-
return nil, fmt.Errorf("failed to get encrypted keystore: %w", err)
162+
return fmt.Errorf("failed to get encrypted keystore: %w", err)
158163
}
159164

160165
// If no data exists, return empty keystore
161166
if encryptedKeystore == nil || len(encryptedKeystore) == 0 {
162-
return make(map[string]key), nil
167+
k.keystore = make(map[string]key)
168+
return nil
163169
}
164170

165171
encryptedSecrets := gethkeystore.CryptoJSON{}
166172
err = json.Unmarshal(encryptedKeystore, &encryptedSecrets)
167173
if err != nil {
168-
return nil, fmt.Errorf("failed to unmarshal encrypted keystore: %w", err)
174+
return fmt.Errorf("failed to unmarshal encrypted keystore: %w", err)
169175
}
170-
decryptedKeystore, err := gethkeystore.DecryptDataV3(encryptedSecrets, enc.Password)
176+
decryptedKeystore, err := gethkeystore.DecryptDataV3(encryptedSecrets, k.enc.Password)
171177
if err != nil {
172-
return nil, fmt.Errorf("failed to decrypt keystore: %w", err)
178+
return fmt.Errorf("failed to decrypt keystore: %w", err)
173179
}
174180
keystorepb := &serialization.Keystore{}
175181
err = proto.Unmarshal(decryptedKeystore, keystorepb)
176182
if err != nil {
177-
return nil, fmt.Errorf("failed to unmarshal keystore: %w", err)
183+
return fmt.Errorf("failed to unmarshal keystore: %w", err)
178184
}
179185
keystore := make(map[string]key)
180186
for _, k := range keystorepb.Keys {
181187
pkRaw := internal.NewRaw(k.PrivateKey)
182188
keyType := KeyType(k.KeyType)
183189
publicKey, err := publicKeyFromPrivateKey(pkRaw, keyType)
184190
if err != nil {
185-
return nil, fmt.Errorf("failed to get public key from private key: %w", err)
191+
return fmt.Errorf("failed to get public key from private key: %w", err)
186192
}
187193
keystore[k.Name] = newKey(keyType, pkRaw, publicKey, time.Unix(k.CreatedAt, 0), k.Metadata)
188194
}
189-
return keystore, nil
195+
k.keystore = keystore
196+
return nil
190197
}
191198

192-
func save(ctx context.Context, storage storage.Storage, enc EncryptionParams, keystore map[string]key) error {
199+
func (k *keystore) save(ctx context.Context, keystore map[string]key) error {
193200
keystorepb := serialization.Keystore{
194201
Keys: make([]*serialization.Key, 0),
195202
}
@@ -206,15 +213,15 @@ func save(ctx context.Context, storage storage.Storage, enc EncryptionParams, ke
206213
if err != nil {
207214
return fmt.Errorf("failed to marshal keystore: %w", err)
208215
}
209-
encryptedSecrets, err := gethkeystore.EncryptDataV3(rawKeystore, []byte(enc.Password), enc.ScryptParams.N, enc.ScryptParams.P)
216+
encryptedSecrets, err := gethkeystore.EncryptDataV3(rawKeystore, []byte(k.enc.Password), k.enc.ScryptParams.N, k.enc.ScryptParams.P)
210217
if err != nil {
211218
return fmt.Errorf("failed to encrypt keystore: %w", err)
212219
}
213220
encryptedSecretsBytes, err := json.Marshal(encryptedSecrets)
214221
if err != nil {
215222
return fmt.Errorf("failed to marshal encrypted keystore: %w", err)
216223
}
217-
err = storage.PutEncryptedKeystore(ctx, encryptedSecretsBytes)
224+
err = k.storage.PutEncryptedKeystore(ctx, encryptedSecretsBytes)
218225
if err != nil {
219226
return fmt.Errorf("failed to put encrypted keystore: %w", err)
220227
}

keystore/signer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ type VerifyResponse struct {
2626
type Signer interface {
2727
Sign(ctx context.Context, req SignRequest) (SignResponse, error)
2828
Verify(ctx context.Context, req VerifyRequest) (VerifyResponse, error)
29+
30+
mustEmbedUnimplemented()
2931
}
3032

3133
// TODO: Signer implementation.

0 commit comments

Comments
 (0)