Mercurial > trustbridge
diff common/certhelp.c @ 259:20d515604daa
Added new module with helper functions to parse certs.
Currently only stuff to get O and CN from Subject DN.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Tue, 01 Apr 2014 15:41:11 +0200 |
parents | |
children | e7a8b70021b6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/certhelp.c Tue Apr 01 15:41:11 2014 +0200 @@ -0,0 +1,45 @@ +#include <stdlib.h> + +#include "certhelp.h" +#include "debug.h" +#include "errorcodes.h" +#include "strhelp.h" + +char * +get_oid_valstr(x509_name *namebuf, unsigned char *oid) +{ + char *str = NULL; + size_t oid_len = strlen((char *)oid); + while ( namebuf != NULL ) + { + if ( (namebuf->oid.len == oid_len) && + (memcmp(namebuf->oid.p, oid, oid_len) == 0) ) + { + str = xstrndup((char *)namebuf->val.p, namebuf->val.len); + break; + } + namebuf = namebuf->next; + } + return str; +} + +char * +x509_parse_subject(unsigned char *derdata, size_t derlen, + unsigned char *oid) +{ + x509_crt chain; + char *str; + + x509_crt_init(&chain); + if (x509_crt_parse_der(&chain, derdata, derlen) != 0) + { + DEBUGPRINTF("FATAL: Could not parse certificate!"); + exit(ERR_INVALID_CERT); + } + else + { + str = get_oid_valstr(&(chain.subject), oid); + x509_crt_free(&chain); + } + return str; +}