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