From 05692e1d6ad1049e6bf9e7d42404672f3b7e32ae Mon Sep 17 00:00:00 2001 From: toddouska Date: Wed, 15 Aug 2012 17:00:11 -0700 Subject: [PATCH] IAR fixes, SafeRTOS port, better LWIP support --- ctaocrypt/src/asn.c | 22 +++++++++++----------- cyassl/ctaocrypt/settings.h | 19 +++++++++++++++++++ cyassl/internal.h | 7 ++++++- src/internal.c | 32 ++++++++++++++++++++++++++++++++ src/io.c | 11 ++++++++--- src/ssl.c | 3 +-- 6 files changed, 77 insertions(+), 17 deletions(-) diff --git a/ctaocrypt/src/asn.c b/ctaocrypt/src/asn.c index 87ece4bf4..1771aa5dc 100644 --- a/ctaocrypt/src/asn.c +++ b/ctaocrypt/src/asn.c @@ -64,16 +64,6 @@ enum { #endif -#ifndef min - - static INLINE word32 min(word32 a, word32 b) - { - return a > b ? b : a; - } - -#endif /* min */ - - #ifdef THREADX /* uses parital structures */ #define XTIME(tl) (0) @@ -1351,7 +1341,6 @@ static int GetName(DecodedCert* cert, int nameType) int oidSz; if (GetSet(cert->source, &cert->srcIdx, &dummy, cert->maxIdx) < 0) { - (void)b; /* empty body warning w/o messages enabled */ CYASSL_MSG("Cert name lacks set header, trying sequence"); } @@ -2958,6 +2947,17 @@ int RsaKeyToDer(RsaKey* key, byte* output, word32 inLen) #ifdef CYASSL_CERT_GEN + +#ifndef min + + static INLINE word32 min(word32 a, word32 b) + { + return a > b ? b : a; + } + +#endif /* min */ + + /* Initialize and Set Certficate defaults: version = 3 (0x2) serial = 0 diff --git a/cyassl/ctaocrypt/settings.h b/cyassl/ctaocrypt/settings.h index ef60087aa..72f19ff25 100644 --- a/cyassl/ctaocrypt/settings.h +++ b/cyassl/ctaocrypt/settings.h @@ -57,6 +57,9 @@ /* Uncomment next line if building CyaSSL for a game console */ /* #define CYASSL_GAME_BUILD */ +/* Uncomment next line if building CyaSSL for LSR */ +/* #define CYASSL_LSR */ + #include @@ -110,6 +113,22 @@ #endif #endif +#ifdef CYASSL_LSR + #define NO_WRITEV + #define NO_SHA512 + #define NO_DH + #define NO_DSA + #define NO_HC128 + #define NO_DEV_RANDOM + #define NO_CYASSL_DIR + #define NO_RABBIT + #define CYASSL_LWIP + #define CYASSL_SAFERTOS + #ifndef SINGLE_THREADED + #include "SafeRTOS/semphr.h" + #endif +#endif + #ifdef MICRIUM #include "stdlib.h" diff --git a/cyassl/internal.h b/cyassl/internal.h index 372ca4a82..d958881ab 100644 --- a/cyassl/internal.h +++ b/cyassl/internal.h @@ -69,7 +69,7 @@ #endif #elif defined(MICRIUM) /* do nothing, just don't pick Unix */ -#elif defined(FREERTOS) +#elif defined(FREERTOS) || defined(CYASSL_SAFERTOS) /* do nothing */ #else #ifndef SINGLE_THREADED @@ -670,6 +670,11 @@ struct CYASSL_CIPHER { /* FREERTOS comes first to enable use of FreeRTOS Windows simulator only */ #ifdef FREERTOS typedef xSemaphoreHandle CyaSSL_Mutex; + #elif defined(CYASSL_SAFERTOS) + typedef struct CyaSSL_Mutex { + signed char mutexBuffer[portQUEUE_OVERHEAD_BYTES]; + xSemaphoreHandle mutex; + } CyaSSL_Mutex; #elif defined(USE_WINDOWS_API) typedef CRITICAL_SECTION CyaSSL_Mutex; #elif defined(CYASSL_PTHREADS) diff --git a/src/internal.c b/src/internal.c index ff73e0bfd..211483c0f 100644 --- a/src/internal.c +++ b/src/internal.c @@ -449,6 +449,7 @@ void InitSuites(Suites* suites, ProtocolVersion pv, byte haveDH, byte havePSK, (void)havePSK; (void)haveNTRU; (void)haveStaticECC; + (void)haveRSAsig; if (suites->setSuites) return; /* trust user settings, don't override */ @@ -6941,6 +6942,37 @@ int UnLockMutex(CyaSSL_Mutex* m) return 0; } + #elif defined(CYASSL_SAFERTOS) + + int InitMutex(CyaSSL_Mutex* m) + { + vSemaphoreCreateBinary(m->mutexBuffer, m->mutex); + if (m->mutex == NULL) + return BAD_MUTEX_ERROR; + + return 0; + } + + int FreeMutex(CyaSSL_Mutex* m) + { + (void)m; + return 0; + } + + int LockMutex(CyaSSL_Mutex* m) + { + /* Assume an infinite block */ + xSemaphoreTake(m->mutex, portMAX_DELAY); + return 0; + } + + int UnLockMutex(CyaSSL_Mutex* m) + { + xSemaphoreGive(m->mutex); + return 0; + } + + #elif defined(USE_WINDOWS_API) int InitMutex(CyaSSL_Mutex* m) diff --git a/src/io.c b/src/io.c index 9316defb5..5040b425a 100644 --- a/src/io.c +++ b/src/io.c @@ -43,9 +43,11 @@ #ifndef USE_WINDOWS_API #ifdef CYASSL_LWIP /* lwIP needs to be configured to use sockets API in this mode */ - /* LWIP_SOCKET 1 && LWIP_COMPAT_SOCKETS 1 in lwip/opt.h or in build */ - #define LWIP_PROVIDE_ERRNO 1 - #include "sockets.h" + /* LWIP_SOCKET 1 in lwip/opt.h or in build */ + #include "lwip/sockets.h" + #ifndef LWIP_PROVIDE_ERRNO + #define LWIP_PROVIDE_ERRNO 1 + #endif #else #include #include @@ -103,6 +105,9 @@ int net_recv(int, void*, int, unsigned int); #define SEND_FUNCTION net_send #define RECV_FUNCTION net_recv +#elif defined(CYASSL_LWIP) + #define SEND_FUNCTION lwip_send + #define RECV_FUNCTION lwip_recv #else #define SEND_FUNCTION send #define RECV_FUNCTION recv diff --git a/src/ssl.c b/src/ssl.c index 6101f8eb5..a8ee7c717 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -1134,13 +1134,12 @@ int AddCA(CYASSL_CERT_MANAGER* cm, buffer der, int type, int verify) #endif /* HAVE_ECC */ } else if (type == CERT_TYPE) { - int ret; DecodedCert cert; CYASSL_MSG("Checking cert signature type"); InitDecodedCert(&cert, der.buffer, der.length, ctx->heap); - if ((ret = DecodeToKey(&cert, 0)) < 0) { + if (DecodeToKey(&cert, 0) < 0) { CYASSL_MSG("Decode to key failed"); return SSL_BAD_FILE; }