コンテンツにスキップ

wolfProviderのビルド

wolfProviderのダウンロード

wolfProviderの最新バージョンは、wolfSSL Inc. から直接入手できます。 詳細については、info@wolfssl.jpまでお問い合わせください。

パッケージ構成

wolfProviderパッケージは、以下のように構成しています。

certs/                      (ユニットテストで使用されるテスト用証明書、鍵)
examples/                   (実装例)
include/
    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サンプル)

*nix上でのビルド

最も簡単な方法は、以下のように scripts/build-wolfprovider.sh スクリプトを使用することです。

./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

スクリプトの引数として指定する方法:

./scripts/build-wolfprovider.sh --openssl-ver=openssl-3.2.0 --wolfssl-ver=v5.7.2-stable --debug

これらの方法を組み合わせて、目的のビルドの組み合わせを実現することもできます。

環境変数とスクリプト引数の完全なリストについては、./scripts/build-wolfprovider.sh --help を実行してください。

必要に応じて、以下のガイドを使用して各コンポーネントを手動でコンパイルすることもできます。

OpenSSLをビルド

すでにインストールされたOpenSSLを使用することも、新しく1からOpenSSLをコンパイルして使用することもできます。 以下に、*nix(Linux, Unix)上でOpenSSLをコンパイルする一般的な手法を示します。 より詳しいビルド手順をお求めでしたら、OpenSSLのINSTALLファイルドキュメントをご参照ください。

git clone https://github.com/openssl/openssl.git
cd openssl
./config no-fips -shared
make
sudo make install

wolfSSLをビルド

wolfProviderでwolfSSL FIPS版を使用するには、特定のFIPS検証済みソースバンドルやセキュリティポリシーで指定されたビルド手順に従う必要があります。 まずコンフィギュレーションオプションとして--enable-fipsが必要で、かつ WOLFSSL_PUBLIC_MP が定義された状態でwolfSSLをコンパイルします。 以下に、Linuxで「wolfCrypt Linux FIPSv2バンドル」をビルドする例を示します。

cd wolfssl-X.X.X-commercial-fips-linuxv
./configure --enable-fips=v2 CFLAGS="-DWOLFSSL_PUBLIC_MP"
make
./wolfcrypt/test/testwolfcrypt
#-< ここで、fips_test.c内のverifyCoreを開き、testwolfcryptスクリプトが出力するハッシュ値に更新してください >--

make
./wolfcrypt/test/testwolfcrypt

#-< すべてのテストでPASSできるはずです >--

sudo make install

可能であれば、make を実行してから ./fips-hash.sh ユーティリティを実行し、もう一度 make を実行する方が簡単かもしれません。 このユーティリティは、testwolfcrypt のハッシュ出力を使用して fips_test.c を更新するプロセスを自動化します。

非FIPS版のwolfSSLを使用する場合は、以下のようになります。

cd wolfssl-X.X.X

./configure --enable-opensslcoexist --enable-cmac --enable-keygen --enable-sha --enable-des3 --enable-aesctr --enable-aesccm --enable-x963kdf --enable-compkey CPPFLAGS="-DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT -DWC_RSA_NO_PADDING -DWOLFSSL_PUBLIC_MP -DHAVE_PUBLIC_FFDHE -DWOLFSSL_DH_EXTRA -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER -DRSA_MIN_SIZE=1024" --enable-certgen --enable-aeskeywrap --enable-enckeys --enable-base16 --with-eccminsz=192
make
sudo make install

より良いAES-GCMサポートのために、利用可能であれば --enable-aesgcm-stream を追加してください。

X25519鍵交換のサポートを含めるために --enable-curve25519 を追加してください。

X448鍵交換のサポートを含めるために --enable-curve448 を追加してください。

Ed25519署名と証明書のサポートを含めるために --enable-ed25519 を追加してください。

Ed448署名と証明書のサポートを含めるために --enable-ed448 を追加してください。

OpenSSLでPKCS#12を使用する場合は、 --enable-pwdbased を追加してください。

事前定義された6144ビットおよび8192ビットDHパラメータを有効にするために、CPPFLAGSに -DHAVE_FFDHE_6144 -DHAVE_FFDHE_8192 -DFP_MAX_BITS=16384 を追加してください。

同じ鍵でHMACを繰り返し実行してパフォーマンスを向上させる場合は --enable-hmac-copy を追加してください。 (wolfSSL 5.7.8以降で利用可能です。)

SP整数演算を使用するために --enable-sp=yes,asm' '--enable-sp-math-all' を追加してください。 使用する際は -DFP_MAX_BITS=16384-DSP_INT_BITS=8192 に置き換えてください。

FIPS v2バンドルからビルドしており、gitリポジトリからではない場合は、-DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER を削除し、上記のconfigureコマンドに --enable-fips=v2 を追加してください。 FIPS Readyバンドルを使用している場合は、--enable-fips=v2--enable-fips=ready に変更してください。

--with-eccminsz=192 がwolfSSLでサポートされていない場合は、CPPFLAGSに -DECC_MIN_KEY_SZ=192 を追加してください。

wolfSSLをGitHubリポジトリから取得された場合は、./configureを実行する前にautogen.shスクリプトを実行する必要があります。 これにより、configureスクリプトが生成されます。

./autogen.sh

wolfProviderをビルド

Linuxなどの*nixライクな環境でwolfProviderをビルドする場合は、autoconfをご利用ください。 wolfProviderをビルドするには、wolfProviderのルートディレクトリ上で次のコマンドを実行します。

./configure
make

wolfProviderをGitHubリポジトリから取得された場合は、./configureを実行する前にautogen.shスクリプトを実行する必要があります。

./autogen.sh

任意の数のビルドオプションを ./configure に追加できます。 利用可能なビルドオプションの一覧については、後の「ビルドオプション」セクションに掲載しているほか、 次のコマンドを実行することで表示できます。

./configure  --help

wolfProviderは通常、システムにインストールされたデフォルトのOpenSSLライブラリを使用します。 --with-opensslオプションにより、特定のディレクトリに存在するOpenSSLを使用することもできます。

./configure --with-openssl=/usr/local/ssl

デフォルト以外のOpenSSLを使用する場合、ライブラリ検索パスに追加しなければならないケースがあります。 Linuxシステムでは、次のようにLD_LIBRARY_PATHを編集します。

export LD_LIBRARY_PATH=/usr/local/ssl:$LD_LIBRARY_PATH

wolfProviderをビルドしインストールするには、以下のコマンドを実行します。

make
make install

インストール時にはroot権限を求められる場合があります。 その際は、コマンドの前にsudoを付加します。

sudo make install

ビルド結果をテストするには、wolfProviderのルートディレクトリで以下のコマンドを実行します。

./test/unit.test

次のように、autoconfを使用して実行することもできます。

make check

ライブラリが見つからない場合、 error while loading shared libraries: libssl.so.3 のようなエラーが発生します。 環境変数LD_LIBRARY_PATHを編集することで解決しないかお試しください。

WinCE上でのビルド

wolfProviderとの互換性を保つために、wolfCryptのuser_settings.hファイルに以下の定義があることをご確認ください。

#define WOLFSSL_CMAC
#define WOLFSSL_KEY_GEN
#undef NO_SHA
#undef NO_DES
#define WOLFSSL_AES_COUNTER
#define HAVE_AESCCM
#define HAVE_AES_ECB
#define WOLFSSL_AES_DIRECT
#define WC_RSA_NO_PADDING
#define WOLFSSL_PUBLIC_MP
#define ECC_MIN_KEY_SZ=192

使用するアルゴリズムと機能に応じて、user_settings.hファイルにwolfProviderフラグを追加します。 wolfProviderディレクトリにあるuser_settings.hファイルで、wolfProviderユーザー設定フラグを参照できます。

Windows CE用のwcecompat、wolfCrypt、およびOpenSSLをビルドし、それらのパスを参照できるようにします。

wolfProviderディレクトリでソースファイルを開き、OpenSSL、wolfCrypt、および user_settings.h パスを使用しているディレクトリに変更します。 INCLUDESセクションとTARGETLIBSセクションのパスを更新する必要があります。

Visual StudioでwolfProviderプロジェクトをロードします。 ベンチマークまたは単体テストを実行する場合は、「bench.c」、または「unit.h」と「unit.c」のいずれかを含めます。

プロジェクトをビルドすると、実行可能ファイルwolfProvider.exeが作成されます。 この実行可能ファイルに--helpの引数をつけて実行すると、オプションの一覧を表示できます。 wolfProviderを静的エンジンとして使用するには--staticを付けて実行する必要があります。

ビルドオプション (./configure に指定するオプション)

ライブラリの構築方法をカスタマイズするために./configureスクリプトに追加できるオプションを以下に示します。

デフォルトでは、ビルド時間を半分にするために共有ライブラリのみをビルドします。 必要に応じて、静的ライブラリをビルドしたり共有ライブラリのビルドを無効化したりできます。

オプション デフォルト値 説明
--disable-option-checking 無効
--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_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 (確率的署名スキーム) エンコードを有効化