| #include <u.h> |
| #include <libc.h> |
| #include <auth.h> |
| #include <mp.h> |
| #include <libsec.h> |
| |
| static char* |
| readfile(char *name) |
| { |
| int fd; |
| char *s; |
| Dir *d; |
| |
| fd = open(name, OREAD); |
| if(fd < 0) |
| return nil; |
| if((d = dirfstat(fd)) == nil) |
| return nil; |
| s = malloc(d->length + 1); |
| if(s == nil || readn(fd, s, d->length) != d->length){ |
| free(s); |
| free(d); |
| close(fd); |
| return nil; |
| } |
| close(fd); |
| s[d->length] = '\0'; |
| free(d); |
| return s; |
| } |
| |
| uchar* |
| readcert(char *filename, int *pcertlen) |
| { |
| char *pem; |
| uchar *binary; |
| |
| pem = readfile(filename); |
| if(pem == nil){ |
| werrstr("can't read %s", filename); |
| return nil; |
| } |
| binary = decodepem(pem, "CERTIFICATE", pcertlen, nil); |
| free(pem); |
| if(binary == nil){ |
| werrstr("can't parse %s", filename); |
| return nil; |
| } |
| return binary; |
| } |
| |
| |
| PEMChain * |
| readcertchain(char *filename) |
| { |
| char *chfile; |
| PEMChain *chp; |
| |
| chfile = readfile(filename); |
| if (chfile == nil) { |
| werrstr("can't read %s", filename); |
| return nil; |
| } |
| chp = decodepemchain(chfile, "CERTIFICATE"); |
| return chp; |
| } |
| |