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, *cbuf;
18 int fd;
19 long n, tot;
20 int len;
21 char *tag, *file;
23 ARGBEGIN{
24 default:
25 usage();
26 }ARGEND
28 if(argc != 1 && argc != 2)
29 usage();
31 tag = argv[0];
32 if(argc == 2)
33 file = argv[1];
34 else
35 file = "/dev/stdin";
37 if((fd = open(file, OREAD)) < 0)
38 sysfatal("open %s: %r", file);
39 buf = nil;
40 tot = 0;
41 for(;;){
42 buf = realloc(buf, tot+8192);
43 if(buf == nil)
44 sysfatal("realloc: %r");
45 if((n = read(fd, buf+tot, 8192)) < 0)
46 sysfatal("read: %r");
47 if(n == 0)
48 break;
49 tot += n;
50 }
51 buf[tot] = 0;
52 cbuf = malloc(2*tot);
53 if(cbuf == nil)
54 sysfatal("malloc: %r");
55 len = enc64(cbuf, 2*tot, (uchar*)buf, tot);
56 print("-----BEGIN %s-----\n", tag);
57 while(len > 0){
58 print("%.64s\n", cbuf);
59 cbuf += 64;
60 len -= 64;
61 }
62 print("-----END %s-----\n", tag);
63 exits(0);
64 }