From 0f123ae562912ba0454f59ed02bdc74df4e909a6 Mon Sep 17 00:00:00 2001 From: Nishant Das Date: Wed, 21 Aug 2019 21:00:22 +0530 Subject: [PATCH] Change log to node's URL (#3255) --- tools/bootnode/BUILD.bazel | 10 ++++++---- tools/bootnode/bootnode.go | 17 +++++++---------- tools/bootnode/bootnode_test.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 14 deletions(-) diff --git a/tools/bootnode/BUILD.bazel b/tools/bootnode/BUILD.bazel index 6992e3c594..2914ea543d 100644 --- a/tools/bootnode/BUILD.bazel +++ b/tools/bootnode/BUILD.bazel @@ -10,10 +10,10 @@ go_library( visibility = ["//visibility:private"], deps = [ "//shared/version:go_default_library", - "@com_github_ethereum_go_ethereum//crypto:go_default_library", + "@com_github_btcsuite_btcd//btcec:go_default_library", "@com_github_ethereum_go_ethereum//p2p/discv5:go_default_library", "@com_github_ipfs_go_log//:go_default_library", - "@com_github_libp2p_go_libp2p_crypto//:go_default_library", + "@com_github_libp2p_go_libp2p_core//crypto:go_default_library", "@org_uber_go_automaxprocs//:go_default_library", ], ) @@ -31,10 +31,10 @@ go_image( visibility = ["//visibility:private"], deps = [ "//shared/version:go_default_library", - "@com_github_ethereum_go_ethereum//crypto:go_default_library", + "@com_github_btcsuite_btcd//btcec:go_default_library", "@com_github_ethereum_go_ethereum//p2p/discv5:go_default_library", "@com_github_ipfs_go_log//:go_default_library", - "@com_github_libp2p_go_libp2p_crypto//:go_default_library", + "@com_github_libp2p_go_libp2p_core//crypto:go_default_library", "@org_uber_go_automaxprocs//:go_default_library", ], ) @@ -66,7 +66,9 @@ go_test( embed = [":go_default_library"], deps = [ "//shared/iputils:go_default_library", + "@com_github_btcsuite_btcd//btcec:go_default_library", "@com_github_ethereum_go_ethereum//p2p/discv5:go_default_library", + "@com_github_libp2p_go_libp2p_core//crypto:go_default_library", "@org_uber_go_automaxprocs//:go_default_library", ], ) diff --git a/tools/bootnode/bootnode.go b/tools/bootnode/bootnode.go index c17da5dcc9..61f10063cc 100644 --- a/tools/bootnode/bootnode.go +++ b/tools/bootnode/bootnode.go @@ -12,16 +12,15 @@ package main import ( "crypto/ecdsa" "crypto/rand" - "crypto/x509" "flag" "fmt" "net" - curve "github.com/ethereum/go-ethereum/crypto" + "github.com/btcsuite/btcd/btcec" "github.com/ethereum/go-ethereum/p2p/discv5" logging "github.com/ipfs/go-log" - crypto "github.com/libp2p/go-libp2p-crypto" + "github.com/libp2p/go-libp2p-core/crypto" "github.com/prysmaticlabs/prysm/shared/version" _ "go.uber.org/automaxprocs" ) @@ -34,9 +33,6 @@ var ( log = logging.Logger("prysm-bootnode") ) -// ECDSACurve is the default ecdsa curve used(secpk2561) -var ECDSACurve = curve.S256() - func main() { flag.Parse() @@ -52,7 +48,7 @@ func main() { listener := createListener(defaultIP, *port, privKey) node := listener.Self() - fmt.Printf("Running bootnode: /ip4/%s/udp/%d/discv5/%s\n", node.IP.String(), node.UDP, node.ID.String()) + fmt.Printf("Running bootnode, url: %s", node.String()) select {} } @@ -76,22 +72,23 @@ func createListener(ipAddr string, port int, privKey *ecdsa.PrivateKey) *discv5. func extractPrivateKey() *ecdsa.PrivateKey { var privKey *ecdsa.PrivateKey - var err error if *privateKey != "" { b, err := crypto.ConfigDecodeKey(*privateKey) if err != nil { panic(err) } - privKey, err = x509.ParseECPrivateKey(b) + unmarshalledKey, err := crypto.UnmarshalPrivateKey(b) if err != nil { panic(err) } + privKey = (*ecdsa.PrivateKey)((*btcec.PrivateKey)(unmarshalledKey.(*crypto.Secp256k1PrivateKey))) } else { - privKey, err = ecdsa.GenerateKey(ECDSACurve, rand.Reader) + privInterfaceKey, _, err := crypto.GenerateSecp256k1Key(rand.Reader) if err != nil { panic(err) } + privKey = (*ecdsa.PrivateKey)((*btcec.PrivateKey)(privInterfaceKey.(*crypto.Secp256k1PrivateKey))) log.Warning("No private key was provided. Using default/random private key") } return privKey diff --git a/tools/bootnode/bootnode_test.go b/tools/bootnode/bootnode_test.go index b4416b4ca9..2c9b9c65ae 100644 --- a/tools/bootnode/bootnode_test.go +++ b/tools/bootnode/bootnode_test.go @@ -1,9 +1,13 @@ package main import ( + "crypto/ecdsa" + "crypto/rand" "testing" + "github.com/btcsuite/btcd/btcec" "github.com/ethereum/go-ethereum/p2p/discv5" + "github.com/libp2p/go-libp2p-core/crypto" "github.com/prysmaticlabs/prysm/shared/iputils" _ "go.uber.org/automaxprocs" ) @@ -53,3 +57,31 @@ func TestBootnode_OK(t *testing.T) { t.Errorf("Wanted node ID of %s but got %s", listenerNode.ID, nodes[1].ID) } } + +func TestPrivateKey_ParsesCorrectly(t *testing.T) { + privKey, _, err := crypto.GenerateSecp256k1Key(rand.Reader) + if err != nil { + t.Fatal(err) + } + marshalledKey, err := crypto.MarshalPrivateKey(privKey) + if err != nil { + t.Fatal(err) + } + encodedKey := crypto.ConfigEncodeKey(marshalledKey) + *privateKey = encodedKey + + extractedKey := extractPrivateKey() + + rawKey := (*ecdsa.PrivateKey)((*btcec.PrivateKey)(privKey.(*crypto.Secp256k1PrivateKey))) + + r, s, err := ecdsa.Sign(rand.Reader, extractedKey, []byte{'t', 'e', 's', 't'}) + if err != nil { + t.Fatal(err) + } + + isVerified := ecdsa.Verify(&rawKey.PublicKey, []byte{'t', 'e', 's', 't'}, r, s) + if !isVerified { + t.Error("Unmarshalled key is not the same as the key that was given to the function") + } + *privateKey = "" +}