github.com/vipernet-xyz/tm@v0.34.24/test/fuzz/p2p/pex/init-corpus/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "math/rand" 8 "os" 9 "path/filepath" 10 11 "github.com/vipernet-xyz/tm/crypto/ed25519" 12 "github.com/vipernet-xyz/tm/p2p" 13 tmp2p "github.com/vipernet-xyz/tm/proto/tendermint/p2p" 14 ) 15 16 func main() { 17 baseDir := flag.String("base", ".", `where the "corpus" directory will live`) 18 flag.Parse() 19 20 initCorpus(*baseDir) 21 } 22 23 //nolint:gosec 24 func initCorpus(rootDir string) { 25 log.SetFlags(0) 26 27 corpusDir := filepath.Join(rootDir, "corpus") 28 if err := os.MkdirAll(corpusDir, 0o755); err != nil { 29 log.Fatalf("Creating %q err: %v", corpusDir, err) 30 } 31 sizes := []int{0, 1, 2, 17, 5, 31} 32 33 // Make the PRNG predictable 34 rand.Seed(10) 35 36 for _, n := range sizes { 37 var addrs []*p2p.NetAddress 38 39 // IPv4 addresses 40 for i := 0; i < n; i++ { 41 privKey := ed25519.GenPrivKey() 42 addr := fmt.Sprintf( 43 "%s@%v.%v.%v.%v:26656", 44 p2p.PubKeyToID(privKey.PubKey()), 45 rand.Int()%256, 46 rand.Int()%256, 47 rand.Int()%256, 48 rand.Int()%256, 49 ) 50 netAddr, _ := p2p.NewNetAddressString(addr) 51 addrs = append(addrs, netAddr) 52 } 53 54 // IPv6 addresses 55 privKey := ed25519.GenPrivKey() 56 ipv6a, err := p2p.NewNetAddressString( 57 fmt.Sprintf("%s@[ff02::1:114]:26656", p2p.PubKeyToID(privKey.PubKey()))) 58 if err != nil { 59 log.Fatalf("can't create a new netaddress: %v", err) 60 } 61 addrs = append(addrs, ipv6a) 62 63 msg := tmp2p.Message{ 64 Sum: &tmp2p.Message_PexAddrs{ 65 PexAddrs: &tmp2p.PexAddrs{Addrs: p2p.NetAddressesToProto(addrs)}, 66 }, 67 } 68 bz, err := msg.Marshal() 69 if err != nil { 70 log.Fatalf("unable to marshal: %v", err) 71 } 72 73 filename := filepath.Join(rootDir, "corpus", fmt.Sprintf("%d", n)) 74 75 if err := os.WriteFile(filename, bz, 0o644); err != nil { 76 log.Fatalf("can't write %X to %q: %v", bz, filename, err) 77 } 78 79 log.Printf("wrote %q", filename) 80 } 81 }