| #include <u.h> |
| #include <libc.h> |
| #include <bio.h> |
| #include <mp.h> |
| #include <libsec.h> |
| |
| void |
| usage(void) |
| { |
| fprint(2, "auth/pemdecode section [file]\n"); |
| exits("usage"); |
| } |
| |
| void |
| main(int argc, char **argv) |
| { |
| char *buf, *cbuf; |
| int fd; |
| long n, tot; |
| int len; |
| char *tag, *file; |
| |
| ARGBEGIN{ |
| default: |
| usage(); |
| }ARGEND |
| |
| if(argc != 1 && argc != 2) |
| usage(); |
| |
| tag = argv[0]; |
| if(argc == 2) |
| file = argv[1]; |
| else |
| file = "/dev/stdin"; |
| |
| if((fd = open(file, OREAD)) < 0) |
| sysfatal("open %s: %r", file); |
| buf = nil; |
| tot = 0; |
| for(;;){ |
| buf = realloc(buf, tot+8192); |
| if(buf == nil) |
| sysfatal("realloc: %r"); |
| if((n = read(fd, buf+tot, 8192)) < 0) |
| sysfatal("read: %r"); |
| if(n == 0) |
| break; |
| tot += n; |
| } |
| buf[tot] = 0; |
| cbuf = malloc(2*tot); |
| if(cbuf == nil) |
| sysfatal("malloc: %r"); |
| len = enc64(cbuf, 2*tot, (uchar*)buf, tot); |
| print("-----BEGIN %s-----\n", tag); |
| while(len > 0){ |
| print("%.64s\n", cbuf); |
| cbuf += 64; |
| len -= 64; |
| } |
| print("-----END %s-----\n", tag); |
| exits(0); |
| } |