Reputation:
I have subject name of CA certificate in CN=CA1, O=DEVANG
.
I want to convert into X509_NAME
format.
Is there any APIs to help me convert it ? How can I compare ?
Upvotes: 2
Views: 765
Reputation: 17363
There do not seem to be any helper functions available in OpenSSL to do this. It looks like the only way to achieve what you want is by parsing the string and building up the X509_NAME_ENTRY
elements one by one. You could use strsep
for that, resulting in something like this code (which does not do any error checking and is error prone with regard to variations in the name format):
#define TEST_NAME "CN=CA1, O=DEVANG"
X509_NAME *x509name = X509_NAME_new();
char *x509nameString = strdup(TEST_NAME);
char *toFree = x509nameString;
char *x509nameEntryString = strsep(&x509nameString, ",");
char *x509nameEntryTypeString;
char *x509nameEntryValueString;
while (NULL != x509nameEntryString) {
x509nameEntryValueString = x509nameEntryString;
x509nameEntryTypeString = strsep(&x509nameEntryValueString, "=");
X509_NAME_add_entry_by_txt(x509name, x509nameEntryTypeString,
MBSTRING_ASC, x509nameEntryValueString, -1, -1, 0);
/* Need to skip spaces */
while ((NULL != x509nameString) &&
(' ' == *x509nameString)) {
x509nameString = &x509nameString[1];
}
x509nameEntryString = strsep(&x509nameString, ",");
}
/* See the result, just FYI */
X509_NAME_print_ex_fp(stdout, x509name, 0, XN_FLAG_ONELINE);
free(toFree);
For comparing two X509_NAME
instances, the function X509_NAME_cmp()
is available.
I do hope somebody has a better answer...
Upvotes: 1