コンテンツにスキップ

メモリ処理

Functions

Name
void * wolfSSL_Malloc(size_t size, void * heap, int type)
この関数はmalloc()に似ていますが、wolfSSLが使用するように設定されたメモリ割り当て関数を呼び出します。デフォルトでは、wolfSSLはmalloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます _ wolfSSL_SetAllocators()を参照してください。wolfSSL_Mallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXMALLOCによって呼び出されることに注意してください。 デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。
void wolfSSL_Free(void * ptr, void * heap, int type)
この関数はfree()に似ていますが、wolfSSLが使用するように設定されたメモリ解放関数を呼び出します。デフォルトでは、wolfSSLはfree()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます _ wolfSSL_SetAllocators()を参照してください。wolfSSL_Freeは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXFREEによって呼び出されることに注意してください。 デフォルトのビルドでは、ptrパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。
void * wolfSSL_Realloc(void * ptr, size_t size, void * heap, int type)
この関数はrealloc()に似ていますが、wolfSSLが使用するように設定されたメモリ再割り当て関数を呼び出します。デフォルトでは、wolfSSLはrealloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます _ wolfSSL_SetAllocators()を参照してください。 wolfSSL_Reallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXREALLOCによって呼び出されることに注意してください。デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。
int wolfSSL_SetAllocators(wolfSSL_Malloc_cb , wolfSSL_Free_cb , wolfSSL_Realloc_cb )
この関数は、wolfSSLが使用する割り当て関数を登録します。デフォルトでは、システムがサポートしている場合、malloc/freeとreallocが使用されます。この関数を使用すると、ユーザーは実行時に独自のメモリハンドラをインストールできます。
int wolfSSL_StaticBufferSz(byte * buffer, word32 sz, int flag)
この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリ「バケット」の最適なバッファサイズを提供します。これにより、パーティション化された後に余分な未使用メモリが残らないようにバッファサイズを計算する方法が提供されます。この関数の非_exバージョンでは、コンパイル時に設定されたデフォルトのバケットと配布リストが使用されます。 返される値が正の場合、使用する計算されたバッファサイズです。
int wolfSSL_MemoryPaddingSz(void )
この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリの各パーティションに必要なパディングのサイズを提供します。このパディングサイズは、メモリ管理構造体を含むために必要なサイズと、メモリアライメントのための追加分になります。
int wolfSSL_CTX_load_static_memory(WOLFSSL_CTX * ctx, wolfSSL_method_func method, unsigned char * buf, unsigned int sz, int flag, int max)
この関数は、CTXのために静的メモリを確保するために使用されます。確保されたメモリは、CTXの存続期間中およびCTXから作成されたすべてのSSLオブジェクトに使用されます。NULLのctxポインタとwolfSSL_method_func関数を渡すことにより、CTX自体の作成も静的メモリを使用します。wolfSSL_method_funcは、WOLFSSL_METHOD
(wolfSSL_method_func)(void heap);の関数シグネチャを持ちます。 maxに0を渡すと、設定されていないかのように動作し、最大同時使用制限が適用されません。 渡されるflag値は、メモリの使用方法と動作中の動作を決定します。 利用可能なフラグは次のとおりです。
int wolfSSL_CTX_is_static_memory(WOLFSSL_CTX * ctx, WOLFSSL_MEM_STATS * mem_stats)
この関数は接続の動作を変更せず、静的メモリ使用に関する情報を収集するためにのみ使用されます。
int wolfSSL_is_static_memory(WOLFSSL * ssl, WOLFSSL_MEM_CONN_STATS * mem_stats)
wolfSSL_is_static_memoryは、SSLの静的メモリ使用に関する情報を収集するために使用されます。戻り値は、静的メモリが使用されているかどうかを示し、WOLFSSL_MEM_CONN_STATSは、静的メモリをロードする際に親CTXにWOLFMEM_TRACK_STATSフラグが渡された場合にのみ入力されます。
int wc_LoadStaticMemory(WOLFSSL_HEAP_HINT * hint, unsigned char * buf, unsigned int sz, int flag, int max)
この関数は、wolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この例は、wc_InitRng_exを呼び出すときです。渡されるflag値は、メモリの使用方法と動作中の動作を決定します。一般的に、wolfCrypt操作はWOLFMEM_GENERALプールからメモリを使用します。 利用可能なフラグは次のとおりです。
int wc_LoadStaticMemory_ex(WOLFSSL_HEAP_HINT * hint, unsigned char * buf, unsigned int sz, int flag, int max, word16 * bucket_sizes, int bucket_count)
この関数は、カスタムバケットサイズと配分を使用してwolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズと配分を使用できます。
WOLFSSL_HEAP_HINT * wolfSSL_SetGlobalHeapHint(WOLFSSL_HEAP_HINT * hint)
この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用されるグローバルヒープヒントを設定します。これにより、アプリケーション全体で使用されるデフォルトのヒープヒントを設定できます。
WOLFSSL_HEAP_HINT * wolfSSL_GetGlobalHeapHint(void )
この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用される現在のグローバルヒープヒントを取得します。
int wolfSSL_SetDebugMemoryCb(wolfSSL_DebugMemoryCb cb)
この関数は、静的メモリ割り当て追跡用のデバッグコールバック関数を設定します。WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACKビルドオプションと共に使用されます。コールバック関数は、メモリ割り当ておよび割り当て解除操作中に呼び出され、デバッグ情報を提供します。
int wc_UnloadStaticMemory(WOLFSSL_HEAP_HINT * hint)
この関数は、静的メモリヒープと関連するミューテックスを解放します。静的メモリ割り当ての使用が完了したときに、リソースを適切にクリーンアップするために呼び出す必要があります。
int wolfSSL_StaticBufferSz_ex(unsigned int listSz, const word32 * sizeList, const word32 * distList, byte * buffer, word32 sz, int flag)
この関数は、カスタムバケットサイズと配分を使用した静的メモリ割り当てに必要なバッファサイズを計算します。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズを使用できます。
void * XMALLOC(size_t n, void * heap, int type)
これは実際には関数ではなく、プリプロセッサマクロです。 ユーザーが標準のCメモリ関数の代わりに独自のmalloc、realloc、free関数を置き換えることを可能にします。 外部メモリ関数を使用するには、XMALLOC_USERを定義します。これにより、メモリ関数は次の形式の外部関数に置き換えられます: 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); wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeの代わりに基本的なCメモリ関数を使用するには、NO_WOLFSSL_MEMORYを定義します。 これにより、メモリ関数は次のように置き換えられます: #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) #define XFREE(p, h, t) {void xp = (p); if((xp)) free((xp));} #define XREALLOC(p, n, h, t) realloc((p), (n)) これらのオプションのいずれも選択されていない場合、システムはデフォルトでwolfSSLメモリ関数を使用します。 ユーザーはコールバックフックを通じてカスタムメモリ関数を設定できます(wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeを参照)。 このオプションは、メモリ関数を次のように置き換えます: #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))
void * XREALLOC(void * p, size_t n, void * heap, int type)
これは実際には関数ではなく、プリプロセッサマクロです。 ユーザーが標準のCメモリ関数の代わりに独自のmalloc、realloc、free関数を置き換えることを可能にします。 外部メモリ関数を使用するには、XMALLOC_USERを定義します。これにより、メモリ関数は次の形式の外部関数に置き換えられます: 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); wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeの代わりに基本的なCメモリ関数を使用するには、NO_WOLFSSL_MEMORYを定義します。 これにより、メモリ関数は次のように置き換えられます: #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) #define XFREE(p, h, t) {void xp = (p); if((xp)) free((xp));} #define XREALLOC(p, n, h, t) realloc((p), (n)) これらのオプションのいずれも選択されていない場合、システムはデフォルトでwolfSSLメモリ関数を使用します。 ユーザーはコールバックフックを通じてカスタムメモリ関数を設定できます(wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeを参照)。 このオプションは、メモリ関数を次のように置き換えます: #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))
void XFREE(void * p, void * heap, int type)
これは実際には関数ではなく、プリプロセッサマクロです。 ユーザーが標準のCメモリ関数の代わりに独自のmalloc、realloc、free関数を置き換えることを可能にします。 外部メモリ関数を使用するには、XMALLOC_USERを定義します。 これにより、メモリ関数は次の形式の外部関数に置き換えられます: 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); wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeの代わりに基本的なCメモリ関数を使用するには、NO_WOLFSSL_MEMORYを定義します。 これにより、メモリ関数は次のように置き換えられます: #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) #define XFREE(p, h, t) {void xp = (p); if((xp)) free((xp));} #define XREALLOC(p, n, h, t) realloc((p), (n)) これらのオプションのいずれも選択されていない場合、システムはデフォルトでwolfSSLメモリ関数を使用します。 ユーザーはコールバックフックを通じてカスタムメモリ関数を設定できます(wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeを参照)。 このオプションは、メモリ関数を次のように置き換えます: #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))

Functions Documentation

function wolfSSL_Malloc

void * wolfSSL_Malloc(
    size_t size,
    void * heap,
    int type
)

この関数はmalloc()に似ていますが、wolfSSLが使用するように設定されたメモリ割り当て関数を呼び出します。デフォルトでは、wolfSSLはmalloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます - wolfSSL_SetAllocators()を参照してください。wolfSSL_Mallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXMALLOCによって呼び出されることに注意してください。 デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。

Parameters:

  • size 割り当てるメモリのバイト単位のサイズ。
  • heap メモリに使用するヒープヒント。NULLにできます。
  • type 動的タイプ(types.hのDYNAMIC_TYPE_リストを参照)。

See:

Return:

  • pointer 成功した場合、この関数は割り当てられたメモリへのポインタを返します。
  • error エラーがある場合、NULLが返されます。

Example

int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);

function wolfSSL_Free

void wolfSSL_Free(
    void * ptr,
    void * heap,
    int type
)

この関数はfree()に似ていますが、wolfSSLが使用するように設定されたメモリ解放関数を呼び出します。デフォルトでは、wolfSSLはfree()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます - wolfSSL_SetAllocators()を参照してください。wolfSSL_Freeは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXFREEによって呼び出されることに注意してください。 デフォルトのビルドでは、ptrパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。

Parameters:

  • ptr 解放するメモリへのポインタ。
  • heap メモリに使用するヒープヒント。NULLにできます。
  • type 動的タイプ(types.hのDYNAMIC_TYPE_リストを参照)。

See:

Return: none 戻り値なし。

Example

int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
// 必要に応じてデータを処理
...
if(tenInts) {
    wolfSSL_Free(tenInts);
}

function wolfSSL_Realloc

void * wolfSSL_Realloc(
    void * ptr,
    size_t size,
    void * heap,
    int type
)

この関数はrealloc()に似ていますが、wolfSSLが使用するように設定されたメモリ再割り当て関数を呼び出します。デフォルトでは、wolfSSLはrealloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます - wolfSSL_SetAllocators()を参照してください。 wolfSSL_Reallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXREALLOCによって呼び出されることに注意してください。デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。

Parameters:

  • ptr 再割り当てする、以前に割り当てられたメモリへのポインタ。
  • size 割り当てるバイト数。
  • heap メモリに使用するヒープヒント。NULLにできます。
  • type 動的タイプ(types.hのDYNAMIC_TYPE_リストを参照)。

See:

Return:

  • pointer 成功した場合、この関数は再割り当てされたメモリへのポインタを返します。これはptrと同じポインタである場合もあれば、新しいポインタの場所である場合もあります。
  • Null エラーがある場合、NULLが返されます。

Example

int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
int* twentyInts = (int*)wolfSSL_Realloc(tenInts, sizeof(int)*20);

function wolfSSL_SetAllocators

int wolfSSL_SetAllocators(
    wolfSSL_Malloc_cb ,
    wolfSSL_Free_cb ,
    wolfSSL_Realloc_cb 
)

この関数は、wolfSSLが使用する割り当て関数を登録します。デフォルトでは、システムがサポートしている場合、malloc/freeとreallocが使用されます。この関数を使用すると、ユーザーは実行時に独自のメモリハンドラをインストールできます。

Parameters:

  • malloc_function wolfSSLが使用するメモリ割り当て関数。関数シグネチャは上記のwolfSSL_Malloc_cbプロトタイプと一致する必要があります。
  • free_function wolfSSLが使用するメモリ解放関数。関数シグネチャは上記のwolfSSL_Free_cbプロトタイプと一致する必要があります。
  • realloc_function wolfSSLが使用するメモリ再割り当て関数。関数シグネチャは上記のwolfSSL_Realloc_cbプロトタイプと一致する必要があります。

See: none

Return:

  • Success 成功した場合、この関数は0を返します。
  • BAD_FUNC_ARG 関数ポインタが提供されていない場合に返されるエラー。

Example

static void* MyMalloc(size_t size)
{
    // カスタムmalloc関数
}

static void MyFree(void* ptr)
{
    // カスタムfree関数
}

static void* MyRealloc(void* ptr, size_t size)
{
    // カスタムrealloc関数
}

// カスタムメモリ関数をwolfSSLに登録
int ret = wolfSSL_SetAllocators(MyMalloc, MyFree, MyRealloc);
if (ret != 0) {
    // メモリ関数の設定に失敗
}

function wolfSSL_StaticBufferSz

int wolfSSL_StaticBufferSz(
    byte * buffer,
    word32 sz,
    int flag
)

この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリ「バケット」の最適なバッファサイズを提供します。これにより、パーティション化された後に余分な未使用メモリが残らないようにバッファサイズを計算する方法が提供されます。この関数の非_exバージョンでは、コンパイル時に設定されたデフォルトのバケットと配布リストが使用されます。 返される値が正の場合、使用する計算されたバッファサイズです。

Parameters:

  • buffer バッファへのポインタ。
  • size バッファのサイズ。
  • type 希望するメモリタイプ、つまりWOLFMEM_GENERALまたはWOLFMEM_IO_POOL。

See:

Return:

  • Success バッファサイズの計算が正常に完了すると、正の値が返されます。この返される値は最適なバッファサイズです。
  • Failure すべての負の値はエラーケースと見なされます。

Example

byte buffer[1000];
word32 size = sizeof(buffer);
int optimum;

optimum = wolfSSL_StaticBufferSz(buffer, size, WOLFMEM_GENERAL);
if (optimum < 0) { //エラーケースを処理 }
printf("すべてのメモリを利用するための最適なバッファサイズは %d です\n",
optimum);
...

function wolfSSL_MemoryPaddingSz

int wolfSSL_MemoryPaddingSz(
    void 
)

この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリの各パーティションに必要なパディングのサイズを提供します。このパディングサイズは、メモリ管理構造体を含むために必要なサイズと、メモリアライメントのための追加分になります。

Parameters:

  • none パラメータなし。

See:

Return:

  • メモリパディングの計算が成功すると、戻り値は正の値になります。
  • すべての負の値はエラーケースと見なされます。

Example

int padding;
padding = wolfSSL_MemoryPaddingSz();
if (padding < 0) { //エラーケースを処理 }
printf("メモリの各「バケット」に必要なパディングサイズは %d です\n",
padding);
// IO POOLサイズのバッファの計算は、バケット数
// × (padding + WOLFMEM_IO_SZ)
...

function wolfSSL_CTX_load_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
)

この関数は、CTXのために静的メモリを確保するために使用されます。確保されたメモリは、CTXの存続期間中およびCTXから作成されたすべてのSSLオブジェクトに使用されます。NULLのctxポインタとwolfSSL_method_func関数を渡すことにより、CTX自体の作成も静的メモリを使用します。wolfSSL_method_funcは、WOLFSSL_METHOD* (wolfSSL_method_func)(void heap);の関数シグネチャを持ちます。 maxに0を渡すと、設定されていないかのように動作し、最大同時使用制限が適用されません。 渡されるflag値は、メモリの使用方法と動作中の動作を決定します。 利用可能なフラグは次のとおりです。

Parameters:

  • ctx WOLFSSL_CTX構造体へのポインタのアドレス。
  • method プロトコルを作成する関数。(ctxもNULLでない場合はNULLである必要があります)
  • buf すべての操作に使用するメモリ。
  • sz 渡されるメモリバッファのサイズ。
  • flag メモリのタイプ。
  • max 最大同時操作数。

See:

Return:

  • 成功した場合、SSL_SUCCESSが返されます。
  • すべての失敗した戻り値は0未満またはSSL_FAILUREと等しくなります。

0 - デフォルトの一般メモリ

WOLFMEM_IO_POOL - メッセージの送受信時の入出力バッファに使用されます。一般メモリをオーバーライドするため、渡されたバッファ内のすべてのメモリがIOに使用されます。 WOLFMEM_IO_FIXED - WOLFMEM_IO_POOLと同じですが、各SSLは存続期間中に2つのバッファを保持します。 WOLFMEM_TRACK_STATS - 各SSLは実行中にメモリ統計を追跡します。

Example

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;
...
// 静的メモリを使用してctxも作成、使用する一般メモリから開始
ctx = NULL:
ret = wolfSSL_CTX_load_static_memory(&ctx, wolfSSLv23_server_method_ex, memory, memorySz, 0,
MAX_CONCURRENT_HANDSHAKES);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
// IOで使用するメモリをロード
ret = wolfSSL_CTX_load_static_memory(&ctx, NULL, IO, IOSz, flag, MAX_CONCURRENT_IO);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
...

function wolfSSL_CTX_is_static_memory

int wolfSSL_CTX_is_static_memory(
    WOLFSSL_CTX * ctx,
    WOLFSSL_MEM_STATS * mem_stats
)

この関数は接続の動作を変更せず、静的メモリ使用に関する情報を収集するためにのみ使用されます。

Parameters:

  • ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  • mem_stats 静的メモリ使用に関する情報を保持する構造体。

See:

Return:

  • CTXに静的メモリを使用している場合は1の値が返されます。
  • 静的メモリを使用していない場合は0が返されます。

Example

WOLFSSL_CTX* ctx;
int ret;
WOLFSSL_MEM_STATS mem_stats;
...
//CTXでの静的メモリに関する情報を取得

ret = wolfSSL_CTX_is_static_memory(ctx, &mem_stats);

if (ret == 1) {
    // 静的メモリを使用しているケースを処理
    // mem_statsの要素を出力または検査
}

if (ret == 0) {
    //ctxが静的メモリを使用していないケースを処理
}
...

function wolfSSL_is_static_memory

int wolfSSL_is_static_memory(
    WOLFSSL * ssl,
    WOLFSSL_MEM_CONN_STATS * mem_stats
)

wolfSSL_is_static_memoryは、SSLの静的メモリ使用に関する情報を収集するために使用されます。戻り値は、静的メモリが使用されているかどうかを示し、WOLFSSL_MEM_CONN_STATSは、静的メモリをロードする際に親CTXにWOLFMEM_TRACK_STATSフラグが渡された場合にのみ入力されます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • mem_stats 静的メモリ使用を含む構造体。

See:

Return:

  • CTXに静的メモリを使用している場合は1の値が返されます。
  • 静的メモリを使用していない場合は0が返されます。

Example

WOLFSSL* ssl;
int ret;
WOLFSSL_MEM_CONN_STATS mem_stats;

...

ret = wolfSSL_is_static_memory(ssl, mem_stats);

if (ret == 1) {
    // 静的メモリの場合のケースを処理
    // WOLFMEM_TRACK_STATSフラグがある場合はmem_statsの要素を調査
}
...

function wc_LoadStaticMemory

int wc_LoadStaticMemory(
    WOLFSSL_HEAP_HINT * hint,
    unsigned char * buf,
    unsigned int sz,
    int flag,
    int max
)

この関数は、wolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この例は、wc_InitRng_exを呼び出すときです。渡されるflag値は、メモリの使用方法と動作中の動作を決定します。一般的に、wolfCrypt操作はWOLFMEM_GENERALプールからメモリを使用します。 利用可能なフラグは次のとおりです。

Parameters:

  • hint 使用するWOLFSSL_HEAP_HINT構造体。
  • buf すべての操作に使用するメモリ。
  • sz 渡されるメモリバッファのサイズ。
  • flag メモリのタイプ。
  • max 最大同時操作数(ハンドシェイク、IO)。

See: none

Return:

  • 成功した場合、0が返されます。
  • すべての失敗した戻り値は0未満になります。

WOLFMEM_GENERAL - デフォルトの一般メモリ

WOLFMEM_IO_POOL - メッセージの送受信時の入出力バッファに使用されます。一般メモリをオーバーライドするため、渡されたバッファ内のすべてのメモリがIOに使用されます。 WOLFMEM_IO_FIXED - WOLFMEM_IO_POOLと同じですが、各SSLは存続期間中に2つのバッファを保持します。 WOLFMEM_TRACK_STATS - 各SSLは実行中にメモリ統計を追跡します。

Example

WOLFSSL_HEAP_HINT hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
int flag = WOLFMEM_GENERAL | WOLFMEM_TRACK_STATS;
...

// 使用するメモリをロード

ret = wc_LoadStaticMemory(&hint, memory, memorySz, flag, 0);
if (ret != SSL_SUCCESS) {
    // エラーケースを処理
}
...

ret = wc_InitRng_ex(&rng, hint, 0);

// ret値をチェック

function wc_LoadStaticMemory_ex

int wc_LoadStaticMemory_ex(
    WOLFSSL_HEAP_HINT * hint,
    unsigned char * buf,
    unsigned int sz,
    int flag,
    int max,
    word16 * bucket_sizes,
    int bucket_count
)

この関数は、カスタムバケットサイズと配分を使用してwolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズと配分を使用できます。

Parameters:

  • hint 使用するWOLFSSL_HEAP_HINT構造体。
  • buf すべての操作に使用するメモリ。
  • sz 渡されるメモリバッファのサイズ。
  • flag メモリのタイプ。
  • max 最大同時操作数(ハンドシェイク、IO)。
  • bucket_sizes 使用するバケットサイズの配列。
  • bucket_count 配列内のバケットサイズの数。

See:

Return:

  • 成功した場合、0が返されます。
  • すべての失敗した戻り値は0未満になります。

Example

WOLFSSL_HEAP_HINT hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
int flag = WOLFMEM_GENERAL | WOLFMEM_TRACK_STATS;
word16 bucket_sizes[] = {64, 128, 256, 512, 1024};
int bucket_count = 5;
...

// カスタムバケットサイズで使用するメモリをロード

ret = wc_LoadStaticMemory_ex(&hint, memory, memorySz, flag, 0,
                             bucket_sizes, bucket_count);
if (ret != SSL_SUCCESS) {
    // エラーケースを処理
}
...

ret = wc_InitRng_ex(&rng, hint, 0);

// ret値をチェック

function wolfSSL_SetGlobalHeapHint

WOLFSSL_HEAP_HINT * wolfSSL_SetGlobalHeapHint(
    WOLFSSL_HEAP_HINT * hint
)

この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用されるグローバルヒープヒントを設定します。これにより、アプリケーション全体で使用されるデフォルトのヒープヒントを設定できます。

Parameters:

  • hint グローバルヒープヒントとして使用するWOLFSSL_HEAP_HINT構造体。

See:

Return: 設定されていた以前のグローバルヒープヒントを返します。

Example

WOLFSSL_HEAP_HINT hint;
WOLFSSL_HEAP_HINT* prev_hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
...

// 使用するメモリをロード
ret = wc_LoadStaticMemory(&hint, memory, memorySz, WOLFMEM_GENERAL, 0);
if (ret != SSL_SUCCESS) {
    // エラーケースを処理
}

// グローバルヒープヒントとして設定
prev_hint = wolfSSL_SetGlobalHeapHint(&hint);
if (prev_hint != NULL) {
    // 以前のグローバルヒープヒントがありました
}

function wolfSSL_GetGlobalHeapHint

WOLFSSL_HEAP_HINT * wolfSSL_GetGlobalHeapHint(
    void 
)

この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用される現在のグローバルヒープヒントを取得します。

Parameters:

  • none パラメータなし。

See:

Return: 現在のグローバルヒープヒントを返します。設定されていない場合はNULLを返します。

Example

WOLFSSL_HEAP_HINT* current_hint;
...

current_hint = wolfSSL_GetGlobalHeapHint();
if (current_hint != NULL) {
    // グローバルヒープヒントが設定されています
    // current_hintを操作に使用できます
}

function wolfSSL_SetDebugMemoryCb

int wolfSSL_SetDebugMemoryCb(
    wolfSSL_DebugMemoryCb cb
)

この関数は、静的メモリ割り当て追跡用のデバッグコールバック関数を設定します。WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACKビルドオプションと共に使用されます。コールバック関数は、メモリ割り当ておよび割り当て解除操作中に呼び出され、デバッグ情報を提供します。

Parameters:

  • cb 設定するデバッグコールバック関数。

See: none

Return:

  • 成功した場合、0が返されます。
  • すべての失敗した戻り値は0未満になります。

Example

static void debug_memory_cb(const char* func, const char* file, int line,
                            void* ptr, size_t size, int type)
{
    printf("Memory %s: %s:%d ptr=%p size=%zu type=%d\n",
           func, file, line, ptr, size, type);
}
...

// デバッグコールバックを設定
int ret = wolfSSL_SetDebugMemoryCb(debug_memory_cb);
if (ret != 0) {
    // エラーケースを処理
}

function wc_UnloadStaticMemory

int wc_UnloadStaticMemory(
    WOLFSSL_HEAP_HINT * hint
)

この関数は、静的メモリヒープと関連するミューテックスを解放します。静的メモリ割り当ての使用が完了したときに、リソースを適切にクリーンアップするために呼び出す必要があります。

Parameters:

  • hint アンロードするWOLFSSL_HEAP_HINT構造体。

See:

Return:

  • 成功した場合、0が返されます。
  • すべての失敗した戻り値は0未満になります。

Example

WOLFSSL_HEAP_HINT hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
...

// 使用するメモリをロード
ret = wc_LoadStaticMemory(&hint, memory, memorySz, WOLFMEM_GENERAL, 0);
if (ret != SSL_SUCCESS) {
    // エラーケースを処理
}

// 操作にメモリを使用
...

// 完了時にクリーンアップ
ret = wc_UnloadStaticMemory(&hint);
if (ret != 0) {
    // エラーケースを処理
}

function wolfSSL_StaticBufferSz_ex

int wolfSSL_StaticBufferSz_ex(
    unsigned int listSz,
    const word32 * sizeList,
    const word32 * distList,
    byte * buffer,
    word32 sz,
    int flag
)

この関数は、カスタムバケットサイズと配分を使用した静的メモリ割り当てに必要なバッファサイズを計算します。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズを使用できます。

Parameters:

  • bucket_sizes 使用するバケットサイズの配列。
  • bucket_count 配列内のバケットサイズの数。
  • flag 希望するメモリタイプ、つまりWOLFMEM_GENERALまたはWOLFMEM_IO_POOL。

See:

Return:

  • バッファサイズの計算が正常に完了すると、正の値が返されます。
  • すべての負の値はエラーケースと見なされます。

Example

word32 sizeList[] = {64, 128, 256, 512, 1024};
word32 distList[] = {1, 2, 1, 1, 1};
int listSz = 5;
int optimum;

optimum = wolfSSL_StaticBufferSz_ex(listSz, sizeList, distList, NULL, 0,
    WOLFMEM_GENERAL);
if (optimum < 0) { //エラーケースを処理 }
printf("カスタムバケットでの最適なバッファサイズは %d です\n", optimum);
...

function XMALLOC

void * XMALLOC(
    size_t n,
    void * heap,
    int type
)

これは実際には関数ではなく、プリプロセッサマクロです。 ユーザーが標準のCメモリ関数の代わりに独自のmalloc、realloc、free関数を置き換えることを可能にします。 外部メモリ関数を使用するには、XMALLOC_USERを定義します。これにより、メモリ関数は次の形式の外部関数に置き換えられます: 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); wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeの代わりに基本的なCメモリ関数を使用するには、NO_WOLFSSL_MEMORYを定義します。 これにより、メモリ関数は次のように置き換えられます: #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) #define XFREE(p, h, t) {void xp = (p); if((xp)) free((xp));} #define XREALLOC(p, n, h, t) realloc((p), (n)) これらのオプションのいずれも選択されていない場合、システムはデフォルトでwolfSSLメモリ関数を使用します。 ユーザーはコールバックフックを通じてカスタムメモリ関数を設定できます(wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeを参照)。 このオプションは、メモリ関数を次のように置き換えます: #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))

Parameters:

  • s 割り当てるメモリのサイズ
  • h (カスタムXMALLOC関数で使用)使用するヒープへのポインタ
  • t ユーザーヒント用のメモリ割り当てタイプ。types.hの列挙型を参照

See:

Return:

  • pointer 成功時に割り当てられたメモリへのポインタを返します
  • NULL 失敗時

Example

int* tenInts = XMALLOC(sizeof(int)*10, NULL, DYNAMIC_TYPE_TMP_BUFFER);
if (tenInts == NULL) {
    // スペース割り当てエラー
    return MEMORY_E;
}

function XREALLOC

void * XREALLOC(
    void * p,
    size_t n,
    void * heap,
    int type
)

これは実際には関数ではなく、プリプロセッサマクロです。 ユーザーが標準のCメモリ関数の代わりに独自のmalloc、realloc、free関数を置き換えることを可能にします。 外部メモリ関数を使用するには、XMALLOC_USERを定義します。これにより、メモリ関数は次の形式の外部関数に置き換えられます: 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); wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeの代わりに基本的なCメモリ関数を使用するには、NO_WOLFSSL_MEMORYを定義します。 これにより、メモリ関数は次のように置き換えられます: #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) #define XFREE(p, h, t) {void xp = (p); if((xp)) free((xp));} #define XREALLOC(p, n, h, t) realloc((p), (n)) これらのオプションのいずれも選択されていない場合、システムはデフォルトでwolfSSLメモリ関数を使用します。 ユーザーはコールバックフックを通じてカスタムメモリ関数を設定できます(wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeを参照)。 このオプションは、メモリ関数を次のように置き換えます: #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))

Parameters:

  • p 再割り当てするアドレスへのポインタ
  • n 割り当てるメモリのサイズ
  • h (カスタムXREALLOC関数で使用)使用するヒープへのポインタ
  • t ユーザーヒント用のメモリ割り当てタイプ。types.hの列挙型を参照

See:

Return:

  • 成功時に割り当てられたメモリへのポインタを返します
  • NULL 失敗時

Example

int* tenInts = (int*)XMALLOC(sizeof(int)*10, NULL, DYNAMIC_TYPE_TMP_BUFFER);
int* twentyInts = (int*)XREALLOC(tenInts, sizeof(int)*20, NULL,
    DYNAMIC_TYPE_TMP_BUFFER);

function XFREE

void XFREE(
    void * p,
    void * heap,
    int type
)

これは実際には関数ではなく、プリプロセッサマクロです。 ユーザーが標準のCメモリ関数の代わりに独自のmalloc、realloc、free関数を置き換えることを可能にします。 外部メモリ関数を使用するには、XMALLOC_USERを定義します。 これにより、メモリ関数は次の形式の外部関数に置き換えられます: 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); wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeの代わりに基本的なCメモリ関数を使用するには、NO_WOLFSSL_MEMORYを定義します。 これにより、メモリ関数は次のように置き換えられます: #define XMALLOC(s, h, t) ((void)h, (void)t, malloc((s))) #define XFREE(p, h, t) {void xp = (p); if((xp)) free((xp));} #define XREALLOC(p, n, h, t) realloc((p), (n)) これらのオプションのいずれも選択されていない場合、システムはデフォルトでwolfSSLメモリ関数を使用します。 ユーザーはコールバックフックを通じてカスタムメモリ関数を設定できます(wolfSSL_Malloc、wolfSSL_Realloc、wolfSSL_Freeを参照)。 このオプションは、メモリ関数を次のように置き換えます: #define XMALLOC(s, h, t) ((void)h, (void)t, wolfSSL_Malloc((s))) #define XFREE(p, h, t) {void* xp = (p); if((xp)) wolfSSL_Free((xp));} #define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))

Parameters:

  • p 解放するアドレスへのポインタ
  • h (カスタムXFREE関数で使用)使用するヒープへのポインタ
  • t ユーザーヒント用のメモリ割り当てタイプ。types.hの列挙型を参照

See:

Return: none 戻り値なし。

Example

int* tenInts = XMALLOC(sizeof(int) * 10, NULL, DYNAMIC_TYPE_TMP_BUFFER);
if (tenInts == NULL) {
    // スペース割り当てエラー
    return MEMORY_E;
}

Updated on 2025-12-12 at 03:08:16 +0000