Skip to content

wolfBootをライブラリとしてビルド

wolfBootをスタンドアロンリポジトリではなくセキュアブートライブラリとしてビルドし、サードパーティのブートローダーやカスタムステージングソリューションなどに統合することもできます。

ライブラリAPI

wolfBootセキュアブートイメージ検証は非常にシンプルなインターフェースを持っています。 イメージを記述するコアオブジェクトはstruct wolfBoot_imageであり、wolfBoot_open_image_address()が呼び出されるときに初期化されます。 シグネチャは以下のとおりです。

int wolfBoot_open_image_address(struct wolfBoot_image* img, uint8_t* image)

ここでimgはローカルの(初期化されていない)wolfBoot_image型の構造体へのポインタで、imageはマニフェストヘッダーの先頭から始まる、署名されたイメージがメモリにマップされている場所へのポインタです。

成功すると、ゼロが返されます。 イメージがマニフェストの先頭に有効な「マジックナンバー」を含んでいない場合、またはイメージのサイズがWOLFBOOT_PARTITION_SIZEより大きい場合、-1が返されます。

open_image_address操作が成功した場合、他の2つの関数を呼び出すことができます。

  • int wolfBoot_verify_integrity(struct wolfBoot_image *img)

この関数は、イメージの内容のSHAハッシュを計算し、マニフェストヘッダーに保存されているダイジェストと比較することによって、イメージの整合性を検証します。 imgは以前にwolfBoot_open_image_addressによって初期化されたwolfBoot_image型のオブジェクトへのポインタです。

イメージの整合性が正常に検証できた場合は0が返され、そうでない場合は-1が返されます。

  • int wolfBoot_verify_authenticity(struct wolfBoot_image *img)

この関数は、イメージの内容が信頼できる相手によって署名されたこと(つまり、利用可能な公開鍵の1つを使用して検証できること)を確認します。

認証が成功した場合は0が返され、操作中に何か問題が発生した場合は-1が返され、署名が見つかったが公開鍵に対して認証できなかった場合は-2が返されます。

ライブラリモード:サンプルアプリケーション

サンプルアプリケーションはhal/library.cで提供しています。

アプリケーションtest-libはコマンドラインから引数として渡されたパスからファイルを開き、そのファイルが有効で署名されたイメージを含み、ライブラリモードでwolfBootを使用して整合性と真正性を検証できることを確認します。

test-libアプリケーションの設定とコンパイル

ステップ1:提供された設定を使用してライブラリモードでwolfBootをコンパイルします。

cp config/examples/library.config .config

ステップ2:次の行だけを含むtarget.hファイルを作成します。

cat > include/target.h << EOF
#ifndef H_TARGETS_TARGET_
#define H_TARGETS_TARGET_

#define WOLFBOOT_NO_PARTITIONS

#define WOLFBOOT_SECTOR_SIZE                 0x20000
#define WOLFBOOT_PARTITION_SIZE              0x20000

#endif /* !H_TARGETS_TARGET_ */

EOF

WOLFBOOT_PARTITION_SIZEは適宜変更してください。 wolfBoot_open_image_address()WOLFBOOT_PARTITION_SIZE - IMAGE_HEADER_SIZEより大きいイメージを廃棄します。

ステップ3:keytoolsをコンパイルし、鍵を作成します。

make keytools
./tools/keytools/keygen --ed25519 -g wolfboot_signing_private_key.der

ステップ4:空のファイルを作成し、秘密鍵を使用して署名します。

touch empty
./tools/keytools/sign --ed25519 --sha256 empty wolfboot_signing_private_key.der 1

ステップ5:ライブラリモードのwolfBootとステップ4で作成した鍵ペアの公開鍵にリンクされたtest-libアプリケーションをコンパイルします。

make test-lib

ステップ6:署名されたイメージでアプリケーションを実行します。

./test-lib empty_v1_signed.bin

すべてがうまくいった場合、出力は次のようになるはずです。

Firmware Valid
booting 0x5609e3526590(actually exiting)