• 検索結果がありません。

デバッグ

デバッグとログ

wolfSSL はデバッグ機能が限られている環境のために、ログ・メッセージを通じてデバッ グをサポートします。実行時にログ機能をオンにするには wolfSSL_Debugging_ON()関 数、オフにするには wolfSSL_Debugging_OFF()関数を使用してください。通常ビルド(リ リースモード)ではこれらの関数は作用しないようになります。デバッグビルドでは、

DEBUG_WOLFSSL を定義しこれらの関数をオンにしておく必要があります。

wolfSSL2.0 では、ログ機能のコールバック関数が実行時に登録でき、ログがどのようにさ れるか柔軟に指定できます。ログ機能のコールバックは次のような関数で登録できま す:

int wolfSSL_SetLoggingCb(wolfSSL_Logging_cb log_function);

typedef void (*wolfSSL_Logging_cb)(const int logLevel, const char *const logMessage);

ログレベルについては wolfssl/wolfcrypt/logging.h に定義があり、その実体は logging.c に あります。デフォルトでログは fprintf の stderr に出力されます。

エラー・コード

wolfSSL は、デバッグを手助けするために有用なエラー・メッセージを提供します。

それぞれの wolfSSL_read()または wolfSSL_write()呼び出しは、ちょうど read()や write() と同じように、成功した場合書き込みバイト数、コネクションのクローズ時には 0、エラー 時には-1 を返却します。エラー時には二つの呼び出しを使ってエラーに関してさらに情報 を得ることができます。

wolfSSL_get_error()はその時点のエラー・コードを返却します。WOLFSSL オブジェク トと wolfSSL_read()または wolfSSL_write()の返却値をアーギュメントとして受け取り、

対応するエラー・コードを返却します

int err = wolfSSL_get_error(ssl, result);

さらに人が読める形のエラー・コードの説明を得るためにはwolfSSL_ERR_error_string() 関数を使用することができます。wolfSSL_get_error()の返却するコードとストレージ・バ ッファをアーギュメントとして受け取り、対応するエラー の説明をストレージ・バッファ

(下の例では errorString)に置きます。

char errorString[80];

wolfSSL_

ERR_error_string(err, errorString);

ノンブロッキングのソケットを使用している場合、EAGAIN/EWOULDBLOCK でエラー チェックすることができます。さらにより正確には、特定のエラー・コードを

SSL_ERROR_WANT_READ と SSL_ERROR_WANT_WRITE でテストすることができま す。

wolfSSL と wolfCrypt のエラー・コードのリストはユーザ・マニュアル Appendix C (エラ ー・コード)を参照してください。

ライブラリ設計

ライブラリー・ヘッダー

wolfSSLでは、ライブラリー・ヘッダーファイルは以下の場所に格納されています:

wolfSSL: wolfssl/

wolfCrypt: wolfssl/wolfcrypt/

wolfSSL OpenSSL Compatibility Layer: wolfssl/openssl/

OpenSSL 互換レイヤー(ユーザマニュアル第 13 章参照)を使用する場合、

/wolfssl/openssl/ssl.h ヘッダーをインクルードする必要があります:

#include <wolfssl/openssl/ssl.h>

wolfSSL ネイティブ API のみを使用する場合は /wolfssl/ssl.h ヘッダーをインクルードする 必要があります:

#include <wolfssl/ssl.h>

開始と終了

すべてのアプリケーションはライブラリを使用する前に wolfSSL_Init()を呼び出し、プ ログラム終了時には wolfSSL_Cleanup()を呼び出す必要があります。現在は、これらの関 数はマルチユーザーモードにおいてセッション・キャッシュのための共有の相互排他を初 期化あるいは解放するだけですが、将来、拡張の可能性があるのでこれらを使用すること をお勧めします。

構造体の使用

ヘッダーファイルの格納場所の変更のほかに、現在のwolfSSLではネイティブ wolfSSL

API と wolfSSL OpenSSL 互換レイヤーの間を命名法で区別しています。この区別によっ て、ネイティブ wolfSSL API によって使用される主なSSL/TLS 構造体は名前はopenSSL とは異なっています。wolfSSLでの構造体は以下の通りです。OpenSSL 互換レイヤー(ユ ーザ・マニュアル第 13 章参照)を使用する場合は以前の名前も使用されています。

WOLFSSL (旧 wolfSSL または openSSL 互換ビルド時 SSL)

WOLFSSL_CTX (旧 wolfSSL または openSSL 互換ビルド時 SSL_CTX)

WOLFSSL_METHOD (旧 wolfSSL または openSSL 互換ビルド時

関連したドキュメント