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/pemdecode section [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 *buf;
18 57fcfc2a 2005-02-13 devnull uchar *bin;
19 57fcfc2a 2005-02-13 devnull int fd;
20 57fcfc2a 2005-02-13 devnull long n, tot;
21 57fcfc2a 2005-02-13 devnull int len;
22 57fcfc2a 2005-02-13 devnull char *tag, *file;
23 57fcfc2a 2005-02-13 devnull
24 57fcfc2a 2005-02-13 devnull ARGBEGIN{
25 57fcfc2a 2005-02-13 devnull default:
26 57fcfc2a 2005-02-13 devnull usage();
27 57fcfc2a 2005-02-13 devnull }ARGEND
28 57fcfc2a 2005-02-13 devnull
29 57fcfc2a 2005-02-13 devnull if(argc != 1 && argc != 2)
30 57fcfc2a 2005-02-13 devnull usage();
31 57fcfc2a 2005-02-13 devnull
32 57fcfc2a 2005-02-13 devnull tag = argv[0];
33 57fcfc2a 2005-02-13 devnull if(argc == 2)
34 57fcfc2a 2005-02-13 devnull file = argv[1];
35 57fcfc2a 2005-02-13 devnull else
36 57fcfc2a 2005-02-13 devnull file = "/dev/stdin";
37 57fcfc2a 2005-02-13 devnull
38 57fcfc2a 2005-02-13 devnull if((fd = open(file, OREAD)) < 0)
39 57fcfc2a 2005-02-13 devnull sysfatal("open %s: %r", file);
40 57fcfc2a 2005-02-13 devnull buf = nil;
41 57fcfc2a 2005-02-13 devnull tot = 0;
42 57fcfc2a 2005-02-13 devnull for(;;){
43 57fcfc2a 2005-02-13 devnull buf = realloc(buf, tot+8192);
44 57fcfc2a 2005-02-13 devnull if(buf == nil)
45 57fcfc2a 2005-02-13 devnull sysfatal("realloc: %r");
46 57fcfc2a 2005-02-13 devnull if((n = read(fd, buf+tot, 8192)) < 0)
47 57fcfc2a 2005-02-13 devnull sysfatal("read: %r");
48 57fcfc2a 2005-02-13 devnull if(n == 0)
49 57fcfc2a 2005-02-13 devnull break;
50 57fcfc2a 2005-02-13 devnull tot += n;
51 57fcfc2a 2005-02-13 devnull }
52 57fcfc2a 2005-02-13 devnull buf[tot] = 0;
53 57fcfc2a 2005-02-13 devnull bin = decodepem(buf, tag, &len, nil);
54 57fcfc2a 2005-02-13 devnull if(bin == nil)
55 57fcfc2a 2005-02-13 devnull sysfatal("cannot extract section '%s' from pem", tag);
56 57fcfc2a 2005-02-13 devnull if((n=write(1, bin, len)) != len)
57 57fcfc2a 2005-02-13 devnull sysfatal("writing %d bytes got %ld: %r", len, n);
58 57fcfc2a 2005-02-13 devnull exits(0);
59 57fcfc2a 2005-02-13 devnull }