Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <mp.h>
5 #include <libsec.h>
7 void
8 usage(void)
9 {
10 fprint(2, "auth/pemdecode section [file]\n");
11 exits("usage");
12 }
14 void
15 main(int argc, char **argv)
16 {
17 char *buf;
18 uchar *bin;
19 int fd;
20 long n, tot;
21 int len;
22 char *tag, *file;
24 ARGBEGIN{
25 default:
26 usage();
27 }ARGEND
29 if(argc != 1 && argc != 2)
30 usage();
32 tag = argv[0];
33 if(argc == 2)
34 file = argv[1];
35 else
36 file = "/dev/stdin";
38 if((fd = open(file, OREAD)) < 0)
39 sysfatal("open %s: %r", file);
40 buf = nil;
41 tot = 0;
42 for(;;){
43 buf = realloc(buf, tot+8192);
44 if(buf == nil)
45 sysfatal("realloc: %r");
46 if((n = read(fd, buf+tot, 8192)) < 0)
47 sysfatal("read: %r");
48 if(n == 0)
49 break;
50 tot += n;
51 }
52 buf[tot] = 0;
53 bin = decodepem(buf, tag, &len, nil);
54 if(bin == nil)
55 sysfatal("cannot extract section '%s' from pem", tag);
56 if((n=write(1, bin, len)) != len)
57 sysfatal("writing %d bytes got %ld: %r", len, n);
58 exits(0);
59 }