Skip to content

Commit

Permalink
Refactor all node key management into nodekeys.go
Browse files Browse the repository at this point in the history
  • Loading branch information
Leo committed Aug 21, 2020
1 parent 5b7b80d commit 935411c
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 76 deletions.
31 changes: 3 additions & 28 deletions bridge/cmd/guardiand/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,13 @@ package main

import (
"context"
"crypto/ecdsa"
"flag"
"fmt"
"net/http"
_ "net/http/pprof"
"os"

eth_common "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/libp2p/go-libp2p-core/peer"
"go.uber.org/zap"

Expand All @@ -36,11 +34,11 @@ var (
ethContract = flag.String("ethContract", "", "Ethereum bridge contract address")
ethConfirmations = flag.Uint64("ethConfirmations", 15, "Ethereum confirmation count requirement")

agentRPC = flag.String("agentRPC", "", "Solana agent sidecar gRPC address")
agentRPC = flag.String("agentRPC", "", "Solana agent sidecar gRPC address")

logLevel = flag.String("logLevel", "info", "Logging level (debug, info, warn, error, dpanic, panic, fatal)")

unsafeDevMode = flag.Bool("unsafeDevMode", false, "Launch node in unsafe, deterministic devnet mode")
unsafeDevMode = flag.Bool("unsafeDevMode", false, "Launch node in unsafe, deterministic devnet mode")
devNumGuardians = flag.Uint("devNumGuardians", 5, "Number of devnet guardians to include in guardian set")

nodeName = flag.String("nodeName", "", "Node name to announce in gossip heartbeats")
Expand Down Expand Up @@ -82,28 +80,6 @@ func rootLoggerName() string {
}
}

func loadGuardianKey(logger *zap.Logger) *ecdsa.PrivateKey {
var gk *ecdsa.PrivateKey

if *unsafeDevMode {
// Figure out our devnet index
idx, err := devnet.GetDevnetIndex()
if err != nil {
logger.Fatal("Failed to parse hostname - are we running in devnet?")
}

// Generate guardian key
gk = devnet.DeterministicEcdsaKeyByIndex(crypto.S256(), uint64(idx))
} else {
panic("not implemented") // TODO
}

logger.Info("Loaded guardian key", zap.String(
"address", crypto.PubkeyToAddress(gk.PublicKey).String()))

return gk
}

func main() {
flag.Parse()

Expand Down Expand Up @@ -189,7 +165,7 @@ func main() {
sendC := make(chan []byte)

// Inbound ETH observations
ethObsvC := make(chan *gossipv1.EthLockupObservation, 50) // TODO: is this an acceptable mitigation for bursts?
ethObsvC := make(chan *gossipv1.EthLockupObservation, 50) // TODO: is this an acceptable mitigation for bursts?

// VAAs to submit to Solana
vaaC := make(chan *vaa.VAA)
Expand All @@ -214,7 +190,6 @@ func main() {
return err
}


logger.Info("Started internal services")
supervisor.Signal(ctx, supervisor.SignalHealthy)

Expand Down
48 changes: 0 additions & 48 deletions bridge/cmd/guardiand/nodekey.go

This file was deleted.

74 changes: 74 additions & 0 deletions bridge/cmd/guardiand/nodekeys.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package main

import (
"crypto/ecdsa"
"fmt"
"io/ioutil"
"os"

ethcrypto "github.com/ethereum/go-ethereum/crypto"
p2pcrypto "github.com/libp2p/go-libp2p-core/crypto"
"go.uber.org/zap"

"github.com/certusone/wormhole/bridge/pkg/devnet"
)

func loadGuardianKey(logger *zap.Logger) *ecdsa.PrivateKey {
var gk *ecdsa.PrivateKey

if *unsafeDevMode {
// Figure out our devnet index
idx, err := devnet.GetDevnetIndex()
if err != nil {
logger.Fatal("Failed to parse hostname - are we running in devnet?")
}

// Generate guardian key
gk = devnet.DeterministicEcdsaKeyByIndex(ethcrypto.S256(), uint64(idx))
} else {
panic("not implemented") // TODO
}

logger.Info("Loaded guardian key", zap.String(
"address", ethcrypto.PubkeyToAddress(gk.PublicKey).String()))

return gk
}

func getOrCreateNodeKey(logger *zap.Logger, path string) (p2pcrypto.PrivKey, error) {
b, err := ioutil.ReadFile(path)
if err != nil {
if os.IsNotExist(err) {
logger.Info("No node key found, generating a new one...", zap.String("path", path))

// TODO(leo): what does -1 mean?
priv, _, err := p2pcrypto.GenerateKeyPair(p2pcrypto.Ed25519, -1)
if err != nil {
panic(err)
}

s, err := p2pcrypto.MarshalPrivateKey(priv)
if err != nil {
panic(err)
}

err = ioutil.WriteFile(path, s, 0600)
if err != nil {
return nil, fmt.Errorf("failed to write node key: %w", err)
}

return priv, nil
} else {
return nil, fmt.Errorf("failed to read node key: %w", err)
}
}

priv, err := p2pcrypto.UnmarshalPrivateKey(b)
if err != nil {
return nil, fmt.Errorf("failed to unmarshal node key: %w", err)
}

logger.Info("Found existing node key", zap.String("path", path))

return priv, nil
}

0 comments on commit 935411c

Please sign in to comment.