コンテンツにスキップ

wolfSSL Initialization/Shutdown

Functions

Name
int wolfSSL_shutdown(WOLFSSL * )
この関数は、引数sslのSSLセッションに対してアクティブなSSL/TLS接続をシャットダウンします。 この関数は、ピアに"Close Notify"アラートを送信しようとします。 呼び出し側アプリケーションは、Peerがその"Close Notify"アラートを応答として送信してくるのを待つか、 またはwolfSSL_shutdownから呼び出しが戻った時点で(リソースを保存するために)下層の接続を切断するのを待つことができます。 どちらのオプションもTLS仕様で許されています。シャットダウンした後に下層の接続を再び別のセッションで使用する予定ならば、ピア間で同期を保つために完全な2方向のシャットダウン手順を実行する必要があります。 wolfSSL_shutdown()は、ブロックとノンブロッキング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 API(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)
この関数は、alpn_client_listデータをSSLオブジェクトからバッファにコピーします。
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ハンドシェイクで使用することを好む鍵交換グループを返します。この情報を完了した後にこの機能を呼び出して、サーバーがどのグループが予想されるようにこの情報が将来の接続で使用できるようになるかを決定するために、この情報が将来の接続で鍵交換のための鍵ペアを事前生成することができます。

Functions Documentation

function wolfSSL_shutdown

int wolfSSL_shutdown(
    WOLFSSL * 
)

この関数は、引数sslのSSLセッションに対してアクティブなSSL/TLS接続をシャットダウンします。 この関数は、ピアに"Close Notify"アラートを送信しようとします。 呼び出し側アプリケーションは、Peerがその"Close Notify"アラートを応答として送信してくるのを待つか、 またはwolfSSL_shutdownから呼び出しが戻った時点で(リソースを保存するために)下層の接続を切断するのを待つことができます。 どちらのオプションもTLS仕様で許されています。シャットダウンした後に下層の接続を再び別のセッションで使用する予定ならば、ピア間で同期を保つために完全な2方向のシャットダウン手順を実行する必要があります。 wolfSSL_shutdown()は、ブロックとノンブロッキング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()を使用して作成されたWOLFSSL構造体へのポインタ

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) {
    // failed to shut down SSL connection
}

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メンバーにコピーされるサーバーIDデータへのポインタ。
  • len サーバーIDデータのサイズ
  • newSession セッションを再利用するか否かを指定するフラグ。オンの場合、既存のセッションは再利用されません。

See: wolfSSL_set_session

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  • BAD_FUNC_ARG 引数sslまたは引数idがNULLの場合、または引数lenがゼロ以下の場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol );
WOLFSSL* ssl = WOLFSSL_new(ctx);
const byte id[MAX_SIZE];  // or dynamically create space
int len = 0; // initialize length
int newSession = 0; // flag to allow
…
int ret = wolfSSL_SetServerID(ssl, id, len, newSession);

if (ret == WOLFSSL_SUCCESS) {
    // The Id was successfully set
}

function wolfSSL_library_init

int wolfSSL_library_init(
    void 
)

この関数はwolfSSL_CTX_new()内で内部的に呼び出されます。 この関数はwolfSSL_Init()のラッパーで、wolfSSLがOpenSSL互換層でコンパイルされたときのOpenSSL API(ssl_library_init)との互換性の為に存在します。 wolfSSL_init()は、より一般的に使用されているwolfSSL初期化機能です。

See:

Return:

  • SSL_SUCCESS 成功した場合に返されます。に返されます。
  • SSL_FATAL_ERROR 失敗したときに返されます。

Example

int ret = 0;
ret = wolfSSL_library_init();
if (ret != SSL_SUCCESS) {
    failed to initialize 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 {
    Fatal error.
}

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構造体はNULLまたはハンドシェイクが行われていません。

Example

#include <wolfssl/ssl.h>

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
...
if(wolfSSL_is_init_finished(ssl)){
    Handshake is done and connection is established
}

function wolfSSL_Init

int wolfSSL_Init(
    void 
)

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

See: wolfSSL_Cleanup

Return:

  • SSL_SUCCESS 成功した場合に返されます。、通話が戻ります。
  • BAD_MUTEX_E 返される可能性があるエラーです。

Example

int ret = 0;
ret = wolfSSL_Init();
if (ret != SSL_SUCCESS) {
    failed to initialize wolfSSL library
}

function wolfSSL_Cleanup

int wolfSSL_Cleanup(
    void 
)

さらなる使用からWOLFSSLライブラリを初期化します。ライブラリによって使用されるリソースを解放しますが、呼び出される必要はありません。

See: wolfSSL_Init

Return: SSL_SUCCESS エラーを返しません。

Example

wolfSSL_Cleanup();

function wolfSSL_SetMinVersion

int wolfSSL_SetMinVersion(
    WOLFSSL * ssl,
    int version
)

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

Parameters:

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

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;  macro representation
…
if(wolfSSL_CTX_SetMinVersion(ssl->ctx, version) != SSL_SUCCESS){
    Failed to set min version
}

function wolfSSL_ALPN_GetProtocol

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

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

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  • protocol_name プロトコル名を表すCHARへのポインタは、ALPN構造に保持されます。

See:

  • TLSX_ALPN_GetRequest
  • TLSX_Find

Return:

  • SSL_SUCCESS エラーが投げられていない正常な実行に戻りました。
  • SSL_FATAL_ERROR 拡張子が見つからなかった場合、またはピアとプロトコルが一致しなかった場合に返されます。2つ以上のプロトコル名が受け入れられている場合は、スローされたエラーもあります。
  • 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){
    // Sent ALPN protocol
}

function wolfSSL_ALPN_GetPeerProtocol

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

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

Parameters:

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

See: wolfSSL_UseALPN

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。SSLオブジェクトのALPN_CLIENT_LISTメンバーがLISTパラメータにコピーされました。
  • BAD_FUNC_ARG listまたはlistszパラメーターがnullの場合に返されます。
  • BUFFER_ERROR リストバッファに問題がある場合は(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){
    List of protocols names sent by client
}

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 マスターシークレットはアレイ構造に保持されています。
  • msLen マスターシークレットの長さ。
  • pms マスター前の秘密はアレイ構造に保持されています。
  • pmsLen マスタープレマスターシークレットの長さ。
  • cr クライアントのランダム
  • sr サーバーのランダムです。
  • tls1_2 バージョンが少なくともTLSバージョン1.2であることを意味します。

See:

  • wc_PRF
  • MakeTlsMasterSecret

Return:

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

Example

WOLFSSL* ssl;

called in MakeTlsMasterSecret and retrieves the necessary
information as follows:

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 ハンドシェイクが完了する前に呼び出された場合。

Example

int ret;
int group;
WOLFSSL* ssl;
...
ret = wolfSSL_CTX_set1_groups_list(ssl)
if (ret < 0) {
    // failed to get group
}
group = ret;

Updated on 2024-12-20 at 02:18:42 +0000