gnunet-go

GNUnet Bindings for Go
Log | Files | Refs | README | LICENSE

main.go (972B)


      1 package main
      2 
      3 import (
      4 	"crypto/rand"
      5 	"encoding/hex"
      6 	"flag"
      7 	"fmt"
      8 	"regexp"
      9 	"time"
     10 
     11 	"gnunet/util"
     12 
     13 	"github.com/bfix/gospel/crypto/ed25519"
     14 )
     15 
     16 func main() {
     17 	// get arguments
     18 	flag.Parse()
     19 	prefixes := flag.Args()
     20 	num := len(prefixes)
     21 	if num == 0 {
     22 		fmt.Println("No prefixes specified -- done.")
     23 		return
     24 	}
     25 
     26 	// pre-compile regexp
     27 	reg := make([]*regexp.Regexp, num)
     28 	for i, p := range prefixes {
     29 		reg[i] = regexp.MustCompile(p)
     30 	}
     31 
     32 	// generate new keys in a loop
     33 	seed := make([]byte, 32)
     34 	start := time.Now()
     35 	for i := 0; ; i++ {
     36 		_, _ = rand.Read(seed)
     37 		prv := ed25519.NewPrivateKeyFromSeed(seed)
     38 		pub := prv.Public().Bytes()
     39 		id := util.EncodeBinaryToString(pub)
     40 		for _, r := range reg {
     41 			if r.MatchString(id) {
     42 				elapsed := time.Since(start)
     43 				s1 := hex.EncodeToString(seed)
     44 				s2 := hex.EncodeToString(prv.D.Bytes())
     45 				fmt.Printf("%s [%s][%s] (%d tries, %s elapsed)\n", id, s1, s2, i, elapsed)
     46 				i = 0
     47 				start = time.Now()
     48 			}
     49 		}
     50 	}
     51 }