wolfEngine のビルド
wolfEngine のソースコードの取得
wolfEngine の最新バージョンは、wolfSSL Inc. から直接入手できます。詳細については、facts@wolfssl.com までお問い合わせください。
wolfEngine パッケージ構成
一般的な wolfEngine パッケージは次のように構成されています:
certs/ (ユニットテストで使用されるテスト用証明書、鍵)
engine.conf (wolfEngineを使用する場合のOpenSSLコンフィギュレーションファイルサンプル)
include/
wolfengine/ (wolfEngineヘッダーファイル)
openssl_patches/
1.0.2h/tests/ (OpenSSL 1.0.2h テストアプリ用パッチ)
1.1.1b/tests/ (OpenSSL 1.1.1b テストアプリ用パッチ)
scripts/ (wolfEngine テストスクリプト)
src/ (wolfEngine ソースファイル)
test/ (wolfEngine テストファイル)
user_settings.h (user_settings.hサンプル)
OpenSSL のバージョンに関する注意事項
wolfEngine で使用されている OpenSSL のバージョンに応じて、次のようないくつかのアルゴリズム サポートの注意事項があります:
- SHA-3 はOpenSSL versions 1.1.1以降でサポートされます
- EC_KEY_METHOD はOpenSSL versions 1.1.1以降でサポートされます
*nix 上でのビルド
OpenSSLをビルド
OpenSSL のプリインストールされたバージョンを wolfEngine で使用することも (上記のアルゴリズムの警告を除いて)、または OpenSSL を再コンパイルして wolfEngine で使用することもできます。 *nix のようなプラットフォームで OpenSSL をコンパイルするための一般的な手順は、次のようになります。 完全で包括的な OpenSSL のビルド手順については、OpenSSL INSTALL ファイルとドキュメントを参照してください。
git clone https://github.com/openssl/openssl.git
cd openssl
./config no-fips -shared
make
sudo make install
wolfSSLをビルド
wolfEngine で wolfSSL の FIPS 検証済みバージョンを使用する場合は、特定の FIPS 検証済みソース バンドルとセキュリティ ポリシーで提供されるビルド手順に従ってください。 正しい「--enable-fips」設定オプションに加えて、wolfEngine は"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 を hash output from testwolfcryptスクリプトが出力するハッシュ値に更新してください >--
make
./wolfcrypt/test/testwolfcrypt
#-< 全アルゴリズムでパスするはずです>--
sudo make install
wolfEngine で使用する非 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
GitHub から wolfSSL をクローンする場合、./configure
を実行する前に autogen.sh
スクリプトを実行する必要があります。 これにより、configure スクリプトが生成されます:
./autogen.sh
wolfEngineをビルド
Linux またはその他の *nix ライクなシステムで wolfEngine をビルドする場合は、autoconf システムを使用してください。 wolfEngine を構成およびコンパイルするには、wolfEngine ルート ディレクトリから次の 2 つのコマンドを実行します:
./configure
make
GitHub から wolfEngine を取得してビルドする場合は、configure を実行する前に autogen.sh を実行します:
./autogen.sh
任意の数のビルドオプションを ./configure に追加できます。 利用可能なビルド オプションのリストについては、以下の「ビルド オプション」セクションを参照するか、次のコマンドを実行して、./configure スクリプトに渡す利用可能なビルド オプションのリストを表示してください:
./configure --help
"--with-openssl"オプションで変更しない限り、wolfEngine はシステムのデフォルトの OpenSSL ライブラリのインストールを使用します:
./configure --with-openssl=/usr/local/ssl
カスタム OpenSSL のインストール場所も、ライブラリ検索パスに追加する必要となる場合があります。Linux では、LD_LIBRARY_PATH
が使用されます:
export LD_LIBRARY_PATH=/usr/local/ssl:$LD_LIBRARY_PATH
wolfEngine をビルドしてインストールするには、以下を実行します:
make
make install
インストールにはスーパーユーザー権限が必要な場合があります。その場合は、コマンドの前に sudo を付けます:
sudo make install
ビルドをテストするには、ルート wolfEngine ディレクトリからビルトインテストを実行します:
./test/unit.test
または autoconf を使用してテストを実行します:
make check
error while loading shared libraries: libssl.so.3
のようなエラーが発生した場合は、ライブラリが見つからなかった為です。上記のセクションで説明したように、LD_LIBRARY_PATH
環境変数を使用します:
WinCE上でのビルド
wolfEngine との完全な互換性のために、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
ファイルに wolfEngine フラグを追加します。 wolfEngine のディレクトリにある user_settings.h
ファイルで、wolfEngine ユーザー設定フラグが参照できます。
Windows CE 用の wcecompat、wolfCrypt、および OpenSSL をビルドし、それらのパスを参照できるようにします。
wolfEngine ディレクトリでソースファイルを開き、OpenSSL、wolfCrypt、および user_settings.h
パスを使用しているディレクトリに変更します。 INCLUDES セクションと TARGETLIBS セクションのパスを更新する必要があります。
Visual Studio で wolfEngine プロジェクトをロードします。 ベンチマークまたは単体テストを実行するかどうかに応じて、「bench.c」、または「unit.h」と「unit.c」のいずれかを含めます。
プロジェクトをビルドすると、wolfEngine.exe 実行可能ファイルが作成されます。 この実行可能ファイルを --help で実行すると、オプションの完全なリストが表示されます。 wolfEngine を静的エンジンとして使用するには、--static
フラグを付けて実行する必要があります。
ビルドオプション (./configure に指定するオプション)
以下は、wolfEngine ライブラリの構築方法をカスタマイズする目的で ./configure
スクリプトに追加できるオプションです。
デフォルトでは、wolfEngine は共有ライブラリのみを構築し、静的ライブラリの構築は無効になっています。 これにより、ビルド時間が 2 倍速くなります。 どちらのモードも、必要に応じて明示的に無効または有効にすることができます。
オプション | デフォルト | 意味 |
---|---|---|
--enable-static | 無効 | スタティックライブラリとしてビルド |
--enable-shared | 有効 | 共有ライブラリとしてビルド |
--enable-debug | 無効 | wolfEngineのデバッグ出力を有効にする |
--enable-coverage | 無効 | コードカバレッジレポートを作成する用ビルド |
--enable-usersettings | 無効 | user_settings.h を使用しMakefileの CFLAGSを使用しない |
--enable-dynamic-engine | 有効 | wolfEngine をダイナミックエンジンとしてロードする |
--enable-singlethreaded | 無効 | wolfEngineをシングルスレッド環境で使用する |
--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のインストール場所を指定。指定しない場合はシステムのデフォルトライブラリパスとインクルードパスが使われます。 |
ビルド用マクロ定義
wolfEngine は、ユーザーが wolfEngine の構築方法を設定できるようにするいくつかのプリプロセッサマクロを公開しています。 これらについては、次の表で説明します:
マクロ定義 | 意味 |
---|---|
WOLFENGINE_DEBUG | デバッグ シンボル、最適化レベル、デバッグ ロギングを使用して wolfEngine をビルドします |
WE_NO_DYNAMIC_ENGINE | wolfEngineをダイナミックエンジンとしてビルドしない。ダイナミックエンジンとはOpenSSLが実行時に動的にロードするエンジンです。 |
WE_SINGLE_THREADED | wolfEngineをシングルスレッドモードでビルドする。このマクロ定義によりグローバルリソースの使用の排他用に内部的に使用するロック機構を取り除きます。 |
WE_USE_HASH | ハッシュアルゴリズムを wc_Hash APIを使って有効にする |
WE_HAVE_SHA1 | SHA-1 を有効にする |
WE_HAVE_SHA224 | SHA-2 224を有効にする |
WE_HAVE_SHA256 | SHA-2 256を有効にする |
WE_HAVE_SHA384 | SHA-2 384を有効にする |
WE_HAVE_SHA512 | SHA-2 512を有効にする |
WE_SHA1_DIRECT | SHA-1 をwc_Sha APIを使って有効にする。WE_USE_HASHとはコンパチブルではない |
WE_SHA224_DIRECT | SHA-2 224 を wc_Sha224 APIを使って有効にする。WE_USE_HASHとはコンパチブルではない |
WE_SHA256_DIRECT | SHA-2 256 を wc_Sha256 APIを使って有効にする。WE_USE_HASHとはコンパチブルではない |
WE_HAVE_SHA3_224 | SHA-3 224を有効にする(OpenSSL 1.0.2では利用不可) |
WE_HAVE_SHA3_256 | SHA-3 256を有効にする(OpenSSL 1.0.2では利用不可) |
WE_HAVE_SHA3_384 | SHA-3 384を有効にする(OpenSSL 1.0.2では利用不可) |
WE_HAVE_SHA3_512 | SHA-3 512を有効にする(OpenSSL 1.0.2では利用不可) |
WE_HAVE_EVP_PKEY | EVP_PKEY APIを使用する機能を有効にする(RSA, DH等も含む) |
WE_HAVE_CMAC | CMAC を有効にする |
WE_HAVE_HMAC | HMAC を有効にする |
WE_HAVE_DES3CBC | DES3-CBC を有効にする |
WE_HAVE_AESECB | AES-ECB を有効にする |
WE_HAVE_AESCBC | AES-CBC を有効にする |
WE_HAVE_AESCTR | AES-countee modeを有効にする |
WE_HAVE_AESGCM | AES-GCM を有効にする |
WE_HAVE_AESCCM | AES-CCM を有効にする |
WE_HAVE_RANDOM | wolfCrypt の疑似乱数生成実装を有効にする |
WE_HAVE_RSA | RSA 操作 (すなわち 署名, 検証, 鍵生成等)を有効にする |
WE_HAVE_DH | Diffie-Hellman 操作 (すなわち 鍵生成, 共有シークレット計算等)を有効にする |
WE_HAVE_ECC | 楕円曲線暗号を有効にする |
WE_HAVE_EC_KEY | EC_KEY_METHODのサポートを有効にする(OpenSSL 1.0.2では利用不可) |
WE_HAVE_ECDSA | ECDSA を有効にする |
WE_HAVE_ECDH | EC Diffie-Hellman operationsを有効にする |
WE_HAVE_ECKEYGEN | EC key generationを有効にする |
WE_HAVE_EC_P192 | EC Curve P192を有効にする |
WE_HAVE_EC_P224 | EC Curve P224を有効にする |
WE_HAVE_EC_P256 | EC Curve P256を有効にする |
WE_HAVE_EC_P384 | EC Curve P384を有効にする |
WE_HAVE_EC_P512 | EC Curve P512を有効にする |
WE_HAVE_DIGEST | ダイジェストアルゴリズムをベンチマークとユニットテストのコードに含めてコンパイルする |
WOLFENGINE_USER_SETTINGS | ユーザーの指定した定義をuser_settings.hファイルから読み込む |