X509_NAME_ENTRY_get_object

This commit is contained in:
Go Hosohara
2018-06-08 14:36:11 +09:00
parent 2922a93bf7
commit e79cdefcde
6 changed files with 122 additions and 54 deletions

View File

@@ -23,14 +23,15 @@
#define BENCH_EMBEDDED #define BENCH_EMBEDDED
#define NO_WRITEV #define NO_WRITEV
#define WOLFSSL_USER_IO #define WOLFSSL_USER_IO
#define CloseSocket close
#define NO_DEV_RANDOM #define NO_DEV_RANDOM
#define USE_CERT_BUFFERS_2048 #define USE_CERT_BUFFERS_2048
#define WOLFSSL_USER_CURRTIME #define WOLFSSL_USER_CURRTIME
#define SIZEOF_LONG_LONG 8 #define SIZEOF_LONG_LONG 8
#define NO_WOLFSSL_DIR #define NO_WOLFSSL_DIR
#define WOLFSSL_NO_CURRDIR #define WOLFSSL_NO_CURRDIR
#define NO_FILESYSTEM
#define WOLFSSL_LOG_PRINTF #define WOLFSSL_LOG_PRINTF
#define NO_FILESYSTEM
/* #define DEBUG_WOLFSSL */ /* #define DEBUG_WOLFSSL */
@@ -83,10 +84,10 @@
#if defined(TIME_OVERRIDES) && defined(HAVE_TM_TYPE) && defined(HAVE_TIME_T_TYPE) #if defined(TIME_OVERRIDES) && defined(HAVE_TM_TYPE) && defined(HAVE_TIME_T_TYPE)
/* #include "time_mng.h" */ /* #include "time_mng.h" */
typedef unsigned long Time_t
#define time_t Time_t #define time_t Time_t
#define WOLFSSL_GMTIME #define WOLFSSL_GMTIME
#define XGTIME gmtime #define XGMTIME gmtime
#define XTIME user_time #define XTIME user_time
struct tm { struct tm {
@@ -94,13 +95,15 @@
int tm_min; int tm_min;
int tm_hour; int tm_hour;
int tm_mday; int tm_mday;
int tm_wday;
int tm_mon; int tm_mon;
int tm_year; int tm_year;
int tm_yday; int tm_yday;
int tm_isdst;
}; };
#endif #endif
#define HAVE_STUNNEL // #define HAVE_STUNNEL
#define KEEP_OUR_CERT #define KEEP_OUR_CERT
#ifdef NO_ASN #ifdef NO_ASN

View File

@@ -19,8 +19,14 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*/ */
#include "../common/user_settings.h" #ifdef HAVE_CONFIG_H
#include "../../../../../wolfssl/wolfcrypt/types.h" #include <config.h>
#endif
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/wolfcrypt/types.h>
#include <wolfssl/wolfcrypt/error-crypt.h>
#include <stdio.h>
//typedef unsigned long time_t; //typedef unsigned long time_t;
@@ -29,20 +35,19 @@
static int tick = 0; static int tick = 0;
time_t time(time_t *t)
{
return ((YEAR-1970)*365+30*MON)*24*60*60 + tick++;
}
#include <ctype.h> #include <ctype.h>
int strncasecmp(const char *s1, const char * s2, unsigned int sz) int strncasecmp(const char *s1, const char *s2, unsigned int sz)
{ {
for( ; sz>0; sz--) for( ; sz>0; sz--)
if(toupper(s1++) != toupper(s2++)) if(toupper(*s1++) != toupper(*s2++))
return 1; return 1;
return 0; return 0;
} }
unsigned long user_time(void){
return ((YEAR-1970)*365+30*MON)*24*60*60 + tick++;
}
char* getenv(const char *env) char* getenv(const char *env)
{ {
if (XSTRNCMP(env, "RANDFILE", 9) == 0) if (XSTRNCMP(env, "RANDFILE", 9) == 0)
@@ -51,3 +56,5 @@ char* getenv(const char *env)
return WOLFSSL_GETENV_HOME; return WOLFSSL_GETENV_HOME;
else return 0; else return 0;
} }
void abort(void){ while(1); }

View File

@@ -29749,12 +29749,19 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
* returns a pointer to a new WOLFSSL_ASN1_OBJECT struct on success and NULL * returns a pointer to a new WOLFSSL_ASN1_OBJECT struct on success and NULL
* on fail * on fail
*/ */
WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj(int id) WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj(int id)
{
return wolfSSL_OBJ_nid2obj_ex(id, NULL);
}
WOLFSSL_LOCAL WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj_ex(int id,
WOLFSSL_ASN1_OBJECT* arg_obj)
{ {
word32 oidSz = 0; word32 oidSz = 0;
const byte* oid; const byte* oid;
word32 type = 0; word32 type = 0;
WOLFSSL_ASN1_OBJECT* obj; WOLFSSL_ASN1_OBJECT* obj = arg_obj;
byte objBuf[MAX_OID_SZ + MAX_LENGTH_SZ + 1]; /* +1 for object tag */ byte objBuf[MAX_OID_SZ + MAX_LENGTH_SZ + 1]; /* +1 for object tag */
word32 objSz = 0; word32 objSz = 0;
const char* sName; const char* sName;
@@ -30169,10 +30176,12 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
oid = OidFromId(id, type, &oidSz); oid = OidFromId(id, type, &oidSz);
/* set object ID to buffer */ /* set object ID to buffer */
obj = wolfSSL_ASN1_OBJECT_new(); if (obj == NULL){
if (obj == NULL) { obj = wolfSSL_ASN1_OBJECT_new();
WOLFSSL_MSG("Issue creating WOLFSSL_ASN1_OBJECT struct"); if (obj == NULL) {
return NULL; WOLFSSL_MSG("Issue creating WOLFSSL_ASN1_OBJECT struct");
return NULL;
}
} }
obj->type = id; obj->type = id;
obj->grp = type; obj->grp = type;
@@ -30185,12 +30194,15 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
objSz += oidSz; objSz += oidSz;
obj->objSz = objSz; obj->objSz = objSz;
obj->obj = (byte*)XMALLOC(obj->objSz, NULL, DYNAMIC_TYPE_ASN1); if(arg_obj == NULL) { /* Dynamic NAME_ENTRY */
if (obj->obj == NULL) { obj->obj = (byte*)XMALLOC(obj->objSz, NULL, DYNAMIC_TYPE_ASN1);
wolfSSL_ASN1_OBJECT_free(obj); if ((obj->obj == NULL) && arg_obj == NULL) {
return NULL; wolfSSL_ASN1_OBJECT_free(obj);
} return NULL;
XMEMCPY(obj->obj, objBuf, obj->objSz); }
XMEMCPY(obj->obj, objBuf, obj->objSz);
} else /* static NAME_ENTR is for just type and grp */
obj->obj = NULL;
(void)type; (void)type;
@@ -30889,15 +30901,13 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
#endif #endif
#ifndef NO_WOLFSSL_STUB
WOLFSSL_ASN1_OBJECT * wolfSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne) { WOLFSSL_ASN1_OBJECT * wolfSSL_X509_NAME_ENTRY_get_object(WOLFSSL_X509_NAME_ENTRY *ne) {
(void)ne;
WOLFSSL_ENTER("wolfSSL_X509_NAME_ENTRY_get_object"); WOLFSSL_ENTER("wolfSSL_X509_NAME_ENTRY_get_object");
WOLFSSL_STUB("X509_NAME_ENTRY_get_object"); if (ne == NULL) return NULL;
wolfSSL_OBJ_nid2obj_ex(ne->nid, &ne->object);
return NULL; return &ne->object;
} }
#endif
WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_get_entry( WOLFSSL_X509_NAME_ENTRY *wolfSSL_X509_NAME_get_entry(
WOLFSSL_X509_NAME *name, int loc) WOLFSSL_X509_NAME *name, int loc)
@@ -30932,7 +30942,6 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
} }
name->cnEntry.data.type = CTC_UTF8; name->cnEntry.data.type = CTC_UTF8;
name->cnEntry.set = 1; name->cnEntry.set = 1;
return &(name->cnEntry);
/* common name index case */ /* common name index case */
} else if (loc == name->fullName.cnIdx) { } else if (loc == name->fullName.cnIdx) {
@@ -30942,9 +30951,11 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl)
name->cnEntry.data.type = CTC_UTF8; name->cnEntry.data.type = CTC_UTF8;
name->cnEntry.nid = ASN_COMMON_NAME; name->cnEntry.nid = ASN_COMMON_NAME;
name->cnEntry.set = 1; name->cnEntry.set = 1;
return &(name->cnEntry);
} }
wolfSSL_OBJ_nid2obj_ex(name->cnEntry.nid, &name->cnEntry.object);
return &name->cnEntry;
/* additionall cases to check for go here */ /* additionall cases to check for go here */
WOLFSSL_MSG("Entry not found or implemented"); WOLFSSL_MSG("Entry not found or implemented");

View File

@@ -141,7 +141,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <wolfssl/ssl.h> /* compatibility layer */ #include <wolfssl/ssl.h> /* compatibility layer */
#include <wolfssl/test.h> #include <wolfssl/test.h>
#include <tests/unit.h> #include <tests/unit.h>
#include "examples/server/server.h" #include "examples/server/server.h"
/* for testing compatibility layer callbacks */ /* for testing compatibility layer callbacks */
@@ -3073,28 +3073,32 @@ static void test_wolfSSL_X509_NAME_get_entry(void)
X509* x509; X509* x509;
ASN1_STRING* asn; ASN1_STRING* asn;
int idx; int idx;
ASN1_OBJECT *object = NULL;
#ifndef NO_FILESYSTEM #ifndef NO_FILESYSTEM
x509 = wolfSSL_X509_load_certificate_file(cliCertFile, WOLFSSL_FILETYPE_PEM); x509 = wolfSSL_X509_load_certificate_file(cliCertFile, WOLFSSL_FILETYPE_PEM);
AssertNotNull(x509); AssertNotNull(x509);
name = X509_get_subject_name(x509); name = X509_get_subject_name(x509);
idx = X509_NAME_get_index_by_NID(name, NID_commonName, -1);
AssertIntGE(idx, 0);
ne = X509_NAME_get_entry(name, idx);
AssertNotNull(ne);
asn = X509_NAME_ENTRY_get_data(ne);
AssertNotNull(asn);
subCN = (char*)ASN1_STRING_data(asn);
AssertNotNull(subCN);
wolfSSL_FreeX509(x509);
#endif
x509 = wolfSSL_X509_load_certificate_file(cliCertFile, WOLFSSL_FILETYPE_PEM);
AssertNotNull(x509);
name = X509_get_subject_name(x509);
idx = X509_NAME_get_index_by_NID(name, NID_commonName, -1); idx = X509_NAME_get_index_by_NID(name, NID_commonName, -1);
AssertIntGE(idx, 0); AssertIntGE(idx, 0);
ne = X509_NAME_get_entry(name, idx); ne = X509_NAME_get_entry(name, idx);
AssertNotNull(ne); AssertNotNull(ne);
AssertNotNull(object = X509_NAME_ENTRY_get_object(ne));
asn = X509_NAME_ENTRY_get_data(ne);
AssertNotNull(asn);
subCN = (char*)ASN1_STRING_data(asn);
AssertNotNull(subCN);
wolfSSL_FreeX509(x509);
#endif
} }
printf(resultFmt, passed); printf(resultFmt, passed);
@@ -13061,7 +13065,7 @@ static int test_wc_ecc_shared_secret (void)
ecc_key key, pubKey; ecc_key key, pubKey;
WC_RNG rng; WC_RNG rng;
int keySz = KEY16; int keySz = KEY16;
byte out[keySz]; byte out[KEY16];
word32 outlen = (word32)sizeof(out); word32 outlen = (word32)sizeof(out);
/* Initialize variables. */ /* Initialize variables. */
@@ -13486,8 +13490,8 @@ static int test_wc_ecc_rs_to_sig (void)
word32 siglen = (word32)sizeof(sig); word32 siglen = (word32)sizeof(sig);
/*R and S max size is the order of curve. 2^192.*/ /*R and S max size is the order of curve. 2^192.*/
int keySz = KEY24; int keySz = KEY24;
byte r[keySz]; byte r[KEY24];
byte s[keySz]; byte s[KEY24];
word32 rlen = (word32)sizeof(r); word32 rlen = (word32)sizeof(r);
word32 slen = (word32)sizeof(s); word32 slen = (word32)sizeof(s);
@@ -14207,7 +14211,7 @@ static int test_wc_ecc_shared_secret_ssh (void)
WC_RNG rng; WC_RNG rng;
int keySz = KEY32; int keySz = KEY32;
int key2Sz = KEY24; int key2Sz = KEY24;
byte secret[keySz]; byte secret[KEY32];
word32 secretLen = keySz; word32 secretLen = keySz;
/* Init stack variables. */ /* Init stack variables. */
@@ -19748,7 +19752,7 @@ static void test_wolfSSL_ASN1_TIME_to_generalizedtime(void){
} }
static void test_wolfSSL_X509_CA_num(void){ static void test_wolfSSL_X509_CA_num(void){
#if defined(OPENSSL_EXTRA) && !defined(NO_CERT) #if defined(OPENSSL_EXTRA) && !defined(NO_CERT) && !defined(NO_FILESYSTEM)
WOLFSSL_X509_STORE *store; WOLFSSL_X509_STORE *store;
WOLFSSL_X509 *x509_1, *x509_2; WOLFSSL_X509 *x509_1, *x509_2;
int ca_num = 0; int ca_num = 0;
@@ -19774,7 +19778,7 @@ static void test_wolfSSL_X509_CA_num(void){
} }
static void test_wolfSSL_X509_check_ca(void){ static void test_wolfSSL_X509_check_ca(void){
#if defined(OPENSSL_EXTRA) && !defined(NO_RSA) #if defined(OPENSSL_EXTRA) && !defined(NO_RSA) && !defined(NO_FILESYSTEM)
WOLFSSL_X509 *x509; WOLFSSL_X509 *x509;
x509 = wolfSSL_X509_load_certificate_file(svrCertFile, WOLFSSL_FILETYPE_PEM); x509 = wolfSSL_X509_load_certificate_file(svrCertFile, WOLFSSL_FILETYPE_PEM);
@@ -21006,7 +21010,44 @@ static void test_wolfSSL_X509_CRL(void)
return; return;
} }
static void test_wolfSSL_i2c_ASN1_INTEGER(void) static void test_wolfSSL_PEM_read_X509(void)
{
#if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM)
X509 *x509 = NULL;
XFILE fp;
AssertNotNull(fp = XFOPEN(svrCertFile, "rb"));
AssertNotNull(x509 = (X509 *)PEM_read_X509(fp, (X509 **)NULL, NULL, NULL));
X509_free(x509);
XFCLOSE(fp);
#endif
}
static void test_wolfSSL_X509_NAME_ENTRY_get_object()
{
#if defined(OPENSSL_EXTRA) && !defined(NO_FILESYSTEM)
X509 *x509 = NULL;
X509_NAME* name = NULL;
int idx = 0;
X509_NAME_ENTRY *ne = NULL;
ASN1_OBJECT *object = NULL;
x509 = wolfSSL_X509_load_certificate_file(cliCertFile, WOLFSSL_FILETYPE_PEM);
AssertNotNull(x509);
name = X509_get_subject_name(x509);
idx = X509_NAME_get_index_by_NID(name, NID_commonName, -1);
AssertIntGE(idx, 0);
ne = X509_NAME_get_entry(name, idx);
AssertNotNull(ne);
AssertNotNull(object = X509_NAME_ENTRY_get_object(ne));
X509_free(x509);
#endif
}
static void test_wolfSSL_i2c_ASN1_INTEGER()
{ {
#if defined(OPENSSL_EXTRA) && !defined(NO_ASN) #if defined(OPENSSL_EXTRA) && !defined(NO_ASN)
ASN1_INTEGER *a; ASN1_INTEGER *a;
@@ -21271,6 +21312,8 @@ void ApiTest(void)
test_wolfSSL_SHA256(); test_wolfSSL_SHA256();
test_wolfSSL_X509_get_serialNumber(); test_wolfSSL_X509_get_serialNumber();
test_wolfSSL_X509_CRL(); test_wolfSSL_X509_CRL();
test_wolfSSL_PEM_read_X509();
test_wolfSSL_X509_NAME_ENTRY_get_object();
test_wolfSSL_OPENSSL_add_all_algorithms(); test_wolfSSL_OPENSSL_add_all_algorithms();
test_wolfSSL_ASN1_STRING_print_ex(); test_wolfSSL_ASN1_STRING_print_ex();
test_wolfSSL_ASN1_TIME_to_generalizedtime(); test_wolfSSL_ASN1_TIME_to_generalizedtime();

View File

@@ -539,6 +539,7 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
#define PEM_read_bio_X509 wolfSSL_PEM_read_bio_X509 #define PEM_read_bio_X509 wolfSSL_PEM_read_bio_X509
#define PEM_read_bio_X509_AUX wolfSSL_PEM_read_bio_X509_AUX #define PEM_read_bio_X509_AUX wolfSSL_PEM_read_bio_X509_AUX
#define PEM_read_X509_CRL wolfSSL_PEM_read_X509_CRL #define PEM_read_X509_CRL wolfSSL_PEM_read_X509_CRL
#define PEM_read_X509 wolfSSL_PEM_read_X509
/*#if OPENSSL_API_COMPAT < 0x10100000L*/ /*#if OPENSSL_API_COMPAT < 0x10100000L*/
#define CONF_modules_free() #define CONF_modules_free()
@@ -957,6 +958,8 @@ typedef WOLFSSL_ASN1_BIT_STRING ASN1_BIT_STRING;
#define SSL_CTX_set_srp_username wolfSSL_CTX_set_srp_username #define SSL_CTX_set_srp_username wolfSSL_CTX_set_srp_username
#define OPENSSL_add_all_algorithms_noconf wolfSSL_OPENSSL_add_all_alogrithms_noconf #define OPENSSL_add_all_algorithms_noconf wolfSSL_OPENSSL_add_all_alogrithms_noconf
#define i2c_ASN1_INTEGER wolfSSL_i2c_ASN1_INTEGER #define i2c_ASN1_INTEGER wolfSSL_i2c_ASN1_INTEGER
#define X509_NAME_ENTRY_get_object wolfSSL_X509_NAME_ENTRY_get_object
#define ERR_NUM_ERRORS 16 #define ERR_NUM_ERRORS 16
#define EVP_PKEY_RSA 6 #define EVP_PKEY_RSA 6

View File

@@ -2531,7 +2531,7 @@ WOLFSSL_API int wolfSSL_accept_ex(WOLFSSL*, HandShakeCallBack, TimeoutCallBack,
#include <wolfssl/openssl/asn1.h> #include <wolfssl/openssl/asn1.h>
struct WOLFSSL_X509_NAME_ENTRY { struct WOLFSSL_X509_NAME_ENTRY {
WOLFSSL_ASN1_OBJECT* object; /* not defined yet */ WOLFSSL_ASN1_OBJECT object; /* static object just for keeping grp, type */
WOLFSSL_ASN1_STRING data; WOLFSSL_ASN1_STRING data;
WOLFSSL_ASN1_STRING* value; /* points to data, for lighttpd port */ WOLFSSL_ASN1_STRING* value; /* points to data, for lighttpd port */
int nid; /* i.e. ASN_COMMON_NAME */ int nid; /* i.e. ASN_COMMON_NAME */
@@ -2571,6 +2571,7 @@ WOLFSSL_API char* wolfSSL_OBJ_nid2ln(int n);
WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn); WOLFSSL_API int wolfSSL_OBJ_txt2nid(const char *sn);
WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj(int n); WOLFSSL_API WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj(int n);
WOLFSSL_LOCAL WOLFSSL_ASN1_OBJECT* wolfSSL_OBJ_nid2obj_ex(int n, WOLFSSL_ASN1_OBJECT *arg_obj);
WOLFSSL_API int wolfSSL_OBJ_obj2txt(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a, int no_name); WOLFSSL_API int wolfSSL_OBJ_obj2txt(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a, int no_name);
WOLFSSL_API void wolfSSL_OBJ_cleanup(void); WOLFSSL_API void wolfSSL_OBJ_cleanup(void);