// nolint: gosec package main import ( "flag" "fmt" "io/ioutil" "log" "math/rand" "os" "path/filepath" "github.com/tendermint/tendermint/crypto/ed25519" "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/pex" tmp2p "github.com/tendermint/tendermint/proto/tendermint/p2p" "github.com/tendermint/tendermint/types" ) func main() { baseDir := flag.String("base", ".", `where the "corpus" directory will live`) flag.Parse() initCorpus(*baseDir) } func initCorpus(rootDir string) { log.SetFlags(0) corpusDir := filepath.Join(rootDir, "corpus") if err := os.MkdirAll(corpusDir, 0755); err != nil { log.Fatalf("Creating %q err: %v", corpusDir, err) } sizes := []int{0, 1, 2, 17, 5, 31} // Make the PRNG predictable rand.Seed(10) for _, n := range sizes { var addrs []*p2p.NetAddress // IPv4 addresses for i := 0; i < n; i++ { privKey := ed25519.GenPrivKey() addr := fmt.Sprintf( "%s@%v.%v.%v.%v:26656", types.NodeIDFromPubKey(privKey.PubKey()), rand.Int()%256, rand.Int()%256, rand.Int()%256, rand.Int()%256, ) netAddr, _ := types.NewNetAddressString(addr) addrs = append(addrs, netAddr) } // IPv6 addresses privKey := ed25519.GenPrivKey() ipv6a, err := types.NewNetAddressString( fmt.Sprintf("%s@[ff02::1:114]:26656", types.NodeIDFromPubKey(privKey.PubKey()))) if err != nil { log.Fatalf("can't create a new netaddress: %v", err) } addrs = append(addrs, ipv6a) msg := tmp2p.PexMessage{ Sum: &tmp2p.PexMessage_PexResponse{ PexResponse: &tmp2p.PexResponse{Addresses: pex.NetAddressesToProto(addrs)}, }, } bz, err := msg.Marshal() if err != nil { log.Fatalf("unable to marshal: %v", err) } filename := filepath.Join(rootDir, "corpus", fmt.Sprintf("%d", n)) if err := ioutil.WriteFile(filename, bz, 0644); err != nil { log.Fatalf("can't write %X to %q: %v", bz, filename, err) } log.Printf("wrote %q", filename) } }