1Renesas RSK+RX65N-2MB 評価ボード用 wolfSSLサンプルプロジェクト
2======
3
4<br>
5
6## 1. 概要
7-----
8
9Renesas社製 RSK+RX65N-2MB 評価ボードをターゲットとしてwolfSSLを評価するためのサンプルプログラムを提供します。サンプルプログラムはリアルタイムOSを使わないベアメタル環境で動作し、IDEとしてe2 studioを使用するものです。本ドキュメントではサンプルプログラムのビルドから実行までの手順を説明します。
10
11提供するサンプルプログラムは次の3機能を評価できる単一のアプリケーションです:
12
13- CryptoTest: 各種暗号化オペレーション機能を自動テストするプログラム
14- Benchmark: 各種暗号化オペレーションの実行速度を測定するプログラム
15- TlsClient: 対向するTLSサーバーアプリケーションとTLS通信を行うプログラム
16
17評価ボードを動作させる為のH/W設定、S/W設定は既に用意していますから、サンプルプロジェクトの動作までは最少の設定で済むようになっています。また、TLS通信において必要となる、RootCA証明書、サーバー側証明書もサンプル使用に限定したものが既に設定済みです。
18
19以降のセクションはサンプルアプリケーションの実行までのステップを順に説明していきます。
20<br><br>
21
22
23## 2. ターゲットとしているH/W、コンポーネント、ライブラリ
24-----
25
26このサンプルプログラムでは以下のハードウエアやソソフトウエアライブラリを使用しています。皆さんがご利用時にバージョンの新しいソフトウエアコンポーネントが利用可能であれば適宜更新の上ご利用ください。
27<br><br>
28
29|要素|名称/バージョン|
30|:--|:--|
31|評価ボード|Renesas Starter Kit+ for RX65N-2MB|
32|Device|R5F565NEHxFC|
33|IDE| Renesas e2Studio Version:2021-10 |
34|エミュレーター| E1, E2エミュレーターLite |
35|Toolchain|CCRX v3.03.00|
36|TSIP| TSIP v1.14|
37<br>
38
39本サンプルプログラムのプロジェクトには以下のFITコンポーネントを使用する設定ファイルが用意されています。
40しかし、FITコンポーネント群そのものは本サンプルアプリケーションの配布物としては含まれていません。皆さん自身でIDE内の操作によってダウンロードしていただく必要があります。一部のFITコンポーネント(TSIP)はIDE内から直接ダウンロードできず、Renesas社のダウンロードサイトから別途ダウンロードが必要なものがあります。
41<br><br>
42
43
44
45|FITコンポーネント|バージョン|略称|
46|:--|:--|:--|
47|8ビットタイマー|1.9.0|Config_TMR0|
48|Board Support Packages|6.21|r_bsp|
49|CMT driver|4.90|r_cmt_rx|
50|Ethernet Driver|1.21|r_ether_rx|1.21|r_ether_rx|
51|Generic system timer for RX MCUs|1.01|r_sys_time_rx|
52|TCP/IP protocol stack[M3S-T4-Tiny] - RX Ethernet Driver Interface|1.09|r_t4_driver_rx|
53|TCP/IP protocol stack[M3S-T4-Tiny] for Renesas MCUs|2.10|r_t4_rx|
54|TSIP(Trusted Secure IP) driver|1.14|r_tsip_rx|
55
56(注意)2021年12月現在、TIPSv1.14はFITコンポーネントとしてスマートコンフィギュレータパースペクティブのコンポーネントの追加操作では追加できないようです。後ほど説明する手動での追加方法を使って追加してください。<br>
57
58
59<br><br>
60
61## 3. サンプルプログラムプロジェクトのe2Studioへのインポート
62----
63
64サンプルプログラムは新規作成する必要はありません。すでにプロジェクトファイルが用意されていますからIDEから以下の手順でプロジェクトをインポートしてください。
65
66
67+ 1.e2studioの"ファイル"メニュー > "ファイル・システムからプロジェクトを開く..." > "ディレクトリ(R)..."インポート元ボタンを押して、プロジェクトのインポート元となるフォルダーを選択します。本READMEファイルが存在するフォルダ(Renesas/e2studio/\<MCU>/\<borad-name-folder\>/))を選択してください。
68
69+ インポートできるプロジェクトが4つリストアップされますが、"smc", "test" と"wolfssl"の3プロジェクトにのみチェックを入れて”終了”ボタンを押してください。
70
71プロジェクト・エクスプローラーにインポートしたsmc,test,wolfsslの3プロジェクトが表示されるはずです。
72<br><br>
73
74## 4. FITモジュールの取得とスマートコンフィギュレータによるファイル生成
75----
76
77FITモジュールは皆さん自身で取得していただく必要があります。以下の手順で取得してください。
78<br><br>
79
80
811. プロジェクト・エクスプローラー上でsmcプロジェクトを開き**smc.scfg**ファイルをダブルクリックして、スマートコンフィギュレータパースペクティブを開きます。
82
832. ソフトウエアコンポーネント設定画面の"コンポーネント"タブを選択 > 画面右上の"コンポーネントの追加" ボタンを押して下さい。ソフトウエアコンポーネントの選択ダイアログが表示されます。ここで、画面下部の"最新版のFITドライバとミドルウエアをダウンロードする"を押して、モジュール群を取得しておいてください。ダウンロード先のフォルダは"基本設定..."を押して確認することができます。
84
853. TSIPコンポーネントは上記ステップ2の方法ではRenesas社の対応が遅れていて最新版が自動的には取得できないことがあります。その場合にはRenesas社のサイトから手動でダウンロードできます。ダウンロードしたコンポーネントのを解凍し、FITModulesフォルダに含まれているファイル群をステップ2のダウンロード先フォルダに格納してください。
86
874.  先に示したFITコンポーネントを一覧から選択して"終了"ボタンを押します。この操作を必要なFITコンポーネントを得るまで繰り返し行います。
88
895.  ソフトウエアコンポーネント設定画面のコンポーネントタブを選択し、r_t4_rxコンポーネントを選択します。右の設定ペインに"# IP address for ch0, when DHCP disable."プロパティの値として、このボードのIPアドレスを皆さんの環境に合わせてて指定します(例:
90192.168.1.9)。
91
926. ソフトウエアコンポーネント設定画面の右上の”コードの生成"ボタンを押して、スマートコンフィギュレータにソースファイルを生成させます。smcプロジェクトの下にsrc/smc_genフォルダが生成され、ソースファイル、ライブラリ等が格納されされます。
93<br><br>
94
95## 5. testプロジェクトへのsmc_genファイル群の追加
96----
97
98testプロジェクトはサンプルアプリケーションのプロジェクトです。プロジェクト・エクスプローラー上でtestプロジェクトを開くとsrcフォルダが存在し、そこにサンプルアプリケーションのソースファイルが格納されています。このsrcフォルダ直下に4-5で生成したsmc_genフォルダごとコピー&ペーストしてソースファイルを追加します。
99
100test/src/smc_gen
101
102のようなフォルダ階層になることを確認してください。
103<br><br>
104
105## 6. testアプリケーションの動作を選択する
106----
107testプロジェクトが唯一のサンプルアプリケーションですが、その動作を設定で切り替えることによって、
108
109- CryptoTest: 各種暗号化オペレーション機能を自動テストするプログラム
110- Benchmark: 各種暗号化オペレーションの実行速度を測定するプログラム
111- TlsClient: 対向するTLSサーバーアプリケーションとTLS通信を行うプログラム
112
113のいずれかの動作を行うよう指定できます。
114
115設定はtest/src/wolfssl_demo.h ファイル内の、
116
117- #define CRYPT_TEST
118- #define BENCHMARK
119- #define TLS_CLIENT
120
121のいずれか一つを有効にしてアプリケーションをビルドすることで行います。
122<br><br>
123
124
125## 7. testアプリケーションのビルドと実行
126-----
127
128testアプリケーションのビルドの準備が整ったので、ビルドを行います。
129
1301.プロジェクト・エクスプローラー上のwolfsslプロジェクトをビルドし、次にtestプロジェクトをビルドします。
131
1322.ビルドが成功したら、ターゲットボードとエミュレーターを接続し、外部電源を入力します。
133
1343."実行"メニュー > "デバッグ"を選択し、デバッグパースペクティブを開きます。
135
1364. testアプリケーションは標準出力に動作状況を出力します。この標準出力の表示用に、"Renesas Debug Virtual Console"を開いておきます。
137
1385.実行ボタンを押してtestアプリケーションを動作させます。
139
1406.CryptoTest、BenchmarkあるいはTLS_Client選択していた動作に応じた実行結果を表示したあと無限ループに入るので出力が停止したと思われたらデバッグを停止させます。
141<br><br>
142
143## 8. TLS_Clientとしてのtestアプリケーションの実行
144-----
145<br>
146
147### 8.1 TLS対向アプリケーションの生成と実行
148<br>
149
150testアプリケーションをTLS_Clientとしての動作を行わせる場合には、TLS通信の相手方となる対向アプリケーションが必要となります。wolfSSLパッケージにはこの用途に使用できるTLSserverサンプルアプリケーションが用意されています。このプログラムはwolfsslをビルドすることで生成されます。wolfSSLのビルドにはgccがインストールされているLinux(MacOS, WSLも含む)でのビルドとVisualStudioを使ってのビルドが可能です。以下ではWSL上でのビルドを紹介します。
151<br><br>
152
153```
154$ cd <wolfssl-folder>
155$ ./autogen.sh
156$ ./configure CFLAGS="-DWOLFSSL_STATIC_RSA -DHAVEAES_CBC"
157$ make
158```
159
160<br>
161上記のビルドによって、<wolfssl-folder\>/examples/server/server
162が生成されます。この実行プログラムがサーバーアプリケーションとして機能します。以下のオプションを与えて実行させるとTLS_Clientからの接続を待ち受け状態になります。
163<br><br>
164
165```
166$ examples/server/server -b -d -i
167```
168<br>
169testアプリケーションには、サーバーアプリケーションに割り当てられたIPアドレスを指定します。
170
171wolf_client.cを開き、#define SIMPLE_TLSSEVER_IPにアドレスを指定します。
172
173```
174-- wolf_client.c --
175
176...
177#define SIMPLE_TLSSEVER_IP  192.168.53.9
178...
179```
180<br>
181ファイルをセーブしてtestアプリケーションを再ビルドしてください。testアプリケーションを実行すると、対向アプリケーションとの間でTLS接続が行われ、その後簡単な文字列を交換して標準出力に以下のような表示を行います。
182<br><br>
183
184```
185cipher : ECDHE-RSA-AES128-GCM-SHA256
186Received: I hear you fa shizzle!
187
188cipher : ECDHE-RSA-AES128-SHA256
189Received: I hear you fa shizzle!
190
191cipher : AES128-SHA256
192Received: I hear you fa shizzle!
193
194cipher : AES256-SHA256
195Received: I hear you fa shizzle!
196
197cipher : ECDHE-RSA-AES128-SHA256
198Received: I hear you fa shizzle!
199
200cipher : ECDHE-RSA-AES128-GCM-SHA256
201Received: I hear you fa shizzle!
202```
203<br>
204
205### 8.2 サーバー証明書の変更(認証方式の変更)
206
207<br>
208上記はサーバーアプリケーションが提示すサーバー証明書にRSA公開鍵が含まれている(RSA認証)場合の実行例です。TSIPにはこのほかにサーバー証明書にECC公開鍵を含む場合(ECDSA認証)も扱えます。
209
210<br>
211ECDSAを含む暗号化スイートを使用したい場合には、testアプリケーションの設定を変更して再ビルドが必要となります。\<board-name-folder\>/common/user_settings.h を開き、USE_ECC_CERT定義を有効化して再ビルドしてください。
212<br><br>
213
214```
215#define USE_ECC_CERT
216```
217
218<br>
219この定義により、testアプリケーションはサーバーの提示するECC公開鍵を含んだサーバー証明書を検証できるRootCA証明書を使うようになります。
220<br><br>
221
222さらに対向するサーバーアプリケーションの方でも以下のようにECC公開鍵を含んだサーバー証明書と秘密鍵ファイルをオプションで指定して実行する必要があります。
223<br><br>
224
225```
226$ ./examples/server/server -b -d -i -c ./certs/server-ecc.pem -k ./certs/ecc-key.pem
227```
228<br>
229実行結果として以下が表示されます。
230<br><br>
231
232```
233cipher : ECDHE-ECDSA-AES128-SHA256
234Received: I hear you fa shizzle!
235
236cipher : ECDHE-ECDSA-AES128-GCM-SHA256
237Received: I hear you fa shizzle!
238```
239<br>
240
241## 9. ユーザーが用意したRootCA証明書を利用する際に必要なこと
242-----
243
244本サンプルプログラムでは、TLS_Clientとして動作する際に必要なRootCA証明書とサンプルTLSサーバーアプリケーションが使用するサーバー証明書などは評価用でのみ利用可能な証明書です。
245機能評価を超えた目的で利用する場合にはRootCA証明書をユーザー自身で用意する必要があります。それに伴い、
246 1. Provisioning key
247 2. RootCA証明書の検証の為に必要なRSA鍵ペア
248 3. RootCA証明書を上記2の秘密鍵で生成した署名
249
250が必要になります。それらの生成方法はRenesas社提供のマニュアルを参照してください。
251