]> Sergey Matveev's repositories - vors.git/blob - cmd/keygen/main.go
d14f1f821fb91632ada403bc044835b220f6cf8ff2c17fe4d48a6ad7c96e0e3c
[vors.git] / cmd / keygen / main.go
1 package main
2
3 import (
4         "crypto/rand"
5         "encoding/base64"
6         "flag"
7         "fmt"
8         "io"
9         "log"
10         "os"
11
12         "github.com/flynn/noise"
13         vors "go.stargrave.org/vors/internal"
14 )
15
16 func main() {
17         pub := flag.Bool("pub", false, "print Base64 public key")
18         version := flag.Bool("version", false, "print version")
19         warranty := flag.Bool("warranty", false, "print warranty information")
20         flag.Parse()
21         if *warranty {
22                 fmt.Println(vors.Warranty)
23                 return
24         }
25         if *version {
26                 fmt.Println(vors.GetVersion())
27                 return
28         }
29         if *pub {
30                 data, err := io.ReadAll(os.Stdin)
31                 if err != nil {
32                         log.Fatal(err)
33                 }
34                 if len(data) != 2*32 {
35                         log.Fatal("wrong length")
36                 }
37                 fmt.Printf("%s\n", base64.RawURLEncoding.EncodeToString(data[32:]))
38                 return
39         }
40         kp, err := noise.DH25519.GenerateKeypair(rand.Reader)
41         if err != nil {
42                 log.Fatal(err)
43         }
44         os.Stdout.Write(kp.Private[:])
45         os.Stdout.Write(kp.Public[:])
46 }