add simple dsa key generator
[epoint] / cmd / genkey / genkey.go
1 package main
2
3 import (
4         "epoint/dsakey"
5         "crypto/openpgp"
6         "log"
7         "os"
8         "time"
9 )
10
11 const usage = "usage: ./genkey name comment email seckeyfile pubkeyfile < seed"
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         if len(os.Args) != 6 {
64                 log.Fatal(usage)
65         }
66         b := make([]byte, 1000)
67         n, err := os.Stdin.Read(b)
68         if err != nil {
69                 log.Print(err)
70                 log.Fatal(usage)
71         }
72         key := dsakey.PrivKey(b[:n])
73         e, err := dsakey.NewEntity(key, time.Seconds(), os.Args[1], os.Args[2], os.Args[3])
74         if err != nil {
75                 log.Fatal(err)
76         }
77         err = serialize(e, os.Args[4], os.Args[5])
78         if err != nil {
79                 log.Fatal(err)
80         }
81 }