From d2d54700d98d819dc7304666a8ecce225fc31389 Mon Sep 17 00:00:00 2001 From: nsz Date: Sat, 7 Jan 2012 21:19:23 +0100 Subject: [PATCH 1/1] epoint-client: raw document signing (without dash escape) --- cmd/epoint-client/epoint-client.go | 38 ++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/cmd/epoint-client/epoint-client.go b/cmd/epoint-client/epoint-client.go index 8a129c6..2931bcb 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) @@ -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 at most 100k func readall(r io.Reader) ([]byte, error) { - b := make([]byte, 10000) + b := make([]byte, 100000) 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 := "" -- 2.20.1