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  }