18 const usage = `usage: ./epoint-client [k|d|s|v] [args..] < [seed|document]
19 server is http://localhost:8080 by default
21 k - make key, use seed for generation, args: [issuer] denomination
22 d - make draft, use seed as signing key, args: targetid value
23 s - submit a document, args: k[ey]|d[raft]|c[ert] [server]
24 v - verify a document (prints body of the document if ok)
27 func rnd(n int) (r []byte, err error) {
29 _, err = io.ReadFull(rand.Reader, r)
33 func k(r []byte, issuer, denom string) (err error) {
37 e, err = key.Issuer(r, denom)
39 e, err = key.Holder(r, issuer, denom)
44 w, err := armor.Encode(os.Stdout, openpgp.PublicKeyType, nil)
48 // TODO: maybe Serialize should do this internally
49 for _, ident := range e.Identities {
50 err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey)
55 for _, subkey := range e.Subkeys {
56 err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey)
70 _, err = os.Stdout.Write([]byte{'\n'})
74 func d(r []byte, target, value string) (err error) {
75 v, err := strconv.Atoi64(value)
79 e, err := key.Holder(r, "", "")
83 draft := new(document.Draft)
84 draft.Drawer = key.Id(e)
85 draft.Beneficiary = target
87 draft.Denomination = "" // TODO
88 draft.Issuer = "" // TODO
89 draft.AuthorizedBy = "" // TODO
94 draft.Nonce = fmt.Sprintf("%X", nonce)
95 s, _, err := document.Format(draft, e)
99 _, err = os.Stdout.Write(s)
103 func s(d []byte, cmd, server string) (err error) {
104 m := map[string]string{
111 err = fmt.Errorf("unknown submit command: %s", cmd)
114 resp, err := http.PostForm(server, url.Values{k: {string(d)}})
118 fmt.Printf("%v", resp)
122 func v(d []byte) (err error) {
123 _, s, err := document.Parse(d)
127 _, err = os.Stdout.Write(s.Body)
132 b := make([]byte, 10000)
133 n, err := io.ReadFull(os.Stdin, b)
134 if err != io.ErrUnexpectedEOF {
136 log.Fatal("too much input")
144 if len(os.Args) < 2 {
153 if len(os.Args) == 4 {
156 } else if len(os.Args) == 3 {
161 err = k(read(), issuer, denom)
163 if len(os.Args) != 4 {
166 err = d(read(), os.Args[2], os.Args[3])
168 server := "http://localhost:8080"
170 if len(os.Args) == 4 {
173 } else if len(os.Args) == 3 {
178 err = s(read(), cmd, server+"/submit")
180 if len(os.Args) != 2 {