package p2p import ( "bytes" "crypto/rand" "encoding/hex" "io/ioutil" "os" "testing" "github.com/libp2p/go-libp2p-core/crypto" "github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/testutil" "github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/require" ) func TestPrivateKeyLoading(t *testing.T) { file, err := ioutil.TempFile(testutil.TempDir(), "key") require.NoError(t, err) defer func() { assert.NoError(t, os.Remove(file.Name())) }() key, _, err := crypto.GenerateSecp256k1Key(rand.Reader) require.NoError(t, err, "Could not generate key") raw, err := key.Raw() if err != nil { panic(err) } out := hex.EncodeToString(raw) err = ioutil.WriteFile(file.Name(), []byte(out), params.BeaconIoConfig().ReadWritePermissions) require.NoError(t, err, "Could not write key to file") log.WithField("file", file.Name()).WithField("key", out).Info("Wrote key to file") cfg := &Config{ PrivateKey: file.Name(), } pKey, err := privKey(cfg) require.NoError(t, err, "Could not apply option") newPkey := convertToInterfacePrivkey(pKey) rawBytes, err := key.Raw() require.NoError(t, err) newRaw, err := newPkey.Raw() require.NoError(t, err) if !bytes.Equal(newRaw, rawBytes) { t.Errorf("Private keys do not match got %#x but wanted %#x", rawBytes, newRaw) } }