From 81c4ed2330b78753800efb966d8ff63e62b26f54 Mon Sep 17 00:00:00 2001 From: "Masaki I." Date: Tue, 7 Oct 2025 19:08:23 +0900 Subject: [PATCH] [JA] wolfProvider - general documentation update --- wolfProvider/mkdocs-ja.yml | 2 +- wolfProvider/src-ja/chapter01.md | 4 +- wolfProvider/src-ja/chapter02.md | 4 +- wolfProvider/src-ja/chapter03.md | 213 +++++++++++++++---------------- wolfProvider/src-ja/chapter05.md | 27 +--- wolfProvider/src-ja/chapter07.md | 90 +++++-------- wolfProvider/src-ja/chapter08.md | 122 ++++++++++-------- wolfProvider/src-ja/chapter09.md | 128 ++++++++++++++----- 8 files changed, 317 insertions(+), 273 deletions(-) diff --git a/wolfProvider/mkdocs-ja.yml b/wolfProvider/mkdocs-ja.yml index 719af2e3..98dcfeef 100644 --- a/wolfProvider/mkdocs-ja.yml +++ b/wolfProvider/mkdocs-ja.yml @@ -2,7 +2,7 @@ site_name: wolfProvider マニュアル site_url: https://wolfssl.com/ docs_dir: build/html/ site_dir: html/ -copyright: Copyright © 2024 wolfSSL Inc. +copyright: Copyright © 2025 wolfSSL Inc. nav: - "1. イントロダクション": index.md - "2. OpenSSLとの互換性": chapter02.md diff --git a/wolfProvider/src-ja/chapter01.md b/wolfProvider/src-ja/chapter01.md index 1a4b7973..127248f2 100644 --- a/wolfProvider/src-ja/chapter01.md +++ b/wolfProvider/src-ja/chapter01.md @@ -10,9 +10,9 @@ wolfProviderの概要図、そしてアプリケーションやOpenSSLとどの wolfProviderの設計とアーキテクチャの詳細については、[wolfProviderの設計](chapter09.md) の章をご覧ください。 -![wolfProvider Overview](../png/wolfProvider_overview.png) +![wolfProvider Overview](wolfProvider_overview.png) -wolfProviderは、**libwolfprovider** という名前の共有ライブラリとしてコンパイルされます。 +wolfProviderは、**libwolfprov** という名前の共有ライブラリとしてコンパイルされます。 これは、アプリケーションまたはコンフィギュレーションファイルを介してOpenSSLによって実行時に動的に登録できます。 wolfProviderは、アプリケーションが静的ビルドでコンパイルされたときにエンジンをロードするためのエントリポイントも提供します。 diff --git a/wolfProvider/src-ja/chapter02.md b/wolfProvider/src-ja/chapter02.md index 674d21d3..8924a01c 100644 --- a/wolfProvider/src-ja/chapter02.md +++ b/wolfProvider/src-ja/chapter02.md @@ -3,7 +3,7 @@ wolfProviderは、以下のバージョンのOpenSSLを使用してテストを実行しています。 これ以外のバージョンでは、変更や調整が必要になる場合があります。 -- OpenSSL 1.0.2h -- OpenSSL 1.1.1b +- OpenSSL 3.0.0 +- OpenSSL 3.5.0 他のOpenSSLバージョンのサポート追加を希望される場合は、[info@wolfssl.jp](mailto:info@wolfssl.jp) にご連絡ください。 diff --git a/wolfProvider/src-ja/chapter03.md b/wolfProvider/src-ja/chapter03.md index 30a5efec..8d8c8d9e 100644 --- a/wolfProvider/src-ja/chapter03.md +++ b/wolfProvider/src-ja/chapter03.md @@ -11,26 +11,19 @@ wolfProviderの最新バージョンは、wolfSSL Inc. から直接入手でき wolfProviderパッケージは、以下のように構成しています。 ``` -certs/ (ユニットテストで使用されるテスト用証明書、鍵) -provider.conf (wolfProviderを使用する場合のOpenSSLコンフィギュレーションファイルサンプル) +certs/ (ユニットテストで使用されるテスト用証明書、鍵) +examples/ (実装例) include/ - wolfprovider/ (wolfProviderヘッダーファイル) -openssl_patches/ - 1.0.2h/tests/ (OpenSSL 1.0.2h テストアプリ用パッチ) - 1.1.1b/tests/ (OpenSSL 1.1.1b テストアプリ用パッチ) -scripts/ (wolfProvider テストスクリプト) -src/ (wolfProvider ソースファイル) -test/ (wolfProvider テストファイル) -user_settings.h (user_settings.hサンプル) + wolfprovider/ (wolfProviderヘッダーファイル) +IDE/ (IDE向けプロファイル) +scripts/ (wolfProvider テスト/ビルドスクリプト) +src/ (wolfProvider ソースファイル) +test/ (wolfProvider テストファイル) +provider.conf (wolfProviderを使用する場合のOpenSSLコンフィギュレーションファイルサンプル) +provider-fips.conf (wolfProvider FIPS版を使用する場合のOpenSSLコンフィギュレーションファイルサンプル) +user_settings.h (user_settings.hサンプル) ``` -## OpenSSLのバージョンに関する注意事項 - -次に示すアルゴリズムを利用するには、併記したOpenSSLバージョンが必要です。 - -- SHA-3:OpenSSL バージョン1.1.1以降が必要 -- EC_KEY_METHOD:OpenSSL バージョン1.1.1以降が必要 - ## *nix上でのビルド 最も簡単な方法は、以下のように `scripts/build-wolfprovider.sh` スクリプトを使用することです。 @@ -39,14 +32,27 @@ user_settings.h (user_settings.hサンプル) ./scripts/build-wolfprovider.sh ``` -このスクリプトは必要に応じて依存関係を取得し、コンパイルします。 -異なるリリースを使用したい場合など、デフォルトでないパラメータを使用するには、次のように環境変数として設定してください。 +このスクリプトはOpenSSLとwolfSSLをデフォルトのオプションセットでクローン、構成、コンパイル、インストールします。 + +これらの構成オプションを変更するには、以下の2つの方法があります。 + +スクリプトを呼び出す前に、各種環境変数を設定する方法: ``` -OPENSSL_TAG=openssl-3.2.0 WOLFSSL_TAG=v5.7.2-stable WOLFPROV_DEBUG=1 scripts/build-wolfprovider.sh +OPENSSL_TAG=openssl-3.2.0 WOLFSSL_TAG=v5.7.2-stable WOLFPROV_DEBUG=1 ./scripts/build-wolfprovider.sh ``` -あるいは、以下のガイドを使用して各コンポーネントを手動でコンパイルすることもできます。 +スクリプトの引数として指定する方法: + +``` +./scripts/build-wolfprovider.sh --openssl-ver=openssl-3.2.0 --wolfssl-ver=v5.7.2-stable --debug +``` + +これらの方法を組み合わせて、目的のビルドの組み合わせを実現することもできます。 + +環境変数とスクリプト引数の完全なリストについては、`./scripts/build-wolfprovider.sh --help` を実行してください。 + +必要に応じて、以下のガイドを使用して各コンポーネントを手動でコンパイルすることもできます。 ### OpenSSLをビルド @@ -70,7 +76,7 @@ wolfProviderでwolfSSL FIPS版を使用するには、特定のFIPS検証済み ``` cd wolfssl-X.X.X-commercial-fips-linuxv -./configure **--enable-fips=v2 CFLAGS=”-DWOLFSSL_PUBLIC_MP”** +./configure --enable-fips=v2 CFLAGS="-DWOLFSSL_PUBLIC_MP" make ./wolfcrypt/test/testwolfcrypt #--< ここで、fips_test.c内のverifyCoreを開き、testwolfcryptスクリプトが出力するハッシュ値に更新してください >-- @@ -83,6 +89,9 @@ make sudo make install ``` +可能であれば、`make` を実行してから `./fips-hash.sh` ユーティリティを実行し、もう一度 `make` を実行する方が簡単かもしれません。 +このユーティリティは、testwolfcrypt のハッシュ出力を使用して `fips_test.c` を更新するプロセスを自動化します。 + 非FIPS版のwolfSSLを使用する場合は、以下のようになります。 ``` @@ -234,94 +243,84 @@ wolfProviderを静的エンジンとして使用するには`--static`を付け デフォルトでは、ビルド時間を半分にするために共有ライブラリのみをビルドします。 必要に応じて、静的ライブラリをビルドしたり共有ライブラリのビルドを無効化したりできます。 -| オプション | デフォルト | 意味 | -| :--------- | :---------------: | :-------------- | -| --enable-static | **無効** | 静的ライブラリとしてビルド | -| --enable-shared | 有効 | 共有ライブラリとしてビルド | -| --enable-debug | **無効** | wolfProviderのデバッグ出力を有効にする | -| --enable-coverage | **無効** | コードカバレッジレポートを作成する用ビルド | -| --enable-usersettings | **無効** | user_settings.h を使用しMakefileの CFLAGSを使用しない | -| --enable-dynamic-provider | 有効 | wolfProvider をダイナミックエンジンとしてロードする | -| --enable-singlethreaded | **無効** | wolfProviderをシングルスレッド環境で使用する | -| --enable-digest | 有効 | ダイジェストの生成にwc_Hash APIを使用する | -| --enable-sha | 有効 | SHA-1 を有効にする| -| --enable-sha224 | 有効 | SHA2-224 を有効にする| -| --enable-sha256 | 有効 | SHA2-256 を有効にする| -| --enable-sha384 | 有効 | SHA2-384 を有効にする| -| --enable-sha512 | 有効 | SHA2-512 を有効にする| -| --enable-sha3 | 有効 | SHA3 を有効にする| -| --enable-sha3-224 | 有効 | SHA3-224 を有効にする| -| --enable-sha3-256 | 有効 | SHA3-256 を有効にする| -| --enable-sha3-384 | 有効 | SHA3-384 を有効にする| -| --enable-sha3-512 | 有効 | SHA3-512 を有効にする| -| --enable-cmac | 有効 | CMAC を有効にする| -| --enable-hmac | 有効 | HMAC を有効にする| -| --enable-des3cbc| 有効 | 3DES-CBC を有効にする| -| --enable-aesecb | 有効 | AES-ECB を有効にする| -| --enable-aescbc | 有効 | AES-CBC を有効にする| -| --enable-aesctr | 有効 | AES-CTR を有効にする| -| --enable-aesgcm | **無効** | AES-GCM を有効にする| -| --enable-aesccm | **無効** | AES-CCM を有効にする| -| --enable-rand | 有効 | RAND を有効にする| -| --enable-rsa | 有効 | RSA を有効にする| -| --enable-dh | 有効 | DH を有効にする| -| --enable-evp-pkey | 有効 | EVP_PKEY APIs を有効にする| -| --enable-ec-key | 有効 | ECC using EC_KEY を有効にする| -| --enable-ecdsa | 有効 | ECDSA を有効にする| -| --enable-ecdh | 有効 | ECDH を有効にする| -| --enable-eckg | 有効 | EC Key Generation を有効にする| -| --enable-p192 | 有効 | EC Curve P-192 を有効にする| -| --enable-p224 | 有効 | EC Curve P-224 を有効にする| -| --enable-p256 | 有効 | EC Curve P-256 を有効にする| -| --enable-p384 | 有効 | EC Curve P-384 を有効にする| -| --enable-p521 | 有効 | EC Curve P-521 を有効にする| -| --with-openssl=DIR | | OpenSSLのインストール場所を指定。指定しない場合はシステムのデフォルトライブラリパスとインクルードパスが使われます。| +| オプション | デフォルト値 | 説明 | +| :---------------- | :---------------: | :----------------------------- | +| --disable-option-checking | **無効** | | 認識されない --enable/--with オプションを無視する | +| --enable-silent-rules | **無効** | ビルド出力の詳細度を低くする (元に戻す: "make V=1") | +| --disable-silent-rules | **無効** | ビルド出力の詳細度を高くする (元に戻す: "make V=0") | +| --enable-static | **無効** | 静的ライブラリをビルドする | +| --enable-pic[=PKGS] | 両方使用 | PIC/非PIC オブジェクトのみを使用する | +| --enable-shared | 有効 | 共有ライブラリをビルドする | +| --enable-fast-install[=PKGS] | 有効 | 高速にインストールできるよう最適化する | +| --enable-aix-soname=aix\|svr4\|both | **aix** | AIXで提供する共有ライブラリのバージョン管理 (別名 "SONAME") バリアント | +| --enable-dependency-tracking | **無効** | 遅い依存関係抽出を拒否しない | +| --disable-dependency-tracking | **無効** | ワンタイムビルドを高速化する | +| --disable-libtool-lock | **無効** | ロックを回避する (並列ビルドが失敗する可能性があります) | +| --enable-debug | **無効** | wolfProviderのデバッグ出力を有効にする | +| --enable-coverage | **無効** | コードカバレッジ統計を生成するようにビルドする | +| --enable-usersettings | **無効** | user_settings.h を使用し、MakefileのCFLAGSを使用しない | +| --enable-dynamic | 有効 | wolfProviderをダイナミックプロバイダーとしてロードできるようにする | +| --enable-singlethreaded | **無効** | wolfProviderをシングルスレッド環境で使用する | +| | | | | +| --with-openssl=DIR | | リンクするOpenSSLのインストール場所。設定されていない場合は、システムのデフォルトのライブラリとインクルードパスが使用されます。 | +| --with-wolfssl=DIR | | リンクするwolfSSLのインストール場所。設定されていない場合は、システムのデフォルトのライブラリとインクルードパスが使用されます。 | ## ビルド用マクロ定義 wolfProviderは、お客様がwolfProviderのビルド方法を設定できるようにするいくつかのプリプロセッサマクロを公開しています。 以下にその一覧を示します。 -| マクロ定義 | 意味 | -| :---------- | :--------------------- | -| WOLFPROVIDER_DEBUG | デバッグシンボル、最適化レベル、デバッグロギングを使用してwolfProviderをビルドします | -| WP_NO_DYNAMIC_PROVIDER | wolfProviderをダイナミックエンジンとしてビルドしない。ダイナミックエンジンとは、OpenSSLが実行時に動的にロードするエンジンのことです。 | -| WP_SINGLE_THREADED | wolfProviderをシングルスレッドモードでビルドする。このマクロ定義によりグローバルリソースの使用の排他用に内部的に使用するロック機構を取り除きます。| -| WP_USE_HASH | ハッシュアルゴリズムを wc_Hash APIを使って有効にする | -| WP_HAVE_SHA1 | SHA-1 を有効にする | -| WP_HAVE_SHA224 | SHA-2 224を有効にする | -| WP_HAVE_SHA256 | SHA-2 256を有効にする | -| WP_HAVE_SHA384 | SHA-2 384を有効にする | -| WP_HAVE_SHA512 | SHA-2 512を有効にする | -| WP_SHA1_DIRECT | SHA-1 をwc_Sha APIを使って有効にする。WP_USE_HASHとは同時に指定できません。 | -| WP_SHA224_DIRECT | SHA-2 224 を wc_Sha224 APIを使って有効にする。WP_USE_HASHとは同時に指定できません。 | -| WP_SHA256_DIRECT | SHA-2 256 を wc_Sha256 APIを使って有効にする。WP_USE_HASHとは同時に指定できません。 | -| WP_HAVE_SHA3_224 | SHA-3 224を有効にする(OpenSSL 1.0.2では利用不可)| -| WP_HAVE_SHA3_256 | SHA-3 256を有効にする(OpenSSL 1.0.2では利用不可)| -| WP_HAVE_SHA3_384 | SHA-3 384を有効にする(OpenSSL 1.0.2では利用不可)| -| WP_HAVE_SHA3_512 | SHA-3 512を有効にする(OpenSSL 1.0.2では利用不可)| -| WP_HAVE_EVP_PKEY | EVP_PKEY APIを使用する機能を有効にする(RSA, DH等も含む) | -| WP_HAVE_CMAC | CMACを有効にする | -| WP_HAVE_HMAC | HMACを有効にする | -| WP_HAVE_DES3CBC | DES3-CBCを有効にする | -| WP_HAVE_AESECB | AES-ECBを有効にする | -| WP_HAVE_AESCBC | AES-CBCを有効にする | -| WP_HAVE_AESCTR | AES-countee modeを有効にする | -| WP_HAVE_AESGCM | AES-GCMを有効にする | -| WP_HAVE_AESCCM | AES-CCMを有効にする | -| WP_HAVE_RANDOM | wolfCryptの疑似乱数生成実装を有効にする | -| WP_HAVE_RSA | RSA操作(署名、検証、鍵生成等)を有効にする | -| WP_HAVE_DH | Diffie-Hellman操作(鍵生成、共有シークレット計算等)を有効にする | -| WP_HAVE_ECC | 楕円曲線暗号を有効にする | -| WP_HAVE_EC_KEY | EC_KEY_METHODのサポートを有効にする(OpenSSL 1.0.2では利用不可) | -| WP_HAVE_ECDSA | ECDSA を有効にする | -| WP_HAVE_ECDH | EC Diffie-Hellman操作を有効にする | -| WP_HAVE_ECKEYGEN | EC鍵生成を有効にする | -| WP_HAVE_EC_P192 | EC Curve P192を有効にする | -| WP_HAVE_EC_P224 | EC Curve P224を有効にする | -| WP_HAVE_EC_P256 | EC Curve P256を有効にする | -| WP_HAVE_EC_P384 | EC Curve P384を有効にする | -| WP_HAVE_EC_P512 | EC Curve P512を有効にする | -| WP_HAVE_DIGEST | ダイジェストアルゴリズムをベンチマークとユニットテストのコードに含めてコンパイルする | -| WOLFPROVIDER_USER_SETTINGS | ユーザーの指定した定義をuser_settings.hファイルから読み込む | - +| 定義 | 説明 | +| :---------------- | :----------------------------- | +| WOLFPROVIDER_USER_SETTINGS | user_settings.hを使用する | +| WOLFPROV_DEBUG | デバッグ情報を出力する | +| WP_CHECK_FORCE_FAIL | テスト目的で障害チェックを強制する | +| WP_ALLOW_NON_FIPS | FIPSモードで特定の非FIPSアルゴリズムを許可する | +| WP_HAVE_AESCCM | CCM (Counter with CBC-MAC) モードでのAES暗号化を有効化 | +| WP_HAVE_AESCFB | CFB (Cipher Feedback) モードでのAES暗号化を有効化 | +| WP_HAVE_AESCBC | CBC (Cipher Block Chaining) モードでのAES暗号化を有効化 | +| WP_HAVE_AESCTR | CTR (Counter) モードでのAES暗号化を有効化 | +| WP_HAVE_AESCTS | CTS (Ciphertext Stealing) モードのAES暗号化を有効化 | +| WP_HAVE_AESECB | ECB (Electronic Codebook) モードのAES暗号化を有効化 | +| WP_HAVE_AESGCM | GCM (Galois/Counter Mode) モードのAES暗号化を有効化 | +| WP_HAVE_CMAC | CMAC (Cipher-based Message Authentication Code)を有効化 | +| WP_HAVE_DES3CBC | CBCモードのTriple DES暗号化を有効化 | +| WP_HAVE_DH | Diffie-Hellman鍵交換を有効化 | +| WP_HAVE_DIGEST | 汎用ダイジェスト/ハッシュアルゴリズムを有効化 | +| WP_HAVE_ECC | 汎用楕円曲線暗号を有効化 | +| WP_HAVE_EC_P192 | P-192 楕円曲線を有効化 | +| WP_HAVE_EC_P224 | P-224 楕円曲線を有効化 | +| WP_HAVE_EC_P256 | P-256 楕円曲線を有効化 | +| WP_HAVE_EC_P384 | P-384 楕円曲線を有効化 | +| WP_HAVE_EC_P521 | P-521 楕円曲線を有効化 | +| WP_HAVE_ECDH | ECDH (楕円曲線 Diffie-Hellman) 鍵交換を有効化 | +| WP_HAVE_ECDSA | ECDSA (楕円曲線デジタル署名アルゴリズム) を有効化 | +| WP_HAVE_ECKEYGEN | 楕円曲線鍵生成を有効化 | +| WP_HAVE_ED25519 | Ed25519 楕円曲線署名を有効化 | +| WP_HAVE_ED448 | Ed448 楕円曲線署名を有効化 | +| WP_HAVE_GMAC | GMAC (ガロア/カウンターモード認証) を有効化 | +| WP_HAVE_HKDF | HKDF (HMACベースの鍵導出関数) を有効化 | +| WP_HAVE_HMAC | HMAC (ハッシュベースのメッセージ認証コード) を有効化 | +| WP_HAVE_KRB5KDF | Kerberos 5 鍵導出関数を有効化 | +| WP_HAVE_MD5 | MD5 ハッシュアルゴリズムを有効化 | +| WP_HAVE_MD5_SHA1 | MD5+SHA1 の組み合わせを有効化 | +| WP_HAVE_PBE | パスワードベースの暗号化を有効化 | +| WP_HAVE_RANDOM | 乱数生成を有効化 | +| WP_HAVE_RSA | RSA 暗号化と署名を有効化 | +| WP_HAVE_SHA1 | SHA1 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA224 | SHA224 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA256 | SHA256 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA384 | SHA384 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA3 | SHA3 ファミリ ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA3_224 | SHA3-224 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA3_256 | SHA3-256 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA3_384 | SHA3-384 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA3_512 | SHA3-512 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA512 | SHA512 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA512_224 | SHA512/224 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHA512_256 | SHA512/256 ハッシュアルゴリズムを有効化 | +| WP_HAVE_SHAKE_256 | SHAKE256 拡張出力関数を有効化 | +| WP_HAVE_TLS1_PRF | TLS1 擬似乱数関数を有効化 | +| WP_HAVE_X25519 | X25519 楕円曲線を有効化 | +| WP_HAVE_X448 | X448 楕円曲線を有効化 | +| WP_RSA_PSS_ENCODING | RSA-PSS (確率的署名スキーム) エンコードを有効化 | diff --git a/wolfProvider/src-ja/chapter05.md b/wolfProvider/src-ja/chapter05.md index eaea0b00..04792669 100644 --- a/wolfProvider/src-ja/chapter05.md +++ b/wolfProvider/src-ja/chapter05.md @@ -8,23 +8,7 @@ autoconfを使用している場合、これは`./configure`に`--enable-debug` ./configure --enable-debug ``` -autoconf/configureを使用しない場合は、wolfProviderライブラリをコンパイルする際に `WOLFPROVIDER_DEBUG` を定義します。 - -## デバッグログの有効化/無効化 - -デバッグサポートを有効化してコンパイルを行った後、以下に示すwolfProviderコントロールコマンドを使用して実行時にデバッグを有効にする必要があります。 -"0" を指定すると、ログ出力が無効になります。 -`PROVIDER_ctrl_cmd()` APIを使用してログ出力を有効にする例を以下に示します。 - -``` -int ret = 0; -ret = PROVIDER_ctrl_cmd(e, “enable_debug”, 1, NULL, NULL, 0); -if (ret != 1) { - printf(“Failed to enable debug logging\n”); -} -``` - -wolfProviderがデバッグサポート無効の状態でコンパイルされた場合、`PROVIDER_ctrl_cmd()`で`enable_debug`を設定しようとすると失敗(0)が返されます。 +autoconf/configureを使用しない場合は、wolfProviderライブラリをコンパイルする際に `WOLFPROV_DEBUG` を定義します。 ## ログ出力レベルの制御 @@ -70,9 +54,10 @@ wolfProviderでは、コンポーネントごとにログを出力できます | WP_LOG_CIPHER | 暗号化コンポーネント(AES, 3DES) | 0x0008 | | WP_LOG_PK | 公開鍵コンポーネント (RSA, ECC) | 0x0010 | | WP_LOG_KE | 鍵合意コンポーネント (DH, ECDH) | 0x0020 | -| WP_LOG_PROVIDER | エンジン特有 | 0x0040 | -| WP_LOG_COMPONENTS_ALL | 全コンポーネント | WP_LOG_RNG | WP_LOG_DIGEST | WP_LOG_MAC | WP_LOG_CIPHER | WP_LOG_PK | WP_LOG_KE | WP_LOG_PROVIDER | -| WP_LOG_COMPONENTS_DEFAULT | デフォルトコンポーネント (all). | WP_LOG_COMPONENTS_ALL | +| WP_LOG_KDF | パスワードベースの鍵導出コンポーネント | 0x0040 | +| WP_LOG_PROVIDER | すべてのプロバイダー固有ログを有効化 | 0x0080 | +| WP_LOG_COMPONENTS_ALL | すべてのコンポーネントログを有効化 | WP_LOG_RNG | WP_LOG_DIGEST | WP_LOG_MAC | WP_LOG_CIPHER | WP_LOG_PK | WP_LOG_KE | WP_LOG_PROVIDER | +| WP_LOG_COMPONENTS_DEFAULT | デフォルト構成 (すべてのログを有効化) | WP_LOG_COMPONENTS_ALL | デフォルトでは、すべてのコンポーネントを対象としてログを出力します(`WP_LOG_COMPONENTS_DEFAULT`)。 @@ -120,7 +105,7 @@ const char* const logMessage) fprintf(stderr, “wolfProvider log message: %d\n”, logMessage); } -int **main** (void) +int main (void) { int ret; PROVIDER* e; diff --git a/wolfProvider/src-ja/chapter07.md b/wolfProvider/src-ja/chapter07.md index 5fb7e11a..7e23f56b 100644 --- a/wolfProvider/src-ja/chapter07.md +++ b/wolfProvider/src-ja/chapter07.md @@ -1,57 +1,45 @@ # wolfProviderのロード -## OpenSSLをエンジンを利用できるように構成 +## OpenSSLをエンジンプロバイダーを利用できるように構成 -アプリケーションがOpenSSLエンジンを使用および使用する方法については、OpenSSLのドキュメントをご参照ください。 +アプリケーションがOpenSSLプロバイダーを使用するための手順については、OpenSSLドキュメントをご参照ください。 -- [OpenSSL 1.0.2](https://www.openssl.org/docs/man1.0.2/man3/provider.html) -- [OpenSSL 1.1.1](https://www.openssl.org/docs/man1.1.1/man3/PROVIDER_add.html) - -アプリケーションがエンジンを使用するための方法はいくつかあります。 -最も単純なものとして、OpenSSLにバンドルされているすべてのPROVIDER実装をロードして登録し、アプリケーションで次のコードを呼び出す方法があります。 - (上記のOpenSSLドキュメントから引用しています) -``` -/* For OpenSSL 1.0.2, need to make the “dynamic” PROVIDER available */ -PROVIDER_load_dynamic(); - -/* Load all bundled PROVIDERs into memory and make them visible */ -PROVIDER_load_builtin_providers(); - -/* Register all of them for every algorithm they collectively implement */ -PROVIDER_register_all_complete(); -``` +- [OpenSSL 3.0](https://www.openssl.org/docs/man3.0/man7/provider.html) +- [OpenSSL 3.5](https://www.openssl.org/docs/man3.5/man7/provider.html) アプリケーションがOpenSSL設定ファイルを使用するように設定されている場合、 追加のプロバイダー設定ステップをそこで行うことができます。 OpenSSLを構成する方法については、OpenSSLドキュメントをご覧ください。 -- [OpenSSL 1.0.2 ドキュメント](https://www.openssl.org/docs/man1.0.2/man3/OPENSSL_config.html) -- [OpenSSL 1.1.1 ドキュメント](https://www.openssl.org/docs/man1.1.1/man3/OPENSSL_config.html) +- [OpenSSL 3.0](https://www.openssl.org/docs/man3.0/man5/config.html) +- [OpenSSL 3.5](https://www.openssl.org/docs/man3.5/man5/config.html) アプリケーションはデフォルトのOpenSSL構成ファイル (`openssl.cnf`)や、 `OPENSSL_CONF`環境変数によって設定された構成の `[openssl_conf]` セクションを呼び出して、読み取り、使用できます。 -``` -OPENSSL_config(NULL); -``` - -OpenSSLコンフィギュレーションファイルを使用する代わりに、アプリケーションは`PROVIDER_*` APIを使用して明示的に wolfProviderの初期化やアルゴリズムの登録を行うこともできます。 +OpenSSLコンフィギュレーションファイルを使用する代わりに、アプリケーションは`OSSL_PROVIDER_*` APIを使用して明示的に wolfProviderの初期化やアルゴリズムの登録を行うこともできます。 一例として、wolfProviderの初期化とすべてのアルゴリズムの登録を行う場合を以下に示します。 ``` -PROVIDER* e = NULL; - -e = PROVIDER_by_id(“wolfprovider”); -if (e == NULL) { - printf(“Failed to find wolfProvider\n”); - /* error */ -} -PROVIDER_set_default(e, PROVIDER_METHOD_ALL); - -/* アプリケーションの実装 */ - -PROVIDER_finish(e); -PROVIDER_cleanup(); + OSSL_PROVIDER *prov = NULL; + const char *build = NULL; + OSSL_PARAM request[] = { + { "buildinfo", OSSL_PARAM_UTF8_PTR, &build, 0, 0 }, + { NULL, 0, NULL, 0, 0 } + }; + + if ((prov = OSSL_PROVIDER_load(NULL, "libwolfprov")) != NULL + && OSSL_PROVIDER_get_params(prov, request)) + printf("Provider 'libwolfprov' buildinfo: %s\n", build); + else + ERR_print_errors_fp(stderr); + + if (OSSL_PROVIDER_self_test(prov) == 0) + printf("Provider selftest failed\n"); + else + printf("Provider selftest passed\n"); + + OSSL_PROVIDER_unload(prov); ``` ## OpenSSLコンフィギュレーションファイルによるwolfProviderのロード @@ -60,28 +48,18 @@ OpenSSLを使用するアプリケーションがコンフィギュレーショ wolfProviderはOpenSSLコンフィギュレーションファイルからロードできます。 wolfProviderライブラリをコンフィギュレーションファイルに追加する方法の例を以下に示します。 -`[wolfssl_section]`は、必要に応じてエンジン制御コマンド(`enable_debug`)を設定するように変更できます。 ``` openssl_conf = openssl_init [openssl_init] -providers = provider_section - -[provider_section] -wolfSSL = wolfssl_section - -[wolfssl_section] -# If using OpenSSL <= 1.0.2, change provider_id to wolfprovider -(drop the "lib"). -provider_id = libwolfprovider -# dynamic_path = .libs/libwolfprovider.so -init = 1 -# Use wolfProvider as the default for all algorithms it provides. -default_algorithms = ALL -# Only enable when debugging application - produces large -amounts of output. -# enable_debug = 1 +providers = provider_sect + +[provider_sect] +libwolfprov = libwolfprov_sect + +[libwolfprov_sect] +activate = 1 ``` ## wolfProvider静的エントリポイント @@ -91,5 +69,5 @@ wolfProviderをロードできます。 ``` #include -PROVIDER_load_wolfprovider(); +wolfssl_provider_init(const OSSL_CORE_HANDLE* handle, const OSSL_DISPATCH* in, const OSSL_DISPATCH** out, void** provCtx); ``` diff --git a/wolfProvider/src-ja/chapter08.md b/wolfProvider/src-ja/chapter08.md index a4541985..01e44c65 100644 --- a/wolfProvider/src-ja/chapter08.md +++ b/wolfProvider/src-ja/chapter08.md @@ -2,58 +2,76 @@ wolfProviderは次のソースファイルで構成され、すべてwolfProviderパッケージの`src`サブディレクトリの下にあります。 -| ソースファイル | 詳細 | -| ---- | ---------------- | -| wp_wolfprovider.c | ライブラリエントリポイントが含まれます。 OpenSSLエンジンフレームワークを使用してライブラリを動的にロードするために、OpenSSL IMPLEMENT_DYNAMIC_BIND_FNを呼び出します。コンパイルして静的ライブラリとして使用する場合のスタティックエントリポイントも含みます。 | -| wp_internal.c | エンジンアルゴリズムコールバックの登録を処理する`wolfprovider_bind()`関数が含まれています。他のwolfProviderの内部機能も含みます。 | -| wp_logging.c | wolfProviderログ出力フレームワークと関数の実装 | -| wp_openssl_bc.c | wolfProvider OpenSSLバイナリ互換抽象化レイヤーです。複数のOpenSSLバージョンでwolfProviderをサポートするために使用します。 | -| wp_aes_block.c | wolfProvider AES-ECBおよびAES-CBC実装 | -| wp_aes_cbc_hmac.c | wolfProvider AES-CBC-HMAC実装 | -| wp_aes_ccm.c | wolfProvider AES-CCM実装 | -| wp_aes_ctr.c | wolfProvider AES-CTR実装 | -| wp_aes_gcm.c | wolfProvider AES-GCM実装 | -| wp_des3_cbc.c | wolfProvider 3DES-CBCの実装 | -| wp_dh.c | wolfProvider DHの実装 | -| wp_digest.c | wolfProvider メッセージダイジェストの実装(SHA-1、SHA-2、SHA-3) | -| wp_ecc.c | wolfProvider ECDSAおよびECDHの実装 | -| wp_mac.c | wolfProvider HMACおよびCMACの実装 | -| wp_random.c | wolfProvider RAND実装 | -| wp_rsa.c | wolfProvider RSA実装 | -| wp_tls_prf.c | wolfProvider TLS 1.0 PRF実装 | +| ソースファイル | 説明 | +| ------ | ---------------- | +| wp_wolfprov.c | ライブラリのエントリポイントが含まれています。OpenSSL プロバイダフレームワークを使用してライブラリを動的にロードするために、OpenSSL IMPLEMENT_DYNAMIC_BIND_FN を呼び出します。コンパイルして静的ライブラリとして使用する場合は、静的エントリポイントも含みます。 | +| wp_internal.c | プロバイダアルゴリズムのコールバックの登録を処理する wolfprovider_bind() 関数が含まれています。また、その他の wolfprovider 内部機能も含みます。 | +| wp_logging.c | wolfProvider のロギングフレームワークと関数の実装 | +| wp_aes_aead.c | wolfProvider AES-AEAD (Authenticated Encryption with Associated Data) の実装 | +| wp_aes_block.c | wolfProvider AES-ECB および AES-CBC 実装 | +| wp_aes_stream.c | wolfProvider AES ストリーム暗号実装 | +| wp_aes_wrap.c | wolfProvider AES キーラッピング実装 | +| wp_cmac.c | wolfProvider CMAC (暗号ベースメッセージ認証コード) 実装 | +| wp_dec_epki2pki.c | wolfProvider 暗号化された秘密鍵から秘密鍵への変換実装 | +| wp_dec_pem2der.c | wolfProvider PEM から DER 形式への変換実装 | +| wp_des.c | wolfProvider DES 実装 | +| wp_dh_exch.c | wolfProvider DH 鍵交換実装 | +| wp_dh_kmgmt.c | wolfProvider DH 鍵管理実装 | +| wp_digests.c | wolfProvider メッセージ ダイジェスト実装 (SHA-1、SHA-2、SHA-3、...)| +| wp_drbg.c | wolfProvider DRBG (決定論的乱数ビット ジェネレーター) 実装| +| wp_ecc_kmgmt.c | wolfProvider ECC キー管理実装| +| wp_ecdh_exch.c | wolfProvider ECDH キー交換実装| +| wp_ecdsa_sig.c | wolfProvider ECDSA 署名実装| +| wp_ecx_exch.c | wolfProvider ECX キー交換実装 (X25519、X448、...)| +| wp_ecx_kmgmt.c | wolfProvider ECX キー管理実装| +| wp_ecx_sig.c | wolfProvider ECX 署名実装 (Ed25519、Ed448、...)| +| wp_file_store.c | wolfProvider ファイルストレージ実装| +| wp_fips.c | wolfProvider FIPS 検証実装| +| wp_gmac.c | wolfProvider GMAC (Galois/Counter Mode) 実装| +| wp_hkdf.c | wolfProvider HKDF (HMAC ベースの鍵導出関数) 実装| +| wp_hmac.c | wolfProvider HMAC 実装| +| wp_kbkdf.c | wolfProvider KBKDF (鍵ベースの鍵導出関数) 実装| +| wp_kdf_exch.c | wolfProvider KDF 鍵交換実装| +| wp_kdf_kmgmt.c | wolfProvider KDF 鍵管理実装| +| wp_krb5kdf.c | wolfProvider Kerberos 5 KDF 実装| +| wp_mac_kmgmt.c | wolfProvider MAC キー管理実装| +| wp_mac_sig.c | wolfProvider MAC 署名実装| +| wp_params.c | wolfProvider パラメータ処理実装| +| wp_pbkdf2.c | wolfProvider PBKDF2 (パスワードベースのキー導出関数 2) 実装| +| wp_rsa_asym.c | wolfProvider RSA 非対称暗号化実装| +| wp_rsa_kem.c | wolfProvider RSA KEM (キーカプセル化メカニズム) 実装| +| wp_rsa_kmgmt.c | wolfProvider RSA キー管理実装| +| wp_rsa_sig.c | wolfProvider RSA 署名実装| +| wp_tls1_prf.c | wolfProvider TLS 1.0 PRF 実装| +| wp_tls_capa.c | wolfProvider TLS 機能の実装 | ## wolfProviderエントリーポイント -wolfProviderライブラリへの主なエントリポイントは、**wolfprovider_bind** () または **PROVIDER_load_wolfprovider** () のいずれかです。 -wolfProviderが動的にロードされている場合、`wolfprovider_bind()`はOpenSSL によって自動的に呼び出されます。 -`PROVIDER_load_wolfprovider()` はwolfProvider静的に構築および使用されている場合に、アプリケーションが呼び出す必要があるエントリポイントです。 - -## wolfProviderアルゴリズムコールバック登録 - -wolfProviderは、FIPS版wolfCryptでサポートしているすべてのコンポーネントに対して、アルゴリズム構造体とコールバックを OpenSSLエンジンフレームワークに登録します。 -この登録は、`wp_internal.c` の `wolfprovider_bind()` 内で行われます。 -`wolfprovider_bind()`は、wolfProvider エンジンを表す`PROVIDER`構造体ポインタを受け取ります。 -次に、個々のアルゴリズム/コンポーネントのコールバックまたは構造体が、``の適切なAPIを使用してその`PROVIDER`構造体に登録されます。 - -これらのAPI呼び出しには、以下のものが含まれます。 - -``` -PROVIDER_set_id(e, wolfprovider_id) -PROVIDER_set_name(e, wolfprovider_name) -PROVIDER_set_digests(e, wp_digests) -PROVIDER_set_ciphers(e, wp_ciphers) -PROVIDER_set_RAND(e, wp_random_method) -PROVIDER_set_RSA(e, wp_rsa()) -PROVIDER_set_DH(e, wp_dh_method) -PROVIDER_set_ECDSA(e, wp_ecdsa()) -PROVIDER_set_pkey_meths(e, wp_pkey) -PROVIDER_set_pkey_asn1_meths(e, wp_pkey_asn1) -PROVIDER_set_EC(e, wp_ec()) -PROVIDER_set_ECDH(e, wp_ecdh()) -PROVIDER_set_destroy_function(e, wolfprovider_destroy) -PROVIDER_set_cmd_defns(e, wolfprovider_cmd_defns) -PROVIDER_set_ctrl_function(e, wolfprovider_ctrl) -``` - -上記の呼び出しで使用される各アルゴリズム/コンポーネントのコールバック関数または構造体 -(例: wp_digests、wp_ciphers など) は、`wp_internal.c` またはそれぞれのアルゴリズムソースファイルに実装しています。 +wolfProvider ライブラリへの主要なエントリポイントは、**OSSL_provider_init()** と **wolfssl_provider_init()** です。 + +**OSSL_provider_init()** は、プロバイダが動的にロードされた際に OpenSSL によって自動的に呼び出される標準のOpenSSLプロバイダエントリポイントです。 +この関数は `wp_wolfprov.c` で定義されており、`wolfssl_provider_init()` を呼び出すラッパーとして機能します。 + +**wolfssl_provider_init()** は、以下の機能を実行するコア初期化関数です。 + +- プロバイダーコンテキストをセットアップします。 +- プロバイダー関数でディスパッチテーブルを初期化します。 +- FIPS モード設定を処理します。 +- デバッグが有効になっている場合は、デバッグをセットアップします。 +- 以下の関数ポインタを含むプロバイダーのディスパッチテーブルを返します。 + +* `wolfprov_teardown` - プロバイダーのクリーンアップ +* `wolfprov_gettable_params` - パラメーターテーブルの取得 +* `wolfprov_get_params` - パラメーターの取得 +* `wolfprov_query` - 操作のクエリ +* `wolfssl_prov_get_capabilities` - 機能レポート + +アプリケーションがwolfProviderアルゴリズムを要求すると、OpenSSLによってプロバイダーがロードされます。 +ディスパッチテーブルは、OpenSSLが暗号操作に適切なwolfProvider関数を呼び出すことを可能にします。 + +## wolfProvider ディスパッチテーブル関数 + +wolfProviderディスパッチテーブルには、プロバイダー操作のさまざまな側面を処理するいくつかの主要な関数が含まれています。 +各関数は、OpenSSLプロバイダフレームワークにおいて特定の目的を果たします。 + +**OSSLパラメータに関する注意(後述):** OSSLパラメータは、OpenSSLがプロバイダと設定データや機能情報を交換するための標準化された方法です。 diff --git a/wolfProvider/src-ja/chapter09.md b/wolfProvider/src-ja/chapter09.md index 5a73a497..50587892 100644 --- a/wolfProvider/src-ja/chapter09.md +++ b/wolfProvider/src-ja/chapter09.md @@ -1,52 +1,116 @@ # その他のオープンソースソフトウェアとの統合に関する注意事項 -wolfProviderは、一般的なOpenSSLエンジンフレームワークとアーキテクチャに準拠しています。 -そのため、OpenSSLを使用するアプリケーションからOpenSSL構成ファイルを介して、または`PROVIDER` API呼び出しを介して、他のエンジン実装と同様にwolfProviderをプログラムで利用できます。 +wolfProviderは、OpenSSLプロバイダの一般的なフレームワークとアーキテクチャに準拠しています。 +そのため、OpenSSLを使用するアプリケーションからOpenSSL構成ファイルやAPI呼び出しを介して、wolfProviderを利用できます。 -wolfSSLは、いくつかのオープンソースプロジェクトでwolfProviderをテストしました。 +wolfSSLは、自動化されたCI/CDワークフローを用いていくつかのオープンソースプロジェクトでwolfProviderをテストしています。 この章には、wolfProviderとのインテグレーションに関する注意事項とヒントを示します。 -ただし、すべてのオープンソースプロジェクトを網羅しているわけではありません。 -今後も随時、wolfSSLまたはコミュニティが追加のオープンソースプロジェクトでwolfProviderの動作を確認し追記します。 -## cURL +## テスト済みのオープンソースプロジェクト -cURLはすでにOpenSSL構成ファイルを利用するようにセットアップされています。 -wolfProviderを利用するには、次のステップを実行してください。 +以下のオープンソースプロジェクトは、wolfProviderを用いて動作することをテスト済みです。 -1. wolfProviderエンジン情報をOpenSSL設定ファイルに追加します -2. 必要に応じて、`OPENSSL_CONF`環境変数がOpenSSL設定ファイルを指すように設定します +### ネットワーク / Webテクノロジー +* cURL - URLによるデータ転送用コマンドラインツール +* gRPC - 高性能RPCフレームワーク +* libwebsockets - Websocket用軽量Cライブラリ +* Nginx - 高性能HTTPサーバーおよびリバースプロキシ +* Qt5 Network - Qtネットワークモジュール -``` -$ export OPENSSL_CONF=/path/to/openssl.cnf -``` -3. `OPENSSL_PROVIDERS` 環境変数をwolfProvider共有ライブラリファイルの場所を指すように設定します +### セキュリティ / 認証 -``` -$ export OPENSSL_PROVIDERS=/path/to/wolfprovider/library/dir -``` -## stunnel +* OpenSSH - セキュアシェル実装 +* libssh2 - SSH2ライブラリ +* libfido2 - WebAuthn用FIDO2 ライブラリ +* OpenSC - スマートカードツールおよびミドルウェア +* pam-pkcs11 - PKCS#11用PAM モジュール +* OpenVPN - VPNソリューション +* Stunnel - ネットワークサービス用SSLラッパー + +### システム / ネットワークツール + +* systemd - システムおよびサービスマネージャー +* tcpdump - ネットワークパケットアナライザー +* rsync - ファイル同期ユーティリティ +* tnftp - 拡張FTPクライアント +* iperf - ネットワークパフォーマンス測定ツール +* IPMItool - IPMI管理ツール +* PPP - ポイント to ポイントプロトコル実装 + +### ディレクトリ / IDサービス + +* OpenLDAP - 軽量ディレクトリアクセスプロトコル +* SSSD - システムセキュリティサービスデーモン +* Net-SNMP - ネットワーク管理プロトコル実装 + +### 暗号 / PKI + +* cjose - JWT用Cライブラリ +* libeac3 - 電子認証コンポーネント +* libhashkit2 - コンシステントハッシュライブラリ +* liboauth2 - OAuth2ライブラリ +* libtss2 - TPM2ソフトウェアスタック +* tpm2-tools - TPM2ツール +* xmlsec - XMLセキュリティライブラリ +* sscep - SCEPクライアント実装 + +### 開発 / テスト -stunnelはwolfProviderでテスト済みです。 詳細は追って更新いたします。 +* Asan - アドレスサニタイザーテスト +* Codespell - ソースコード用スペルチェッカー +* Multi-Compiler - マルチコンパイラテスト -## OpenSSH +### リモートアクセス / リモートディスプレイ -OpenSSHは、`--with-ssl-provider`構成オプションを使用して、OpenSSLエンジンサポートでコンパイルする必要があります。 -必要に応じて`--with-ssl-dir=DIR`を使用して、使用されているOpenSSLライブラリのインストール場所を指定することもできます。 +* x11vnc - X11用VNCサーバー +* python3-ntp - Python NTPライブラリ + +### その他のユーティリティ + +* Socat - 双方向データ転送用の多目的リレー +* Simple - シンプルなテストアプリケーション + +## 一般的な設定 + +これらのプロジェクトのほとんどは、以下のような設定手順が必要です。 + +1. GitHubからクローンする +2. Autotoolsでビルドする +3. OpenSSLで設定する +4. Makeとインストール +5. wolfProviderを使用する ``` -$ cd openssh -$ ./configure --prefix=/install/path --with-ssl-dir=/path/to/openssl/install ---with-ssl-provider -$ make -$ sudo make install +export OPENSSL_CONF=/path/to/provider.conf +export OPENSSL_MODULES=/path/to/wolfprov-install/lib ``` -OpenSSHには、wolfProviderを活用するためのOpenSSL構成ファイルのセットアップも必要です。 -必要に応じて、`OPENSSL_CONF`環境変数を構成ファイルを指すように設定できます。 -`OPENSSL_PROVIDERS`環境変数も、wolfProvider共有ライブラリの場所に設定する必要があります。 +make (または同等のビルドスクリプト) を実行した後、`ldd /path/to/compiled/binary` を実行することで、設定されている OpenSSL のバージョンを確認できます。 +これにより、リンクされているライブラリのリストが表示されます。 +正しくないバージョンが存在する場合は、リビルド前に以下の4つの環境変数を組み合わせて設定すると改善される可能性があります。 ``` -$ export OPENSSL_CONF=/path/to/openssl.cnf -$ export OPENSSL_PROVIDERS=/path/to/wolfprovider/library/dir +export LD_LIBRARY_PATH="/path/to/wolfssl/install/lib:/path/to/openssl/install/lib64" +export PKG_CONFIG_PATH="/path/to/openssl/install/lib64/pkgconfig" +export LDFLAGS="-L/path/to/openssl/install/lib64" +export CPPFLAGS="-I/path/to/openssl/install/include" ``` + +さらに、wolfProviderはライブラリが実際にwolfProviderを使用しているかどうかを判断する機能も提供します。 +`export WOLFPROV_FORCE_FAIL=1` または `WOLFPROV_FORCE_FAIL=1 /command/to/run` を実行するだけで、 +コマンドがwolfProviderを経由した際に失敗するようになります。 + +使用しているプロジェクトがテスト済みのオープンソースプロジェクトのリストに含まれている場合は、テストスクリプトを参照できます。 +これらのスクリプトは、GitHub の [wolfssl/wolfProvider](https://github.com/wolfSSL/wolfProvider) リポジトリの `.github/workflows/` にあります。 + +## テストと検証 + +上記のすべてのオープンソースプロジェクトは、wolfProvider CI/CDパイプラインで以下のものを使用して継続的にテストしています。 + +* OpenSSL v3.5.0 +* wolfSSLのマスターリリース / 安定リリース +* 適切なエラー処理を保証するための障害テスト +* FIPSテストもJenkinsパイプラインを通じて実施しています + +この包括的なテストにより、wolfProvider は幅広いオープンソースプロジェクトとその様々なユースケースとの互換性を維持しています。