From 1357cdb0e4ac8b68d72d1647525fad546d11d55a Mon Sep 17 00:00:00 2001 From: John Safranek Date: Sun, 28 Jul 2013 17:11:22 -0700 Subject: [PATCH] SEP Profile 1. Add session cache index to CYASSL structure. 2. Add accessor for cache index in CYASSL structure. 3. Add copy function for session cache item. --- cyassl/internal.h | 3 +++ cyassl/ssl.h | 5 +++++ src/ssl.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/cyassl/internal.h b/cyassl/internal.h index 1341ae416..6d9fe1758 100644 --- a/cyassl/internal.h +++ b/cyassl/internal.h @@ -1823,6 +1823,9 @@ struct CYASSL { #endif #ifdef HAVE_NETX NetX_Ctx nxCtx; /* NetX IO Context */ +#endif +#ifdef SESSION_INDEX + int sessionIndex; /* Session's location in the cache. */ #endif CYASSL_ALERT_HISTORY alert_history; }; diff --git a/cyassl/ssl.h b/cyassl/ssl.h index 3a04211cb..8d466d6a8 100644 --- a/cyassl/ssl.h +++ b/cyassl/ssl.h @@ -247,6 +247,11 @@ CYASSL_API void CyaSSL_flush_sessions(CYASSL_CTX *ctx, long tm); CYASSL_API int CyaSSL_SetServerID(CYASSL* ssl, const unsigned char*, int, int); +#ifdef SESSION_INDEX + CYASSL_API int CyaSSL_GetSessionIndex(CYASSL* ssl); + CYASSL_API int CyaSSL_GetSessionAtIndex(int index, CYASSL_SESSION* session); +#endif + typedef int (*VerifyCallback)(int, CYASSL_X509_STORE_CTX*); typedef int (*pem_password_cb)(char*, int, int, void*); diff --git a/src/ssl.c b/src/ssl.c index 0a1b2a06b..9f04bbc79 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -4532,6 +4532,9 @@ int AddSession(CYASSL* ssl) return BAD_MUTEX_ERROR; idx = SessionCache[row].nextIdx++; +#ifdef SESSION_INDEX + ssl->sessionIndex = (row << 4) | idx; +#endif XMEMCPY(SessionCache[row].Sessions[idx].masterSecret, ssl->arrays->masterSecret, SECRET_LEN); @@ -4587,6 +4590,37 @@ int AddSession(CYASSL* ssl) } +#ifdef SESSION_INDEX + int CyaSSL_GetSessionIndex(CYASSL* ssl) + { + return ssl->sessionIndex; + } + + + int CyaSSL_GetSessionAtIndex(int index, CYASSL_SESSION* session) + { + int row, col, result = SSL_FAILURE; + + row = index >> 4; + col = index & 0x0F; + + if (LockMutex(&session_mutex) != 0) + return BAD_MUTEX_ERROR; + + if (row < SESSION_ROWS && col < SessionCache[row].totalCount) { + XMEMCPY(session, + &SessionCache[row].Sessions[col], sizeof(CYASSL_SESSION)); + result = SSL_SUCCESS; + } + + if (UnLockMutex(&session_mutex) != 0) + return BAD_MUTEX_ERROR; + + return result; + } +#endif + + #ifdef SESSION_STATS CYASSL_API