コンテンツにスキップ

wolfSSLの初期化/シャットダウン

Functions

Name
int wolfSSL_shutdown(WOLFSSL * )
この関数は、SSLセッションsslを使用してアクティブなSSL/TLS接続をシャットダウンします。この関数は、ピアに「close notify」アラートを送信しようと試みます。呼び出し側のアプリケーションは、ピアからの応答として「close notify」アラートが送信されるのを待つか、wolfSSL_shutdown()を直接呼び出した後に基盤となる接続をシャットダウンするか(リソースを節約するため)を選択できます。TLS仕様では、どちらのオプションも許可されています。基盤となる接続を将来再び使用する場合は、ピア間の同期を維持するために、完全な双方向シャットダウン手順を実行する必要があります。wolfSSL_shutdown()は、ブロッキングI/OとノンブロッキングI/Oの両方で動作します。基盤となるI/Oがノンブロッキングの場合、基盤となるI/OがwolfSSL_shutdown()の継続に必要な要求を満たせなかった場合、wolfSSL_shutdown()はエラーを返します。この場合、wolfSSL_get_error()を呼び出すと、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかが返されます。呼び出し側プロセスは、基盤となるI/Oの準備ができたときに、wolfSSL_shutdown()の呼び出しを繰り返す必要があります。
int wolfSSL_SetServerID(WOLFSSL * ssl, const unsigned char * id, int len, int newSession)
この関数は、クライアントセッションをサーバーIDに関連付けます。newSessionフラグがオンの場合、既存のセッションは再利用されません。
int wolfSSL_library_init(void )
この関数はwolfSSL_CTX_new()内で内部的に呼び出されます。この関数はwolfSSL_Init()のラッパーであり、wolfSSLがOpenSSL互換性レイヤーでコンパイルされた場合のOpenSSL互換性(SSL_library_init)のために存在します。wolfSSL_Init()は、より一般的に使用されるwolfSSL初期化関数です。
int wolfSSL_get_shutdown(const WOLFSSL * ssl)
この関数はOptions構造体のcloseNotify、connReset、またはsentNotifyメンバのシャットダウン条件をチェックします。Options構造体はWOLFSSL構造体内にあります。
int wolfSSL_is_init_finished(WOLFSSL * ssl)
この関数は接続が確立されているかどうかをチェックします。
int wolfSSL_Init(void )
使用するためにwolfSSLライブラリを初期化します。アプリケーションごとに1回、ライブラリへの他の呼び出しの前に呼び出す必要があります。
int wolfSSL_Cleanup(void )
wolfSSLライブラリをこれ以上使用しないように初期化を解除します。呼び出す必要はありませんが、ライブラリが使用したリソースを解放します。
int wolfSSL_SetMinVersion(WOLFSSL * ssl, int version)
この関数は、許可される最小ダウングレードバージョンを設定します。ダウングレードを許可する接続(wolfSSLv23_client_methodまたはwolfSSLv23_server_method)を使用する場合にのみ適用されます。
int wolfSSL_ALPN_GetProtocol(WOLFSSL * ssl, char ** protocol_name, unsigned short * size)
この関数は、サーバーによって設定されたプロトコル名を取得します。
int wolfSSL_ALPN_GetPeerProtocol(WOLFSSL * ssl, char ** list, unsigned short * listSz)
この関数は、SSLオブジェクトからalpn_client_listデータをバッファにコピーします。
int wolfSSL_MakeTlsMasterSecret(unsigned char * ms, word32 msLen, const unsigned char * pms, word32 pmsLen, const unsigned char * cr, const unsigned char * sr, int tls1_2, int hash_type)
この関数は、crとsrの値をコピーし、wc_PRF(疑似乱数関数)に渡し、その値を返します。
int wolfSSL_preferred_group(WOLFSSL * ssl)
この関数は、TLS v1.3ハンドシェイクでクライアントが優先的に使用したい鍵交換グループを返します。ハンドシェイク完了後にこの関数を呼び出して、サーバが優先するグループを判定し、この情報を将来の接続で使用して鍵交換用の鍵ペアを事前生成できます。
void wolfSSL_CTX_set_client_CA_list(WOLFSSL_CTX * ctx, WOLF_STACK_OF(WOLFSSL_X509_NAME) * names)
サーバ側では、この関数は証明書要求でクライアントに送信されるCA名のリストを設定します。これは、サーバがサポートするCAのヒントとして機能します。
WOLFSSL_STACK * wolfSSL_CTX_get_client_CA_list(const WOLFSSL_CTX * ctx)
これは、wolfSSL_CTX_set_client_CA_listを介して以前に設定されたリストを取得します。リストが設定されていない場合はNULLを返します。
void wolfSSL_set_client_CA_list(WOLFSSL * ssl, WOLF_STACK_OF(WOLFSSL_X509_NAME) * names)
wolfSSL_CTX_set_client_CA_listと同じですが、セッション固有です。CAリストがコンテキストとセッションの両方に設定されている場合、セッション上のリストが使用されます。
WOLFSSL_STACK * wolfSSL_get_client_CA_list(const WOLFSSL * ssl)
サーバ側では、wolfSSL_set_client_CA_listを介して以前に設定されたリストを取得します。何も設定されていない場合は、wolfSSL_CTX_set_client_CA_listを介して以前に設定されたリストを返します。リストが全く設定されていない場合は、NULLを返します。
void wolfSSL_CTX_set0_CA_list(WOLFSSL_CTX * ctx, WOLF_STACK_OF(WOLFSSL_X509_NAME) * names)
この関数は、ピアの認証でサポートされているCAのヒントとしてピアに送信されるCA名のリストを設定します。
WOLFSSL_STACK * wolfSSL_CTX_get0_CA_list(const WOLFSSL_CTX * ctx)
これは、wolfSSL_CTX_set0_CA_listを介して以前に設定されたリストを取得します。リストが設定されていない場合はNULLを返します。
void wolfSSL_set0_CA_list(WOLFSSL * ssl, WOLF_STACK_OF(WOLFSSL_X509_NAME) * names)
wolfSSL_CTX_set0_CA_listと同じですが、セッション固有です。CAリストがコンテキストとセッションの両方に設定されている場合、セッション上のリストが使用されます。
WOLFSSL_STACK * wolfSSL_get0_CA_list(const WOLFSSL * ssl)
これは、wolfSSL_set0_CA_listを介して以前に設定されたリストを取得します。何も設定されていない場合は、wolfSSL_CTX_set0_CA_listを介して以前に設定されたリストを返します。リストが全く設定されていない場合は、NULLを返します。
WOLFSSL_STACK * wolfSSL_get0_peer_CA_list(const WOLFSSL * ssl)
これは、ピアから受信したCAリストを返します。
void wolfSSL_CTX_set_cert_cb(WOLFSSL_CTX * ctx, int()(WOLFSSL , void *) cb, void * arg)
この関数は、証明書が使用される直前に呼び出されるコールバックを設定し、アプリケーションが証明書を検査、設定、またはクリアできるようにします。例えば、ピアから送信されたCAリストに反応することができます。
int wolfSSL_get_client_suites_sigalgs(const WOLFSSL * ssl, const byte suites, word16 * suiteSz, const byte hashSigAlgo, word16 * hashSigAlgoSz)
この関数は、クライアントが提供する暗号スイートと署名アルゴリズムの生のリストを返します。リストは、wolfSSL_CTX_set_cert_cb()で設定されたコールバック内でのみ保存され、返されます。これは、利用可能な暗号スイートと署名アルゴリズムに基づいて証明書と鍵を動的にロードできるようにするのに便利です。
WOLFSSL_CIPHERSUITE_INFO wolfSSL_get_ciphersuite_info(byte first, byte second)
これは、生の暗号スイートバイトから直接暗号スイートに関する情報を返します。
int wolfSSL_get_sigalg_info(byte first, byte second, int * hashAlgo, int * sigAlgo)
これは、生の暗号スイートバイトから直接ハッシュおよび署名アルゴリズムに関する情報を返します。

Functions Documentation

function wolfSSL_shutdown

int wolfSSL_shutdown(
    WOLFSSL * 
)

この関数は、SSLセッションsslを使用してアクティブなSSL/TLS接続をシャットダウンします。この関数は、ピアに「close notify」アラートを送信しようと試みます。呼び出し側のアプリケーションは、ピアからの応答として「close notify」アラートが送信されるのを待つか、wolfSSL_shutdown()を直接呼び出した後に基盤となる接続をシャットダウンするか(リソースを節約するため)を選択できます。TLS仕様では、どちらのオプションも許可されています。基盤となる接続を将来再び使用する場合は、ピア間の同期を維持するために、完全な双方向シャットダウン手順を実行する必要があります。wolfSSL_shutdown()は、ブロッキングI/OとノンブロッキングI/Oの両方で動作します。基盤となるI/Oがノンブロッキングの場合、基盤となるI/OがwolfSSL_shutdown()の継続に必要な要求を満たせなかった場合、wolfSSL_shutdown()はエラーを返します。この場合、wolfSSL_get_error()を呼び出すと、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかが返されます。呼び出し側プロセスは、基盤となるI/Oの準備ができたときに、wolfSSL_shutdown()の呼び出しを繰り返す必要があります。

Parameters:

  • ssl wolfSSL_new()で作成されたSSLセッションへのポインタ。

See:

Return:

  • SSL_SUCCESSが成功時に返されます。
  • SSL_SHUTDOWN_NOT_DONEは、シャットダウンが完了していない場合に返され、関数を再度呼び出す必要があります。
  • SSL_FATAL_ERRORは、失敗時に返されます。より具体的なエラーコードについては、wolfSSL_get_error()を呼び出してください。

Example

#include <wolfssl/ssl.h>

int ret = 0;
WOLFSSL* ssl = 0;
...
ret = wolfSSL_shutdown(ssl);
if (ret != 0) {
    // SSL接続のシャットダウンに失敗しました
}

function wolfSSL_SetServerID

int wolfSSL_SetServerID(
    WOLFSSL * ssl,
    const unsigned char * id,
    int len,
    int newSession
)

この関数は、クライアントセッションをサーバーIDに関連付けます。newSessionフラグがオンの場合、既存のセッションは再利用されません。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • id WOLFSSL_SESSION構造体のserverIDメンバーにコピーされる定数バイトポインタ。
  • len セッションidパラメータの長さを表すint型。
  • newSession セッションを再利用するかどうかを示すフラグを表すint型。

See: wolfSSL_set_session

Return:

  • SSL_SUCCESSは、関数がエラーなく実行された場合に返されます。
  • BAD_FUNC_ARGは、WOLFSSL構造体またはidパラメータがNULLの場合、またはlenが0より大きくない場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol );
WOLFSSL* ssl = WOLFSSL_new(ctx);
const byte id[MAX_SIZE];  // または動的にスペースを作成
int len = 0; // 長さを初期化
int newSession = 0; // 許可するフラグ
…
int ret = wolfSSL_SetServerID(ssl, id, len, newSession);

if (ret == WOLFSSL_SUCCESS) {
    // IDが正常に設定されました
}

function wolfSSL_library_init

int wolfSSL_library_init(
    void 
)

この関数はwolfSSL_CTX_new()内で内部的に呼び出されます。この関数はwolfSSL_Init()のラッパーであり、wolfSSLがOpenSSL互換性レイヤーでコンパイルされた場合のOpenSSL互換性(SSL_library_init)のために存在します。wolfSSL_Init()は、より一般的に使用されるwolfSSL初期化関数です。

Parameters:

  • none パラメータはありません。

See:

Return:

  • SSL_SUCCESS 呼び出しが成功した場合に返されます。
  • SSL_FATAL_ERROR 失敗時に返されます。

Example

int ret = 0;
ret = wolfSSL_library_init();
if (ret != SSL_SUCCESS) {
    // wolfSSLの初期化に失敗しました
}
...

function wolfSSL_get_shutdown

int wolfSSL_get_shutdown(
    const WOLFSSL * ssl
)

この関数はOptions構造体のcloseNotify、connReset、またはsentNotifyメンバのシャットダウン条件をチェックします。Options構造体はWOLFSSL構造体内にあります。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体への定数ポインタ。

See: wolfSSL_SESSION_free

Return:

  • 1 SSL_SENT_SHUTDOWNが返されます。
  • 2 SSL_RECEIVED_SHUTDOWNが返されます。

Example

#include <wolfssl/ssl.h>

WOLFSSL_CTX* ctx = WOLFSSL_CTX_new( protocol method );
WOLFSSL* ssl = WOLFSSL_new(ctx);
…
int ret;
ret = wolfSSL_get_shutdown(ssl);

if(ret == 1){
    // SSL_SENT_SHUTDOWN
} else if(ret == 2){
    // SSL_RECEIVED_SHUTDOWN
} else {
    // 致命的エラー。
}

function wolfSSL_is_init_finished

int wolfSSL_is_init_finished(
    WOLFSSL * ssl
)

この関数は接続が確立されているかどうかをチェックします。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

  • wolfSSL_set_accept_state
  • wolfSSL_get_keys
  • wolfSSL_set_shutdown

Return:

  • 0 接続が確立されていない場合に返されます、つまりWOLFSSL構造体がNULLまたはハンドシェイクが完了していない場合。
  • 1 接続が確立されている場合に返されます、つまりWOLFSSLハンドシェイクが完了している場合。

EXAMPLE

#include <wolfssl/ssl.h>

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
...
if(wolfSSL_is_init_finished(ssl)){
    // ハンドシェイクが完了し、接続が確立されています
}

function wolfSSL_Init

int wolfSSL_Init(
    void 
)

使用するためにwolfSSLライブラリを初期化します。アプリケーションごとに1回、ライブラリへの他の呼び出しの前に呼び出す必要があります。

See: wolfSSL_Cleanup

Return:

  • SSL_SUCCESS 成功した場合に返されます。
  • BAD_MUTEX_E 返される可能性のあるエラーです。
  • WC_INIT_E wolfCrypt初期化エラーが返されます。

Example

int ret = 0;
ret = wolfSSL_Init();
if (ret != SSL_SUCCESS) {
    wolfSSLライブラリの初期化に失敗しました
}

function wolfSSL_Cleanup

int wolfSSL_Cleanup(
    void 
)

wolfSSLライブラリをこれ以上使用しないように初期化を解除します。呼び出す必要はありませんが、ライブラリが使用したリソースを解放します。

See: wolfSSL_Init

Return:

  • SSL_SUCCESS エラーなしで返されます。
  • BAD_MUTEX_E mutexエラーが返されます。

Example

wolfSSL_Cleanup();

function wolfSSL_SetMinVersion

int wolfSSL_SetMinVersion(
    WOLFSSL * ssl,
    int version
)

この関数は、許可される最小ダウングレードバージョンを設定します。ダウングレードを許可する接続(wolfSSLv23_client_methodまたはwolfSSLv23_server_method)を使用する場合にのみ適用されます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • version 最小値として設定されるバージョンの整数表現: WOLFSSL_SSLV3 = 0、WOLFSSL_TLSV1 = 1、WOLFSSL_TLSV1_1 = 2、またはWOLFSSL_TLSV1_2 = 3。

See: SetMinVersionHelper

Return:

  • SSL_SUCCESS この関数とそのサブルーチンがエラーなく実行された場合に返されます。
  • BAD_FUNC_ARG SSLオブジェクトがNULLの場合に返されます。サブルーチンでは、バージョンマッチが良好でない場合にこのエラーがスローされます。

Example

WOLFSSL_CTX* ctx = WOLFSSL_CTX_new(protocol method);
WOLFSSL* ssl = WOLFSSL_new(ctx);
int version;  // マクロ表現
…
if(wolfSSL_CTX_SetMinVersion(ssl->ctx, version) != SSL_SUCCESS){
    // 最小バージョンの設定に失敗
}

function wolfSSL_ALPN_GetProtocol

int wolfSSL_ALPN_GetProtocol(
    WOLFSSL * ssl,
    char ** protocol_name,
    unsigned short * size
)

この関数は、サーバーによって設定されたプロトコル名を取得します。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • protocol_name プロトコル名を表し、ALPN構造体に保持されるcharへのポインタ。
  • size protocol_nameのサイズを表すword16型。

See:

  • TLSX_ALPN_GetRequest
  • TLSX_Find

Return:

  • SSL_SUCCESS エラーがスローされずに正常に実行された場合に返されます。
  • SSL_FATAL_ERROR 拡張が見つからなかった場合、またはピアとのプロトコルマッチがなかった場合に返されます。また、受け入れられたプロトコル名が複数ある場合にもエラーがスローされます。
  • SSL_ALPN_NOT_FOUND ピアとのプロトコルマッチが見つからなかったことを示して返されます。
  • BAD_FUNC_ARG 関数にNULL引数が渡された場合に返されます。

Example

WOLFSSL_CTX* ctx = WOLFSSL_CTX_new( protocol method );
WOLFSSL* ssl = WOLFSSL_new(ctx);
...
int err;
char* protocol_name = NULL;
Word16 protocol_nameSz = 0;
err = wolfSSL_ALPN_GetProtocol(ssl, &protocol_name, &protocol_nameSz);

if(err == SSL_SUCCESS){
    // ALPNプロトコルを送信
}

function wolfSSL_ALPN_GetPeerProtocol

int wolfSSL_ALPN_GetPeerProtocol(
    WOLFSSL * ssl,
    char ** list,
    unsigned short * listSz
)

この関数は、SSLオブジェクトからalpn_client_listデータをバッファにコピーします。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • list バッファへのポインタ。SSLオブジェクトからのデータがここにコピーされます。
  • listSz バッファサイズ。

See: wolfSSL_UseALPN

Return:

  • SSL_SUCCESS 関数がエラーなく実行された場合に返されます。SSLオブジェクトのalpn_client_listメンバがlistパラメータにコピーされました。
  • BAD_FUNC_ARG listまたはlistSzパラメータがNULLの場合に返されます。
  • BUFFER_ERROR listバッファに問題がある場合に返されます(NULLであるか、サイズが0の場合)。
  • MEMORY_ERROR メモリの動的割り当てに問題があった場合に返されます。

Example

#import <wolfssl/ssl.h>

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method);
WOLFSSL* ssl = wolfSSL_new(ctx);
…
#ifdef HAVE_ALPN
char* list = NULL;
word16 listSz = 0;
…
err = wolfSSL_ALPN_GetPeerProtocol(ssl, &list, &listSz);

if(err == SSL_SUCCESS){
    // クライアントが送信したプロトコル名のリスト
}

function wolfSSL_MakeTlsMasterSecret

int wolfSSL_MakeTlsMasterSecret(
    unsigned char * ms,
    word32 msLen,
    const unsigned char * pms,
    word32 pmsLen,
    const unsigned char * cr,
    const unsigned char * sr,
    int tls1_2,
    int hash_type
)

この関数は、crとsrの値をコピーし、wc_PRF(疑似乱数関数)に渡し、その値を返します。

Parameters:

  • ms Arrays構造体に保持されているマスターシークレット。
  • msLen マスターシークレットの長さ。
  • pms Arrays構造体に保持されているプリマスターシークレット。
  • pmsLen プリマスターシークレットの長さ。
  • cr クライアントランダム。
  • sr サーバランダム。
  • tls1_2 バージョンが少なくともTLSバージョン1.2であることを示します。
  • hash_type ハッシュタイプを示します。

See:

  • wc_PRF
  • MakeTlsMasterSecret

Return:

  • 0 成功時。
  • BUFFER_E バッファのサイズでエラーが発生する場合に返されます。
  • MEMORY_E サブルーチンが動的メモリの割り当てに失敗した場合に返されます。

Example

WOLFSSL* ssl;

MakeTlsMasterSecretで呼び出され、以下のように必要な情報を取得します:

int MakeTlsMasterSecret(WOLFSSL* ssl){
    int ret;
    ret = wolfSSL_makeTlsMasterSecret(ssl->arrays->masterSecret, SECRET_LEN,
        ssl->arrays->preMasterSecret, ssl->arrays->preMasterSz,
        ssl->arrays->clientRandom, ssl->arrays->serverRandom,
        IsAtLeastTLSv1_2(ssl), ssl->specs.mac_algorithm);
    …
    return ret;
}

function wolfSSL_preferred_group

int wolfSSL_preferred_group(
    WOLFSSL * ssl
)

この関数は、TLS v1.3ハンドシェイクでクライアントが優先的に使用したい鍵交換グループを返します。ハンドシェイク完了後にこの関数を呼び出して、サーバが優先するグループを判定し、この情報を将来の接続で使用して鍵交換用の鍵ペアを事前生成できます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。

See:

Return:

  • BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  • SIDE_ERROR サーバで呼び出された場合。
  • NOT_READY_ERROR ハンドシェイク完了前に呼び出された場合。
  • Group identifier 成功時、グループ識別子。

Example

int ret;
int group;
WOLFSSL* ssl;
...
ret = wolfSSL_CTX_set1_groups_list(ssl)
if (ret < 0) {
    // グループの取得に失敗しました
}
group = ret;

function wolfSSL_CTX_set_client_CA_list

void wolfSSL_CTX_set_client_CA_list(
    WOLFSSL_CTX * ctx,
    WOLF_STACK_OF(WOLFSSL_X509_NAME) * names
)

サーバ側では、この関数は証明書要求でクライアントに送信されるCA名のリストを設定します。これは、サーバがサポートするCAのヒントとして機能します。

Parameters:

  • ctx wolfSSLコンテキストへのポインタ。
  • names 設定される名前のリスト。

See:

クライアント側では、この関数は効果がありません。

function wolfSSL_CTX_get_client_CA_list

WOLFSSL_STACK * wolfSSL_CTX_get_client_CA_list(
    const WOLFSSL_CTX * ctx
)

これは、wolfSSL_CTX_set_client_CA_listを介して以前に設定されたリストを取得します。リストが設定されていない場合はNULLを返します。

Parameters:

  • ctx wolfSSLコンテキストへのポインタ。

See:

Return: CA名を含むWOLFSSL_X509_NAMEのスタック。

function wolfSSL_set_client_CA_list

void wolfSSL_set_client_CA_list(
    WOLFSSL * ssl,
    WOLF_STACK_OF(WOLFSSL_X509_NAME) * names
)

wolfSSL_CTX_set_client_CA_listと同じですが、セッション固有です。CAリストがコンテキストとセッションの両方に設定されている場合、セッション上のリストが使用されます。

Parameters:

  • ssl WOLFSSLオブジェクトへのポインタ。
  • names 設定する名前のリスト。

See:

function wolfSSL_get_client_CA_list

WOLFSSL_STACK * wolfSSL_get_client_CA_list(
    const WOLFSSL * ssl
)

サーバ側では、wolfSSL_set_client_CA_listを介して以前に設定されたリストを取得します。何も設定されていない場合は、wolfSSL_CTX_set_client_CA_listを介して以前に設定されたリストを返します。リストが全く設定されていない場合は、NULLを返します。

Parameters:

  • ssl WOLFSSLオブジェクトへのポインタ。

See:

Return: CA名を含むWOLFSSL_X509_NAMEのスタック。

クライアント側では、サーバから受信したリストを取得します。何も受信していない場合はNULLを返します。wolfSSL_CTX_set_cert_cbを使用して、サーバから証明書要求を受信したときに証明書を動的にロードするコールバックを登録できます。

function wolfSSL_CTX_set0_CA_list

void wolfSSL_CTX_set0_CA_list(
    WOLFSSL_CTX * ctx,
    WOLF_STACK_OF(WOLFSSL_X509_NAME) * names
)

この関数は、ピアの認証でサポートされているCAのヒントとしてピアに送信されるCA名のリストを設定します。

Parameters:

  • ctx wolfSSLコンテキストへのポインタ。
  • names 設定する名前のリスト。

See:

TLS >= 1.3では、これはクライアントとサーバ間の両方向でサポートされています。サーバ側では、CA名はCertificateRequestの一部として送信されるため、この関数は*_set_client_CA_listと同等です。クライアント側では、これらはClientHelloの一部として送信されます。

TLS < 1.3では、クライアントからサーバへのCA名の送信はサポートされていないため、この関数はwolfSSL_CTX_set_client_CA_listと同等です。

_set_client_CA_listと_set0_CA_listを介して設定されたリストは内部的に別々であることに注意してください。つまり、_get_client_CA_listを呼び出しても_set0_CA_listを介して設定されたリストは取得されず、その逆も同様です。両方が設定されている場合、サーバはクライアントにCA名を送信する際に_set0_CA_listを無視します。

function wolfSSL_CTX_get0_CA_list

WOLFSSL_STACK * wolfSSL_CTX_get0_CA_list(
    const WOLFSSL_CTX * ctx
)

これは、wolfSSL_CTX_set0_CA_listを介して以前に設定されたリストを取得します。リストが設定されていない場合はNULLを返します。

Parameters:

  • ctx wolfSSLコンテキストへのポインタ。

See:

Return: CA名を含むWOLFSSL_X509_NAMEのスタック。

function wolfSSL_set0_CA_list

void wolfSSL_set0_CA_list(
    WOLFSSL * ssl,
    WOLF_STACK_OF(WOLFSSL_X509_NAME) * names
)

wolfSSL_CTX_set0_CA_listと同じですが、セッション固有です。CAリストがコンテキストとセッションの両方に設定されている場合、セッション上のリストが使用されます。

Parameters:

  • ssl WOLFSSLオブジェクトへのポインタ。
  • names 設定する名前のリスト。

See:

function wolfSSL_get0_CA_list

WOLFSSL_STACK * wolfSSL_get0_CA_list(
    const WOLFSSL * ssl
)

これは、wolfSSL_set0_CA_listを介して以前に設定されたリストを取得します。何も設定されていない場合は、wolfSSL_CTX_set0_CA_listを介して以前に設定されたリストを返します。リストが全く設定されていない場合は、NULLを返します。

Parameters:

  • ssl WOLFSSLオブジェクトへのポインタ。

See:

Return: CA名を含むWOLFSSL_X509_NAMEのスタック。

function wolfSSL_get0_peer_CA_list

WOLFSSL_STACK * wolfSSL_get0_peer_CA_list(
    const WOLFSSL * ssl
)

これは、ピアから受信したCAリストを返します。

Parameters:

  • ssl WOLFSSLオブジェクトへのポインタ。

See:

Return: CA名を含むWOLFSSL_X509_NAMEのスタック。

クライアント側では、これはサーバがCertificateRequestで送信したリストであり、この関数はwolfSSL_get_client_CA_listと同等です。

サーバ側では、これはTLS >= 1.3でクライアントがClientHelloメッセージで送信したリストです。TLS < 1.3では、この関数はサーバ側で常にNULLを返します。

wolfSSL_CTX_set_cert_cbを使用して、ピアからCAリストを受信したときに証明書を動的にロードするコールバックを登録できます。

function wolfSSL_CTX_set_cert_cb

void wolfSSL_CTX_set_cert_cb(
    WOLFSSL_CTX * ctx,
    int(*)(WOLFSSL *, void *) cb,
    void * arg
)

この関数は、証明書が使用される直前に呼び出されるコールバックを設定し、アプリケーションが証明書を検査、設定、またはクリアできるようにします。例えば、ピアから送信されたCAリストに反応することができます。

Parameters:

  • ctx wolfSSLコンテキストへのポインタ。
  • cb コールバックへの関数ポインタ。
  • arg コールバックに渡されるポインタ。

See:

function wolfSSL_get_client_suites_sigalgs

int wolfSSL_get_client_suites_sigalgs(
    const WOLFSSL * ssl,
    const byte ** suites,
    word16 * suiteSz,
    const byte ** hashSigAlgo,
    word16 * hashSigAlgoSz
)

この関数は、クライアントが提供する暗号スイートと署名アルゴリズムの生のリストを返します。リストは、wolfSSL_CTX_set_cert_cb()で設定されたコールバック内でのみ保存され、返されます。これは、利用可能な暗号スイートと署名アルゴリズムに基づいて証明書と鍵を動的にロードできるようにするのに便利です。

Parameters:

  • ssl リストを抽出するWOLFSSLオブジェクト。
  • optional suites クライアント暗号スイートの生の未フィルタリストリスト。
  • optional suiteSz suitesのサイズ(バイト単位)。
  • optional hashSigAlgo クライアント署名アルゴリズムの生の未フィルタリストリスト。
  • optional hashSigAlgoSz hashSigAlgoのサイズ(バイト単位)。

See:

Return:

  • WOLFSSL_SUCCESS スイートが利用可能な場合。
  • WOLFSSL_FAILURE スイートが利用できない場合。

Example

int certCB(WOLFSSL* ssl, void* arg)
{
    const byte* suites = NULL;
    word16 suiteSz = 0;
    const byte* hashSigAlgo = NULL;
    word16 hashSigAlgoSz = 0;

    wolfSSL_get_client_suites_sigalgs(ssl, &suites, &suiteSz, &hashSigAlgo,
            &hashSigAlgoSz);

    // 暗号スイートとsigalgsに基づいてロードする証明書を選択
}

WOLFSSL* ctx;
ctx  = wolfSSL_CTX_new(wolfTLSv1_3_method_ex(NULL));
wolfSSL_CTX_set_cert_cb(ctx, certCB, NULL);

function wolfSSL_get_ciphersuite_info

WOLFSSL_CIPHERSUITE_INFO wolfSSL_get_ciphersuite_info(
    byte first,
    byte second
)

これは、生の暗号スイートバイトから直接暗号スイートに関する情報を返します。

Parameters:

  • first 暗号スイートの最初のバイト。
  • second 暗号スイートの2番目のバイト。

See:

Return: WOLFSSL_CIPHERSUITE_INFO 暗号スイートで使用される認証のタイプに関する情報を含む構造体。

Example

WOLFSSL_CIPHERSUITE_INFO info =
        wolfSSL_get_ciphersuite_info(suites[0], suites[1]);
if (info.rsaAuth)
    haveRSA = 1;
else if (info.eccAuth)
    haveECC = 1;

function wolfSSL_get_sigalg_info

int wolfSSL_get_sigalg_info(
    byte first,
    byte second,
    int * hashAlgo,
    int * sigAlgo
)

これは、生の暗号スイートバイトから直接ハッシュおよび署名アルゴリズムに関する情報を返します。

Parameters:

  • first ハッシュおよび署名アルゴリズムの最初のバイト。
  • second ハッシュおよび署名アルゴリズムの2番目のバイト。
  • hashAlgo MACアルゴリズムのenum wc_HashType。
  • sigAlgo 認証アルゴリズムのenum Key_Sum。

See:

Return:

  • 0 情報が正しく設定された場合。
  • BAD_FUNC_ARG 入力パラメータのいずれかがNULLの場合、またはバイトが認識されるsigalgスイートでない場合。

Example

enum wc_HashType hashAlgo;
enum Key_Sum sigAlgo;

wolfSSL_get_sigalg_info(hashSigAlgo[idx+0], hashSigAlgo[idx+1],
        &hashAlgo, &sigAlgo);

if (sigAlgo == RSAk || sigAlgo == RSAPSSk)
    haveRSA = 1;
else if (sigAlgo == ECDSAk)
    haveECC = 1;

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