wolfSSL: ルネサスサポート

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+で作成するための手順です。

  1. wolfSSLライブラリのコンパイル
    CS+ プロジェクトファイルを開き、コンパイルします。
    プロジェクトファイル:<wolfSSL_root>/IDE/Renesas/cs+/Projects/wolfssl_lib/wolfssl_lib.mtjp
  2. 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”をコンパイルします。
  3. 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 を作成するための手順です。

  1. wolfSSLライブラリのコンパイル
    e2 studio プロジェクトファイルを開き、コンパイルします。
    プロジェクトファイル:<wolfSSL_root>/IDE/Renesas/e2studio/Projects/wolfssl_lib/
  2. 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”をコンパイルします。
  3. 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 を使用するサンプルプログラムとして最適です。

  1. 必要なプログラムをダウンロードします。
    • アルファプロジェクトのファームウェアを解凍します。
    • wolfSSL を同じディレクトリに解凍します。
  2. wolfSSL を設定します。
    • wolfSSL を ”wolfSSL を CS+ で構築“ の節にあるようにビルドします。
    • mtpj プロジェクトファイルを開きます。プロジェクトファイル: <wolfSSL_root>IDE/Renesas/cs+/Projects/t4_demo/
  3. アルファプロジェクトのデモプログラムを設定します。

サンプルプロジェクト

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 サポート

wolfSSL SSL/TLSライブラリはRenesas Trusted Secure IP Driver (TSIP) に対応し、Renesas RX65Nプラットフォームでテストを実施しています。wolfSSLはTSIPドライバを使い、サポートされている暗号およびTLSのオペレーションをそちらに任せ、ルネサスハードウェアを使用することでパフォーマンスを向上させることができます。詳しくは以下のページをご覧ください。

wolfSSL Renesas TSIP Support

参考リンク

ルネサスエレクトロニクス株式会社: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