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