update server and genkey according to new key pkg
[epoint] / cmd / genkey / genkey.go
1 package main
2
3 import (
4         "crypto/openpgp"
5         "epoint/key"
6         "fmt"
7         "log"
8         "os"
9 )
10
11 const usage = "usage: ./genkey [issuer] denomination seckeyfile pubkeyfile < seed > fingerprint"
12
13 func serialize(e *openpgp.Entity, sk, pk string) (err error) {
14         f, err := os.Create(sk)
15         if err != nil {
16                 return
17         }
18         err = e.SerializePrivate(f)
19         if err != nil {
20                 return
21         }
22         err = f.Sync()
23         if err != nil {
24                 return
25         }
26         err = f.Close()
27         if err != nil {
28                 return
29         }
30         // public key
31         f, err = os.Create(pk)
32         if err != nil {
33                 return
34         }
35         /*
36                 // TODO: maybe Serialize should do this internally
37                 for _, ident := range e.Identities {
38                         err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey)
39                         if err != nil {
40                                 return
41                         }
42                 }
43                 for _, subkey := range e.Subkeys {
44                         err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey)
45                         if err != nil {
46                                 return
47                         }
48                 }
49         */
50         err = e.Serialize(f)
51         if err != nil {
52                 return
53         }
54         err = f.Sync()
55         if err != nil {
56                 return
57         }
58         err = f.Close()
59         return
60 }
61
62 func main() {
63         isIssuer := false
64         issuer := ""
65         denom := ""
66         sk := ""
67         pk := ""
68         if len(os.Args) == 4 {
69                 isIssuer = true
70                 denom = os.Args[1]
71                 sk = os.Args[2]
72                 pk = os.Args[3]
73         } else if len(os.Args) == 5 {
74                 issuer = os.Args[1]
75                 denom = os.Args[2]
76                 sk = os.Args[3]
77                 pk = os.Args[4]
78         } else {
79                 log.Fatal(usage)
80         }
81         b := make([]byte, 1000)
82         n, err := os.Stdin.Read(b)
83         if err != nil {
84                 log.Print(err)
85                 log.Fatal(usage)
86         }
87         var e *openpgp.Entity
88         if isIssuer {
89                 e, err = key.Issuer(b[:n], denom)
90         } else {
91                 e, err = key.Holder(b[:n], issuer, denom)
92         }
93         if err != nil {
94                 log.Fatal(err)
95         }
96         err = serialize(e, sk, pk)
97         if err != nil {
98                 log.Fatal(err)
99         }
100         fmt.Fprintf(os.Stdout, "%X\n", e.PrimaryKey.Fingerprint)
101 }