user5023960
user5023960

Reputation:

conversion of subject name into x509_name format

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

Answers (1)

Reinier Torenbeek
Reinier Torenbeek

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

Related Questions