Updates for TKernel port (WOLFSSL_uTKERNEL2). Added support for InterNiche prconnect_pro using WOLFSSL_PRCONNECT_PRO. Cleanup the min/max functions. Add NO_STDIO_FGETS_REMAP to not include the fgets remap for WOLFSSL_uTKERNEL2. Fix TFM build warning. Added HAVE_POCO_LIB. Added wolfCrypt test temp cert path for WOLFSSL_uTKERNEL2 = /uda/. Added WOLFSSL_CURRTIME_REMAP for benchmark to allow different function name to be used for system which have a conflicting name. Add ability to use normal malloc/free with WOLFSSL_uTKERNEL2 using NO_TKERNEL_MEM_POOL. Added new XMALLOC_OVERRIDE to allow custom XMALLOC/XFREE/XREALLOC macros. Move CUSTOM_RAND_GENERATE up in RNG choices. Rename tls.c STK macros due to conflict.

This commit is contained in:
David Garske 2017-03-28 19:10:19 -07:00
parent 14efd9735d
commit 75abeaecfc
15 changed files with 152 additions and 122 deletions

View File

@ -2681,6 +2681,7 @@ static int SetAuthKeys(OneTimeAuth* authentication, Keys* keys,
if (authentication)
authentication->setup = 1;
#endif
(void)authentication;
(void)heap;
(void)keys;
(void)specs;

View File

@ -94,17 +94,6 @@
#endif
#if defined(WOLFSSL_DTLS) && !defined(WOLFSSL_HAVE_MAX)
#define WOLFSSL_HAVE_MAX
static INLINE word32 max(word32 a, word32 b)
{
return a > b ? a : b;
}
#endif /* WOLFSSL_DTLS && !WOLFSSL_HAVE_MAX */
#ifndef WOLFSSL_LEANPSK
char* mystrnstr(const char* s1, const char* s2, unsigned int n)
{
@ -12577,7 +12566,7 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md)
cert = (DecodedCert*)XMALLOC(sizeof(DecodedCert), NULL,
DYNAMIC_TYPE_TMP_BUFFER);
if (cert == NULL)
return NULL;
return MEMORY_E;
#endif
/* Create a DecodedCert object and copy fields into WOLFSSL_X509 object.
@ -16540,6 +16529,8 @@ int wolfSSL_BN_mod_exp(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
}
WOLFSSL_LEAVE("wolfSSL_BN_mod_exp", ret);
(void)ret;
return SSL_FAILURE;
}
@ -21199,6 +21190,7 @@ WOLFSSL_X509* wolfSSL_get_chain_X509(WOLFSSL_X509_CHAIN* chain, int idx)
#endif
}
}
(void)ret;
return x509;
}
@ -21568,16 +21560,16 @@ void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl)
}
#endif /* ifndef NO_CERTS */
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || defined(OPENSSL_EXTRA)
#ifndef NO_CERTS
void wolfSSL_X509_NAME_free(WOLFSSL_X509_NAME *name){
FreeX509Name(name, NULL);
WOLFSSL_ENTER("wolfSSL_X509_NAME_free");
}
#endif /* NO_CERTS */
#endif
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX)
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || \
defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || \
defined(HAVE_POCO_LIB)
unsigned char *wolfSSL_SHA1(const unsigned char *d, size_t n, unsigned char *md)
{
@ -21772,8 +21764,8 @@ void* wolfSSL_GetRsaDecCtx(WOLFSSL* ssl)
return NULL;
}
#endif /* HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE || HAVE_STUNNEL */
#endif
#endif /* HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE || HAVE_STUNNEL || WOLFSSL_NGINX || HAVE_POCO_LIB */
#endif /* OPENSSL_EXTRA */
#ifdef OPENSSL_EXTRA

View File

@ -3564,19 +3564,19 @@ int TLSX_UseSessionTicket(TLSX** extensions, SessionTicket* ticket, void* heap)
return SSL_SUCCESS;
}
#define STK_VALIDATE_REQUEST TLSX_SessionTicket_ValidateRequest
#define STK_GET_SIZE TLSX_SessionTicket_GetSize
#define STK_WRITE TLSX_SessionTicket_Write
#define STK_PARSE TLSX_SessionTicket_Parse
#define STK_FREE(stk, heap) TLSX_SessionTicket_Free((SessionTicket*)stk,(heap))
#define WOLF_STK_VALIDATE_REQUEST TLSX_SessionTicket_ValidateRequest
#define WOLF_STK_GET_SIZE TLSX_SessionTicket_GetSize
#define WOLF_STK_WRITE TLSX_SessionTicket_Write
#define WOLF_STK_PARSE TLSX_SessionTicket_Parse
#define WOLF_STK_FREE(stk, heap) TLSX_SessionTicket_Free((SessionTicket*)stk,(heap))
#else
#define STK_FREE(a, b)
#define STK_VALIDATE_REQUEST(a)
#define STK_GET_SIZE(a, b) 0
#define STK_WRITE(a, b, c) 0
#define STK_PARSE(a, b, c, d) 0
#define WOLF_STK_FREE(a, b)
#define WOLF_STK_VALIDATE_REQUEST(a)
#define WOLF_STK_GET_SIZE(a, b) 0
#define WOLF_STK_WRITE(a, b, c) 0
#define WOLF_STK_PARSE(a, b, c, d) 0
#endif /* HAVE_SESSION_TICKET */
@ -4229,7 +4229,7 @@ void TLSX_FreeAll(TLSX* list, void* heap)
break;
case TLSX_SESSION_TICKET:
STK_FREE(extension->data, heap);
WOLF_STK_FREE(extension->data, heap);
break;
case TLSX_QUANTUM_SAFE_HYBRID:
@ -4310,7 +4310,7 @@ static word16 TLSX_GetSize(TLSX* list, byte* semaphore, byte isRequest)
break;
case TLSX_SESSION_TICKET:
length += STK_GET_SIZE((SessionTicket*)extension->data,
length += WOLF_STK_GET_SIZE((SessionTicket*)extension->data,
isRequest);
break;
@ -4393,7 +4393,7 @@ static word16 TLSX_Write(TLSX* list, byte* output, byte* semaphore,
break;
case TLSX_SESSION_TICKET:
offset += STK_WRITE((SessionTicket*)extension->data,
offset += WOLF_STK_WRITE((SessionTicket*)extension->data,
output + offset, isRequest);
break;
@ -4797,7 +4797,7 @@ word16 TLSX_GetRequestSize(WOLFSSL* ssl)
EC_VALIDATE_REQUEST(ssl, semaphore);
QSH_VALIDATE_REQUEST(ssl, semaphore);
STK_VALIDATE_REQUEST(ssl);
WOLF_STK_VALIDATE_REQUEST(ssl);
if (ssl->extensions)
length += TLSX_GetSize(ssl->extensions, semaphore, 1);
@ -4832,7 +4832,7 @@ word16 TLSX_WriteRequest(WOLFSSL* ssl, byte* output)
offset += OPAQUE16_LEN; /* extensions length */
EC_VALIDATE_REQUEST(ssl, semaphore);
STK_VALIDATE_REQUEST(ssl);
WOLF_STK_VALIDATE_REQUEST(ssl);
QSH_VALIDATE_REQUEST(ssl, semaphore);
if (ssl->extensions)
@ -5031,7 +5031,7 @@ int TLSX_Parse(WOLFSSL* ssl, byte* input, word16 length, byte isRequest,
case TLSX_SESSION_TICKET:
WOLFSSL_MSG("Session Ticket extension received");
ret = STK_PARSE(ssl, input + offset, size, isRequest);
ret = WOLF_STK_PARSE(ssl, input + offset, size, isRequest);
break;
case TLSX_QUANTUM_SAFE_HYBRID:

View File

@ -233,8 +233,11 @@ void bench_ntruKeyGen(void);
void bench_rng(void);
#endif /* WC_NO_RNG */
double current_time(int);
#ifdef WOLFSSL_CURRTIME_REMAP
#define current_time WOLFSSL_CURRTIME_REMAP
#else
double current_time(int);
#endif
#if defined(DEBUG_WOLFSSL) && !defined(HAVE_VALGRIND)
WOLFSSL_API int wolfSSL_Debugging_ON();
@ -2592,8 +2595,9 @@ void bench_ed25519KeySign(void)
return ( ns / CLOCK * 2.0);
}
#elif defined(WOLFSSL_IAR_ARM_TIME) || defined (WOLFSSL_MDK_ARM) || defined(WOLFSSL_USER_CURRTIME)
/* declared above at line 189 */
#elif defined(WOLFSSL_IAR_ARM_TIME) || defined (WOLFSSL_MDK_ARM) || \
defined(WOLFSSL_USER_CURRTIME) || defined(WOLFSSL_CURRTIME_REMAP)
/* declared above at line 239 */
/* extern double current_time(int reset); */
#elif defined FREERTOS

View File

@ -8258,7 +8258,7 @@ static int WriteCertReqBody(DerCert* der, byte* buffer)
/* extensions */
if (der->extensionsSz) {
XMEMCPY(buffer + idx, der->extensions, min(der->extensionsSz,
sizeof(der->extensions)));
(int)sizeof(der->extensions)));
idx += der->extensionsSz;
}

View File

@ -216,21 +216,32 @@ STATIC INLINE int ConstantCompare(const byte* a, const byte* b, int length)
return compareSum;
}
#ifndef WOLFSSL_HAVE_MIN
#define WOLFSSL_HAVE_MIN
#if defined(HAVE_FIPS) && !defined(min)
#if defined(HAVE_FIPS) && !defined(min) /* so ifdef check passes */
#define min min
#endif
STATIC INLINE word32 min(word32 a, word32 b)
{
return a > b ? b : a;
}
#endif /* WOLFSSL_HAVE_MIN */
#endif /* !WOLFSSL_HAVE_MIN */
#ifndef WOLFSSL_HAVE_MAX
#define WOLFSSL_HAVE_MAX
#if defined(HAVE_FIPS) && !defined(max) /* so ifdef check passes */
#define max max
#endif
STATIC INLINE word32 max(word32 a, word32 b)
{
return a > b ? a : b;
}
#endif /* !WOLFSSL_HAVE_MAX */
#undef STATIC
#endif /* !WOLFSSL_MISC_INCLUDED && !NO_INLINE */
#endif /* WOLF_CRYPT_MISC_C */

View File

@ -1170,6 +1170,38 @@ static int wc_GenerateRand_IntelRD(OS_Seed* os, byte* output, word32 sz)
return CUSTOM_RAND_GENERATE_SEED_OS(os, output, sz);
}
#elif defined(CUSTOM_RAND_GENERATE)
/* Implement your own random generation function
* word32 rand_gen(void);
* #define CUSTOM_RAND_GENERATE rand_gen */
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
{
word32 i = 0;
(void)os;
while (i < sz)
{
/* If not aligned or there is odd/remainder */
if( (i + sizeof(CUSTOM_RAND_TYPE)) > sz ||
((wolfssl_word)&output[i] % sizeof(CUSTOM_RAND_TYPE)) != 0
) {
/* Single byte at a time */
output[i++] = (byte)CUSTOM_RAND_GENERATE();
}
else {
/* Use native 8, 16, 32 or 64 copy instruction */
*((CUSTOM_RAND_TYPE*)&output[i]) = CUSTOM_RAND_GENERATE();
i += sizeof(CUSTOM_RAND_TYPE);
}
}
return 0;
}
#elif defined(WOLFSSL_SGX)
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
@ -1392,7 +1424,7 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
return RAN_BLOCK_E;
}
}
#elif defined(FREESCALE_KSDK_2_0_RNGA)
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
@ -1626,40 +1658,9 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
return 0;
}
#elif defined(CUSTOM_RAND_GENERATE)
/* Implement your own random generation function
* word32 rand_gen(void);
* #define CUSTOM_RAND_GENERATE rand_gen */
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
{
word32 i = 0;
(void)os;
while (i < sz)
{
/* If not aligned or there is odd/remainder */
if( (i + sizeof(CUSTOM_RAND_TYPE)) > sz ||
((wolfssl_word)&output[i] % sizeof(CUSTOM_RAND_TYPE)) != 0
) {
/* Single byte at a time */
output[i++] = (byte)CUSTOM_RAND_GENERATE();
}
else {
/* Use native 8, 16, 32 or 64 copy instruction */
*((CUSTOM_RAND_TYPE*)&output[i]) = CUSTOM_RAND_GENERATE();
i += sizeof(CUSTOM_RAND_TYPE);
}
}
return 0;
}
#elif defined(WOLFSSL_ATMEL)
#include <wolfssl/wolfcrypt/port/atmel/atmel.h>
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
{
int ret = 0;

View File

@ -2741,10 +2741,8 @@ int mp_rand_prime(mp_int* N, int len, WC_RNG* rng, void* heap)
switch(err) {
case FP_VAL:
return MP_VAL;
break;
case FP_MEM:
return MP_MEM;
break;
default:
break;
}

View File

@ -778,7 +778,7 @@ int wolfSSL_CryptHwMutexUnLock(void) {
int wc_FreeMutex(wolfSSL_Mutex* m)
{
tk_del_sem( m->id );
tk_del_sem(m->id);
return 0;
}
@ -796,9 +796,12 @@ int wolfSSL_CryptHwMutexUnLock(void) {
/**** uT-Kernel malloc/free ***/
static ID ID_wolfssl_MPOOL = 0;
static T_CMPL wolfssl_MPOOL =
{(void *)NULL,
TA_TFIFO , 0, "wolfSSL_MPOOL"};
static T_CMPL wolfssl_MPOOL = {
NULL, /* Extended information */
TA_TFIFO, /* Memory pool attribute */
0, /* Size of whole memory pool (byte) */
"wolfSSL" /* Object name (max 8-char) */
};
int uTKernel_init_mpool(unsigned int sz) {
ER ercd;
@ -808,7 +811,7 @@ int wolfSSL_CryptHwMutexUnLock(void) {
ID_wolfssl_MPOOL = ercd;
return 0;
} else {
return -1;
return (int)ercd;
}
}
@ -826,7 +829,7 @@ int wolfSSL_CryptHwMutexUnLock(void) {
void *uTKernel_realloc(void *p, unsigned int sz) {
ER ercd;
void *newp;
if(p) {
if (p) {
ercd = tk_get_mpl(ID_wolfssl_MPOOL, sz, (VP)&newp, TMO_FEVR);
if (ercd == E_OK) {
XMEMCPY(newp, p, sz);

View File

@ -5277,6 +5277,9 @@ byte GetEntropy(ENTROPY_CMD cmd, byte* out)
#elif defined(WOLFSSL_MKD_SHELL)
#define CERT_PREFIX ""
#define CERT_PATH_SEP "/"
#elif defined(WOLFSSL_uTKERNEL2)
#define CERT_PREFIX "/uda/"
#define CERT_PATH_SEP "/"
#else
#define CERT_PREFIX "./"
#define CERT_PATH_SEP "/"
@ -6106,7 +6109,7 @@ int rsa_test(void)
tmp = (byte*)XMALLOC(FOURK_BUF, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
if (tmp == NULL)
return -40;
return -38;
#ifdef USE_CERT_BUFFERS_1024
XMEMCPY(tmp, client_key_der_1024, sizeof_client_key_der_1024);

View File

@ -90,6 +90,14 @@
#include <netdb.h>
#include <netinet/in.h>
#include <io.h>
#elif defined(WOLFSSL_PRCONNECT_PRO)
#include <prconnect_pro/prconnect_pro.h>
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
#include <fcntl.h>
#include <netdb.h>
#include <sys/ioctl.h>
#elif !defined(WOLFSSL_NO_SOCK)
#include <sys/types.h>
#include <errno.h>

View File

@ -471,9 +471,9 @@ typedef WOLFSSL_X509_STORE_CTX X509_STORE_CTX;
/* Lighthttp compatibility */
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) \
|| defined(HAVE_STUNNEL) \
|| defined(WOLFSSL_NGINX)
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) || \
defined(HAVE_STUNNEL) || defined(WOLFSSL_NGINX) || \
defined(HAVE_POCO_LIB)
typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
#define X509_NAME_free wolfSSL_X509_NAME_free
@ -501,11 +501,6 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
#define SSL_dup_CA_list wolfSSL_dup_CA_list
#define NID_commonName 0x03 /* matchs ASN_COMMON_NAME in asn.h */
#endif
#if defined(HAVE_LIGHTY) || defined(WOLFSSL_MYSQL_COMPATIBLE) \
|| defined(HAVE_STUNNEL) \
|| defined(WOLFSSL_NGINX)
#define OBJ_nid2ln wolfSSL_OBJ_nid2ln
#define OBJ_txt2nid wolfSSL_OBJ_txt2nid
@ -513,7 +508,8 @@ typedef WOLFSSL_X509_NAME_ENTRY X509_NAME_ENTRY;
#define PEM_read_bio_DSAparams wolfSSL_PEM_read_bio_DSAparams
#define PEM_write_bio_X509 wolfSSL_PEM_write_bio_X509
#endif /* HAVE_STUNNEL || HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE || WOLFSSL_NGINX */
#endif /* HAVE_STUNNEL || HAVE_LIGHTY || WOLFSSL_MYSQL_COMPATIBLE || WOLFSSL_NGINX || HAVE_POCO_LIB */
#define SSL_CTX_set_tmp_dh wolfSSL_CTX_set_tmp_dh
#define BIO_new_file wolfSSL_BIO_new_file

View File

@ -68,12 +68,20 @@ void ByteReverseWords64(word64*, const word64*, word32);
#endif /* WORD64_AVAILABLE */
#ifndef WOLFSSL_HAVE_MIN
#if defined(HAVE_FIPS) && !defined(min)
#if defined(HAVE_FIPS) && !defined(min) /* so ifdef check passes */
#define min min
#endif
WOLFSSL_LOCAL word32 min(word32 a, word32 b);
#endif
#ifndef WOLFSSL_HAVE_MAX
#if defined(HAVE_FIPS) && !defined(max) /* so ifdef check passes */
#define max max
#endif
WOLFSSL_LOCAL word32 max(word32 a, word32 b);
#endif /* WOLFSSL_HAVE_MAX */
#endif /* NO_INLINE */

View File

@ -460,36 +460,38 @@ extern void uITRON4_free(void *p) ;
#endif
#if defined(WOLFSSL_uTKERNEL2)
#define WOLFSSL_CLOSESOCKET
#define XMALLOC_USER
int uTKernel_init_mpool(unsigned int sz) ; /* initializing malloc pool */
void *uTKernel_malloc(unsigned int sz) ;
void *uTKernel_realloc(void *p, unsigned int sz) ;
void uTKernel_free(void *p) ;
#define XMALLOC(s, h, type) uTKernel_malloc((s))
#define XREALLOC(p, n, h, t) uTKernel_realloc((p), (n))
#define XFREE(p, h, type) uTKernel_free((p))
#ifndef NO_TKERNEL_MEM_POOL
#define XMALLOC_OVERRIDE
int uTKernel_init_mpool(unsigned int sz); /* initializing malloc pool */
void* uTKernel_malloc(unsigned int sz);
void* uTKernel_realloc(void *p, unsigned int sz);
void uTKernel_free(void *p);
#define XMALLOC(s, h, type) uTKernel_malloc((s))
#define XREALLOC(p, n, h, t) uTKernel_realloc((p), (n))
#define XFREE(p, h, type) uTKernel_free((p))
#endif
#include <stdio.h>
#include "tm/tmonitor.h"
static char *fgets(char *buff, int sz, FILE *fp)
/*static char * gets(char *buff)*/
{
char * p = buff ;
*p = '\0' ;
while(1) {
*p = tm_getchar(-1) ;
tm_putchar(*p) ;
if(*p == '\r') {
tm_putchar('\n') ;
*p = '\0' ;
break ;
#ifndef NO_STDIO_FGETS_REMAP
#include <stdio.h>
#include "tm/tmonitor.h"
/* static char* gets(char *buff); */
static char* fgets(char *buff, int sz, FILE *fp) {
char * p = buff;
*p = '\0';
while (1) {
*p = tm_getchar(-1);
tm_putchar(*p);
if (*p == '\r') {
tm_putchar('\n');
*p = '\0';
break;
}
p++;
}
p ++ ;
return buff;
}
return buff ;
}
#endif /* !NO_STDIO_FGETS_REMAP */
#endif
@ -1210,7 +1212,8 @@ static char *fgets(char *buff, int sz, FILE *fp)
#if !defined(XMALLOC_USER) && !defined(MICRIUM_MALLOC) && \
!defined(WOLFSSL_LEANPSK) && !defined(NO_WOLFSSL_MEMORY)
!defined(WOLFSSL_LEANPSK) && !defined(NO_WOLFSSL_MEMORY) && \
!defined(XMALLOC_OVERRIDE)
#define USE_WOLFSSL_MEMORY
#endif

View File

@ -184,6 +184,8 @@
extern void *XMALLOC(size_t n, void* heap, int type);
extern void *XREALLOC(void *p, size_t n, void* heap, int type);
extern void XFREE(void *p, void* heap, int type);
#elif defined(XMALLOC_OVERRIDE)
/* override the XMALLOC, XFREE and XREALLOC macros */
#elif defined(NO_WOLFSSL_MEMORY)
/* just use plain C stdlib stuff if desired */
#include <stdlib.h>
@ -194,7 +196,7 @@
&& !defined(WOLFSSL_SAFERTOS) && !defined(FREESCALE_MQX) \
&& !defined(FREESCALE_KSDK_MQX) && !defined(FREESCALE_FREE_RTOS) \
&& !defined(WOLFSSL_LEANPSK) && !defined(FREERTOS) && !defined(FREERTOS_TCP)\
&& !defined(WOLFSSL_uITRON4) && !defined(WOLFSSL_uTKERNEL2)
&& !defined(WOLFSSL_uITRON4)
/* default C runtime, can install different routines at runtime via cbs */
#include <wolfssl/wolfcrypt/memory.h>
#ifdef WOLFSSL_STATIC_MEMORY