wolfSSLの特徴的な機能の一つはRTOSを使用せずにベアメタル環境で実行できるところです。ベアメタルのサポートは開発当初からライブラリにとって常に基本的な機能要件としてサポートしてきました。純粋なC言語ベース、外部依存関係なし、ポータブルな設計、モジュール化されたビルドオプションによりこれらの機能が有効になり、ビルドサイズも小さくなります。これは、POSIXレイヤーなしではビルドできないOpenSSLのようなライブラリと比較すると大きな差別化ポイントです。ベアメタルを有効にするビルドオプションは、”–disable-filesystem –enable-singlethreaded” または”SINGLE_THREADEDおよびNO_FILESYSTEM”のマクロ定義です。
wolfSSLのもう1つの特徴的な機能は、実行時間が非決定的な場合がある、長い非対称鍵のための数学計算の管理と処理のサポートです。 これは、処理負荷を短い処理単位に分割し、そのCPU時間を他のタスクの実行に充てられるようにします。この機能をノンブロッキング暗号化と呼んでいます。 RSA、ECC (256/384/521)、Curve25519 をサポートしています。 私たちの目標は、どのような組み込み機器でもブロック時間を最大1ミリ秒に制限することです。リファレンスとして、100MHzの汎用Cortex M4を使用しました。 この機能により、TLSハンドシェイクまたは署名検証を実行しながら、リアルタイムイベントを処理できます。wolfSSLは、このノンブロッキング暗号化機能をサポートする唯一のオープンソース TLS/暗号化ライブラリです。
呼び出し側の観点から見ると、ノンブロッキング暗号化はノンブロッキングソケットによく似ており、APIはFP_WOULDBLOCKステータスを返し、再度呼び出す必要があります。この機能は、TLS APIとwolfCrypt の両方を通じて直接サポートされています。
詳細については、以下の関連ドキュメントのリンクとプル リクエストを参照してください:
- ECC (–enable-ecc=nonblock or WC_ECC_NONBLOCK):
- RSA (WC_RSA_NONBLOCK):
- Curve25519 (WC_X25519_NONBLOCK):
原文:https://www.wolfssl.com/wolfssl-bare-metal-and-non-blocking-cryptography/