X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=cmd%2Fepoint-client%2Fepoint-client.go;h=71efe93feace8fc34ea565e23af7b2546ea6f9ca;hb=dd462f94be979be4786df4aaafa5264619a11972;hp=71bbe048abe425d6ef6a8e2c18a6ebc5aed69687;hpb=b7259bc293641fbe83e44d0f886cea52b8816769;p=epoint diff --git a/cmd/epoint-client/epoint-client.go b/cmd/epoint-client/epoint-client.go index 71bbe04..71efe93 100644 --- a/cmd/epoint-client/epoint-client.go +++ b/cmd/epoint-client/epoint-client.go @@ -21,12 +21,13 @@ import ( var db *store.Conn -const usage = `usage: ./epoint-client [i|h|d|q|s|v|c] [args..] < [seed|document] +const usage = `usage: ./epoint-client [i|h|d|r|q|s|v|c] [args..] < [seed|document] server is http://localhost:8080 by default i - make issuer key, use seed for generation, args: denomination h - make holder key, use seed for generation, args: issuer d - make draft, use seed for signing key, args: targetid value +r - sign raw document, use seed for signing key, args: document q - query document, args: k|d|c id [server] s - submit a (key|draft|cert) document, args: k|d|c [server] v - verify a document (prints body of the document if ok) @@ -117,7 +118,7 @@ func k(r []byte, cmd, arg string) (err error) { } func d(r []byte, target, value string) (err error) { - v, err := strconv.Atoi64(value) + v, err := strconv.ParseInt(value, 10, 64) if err != nil { return } @@ -173,6 +174,33 @@ func d(r []byte, target, value string) (err error) { return } +// TODO: document.Sign does not handle dash escape +func raw(r []byte, name string) (err error) { + e, err := key.Holder(r, "", "") + if err != nil { + return + } + log.Printf("signer: %s", key.Id(e)) + f, err := os.Open(name) + if err != nil { + return + } + doc, err := readall(f) + if err != nil { + return + } + d, err := document.Sign(doc, e) + if err != nil { + return + } + s, err := document.FormatSigned(d) + if err != nil { + return + } + _, err = os.Stdout.Write(s) + return +} + func q(cmd, id, server string) (err error) { log.Printf("document id: %s, server: %s", id, server) m := map[string]string{ @@ -480,8 +508,9 @@ func storedir() string { return dir } +// read all but at most 1M from r func readall(r io.Reader) ([]byte, error) { - b := make([]byte, 10000) + b := make([]byte, 1<<20) n, err := io.ReadFull(r, b) if err != io.ErrUnexpectedEOF { if err == nil { @@ -519,6 +548,11 @@ func main() { log.Fatal(usage) } err = d(read(), os.Args[2], os.Args[3]) + case "r": + if len(os.Args) != 3 { + log.Fatal(usage) + } + err = raw(read(), os.Args[2]) case "q": cmd := "" id := ""