1*8ccd4a63SDavid du Colombier #include <u.h> 2*8ccd4a63SDavid du Colombier #include <libc.h> 3*8ccd4a63SDavid du Colombier #include <mp.h> 4*8ccd4a63SDavid du Colombier #include <libsec.h> 5*8ccd4a63SDavid du Colombier 6*8ccd4a63SDavid du Colombier static char* readfile(char * name)7*8ccd4a63SDavid du Colombierreadfile(char *name) 8*8ccd4a63SDavid du Colombier { 9*8ccd4a63SDavid du Colombier int fd; 10*8ccd4a63SDavid du Colombier char *s; 11*8ccd4a63SDavid du Colombier Dir *d; 12*8ccd4a63SDavid du Colombier 13*8ccd4a63SDavid du Colombier fd = open(name, OREAD); 14*8ccd4a63SDavid du Colombier if(fd < 0) 15*8ccd4a63SDavid du Colombier return nil; 16*8ccd4a63SDavid du Colombier if((d = dirfstat(fd)) == nil) 17*8ccd4a63SDavid du Colombier return nil; 18*8ccd4a63SDavid du Colombier s = malloc(d->length + 1); 19*8ccd4a63SDavid du Colombier if(s == nil || readn(fd, s, d->length) != d->length){ 20*8ccd4a63SDavid du Colombier free(s); 21*8ccd4a63SDavid du Colombier free(d); 22*8ccd4a63SDavid du Colombier close(fd); 23*8ccd4a63SDavid du Colombier return nil; 24*8ccd4a63SDavid du Colombier } 25*8ccd4a63SDavid du Colombier close(fd); 26*8ccd4a63SDavid du Colombier s[d->length] = '\0'; 27*8ccd4a63SDavid du Colombier free(d); 28*8ccd4a63SDavid du Colombier return s; 29*8ccd4a63SDavid du Colombier } 30*8ccd4a63SDavid du Colombier 31*8ccd4a63SDavid du Colombier uchar* readcert(char * filename,int * pcertlen)32*8ccd4a63SDavid du Colombierreadcert(char *filename, int *pcertlen) 33*8ccd4a63SDavid du Colombier { 34*8ccd4a63SDavid du Colombier char *pem; 35*8ccd4a63SDavid du Colombier uchar *binary; 36*8ccd4a63SDavid du Colombier 37*8ccd4a63SDavid du Colombier pem = readfile(filename); 38*8ccd4a63SDavid du Colombier if(pem == nil){ 39*8ccd4a63SDavid du Colombier werrstr("can't read %s", filename); 40*8ccd4a63SDavid du Colombier return nil; 41*8ccd4a63SDavid du Colombier } 42*8ccd4a63SDavid du Colombier binary = decodepem(pem, "CERTIFICATE", pcertlen); 43*8ccd4a63SDavid du Colombier free(pem); 44*8ccd4a63SDavid du Colombier if(binary == nil){ 45*8ccd4a63SDavid du Colombier werrstr("can't parse %s", filename); 46*8ccd4a63SDavid du Colombier return nil; 47*8ccd4a63SDavid du Colombier } 48*8ccd4a63SDavid du Colombier return binary; 49*8ccd4a63SDavid du Colombier } 50*8ccd4a63SDavid du Colombier 51