summaryrefslogtreecommitdiff
path: root/appl/cmd/auth
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2008-02-10 21:44:03 +0000
committerCharles.Forsyth <devnull@localhost>2008-02-10 21:44:03 +0000
commit2a8b0ff0deda217f24a02cac2f9402b075fb019f (patch)
treede3708c2049e5e3e9880abde94f106e1cbb9fb96 /appl/cmd/auth
parent8221eca9c386cc14d4cc8e0c7d247a83b11aba18 (diff)
20080210-2150
Diffstat (limited to 'appl/cmd/auth')
-rw-r--r--appl/cmd/auth/dsagen.b62
1 files changed, 62 insertions, 0 deletions
diff --git a/appl/cmd/auth/dsagen.b b/appl/cmd/auth/dsagen.b
new file mode 100644
index 00000000..3e24df2f
--- /dev/null
+++ b/appl/cmd/auth/dsagen.b
@@ -0,0 +1,62 @@
+implement Dsagen;
+
+include "sys.m";
+ sys: Sys;
+
+include "draw.m";
+
+include "keyring.m";
+ kr: Keyring;
+ IPint, DSAsk, DSApk, DSAsig: import kr;
+
+include "arg.m";
+
+Dsagen: module
+{
+ init: fn(nil: ref Draw->Context, nil: list of string);
+};
+
+init(nil: ref Draw->Context, args: list of string)
+{
+ sys = load Sys Sys->PATH;
+ kr = load Keyring Keyring->PATH;
+
+ arg := load Arg Arg->PATH;
+ arg->init(args);
+ arg->setusage("auth/dsagen [-t 'attr=value attr=value ...']");
+ tag: string;
+ while((o := arg->opt()) != 0)
+ case o {
+ 't' =>
+ tag = arg->earg();
+ * =>
+ arg->usage();
+ }
+ args = arg->argv();
+ if(args != nil)
+ arg->usage();
+ arg = nil;
+
+ sk := DSAsk.gen(nil);
+ if(tag != nil)
+ tag = " "+tag;
+ s := add("p", sk.pk.p);
+ s += add("q", sk.pk.q);
+ s += add("alpha", sk.pk.alpha);
+ s += add("key", sk.pk.key);
+ s += add("!secret", sk.secret);
+ a := sys->aprint("key proto=dsa%s%s\n", tag, s);
+ if(sys->write(sys->fildes(1), a, len a) != len a)
+ error(sys->sprint("error writing key: %r"));
+}
+
+error(s: string)
+{
+ sys->fprint(sys->fildes(2), "dsagen: %s\n", s);
+ raise "fail:error";
+}
+
+add(name: string, b: ref IPint): string
+{
+ return " "+name+"="+b.iptostr(16);
+}