@@ -74,6 +74,10 @@ type Keystore interface {
7474 Encryptor
7575}
7676
77+ type Unimplemented struct {}
78+
79+ func (Unimplemented ) mustEmbedUnimplementedKey () {}
80+
7781type key struct {
7882 keyType KeyType
7983 privateKey internal.Raw
@@ -139,57 +143,60 @@ type keystore struct {
139143}
140144
141145func 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 }
0 commit comments