コンテンツにスキップ

ログ出力

wolfProviderは、情報提供とデバッグを目的としたログメッセージの出力をサポートしています。 デバッグログ出力を有効にするには、最初にデバッグサポートを有効にしてwolfProviderをコンパイルする必要があります。 autoconfを使用している場合、これは./configureに--enable-debugオプションを加えることで実現できます。

./configure --enable-debug

autoconf/configureを使用しない場合は、wolfProviderライブラリをコンパイルする際に WOLFPROV_DEBUG を定義します。

ログ出力レベルの制御

wolfProviderは以下のログ出力レベルをサポートします。これらはinclude/wolfprovider/wp_logging.hヘッダーファイル内のプリプロセッサマクロとして定義されています。

ログ列挙値 説明 値
WP_LOG_LEVEL_ERROR エラーを出力 0x0001
WP_LOG_LEVEL_ENTER 関数に入る際にログを出力 0x0002
WP_LOG_LEVEL_LEAVE 関数を抜ける際にログを出力 0x0004
WP_LOG_LEVEL_INFO 情報メッセージを出力 0x0008
WP_LOG_LEVEL_VERBOSE 暗号化、復号、ダイジェスト対象のデータを含む詳細ログを出力 0x0010
WP_LOG_LEVEL_DEBUG wolfSSLの戻り値を含むデバッグレベルの詳細を出力 0x0020
WP_LOG_LEVEL_TRACE トレースレベルの非常に詳細な情報を出力 0x0040
WP_LOG_LEVEL_DEFAULT デフォルトのログレベル WP_LOG_LEVEL_ERROR | WP_LOG_LEVEL_LEAVE | WP_LOG_LEVEL_INFO
WP_LOG_LEVEL_ALL すべてのログレベルを有効化 WP_LOG_LEVEL_ERROR | WP_LOG_LEVEL_ENTER | WP_LOG_LEVEL_LEAVE | WP_LOG_LEVEL_INFO | WP_LOG_LEVEL_VERBOSE | WP_LOG_LEVEL_DEBUG | WP_LOG_LEVEL_TRACE

デフォルトのwolfProviderログ出力レベル(WP_LOG_LEVEL_DEFAULT)には、WP_LOG_LEVEL_ERROR、WP_LOG_LEVEL_LEAVE、WP_LOG_LEVEL_INFOが含まれます。

実行時に有効化できるログレベルとコンポーネントは、コンパイル時フィルターWOLFPROV_LOG_LEVEL_FILTERとWOLFPROV_LOG_COMPONENTS_FILTERによって制限されます。これらはwp_logging.hで定義され、デフォルト値はそれぞれWP_LOG_LEVEL_DEFAULTとWP_LOG_COMP_DEFAULTです。ビルド時にフィルターから除外されたレベルやコンポーネントを実行時に有効化することはできません。例えばWP_LOG_LEVEL_DEBUGやWP_LOG_LEVEL_VERBOSEを有効化するには、コンパイル時にWOLFPROV_LOG_LEVEL_FILTERを拡張してください。

ログレベルはwolfProv_SetLogLevel(int mask)で制御できます。エラーログと情報ログのみを有効化する例を次に示します。

#include <stdio.h>
#include <wolfprovider/wp_logging.h>

int main(void)
{
    int ret = wolfProv_SetLogLevel(WP_LOG_LEVEL_ERROR | WP_LOG_LEVEL_INFO);
    if (ret != 0) {
        printf("Failed to set logging level\n");
    }
    return 0;
}

コンポーネント単位のログ出力の制御

wolfProviderでは、コンポーネントごとにログを出力できます。コンポーネントはinclude/wolfprovider/wp_logging.h内のプリプロセッサマクロとして定義されています。

ログコンポーネント列挙値 説明 値
WP_LOG_COMP_RNG 乱数生成 0x0001
WP_LOG_COMP_DIGEST ダイジェスト(SHA-1/2/3) 0x0002
WP_LOG_COMP_MAC MAC関数(HMAC、CMAC) 0x0004
WP_LOG_COMP_CIPHER 暗号(AES、3DES) 0x0008
WP_LOG_COMP_PK 公開鍵アルゴリズム(RSA、ECC) 0x0010
WP_LOG_COMP_KE 鍵合意アルゴリズム(DH、ECDH) 0x0020
WP_LOG_COMP_KDF 鍵導出アルゴリズム 0x0040
WP_LOG_COMP_PROVIDER すべてのプロバイダー固有ログ 0x0080
WP_LOG_COMP_ALL すべてのコンポーネントを出力 以下のすべてのコンポーネント
WP_LOG_COMP_DEFAULT デフォルトのログ対象コンポーネント(すべて) WP_LOG_COMP_ALL

アルゴリズム単位の詳細なコンポーネントも利用できます。WP_LOG_COMP_RSA、WP_LOG_COMP_ECC、WP_LOG_COMP_DH、WP_LOG_COMP_AES、WP_LOG_COMP_SHA、WP_LOG_COMP_HMAC、WP_LOG_COMP_HKDF、WP_LOG_COMP_SSHKDF、WP_LOG_COMP_PQCなどがあります。完全な一覧はwp_logging.hをご参照ください。

デフォルトでは、すべてのコンポーネントを対象としてログを出力します(WP_LOG_COMP_DEFAULT)。

ログ出力の対象コンポーネントはwolfProv_SetLogComponents(int mask)で制御できます。ダイジェストおよび暗号アルゴリズムのみのログ出力を有効化する例を次に示します。

#include <stdio.h>
#include <wolfprovider/wp_logging.h>

int main(void)
{
    int ret = wolfProv_SetLogComponents(WP_LOG_COMP_DIGEST | WP_LOG_COMP_CIPHER);
    if (ret != 0) {
        printf("Failed to set log components\n");
    }
    return 0;
}

カスタムログ出力コールバックの設定

デフォルトでは、wolfProviderは fprintf() を使用してデバッグログメッセージを stderr に出力します。

ログメッセージの出力方法や出力場所を変更したい場合は、カスタムログ出力コールバック関数を記述してwolfProviderに登録します。 その際、include/wolfprovider/wp_logging.hに示すwolfProv_Logging_cbのプロトタイプ宣言と一致させる必要があります。

/**
* wolfProvider logging callback.
* logLevel - [IN] - Log level of message
* component - [IN] - Component that log message is coming from
* logMessage - [IN] - Log message
*/
typedef void (*wolfProv_Logging_cb)(const int logLevel, const int component, const char *const logMessage);

その後、wolfProv_SetLoggingCb(wolfProv_Logging_cb logf)を使用してコールバック関数をwolfProviderに登録できます。例を次に示します。

#include <stdio.h>
#include <wolfprovider/wp_logging.h>

void customLogCallback(const int logLevel, const int component,
    const char* const logMessage)
{
    (void)logLevel;
    (void)component;
    fprintf(stderr, "wolfProvider log message: %s\n", logMessage);
}

int main(void)
{
    int ret;

    ret = wolfProv_SetLoggingCb(customLogCallback);
    if (ret != 0) {
        /* failed to set logging callback */
    }

    return 0;
}