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 }