mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-22 11:32:09 +00:00
Reopenning fix for keystore field name change to align with EIP2335 (#12530)
* adding changes * fixing deepsource
This commit is contained in:
parent
3e17dbb532
commit
d15122fae2
@ -52,11 +52,11 @@ func createKeystore(t *testing.T, path string) (*keymanager.Keystore, string) {
|
||||
id, err := uuid.NewRandom()
|
||||
require.NoError(t, err)
|
||||
keystoreFile := &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Pubkey: fmt.Sprintf("%x", validatingKey.PublicKey().Marshal()),
|
||||
Version: encryptor.Version(),
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Pubkey: fmt.Sprintf("%x", validatingKey.PublicKey().Marshal()),
|
||||
Version: encryptor.Version(),
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
encoded, err := json.MarshalIndent(keystoreFile, "", "\t")
|
||||
require.NoError(t, err)
|
||||
|
@ -197,11 +197,11 @@ func encrypt(cliCtx *cli.Context) error {
|
||||
return errors.Wrap(err, "could not encrypt into new keystore")
|
||||
}
|
||||
item := &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
encodedFile, err := json.MarshalIndent(item, "", "\t")
|
||||
if err != nil {
|
||||
@ -229,7 +229,6 @@ func readAndDecryptKeystore(fullPath, password string) error {
|
||||
}
|
||||
decryptor := keystorev4.New()
|
||||
keystoreFile := &keymanager.Keystore{}
|
||||
|
||||
if err := json.Unmarshal(f, keystoreFile); err != nil {
|
||||
return errors.Wrap(err, "could not JSON unmarshal keystore file")
|
||||
}
|
||||
|
@ -277,6 +277,9 @@ func readKeystoreFile(_ context.Context, keystoreFilePath string) (*keymanager.K
|
||||
if keystoreFile.Pubkey == "" {
|
||||
return nil, errors.New("could not decode keystore json")
|
||||
}
|
||||
if keystoreFile.Description == "" && keystoreFile.Name != "" {
|
||||
keystoreFile.Description = keystoreFile.Name
|
||||
}
|
||||
return keystoreFile, nil
|
||||
}
|
||||
|
||||
@ -295,11 +298,11 @@ func createKeystoreFromPrivateKey(privKey bls.SecretKey, walletPassword string)
|
||||
)
|
||||
}
|
||||
return &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: fmt.Sprintf("%x", privKey.PublicKey().Marshal()),
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: fmt.Sprintf("%x", privKey.PublicKey().Marshal()),
|
||||
Description: encryptor.Name(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package accounts
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@ -174,3 +175,30 @@ func Test_importPrivateKeyAsAccount(t *testing.T) {
|
||||
require.Equal(t, 1, len(pubKeys))
|
||||
assert.DeepEqual(t, pubKeys[0], bytesutil.ToBytes48(privKey.PublicKey().Marshal()))
|
||||
}
|
||||
|
||||
func Test_NameToDescriptionChangeIsOK(t *testing.T) {
|
||||
jsonString := `{"version":1, "name":"hmmm"}`
|
||||
type Obj struct {
|
||||
Version uint `json:"version"`
|
||||
Description string `json:"description"`
|
||||
}
|
||||
a := &Obj{}
|
||||
require.NoError(t, json.Unmarshal([]byte(jsonString), a))
|
||||
require.Equal(t, a.Description, "")
|
||||
}
|
||||
|
||||
func Test_MarshalOmitsName(t *testing.T) {
|
||||
type Obj struct {
|
||||
Version uint `json:"version"`
|
||||
Description string `json:"description"`
|
||||
Name string `json:"name,omitempty"`
|
||||
}
|
||||
a := &Obj{
|
||||
Version: 1,
|
||||
Description: "hmm",
|
||||
}
|
||||
|
||||
bytes, err := json.Marshal(a)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, string(bytes), `{"version":1,"description":"hmm"}`)
|
||||
}
|
||||
|
@ -117,11 +117,11 @@ func createRandomKeystore(t testing.TB, password string) *keymanager.Keystore {
|
||||
cryptoFields, err := encryptor.Encrypt(validatingKey.Marshal(), password)
|
||||
require.NoError(t, err)
|
||||
return &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
Pubkey: fmt.Sprintf("%x", pubKey),
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
Pubkey: fmt.Sprintf("%x", pubKey),
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,7 @@ import (
|
||||
// ExtractKeystores retrieves the secret keys for specified public keys
|
||||
// in the function input, encrypts them using the specified password,
|
||||
// and returns their respective EIP-2335 keystores.
|
||||
func (_ *Keymanager) ExtractKeystores(
|
||||
func (*Keymanager) ExtractKeystores(
|
||||
_ context.Context, publicKeys []bls.PublicKey, password string,
|
||||
) ([]*keymanager.Keystore, error) {
|
||||
lock.Lock()
|
||||
@ -44,11 +44,11 @@ func (_ *Keymanager) ExtractKeystores(
|
||||
return nil, err
|
||||
}
|
||||
keystores[i] = &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Pubkey: fmt.Sprintf("%x", pubKeyBytes),
|
||||
Version: encryptor.Version(),
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Pubkey: fmt.Sprintf("%x", pubKeyBytes),
|
||||
Version: encryptor.Version(),
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
}
|
||||
return keystores, nil
|
||||
|
@ -31,11 +31,11 @@ func createRandomKeystore(t testing.TB, password string) *keymanager.Keystore {
|
||||
cryptoFields, err := encryptor.Encrypt(validatingKey.Marshal(), password)
|
||||
require.NoError(t, err)
|
||||
return &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
Pubkey: fmt.Sprintf("%x", pubKey),
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
Pubkey: fmt.Sprintf("%x", pubKey),
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -83,12 +83,13 @@ type AccountLister interface {
|
||||
|
||||
// Keystore json file representation as a Go struct.
|
||||
type Keystore struct {
|
||||
Crypto map[string]interface{} `json:"crypto"`
|
||||
ID string `json:"uuid"`
|
||||
Pubkey string `json:"pubkey"`
|
||||
Version uint `json:"version"`
|
||||
Name string `json:"name"`
|
||||
Path string `json:"path"`
|
||||
Crypto map[string]interface{} `json:"crypto"`
|
||||
ID string `json:"uuid"`
|
||||
Pubkey string `json:"pubkey"`
|
||||
Version uint `json:"version"`
|
||||
Description string `json:"description"`
|
||||
Name string `json:"name,omitempty"` // field deprecated in favor of description, EIP2335
|
||||
Path string `json:"path"`
|
||||
}
|
||||
|
||||
// Kind defines an enum for either local, derived, or remote-signing
|
||||
|
@ -89,6 +89,9 @@ func (s *Server) ImportKeystores(
|
||||
for i := 0; i < len(req.Keystores); i++ {
|
||||
k := &keymanager.Keystore{}
|
||||
err = json.Unmarshal([]byte(req.Keystores[i]), k)
|
||||
if k.Description == "" && k.Name != "" {
|
||||
k.Description = k.Name
|
||||
}
|
||||
if err != nil {
|
||||
// we want to ignore unmarshal errors for now, proper status in importKeystore
|
||||
k.Pubkey = "invalid format"
|
||||
|
@ -534,11 +534,11 @@ func createRandomKeystore(t testing.TB, password string) *keymanager.Keystore {
|
||||
cryptoFields, err := encryptor.Encrypt(validatingKey.Marshal(), password)
|
||||
require.NoError(t, err)
|
||||
return &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
Pubkey: fmt.Sprintf("%x", pubKey),
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
Pubkey: fmt.Sprintf("%x", pubKey),
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -243,6 +243,9 @@ func (*Server) ValidateKeystores(
|
||||
if err := json.Unmarshal([]byte(encoded), &keystore); err != nil {
|
||||
return nil, status.Errorf(codes.InvalidArgument, "Not a valid EIP-2335 keystore JSON file: %v", err)
|
||||
}
|
||||
if keystore.Description == "" && keystore.Name != "" {
|
||||
keystore.Description = keystore.Name
|
||||
}
|
||||
if _, err := decryptor.Decrypt(keystore.Crypto, req.KeystoresPassword); err != nil {
|
||||
doesNotDecrypt := strings.Contains(err.Error(), keymanager.IncorrectPasswordErrMsg)
|
||||
if doesNotDecrypt {
|
||||
|
@ -92,11 +92,11 @@ func TestServer_CreateWallet_Local(t *testing.T) {
|
||||
cryptoFields, err := encryptor.Encrypt(privKey.Marshal(), strongPass)
|
||||
require.NoError(t, err)
|
||||
item := &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
encodedFile, err := json.MarshalIndent(item, "", "\t")
|
||||
require.NoError(t, err)
|
||||
@ -241,11 +241,11 @@ func TestServer_ValidateKeystores_OK(t *testing.T) {
|
||||
cryptoFields, err := encryptor.Encrypt(privKey.Marshal(), strongPass)
|
||||
require.NoError(t, err)
|
||||
item := &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
encodedFile, err := json.MarshalIndent(item, "", "\t")
|
||||
require.NoError(t, err)
|
||||
@ -278,11 +278,11 @@ func TestServer_ValidateKeystores_OK(t *testing.T) {
|
||||
cryptoFields, err := encryptor.Encrypt(privKey.Marshal(), differentPassword)
|
||||
require.NoError(t, err)
|
||||
item := &keymanager.Keystore{
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Name: encryptor.Name(),
|
||||
Crypto: cryptoFields,
|
||||
ID: id.String(),
|
||||
Version: encryptor.Version(),
|
||||
Pubkey: pubKey,
|
||||
Description: encryptor.Name(),
|
||||
}
|
||||
encodedFile, err := json.MarshalIndent(item, "", "\t")
|
||||
keystores = append(keystores, string(encodedFile))
|
||||
|
Loading…
Reference in New Issue
Block a user