Blob


1 #include <u.h>
2 #include <libc.h>
3 #include <auth.h>
4 #include <mp.h>
5 #include <libsec.h>
7 static char*
8 readfile(char *name)
9 {
10 int fd;
11 char *s;
12 Dir *d;
14 fd = open(name, OREAD);
15 if(fd < 0)
16 return nil;
17 if((d = dirfstat(fd)) == nil)
18 return nil;
19 s = malloc(d->length + 1);
20 if(s == nil || readn(fd, s, d->length) != d->length){
21 free(s);
22 free(d);
23 close(fd);
24 return nil;
25 }
26 close(fd);
27 s[d->length] = '\0';
28 free(d);
29 return s;
30 }
32 uchar*
33 readcert(char *filename, int *pcertlen)
34 {
35 char *pem;
36 uchar *binary;
38 pem = readfile(filename);
39 if(pem == nil){
40 werrstr("can't read %s", filename);
41 return nil;
42 }
43 binary = decodepem(pem, "CERTIFICATE", pcertlen, nil);
44 free(pem);
45 if(binary == nil){
46 werrstr("can't parse %s", filename);
47 return nil;
48 }
49 return binary;
50 }
53 PEMChain *
54 readcertchain(char *filename)
55 {
56 char *chfile;
57 PEMChain *chp;
59 chfile = readfile(filename);
60 if (chfile == nil) {
61 werrstr("can't read %s", filename);
62 return nil;
63 }
64 chp = decodepemchain(chfile, "CERTIFICATE");
65 return chp;
66 }