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