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  }