aboutsummaryrefslogtreecommitdiff
path: root/src/gnunet/cmd/vanityid/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnunet/cmd/vanityid/main.go')
-rw-r--r--src/gnunet/cmd/vanityid/main.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/gnunet/cmd/vanityid/main.go b/src/gnunet/cmd/vanityid/main.go
new file mode 100644
index 0000000..938df61
--- /dev/null
+++ b/src/gnunet/cmd/vanityid/main.go
@@ -0,0 +1,53 @@
1package main
2
3import (
4 "crypto/rand"
5 "encoding/hex"
6 "flag"
7 "fmt"
8 "regexp"
9 "time"
10
11 "github.com/bfix/gospel/crypto/ed25519"
12 "gnunet/util"
13)
14
15func main() {
16 // get arguments
17 flag.Parse()
18 prefixes := flag.Args()
19 num := len(prefixes)
20 if num == 0 {
21 fmt.Println("No prefixes specified -- done.")
22 return
23 }
24
25 // pre-compile regexp
26 reg := make([]*regexp.Regexp, num)
27 for i, p := range prefixes {
28 reg[i] = regexp.MustCompile(p)
29 }
30
31 // generate new keys in a loop
32 seed := make([]byte, 32)
33 start := time.Now()
34 for i := 0; ; i++ {
35 n, err := rand.Read(seed)
36 if err != nil || n != 32 {
37 panic(err)
38 }
39 prv := ed25519.NewPrivateKeyFromSeed(seed)
40 pub := prv.Public().Bytes()
41 id := util.EncodeBinaryToString(pub)
42 for _, r := range reg {
43 if r.MatchString(id) {
44 elapsed := time.Now().Sub(start)
45 s1 := hex.EncodeToString(seed)
46 s2 := hex.EncodeToString(prv.D.Bytes())
47 fmt.Printf("%s [%s][%s] (%d tries, %s elapsed)\n", id, s1, s2, i, elapsed)
48 i = 0
49 start = time.Now()
50 }
51 }
52 }
53}