mirror of https://github.com/wolfSSL/wolfssl.git
Merge pull request #7615 from jackctj117/ssl-static-memory
Added Static Buffer Allocation APIpull/7623/head
commit
592a4522e1
|
@ -217,3 +217,195 @@ int wolfSSL_StaticBufferSz(byte* buffer, word32 sz, int flag);
|
||||||
\sa wolfSSL_Free
|
\sa wolfSSL_Free
|
||||||
*/
|
*/
|
||||||
int wolfSSL_MemoryPaddingSz(void);
|
int wolfSSL_MemoryPaddingSz(void);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\ingroup Memory
|
||||||
|
|
||||||
|
\brief This function is used to set aside static memory for a CTX.
|
||||||
|
Memory set aside is then used for the CTX’s lifetime and for any SSL objects created
|
||||||
|
from the CTX. By passing in a NULL ctx pointer and a wolfSSL_method_func function the creation
|
||||||
|
of the CTX itself will also use static memory. wolfSSL_method_func has the function signature
|
||||||
|
of WOLFSSL_METHOD* (*wolfSSL_method_func)(void* heap);.
|
||||||
|
Passing in 0 for max makes it behave as if not set and no max concurrent use restrictions
|
||||||
|
is in place.
|
||||||
|
The flag value passed in determines how the memory is used and behavior while operating.
|
||||||
|
Available flags are the following.
|
||||||
|
|
||||||
|
0 - default general memory
|
||||||
|
|
||||||
|
WOLFMEM_IO_POOL - used for input/output buffer when sending receiving messages.
|
||||||
|
Overrides general memory, so all memory in buffer passed in is used for IO.
|
||||||
|
WOLFMEM_IO_FIXED - same as WOLFMEM_IO_POOL but each SSL now keeps two
|
||||||
|
buffers to themselves for their lifetime.
|
||||||
|
WOLFMEM_TRACK_STATS - each SSL keeps track of memory stats while running.
|
||||||
|
|
||||||
|
\return If successful, SSL_SUCCESS will be returned.
|
||||||
|
\return All unsuccessful return values will be less than 0 or equal to SSL_FAILURE.
|
||||||
|
|
||||||
|
\param ctx address of pointer to a WOLFSSL_CTX structure.
|
||||||
|
\param method function to create protocol. (should be NULL if ctx is not also NULL)
|
||||||
|
\param buf memory to use for all operations.
|
||||||
|
\param sz size of memory buffer being passed in.
|
||||||
|
\param flag type of memory.
|
||||||
|
\param max max concurrent operations.
|
||||||
|
|
||||||
|
_Example_
|
||||||
|
\code
|
||||||
|
WOLFSSL_CTX* ctx;
|
||||||
|
WOLFSSL* ssl;
|
||||||
|
int ret;
|
||||||
|
unsigned char memory[MAX];
|
||||||
|
int memorySz = MAX;
|
||||||
|
unsigned char IO[MAX];
|
||||||
|
int IOSz = MAX;
|
||||||
|
int flag = WOLFMEM_IO_FIXED | WOLFMEM_TRACK_STATS;
|
||||||
|
...
|
||||||
|
// create ctx also using static memory, start with general memory to use
|
||||||
|
ctx = NULL:
|
||||||
|
ret = wolfSSL_CTX_load_static_memory(&ctx, wolfSSLv23_server_method_ex, memory, memorySz, 0,
|
||||||
|
MAX_CONCURRENT_HANDSHAKES);
|
||||||
|
if (ret != SSL_SUCCESS) {
|
||||||
|
// handle error case
|
||||||
|
}
|
||||||
|
// load in memory for use with IO
|
||||||
|
ret = wolfSSL_CTX_load_static_memory(&ctx, NULL, IO, IOSz, flag, MAX_CONCURRENT_IO);
|
||||||
|
if (ret != SSL_SUCCESS) {
|
||||||
|
// handle error case
|
||||||
|
}
|
||||||
|
...
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa wolfSSL_CTX_new
|
||||||
|
\sa wolfSSL_CTX_is_static_memory
|
||||||
|
\sa wolfSSL_is_static_memory
|
||||||
|
*/
|
||||||
|
int wolfSSL_CTX_load_static_memory(WOLFSSL_CTX** ctx, wolfSSL_method_func method,
|
||||||
|
unsigned char* buf, unsigned int sz, int flag, int max);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\ingroup Memory
|
||||||
|
|
||||||
|
\brief This function does not change any of the connections behavior and is used only for
|
||||||
|
gathering information about the static memory usage.
|
||||||
|
|
||||||
|
\return A value of 1 is returned if using static memory for the CTX is true.
|
||||||
|
\return 0 is returned if not using static memory.
|
||||||
|
|
||||||
|
\param ctx a pointer to a WOLFSSL_CTX structure, created using wolfSSL_CTX_new().
|
||||||
|
\param mem_stats structure to hold information about staic memory usage.
|
||||||
|
|
||||||
|
_Example_
|
||||||
|
\code
|
||||||
|
WOLFSSL_CTX* ctx;
|
||||||
|
int ret;
|
||||||
|
WOLFSSL_MEM_STATS mem_stats;
|
||||||
|
...
|
||||||
|
//get information about static memory with CTX
|
||||||
|
|
||||||
|
ret = wolfSSL_CTX_is_static_memory(ctx, &mem_stats);
|
||||||
|
|
||||||
|
if (ret == 1) {
|
||||||
|
// handle case of is using static memory
|
||||||
|
// print out or inspect elements of mem_stats
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
//handle case of ctx not using static memory
|
||||||
|
}
|
||||||
|
...
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa wolfSSL_CTX_new
|
||||||
|
\sa wolfSSL_CTX_load_static_memory
|
||||||
|
\sa wolfSSL_is_static_memory
|
||||||
|
*/
|
||||||
|
int wolfSSL_CTX_is_static_memory(WOLFSSL_CTX* ctx, WOLFSSL_MEM_STATS* mem_stats);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\ingroup Memory
|
||||||
|
|
||||||
|
\brief wolfSSL_is_static_memory is used to gather information about a SSL’s static
|
||||||
|
memory usage. The return value indicates if static memory is being used and
|
||||||
|
WOLFSSL_MEM_CONN_STATS will be filled out if and only if the flag WOLFMEM_TRACK_STATS was
|
||||||
|
passed to the parent CTX when loading in static memory.
|
||||||
|
|
||||||
|
\return A value of 1 is returned if using static memory for the CTX is true.
|
||||||
|
\return 0 is returned if not using static memory.
|
||||||
|
|
||||||
|
\param ssl a pointer to a WOLFSSL structure, created using wolfSSL_new().
|
||||||
|
\param mem_stats structure to contain static memory usage
|
||||||
|
|
||||||
|
_Example_
|
||||||
|
\code
|
||||||
|
WOLFSSL* ssl;
|
||||||
|
int ret;
|
||||||
|
WOLFSSL_MEM_CONN_STATS mem_stats;
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
ret = wolfSSL_is_static_memory(ssl, mem_stats);
|
||||||
|
|
||||||
|
if (ret == 1) {
|
||||||
|
// handle case when is static memory
|
||||||
|
// investigate elements in mem_stats if WOLFMEM_TRACK_STATS flag
|
||||||
|
}
|
||||||
|
...
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa wolfSSL_new
|
||||||
|
\sa wolfSSL_CTX_is_static_memory
|
||||||
|
*/
|
||||||
|
int wolfSSL_is_static_memory(WOLFSSL* ssl, WOLFSSL_MEM_CONN_STATS* mem_stats);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\ingroup Memory
|
||||||
|
|
||||||
|
\brief This function is used to set aside static memory for wolfCrypt use. Memory can be
|
||||||
|
used by passing the created heap hint into functions. An example of this is when calling
|
||||||
|
wc_InitRng_ex. The flag value passed in determines how the memory is used and behavior
|
||||||
|
while operating, in general wolfCrypt operations will use memory from a WOLFMEM_GENERAL pool.
|
||||||
|
Available flags are the following.
|
||||||
|
|
||||||
|
WOLFMEM_GENERAL - default general memory
|
||||||
|
|
||||||
|
WOLFMEM_IO_POOL - used for input/output buffer when sending receiving messages.
|
||||||
|
Overrides general memory, so all memory in buffer passed in is used for IO.
|
||||||
|
WOLFMEM_IO_FIXED - same as WOLFMEM_IO_POOL but each SSL now keeps two
|
||||||
|
buffers to themselves for their lifetime.
|
||||||
|
WOLFMEM_TRACK_STATS - each SSL keeps track of memory stats while running
|
||||||
|
|
||||||
|
\return If successful, 0 will be returned.
|
||||||
|
\return All unsuccessful return values will be less than 0.
|
||||||
|
|
||||||
|
\param hint WOLFSSL_HEAP_HINT structure to use
|
||||||
|
\param buf memory to use for all operations.
|
||||||
|
\param sz size of memory buffer being passed in.
|
||||||
|
\param flag type of memory.
|
||||||
|
\param max max concurrent operations (handshakes, IO).
|
||||||
|
|
||||||
|
_Example_
|
||||||
|
\code
|
||||||
|
WOLFSSL_HEAP_HINT hint;
|
||||||
|
int ret;
|
||||||
|
unsigned char memory[MAX];
|
||||||
|
int memorySz = MAX;
|
||||||
|
int flag = WOLFMEM_GENERAL | WOLFMEM_TRACK_STATS;
|
||||||
|
...
|
||||||
|
|
||||||
|
// load in memory for use
|
||||||
|
|
||||||
|
ret = wc_LoadStaticMemory(&hint, memory, memorySz, flag, 0);
|
||||||
|
if (ret != SSL_SUCCESS) {
|
||||||
|
// handle error case
|
||||||
|
}
|
||||||
|
...
|
||||||
|
|
||||||
|
ret = wc_InitRng_ex(&rng, hint, 0);
|
||||||
|
|
||||||
|
// check ret value
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
\sa none
|
||||||
|
*/
|
||||||
|
int wc_LoadStaticMemory(WOLFSSL_HEAP_HINT* hint, unsigned char* buf, unsigned int sz,
|
||||||
|
int flag, int max);
|
||||||
|
|
Loading…
Reference in New Issue