Merge pull request #2841 from JacobBarthelmeh/Certs

add function wolfSSL_X509_NAME_ENTRY_create_by_txt
This commit is contained in:
toddouska
2020-03-13 10:17:52 -07:00
committed by GitHub
4 changed files with 59 additions and 0 deletions

View File

@@ -40695,6 +40695,49 @@ 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");
ne = NULL;
}
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,17 @@ 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)));
#if defined(OPENSSL_ALL) || defined(WOLFSSL_ASIO) \
|| defined(WOLFSSL_HAPROXY) || defined(WOLFSSL_NGINX)
AssertNull(X509_NAME_ENTRY_create_by_txt(&entry, "unknown",
V_ASN1_UTF8STRING, cn, (int)sizeof(cn)));
#endif
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,