wolfProviderのビルド
wolfProviderのダウンロード
wolfProviderの最新バージョンは、wolfSSL Inc. から直接入手できます。 詳細については、info@wolfssl.jpまでお問い合わせください。
パッケージ構成
wolfProviderパッケージは、以下のように構成しています。
certs/ (ユニットテストで使用されるテスト用証明書、鍵)
provider.conf (wolfProviderを使用する場合のOpenSSLコンフィギュレーションファイルサンプル)
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サンプル)
OpenSSLのバージョンに関する注意事項
次に示すアルゴリズムを利用するには、併記したOpenSSLバージョンが必要です。
- SHA-3:OpenSSL バージョン1.1.1以降が必要
- EC_KEY_METHOD:OpenSSL バージョン1.1.1以降が必要
*nix上でのビルド
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
非FIPS版のwolfSSLを使用する場合は、以下のようになります。
cd wolfssl-X.X.X
./configure --enable-cmac --enable-keygen --enable-sha --enable-des --enable-aesctr --enable-aesccm --enable-x963kdf CPPFLAGS="-DHAVE_AES_ECB -DWOLFSSL_AES_DIRECT -DWC_RSA_NO_PADDING -DWOLFSSL_PUBLIC_MP -DECC_MIN_KEY_SZ=192 -DWOLFSSL_PSS_LONG_SALT -DWOLFSSL_PSS_SALT_LEN_DISCOVER"
make
sudo make install
なお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
スクリプトに追加できるオプションを以下に示します。
デフォルトでは、ビルド時間を半分にするために共有ライブラリのみをビルドします。 必要に応じて、静的ライブラリをビルドしたり共有ライブラリのビルドを無効化したりできます。
オプション | デフォルト | 意味 |
---|---|---|
--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のインストール場所を指定。指定しない場合はシステムのデフォルトライブラリパスとインクルードパスが使われます。 |
ビルド用マクロ定義
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ファイルから読み込む |