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  }