add function wolfSSL_X509_NAME_ENTRY_create_by_txt

This commit is contained in:
Jacob Barthelmeh
2020-03-05 16:29:55 -07:00
parent a6385a2b48
commit 1035d73a05
4 changed files with 53 additions and 0 deletions

View File

@ -40693,6 +40693,48 @@ err:
}
/* Create a new WOLFSSL_X509_NAME_ENTRY structure based on the text passed
* in. Returns NULL on failure */
WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_create_by_txt(
WOLFSSL_X509_NAME_ENTRY **neIn, const char *txt, int type,
const unsigned char *data, int dataSz)
{
int nid = -1;
WOLFSSL_X509_NAME_ENTRY* ne = NULL;
WOLFSSL_ENTER("wolfSSL_X509_NAME_ENTRY_create_by_txt()");
if (txt == NULL) {
return NULL;
}
if (neIn != NULL) {
ne = *neIn;
}
nid = wolfSSL_OBJ_txt2nid(txt);
if (nid == NID_undef) {
WOLFSSL_MSG("Unable to find text");
}
else {
if (ne == NULL) {
ne = wolfSSL_X509_NAME_ENTRY_new();
if (ne == NULL) {
return NULL;
}
}
ne->nid = nid;
ne->value = wolfSSL_ASN1_STRING_type_new(type);
if (ne->value != NULL) {
wolfSSL_ASN1_STRING_set(ne->value, (const void*)data, dataSz);
ne->set = 1;
}
}
return ne;
}
WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_create_by_NID(
WOLFSSL_X509_NAME_ENTRY** out, int nid, int type,
const unsigned char* data, int dataSz)

View File

@ -24598,6 +24598,12 @@ static void test_wolfSSL_X509_NAME_ENTRY(void)
#endif
X509_NAME_ENTRY_free(entry);
/* Test add entry by text */
AssertNotNull(entry = X509_NAME_ENTRY_create_by_txt(NULL, "commonName",
0x0c, cn, (int)sizeof(cn)));
AssertIntEQ(X509_NAME_add_entry(nm, entry, -1, 0), SSL_SUCCESS);
X509_NAME_ENTRY_free(entry);
/* Test add entry by NID */
AssertIntEQ(X509_NAME_add_entry_by_NID(nm, NID_commonName, MBSTRING_UTF8,
cn, -1, -1, 0), WOLFSSL_SUCCESS);

View File

@ -459,8 +459,10 @@ typedef STACK_OF(ACCESS_DESCRIPTION) AUTHORITY_INFO_ACCESS;
#define X509_NAME_get_text_by_NID wolfSSL_X509_NAME_get_text_by_NID
#define X509_NAME_get_index_by_OBJ wolfSSL_X509_NAME_get_index_by_OBJ
#define X509_NAME_cmp wolfSSL_X509_NAME_cmp
#define X509_NAME_ENTRY_new wolfSSL_X509_NAME_ENTRY_new
#define X509_NAME_ENTRY_free wolfSSL_X509_NAME_ENTRY_free
#define X509_NAME_ENTRY_create_by_NID wolfSSL_X509_NAME_ENTRY_create_by_NID
#define X509_NAME_ENTRY_create_by_txt wolfSSL_X509_NAME_ENTRY_create_by_txt
#define X509_NAME_add_entry wolfSSL_X509_NAME_add_entry
#define X509_NAME_add_entry_by_txt wolfSSL_X509_NAME_add_entry_by_txt
#define X509_NAME_add_entry_by_NID wolfSSL_X509_NAME_add_entry_by_NID

View File

@ -3270,6 +3270,9 @@ WOLFSSL_API long wolfSSL_CTX_clear_extra_chain_certs(WOLFSSL_CTX* ctx);
WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_create_by_NID(
WOLFSSL_X509_NAME_ENTRY** out, int nid, int type,
const unsigned char* data, int dataSz);
WOLFSSL_API WOLFSSL_X509_NAME_ENTRY* wolfSSL_X509_NAME_ENTRY_create_by_txt(
WOLFSSL_X509_NAME_ENTRY **neIn, const char *txt, int format,
const unsigned char *data, int dataSz);
WOLFSSL_API int wolfSSL_X509_NAME_add_entry(WOLFSSL_X509_NAME* name,
WOLFSSL_X509_NAME_ENTRY* entry, int idx, int set);
WOLFSSL_API int wolfSSL_X509_NAME_add_entry_by_txt(WOLFSSL_X509_NAME *name,