-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathvanity-age.go
49 lines (39 loc) · 898 Bytes
/
vanity-age.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main
import (
"fmt"
"os"
"time"
"filippo.io/age"
"github.com/danwakefield/fnmatch"
)
const THREADS = 50
func main() {
if len(os.Args) == 1 {
fmt.Println(
`no query
rules:
* - match anything
? - match any single character
[seq] - match any character in seq
[!seq] - match any character not in seq
age keys are 58 characters long, excluding 'age1'`)
return
}
query := "age1" + os.Args[1]
keyChan := make(chan *age.X25519Identity)
for i := 0; i < THREADS; i++ {
go generate(query, keyChan)
}
key := <-keyChan
fmt.Println("# created:", time.Now().Format(time.RFC3339))
fmt.Println("# public key:", key.Recipient())
fmt.Println(key)
}
func generate(query string, keyChan chan *age.X25519Identity) {
for {
k, _ := age.GenerateX25519Identity()
if fnmatch.Match(query, k.Recipient().String(), fnmatch.FNM_IGNORECASE) {
keyChan <- k
}
}
}