コンテンツにスキップ

wolfSSL Connection, Session, and I/O

Functions

Name
long wolfSSL_get_verify_depth(WOLFSSL * ssl)
この関数は、有効なセッション(NULL以外の引数ssl)が指定された場合に、デフォルトで9の最大チェーン深度を返します。
char * wolfSSL_get_cipher_list(int priority)
この関数は引数で渡された優先順位の暗号名(Cipher)文字列へのポインタを返します。
int wolfSSL_get_ciphers(char * buf, int len)
この関数はwolfSSで有効化されている暗号名(Cipher)を取得します。
const char * wolfSSL_get_cipher_name(WOLFSSL * ssl)
この関数は、引数をwolfSSL_get_cipher_name_internalに渡すことによって、DHE-RSAの形式の暗号名を取得します。
int wolfSSL_get_fd(const WOLFSSL * )
この関数は、SSL接続の入出力機能として使用されるファイル記述子(fd)を返します。通常これはソケットファイル記述子になります。
int wolfSSL_get_using_nonblock(WOLFSSL * )
この機能により、wolfSSLがノンブロッキングI/Oを使用しているかどうかをアプリケーションが判断できます。 wolfSSLがノンブロッキングI/Oを使用している場合、この関数は1を返します。 アプリケーションがWOLFSSLオブジェクトを生成した後にwolfSSL_set_using_nonblock()を呼び出してノンブロッキングソケットを使うとこの関数は1を返します。 これにより、WOLFSSLオブジェクトは、recevfromがタイムアウトせず代わりにEWOULDBLOCKを受信するようになります。
int wolfSSL_write(WOLFSSL * ssl, const void * data, int sz)
この関数は、バッファあるいはデータから、SSL接続に対して、szバイトを書き込みます。 必要に応じて、wolfSSL_write()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。 wolfSSL_write()は、ブロックとノンブロッキングI/Oの両方で動作します。 基礎となる入出力がノンブロッキングに設定されている場合、wolfSSL_write()が要求を満たすことができなかったらwolfSSL_write()は関数呼び出しからすぐに戻ります。 この場合、wolfSSL_get_error()の呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを返します。 その結果、基礎となるI/Oが準備ができたら、呼び出し側プロセスはwolfssl_write()への呼び出しを繰り返す必要があります。 基礎となる入出力がブロックされている場合、WolfSSL_WRITE()は、サイズSZのバッファデータが完全に書かれたかエラーが発生したら、戻るだけです。
int wolfSSL_read(WOLFSSL * ssl, void * data, int sz)
この関数は、SSLセッション(ssl)の内部読み取りバッファからszバイトをバッファデータに読み出します。 読み取られたバイトは内部受信バッファから削除されます。 必要に応じて、wolfSSL_read()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは /wolfssl/internal.h)。 そのため、wolfSSLは、レコードを処理および復号することができる前に、SSLレコード全体を内部的に読み取る必要があります。 このため、wolfSSL_read()への呼び出しは、呼び出し時に復号された最大バッファサイズを返すことができます。 検索され、次回のwolfSSL_read()への呼び出しで復号される内部wolfSSL受信バッファで待機していない追加の復号データがあるかもしれません。 szが内部読み取りバッファ内のバイト数より大きい場合、wolfSSL_read()は内部読み取りバッファで使用可能なバイトを返します。 BYTESが内部読み取りバッファにバッファされていない場合は、wolfSSL_read()への呼び出しは次のレコードの処理をトリガーします。
int wolfSSL_peek(WOLFSSL * ssl, void * data, int sz)
この関数はSSLセッション(SSL)内部読み取りバッファからSZバイトをバッファデータにコピーします。この関数は、内部SSLセッション受信バッファ内のデータが削除されていないか変更されていないことを除いて、wolfssl_read()と同じです。必要に応じて、wolfssl_read()のように、wolfssl_peek()はまだwolfssl_connect()またはwolfssl_accept()によってまだ実行されていない場合、wolfssl_peek()はSSL / TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは /wolfssl/internal.h)。そのため、WolfSSLは、レコードを処理および復号化することができる前に、SSLレコード全体を内部的に読み取る必要があります。このため、wolfssl_peek()への呼び出しは、呼び出し時に復号化された最大バッファサイズを返すことができます。 wolfssl_peek()/ wolfssl_read()への次の呼び出しで検索および復号化される内部WolfSSL受信バッファ内で待機していない追加の復号化データがあるかもしれません。 SZが内部読み取りバッファ内のバイト数よりも大きい場合、SSL_PEEK()は内部読み取りバッファで使用可能なバイトを返します。バイトが内部読み取りバッファにバッファされていない場合、Wolfssl_peek()への呼び出しは次のレコードの処理をトリガーします。
int wolfSSL_accept(WOLFSSL * )
この関数はサーバー側で呼び出され、SSLクライアントがSSL/TLSハンドシェイクを開始するのを待ちます。 この関数が呼び出されると、基礎となる通信チャネルはすでに設定されています。 wolfSSL_accept()は、ブロックとノンブロッキングI/Oの両方で動作します。 基礎となる入出力がノンブロッキングである場合、wolfSSL_accept()は、基礎となるI/OがwolfSSL_acceptの要求を満たすことができなかったときに戻ります。 この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。 呼び出しプロセスは、読み取り可能なデータが使用可能であり、wolfSSLが停止した場所を拾うときに、wolfSSL_acceptの呼び出しを繰り返す必要があります。 ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。 基礎となるI/Oがブロックされている場合、wolfSSL_accept()はハンドシェイクが終了したら、またはエラーが発生したら戻ります。
int wolfSSL_send(WOLFSSL * ssl, const void * data, int sz, int flags)
この関数は、書き込み操作のために指定されたフラグを使用してバッファあるいはデータから、SSL接続に対して、szバイトを書き込みます。 必要に応じて、wolfSSL_send()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。 wolfSSL_send()は、ブロックとノンブロッキングI/Oの両方で動作します。 基礎となる入出力がノンブロッキングに設定されている場合、wolfSSL_send()が要求を満たすことができなかったらwolfSSL_send()は関数呼び出しからすぐに戻ります。 この場合、wolfSSL_get_error()の呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを返します。 その結果、基礎となるI/Oが準備ができたら、呼び出し側プロセスはwolfSSL_send()への呼び出しを繰り返す必要があります。 基礎となる入出力がブロックされている場合、wolfSSL_send()は、サイズSZのバッファデータが完全に書かれたかエラーが発生したら、戻るだけです。
int wolfSSL_recv(WOLFSSL * ssl, void * data, int sz, int flags)
この関数は、基礎となるRECV動作のために指定されたフラグを使用して、SSLセッション(ssl)内部読み取りバッファからszバイトをバッファデータに読み出します。 読み取られたバイトは内部受信バッファから削除されます。 この関数はwolfssl_read()と同じです。 ただし、アプリケーションが基礎となる読み取り操作のRECVフラグを設定できることを許可します。 必要に応じてwolfssl_recv()がwolfssl_connect()またはwolfssl_accept()によってハンドシェイクがまだ実行されていない場合は、SSL/TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは /wolfssl/internal.h)。 そのため、wolfSSLは、レコードを処理および復号することができる前に、SSLレコード全体を内部的に読み取る必要があります。 このため、wolfSSL_recv()への呼び出しは、呼び出し時に復号された最大バッファサイズを返すことができるだけです。 wolfSSL_recv()への次の呼び出しで検索および復号される内部wolfSSL受信バッファで待機していない追加の復号化されたデータがあるかもしれません。 引数szが内部読み取りバッファ内のバイト数よりも大きい場合、wolfSSL_recv()は内部読み取りバッファで使用可能なバイトを返します。 バイトが内部読み取りバッファにバッファされていない場合は、wolfSSL_recv()への呼び出しは次のレコードの処理をトリガーします。
int wolfSSL_get_alert_history(WOLFSSL * ssl, WOLFSSL_ALERT_HISTORY * h)
この関数はアラート履歴を取得します。
WOLFSSL_SESSION * wolfSSL_get_session(WOLFSSL * ssl)
NO_SESSION_CACHE_REFが定義されている場合、この関数はSSLで使用されている現在のセッション(WOLFSSL_SESSION)へのポインタを返します。 この関数は、WOLFSSL_SESSIONオブジェクトへの永続的なポインタを返します。 返されるポインタは、wolfSSL_freeが呼び出されたときに解放されます。 この呼び出しは、現在のセッションを検査または変更するためにのみ使用されます。 セッション再開に使用する場合は、wolfSSL_get1_session()を使用することをお勧めします。 NO_SESSION_CACHE_REFが定義されていない場合の後方互換性のために、この関数はローカルキャッシュに格納されている永続セッションオブジェクトポインタを返します。 キャッシュサイズは有限であり、アプリケーションがwolfSSL_set_session()を呼び出す時までにセッションオブジェクトが別のSSL接続によって上書きされる危険性があります。 アプリケーションにNO_SESSION_CACHE_REFを定義し、セッション再開にwolfSSL_get1_session()を使用することをお勧めします。
void wolfSSL_flush_sessions(WOLFSSL_CTX * ctx, long tm)
この機能は、期限切れになったセッションキャッシュからセッションをフラッシュします。 時間比較には引数tmが使用されます。 wolfSSLは現在セッションに静的テーブルを使用しているため、フラッシングは不要です。 そのため、この機能は現在スタブとして存在しています。 この関数は、wolfsslがOpenSSL互換層でコンパイルされているときのOpenSSL互換性(ssl_flush_sessions)を提供します。
int wolfSSL_GetSessionIndex(WOLFSSL * ssl)
この関数は、WOLFSSL構造体の指定セッションインデックス値を取得します。
int wolfSSL_GetSessionAtIndex(int index, WOLFSSL_SESSION * session)
この関数はセッションキャッシュの指定されたインデックスのセッションを取得し、それをメモリにコピーします。 WOLFSSL_SESSION構造体はセッション情報を保持します。
WOLFSSL_X509_CHAIN * wolfSSL_SESSION_get_peer_chain(WOLFSSL_SESSION * session)
WOLFSSL_SESSION構造体からピア証明書チェーンを返します。
int wolfSSL_pending(WOLFSSL * )
この関数は、wolfSSL_read()によって読み取られるWOLFSSLオブジェクトでバッファされているバイト数を返します。
int wolfSSL_save_session_cache(const char * fname)
この関数はセッションキャッシュをファイルに持続します。追加のメモリ使用のため、memsaveは使用されません。
int wolfSSL_restore_session_cache(const char * fname)
この関数はファイルから永続セッションキャッシュを復元します。追加のメモリ使用のため、memstoreは使用しません。
int wolfSSL_memsave_session_cache(void * mem, int sz)
この関数はセッションキャッシュをメモリに保持します。
int wolfSSL_memrestore_session_cache(const void * mem, int sz)
この関数はメモリから永続セッションキャッシュを復元します。
int wolfSSL_get_session_cache_memsize(void )
この関数は、セッションキャッシュ保存バッファをどのように大きくするかを返します。
int wolfSSL_session_reused(WOLFSSL * ssl)
この関数は、オプション構造体の再開メンバを返します。フラグはセッションを再利用するかどうかを示します。そうでなければ、新しいセッションを確立する必要があります。
const char * wolfSSL_get_version(WOLFSSL * ssl)
文字列として使用されているSSLバージョンを返します。
int wolfSSL_get_current_cipher_suite(WOLFSSL * ssl)
SSLセッションで現在の暗号スイートを返します。
WOLFSSL_CIPHER * wolfSSL_get_current_cipher(WOLFSSL * ssl)
この関数は、SSLセッションの現在の暗号へのポインタを返します。
const char * wolfSSL_CIPHER_get_name(const WOLFSSL_CIPHER * cipher)
この関数は、SSLオブジェクト内のCipher Suiteと使用可能なスイートと一致し、文字列表現を返します。
const char * wolfSSL_get_cipher(WOLFSSL * ssl)
この関数は、SSLオブジェクト内の暗号スイートと使用可能なスイートと一致します。
int wolfSSL_BIO_get_mem_data(WOLFSSL_BIO * bio, void * p)
この関数は、内部メモリバッファの先頭へのバイトポインタを設定するために使用されます。
long wolfSSL_BIO_set_fd(WOLFSSL_BIO * b, int fd, int flag)
使用するBIOのファイル記述子を設定します。
int wolfSSL_BIO_set_close(WOLFSSL_BIO * b, long flag)
BIOが解放されたときにI/Oストリームを閉じる必要があることを示すために使用されるクローズフラグを設定します。
WOLFSSL_BIO_METHOD * wolfSSL_BIO_s_socket(void )
この関数はBIO_SOCKETタイプのWOLFSSL_BIO_METHODを取得するために使用されます。
int wolfSSL_BIO_set_write_buf_size(WOLFSSL_BIO * b, long size)
この関数は、WOLFSSL_BIOのライトバッファのサイズを設定するために使用されます。 書き込みバッファが以前に設定されている場合、この関数はサイズをリセットするときに解放されます。 読み書きインデックスを0にリセットするという点で、wolfSSL_BIO_resetに似ています。
int wolfSSL_BIO_make_bio_pair(WOLFSSL_BIO * b1, WOLFSSL_BIO * b2)
これは2つのBIOSを一緒にペアリングするために使用されます。一対のBIOSは、2つの方法パイプと同様に、他方で読み取られることができ、その逆も同様である。BIOSの両方が同じスレッド内にあることが予想されます。この機能はスレッドセーフではありません。2つのBIOSのうちの1つを解放すると、両方ともペアになっています。書き込みバッファサイズが以前に設定されていない場合、それはペアになる前に17000(wolfssl_bio_size)のデフォルトサイズに設定されます。
int wolfSSL_BIO_ctrl_reset_read_request(WOLFSSL_BIO * bio)
この関数は、読み取り要求フラグを0に戻すために使用されます。
int wolfSSL_BIO_nread0(WOLFSSL_BIO * bio, char ** buf)
int wolfSSL_BIO_nread(WOLFSSL_BIO * bio, char ** buf, int num)
int wolfSSL_BIO_nwrite(WOLFSSL_BIO * bio, char ** buf, int num)
関数によって返される数のバイトを書き込むためにバッファーへのポインタを取得します。 返されるポインタに追加のバイトを書き込んだ場合、返された値は範囲外の書き込みにつながる可能性があります。
int wolfSSL_BIO_reset(WOLFSSL_BIO * bio)
バイオを初期状態にリセットします。タイプBIO_BIOの例として、これは読み書きインデックスをリセットします。
int wolfSSL_BIO_seek(WOLFSSL_BIO * bio, int ofs)
この関数は、指定されたオフセットへファイルポインタを調整します。これはファイルの先頭からのオフセットです。
int wolfSSL_BIO_write_filename(WOLFSSL_BIO * bio, char * name)
これはファイルに設定および書き込むために使用されます。現在ファイル内のデータを上書きし、BIOが解放されたときにファイルを閉じるように設定されます。
long wolfSSL_BIO_set_mem_eof_return(WOLFSSL_BIO * bio, int v)
これはファイル値の終わりを設定するために使用されます。一般的な値は予想される正の値と混同されないように-1です。
long wolfSSL_BIO_get_mem_ptr(WOLFSSL_BIO * bio, WOLFSSL_BUF_MEM ** m)
これはWolfSSL_BIOメモリポインタのゲッター関数です。
const char * wolfSSL_lib_version(void )
この関数は現在のライブラリーバージョンを返します。
word32 wolfSSL_lib_version_hex(void )
この関数は、現在のライブラリーのバージョンを16進表記で返します。
int wolfSSL_negotiate(WOLFSSL * ssl)
SSLメソッドの側面に基づいて、実際の接続または承認を実行します。クライアント側から呼び出された場合、サーバ側から呼び出された場合にwolfssl_accept()が実行されている間にwolfssl_connect()が行われる。
int wolfSSL_connect_cert(WOLFSSL * ssl)
この関数はクライアント側で呼び出され、ピアの証明書チェーンを取得するのに十分な長さだけサーバーを持つSSL / TLSハンドシェイクを開始します。この関数が呼び出されると、基礎となる通信チャネルはすでに設定されています。 wolfssl_connect_cert()は、ブロックと非ブロックI / Oの両方で動作します。基礎となるI / Oがノンブロッキングである場合、wolfsl_connect_cert()は、wolfssl_connect_cert_cert()のニーズを満たすことができなかったときに戻ります。ハンドシェイクを続けます。この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。通話プロセスは、基礎となるI / Oが準備ができて、wolfsslがオフになっているところを拾うときに、wolfssl_connect_cert()への呼び出しを繰り返す必要があります。ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。基礎となる入出力がブロックされている場合、wolfssl_connect_cert()はピアの証明書チェーンが受信されたらのみ返されます。
int wolfSSL_writev(WOLFSSL * ssl, const struct iovec * iov, int iovcnt)
Writev Semanticsをシミュレートしますが、SSL_Write()の動作のために実際にはブロックしないため、フロント追加が小さくなる可能性があるためWritevを使いやすいソフトウェアに移植する。
unsigned char wolfSSL_SNI_Status(WOLFSSL * ssl, unsigned char type)
この関数はSNIオブジェクトのステータスを取得します。
int wolfSSL_UseSecureRenegotiation(WOLFSSL * ssl)
この関数は、供給されたWOLFSSL構造の安全な再交渉を強制します。これはお勧めできません。
int wolfSSL_Rehandshake(WOLFSSL * ssl)
この関数は安全な再交渉ハンドシェイクを実行します。これは、WolfSSLがこの機能を妨げるように強制されます。
int wolfSSL_UseSessionTicket(WOLFSSL * ssl)
セッションチケットを使用するようにWolfSSL構造を強制します。定数hous_session_ticketを定義し、定数NO_WOLFSSL_CLIENTをこの関数を使用するように定義しないでください。
int wolfSSL_get_SessionTicket(WOLFSSL * ssl, unsigned char * buf, word32 * bufSz)
この機能は、セッション構造のチケットメンバーをバッファにコピーします。
int wolfSSL_set_SessionTicket(WOLFSSL * ssl, const unsigned char * buf, word32 bufSz)
この関数は、WolfSSL構造体内のwolfssl_session構造体のチケットメンバーを設定します。関数に渡されたバッファはメモリにコピーされます。
int wolfSSL_PrintSessionStats(void )
この関数はセッションから統計を印刷します。
int wolfSSL_get_session_stats(unsigned int * active, unsigned int * total, unsigned int * peak, unsigned int * maxSessions)
この関数はセッションの統計を取得します。
long wolfSSL_BIO_set_fp(WOLFSSL_BIO * bio, XFILE fp, int c)
これはBIOの内部ファイルポインタを設定するために使用されます。
size_t wolfSSL_BIO_ctrl_pending(WOLFSSL_BIO * b)
保留中のバイト数を読み取る数を取得します。BIOタイプがBIO_BIOの場合、ペアから読み取る番号です。BIOにSSLオブジェクトが含まれている場合は、SSLオブジェクトからのデータを保留中です(WolfSSL_Pending(SSL))。bio_memoryタイプがある場合は、メモリバッファのサイズを返します。
int wolfSSL_set_jobject(WOLFSSL * ssl, void * objPtr)
この関数は、WolfSSL構造のjobjectrefメンバーを設定します。
void * wolfSSL_get_jobject(WOLFSSL * ssl)
この関数は、wolfssl構造のjobjectrefメンバーを返します。
int wolfSSL_connect(WOLFSSL * ssl)
この関数はクライアント側で呼び出され、サーバーとのSSL/TLSハンドシェイクを開始します。 この関数が呼び出されるまでに下層の通信チャネルはすでに設定されている必要があります。 wolfSSL_connect()は、ブロッキングとノンブロッキングI/Oの両方で動作します。 下層のI/Oがノンブロッキングの場合、wolfSSL_connect()は、下層のI/OがwolfSSL_connectの要求(送信データ、受信データ)を満たすことができなかったときには即戻ります。 この場合、wolfSSL_get_error()の呼び出しでSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかが返されます。 呼び出したプロセスは、下層のI/OががREADYになった時点で、WOLFSSLが停止したときから再開できるようにwolfSSL_connect()への呼び出しを繰り返す必要があります。 これにはselect()を使用して必要な条件が整ったかどうかを確認できます。 ブロッキングI/Oを使用する場合は、ハンドシェークが終了するかエラーが発生するまで戻ってきません。 wolfSSLはOpenSSLと比べて証明書検証に異なるアプローチを取ります。クライアントのデフォルトポリシーはサーバーを認証することです。 これは、CA証明書を読み込まない場合、サーバーを確認することができず”_155”のエラーコードが返されます。 OpenSSLと同じ振る舞い(つまり、CA証明書のロードなしでサーバー認証を成功させる)を取らせたい場合には、セキュリティ面でお勧めはしませんが、 SSL_CTX_SET_VERIFY(ctx、SSL_VERIFY_NONE、0)を呼び出すことで可能となります。
int wolfSSL_update_keys(WOLFSSL * ssl)
この関数は、TLS v1.3クライアントまたはサーバーのwolfsslで呼び出されて、キーのロールオーバーを強制します。KeyUpdateメッセージがピアに送信され、新しいキーが暗号化のために計算されます。ピアはKeyUpdateメッセージを送り、新しい復号化キーWILを計算します。この機能は、ハンドシェイクが完了した後にのみ呼び出すことができます。
int wolfSSL_key_update_response(WOLFSSL * ssl, int * required)
この関数は、TLS v1.3クライアントまたはサーバーのwolfsslで呼び出され、キーのロールオーバーが進行中かどうかを判断します。wolfssl_update_keys()が呼び出されると、KeyUpdateメッセージが送信され、暗号化キーが更新されます。復号化キーは、応答が受信されたときに更新されます。
int wolfSSL_request_certificate(WOLFSSL * ssl)
この関数は、TLS v1.3クライアントからクライアント証明書を要求します。これは、Webサーバーがクライアント認証やその他のものを必要とするページにサービスを提供している場合に役立ちます。接続で最大256の要求を送信できます。
int wolfSSL_connect_TLSv13(WOLFSSL * ssl)
この関数はクライアント側で呼び出され、サーバーとのTLS v1.3ハンドシェイクを開始します。 この関数が呼び出されると、下層の通信チャネルはすでに設定されています。 wolfSSL_connect()は、ブロックとノンブロックI/Oの両方で動作します。 下層I/Oがノンブロッキングの場合、wolfSSL_connect()は、下層I/Oがwolfssl_connectの要求を満たすことができなかったときに戻ります。 この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。 通話プロセスは、下層I/OがREADYおよびWOLFSSLが停止したときにwolfssl_connect()への呼び出しを繰り返す必要があります。 ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。 基礎となる入出力がブロックされている場合、wolfssl_connect()はハンドシェイクが終了したら、またはエラーが発生したらのみ戻ります。 WolfSSLはOpenSSLよりも証明書検証に異なるアプローチを取ります。 クライアントのデフォルトポリシーはサーバーを確認することです。 これは、CASを読み込まない場合、サーバーを確認することができ、確認できません(_155)。 SSL_CONNECTを持つことのOpenSSLの動作が成功した場合は、サーバーを検証してセキュリティを抑えることができます。 SSL_CTX_SET_VERIFY(CTX、SSL_VERIFY_NONE、0)。 ssl_new()を呼び出す前に。お勧めできませんが。
wolfSSL_accept_TLSv13(WOLFSSL * ssl)
この関数はサーバー側で呼び出され、SSL/TLSクライアントがSSL/TLSハンドシェイクを開始するのを待ちうけます。 この関数が呼び出されると、下層の通信チャネルはすでに設定されています。 wolfSSL_accept()は、ブロックとノンブロッキングI/Oの両方で動作します。 下層の入出力がノンブロッキングである場合、wolfSSL_accept()は、下層のI/OがwolfSSL_acceptの要求を満たすことができなかったときに戻ります。 この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。 通話プロセスは、読み取り可能なデータが使用可能であり、wolfsslが停止した場所を拾うときに、wolfssl_acceptの呼び出しを繰り返す必要があります。 ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。 下層のI/Oがブロックされている場合、wolfssl_accept()はハンドシェイクが終了したら、またはエラーが発生したら戻ります。 古いバージョンのClientHelloメッセージがサポートされていますが、TLS v1.3接続を期待するときにこの関数を呼び出します。
int wolfSSL_write_early_data(WOLFSSL * ssl, const void * data, int sz, int * outSz)
この関数は、セッション再開時にサーバーにアーリーデータを書き込みます。 wolfSSL_connect()またはwolfSSL_connect_tlsv13()の代わりにこの関数を呼び出して、サーバーに接続してハンドシェイクにデータを送ります。 この機能はクライアントでのみ使用されます。
int wolfSSL_read_early_data(WOLFSSL * ssl, void * data, int sz, int * outSz)
この関数は、再開時にクライアントからの早期データを読み取ります。wolfssl_accept()またはwolfssl_accept_tlsv13()の代わりにこの関数を呼び出して、クライアントを受け入れ、ハンドシェイク内の早期データを読み取ります。ハンドシェイクよりも早期データがない場合は、通常として処理されます。この機能はサーバーでのみ使用されます。
void * wolfSSL_GetIOReadCtx(WOLFSSL * ssl)
この関数は、WolfSSL構造体のIOCB_READCTXメンバーを返します。
void * wolfSSL_GetIOWriteCtx(WOLFSSL * ssl)
この関数は、WolfSSL構造のIOCB_WRITECTXメンバーを返します。
void wolfSSL_SetIO_NetX(WOLFSSL * ssl, NX_TCP_SOCKET * nxsocket, ULONG waitoption)
この関数は、wolfssl構造内のnxctx構造体のNxSocketメンバーとNXWAITメンバーを設定します。

Functions Documentation

function wolfSSL_get_verify_depth

long wolfSSL_get_verify_depth(
    WOLFSSL * ssl
)

この関数は、有効なセッション(NULL以外の引数ssl)が指定された場合に、デフォルトで9の最大チェーン深度を返します。

See: wolfSSL_CTX_get_verify_depth

Return:

  • MAX_CHAIN_DEPTH WOLFSSL構造体がNULLではない場合に返されます。デフォルトでは値は9です。
  • BAD_FUNC_ARG WOLFSSL構造体がNULLの場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
...
long sslDep = wolfSSL_get_verify_depth(ssl);

if(sslDep > EXPECTED){
    // The verified depth is greater than what was expected
} else {
    // The verified depth is smaller or equal to the expected value
}

function wolfSSL_get_cipher_list

char * wolfSSL_get_cipher_list(
    int priority
)

この関数は引数で渡された優先順位の暗号名(Cipher)文字列へのポインタを返します。

Parameters:

  • priority 整数値で指定する優先順位

See:

Return:

  • 成功時には暗号名(Cipher)文字列へのポインタを返します。
  • 0 引数で渡された優先順位が範囲外かあるいは無効な値であった場合に返されます。

Example

printf("The cipher at 1 is %s", wolfSSL_get_cipher_list(1));

function wolfSSL_get_ciphers

int wolfSSL_get_ciphers(
    char * buf,
    int len
)

この関数はwolfSSで有効化されている暗号名(Cipher)を取得します。

Parameters:

  • buf 文字列を格納するバッファへのポインタ。
  • len バッファのサイズ

See:

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  • BAD_FUNC_ARG 引数bufがNULLの場合、または引数lenがゼロ以下の場合に返されます。
  • BUFFER_E バッファが十分に大きくなく、オーバーフローする可能性がある場合に返されます。

Example

static void ShowCiphers(void){
char* ciphers;
int ret = wolfSSL_get_ciphers(ciphers, (int)sizeof(ciphers));

if(ret == SSL_SUCCES){
        printf(“%s\n”, ciphers);
    }
}

function wolfSSL_get_cipher_name

const char * wolfSSL_get_cipher_name(
    WOLFSSL * ssl
)

この関数は、引数をwolfSSL_get_cipher_name_internalに渡すことによって、DHE-RSAの形式の暗号名を取得します。

Parameters:

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

See:

Return:

  • 成功時には一致した暗号スイートの文字列表現を返します。
  • NULL エラーまたは暗号が見つからない場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
…
char* cipherS = wolfSSL_get_cipher_name(ssl);

if(cipher == NULL){
    // There was not a cipher suite matched
} else {
    // There was a cipher suite matched
    printf(“%s\n”, cipherS);
}

function wolfSSL_get_fd

int wolfSSL_get_fd(
    const WOLFSSL * 
)

この関数は、SSL接続の入出力機能として使用されるファイル記述子(fd)を返します。通常これはソケットファイル記述子になります。

See: wolfSSL_set_fd

Return: fd 成功時にはSSLセッションに関連つけられているファイル記述子を返します。

Example

int sockfd;
WOLFSSL* ssl = 0;
...
sockfd = wolfSSL_get_fd(ssl);
...

function wolfSSL_get_using_nonblock

int wolfSSL_get_using_nonblock(
    WOLFSSL * 
)

この機能により、wolfSSLがノンブロッキングI/Oを使用しているかどうかをアプリケーションが判断できます。 wolfSSLがノンブロッキングI/Oを使用している場合、この関数は1を返します。 アプリケーションがWOLFSSLオブジェクトを生成した後にwolfSSL_set_using_nonblock()を呼び出してノンブロッキングソケットを使うとこの関数は1を返します。 これにより、WOLFSSLオブジェクトは、recevfromがタイムアウトせず代わりにEWOULDBLOCKを受信するようになります。

See: wolfSSL_set_session

Return:

  • 0 基礎となるI/Oがブロックされています。
  • 1 基礎となるI/Oは非ブロッキングです。

Example

int ret = 0;
WOLFSSL* ssl = 0;
...
ret = wolfSSL_get_using_nonblock(ssl);
if (ret == 1) {
    // underlying I/O is non-blocking
}
...

function wolfSSL_write

int wolfSSL_write(
    WOLFSSL * ssl,
    const void * data,
    int sz
)

この関数は、バッファあるいはデータから、SSL接続に対して、szバイトを書き込みます。 必要に応じて、wolfSSL_write()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。 wolfSSL_write()は、ブロックとノンブロッキングI/Oの両方で動作します。 基礎となる入出力がノンブロッキングに設定されている場合、wolfSSL_write()が要求を満たすことができなかったらwolfSSL_write()は関数呼び出しからすぐに戻ります。 この場合、wolfSSL_get_error()の呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを返します。 その結果、基礎となるI/Oが準備ができたら、呼び出し側プロセスはwolfssl_write()への呼び出しを繰り返す必要があります。 基礎となる入出力がブロックされている場合、WolfSSL_WRITE()は、サイズSZのバッファデータが完全に書かれたかエラーが発生したら、戻るだけです。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  • data ピアに送信されるデータを含んでいるバッファへのポインタ。
  • sz 送信データを含んでいるバッファのサイズ

See:

Return:

  • 成功時には書き込んだバイト数(1以上)を返します。
  • 0 失敗したときに返されます。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  • SSL_FATAL_ERROR エラーが発生したとき、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度WOLFSSL_WRITE()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

WOLFSSL* ssl = 0;
char msg[64] = “hello wolfssl!”;
int msgSz = (int)strlen(msg);
int flags;
int ret;
...

ret = wolfSSL_write(ssl, msg, msgSz);
if (ret <= 0) {
    // wolfSSL_write() failed, call wolfSSL_get_error()
}

function wolfSSL_read

int wolfSSL_read(
    WOLFSSL * ssl,
    void * data,
    int sz
)

この関数は、SSLセッション(ssl)の内部読み取りバッファからszバイトをバッファデータに読み出します。 読み取られたバイトは内部受信バッファから削除されます。 必要に応じて、wolfSSL_read()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは /wolfssl/internal.h)。 そのため、wolfSSLは、レコードを処理および復号することができる前に、SSLレコード全体を内部的に読み取る必要があります。 このため、wolfSSL_read()への呼び出しは、呼び出し時に復号された最大バッファサイズを返すことができます。 検索され、次回のwolfSSL_read()への呼び出しで復号される内部wolfSSL受信バッファで待機していない追加の復号データがあるかもしれません。 szが内部読み取りバッファ内のバイト数より大きい場合、wolfSSL_read()は内部読み取りバッファで使用可能なバイトを返します。 BYTESが内部読み取りバッファにバッファされていない場合は、wolfSSL_read()への呼び出しは次のレコードの処理をトリガーします。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  • data wolfSSL_read()が読み取るデータを格納するバッファへのポインタ。
  • sz バッファに読み取るデータのサイズ

See:

Return:

  • 成功時には読み取られたバイト数(1以上)を返します。
  • 0 失敗したときに返されます。これは、クリーン(通知アラートを閉じる)シャットダウンまたはピアが接続を閉じただけであることによって発生する可能性があります。 特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  • SSL_FATAL_ERROR エラーが発生したとき、またはノンブロッキングソケットを使用するときに、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度wolfSSL_read()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

WOLFSSL* ssl = 0;
char reply[1024];
...

input = wolfSSL_read(ssl, reply, sizeof(reply));
if (input > 0) {
    // “input” number of bytes returned into buffer “reply”
}

See wolfSSL examples (client, server, echoclient, echoserver) for more
complete examples of wolfSSL_read().

function wolfSSL_peek

int wolfSSL_peek(
    WOLFSSL * ssl,
    void * data,
    int sz
)

この関数はSSLセッション(SSL)内部読み取りバッファからSZバイトをバッファデータにコピーします。この関数は、内部SSLセッション受信バッファ内のデータが削除されていないか変更されていないことを除いて、wolfssl_read()と同じです。必要に応じて、wolfssl_read()のように、wolfssl_peek()はまだwolfssl_connect()またはwolfssl_accept()によってまだ実行されていない場合、wolfssl_peek()はSSL / TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは /wolfssl/internal.h)。そのため、WolfSSLは、レコードを処理および復号化することができる前に、SSLレコード全体を内部的に読み取る必要があります。このため、wolfssl_peek()への呼び出しは、呼び出し時に復号化された最大バッファサイズを返すことができます。 wolfssl_peek()/ wolfssl_read()への次の呼び出しで検索および復号化される内部WolfSSL受信バッファ内で待機していない追加の復号化データがあるかもしれません。 SZが内部読み取りバッファ内のバイト数よりも大きい場合、SSL_PEEK()は内部読み取りバッファで使用可能なバイトを返します。バイトが内部読み取りバッファにバッファされていない場合、Wolfssl_peek()への呼び出しは次のレコードの処理をトリガーします。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  • data wolfSSL_peek()がデータを読み取るバッファー。
  • sz バッファに読み取るデータのサイズ

See: wolfSSL_read

Return:

  • 成功時には読み取られたバイト数(1以上)を返します。
  • 0 失敗したときに返されます。これは、クリーン(通知アラートを閉じる)シャットダウンまたはピアが接続を閉じただけであることによって発生する可能性があります。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  • SSL_FATAL_ERROR エラーが発生したとき、またはノンブロッキングソケットを使用するときに、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度wolfSSL_peek()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

WOLFSSL* ssl = 0;
char reply[1024];
...

input = wolfSSL_peek(ssl, reply, sizeof(reply));
if (input > 0) {
    // “input” number of bytes returned into buffer “reply”
}

function wolfSSL_accept

int wolfSSL_accept(
    WOLFSSL * 
)

この関数はサーバー側で呼び出され、SSLクライアントがSSL/TLSハンドシェイクを開始するのを待ちます。 この関数が呼び出されると、基礎となる通信チャネルはすでに設定されています。 wolfSSL_accept()は、ブロックとノンブロッキングI/Oの両方で動作します。 基礎となる入出力がノンブロッキングである場合、wolfSSL_accept()は、基礎となるI/OがwolfSSL_acceptの要求を満たすことができなかったときに戻ります。 この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。 呼び出しプロセスは、読み取り可能なデータが使用可能であり、wolfSSLが停止した場所を拾うときに、wolfSSL_acceptの呼び出しを繰り返す必要があります。 ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。 基礎となるI/Oがブロックされている場合、wolfSSL_accept()はハンドシェイクが終了したら、またはエラーが発生したら戻ります。

Parameters:

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

See:

Return:

  • SSL_SUCCESS 成功時に返されます。
  • SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
char buffer[80];
...

ret = wolfSSL_accept(ssl);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_send

int wolfSSL_send(
    WOLFSSL * ssl,
    const void * data,
    int sz,
    int flags
)

この関数は、書き込み操作のために指定されたフラグを使用してバッファあるいはデータから、SSL接続に対して、szバイトを書き込みます。 必要に応じて、wolfSSL_send()の呼び出し時点ではまだwolfSSL_connect()またはwolfSSL_accept()がまだ呼び出されていない場合、SSL/TLSセッションをネゴシエートします。 wolfSSL_send()は、ブロックとノンブロッキングI/Oの両方で動作します。 基礎となる入出力がノンブロッキングに設定されている場合、wolfSSL_send()が要求を満たすことができなかったらwolfSSL_send()は関数呼び出しからすぐに戻ります。 この場合、wolfSSL_get_error()の呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを返します。 その結果、基礎となるI/Oが準備ができたら、呼び出し側プロセスはwolfSSL_send()への呼び出しを繰り返す必要があります。 基礎となる入出力がブロックされている場合、wolfSSL_send()は、サイズSZのバッファデータが完全に書かれたかエラーが発生したら、戻るだけです。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  • data ピアに送信されるデータを含んでいるバッファへのポインタ。
  • sz 送信データを含んでいるバッファのサイズ
  • flags 下層のI/Oのsendに対して指定するフラグ

See:

Return:

  • 成功時には書き込んだバイト数(1以上)を返します。
  • 0 失敗したときに返されます。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  • SSL_FATAL_ERROR エラーが発生したとき、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度WOLFSSL_WRITE()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

WOLFSSL* ssl = 0;
char msg[64] = “hello wolfssl!”;
int msgSz = (int)strlen(msg);
int flags = ... ;
...

input = wolfSSL_send(ssl, msg, msgSz, flags);
if (input != msgSz) {
    // wolfSSL_send() failed
}

function wolfSSL_recv

int wolfSSL_recv(
    WOLFSSL * ssl,
    void * data,
    int sz,
    int flags
)

この関数は、基礎となるRECV動作のために指定されたフラグを使用して、SSLセッション(ssl)内部読み取りバッファからszバイトをバッファデータに読み出します。 読み取られたバイトは内部受信バッファから削除されます。 この関数はwolfssl_read()と同じです。 ただし、アプリケーションが基礎となる読み取り操作のRECVフラグを設定できることを許可します。 必要に応じてwolfssl_recv()がwolfssl_connect()またはwolfssl_accept()によってハンドシェイクがまだ実行されていない場合は、SSL/TLSセッションをネゴシエートします。 SSL/TLSプロトコルは、最大サイズのSSLレコードを使用します(最大レコードサイズは /wolfssl/internal.h)。 そのため、wolfSSLは、レコードを処理および復号することができる前に、SSLレコード全体を内部的に読み取る必要があります。 このため、wolfSSL_recv()への呼び出しは、呼び出し時に復号された最大バッファサイズを返すことができるだけです。 wolfSSL_recv()への次の呼び出しで検索および復号される内部wolfSSL受信バッファで待機していない追加の復号化されたデータがあるかもしれません。 引数szが内部読み取りバッファ内のバイト数よりも大きい場合、wolfSSL_recv()は内部読み取りバッファで使用可能なバイトを返します。 バイトが内部読み取りバッファにバッファされていない場合は、wolfSSL_recv()への呼び出しは次のレコードの処理をトリガーします。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  • data wolfSSL_recv()がデータを読み取るバッファー。
  • sz データを読み込むためのバイト数。

See:

Return:

  • 成功時には読み取られたバイト数(1以上)を返します。
  • 0 失敗したときに返されます。これは、クリーン(通知アラートを閉じる)シャットダウンまたはピアが接続を閉じただけであることによって発生する可能性があります。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  • SSL_FATAL_ERROR エラーが発生した場合、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが発生し、アプリケーションが再びWOLFSSL_RECV()を呼び出す必要があります。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

WOLFSSL* ssl = 0;
char reply[1024];
int flags = ... ;
...

input = wolfSSL_recv(ssl, reply, sizeof(reply), flags);
if (input > 0) {
    // “input” number of bytes returned into buffer “reply”
}

function wolfSSL_get_alert_history

int wolfSSL_get_alert_history(
    WOLFSSL * ssl,
    WOLFSSL_ALERT_HISTORY * h
)

この関数はアラート履歴を取得します。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  • h WOLFSSL構造体の"alert_history member" の値が格納される、WOLFSSL_ALERT_HISTORY構造体へのポインタ。

See: wolfSSL_get_error

Return: SSL_SUCCESS 関数が正常に完了したときに返されます。警告履歴があったか、またはいずれにも、戻り値はSSL_SUCCESSです。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new(protocol method);
WOLFSSL* ssl = wolfSSL_new(ctx);
WOLFSSL_ALERT_HISTORY* h;
...
wolfSSL_get_alert_history(ssl, h);
// h now has a copy of the ssl->alert_history  contents

function wolfSSL_get_session

WOLFSSL_SESSION * wolfSSL_get_session(
    WOLFSSL * ssl
)

NO_SESSION_CACHE_REFが定義されている場合、この関数はSSLで使用されている現在のセッション(WOLFSSL_SESSION)へのポインタを返します。 この関数は、WOLFSSL_SESSIONオブジェクトへの永続的なポインタを返します。 返されるポインタは、wolfSSL_freeが呼び出されたときに解放されます。 この呼び出しは、現在のセッションを検査または変更するためにのみ使用されます。 セッション再開に使用する場合は、wolfSSL_get1_session()を使用することをお勧めします。 NO_SESSION_CACHE_REFが定義されていない場合の後方互換性のために、この関数はローカルキャッシュに格納されている永続セッションオブジェクトポインタを返します。 キャッシュサイズは有限であり、アプリケーションがwolfSSL_set_session()を呼び出す時までにセッションオブジェクトが別のSSL接続によって上書きされる危険性があります。 アプリケーションにNO_SESSION_CACHE_REFを定義し、セッション再開にwolfSSL_get1_session()を使用することをお勧めします。

See:

Return:

  • 現在のSSLセッションオブジェクトへのポインタを返します。
  • NULL sslがNULLの場合、SSLセッションキャッシュが無効になっている場合、wolfSSLはセッションIDを使用できない、またはミューテックス関数が失敗した場合に返されます。

Example

WOLFSSL* ssl;
WOLFSSL_SESSION* session;
...
session = wolfSSL_get_session(ssl);
if (session == NULL) {
    // failed to get session pointer
}
...

function wolfSSL_flush_sessions

void wolfSSL_flush_sessions(
    WOLFSSL_CTX * ctx,
    long tm
)

この機能は、期限切れになったセッションキャッシュからセッションをフラッシュします。 時間比較には引数tmが使用されます。 wolfSSLは現在セッションに静的テーブルを使用しているため、フラッシングは不要です。 そのため、この機能は現在スタブとして存在しています。 この関数は、wolfsslがOpenSSL互換層でコンパイルされているときのOpenSSL互換性(ssl_flush_sessions)を提供します。

Parameters:

  • ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
  • tm セッションの有効期限の比較で使用される時間

See:

Return: なし

Example

WOLFSSL_CTX* ssl;
...
wolfSSL_flush_sessions(ctx, time(0));

function wolfSSL_GetSessionIndex

int wolfSSL_GetSessionIndex(
    WOLFSSL * ssl
)

この関数は、WOLFSSL構造体の指定セッションインデックス値を取得します。

Parameters:

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

See: wolfSSL_GetSessionAtIndex

Return: この関数は、WOLFSSL構造体内のSessionIndexを表すint型の値を返します。

Example

WOLFSSL_CTX_new( protocol method );
WOLFSSL* ssl = WOLFSSL_new(ctx);
...
int sesIdx = wolfSSL_GetSessionIndex(ssl);

if(sesIdx < 0 || sesIdx > sizeof(ssl->sessionIndex)/sizeof(int)){
    // You have an out of bounds index number and something is not right.
}

function wolfSSL_GetSessionAtIndex

int wolfSSL_GetSessionAtIndex(
    int index,
    WOLFSSL_SESSION * session
)

この関数はセッションキャッシュの指定されたインデックスのセッションを取得し、それをメモリにコピーします。 WOLFSSL_SESSION構造体はセッション情報を保持します。

Parameters:

  • idx セッションインデックス値
  • session WOLFSSL_SESSION構造体へのポインタ

See:

Return:

  • SSL_SUCCESS 関数が正常に実行され、エラーがスローされなかった場合に返されます。
  • BAD_MUTEX_E アンロックまたはロックミューテックスエラーが発生した場合に返されます。
  • SSL_FAILURE 関数が正常に実行されなかった場合に返されます。

Example

int idx; // The index to locate the session.
WOLFSSL_SESSION* session;  // Buffer to copy to.
...
if(wolfSSL_GetSessionAtIndex(idx, session) != SSL_SUCCESS){
    // Failure case.
}

function wolfSSL_SESSION_get_peer_chain

WOLFSSL_X509_CHAIN * wolfSSL_SESSION_get_peer_chain(
    WOLFSSL_SESSION * session
)

WOLFSSL_SESSION構造体からピア証明書チェーンを返します。

Parameters:

  • session WOLFSSL_SESSION構造体へのポインタ

See:

Example

WOLFSSL_SESSION* session;
WOLFSSL_X509_CHAIN* chain;
...
chain = wolfSSL_SESSION_get_peer_chain(session);
if(!chain){
    // There was no chain. Failure case.
}

function wolfSSL_pending

int wolfSSL_pending(
    WOLFSSL * 
)

この関数は、wolfSSL_read()によって読み取られるWOLFSSLオブジェクトでバッファされているバイト数を返します。

Parameters:

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

See:

Return: この関数は、保留中のバイト数を返します。

Example

int pending = 0;
WOLFSSL* ssl = 0;
...

pending = wolfSSL_pending(ssl);
printf(“There are %d bytes buffered and available for reading”, pending);

function wolfSSL_save_session_cache

int wolfSSL_save_session_cache(
    const char * fname
)

この関数はセッションキャッシュをファイルに持続します。追加のメモリ使用のため、memsaveは使用されません。

Parameters:

  • fname 書き込み対象ファイル名へのポインタ。

See:

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。セッションキャッシュはファイルに書き込まれました。
  • SSL_BAD_FILE FNAMEを開くことができないか、それ以外の場合は破損した場合に返されます。
  • FWRITE_ERROR XfWriteがファイルへの書き込みに失敗した場合に返されます。
  • BAD_MUTEX_E ミューテックスロック障害が発生した場合に返されます。

Example

const char* fname;
...
if(wolfSSL_save_session_cache(fname) != SSL_SUCCESS){
    // Fail to write to file.
}

function wolfSSL_restore_session_cache

int wolfSSL_restore_session_cache(
    const char * fname
)

この関数はファイルから永続セッションキャッシュを復元します。追加のメモリ使用のため、memstoreは使用しません。

Parameters:

  • fname キャシュを読み取るためのファイル名へのポインタ。

See:

  • XFREAD
  • XFOPEN

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  • SSL_BAD_FILE 関数に渡されたファイルが破損していてXFOPENによって開くことができなかった場合に返されます。
  • FREAD_ERROR ファイルにXFREADから読み取りエラーが発生した場合に返されます。
  • CACHE_MATCH_ERROR セッションキャッシュヘッダの一致が失敗した場合に返されます。
  • BAD_MUTEX_E ミューテックスロック障害が発生した場合に返されます。

Example

const char *fname;
...
if(wolfSSL_restore_session_cache(fname) != SSL_SUCCESS){
    // Failure case. The function did not return SSL_SUCCESS.
}

function wolfSSL_memsave_session_cache

int wolfSSL_memsave_session_cache(
    void * mem,
    int sz
)

この関数はセッションキャッシュをメモリに保持します。

Parameters:

  • mem セッションキャッシュのコピー先バッファへのポインタ
  • sz コピー先バッファのサイズ

See:

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。セッションキャッシュはメモリに正常に永続化されました。
  • BAD_MUTEX_E ミューテックスロックエラーが発生した場合に返されます。
  • BUFFER_E バッファサイズが小さすぎると返されます。

Example

void* mem;
int sz; // Max size of the memory buffer.
…
if(wolfSSL_memsave_session_cache(mem, sz) != SSL_SUCCESS){
    // Failure case, you did not persist the session cache to memory
}

function wolfSSL_memrestore_session_cache

int wolfSSL_memrestore_session_cache(
    const void * mem,
    int sz
)

この関数はメモリから永続セッションキャッシュを復元します。

Parameters:

  • mem セッションキャッシュを保持しているバッファへのポインタ。
  • sz バッファのサイズ

See: wolfSSL_save_session_cache

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  • BUFFER_E メモリバッファが小さすぎると返されます。
  • BAD_MUTEX_E セッションキャッシュミューテックスロックが失敗した場合に返されます。
  • CACHE_MATCH_ERROR セッションキャッシュヘッダの一致が失敗した場合に返されます。

Example

const void* memoryFile;
int szMf;
...
if(wolfSSL_memrestore_session_cache(memoryFile, szMf) != SSL_SUCCESS){
    // Failure case. SSL_SUCCESS was not returned.
}

function wolfSSL_get_session_cache_memsize

int wolfSSL_get_session_cache_memsize(
    void 
)

この関数は、セッションキャッシュ保存バッファをどのように大きくするかを返します。

See: wolfSSL_memrestore_session_cache

Return: この関数は、セッションキャッシュ保存バッファのサイズを表す整数を返します。

Example

int sz = // Minimum size for error checking;
...
if(sz < wolfSSL_get_session_cache_memsize()){
    // Memory buffer is too small
}

function wolfSSL_session_reused

int wolfSSL_session_reused(
    WOLFSSL * ssl
)

この関数は、オプション構造体の再開メンバを返します。フラグはセッションを再利用するかどうかを示します。そうでなければ、新しいセッションを確立する必要があります。

Parameters:

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

See:

Return: This 関数セッションの再利用のフラグを表すオプション構造に保持されているint型を返します。

Example

WOLFSSL* ssl = wolfSSL_new(ctx);
…
if(!wolfSSL_session_reused(sslResume)){
    // No session reuse allowed.
}

function wolfSSL_get_version

const char * wolfSSL_get_version(
    WOLFSSL * ssl
)

文字列として使用されているSSLバージョンを返します。

Parameters:

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

See: wolfSSL_lib_version

Return:

  • "SSLv3" SSLv3を使う
  • "TLSv1" TLSV1を使用する
  • "TLSv1.1" TLSV1.1を使用する
  • "TLSv1.2" TLSV1.2を使用する
  • "TLSv1.3" TLSV1.3を使用する
  • "DTLS": DTLSを使う
  • "DTLSv1.2" DTLSV1.2を使用する
  • "unknown" どのバージョンのTLSが使用されているかを判断するという問題がありました。

Example

wolfSSL_Init();
WOLFSSL_CTX* ctx;
WOLFSSL* ssl;
WOLFSSL_METHOD method = // Some wolfSSL method
ctx = wolfSSL_CTX_new(method);
ssl = wolfSSL_new(ctx);
printf(wolfSSL_get_version("Using version: %s", ssl));

function wolfSSL_get_current_cipher_suite

int wolfSSL_get_current_cipher_suite(
    WOLFSSL * ssl
)

SSLセッションで現在の暗号スイートを返します。

Parameters:

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

See:

Return:

  • ssl->options.cipherSuite 現在の暗号スイートを表す整数。
  • 0 提供されているSSLセッションはNULLです。

Example

wolfSSL_Init();
WOLFSSL_CTX* ctx;
WOLFSSL* ssl;
WOLFSSL_METHOD method = // Some wolfSSL method
ctx = wolfSSL_CTX_new(method);
ssl = wolfSSL_new(ctx);

if(wolfSSL_get_current_cipher_suite(ssl) == 0)
{
    // Error getting cipher suite
}

function wolfSSL_get_current_cipher

WOLFSSL_CIPHER * wolfSSL_get_current_cipher(
    WOLFSSL * ssl
)

この関数は、SSLセッションの現在の暗号へのポインタを返します。

Parameters:

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

See:

Return:

  • The 関数WolfSSL構造体の暗号メンバーのアドレスを返します。これはwolfssl_icipher構造へのポインタです。
  • NULL WolfSSL構造がNULLの場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
…
WOLFSSL_CIPHER* cipherCurr = wolfSSL_get_current_cipher;

if(!cipherCurr){
    // Failure case.
} else {
    // The cipher was returned to cipherCurr
}

function wolfSSL_CIPHER_get_name

const char * wolfSSL_CIPHER_get_name(
    const WOLFSSL_CIPHER * cipher
)

この関数は、SSLオブジェクト内のCipher Suiteと使用可能なスイートと一致し、文字列表現を返します。

Parameters:

  • cipher WOLFSSL_CIPHER構造体へのポインタ

See:

Return:

  • string この関数は、一致した暗号スイートの文字列表現を返します。
  • none スイートが一致していない場合は「なし」を返します。

Example

// gets cipher name in the format DHE_RSA ...
const char* wolfSSL_get_cipher_name_internal(WOLFSSL* ssl){
WOLFSSL_CIPHER* cipher;
const char* fullName;
…
cipher = wolfSSL_get_curent_cipher(ssl);
fullName = wolfSSL_CIPHER_get_name(cipher);

if(fullName){
    // sanity check on returned cipher
}

function wolfSSL_get_cipher

const char * wolfSSL_get_cipher(
    WOLFSSL * ssl
)

この関数は、SSLオブジェクト内の暗号スイートと使用可能なスイートと一致します。

Parameters:

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

See:

Return: This 関数Suiteが一致させたString値を返します。スイートが一致していない場合は「なし」を返します。

Example

#ifdef WOLFSSL_DTLS
…
// make sure a valid suite is used
if(wolfSSL_get_cipher(ssl) == NULL){
    WOLFSSL_MSG(“Can not match cipher suite imported”);
    return MATCH_SUITE_ERROR;
}
…
#endif // WOLFSSL_DTLS

function wolfSSL_BIO_get_mem_data

int wolfSSL_BIO_get_mem_data(
    WOLFSSL_BIO * bio,
    void * p
)

この関数は、内部メモリバッファの先頭へのバイトポインタを設定するために使用されます。

Parameters:

  • bio のメモリバッファを取得するためのWOLFSSL_BIO構造体。
  • p メモリバッファへのポインタ。

See:

Return:

  • size 成功すると、バッファのサイズが返されます
  • SSL_FATAL_ERROR エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
const byte* p;
int ret;
bio  = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
ret  = wolfSSL_BIO_get_mem_data(bio, &p);
// check ret value

function wolfSSL_BIO_set_fd

long wolfSSL_BIO_set_fd(
    WOLFSSL_BIO * b,
    int fd,
    int flag
)

使用するBIOのファイル記述子を設定します。

Parameters:

  • bio FDを設定するためのWOLFSSL_BIO構造。
  • fd 使用するファイル記述子。
  • closeF fdをクローズする際のふるまいを指定するフラグ

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_free

Return: SSL_SUCCESS(1) 成功時に返されます。

Example

WOLFSSL_BIO* bio;
int fd;
// setup bio
wolfSSL_BIO_set_fd(bio, fd, BIO_NOCLOSE);

function wolfSSL_BIO_set_close

int wolfSSL_BIO_set_close(
    WOLFSSL_BIO * b,
    long flag
)

BIOが解放されたときにI/Oストリームを閉じる必要があることを示すために使用されるクローズフラグを設定します。

Parameters:

  • bio WOLFSSL_BIO構造体。
  • flag I/Oストリームを閉じる必要があることを示すために使用されるクローズフラグ

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_free

Return: SSL_SUCCESS(1) 成功時に返されます。

Example

WOLFSSL_BIO* bio;
// setup bio
wolfSSL_BIO_set_close(bio, BIO_NOCLOSE);

function wolfSSL_BIO_s_socket

WOLFSSL_BIO_METHOD * wolfSSL_BIO_s_socket(
    void 
)

この関数はBIO_SOCKETタイプのWOLFSSL_BIO_METHODを取得するために使用されます。

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_s_mem

Return: WOLFSSL_BIO_METHOD ソケットタイプであるWOLFSSL_BIO_METHOD構造体へのポインタ

Example

WOLFSSL_BIO* bio;
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_socket);

function wolfSSL_BIO_set_write_buf_size

int wolfSSL_BIO_set_write_buf_size(
    WOLFSSL_BIO * b,
    long size
)

この関数は、WOLFSSL_BIOのライトバッファのサイズを設定するために使用されます。 書き込みバッファが以前に設定されている場合、この関数はサイズをリセットするときに解放されます。 読み書きインデックスを0にリセットするという点で、wolfSSL_BIO_resetに似ています。

Parameters:

  • bio FDを設定するためのWOLFSSL_BIO構造。
  • size バッファサイズ

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_s_mem
  • wolfSSL_BIO_free

Return:

  • SSL_SUCCESS 書き込みバッファの設定に成功しました。
  • SSL_FAILURE エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
int ret;
bio = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
ret = wolfSSL_BIO_set_write_buf_size(bio, 15000);
// check return value

function wolfSSL_BIO_make_bio_pair

int wolfSSL_BIO_make_bio_pair(
    WOLFSSL_BIO * b1,
    WOLFSSL_BIO * b2
)

これは2つのBIOSを一緒にペアリングするために使用されます。一対のBIOSは、2つの方法パイプと同様に、他方で読み取られることができ、その逆も同様である。BIOSの両方が同じスレッド内にあることが予想されます。この機能はスレッドセーフではありません。2つのBIOSのうちの1つを解放すると、両方ともペアになっています。書き込みバッファサイズが以前に設定されていない場合、それはペアになる前に17000(wolfssl_bio_size)のデフォルトサイズに設定されます。

Parameters:

  • b1 ペアを設定するための第一のWOLFSSL_BIO構造体へのポインタ。
  • b2 第二ののWOLFSSL_BIO構造体へのポインタ。

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_s_mem
  • wolfSSL_BIO_free

Return:

  • SSL_SUCCESS 2つのBIOSをうまくペアリングします。
  • SSL_FAILURE エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
WOLFSSL_BIO* bio2;
int ret;
bio  = wolfSSL_BIO_new(wolfSSL_BIO_s_bio());
bio2 = wolfSSL_BIO_new(wolfSSL_BIO_s_bio());
ret = wolfSSL_BIO_make_bio_pair(bio, bio2);
// check ret value

function wolfSSL_BIO_ctrl_reset_read_request

int wolfSSL_BIO_ctrl_reset_read_request(
    WOLFSSL_BIO * bio
)

この関数は、読み取り要求フラグを0に戻すために使用されます。

Parameters:

  • bio WOLFSSL_BIO構造体へのポインタ。

See:

  • wolfSSL_BIO_new, wolfSSL_BIO_s_mem
  • wolfSSL_BIO_new, wolfSSL_BIO_free

Return:

  • SSL_SUCCESS 値を正常に設定します。
  • SSL_FAILURE エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
int ret;
...
ret = wolfSSL_BIO_ctrl_reset_read_request(bio);
// check ret value

function wolfSSL_BIO_nread0

int wolfSSL_BIO_nread0(
    WOLFSSL_BIO * bio,
    char ** buf
)

Parameters:

  • bio WOLFSSL_BIO構造体へのポインタ。
  • buf 読み取り用バッファへのポインタのポインタ

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_nwrite0

Return: >=0 成功すると、読み取るバイト数を返します

\bri f この関数は、読み取り用のバッファポインタを取得するために使用されます。 wolfSSL_BIO_nreadとは異なり、内部読み取りインデックスは関数呼び出しから返されたサイズ分進みません。 返される値を超えて読み取ると、アレイの境界から読み出される可能性があります。 Example

WOLFSSL_BIO* bio;
char* bufPt;
int ret;
// set up bio
ret = wolfSSL_BIO_nread0(bio, &bufPt); // read as many bytes as possible
// handle negative ret check
// read ret bytes from bufPt

function wolfSSL_BIO_nread

int wolfSSL_BIO_nread(
    WOLFSSL_BIO * bio,
    char ** buf,
    int num
)

Parameters:

  • bio WOLFSSL_BIO構造体へのポインタ。
  • buf 読み取り配列の先頭に設定するポインタ。
  • num 読み取りサイズ

See:

Return:

  • =0 成功すると、読み取るバイト数を返します

  • WOLFSSL_BIO_ERROR(-1) Return -1を読むものではないエラーケースについて

\biieれは、この関数は、読み取り用のバッファポインタを取得するために使用されます。 内部読み取りインデックスは、読み取り元のバッファの先頭に指されているBUFを使用して、関数呼び出しから返されるサイズ分進みます。 数numで要求された値よりもバイトが少ない場合、より少ない値が返されます。 返される値を超えて読み取ると、アレイの境界から読み出される可能性があります。 Example

WOLFSSL_BIO* bio;
char* bufPt;
int ret;

// set up bio
ret = wolfSSL_BIO_nread(bio, &bufPt, 10); // try to read 10 bytes
// handle negative ret check
// read ret bytes from bufPt

function wolfSSL_BIO_nwrite

int wolfSSL_BIO_nwrite(
    WOLFSSL_BIO * bio,
    char ** buf,
    int num
)

関数によって返される数のバイトを書き込むためにバッファーへのポインタを取得します。 返されるポインタに追加のバイトを書き込んだ場合、返された値は範囲外の書き込みにつながる可能性があります。

Parameters:

  • bio WOLFSSL_BIO構造に書き込む構造。
  • buf 書き込むためのバッファへのポインタ。
  • num 書き込みたいサイズ

See:

Return:

  • int 返されたバッファポインタに書き込むことができるバイト数を返します。
  • WOLFSSL_BIO_UNSET(-2) バイオペアの一部ではない場合
  • WOLFSSL_BIO_ERROR(-1) に書くべき部屋がこれ以上ない場合

Example

WOLFSSL_BIO* bio;
char* bufPt;
int ret;
// set up bio
ret = wolfSSL_BIO_nwrite(bio, &bufPt, 10); // try to write 10 bytes
// handle negative ret check
// write ret bytes to bufPt

function wolfSSL_BIO_reset

int wolfSSL_BIO_reset(
    WOLFSSL_BIO * bio
)

バイオを初期状態にリセットします。タイプBIO_BIOの例として、これは読み書きインデックスをリセットします。

Parameters:

  • bio WOLFSSL_BIO構造体へのポインタ。

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_free

Return:

  • 0 バイオのリセットに成功しました。
  • WOLFSSL_BIO_ERROR(-1) 不良入力または失敗したリセットで返されます。

Example

WOLFSSL_BIO* bio;
// setup bio
wolfSSL_BIO_reset(bio);
//use pt

function wolfSSL_BIO_seek

int wolfSSL_BIO_seek(
    WOLFSSL_BIO * bio,
    int ofs
)

この関数は、指定されたオフセットへファイルポインタを調整します。これはファイルの先頭からのオフセットです。

Parameters:

  • bio 設定するWOLFSSL_BIO構造体へのポインタ。
  • ofs ファイルの先頭からのオフセット

See:

Return:

  • 0 正常に探しています。
  • -1 エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
XFILE fp;
int ret;
bio  = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
ret  = wolfSSL_BIO_set_fp(bio, &fp);
// check ret value
ret  = wolfSSL_BIO_seek(bio, 3);
// check ret value

function wolfSSL_BIO_write_filename

int wolfSSL_BIO_write_filename(
    WOLFSSL_BIO * bio,
    char * name
)

これはファイルに設定および書き込むために使用されます。現在ファイル内のデータを上書きし、BIOが解放されたときにファイルを閉じるように設定されます。

Parameters:

  • bio ファイルを設定するWOLFSSL_BIO構造体体。
  • name 書き込み先ファイル名へのポインタ

See:

Return:

  • SSL_SUCCESS ファイルの開きと設定に成功しました。
  • SSL_FAILURE エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
int ret;
bio  = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
ret  = wolfSSL_BIO_write_filename(bio, “test.txt”);
// check ret value

function wolfSSL_BIO_set_mem_eof_return

long wolfSSL_BIO_set_mem_eof_return(
    WOLFSSL_BIO * bio,
    int v
)

これはファイル値の終わりを設定するために使用されます。一般的な値は予想される正の値と混同されないように-1です。

Parameters:

  • bio ファイル値の終わりを設定するためのWOLFSSL_BIO構造体体。
  • v bioにセットする値。

See:

Return: 0 完了に戻りました

Example

WOLFSSL_BIO* bio;
int ret;
bio  = wolfSSL_BIO_new(wolfSSL_BIO_s_mem());
ret  = wolfSSL_BIO_set_mem_eof_return(bio, -1);
// check ret value

function wolfSSL_BIO_get_mem_ptr

long wolfSSL_BIO_get_mem_ptr(
    WOLFSSL_BIO * bio,
    WOLFSSL_BUF_MEM ** m
)

これはWolfSSL_BIOメモリポインタのゲッター関数です。

Parameters:

  • bio メモリポインタを取得するためのWOLFSSL_BIO構造体へのポインタ。
  • ptr WOLFSSL_BUF_MEM構造体へのポインタ(現在はchar*となっている)

See:

  • wolfSSL_BIO_new
  • wolfSSL_BIO_s_mem

Return:

  • SSL_SUCCESS ポインタSSL_SUCCESSを返す正常に(現在1の値)。
  • SSL_FAILURE null引数が渡された場合(現在0の値)に渡された場合に返されます。

Example

WOLFSSL_BIO* bio;
WOLFSSL_BUF_MEM* pt;
// setup bio
wolfSSL_BIO_get_mem_ptr(bio, &pt);
//use pt

function wolfSSL_lib_version

const char * wolfSSL_lib_version(
    void 
)

この関数は現在のライブラリーバージョンを返します。

See: word32_wolfSSL_lib_version_hex

Return: LIBWOLFSSL_VERSION_STRING バージョンを定義するconst charポインタ。

Example

char version[MAXSIZE];
version = wolfSSL_KeepArrays();
…
if(version != ExpectedVersion){
    // Handle the mismatch case
}

function wolfSSL_lib_version_hex

word32 wolfSSL_lib_version_hex(
    void 
)

この関数は、現在のライブラリーのバージョンを16進表記で返します。

See: wolfSSL_lib_version

Return: LILBWOLFSSL_VERSION_HEX wolfssl / version.hで定義されている16進数バージョンを返します。

Example

word32 libV;
libV = wolfSSL_lib_version_hex();

if(libV != EXPECTED_HEX){
    // How to handle an unexpected value
} else {
    // The expected result for libV
}

function wolfSSL_negotiate

int wolfSSL_negotiate(
    WOLFSSL * ssl
)

SSLメソッドの側面に基づいて、実際の接続または承認を実行します。クライアント側から呼び出された場合、サーバ側から呼び出された場合にwolfssl_accept()が実行されている間にwolfssl_connect()が行われる。

See:

  • SSL_connect
  • SSL_accept

Return:

  • SSL_SUCCESS 成功した場合に返されます。に返却されます。(注意、古いバージョンは0を返します)
  • SSL_FATAL_ERROR 基礎となる呼び出しがエラーになった場合に返されます。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

int ret = SSL_FATAL_ERROR;
WOLFSSL* ssl = 0;
...
ret = wolfSSL_negotiate(ssl);
if (ret == SSL_FATAL_ERROR) {
    // SSL establishment failed
int error_code = wolfSSL_get_error(ssl);
...
}
...

function wolfSSL_connect_cert

int wolfSSL_connect_cert(
    WOLFSSL * ssl
)

この関数はクライアント側で呼び出され、ピアの証明書チェーンを取得するのに十分な長さだけサーバーを持つSSL / TLSハンドシェイクを開始します。この関数が呼び出されると、基礎となる通信チャネルはすでに設定されています。 wolfssl_connect_cert()は、ブロックと非ブロックI / Oの両方で動作します。基礎となるI / Oがノンブロッキングである場合、wolfsl_connect_cert()は、wolfssl_connect_cert_cert()のニーズを満たすことができなかったときに戻ります。ハンドシェイクを続けます。この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。通話プロセスは、基礎となるI / Oが準備ができて、wolfsslがオフになっているところを拾うときに、wolfssl_connect_cert()への呼び出しを繰り返す必要があります。ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。基礎となる入出力がブロックされている場合、wolfssl_connect_cert()はピアの証明書チェーンが受信されたらのみ返されます。

See:

Return:

  • SSL_SUCCESS 成功時に返されます。
  • SSL_FAILURE SSLセッションパラメータがNULLの場合、返されます。
  • SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
char buffer[80];
...
ret = wolfSSL_connect_cert(ssl);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_writev

int wolfSSL_writev(
    WOLFSSL * ssl,
    const struct iovec * iov,
    int iovcnt
)

Writev Semanticsをシミュレートしますが、SSL_Write()の動作のために実際にはブロックしないため、フロント追加が小さくなる可能性があるためWritevを使いやすいソフトウェアに移植する。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ
  • iov 書き込みへのI / Oベクトルの配列

See: wolfSSL_write

Return:

  • 0 成功時に書かれたバイト数。

  • 0 失敗したときに返されます。特定のエラーコードについてwolfSSL_get_error()を呼び出します。
  • MEMORY_ERROR メモリエラーが発生した場合に返されます。
  • SSL_FATAL_ERROR エラーが発生したとき、または非ブロッキングソケットを使用するときには、SSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEエラーが受信され、再度WOLFSSL_WRITE()を呼び出す必要がある場合は、障害が発生します。特定のエラーコードを取得するには、wolfSSL_get_error()を使用してください。

Example

WOLFSSL* ssl = 0;
char *bufA = “hello\n”;
char *bufB = “hello world\n”;
int iovcnt;
struct iovec iov[2];

iov[0].iov_base = buffA;
iov[0].iov_len = strlen(buffA);
iov[1].iov_base = buffB;
iov[1].iov_len = strlen(buffB);
iovcnt = 2;
...
ret = wolfSSL_writev(ssl, iov, iovcnt);
// wrote “ret” bytes, or error if <= 0.

function wolfSSL_SNI_Status

unsigned char wolfSSL_SNI_Status(
    WOLFSSL * ssl,
    unsigned char type
)

この関数はSNIオブジェクトのステータスを取得します。

Parameters:

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

See:

  • TLSX_SNI_Status
  • TLSX_SNI_find
  • TLSX_Find

Return:

  • value SNIがNULLでない場合、この関数はSNI構造体のステータスメンバーのバイト値を返します。
  • 0 SNIオブジェクトがNULLの場合

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
…
#define AssertIntEQ(x, y) AssertInt(x, y, ==, !=)
…
Byte type = WOLFSSL_SNI_HOST_NAME;
char* request = (char*)&type;
AssertIntEQ(WOLFSSL_SNI_NO_MATCH, wolfSSL_SNI_Status(ssl, type));
…

function wolfSSL_UseSecureRenegotiation

int wolfSSL_UseSecureRenegotiation(
    WOLFSSL * ssl
)

この関数は、供給されたWOLFSSL構造の安全な再交渉を強制します。これはお勧めできません。

See:

  • TLSX_Find
  • TLSX_UseSecureRenegotiation

Return:

  • SSL_SUCCESS 安全な再ネゴシエーションを正常に設定します。
  • BAD_FUNC_ARG sslがNULLの場合、エラーを返します。
  • MEMORY_E 安全な再交渉のためにメモリを割り当てることができない場合、エラーを返します。

Example

wolfSSL_Init();
WOLFSSL_CTX* ctx;
WOLFSSL* ssl;
WOLFSSL_METHOD method = // Some wolfSSL method
ctx = wolfSSL_CTX_new(method);
ssl = wolfSSL_new(ctx);

if(wolfSSL_UseSecureRenegotiation(ssl) != SSL_SUCCESS)
{
    // Error setting secure renegotiation
}

function wolfSSL_Rehandshake

int wolfSSL_Rehandshake(
    WOLFSSL * ssl
)

この関数は安全な再交渉ハンドシェイクを実行します。これは、WolfSSLがこの機能を妨げるように強制されます。

See:

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  • BAD_FUNC_ARG wolfssl構造がnullまたはそうでなければ、許容できない引数がサブルーチンに渡された場合に返されます。
  • SECURE_RENEGOTIATION_E ハンドシェイクを再ネゴシエーションすることにエラーが発生した場合に返されます。
  • SSL_FATAL_ERROR サーバーまたはクライアント構成にエラーが発生した場合は、再ネゴシエーションが完了できなかった場合に返されます。wolfssl_negotiate()を参照してください。

Example

WOLFSSL* ssl = wolfSSL_new(ctx);
...
if(wolfSSL_Rehandshake(ssl) != SSL_SUCCESS){
    // There was an error and the rehandshake is not successful.
}

function wolfSSL_UseSessionTicket

int wolfSSL_UseSessionTicket(
    WOLFSSL * ssl
)

セッションチケットを使用するようにWolfSSL構造を強制します。定数hous_session_ticketを定義し、定数NO_WOLFSSL_CLIENTをこの関数を使用するように定義しないでください。

See: TLSX_UseSessionTicket

Return:

  • SSL_SUCCESS セッションチケットを使用したセットに成功しました。
  • BAD_FUNC_ARG sslがNULLの場合に返されます。
  • MEMORY_E セッションチケットを設定するためのメモリの割り当て中にエラーが発生しました。

Example

wolfSSL_Init();
WOLFSSL_CTX* ctx;
WOLFSSL* ssl;
WOLFSSL_METHOD method = // Some wolfSSL method
ctx = wolfSSL_CTX_new(method);
ssl = wolfSSL_new(ctx);

if(wolfSSL_UseSessionTicket(ssl) != SSL_SUCCESS)
{
    // Error setting session ticket
}

function wolfSSL_get_SessionTicket

int wolfSSL_get_SessionTicket(
    WOLFSSL * ssl,
    unsigned char * buf,
    word32 * bufSz
)

この機能は、セッション構造のチケットメンバーをバッファにコピーします。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  • buf メモリバッファを表すバイトポインタ。

See:

Return:

  • SSL_SUCCESS 関数がエラーなしで実行された場合に返されます。
  • BAD_FUNC_ARG 引数の1つがNULLの場合、またはbufsz引数が0の場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
byte* buf;
word32 bufSz;  // Initialize with buf size
…
if(wolfSSL_get_SessionTicket(ssl, buf, bufSz) <= 0){
    // Nothing was written to the buffer
} else {
    // the buffer holds the content from ssl->session->ticket
}

function wolfSSL_set_SessionTicket

int wolfSSL_set_SessionTicket(
    WOLFSSL * ssl,
    const unsigned char * buf,
    word32 bufSz
)

この関数は、WolfSSL構造体内のwolfssl_session構造体のチケットメンバーを設定します。関数に渡されたバッファはメモリにコピーされます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWolfSSL構造へのポインタ。
  • buf セッション構造のチケットメンバーにロードされるバイトポインタ。

See: wolfSSL_set_SessionTicket_cb

Return:

  • SSL_SUCCESS 機能の実行に成功したことに戻ります。関数はエラーなしで返されました。
  • BAD_FUNC_ARG WolfSSL構造がNULLの場合に返されます。BUF引数がNULLの場合は、これはスローされますが、bufsz引数はゼロではありません。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new(ctx);
byte* buffer; // File to load
word32 bufSz;
...
if(wolfSSL_KeepArrays(ssl, buffer, bufSz) != SSL_SUCCESS){
    // There was an error loading the buffer to memory.
}

function wolfSSL_PrintSessionStats

int wolfSSL_PrintSessionStats(
    void 
)

この関数はセッションから統計を印刷します。

See: wolfSSL_get_session_stats

Return:

  • SSL_SUCCESS 関数とサブルーチンがエラーなしで戻った場合に返されます。セッション統計は正常に取得され印刷されました。
  • BAD_FUNC_ARG サブルーチンwolfssl_get_session_stats()が許容できない引数に渡された場合に返されます。
  • BAD_MUTEX_E サブルーチンにミューテックスエラーがあった場合に返されます。

Example

// You will need to have a session object to retrieve stats from.
if(wolfSSL_PrintSessionStats(void) != SSL_SUCCESS   ){
    // Did not print session stats
}

function wolfSSL_get_session_stats

int wolfSSL_get_session_stats(
    unsigned int * active,
    unsigned int * total,
    unsigned int * peak,
    unsigned int * maxSessions
)

この関数はセッションの統計を取得します。

Parameters:

  • active 現在のセッションの合計を表すWord32ポインタ。
  • total 総セッションを表すWord32ポインタ。
  • peak ピークセッションを表すWord32ポインタ。

See: wolfSSL_PrintSessionStats

Return:

  • SSL_SUCCESS 関数とサブルーチンがエラーなしで戻った場合に返されます。セッション統計は正常に取得され印刷されました。
  • BAD_FUNC_ARG サブルーチンwolfssl_get_session_stats()が許容できない引数に渡された場合に返されます。
  • BAD_MUTEX_E サブルーチンにミューテックスエラーがあった場合に返されます。

Example

int wolfSSL_PrintSessionStats(void){
…
ret = wolfSSL_get_session_stats(&totalSessionsNow,
&totalSessionsSeen, &peak, &maxSessions);
…
return ret;

function wolfSSL_BIO_set_fp

long wolfSSL_BIO_set_fp(
    WOLFSSL_BIO * bio,
    XFILE fp,
    int c
)

これはBIOの内部ファイルポインタを設定するために使用されます。

Parameters:

  • bio ペアを設定するためのWOLFSSL_BIO構造体。
  • fp バイオで設定するファイルポインタ。

See:

Return:

  • SSL_SUCCESS ファイルポインタを正常に設定します。
  • SSL_FAILURE エラーケースに遭遇した場合

Example

WOLFSSL_BIO* bio;
XFILE fp;
int ret;
bio  = wolfSSL_BIO_new(wolfSSL_BIO_s_file());
ret  = wolfSSL_BIO_set_fp(bio, fp, BIO_CLOSE);
// check ret value

function wolfSSL_BIO_ctrl_pending

size_t wolfSSL_BIO_ctrl_pending(
    WOLFSSL_BIO * b
)

保留中のバイト数を読み取る数を取得します。BIOタイプがBIO_BIOの場合、ペアから読み取る番号です。BIOにSSLオブジェクトが含まれている場合は、SSLオブジェクトからのデータを保留中です(WolfSSL_Pending(SSL))。bio_memoryタイプがある場合は、メモリバッファのサイズを返します。

See:

Return: >=0 保留中のバイト数。

Example

WOLFSSL_BIO* bio;
int pending;
bio = wolfSSL_BIO_new();
…
pending = wolfSSL_BIO_ctrl_pending(bio);

function wolfSSL_set_jobject

int wolfSSL_set_jobject(
    WOLFSSL * ssl,
    void * objPtr
)

この関数は、WolfSSL構造のjobjectrefメンバーを設定します。

Parameters:

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

See: wolfSSL_get_jobject

Return:

  • SSL_SUCCESS jobjectrefがobjptrに正しく設定されている場合に返されます。
  • SSL_FAILURE 関数が正しく実行されず、jobjectrefが設定されていない場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL_new();
void* objPtr = &obj;
...
if(wolfSSL_set_jobject(ssl, objPtr)){
    // The success case
}

function wolfSSL_get_jobject

void * wolfSSL_get_jobject(
    WOLFSSL * ssl
)

この関数は、wolfssl構造のjobjectrefメンバーを返します。

Parameters:

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

See: wolfSSL_set_jobject

Return:

  • value wolfssl構造体がnullでない場合、関数はjobjectref値を返します。
  • NULL wolfssl構造体がNULLの場合に返されます。

Example

WOLFSSL_CTX* ctx = wolfSSL_CTX_new( protocol method );
WOLFSSL* ssl = wolfSSL(ctx);
...
void* jobject = wolfSSL_get_jobject(ssl);

if(jobject != NULL){
    // Success case
}

function wolfSSL_connect

int wolfSSL_connect(
    WOLFSSL * ssl
)

この関数はクライアント側で呼び出され、サーバーとのSSL/TLSハンドシェイクを開始します。 この関数が呼び出されるまでに下層の通信チャネルはすでに設定されている必要があります。 wolfSSL_connect()は、ブロッキングとノンブロッキングI/Oの両方で動作します。 下層のI/Oがノンブロッキングの場合、wolfSSL_connect()は、下層のI/OがwolfSSL_connectの要求(送信データ、受信データ)を満たすことができなかったときには即戻ります。 この場合、wolfSSL_get_error()の呼び出しでSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかが返されます。 呼び出したプロセスは、下層のI/OががREADYになった時点で、WOLFSSLが停止したときから再開できるようにwolfSSL_connect()への呼び出しを繰り返す必要があります。 これにはselect()を使用して必要な条件が整ったかどうかを確認できます。 ブロッキングI/Oを使用する場合は、ハンドシェークが終了するかエラーが発生するまで戻ってきません。 wolfSSLはOpenSSLと比べて証明書検証に異なるアプローチを取ります。クライアントのデフォルトポリシーはサーバーを認証することです。 これは、CA証明書を読み込まない場合、サーバーを確認することができず”-155”のエラーコードが返されます。 OpenSSLと同じ振る舞い(つまり、CA証明書のロードなしでサーバー認証を成功させる)を取らせたい場合には、セキュリティ面でお勧めはしませんが、 SSL_CTX_SET_VERIFY(ctx、SSL_VERIFY_NONE、0)を呼び出すことで可能となります。

Parameters:

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

See:

Return:

  • SSL_SUCCESS 成功した場合に返されます。
  • SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
char buffer[80];
...
ret = wolfSSL_connect(ssl);
if (ret != SSL_SUCCESS) {
err = wolfSSL_get_error(ssl, ret);
printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_update_keys

int wolfSSL_update_keys(
    WOLFSSL * ssl
)

この関数は、TLS v1.3クライアントまたはサーバーのwolfsslで呼び出されて、キーのロールオーバーを強制します。KeyUpdateメッセージがピアに送信され、新しいキーが暗号化のために計算されます。ピアはKeyUpdateメッセージを送り、新しい復号化キーWILを計算します。この機能は、ハンドシェイクが完了した後にのみ呼び出すことができます。

Parameters:

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

See: wolfSSL_write

Return:

  • BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  • WANT_WRITE 書き込みが準備ができていない場合

Example

int ret;
WOLFSSL* ssl;
...
ret = wolfSSL_update_keys(ssl);
if (ret == WANT_WRITE) {
    // need to call again when I/O ready
}
else if (ret != WOLFSSL_SUCCESS) {
    // failed to send key update
}

function wolfSSL_key_update_response

int wolfSSL_key_update_response(
    WOLFSSL * ssl,
    int * required
)

この関数は、TLS v1.3クライアントまたはサーバーのwolfsslで呼び出され、キーのロールオーバーが進行中かどうかを判断します。wolfssl_update_keys()が呼び出されると、KeyUpdateメッセージが送信され、暗号化キーが更新されます。復号化キーは、応答が受信されたときに更新されます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • キー更新応答が必要ない場合は必須0。1キー更新応答が必要ない場合。

See: wolfSSL_update_keys

Return: 0 成功した。

Example

int ret;
WOLFSSL* ssl;
int required;
...
ret = wolfSSL_key_update_response(ssl, &required);
if (ret != 0) {
    // bad parameters
}
if (required) {
    // encrypt Key updated, awaiting response to change decrypt key
}

function wolfSSL_request_certificate

int wolfSSL_request_certificate(
    WOLFSSL * ssl
)

この関数は、TLS v1.3クライアントからクライアント証明書を要求します。これは、Webサーバーがクライアント認証やその他のものを必要とするページにサービスを提供している場合に役立ちます。接続で最大256の要求を送信できます。

Parameters:

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

See:

Return:

  • BAD_FUNC_ARG sslがNULLの場合、またはTLS v1.3を使用していない場合。
  • WANT_WRITE 書き込みが準備ができていない場合
  • SIDE_ERROR クライアントで呼び出された場合。
  • NOT_READY_ERROR ハンドシェイクが終了していないときに呼び出された場合。
  • POST_HAND_AUTH_ERROR 送付後認証が許可されていない場合。
  • MEMORY_E 動的メモリ割り当てが失敗した場合

Example

int ret;
WOLFSSL* ssl;
...
ret = wolfSSL_request_certificate(ssl);
if (ret == WANT_WRITE) {
    // need to call again when I/O ready
}
else if (ret != WOLFSSL_SUCCESS) {
    // failed to request a client certificate
}

function wolfSSL_connect_TLSv13

int wolfSSL_connect_TLSv13(
    WOLFSSL * ssl
)

この関数はクライアント側で呼び出され、サーバーとのTLS v1.3ハンドシェイクを開始します。 この関数が呼び出されると、下層の通信チャネルはすでに設定されています。 wolfSSL_connect()は、ブロックとノンブロックI/Oの両方で動作します。 下層I/Oがノンブロッキングの場合、wolfSSL_connect()は、下層I/Oがwolfssl_connectの要求を満たすことができなかったときに戻ります。 この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。 通話プロセスは、下層I/OがREADYおよびWOLFSSLが停止したときにwolfssl_connect()への呼び出しを繰り返す必要があります。 ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。 基礎となる入出力がブロックされている場合、wolfssl_connect()はハンドシェイクが終了したら、またはエラーが発生したらのみ戻ります。 WolfSSLはOpenSSLよりも証明書検証に異なるアプローチを取ります。 クライアントのデフォルトポリシーはサーバーを確認することです。 これは、CASを読み込まない場合、サーバーを確認することができ、確認できません(_155)。 SSL_CONNECTを持つことのOpenSSLの動作が成功した場合は、サーバーを検証してセキュリティを抑えることができます。 SSL_CTX_SET_VERIFY(CTX、SSL_VERIFY_NONE、0)。 ssl_new()を呼び出す前に。お勧めできませんが。

Parameters:

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

See:

Return:

  • SSL_SUCCESS 成功時に返されます。
  • SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
char buffer[80];
...

ret = wolfSSL_connect_TLSv13(ssl);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_accept_TLSv13

wolfSSL_accept_TLSv13(
    WOLFSSL * ssl
)

この関数はサーバー側で呼び出され、SSL/TLSクライアントがSSL/TLSハンドシェイクを開始するのを待ちうけます。 この関数が呼び出されると、下層の通信チャネルはすでに設定されています。 wolfSSL_accept()は、ブロックとノンブロッキングI/Oの両方で動作します。 下層の入出力がノンブロッキングである場合、wolfSSL_accept()は、下層のI/OがwolfSSL_acceptの要求を満たすことができなかったときに戻ります。 この場合、wolfSSL_get_error()への呼び出しはSSL_ERROR_WANT_READまたはSSL_ERROR_WANT_WRITEのいずれかを生成します。 通話プロセスは、読み取り可能なデータが使用可能であり、wolfsslが停止した場所を拾うときに、wolfssl_acceptの呼び出しを繰り返す必要があります。 ノンブロッキングソケットを使用する場合は、何も実行する必要がありますが、select()を使用して必要な条件を確認できます。 下層のI/Oがブロックされている場合、wolfssl_accept()はハンドシェイクが終了したら、またはエラーが発生したら戻ります。 古いバージョンのClientHelloメッセージがサポートされていますが、TLS v1.3接続を期待するときにこの関数を呼び出します。

Parameters:

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

See:

Return:

  • SSL_SUCCESS 成功時に返されます。
  • SSL_FATAL_ERROR エラーが発生した場合に返されます。より詳細なエラーコードを取得するには、wolfSSL_get_error()を呼び出します。

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
char buffer[80];
...

ret = wolfSSL_accept_TLSv13(ssl);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_write_early_data

int wolfSSL_write_early_data(
    WOLFSSL * ssl,
    const void * data,
    int sz,
    int * outSz
)

この関数は、セッション再開時にサーバーにアーリーデータを書き込みます。 wolfSSL_connect()またはwolfSSL_connect_tlsv13()の代わりにこの関数を呼び出して、サーバーに接続してハンドシェイクにデータを送ります。 この機能はクライアントでのみ使用されます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • data アーリーデータを保持しているバッファへのポインタ。
  • sz 書き込むアーリーデータのサイズ
  • outSz 書き込んだアーリーデータのサイズ

See:

Return:

  • BAD_FUNC_ARG ポインタパラメータがNULLの場合に返されます。szは0未満またはTLSV1.3を使用しない場合にも返されます。
  • SIDE_ERROR サーバーで呼び出された場合に返されます。
  • WOLFSSL_FATAL_ERROR 接続が行われていない場合に返されます。

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
byte earlyData[] = { early data };
int outSz;
char buffer[80];
...

ret = wolfSSL_write_early_data(ssl, earlyData, sizeof(earlyData), &outSz);
if (ret != WOLFSSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
    goto err_label;
}
if (outSz < sizeof(earlyData)) {
    // not all early data was sent
}
ret = wolfSSL_connect_TLSv13(ssl);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_read_early_data

int wolfSSL_read_early_data(
    WOLFSSL * ssl,
    void * data,
    int sz,
    int * outSz
)

この関数は、再開時にクライアントからの早期データを読み取ります。wolfssl_accept()またはwolfssl_accept_tlsv13()の代わりにこの関数を呼び出して、クライアントを受け入れ、ハンドシェイク内の早期データを読み取ります。ハンドシェイクよりも早期データがない場合は、通常として処理されます。この機能はサーバーでのみ使用されます。

Parameters:

  • ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
  • データはクライアントから読み込まれた早期データを保持するためのバッファ。
  • バッファのSZサイズバイト数。
  • OUTSZ初期データのバイト数。

See:

Return:

  • BAD_FUNC_ARG ポインタパラメータがNULLの場合、SZは0未満またはTLSV1.3を使用しない。
  • SIDE_ERROR クライアントで呼び出された場合。
  • WOLFSSL_FATAL_ERROR 接続を受け入れると失敗した場合

Example

int ret = 0;
int err = 0;
WOLFSSL* ssl;
byte earlyData[128];
int outSz;
char buffer[80];
...

ret = wolfSSL_read_early_data(ssl, earlyData, sizeof(earlyData), &outSz);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}
if (outSz > 0) {
    // early data available
}
ret = wolfSSL_accept_TLSv13(ssl);
if (ret != SSL_SUCCESS) {
    err = wolfSSL_get_error(ssl, ret);
    printf(“error = %d, %s\n”, err, wolfSSL_ERR_error_string(err, buffer));
}

function wolfSSL_GetIOReadCtx

void * wolfSSL_GetIOReadCtx(
    WOLFSSL * ssl
)

この関数は、WolfSSL構造体のIOCB_READCTXメンバーを返します。

See:

Return:

  • pointer この関数は、wolfssl構造体のiocb_readctxメンバーへのvoidポインタを返します。
  • NULL wolfssl構造体がNULLの場合に返されます。 Example
WOLFSSL* ssl = wolfSSL_new(ctx);
void* ioRead;
...
ioRead = wolfSSL_GetIOReadCtx(ssl);
if(ioRead == NULL){
    // Failure case. The ssl object was NULL.
}

function wolfSSL_GetIOWriteCtx

void * wolfSSL_GetIOWriteCtx(
    WOLFSSL * ssl
)

この関数は、WolfSSL構造のIOCB_WRITECTXメンバーを返します。

See:

Return:

  • pointer この関数は、WolfSSL構造のIOCB_WRITECTXメンバーへのvoidポインタを返します。
  • NULL wolfssl構造体がNULLの場合に返されます。 Example
WOLFSSL* ssl;
void* ioWrite;
...
ioWrite = wolfSSL_GetIOWriteCtx(ssl);
if(ioWrite == NULL){
    // The function returned NULL.
}

function wolfSSL_SetIO_NetX

void wolfSSL_SetIO_NetX(
    WOLFSSL * ssl,
    NX_TCP_SOCKET * nxsocket,
    ULONG waitoption
)

この関数は、wolfssl構造内のnxctx構造体のNxSocketメンバーとNXWAITメンバーを設定します。

Parameters:

  • ssl wolfssl_new()を使用して作成されたWolfSSL構造へのポインタ。
  • nxSocket NXCTX構造のNXSOCTOCKメンバーに設定されているNX_TCP_SOCKETを入力するためのポインタ。 Example
WOLFSSL* ssl = wolfSSL_new(ctx);
NX_TCP_SOCKET* nxSocket;
ULONG waitOption;
…
if(ssl != NULL || nxSocket != NULL || waitOption <= 0){
wolfSSL_SetIO_NetX(ssl, nxSocket, waitOption);
} else {
    // You need to pass in good parameters.
}

See:

  • set_fd
  • NetX_Send
  • NetX_Receive

Return: none いいえ返します。


Updated on 2024-03-29 at 02:19:03 +0000