Blame


1 57fcfc2a 2005-02-13 devnull #include <u.h>
2 57fcfc2a 2005-02-13 devnull #include <libc.h>
3 57fcfc2a 2005-02-13 devnull #include <bio.h>
4 57fcfc2a 2005-02-13 devnull #include <mp.h>
5 57fcfc2a 2005-02-13 devnull #include <libsec.h>
6 57fcfc2a 2005-02-13 devnull
7 57fcfc2a 2005-02-13 devnull void
8 57fcfc2a 2005-02-13 devnull usage(void)
9 57fcfc2a 2005-02-13 devnull {
10 57fcfc2a 2005-02-13 devnull fprint(2, "auth/asn12dsa [-t tag] [file]\n");
11 57fcfc2a 2005-02-13 devnull exits("usage");
12 57fcfc2a 2005-02-13 devnull }
13 57fcfc2a 2005-02-13 devnull
14 57fcfc2a 2005-02-13 devnull void
15 57fcfc2a 2005-02-13 devnull main(int argc, char **argv)
16 57fcfc2a 2005-02-13 devnull {
17 57fcfc2a 2005-02-13 devnull char *s;
18 57fcfc2a 2005-02-13 devnull uchar *buf;
19 57fcfc2a 2005-02-13 devnull int fd;
20 57fcfc2a 2005-02-13 devnull long n, tot;
21 57fcfc2a 2005-02-13 devnull char *tag, *file;
22 57fcfc2a 2005-02-13 devnull DSApriv *key;
23 57fcfc2a 2005-02-13 devnull
24 57fcfc2a 2005-02-13 devnull fmtinstall('B', mpfmt);
25 57fcfc2a 2005-02-13 devnull
26 57fcfc2a 2005-02-13 devnull tag = nil;
27 57fcfc2a 2005-02-13 devnull ARGBEGIN{
28 57fcfc2a 2005-02-13 devnull case 't':
29 57fcfc2a 2005-02-13 devnull tag = EARGF(usage());
30 57fcfc2a 2005-02-13 devnull break;
31 57fcfc2a 2005-02-13 devnull default:
32 57fcfc2a 2005-02-13 devnull usage();
33 57fcfc2a 2005-02-13 devnull }ARGEND
34 57fcfc2a 2005-02-13 devnull
35 57fcfc2a 2005-02-13 devnull if(argc != 0 && argc != 1)
36 57fcfc2a 2005-02-13 devnull usage();
37 57fcfc2a 2005-02-13 devnull
38 57fcfc2a 2005-02-13 devnull if(argc == 1)
39 57fcfc2a 2005-02-13 devnull file = argv[0];
40 57fcfc2a 2005-02-13 devnull else
41 57fcfc2a 2005-02-13 devnull file = "/dev/stdin";
42 57fcfc2a 2005-02-13 devnull
43 57fcfc2a 2005-02-13 devnull if((fd = open(file, OREAD)) < 0)
44 57fcfc2a 2005-02-13 devnull sysfatal("open %s: %r", file);
45 57fcfc2a 2005-02-13 devnull buf = nil;
46 57fcfc2a 2005-02-13 devnull tot = 0;
47 57fcfc2a 2005-02-13 devnull for(;;){
48 57fcfc2a 2005-02-13 devnull buf = realloc(buf, tot+8192);
49 57fcfc2a 2005-02-13 devnull if(buf == nil)
50 57fcfc2a 2005-02-13 devnull sysfatal("realloc: %r");
51 57fcfc2a 2005-02-13 devnull if((n = read(fd, buf+tot, 8192)) < 0)
52 57fcfc2a 2005-02-13 devnull sysfatal("read: %r");
53 57fcfc2a 2005-02-13 devnull if(n == 0)
54 57fcfc2a 2005-02-13 devnull break;
55 57fcfc2a 2005-02-13 devnull tot += n;
56 57fcfc2a 2005-02-13 devnull }
57 57fcfc2a 2005-02-13 devnull
58 57fcfc2a 2005-02-13 devnull key = asn1toDSApriv(buf, tot);
59 57fcfc2a 2005-02-13 devnull if(key == nil)
60 57fcfc2a 2005-02-13 devnull sysfatal("couldn't parse asn1 key");
61 57fcfc2a 2005-02-13 devnull
62 6acff93f 2005-02-13 devnull s = smprint("key proto=dsa %s%sp=%lB q=%lB alpha=%lB key=%lB !secret=%lB\n",
63 57fcfc2a 2005-02-13 devnull tag ? tag : "", tag ? " " : "",
64 57fcfc2a 2005-02-13 devnull key->pub.p, key->pub.q, key->pub.alpha, key->pub.key,
65 57fcfc2a 2005-02-13 devnull key->secret);
66 57fcfc2a 2005-02-13 devnull if(s == nil)
67 57fcfc2a 2005-02-13 devnull sysfatal("smprint: %r");
68 57fcfc2a 2005-02-13 devnull write(1, s, strlen(s));
69 57fcfc2a 2005-02-13 devnull exits(0);
70 57fcfc2a 2005-02-13 devnull }