wolfSSL 組み込みSSL/TLS ライブラリ(以下 wolfSSL ライブラリ) は、ルネサス CS+と e2 studio 開発環境でご利用頂けるプロジェクトファイルを追加しました。また、wolfSSL ライブラリの利用を簡単に開始できるようにスタータキットやアルファプロジェクト社のボード上で実行可能なサンプルプロジェクトを追加しました。これらのサンプルは、ルネサス RX プラットフォームで動作します。
サンプルプログラムは、μITRONとそのTCP/IP プロトコルスタックであるTINETを利用したSSL/TLSサーバ/クライアントを含みます。
wolfSSL ライブラリを CS+ で構築
ルネサス社製 CS+ (以前のCubeSuite+)は、エディット、ビルド、デバックの繰り返しであるソフトウェア開発に対し「簡単」「快適」「安心」を追求した統合開発環境です。wolfSSLライブラリをCS+ 環境下でビルドするために、wolfSSLライブラリのソースツリーにCS+プロジェクトファイルを追加しました。プロジェクトファイルは、<wolfSSL_root>/wolfSSL/IDE/Renesas/cs+/Projects ディレクトリにあります。
下記はwolfSSLライブラリと wolfCrypt テストアプリケーションをCS+で作成するための手順です。
- wolfSSLライブラリのコンパイル
CS+ プロジェクトファイルを開き、コンパイルします。
プロジェクトファイル:<wolfSSL_root>/IDE/Renesas/cs+/Projects/wolfssl_lib/wolfssl_lib.mtjp - wolfCrypt テストアプリケーションのコンパイル
BSPファイルの取得:
“bsp” ディレクトリを “Projects” ディレクトリの下に作成します。
“DUMMY” プロジェクトを“bsp”ディレクトリの下に作成します。その際使用したいMPUを指定します。“DUMMY” プロジェクトを閉じます
“test” プロジェクトをコンパイルします:
CS+ プロジェクトファイルを開きます。
プロジェクトファイル:<wolfSSL_root>/IDE/Renesas/cs+/Projects/test/test.mtpj
MPU名を使用するMPUに合わせて変更します。
“bsp/resetprg.c”中の “Use SIM I/O” ラインのコメントアウトを解除します。
“bsp/sbrk.h”にヒープサイズを設定します。
“bsp/stackst.h”にスタックサイズを設定します。
“test”をコンパイルします。 - wolfCrypt テストアプリケーションを実行します
wolfSSL ライブラリを e2 studio で構築
ルネサス社製 e2 studioは、オープンソースの統合開発環境 “Eclipse”と、C/C++言語開発を可能とするCDT(C/C++ Development Tooling)プラグインをベースとし、ルネサス社製デバイスファミリに対応した統合開発環境ツールです。ルネサス社製ツールの他、GNUツールやパートナーツールを含めた、複数のコンパイラ、デバックツールを選択できます。wolfSSLライブラリをe2 studio 環境下でビルドするために、wolfSSLライブラリのソースツリーにe2 studioプロジェクトファイルを追加しました。プロジェクトファイルは、<wolfSSL_root>/wolfSSL/IDE/Renesas/ e2studio /Projects ディレクトリにあります。
下記はwolfSSLライブラリと wolfCrypt テストアプリケーションをe2 studio を作成するための手順です。
- wolfSSLライブラリのコンパイル
e2 studio プロジェクトファイルを開き、コンパイルします。
プロジェクトファイル:<wolfSSL_root>/IDE/Renesas/e2studio/Projects/wolfssl_lib/ - wolfCrypt テストアプリケーションのコンパイル
プロジェクトに必要なファイルの取得:
“DUMMY” プロジェクトを新規作成
生成されたDUMMPプロジェクトの“generate”ディレクトリをtestプロジェクトのsrcディレクトリへコピーします。
“test” プロジェクトをコンパイルします:
wolfCrypt テストプロジェクトファイルを開きます。
プロジェクトファイル:<wolfSSL_root>/IDE/Renesas/e2studio/Projects/test/test.mtpj
“bsp/resetprg.c”中の “Use SIM I/O” ラインのコメントアウトを解除します。
“bsp/sbrk.h”にヒープサイズを設定します。
“bsp/stackst.h”にスタックサイズを設定します。
下記のリンクからダウンロード可能なサンプルプロジェクトに含まれるlowlvl.src, lowlvl.c 及びlowlvl.h をコピーします。
https://www.renesas.com/jp/ja/software/D3012028.html
“test”をコンパイルします。 - wolfCrypt テストアプリケーションを実行します
μITRON と TINETで動くRenesas RXデモプログラムを構築
Renesas RX シリーズ MPUを搭載するアルファプロジェクト社製ボード上で動作するSSL/TLS サーバ/クライアントのサンプルプログラムが利用可能です。プロジェクトファイルは、 <wolfSSL_root>/IDE/Renesas/cs+/Projects/t4_demo/ にあります。このサンプルプログラムでは、μITRON 上のTCP/IP プロトコルスタックにあたる TINET を利用します。TINET は BSD と非互換であり、wolfSSL ライブラリで非 BSD API を使用するサンプルプログラムとして最適です。
- 必要なプログラムをダウンロードします。
- アルファプロジェクトのファームウェアを解凍します。
- wolfSSL を同じディレクトリに解凍します。
- wolfSSL を設定します。
- wolfSSL を ”wolfSSL を CS+ で構築“ の節にあるようにビルドします。
- mtpj プロジェクトファイルを開きます。プロジェクトファイル: <wolfSSL_root>IDE/Renesas/cs+/Projects/t4_demo/
- アルファプロジェクトのデモプログラムを設定します。
サンプルプロジェクト
wolfSSL パッケージは複数のサンプルプログラムを含んだ状態でリリースされます。wolfSSLをCS+やe2 studio上ですばやく簡単にご使用いただけるようにそれらのサンプルをご利用頂けます。以下フォルダからサンプルを参照することが可能です
- wolfCrypt 暗号モジュールテスト
このアプリケーションは、wolfCrypt暗号モジュールをテストします。このサンプルを最初に実施することで有効な暗号が正しく動作していることを確認することが出来ます。
- CS+用 t4_demo アプリケーション
このアプリケーションは、アルファプロジェクト社製の評価ボード上とファームウェア及びドライバーを使用することを想定しています。この中にはTINET TCP/IP互換のルネサス社製ファームウェア、T4Tinyを含みます。
アプリケーションは、コンソールを持っており、起動すると下記のような画面が表示されます。
コマンドは一度しか実行出来ません。別コマンドを実行する場合は、MPUを再実行する必要があります。
t: wolfCrypt 暗号モジュールテスト
前述したwolfCrypt暗号モジュールのテストを実施します。
b: wolfCrypt ベンチマークテスト
このコマンドは、MPU上で暗号アルゴリズム毎のベンチマークを実施します。
下記は出力例です。
t: test, b: benchmark, s: server, or c : client $ b Start wolfCrypt Benchmark ------------------------------------------------------------------------------ wolfSSL version 4.0.0 ------------------------------------------------------------------------------ wolfCrypt Benchmark (block bytes 1024, min 1.0 sec each) RNG 775 KB took 1.031 seconds, 751.916 KB/s AES-128-CBC-enc 2 MB took 1.006 seconds, 1.505 MB/s AES-128-CBC-dec 1 MB took 1.010 seconds, 1.450 MB/s AES-192-CBC-enc 1 MB took 1.010 seconds, 1.378 MB/s AES-192-CBC-dec 1 MB took 1.011 seconds, 1.328 MB/s AES-256-CBC-enc 1 MB took 1.019 seconds, 1.270 MB/s AES-256-CBC-dec 1 MB took 1.014 seconds, 1.227 MB/s AES-128-GCM-enc 675 KB took 1.025 seconds, 658.858 KB/s AES-128-GCM-dec 675 KB took 1.026 seconds, 658.087 KB/s AES-192-GCM-enc 650 KB took 1.027 seconds, 633.220 KB/s AES-192-GCM-dec 650 KB took 1.028 seconds, 632.603 KB/s AES-256-GCM-enc 625 KB took 1.025 seconds, 609.697 KB/s AES-256-GCM-dec 625 KB took 1.026 seconds, 609.102 KB/s RABBIT 9 MB took 1.001 seconds, 8.534 MB/s 3DES 475 KB took 1.035 seconds, 458.893 KB/s MD5 13 MB took 1.001 seconds, 13.275 MB/s SHA 5 MB took 1.002 seconds, 4.778 MB/s SHA-256 2 MB took 1.006 seconds, 1.650 MB/s SHA-384 675 KB took 1.034 seconds, 653.057 KB/s SHA-512 675 KB took 1.034 seconds, 652.994 KB/s HMAC-MD5 13 MB took 1.001 seconds, 13.142 MB/s HMAC-SHA 5 MB took 1.004 seconds, 4.768 MB/s HMAC-SHA256 2 MB took 1.014 seconds, 1.638 MB/s HMAC-SHA384 650 KB took 1.010 seconds, 643.437 KB/s HMAC-SHA512 650 KB took 1.011 seconds, 643.182 KB/s RSA 2048 public 26 ops took 1.067 sec, avg 41.038 ms, 24.367 ops/sec RSA 2048 private 2 ops took 1.157 sec, avg 578.500 ms, 1.729 ops/sec DH 2048 key gen 6 ops took 1.049 sec, avg 174.883 ms, 5.718 ops/sec DH 2048 agree 6 ops took 1.191 sec, avg 198.433 ms, 5.039 ops/sec ECC 256 key gen 7 ops took 1.162 sec, avg 165.943 ms, 6.026 ops/sec ECDHE 256 agree 8 ops took 1.323 sec, avg 165.325 ms, 6.049 ops/sec ECDSA 256 sign 6 ops took 1.044 sec, avg 174.017 ms, 5.747 ops/sec ECDSA 256 verify 4 ops took 1.281 sec, avg 320.300 ms, 3.122 ops/sec CURVE 25519 key gen 5 ops took 1.137 sec, avg 227.300 ms, 4.399 ops/sec CURVE 25519 agree 6 ops took 1.366 sec, avg 227.583 ms, 4.394 ops/sec ED 25519 key gen 198 ops took 1.003 sec, avg 5.064 ms, 197.467 ops/sec ED 25519 sign 146 ops took 1.005 sec, avg 6.885 ms, 145.245 ops/sec ED 25519 verify 62 ops took 1.001 sec, avg 16.147 ms, 61.932 ops/sec Benchmark complete End wolfCrypt Benchmark
s: 簡易SSL/TLSサーバプログラム。ポート50000で待ちます
c: 簡易SSL/TLSクライアントプログラム。
IPアドレスとポートをc <IP Addr> <Port Num>のフォーマットで指定します。
これらのSSL/TLSサーバ・クライアントプログラムは、TINET TCP/IP を使用します。MPU上で組み込まれたクライアントやサーバプログラムをテストする場合、wolfSSL の通常のサンプルプログラムをデスクトップで使用されることをお勧めします。
下記は出力例です。
[クライアント]
デスクトップPC側:
$ ./examples/server/server -b -d SSL version is TLSv1.2 SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 SSL curve name is SECP256R1 Client message: Hello Server
ボード側:
wolfSSL Demo t: test, b: benchmark, s: server, or c : client $ c 192.168.1.202 11111 Start TLS Client(192.168.1.202, 11111) Received: I hear you fa shizzle! End TLS Client
[サーバ]
ボード側:
wolfSSL Demo t: test, b: benchmark, s: server, or c : client $ s Start TLS Server Received: hello wolfssl! End TLS Server
デスクトップPC側:
wolfSSL Demo $ ./examples/client/client -h 192.168.1.200 -p 50000 SSL version is TLSv1.2 SSL cipher suite is TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 SSL curve name is SECP256R1 hello wolfssl!
Renesas TSIP サポート
参考リンク
ルネサスエレクトロニクス株式会社:https://www.renesas.com/jp/ja/
ルネサス社CS+:https://www.renesas.com/jp/ja/products/software-tools/tools/ide/csplus.html
ルネサス社 e2 studio: https://www.renesas.com/jp/ja/products/software-tools/tools/ide/e2studio.html
アルファプロジェクト株式会社: https://www.apnet.co.jp/index.html