reorganize folders under IDE/Renesas

pull/316/head
Hideki Miyazaki 2023-05-24 14:20:01 +09:00 committed by Daniele Lacamera
parent 737c549161
commit 5ed7390c40
22 changed files with 388 additions and 1031 deletions

View File

@ -1,35 +1,39 @@
## wolfBoot for Renesas RX72N
#define BSP_CFG_USTACK_BYTES (0x2000)
## 1. Overview
```
MCU: Renesas RX72N
Board: RX72N/Envision Kit
IDE: e2Studio
Compiler: CCRX
FIT Module: r_flash_rx
It demonstrates simple secure firmware update by wolfBoot. A sample application v1 is
securely updated to v2. Both versions behave the same except displaying its version of v1 or v2.
They are compiled by e2Studio and running on the target board.
In this demo, you may download two versions of application binary file by Renesas Flash Programmer.
You can download and excute wolfBoot by e2Studio debugger. Use a USB connection between PC and the
board for the debugger and flash programmer.
## 2. Components and Tools
|Item|Name/Version|Note|
|:--|:--|:--|
|Board|RX72N/Envision Kit||
|MCU|Renesas RX72N|R5F572NNxFB|
|IDE|e2studio 2022-07|Download from Renesas site|
|Compiler|CCRX v3.04.00||
|FIT Module||Download from Renesas site|
|Flash Writer|Renesas Flash Programmer v3|Download from Renesas site|
|Key tools|keygen and sign|Included in wolfBoot|
|rx-elf-objcopy|GCC for Renesas RX 8.3.0.202202-GNURX-ELF|Included in GCC for Renesas RX|
e2Studio Project:
wolfBoot IDE/Renesas/e2studio_CCRX/wolfBoot
Sample app IDE/Renesas/e2studio_CCRX/app_RenesasRX01
Other Tools:
- Key tool
Key generation tools/keytools/keygen
Signature tools/keytools/sign
Included in wolfBoot with source code
- Flash Wirter
Renesas Flash Programmer v3
Download from Renesas site
- Binary tool:
rx-elf-objcopy.exe
Included in GCC for Renesas RX
FIT Module
|Module|Version|Note|
|:--|:--|:--|
|r_bsp|v7.20|#define BSP_CFG_USTACK_BYTES (0x2000)|
||key size uses rsa-3072, please sets to (0x3000)|
|r_flash_rx|v4.90||
Flash Allocation:
```
+---------------------------+------------------------+-----+
| B |H| |H| | |
| o |e| Primary |e| Update |Swap |
@ -38,13 +42,19 @@ Flash Allocation:
+---------------------------+------------------------+-----+
0xffc00000: wolfBoot
0xffc10000: Primary partition (Header)
0xffc10100: Primary partition (Application image)
0xffc10100: Primary partition (Application image) /* When it uses IMAGE_HEADER_SIZE 256, e.g. ED25519, EC256, EC384 or EC512 */
0xffc10200: Primary partition (Application image) /* When it uses IMAGE_HEADER_SIZE 512, e.g. RSA2048, RSA3072 */
0xffdf0000: Update partition (Header)
0xffdf0100: Update partition (Application image)
0xfffd0000: Swap sector
```
### Decription
Note : Depending on IMAGE_HEADER_SIZE, it needs to change the address of Power Reset vector by Linker section.
Application default is set to 0xffc10200. It means that you need to change it when you use 256 IMAGE_HEADER_SIZE.
## 3. How to build and use
It has key tools running under the host environment such as Linux, Windows or MacOS.
For comiling the tools, follow the instruction described in the user manual.
@ -57,7 +67,7 @@ You can download and excute wolfBoot by e2Studio debugger. Use a USB connection
board for the debugger and flash programmer.
### 1) Key generation
### 3-1 Key generation
```
$ cd <wolfBoot>
@ -74,12 +84,12 @@ key to the store.
You can specify various signature algorithms such as
```
--ed25519 --ed448 --ecc256 --ecc384 --ecc521 --rsa2048 --rsa3072 --rsa4096
--ed25519 --ed448 --ecc256 --ecc384 --ecc521 --rsa2048 --rsa3072
```
### 2) Compile wolfBoot
### 3-2 Compile wolfBoot
Open project under IDE/Renesas/e2studio_CCRX/wolfBoot with e2Studio, and build the project.
Open project under IDE/Renesas/e2studio/RX72N/wolfBoot with e2Studio, and build the project.
Project properties are preset for the demo.
@ -88,12 +98,13 @@ Smart Configurator
Flash Driver: r_flash_rx
Include Paths
"C:..\..\..\..\..\IDE/Renesas/e2Studio_CCRX/include
"C:..\..\..\..\..\wolfBoot\wolfboot/include"
"C:..\..\..\..\..\wolfBoot\wolfboot\include"
../../include : <wolfBoot>/IDE/Renesas/e2studio/RX72N/include
../../../../../../include : <wolfBoot>/include
../../../../../../lib/wolfssl/ : <wolfBoot>/lib/wolfssl
Pre-Include
../../../../../include/user_settings.h
../../include/user_settings.h : <wolfBoot>/IDE/Renesas/e2studio/RX72N/include/user_settigs.h
../../include/target.h : <wolfBoot>/IDE/Renesas/e2studio/RX72N/include/target.h
Pre-defined Pre-processor Macro
__WOLFBOOT
@ -106,9 +117,9 @@ WOLFBOOT_PARTION_INFO, PRINTF_ENABLED are for debug information about partitions
Eliminate them for operational use.
### 3) Compile the sample application
### 3-4 Compile the sample application
Open project under IDE/Renesas/e2studio_CCRX/app_RenesasRx01 with e2Studio, and build the project.
Open project under IDE/Renesas/e2studio/RX72N/app_RenesasRx01 with e2Studio, and build the project.
Project properties are preset for the demo.
@ -118,15 +129,15 @@ Smart Configurator
Flash Driver: r_flash_rx
Include Paths
"C:..\..\..\..\..\IDE/Renesas/e2Studio_CCRX/include
"C:..\..\..\..\..\wolfBoot\wolfboot/include"
"C:..\..\..\..\..\wolfBoot\wolfboot\include"
Include Paths
../../include : <wolfBoot>/IDE/Renesas/e2studio/RX72N/include
../../../../../../include : <wolfBoot>/include
Pre-Include
../../include/user_settings.h
../../include/terget.h
../../include/user_settings.h : <wolfBoot>/IDE/Renesas/e2studio/RX72N/include/user_settigs.h
../../include/target.h : <wolfBoot>/IDE/Renesas/e2studio/RX72N/include/target.h
Code Origin and entry point (PResetPRG) is "0xffc10100" (See Section Viewer of Linker Section).
Code Origin and entry point (PResetPRG) is "0xffc10200" (See Section Viewer of Linker Section).
```
app_RenesasRx01.x in ELF is gnerated under HardwareDebug. You can derive bair binary file
@ -140,7 +151,7 @@ $ rx-elf-objcopy.exe -O binary\
-R '$ADDR_C_FE7F5D70' -R EXCEPTVECT -R RESETVECT app_RenesasRx01.x app_RenesasRx01.bin
```
### 4) Generate Signature for app V1
### 3-5 Generate Signature for app V1
"sign" command under tools/keytools benerates a signature for the binary with a specified version.
It generates a file contain a partition header and application image. The partition header
@ -163,7 +174,7 @@ Signing the digest...
Output image(s) successfully created.
```
### 5) Download the app V1
### 3-6 Download the app V1
You can convert the binary file to hex format and download it to the board by Flash Programmer.
The partition starts at "0xffc10000".
@ -173,7 +184,7 @@ $ rx-elf-objcopy.exe -I binary -O srec --change-addresses=0xffc10000 app_Renesas
```
### 6) Execute inital boot
### 3-7 Execute inital boot
Now, you can download and start wolfBoot program by e2Studio debugger.
After starting the program, you can see the partition information as follows.
@ -182,28 +193,31 @@ application V1.
```
=== Boot Partition[ffc10000] ===
Magic: WOLF
Version: 01
Status: ff
Tail Mgc: <20><><EFBFBD><EFBFBD>
=== Update Partition[ffdf0000] ===
Magic: <20><><EFBFBD><EFBFBD>
Version: ff
Status: ff
Tail Mgc: <20><><EFBFBD><EFBFBD>
| ------------------------------------------------------------------- |
| Renesas RX User Application in BOOT partition started by wolfBoot |
| ------------------------------------------------------------------- |
=== Boot Partition[ffc10000] ===
Magic: WOLF
Version: 01
Status: ff
Tail Mgc: ????
=== Update Partition[ffdf0000] ===
Magic: WOLF
Version: 02
Status: ff
Tail Mgc: ????
Current Firmware Version: 1
Hit any key to update the firmware.
Hit any key to call wolfBoot_success the firmware.
```
The application calls wolfBoot_success() to set boot partition
state and wait for any key. if you re-start the boot program at this moment,
After hitting any key, the application calls wolfBoot_success() to set boot partition
state and wait for any key again.
if you re-start the boot program at this moment,
after checking the integlity and authenticity, it jumps to the application.
You can see the state is Success("00").
@ -213,9 +227,17 @@ Magic: WOLF
Version: 01
Status: 00
Tail Mgc: BOOT
=== Update Partition[ffdf0000] ===
Magic: WOLF
Version: 02
Status: ff
Tail Mgc: ????
Hit any key to update the firmware.
```
### 7) Generate Signed app V2 and download it
### 3-8 Generate Signed app V2 and download it
Similar to V1, you can signe and generate a binary of V2. The update partition starts at "0xffdf0000".
You can download it by the flash programmer.
@ -227,7 +249,7 @@ rx-elf-objcopy.exe -I binary -O srec --change-addresses=0xffdf0000 app_RenesasRx
```
### 8) Re-boot and secure update to V2
### 3-9 Re-boot and secure update to V2
Now the image is downloaded but note that the partition status is not changed yet.
When it is re-boot, it checks integlity and authenticity of V1 and initiate V1 as in
@ -240,6 +262,7 @@ step 6.
Current Firmware Version: 1
Hit any key to update the firmware.
Firmware Update is triggered
```
After you see the message, hit any key so that the application calls
@ -261,13 +284,20 @@ information.
| Renesas RX User Application in BOOT partition started by wolfBoot |
| ------------------------------------------------------------------- |
=== Boot Partition[ffc10000] ===
Magic: WOLF
Version: 02
Status: 10
Tail Mgc: BOOT
=== Update Partition[ffdf0000] ===
Magic: WOLF
Version: 01
Status: ff
Tail Mgc: ????
Current Firmware Version: 2
Hit any key to update the firmware.
```
Not the application behavior is almost identical but the Version is "2" this time.
## Creating an application project from scratch

View File

@ -51,8 +51,7 @@
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.fpu.126437015" name="浮動小数点演算命令を使用する (-fpu/-nofpu)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.fpu" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.fpu.yes" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.include.2039443943" name="インクルード・ファイルを検索するフォルダ (-include)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.include" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="../../include"/>
<listOptionValue builtIn="false" value="../../../../../include"/>
<listOptionValue builtIn="false" value="../../../../../lib/wolfssl"/>
<listOptionValue builtIn="false" value="../../../../../../include"/>
<listOptionValue builtIn="false" value="${TCINSTALL}/include"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/general}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_pincfg}&quot;"/>
@ -83,7 +82,7 @@
<listOptionValue builtIn="false" value="../../include/target.h"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.define.1700820161" name="プリプロセッサ・マクロの定義 (-define)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.define" useByScannerDiscovery="false" valueType="definedSymbols"/>
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.467816924" name="最適化レベル (-optimize)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.level0" valueType="enumerated"/>
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.467816924" name="最適化レベル (-optimize)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.level2" valueType="enumerated"/>
<inputType id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gcc.inputType.234428537" name="Compiler Input C" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gcc.inputType"/>
<inputType id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gpp.inputType.1840988365" name="Compiler Input CPP" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gpp.inputType"/>
</tool>
@ -132,6 +131,47 @@
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.checkSection.140974100" name="セクションの割り付けアドレスをチェックする (-cpu)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.checkSection" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.memoryType.1210271160" name="アドレス範囲指定方法 (-cpu(アドレス範囲指定方法))" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.memoryType" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.memoryType.autoSpecify" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.noneLinkageOrderList.2135498774" name="(リンク順序のリスト) (-input/-library/-binary)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.noneLinkageOrderList" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;.\src\app_RenesasRX01.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src\libwolfboot.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src\renesas-rx.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/general\r_cg_hardware_setup.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/general\r_smc_cgc.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/general\r_smc_cgc_user.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/general\r_smc_interrupt.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/board/generic_rx72n\hwsetup.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\dbsct.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\lowlvl.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\lowsrc.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\mcu_locks.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_bsp_common.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_bsp_cpu.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_bsp_interrupts.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_bsp_locking.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_bsp_mcu_startup.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_bsp_software_interrupt.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\r_rx_intrinsic_functions.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\resetprg.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/all\sbrk.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/rx72n\mcu_clocks.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/rx72n\mcu_init.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/rx72n\mcu_interrupts.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/rx72n\mcu_mapped_interrupts.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_bsp/mcu/rx72n\vecttbl.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_byteq/src\r_byteq.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src/flash_type_1\r_flash_type1.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src/flash_type_3\r_flash_type3.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src/flash_type_4\r_flash_type4.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src\r_flash_fcu.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src\r_flash_group.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src\r_flash_nofcu.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_flash_rx/src\r_flash_rx.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_pincfg\Pin.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_pincfg\r_sci_rx_pinset.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_sci_rx/src\r_sci_rx.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_sci_rx/src\r_sci_rx_dmaca.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_sci_rx/src\r_sci_rx_dtc.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_sci_rx/src/targets/rx72n\r_sci_rx72n.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\src/smc_gen/r_sci_rx/src/targets/rx72n\r_sci_rx72n_data.obj&quot;"/>
<listOptionValue builtIn="false" value="&quot;.\app_RenesasRX01.lib&quot;"/>
</option>
</tool>

View File

@ -37,12 +37,12 @@
<link>
<name>src/libwolfboot.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/libwolfboot.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/libwolfboot.c</locationURI>
</link>
<link>
<name>src/renesas-rx.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/hal/renesas-rx.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/hal/renesas-rx.c</locationURI>
</link>
</linkedResources>
</projectDescription>

View File

@ -2,7 +2,7 @@
*
* Test bare-metal application.
*
* Copyright (C) 2021 wolfSSL Inc.
* Copyright (C) 2023 wolfSSL Inc.
*
* This file is part of wolfBoot.
*
@ -64,40 +64,46 @@ static void printPartitions(void)
printf("\n=== Boot Partition[%08x] ===\n", WOLFBOOT_PARTITION_BOOT_ADDRESS);
printPart((uint8_t*)WOLFBOOT_PARTITION_BOOT_ADDRESS);
printf("\n=== Update Partition[%08x] ===\n", WOLFBOOT_PARTITION_UPDATE_ADDRESS);
//printPart((uint8_t*)WOLFBOOT_PARTITION_UPDATE_ADDRESS);
printPart((uint8_t*)WOLFBOOT_PARTITION_UPDATE_ADDRESS);
}
void main(void)
{
uint8_t firmware_version = 0;
hal_init();
printf("| ------------------------------------------------------------------- |\n");
printf("| Renesas RX User Application in BOOT partition started by wolfBoot |\n");
printf("| ------------------------------------------------------------------- |\n\n");
hal_init();
printPartitions();
/* The same as: wolfBoot_get_image_version(PART_BOOT); */
firmware_version = wolfBoot_current_firmware_version();
printf("Current Firmware Version: %d\n", firmware_version);
printf("\nCurrent Firmware Version: %d\n", firmware_version);
if (firmware_version >= 1) {
wolfBoot_success();
if (firmware_version == 1) {
printf("Hit any key to call wolfBoot_success the firmware.\n");
getchar();
wolfBoot_success();
printPartitions();
printf("\nHit any key to update the firmware.\n");
getchar();
wolfBoot_update_trigger();
printf("Firmware Update is triggered\n");
}
} else {
printf("Invalid Firmware Version\n");
goto busy_idle;
}
printf("Hit any key to update the firmware.\n");
getchar();
wolfBoot_update_trigger();
printf("Firmware Update is triggered\n");
/* busy wait */
busy_idle:
while (1)

View File

@ -5,7 +5,7 @@
* target.h is automatically generated using the template in target.h.in by running
* "make config".
*
* Copyright (C) 2021 wolfSSL Inc.
* Copyright (C) 2023 wolfSSL Inc.
*
* This file is part of wolfBoot.
*

View File

@ -4,7 +4,7 @@
* Enabled via WOLFSSL_USER_SETTINGS.
*
*
* Copyright (C) 2021 wolfSSL Inc.
* Copyright (C) 2023 wolfSSL Inc.
*
* This file is part of wolfBoot.
*
@ -26,21 +26,15 @@
#ifndef H_USER_SETTINGS_
#define H_USER_SETTINGS_
//#define WOLFBOOT_RENESAS_TSIP
//#define WOLFBOOT_DUALBOOT
#ifdef WOLFBOOT_RENESAS_TSIP
#define WOLFSSL_RENESAS_TSIP_SIGNATURE // Current version support only RSA2048
#define WOLFSSL_NO_SW_MATH
#define WOLFBOOT_SIGN_RSA2048
#else
/* #define WOLFBOOT_SIGN_RSA2048 */
/* #defube WOLFBOOT_SIGN_RSA3072 */
/* #defube WOLFBOOT_SIGN_RSA4096 */
#define WOLFBOOT_SIGN_RSA2048
/* #define WOLFBOOT_SIGN_RSA3072 */
/* #define WOLFBOOT_SIGN_ED25519 */
/* #define WOLFBOOT_SIGN_ED488 */
#define WOLFBOOT_SIGN_ECC256
/* #define WOLFBOOT_SIGN_ECC256 */
/* #define WOLFBOOT_SIGN_ECC384 */
/* #define WOLFBOOT_SIGN_ECC521 */
#endif
@ -62,8 +56,7 @@
#define WC_NO_RNG_SIMPLE
#define WOLFSSL_USER_SETTINGS /* for renesas-tsip-crypt.h */
#define WOLFSSL_SP_MATH_ALL /* for sp_int.c */
//#define USE_FAST_MATH
/* System */
#define WOLFSSL_GENERAL_ALIGNMENT 4
#define SINGLE_THREADED
@ -75,7 +68,7 @@
#endif
#if defined(WOLFBOOT_SIGN_RSA2048) || defined(WOLFBOOT_SIGN_RSA3072) || defined(WOLFBOOT_SIGN_ED448)
#define IMAGE_HEADER_SIZE 512
#define IMAGE_HEADER_SIZE 512
#elif defined(WOLFBOOT_SIGN_RSA4096)
#define IMAGE_HEADER_SIZE 1024
#endif
@ -106,13 +99,13 @@
#endif
/* ECC and SHA256 */
#if defined (WOLFBOOT_SIGN_ECC256) ||\
defined (WOLFBOOT_SIGN_ECC384) ||\
defined (WOLFBOOT_SIGN_ECC521)
#if defined(WOLFBOOT_SIGN_ECC256) ||\
defined(WOLFBOOT_SIGN_ECC384) ||\
defined(WOLFBOOT_SIGN_ECC521)
# define HAVE_ECC
# define ECC_TIMING_RESISTANT
# define ECC_USER_CURVES /* enables only 256-bit by default */
/* Kinetis LTC support */
# ifdef FREESCALE_USE_LTC
@ -124,15 +117,12 @@
# endif
/* SP MATH */
#ifndef WOLFSSL_NO_SW_MATH
# ifndef USE_FAST_MATH
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
# define WOLFSSL_SP
# define WOLFSSL_SP_MATH
# define WOLFSSL_SP_SMALL
# define SP_WORD_SIZE 32
# define WOLFSSL_HAVE_SP_ECC
# endif
#endif
/* ECC options disabled to reduce size */
# define NO_ECC_SIGN
@ -141,25 +131,25 @@
# define NO_ECC_KEY_EXPORT
/* Curve */
# define NO_ECC192
# define NO_ECC224
#ifdef WOLFBOOT_SIGN_ECC256
# define HAVE_ECC256
# define FP_MAX_BITS (256 + 32)
# define NO_ECC384
# define NO_ECC521
#elif defined WOLFBOOT_SIGN_ECC384
#elif defined(WOLFBOOT_SIGN_ECC384)
# define HAVE_ECC384
# define FP_MAX_BITS (1024 + 32)
# define WOLFSSL_SP_384
# define WOLFSSL_SP_NO_256
# define FP_MAX_BITS (384 * 2)
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
# define WOLFSSL_SP_384
# define WOLFSSL_SP_NO_256
# endif
# define NO_ECC256
# define NO_ECC521
#elif defined WOLFBOOT_SIGN_ECC521
#elif defined(WOLFBOOT_SIGN_ECC521)
# define HAVE_ECC521
# define FP_MAX_BITS (544 + 32)
# define FP_MAX_BITS (528 * 2)
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
# define WOLFSSL_SP_521
# define WOLFSSL_SP_NO_256
# endif
# define NO_ECC256
# define NO_ECC384
#endif
# define NO_RSA
@ -169,62 +159,35 @@
#ifdef WOLFBOOT_SIGN_RSA2048
# define RSA_LOW_MEM
# define WOLFSSL_RSA_VERIFY_INLINE
# define WOLFSSL_RSA_VERIFY_ONLY
# define WC_NO_RSA_OAEP
# define FP_MAX_BITS (2048 * 2)
/* sp math */
#ifndef WOLFSSL_NO_SW_MATH
# ifndef USE_FAST_MATH
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
# define WOLFSSL_HAVE_SP_RSA
# define WOLFSSL_SP
# define WOLFSSL_SP_SMALL
# define WOLFSSL_SP_MATH
# define SP_WORD_SIZE 32
# define WOLFSSL_SP_NO_3072
# define WOLFSSL_SP_NO_4096
# endif
#endif
# define WC_ASN_HASH_SHA256
#endif
#ifdef WOLFBOOT_SIGN_RSA3072
# define RSA_LOW_MEM
# define WOLFSSL_RSA_VERIFY_INLINE
# define WOLFSSL_RSA_VERIFY_ONLY
# define WC_NO_RSA_OAEP
# define FP_MAX_BITS (3072 * 2)
/* sp math */
#ifndef WOLFSSL_NO_SW_MATH
# ifndef USE_FAST_MATH
# if !defined(USE_FAST_MATH) && !defined(WOLFSSL_SP_MATH_ALL)
# define WOLFSSL_HAVE_SP_RSA
# define WOLFSSL_SP
# define WOLFSSL_SP_SMALL
# define WOLFSSL_SP_MATH
# define SP_WORD_SIZE 32
# define WOLFSSL_SP_NO_2048
# define WOLFSSL_SP_NO_4096
# endif
#endif
#endif
#ifdef WOLFBOOT_SIGN_RSA4096
# define RSA_LOW_MEM
# define WOLFSSL_RSA_VERIFY_INLINE
# define WOLFSSL_RSA_VERIFY_ONLY
# define WC_NO_RSA_OAEP
# define FP_MAX_BITS (4096 * 2)
/* sp math */
#ifndef WOLFSSL_NO_SW_MATH
# ifndef USE_FAST_MATH
# define WOLFSSL_HAVE_SP_RSA
# define WOLFSSL_SP
# define WOLFSSL_SP_SMALL
# define WOLFSSL_SP_MATH
# define SP_WORD_SIZE 32
# define WOLFSSL_SP_4096
# define WOLFSSL_SP_NO_2048
# define WOLFSSL_SP_NO_3072
# endif
#endif
# define WC_ASN_HASH_SHA256
#endif
#ifdef WOLFBOOT_HASH_SHA3_384
@ -300,5 +263,4 @@
# define WOLFSSL_SMALL_STACK
#endif
#endif /* !H_USER_SETTINGS_ */

View File

@ -50,10 +50,9 @@
<tool id="com.renesas.cdt.managedbuild.renesas.ccrx.base.compiler.114148530" name="Compiler" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.base.compiler">
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.fpu.817445107" name="浮動小数点演算命令を使用する (-fpu/-nofpu)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.fpu" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.fpu.yes" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.include.435935644" name="インクルード・ファイルを検索するフォルダ (-include)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.include" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="../../keys"/>
<listOptionValue builtIn="false" value="../../include"/>
<listOptionValue builtIn="false" value="../../../../../include"/>
<listOptionValue builtIn="false" value="../../../../../lib/wolfssl"/>
<listOptionValue builtIn="false" value="../../../../../../include"/>
<listOptionValue builtIn="false" value="../../../../../../lib/wolfssl"/>
<listOptionValue builtIn="false" value="${TCINSTALL}/include"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/general}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_pincfg}&quot;"/>
@ -65,7 +64,6 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_flash_rx/src/flash_type_3}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_flash_rx/src/flash_type_4}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_flash_rx/src/targets}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_tsip_rx}&quot;"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.userBefore.869068341" name="追加するオプション(すべての指定オプションの前に追加)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.userBefore" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value=""/>
@ -78,12 +76,14 @@
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.outcode.1570072024" name="出力する文字コード (-outcode)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.outcode" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.outcode.utf8" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.define.2058710491" name="プリプロセッサ・マクロの定義 (-define)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.define" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="__WOLFBOOT"/>
<listOptionValue builtIn="false" value="_RENESAS_RX_"/>
<listOptionValue builtIn="false" value="WOLFSSL_USER_SETTINGS"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.preInclude.303954707" name="コンパイル単位の先頭にインクルードするファイル (-preinclude)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.preInclude" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="../../include/user_settings.h"/>
<listOptionValue builtIn="false" value="../../include/target.h"/>
</option>
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.402664598" name="最適化レベル (-optimize)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.levelMax" valueType="enumerated"/>
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.402664598" name="最適化レベル (-optimize)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.option.optimize.level2" valueType="enumerated"/>
<inputType id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gcc.inputType.1343195127" name="Compiler Input C" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gcc.inputType"/>
<inputType id="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gpp.inputType.1547456010" name="Compiler Input CPP" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.compiler.gpp.inputType"/>
</tool>
@ -106,7 +106,6 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_flash_rx/src/flash_type_3}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_flash_rx/src/flash_type_4}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_flash_rx/src/targets}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_tsip_rx}&quot;"/>
</option>
<inputType id="com.renesas.cdt.managedbuild.renesas.ccrx.assembler.inputType.718646193" name="Assembler InputType" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.assembler.inputType"/>
</tool>
@ -131,9 +130,7 @@
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.noneLinkageOrderList.747513762" name="(リンク順序のリスト) (-input/-library/-binary)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.noneLinkageOrderList" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;.\wolfBoot.lib&quot;"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.inputFile.1228050498" name="リンクするリロケータブル・ファイル、ライブラリ・ファイルおよびバイナリ・ファイル (-input/-library/-binary)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.inputFile" useByScannerDiscovery="false" valueType="stringList">
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/src/smc_gen/r_tsip_rx/lib/ccrx/r_tsip_rx72m_rx72n_rx66n_little.lib}&quot;"/>
</option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.inputFile.1228050498" name="リンクするリロケータブル・ファイル、ライブラリ・ファイルおよびバイナリ・ファイル (-input/-library/-binary)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.linker.option.inputFile" useByScannerDiscovery="false" valueType="stringList"/>
</tool>
<tool id="com.renesas.cdt.managedbuild.renesas.ccrx.base.librarian.824424223" name="Library Generator" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.base.librarian">
<option id="com.renesas.cdt.managedbuild.renesas.ccrx.librarian.option.fpu.1603488290" name="浮動小数点演算命令を使用する (-fpu/-nofpu)" superClass="com.renesas.cdt.managedbuild.renesas.ccrx.librarian.option.fpu" useByScannerDiscovery="false" value="com.renesas.cdt.managedbuild.renesas.ccrx.librarian.option.fpu.yes" valueType="enumerated"/>

View File

@ -37,37 +37,47 @@
<link>
<name>src/keystore.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/keystore.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/keystore.c</locationURI>
</link>
<link>
<name>src/target.h</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/include/target.h</locationURI>
</link>
<link>
<name>src/user_settings.h</name>
<type>1</type>
<locationURI>PARENT-1-PROJECT_LOC/include/user_settings.h</locationURI>
</link>
<link>
<name>src/hal/renesas-rx.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/hal/renesas-rx.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/hal/renesas-rx.c</locationURI>
</link>
<link>
<name>src/wolfboot/boot_renesas_rx.c</name>
<name>src/wolfboot/boot_renesas.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/boot_renesas_rx.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/boot_renesas.c</locationURI>
</link>
<link>
<name>src/wolfboot/delta.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/delta.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/delta.c</locationURI>
</link>
<link>
<name>src/wolfboot/image.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/image.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/image.c</locationURI>
</link>
<link>
<name>src/wolfboot/libwolfboot.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/libwolfboot.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/libwolfboot.c</locationURI>
</link>
<link>
<name>src/wolfboot/loader.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/loader.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/loader.c</locationURI>
</link>
<link>
<name>src/wolfboot/spi_flash.c</name>
@ -77,7 +87,7 @@
<link>
<name>src/wolfboot/string.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/string.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/string.c</locationURI>
</link>
<link>
<name>src/wolfboot/uart_flash.c</name>
@ -87,7 +97,7 @@
<link>
<name>src/wolfboot/update_flash.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/src/update_flash.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/src/update_flash.c</locationURI>
</link>
<link>
<name>src/wolfboot/update_flash_hwswap.c</name>
@ -102,102 +112,102 @@
<link>
<name>src/wolfcrypt/aes.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/aes.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/aes.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/asn.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/asn.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/ecc.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/ecc.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/ecc.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/ed25519.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/ed25519.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/ed25519.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/ed448.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/ed448.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/ed448.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/fe_448.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/fe_448.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/fe_448.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/fe_low_mem.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/fe_low_mem.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/fe_low_mem.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/fe_operations.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/fe_operations.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/fe_operations.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/ge_448.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/ge_448.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/ge_448.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/ge_low_mem.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/ge_low_mem.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/ge_low_mem.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/ge_operations.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/ge_operations.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/ge_operations.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/hash.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/hash.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/hash.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/memory.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/memory.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/memory.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/misc.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/misc.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/misc.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/rsa.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/rsa.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/rsa.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/sha256.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/sha256.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/sha256.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/sha512.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/sha512.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/sha512.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/sp_c32.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/wolfssl/wolfcrypt/src/sp_c32.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/sp_c32.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/sp_int.c</name>
<type>1</type>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/sp_int.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/tfm.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/tfm.c</locationURI>
</link>
<link>
<name>src/wolfcrypt/Renesas/Renesas</name>
<type>2</type>
<locationURI>virtual:/virtual</locationURI>
</link>
<link>
<name>src/wolfcrypt/Renesas/Renesas/renesas_tsip_rsa.c</name>
<type>1</type>
<locationURI>PARENT-4-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/port/Renesas/renesas_tsip_rsa.c</locationURI>
<locationURI>PARENT-5-PROJECT_LOC/lib/wolfssl/wolfcrypt/src/tfm.c</locationURI>
</link>
</linkedResources>
</projectDescription>

View File

@ -775,11 +775,6 @@
<source description="Components supporting Firmware Integration Technology" display="Firmware Integration Technology" id="com.renesas.smc.tools.swcomponent.fit.source"/>
<source description="Components supporting Firmware Integration Technology" display="Firmware Integration Technology" id="com.renesas.smc.tools.swcomponent.fit.source"/>
</configuration>
<configuration inuse="true" name="r_tsip_rx">
<component description="依存モジュール: r_bsp バージョン 7.00&#10;Support functions: AES, GCM, CCM, CMAC, SHA, MD5, Triple-DES, ARC4, RSA, ECC, Random number generate, Key management, secure boot/secure firmware update.&#10;The &quot;.l&quot; in version number means library version." detailDescription="TSIP(Trusted Secure IP) driver." display="r_tsip_rx" id="r_tsip_rx1.15.l" version="1.15.l"/>
<source description="Components supporting Firmware Integration Technology" display="Firmware Integration Technology" id="com.renesas.smc.tools.swcomponent.fit.source"/>
<source description="Components supporting Firmware Integration Technology" display="Firmware Integration Technology" id="com.renesas.smc.tools.swcomponent.fit.source"/>
</configuration>
</tool>
<tool id="System">
<section id="ocd">

View File

@ -0,0 +1,120 @@
#!/bin/bash
#
# convert elf to hex file
# This simple shell script assumes to be run on WSL or equivarant environment.
# This script is an example. You can update the script based on your environment.
#
# usage
# elf2hex.sh <TSIP:0,1> <WOLFBOOT_DIR> <RXELF_BIN_DIR>
#
if [ $# -ne 4 ];then
echo "Usage: $0 <0 or 1 for TSIP use> WOLFBOOT_DIR RXELF_BIN_DIR <signature method>";
echo " sig : 0,1 : rsa-2048 (Default)"
echo " 2 : rsa-3072"
echo " 3 : ed25519"
echo " 4 : ed448"
echo " 5 : ecc256"
echo " 6 : ecc384"
echo " 7 : ecc521"
exit 1
fi
VER1_ADDR=0xffc10000
VER2_ADDR=0xffdf0000
# signature method
RSA2048_SIGN="rsa2048"
RSA3072_SIGN="rsa3072"
ED25519_SIGN="ed25519"
ED488_SIGN="ed448"
ECC256_SIGN="ecc256"
ECC384_SIGN="ecc384"
ECC512_SIGN="ecc521"
SIGN_METHOD=${RSA2048_SIGN}
TSIPUSE=$1
WOLFBOOT_DIR="$2"
RXELF_BIN_DIR="$3"
CURRENT=$(cd $(dirname $0);pwd)
APP_RX=${CURRENT}/app_RenesasRx01
RXELF_OBJCPY_BIN="${RXELF_BIN_DIR}/rx-elf-objcopy.exe"
PATH=$PATH:${WOLFBOOT_DIR}/tools/keytools
if [ $TSIPUSE -eq 1 ]; then
VER1_ADDR=0xffc50000
VER2_ADDR=0xffe10000
fi
case $4 in
0) ;;
1) ;;
2) SIGN_METHOD=${RSA3072_SIGN} ;;
3) SIGN_METHOD=${ED25519_SIGN} ;;
4) SIGN_METHOD=${ED488_SIGN} ;;
5) SIGN_METHOD=${ECC256_SIGN} ;;
6) SIGN_METHOD=${ECC384_SIGN} ;;
7) SIGN_METHOD=${ECC512_SIGN} ;;
*) echo "invalid signature mehtod $4. Please specifiy [0-8] for sign."
exit 1 ;;
esac
echo "Version 1 app start address : " $VER1_ADDR
echo "Version 2 app start address : " $VER2_ADDR
echo "Signature method : " $SIGN_METHOD
echo
echo COPY app_RenesasRx01.x to RXELF_BIN_DIR to convert bin file
cp ${APP_RX}/HardwareDebug/app_RenesasRx01.x "${RXELF_BIN_DIR}"
pushd "${RXELF_BIN_DIR}"
echo
echo Run rx-elf-objcopy.exe to generate bin
"${RXELF_OBJCPY_BIN}" -O binary -R '$ADDR_C_FE7F5D00' -R '$ADDR_C_FE7F5D10' -R '$ADDR_C_FE7F5D20' -R '$ADDR_C_FE7F5D30' -R '$ADDR_C_FE7F5D40' -R '$ADDR_C_FE7F5D48' -R '$ADDR_C_FE7F5D50' -R '$ADDR_C_FE7F5D64' -R '$ADDR_C_FE7F5D70' -R EXCEPTVECT -R RESETVECT app_RenesasRx01.x app_RenesasRx01.bin
echo
echo copy app_RenesasRx01.bin to wolfBoot folder to sign
cp app_RenesasRx01.bin ${WOLFBOOT_DIR}
pushd ${WOLFBOOT_DIR}
echo "generate key"
keygen --${SIGN_METHOD} -g ./pri-${SIGN_METHOD}.der
echo
echo sign app_RenesasRx01.bin for version 1
sign --${SIGN_METHOD} app_RenesasRx01.bin ./pri-${SIGN_METHOD}.der 1.0
echo
echo sign app_RenesasRx01.bin for version 2
sign --${SIGN_METHOD} app_RenesasRx01.bin ./pri-${SIGN_METHOD}.der 2.0
echo
echo copy app_RenesasRx01_v1.0/v2.0_signed.bin RXELF_BIN_DIR
cp app_RenesasRx01_v1.0_signed.bin "${RXELF_BIN_DIR}"
cp app_RenesasRx01_v2.0_signed.bin "${RXELF_BIN_DIR}"
popd
echo
echo Run rx-elf-objcopy.exe to generate hex for version 1
"${RXELF_OBJCPY_BIN}" -I binary -O srec --change-addresses=${VER1_ADDR} app_RenesasRx01_v1.0_signed.bin app_RenesasRx01_v1.0_signed.hex
echo
echo Run rx-elf-objcopy.exe to generate hex for version 2
"${RXELF_OBJCPY_BIN}" -I binary -O srec --change-addresses=${VER2_ADDR} app_RenesasRx01_v2.0_signed.bin app_RenesasRx01_v2.0_signed.hex
echo
echo move *.hex to ${CURRENT}
mv app_RenesasRx01_v1.0_signed.hex app_RenesasRx01_v2.0_signed.hex ${CURRENT}
echo
echo Clean up all copied and generated files
rm -rf app_RenesasRx01.x app_RenesasRx01.bin app_RenesasRx01_v1.0_signed.bin app_RenesasRx01_v2.0_signed.bin
popd

View File

@ -1,32 +0,0 @@
if [ "$2" = "dual" ]; then
org_primary=0xffc10000
org_update=0xffe10000
echo === Dual Bank mode ===
else
if [ "$2" = "tsip" ]; then
org_primary=0xffc50000
org_update=0xffe10000
echo === Linear mode with TSIP ===
else
org_primary=0xffc20000
org_update=0xffe00000
echo === Linear mode ===
fi
fi
echo "Primary:" $org_primary
echo "Update: " $org_update
cd wolfBoot/HardwareDebug
rx-elf-objcopy.exe -O binary -R '$ADDR_C_FE7F5D00' -R '$ADDR_C_FE7F5D10' -R '$ADDR_C_FE7F5D20' -R '$ADDR_C_FE7F5D30' -R '$ADDR_C_FE7F5D40' -R '$ADDR_C_FE7F5D48' -R '$ADDR_C_FE7F5D50' -R '$ADDR_C_FE7F5D64' -R '$ADDR_C_FE7F5D70' -R EXCEPTVECT -R RESETVECT wolfBoot.x wolfBoot.bin
rx-elf-objcopy.exe -I binary -O srec --change-addresses=0xffc00000 wolfBoot.bin ../../download/wolfBoot_0.hex
rx-elf-objcopy.exe -I binary -O srec --change-addresses=0xffe00000 wolfBoot.bin ../../download/wolfBoot_1.hex
cd ../..
cd $1/HardwareDebug
rx-elf-objcopy.exe -O binary -R '$ADDR_C_FE7F5D00' -R '$ADDR_C_FE7F5D10' -R '$ADDR_C_FE7F5D20' -R '$ADDR_C_FE7F5D30' -R '$ADDR_C_FE7F5D40' -R '$ADDR_C_FE7F5D48' -R '$ADDR_C_FE7F5D50' -R '$ADDR_C_FE7F5D64' -R '$ADDR_C_FE7F5D70' -R EXCEPTVECT -R RESETVECT $1.x $1.bin
sign --rsa2048 $1.bin ../../../../../pri-rsa2048.der 1.0
rx-elf-objcopy.exe -I binary -O srec --change-addresses=$org_primary $1_v1.0_signed.bin ../../download/$1_v1.0_signed.hex
sign --rsa2048 $1.bin ../../../../../pri-rsa2048.der 2.0
rx-elf-objcopy.exe -I binary -O srec --change-addresses=$org_update $1_v2.0_signed.bin ../../download/$1_v2.0_signed.hex
cd ../..

View File

@ -1,26 +0,0 @@
#include <stdio.h>
#include "include/user_settings.h"
#include "include/target.h"
int main(int ac, char *av)
{
printf("WOLFBOOT_FLASH_ADDR: 0x%08x\n", WOLFBOOT_FLASH_ADDR);
printf("WOLFBOOT_FLASH_SIZE: 0x%08x\n", WOLFBOOT_FLASH_SIZE);
printf("WOLFBOOT_BOOT_SIZE: 0x%08x\n", WOLFBOOT_BOOT_SIZE);
printf("WOLFBOOT_RX_EXCVECT: 0x%08x\n", WOLFBOOT_RX_EXCVECT);
printf("WOLFBOOT_SECTOR_SIZE: 0x%08x\n", WOLFBOOT_SECTOR_SIZE);
printf("\n");
printf("WOLFBOOT_PARTITION_SIZE: 0x%08x\n",
WOLFBOOT_PARTITION_SIZE);
printf("WOLFBOOT_PARTITION_BOOT_ADDRESS: 0x%08x\n",
WOLFBOOT_PARTITION_BOOT_ADDRESS);
printf("WOLFBOOT_PARTITION_UPDATE_ADDRESS: 0x%08x\n",
WOLFBOOT_PARTITION_UPDATE_ADDRESS);
printf("WOLFBOOT_PARTITION_SWAP_ADDRESS: 0x%08x\n",
WOLFBOOT_PARTITION_SWAP_ADDRESS);
printf("\n");
printf("Application Entry Address: 0x%08x\n",
WOLFBOOT_PARTITION_BOOT_ADDRESS+IMAGE_HEADER_SIZE);
return 0;
}

View File

@ -513,8 +513,12 @@ struct wolfBoot_image {
};
/* do not warn if this is not used */
#if !defined(__CCRX__)
static void __attribute__ ((unused)) wolfBoot_image_confirm_signature_ok(
struct wolfBoot_image *img)
#else
static void wolfBoot_image_confirm_signature_ok(struct wolfBoot_image *img)
#endif
{
img->signature_ok = 1;
}

View File

@ -278,5 +278,4 @@ extern int tolower(int c);
# define WOLFSSL_SMALL_STACK
#endif
#endif /* !H_USER_SETTINGS_ */

View File

@ -35,14 +35,22 @@
*
*/
#pragma inline_asm longJump
static void longJump(const uint32_t *app_offset)
{
jmp r1;
}
void do_boot(const uint32_t *app_offset)
{
void (*app_entry)(void);
uint32_t app_sp;
(void) app_offset;
(void) app_sp;
(void) app_entry;
#if defined(__CCRX__)
longJump(app_offset);
#elif defined(_RENESAS_RA_)
app_sp = VECTOR_SP;
__asm__ ("ldr r3, [%0]" ::"r"(app_sp));
@ -56,5 +64,6 @@ void do_boot(const uint32_t *app_offset)
*/
app_entry = (void(*)(void))(*VECTOR_Reset_Handler);
(*app_entry)();
#endif
}

View File

@ -48,11 +48,6 @@ static int wolfBoot_unseal_pubkey(uint8_t* pubkey, WOLFTPM2_KEY* tpmKey);
#endif /* WOLFBOOT_TPM */
#ifdef WOLFBOOT_RENESAS_TSIP
#include "r_tsip_rx_if.h"
#include "key_data.h"
#include "wolfssl/wolfcrypt/port/Renesas/renesas-tsip-crypt.h"
#endif
static int keyslot_id_by_sha(const uint8_t *hint);
@ -295,11 +290,9 @@ static int RsaUnPad(const byte *pkcsBlock, int pkcsBlockLen, byte **output)
static void wolfBoot_verify_signature(uint8_t key_slot,
struct wolfBoot_image *img, uint8_t *sig)
{
int ret = 0;
int ret;
uint8_t output[IMAGE_SIGNATURE_SIZE];
#ifdef WOLFBOOT_TPM
int output_sz = sizeof(output);
#endif
uint8_t* digest_out = NULL;
uint8_t *pubkey = keystore_get_buffer(key_slot);
int pubkey_sz = keystore_get_size(key_slot);
@ -358,6 +351,7 @@ static void wolfBoot_verify_signature(uint8_t key_slot,
{
struct RsaKey rsa;
word32 in_out = 0;
int res = 0;
#if !defined(WOLFBOOT_RENESAS_SCEPROTECT)
@ -374,7 +368,6 @@ static void wolfBoot_verify_signature(uint8_t key_slot,
return;
}
#ifndef WOLFBOOT_RENESAS_TSIP
XMEMCPY(output, sig, IMAGE_SIGNATURE_SIZE);
RSA_VERIFY_FN(ret, wc_RsaSSL_VerifyInline, output, IMAGE_SIGNATURE_SIZE,
&digest_out, &rsa);
@ -394,7 +387,6 @@ static void wolfBoot_verify_signature(uint8_t key_slot,
}
#endif /* WOLFBOOT_TPM */
#ifndef WOLFBOOT_RENESAS_TSIP
#ifndef NO_RSA_SIG_ENCODING
if (ret > WOLFBOOT_SHA_DIGEST_SIZE) {
/* larger result indicates it might have an ASN.1 encoded header */
@ -403,7 +395,7 @@ static void wolfBoot_verify_signature(uint8_t key_slot,
#endif
if (ret == WOLFBOOT_SHA_DIGEST_SIZE && img && digest_out)
RSA_VERIFY_HASH(img, digest_out);
#endif
}
#endif /* WOLFBOOT_SIGN_RSA2048 || WOLFBOOT_SIGN_3072
|| WOLFBOOT_SIGN_RSA4096 */

View File

@ -147,6 +147,7 @@ int strncasecmp(const char *s1, const char *s2, size_t n)
return diff;
}
#if !defined(__CCRX__) /* Renesas CCRX */
char *strncat(char *dest, const char *src, size_t n)
{
size_t i = 0;
@ -221,9 +222,10 @@ int memcmp(const void *_s1, const void *_s2, size_t n)
return diff;
}
#endif /* __CCRX__ Renesas CCRX */
#endif /* !BUILD_LOADER_STAGE1 || (PRINTF_ENABLED && DEBUG_UART) */
#if !defined(__CCRX__) /* Renesas CCRX */
#if !defined(BUILD_LOADER_STAGE1) || defined(DEBUG_UART)
size_t strlen(const char *s)
{
@ -269,7 +271,7 @@ void *memmove(void *dst, const void *src, size_t n)
}
}
#endif
#endif /* __CCRX__ Renesas CCRX */
#if defined(PRINTF_ENABLED) && defined(DEBUG_UART)
void uart_writenum(int num, int base)

View File

@ -1,34 +0,0 @@
WOLFDIR=../../lib/wolfssl/
WOLFBOOTDIR = ../..
CFLAGS= -DWOLFSSL_USER_SETTINGS -I$(WOLFDIR) -I.
# Source files
SRC=$(WOLFDIR)wolfcrypt/src/asn.c \
$(WOLFDIR)wolfcrypt/src/rsa.c \
$(WOLFDIR)wolfcrypt/src/ecc.c \
$(WOLFDIR)wolfcrypt/src/aes.c \
$(WOLFDIR)wolfcrypt/src/sp_c32.c \
$(WOLFDIR)wolfcrypt/src/sp_int.c \
$(WOLFDIR)wolfcrypt/src/sha256.c \
$(WOLFDIR)wolfcrypt/src/sha.c \
$(WOLFDIR)wolfcrypt/src/hash.c \
$(WOLFDIR)wolfcrypt/src/hmac.c \
$(WOLFDIR)wolfcrypt/src/memory.c \
$(WOLFDIR)wolfcrypt/src/random.c \
$(WOLFDIR)wolfcrypt/src/wolfmath.c \
$(WOLFDIR)wolfcrypt/src/logging.c \
$(WOLFDIR)wolfcrypt/src/coding.c \
$(WOLFDIR)wolfcrypt/src/pwdbased.c \
$(WOLFDIR)wolfcrypt/src/wc_port.c \
$(WOLFDIR)wolfcrypt/src/wc_encrypt.c \
all: der2raw
der2raw: $(SRC) der2raw.c
$(CC) -o der2raw der2raw.c $(SRC) $(CFLAGS)
clean:
rm *.o der2raw

View File

@ -1,444 +0,0 @@
/* args.h
*
* Copyright (C) 2006-2022 wolfSSL Inc.
*
* This file is part of wolfSSL. (formerly known as CyaSSL)
*
* wolfSSL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* wolfSSL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef ARGS_H
#define ARGS_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FALSE 0
#define TRUE 1
#define ARGS_STDIN 1
#define ARGS_STDOUT 1
#ifndef NO_ERROR_MESSAGE
#define FPRINTF(...) fprintf(__VA_ARGS__)
#else
#define FPRINTF(...)
#endif
typedef struct {
int error;
long long used;
int argc;
char **argv;
} Args_ctx;
static Args_ctx args_ctx;
#define ARGS_INIT(c, v) \
int (c) = args_ctx.argc; \
char **(v) = args_ctx.argv;
#define SET_USED(c) args_ctx.used |= (0x1 << (c))
#define GET_USED(c) (0x1 << (c)) & args_ctx.used
#define SET_ERROR args_ctx.error = TRUE
static int Args_error()
{
return args_ctx.error;
}
static void Args_open(int ac, char **av)
{
args_ctx.argc = ac;
args_ctx.argv = av;
args_ctx.used = 0;
args_ctx.error = FALSE;
}
static FILE *Args_infile(const char *mode, int defaultIn)
{
FILE *in;
ARGS_INIT(argc, argv);
for(argv++; argc > 1; argv++, argc--) {
if(GET_USED(argc))
continue;
if((*argv)[0] != '-') {
SET_USED(argc);
if((in = fopen(*argv, mode)) != NULL)
return in;
else if(defaultIn == ARGS_STDIN) {
return stdin;
} else {
FPRINTF(stderr, "Input file open error (%s)\n", *argv);
SET_ERROR;
return NULL;
}
}
}
FPRINTF(stderr, "No input file\n");
return NULL;
}
static FILE *Args_outfile(const char *mode, int defaultOut)
{
FILE *out;
int infile = 0;
ARGS_INIT(argc, argv);
for (argv++; argc > 1; argv++, argc--) {
if (GET_USED(argc))
continue;
if ((*argv)[0] != '-') {
SET_USED(argc);
if ((out = fopen(*(argv), mode)) != NULL)
return out;
else if (defaultOut == ARGS_STDOUT) {
return stdout;
} else {
FPRINTF(stderr, "Input file open error (%s)\n", *argv);
SET_ERROR;
return NULL;
}
}
}
return stdout;
}
static int Args_option(char *opt)
{
ARGS_INIT(argc, argv);
for (argv++; argc > 1; argv++, argc--) {
if ((*argv)[0] == '-' && strcmp(&(*argv)[1], opt) == 0) {
return TRUE;
}
}
return FALSE;
}
static int args_hexDigit2int(char h)
{
int v;
if(h >= '0' && h <= '9')
return h - '0';
if (h >= 'a' && h <= 'f')
return h - 'a' + 10;
if(h >= 'A' && h <= 'F')
return h - 'A' + 10;
return -1;
}
static unsigned char args_twoHexDigits2bin(char *hex) {
int v1, v2;
v1 = args_hexDigit2int(hex[0]);
v2 = args_hexDigit2int(hex[1]);
if(v1 < 0 || v2 < 0)
return -1;
return v1 << 4 | v2;
}
static void args_hex2bin(unsigned char *v, char *hex, int sz)
{
int i;
char twoHex[3];
twoHex[2] = '\0';
if (v == NULL || hex == NULL){
SET_ERROR;
FPRINTF(stderr, "Invalid argument\n");
return;
}
if(strlen(hex) == 0) {
*v = 0;
return;
}
twoHex[0] = strlen(hex) % 2 ? '0' : *hex++;
twoHex[1] = *hex++;
for(i = 0; i < sz; i++) {
if((v[sz] = args_twoHexDigits2bin(twoHex)) < 0) {
SET_ERROR;
FPRINTF(stderr, "Invalid hex value\n");
return;
}
if(*hex == '\0')
return;
twoHex[0] = *hex++;
twoHex[1] = *hex++;
}
SET_ERROR;
FPRINTF(stderr, "Too many digits\n");
}
static int Args_optHex(char *opt, unsigned char *v, int sz)
{
unsigned int *hex;
ARGS_INIT(argc, argv);
for (argv++; argc > 1; argv++, argc--) {
if (GET_USED(argc))
continue;
if ((*argv)[0] == '-' && strcmp(&(*argv)[1], opt) == 0) {
SET_USED(argc);
SET_USED(argc-1);
args_hex2bin(v, *++argv, sz);
return TRUE;
}
}
return FALSE;
}
static int args_dec2bin(char *dec)
{
int v = 0;
for (; *dec; dec++) {
if (*dec < '0' || *dec > '9'){
SET_ERROR;
FPRINTF(stderr, "Invalid decimal value\n");
return 0;
}
v = v * 10 + (*dec - '0');
if((unsigned int)v != (int)v) {
SET_ERROR;
FPRINTF(stderr, "Decimal value overflow\n");
return 0;
}
}
return v;
}
static int Args_optDec(char *opt, int *v)
{
ARGS_INIT(argc, argv);
for (argv++; argc > 1; argv++, argc--) {
if (GET_USED(argc))
continue;
if ((*argv)[0] == '-' && strcmp(&(*argv)[1], opt) == 0) {
SET_USED(argc);
SET_USED(argc-1);
*v = args_dec2bin(*++argv);
return TRUE;
}
}
return FALSE;
}
static const char *Args_optStr(char *opt)
{
ARGS_INIT(argc, argv);
for (argv++; argc > 1; argv++, argc--) {
if (GET_USED(argc))
continue;
if ((*argv)[0] == '-' && strcmp(&(*argv)[1], opt) == 0) {
SET_USED(argc);
SET_USED(argc - 1);
return *++argv;
}
}
return NULL;
}
static const char *Args_nthArg(int n)
{
ARGS_INIT(argc, argv);
for (argv++; argc > 1; argv++, argc--) {
if (GET_USED(argc))
continue;
if ((*argv)[0] != '-') {
SET_USED(argc);
SET_USED(argc - 1);
return *argv;
}
}
return NULL;
}
static void Args_close(FILE * in, FILE * out)
{
if (in != NULL && in != stdin)
fclose(in);
if (out != NULL && out != stdout)
fclose(out);
}
#endif
/*
This command argment process assume following argment format.
$ commend [-option,...] [infile [outfile]]
Option Type:
Simple option: -? or -*. '-' followed by a single or multiple charactors.
String option: A simple option followed by a charactor string.
Hex option: A simple option followed by a hexa dicimal value
Decimal option:A simple option followed by a decimal value
--- Macro Option ---
NO_ERROR_MESSAGE: Eliminate error message
--- API Reference ---
static void Args_open(int ac, char **av)
Description:
Prepare for command argment process
Argument:
int ac: Argument count passed in main(ac, av)
int av: Argument value passed in main(ac, av)
static int Args_error()
Description:
Check if there has been errors in the previous APIs
The error flag is kept until Args_close.
Note that API return value if for indicate either the option is found or not.
You can get errors by this API. Get option APIs output error message as it is deteced
unless NO_ERROR_MESSAGE is enabled.
Return:
TRUE: There has been errors
FALSE: No error
static void Args_close(FILE *in, FILE *out)
Description:
Wrap up and close the process.
static int Args_option(char *opt)
Description:
Check if there is a specified Simple option
Argument:
char *opt: Option string to check.
Return:
TRUE: The option found
FALES: The option not found
static const char *Args_optStr(char *opt)
Description:
Check if there is a specified String option
Argument:
char *opt: Option string to check.
Return:
Non NULL: Pointer to the string
NULL: The option not found
static int Args_optDec(char *opt, int *v)
Description:
Check if there is a specified String option
Argument:
char *opt: Option string to check.
int *v: Pointer to binary converted value
Return:
TRUE: Option found
FALES: Not found
static uint8_t *Args_optHex(char *opt, uint8_t *bin, int sz)
Description:
Check if there is a specified String option
Argument:
char *opt: Option string to check.
uint8_t bin: Binary converted hex value
Return:
Non NULL: Pointer to the hex value string
NULL: No specified option
static FILE *Args_infile(const char *mode, int defaultIn)
Description:
Open the file if there is a input file argument.
Argument:
char *mode: open mode for fopen
int defaultIn:
ARGS_STDIN: Assing stdin if it has no input file argment.
Return:
non-NULL: File descriptor
NULL: No infine specified
static FILE *Args_outfile(const char *mode, int defaultOut)
Description:
Open the file if there is a output file argument.
Argument:
char *mode: open mode for fopen
int defaultOut:
ARGS_STDOUT: Assing stdin if it has no output file argment.
Return:
non-NULL: File descriptor
NULL: No out file specified
static const char *Args_nthArg(int n)
Description:
Get Nth non-optional argument
Argument:
int n: Argument position to get
Return:
Non NULL: Pointer to the argument string
NULL: No argument
--- Example Code ---
command [-e][-pub][-s 999] in_file [out_file]
in_file is mandate. If no out_file is specified, output to stdout
int main(int ac, char** av)
{
FILE *in, *out;
int ret;
int keySz = 0;
int ecc;
int pub;
Args_open(ac, av);
ret = Args_optDec("s", &keySz);
ecc = Args_option("e");
pub = Args_option("pub");
in = Args_infile("rb", 0);
out = Args_outfile("w+", ARGS_STDOUT);
if (Args_error()) {
Args_close(in, out);
return -1;
}
if (ecc)
ret = func1(in, out, keySz, pub);
else
ret = func2(in, out, keySz, pub);
Args_close(in, out);
return ret;
}
*/

View File

@ -1,258 +0,0 @@
#include <stdio.h>
#include "args.h"
#include "wolfssl/wolfcrypt/rsa.h"
#include "wolfssl/wolfcrypt/ecc.h"
#include "wolfssl/wolfcrypt/asn.h"
#include "wolfssl/wolfcrypt/random.h"
static int rsa2raw(FILE *rsaDer, FILE *out, int keySz, int pub)
{
enum
{
RSA_1024 = 1024,
RSA_2048 = 2048,
} rsaSize;
#define DERSIZE 1024
unsigned char der[DERSIZE];
int derSz;
int ret;
#define RSASIZE (2048/8)
unsigned char n[RSASIZE];
unsigned char e[RSASIZE];
unsigned char d[RSASIZE];
unsigned char p[RSASIZE];
unsigned char q[RSASIZE];
unsigned int nSz = sizeof(n), eSz = sizeof(e);
unsigned int dSz = sizeof(d), pSz = sizeof(p), qSz = sizeof(q);
RsaKey rsa;
unsigned int inOutIdx = 0;
int i;
switch (keySz) {
case 0:
keySz = RSA_2048;
break;
case RSA_1024:
case RSA_2048:
break;
default:
fprintf(stderr, "ERROR: Key Size(%d)\n", keySz);
return -1;
}
if((derSz = fread(der, 1, sizeof(der), rsaDer)) <= 0){
fprintf(stderr, "ERROR: Read DER file(%d)\n", ret);
return -1;
}
if((ret = wc_InitRsaKey(&rsa, NULL)) != 0) {
fprintf(stderr, "ERROR: wc_InitRsaKey(%d)\n", ret);
return -1;
}
if(pub) {
if ((ret = wc_RsaPublicKeyDecode(der, &inOutIdx, &rsa, derSz)) != 0) {
fprintf(stderr, "ERROR: wc_RsaPublicKeyDecode(%d)\n", ret);
return -1;
}
} else {
if ((ret = wc_RsaPrivateKeyDecode(der, &inOutIdx, &rsa, derSz)) != 0) {
fprintf(stderr, "ERROR: wc_RsaPublicKeyDecode(%d)\n", ret);
return -1;
}
}
memset(n, 0, sizeof(n));
memset(e, 0, sizeof(e));
if (pub) {
if ((ret = wc_RsaFlattenPublicKey(&rsa, e, &eSz, n, &nSz)) != 0) {
fprintf(stderr, "ERROR: wc_RsaFlattenPublicKey(%d)\n", ret);
return -1;
}
} else {
memset(d, 0, sizeof(d));
if ((ret = wc_RsaExportKey(&rsa,
e, &eSz, n, &nSz, d, &dSz, p, &pSz, q, &qSz)) != 0) {
fprintf(stderr, "ERROR: wc_RsaExportKey(%d)\n", ret);
return -1;
}
}
for (i = 0; i < keySz / 8; i++) {
fprintf(out, "%02x", n[i]);
}
for (i = 0; i < 4; i++) {
fprintf(out, "%02x", e[i]);
}
if (!pub) {
for (i = 0; i < keySz / 8; i++) {
fprintf(out, "%02x", d[i]);
}
}
return 0;
}
int ecc2raw(FILE *eccDer, FILE *out, int keySz, int pub)
{
enum
{
ECC_192 = 192,
ECC_224 = 224,
ECC_256 = 256,
ECC_384 = 364,
} eccSize;
#define ECC_DER 256
byte der[ECC_DER];
int derSz;
unsigned int inOutIdx = 0;
struct ecc_key key;
byte qx[MAX_ECC_BYTES];
byte qy[MAX_ECC_BYTES];
byte d [MAX_ECC_BYTES];
word32 qxSz = sizeof(qx);
word32 qySz = sizeof(qy);
word32 dSz = sizeof(d);
WC_RNG rng;
int i;
int ret;
switch(keySz) {
case 0:
keySz = ECC_256;
break;
case ECC_192:
case ECC_224:
case ECC_256:
case ECC_384:
break;
default:
fprintf(stderr, "ERROR: Key Size(%d)\n", keySz);
return -1;
}
if ((derSz = fread(der, 1, sizeof(der), eccDer)) < 0) {
fprintf(stderr, "ERROR: Read DER file(%d)\n", ret);
return -1;
}
if((ret = wc_ecc_init(&key)) != 0) {
fprintf(stderr, "ERROR: wc_ecc_init(%d)\n", ret);
return -1;
}
if (pub) {
if ((ret = wc_EccPublicKeyDecode(der, &inOutIdx, &key, derSz)) != 0) {
fprintf(stderr, "ERROR: wc_EccPublicKeyDecode(%d)\n", ret);
return -1;
}
} else {
if ((ret = wc_EccPrivateKeyDecode(der, &inOutIdx, &key, derSz)) != 0) {
fprintf(stderr, "ERROR: wc_EccPrivateKeyDecode(%d)\n", ret);
return -1;
}
}
memset(qx, 0, sizeof(qx));
memset(qy, 0, sizeof(qy));
if (pub) {
if ((ret = wc_ecc_export_public_raw(&key, qx, &qxSz, qy, &qySz)) != 0) {
fprintf(stderr, "ERROR: wc_ecc_export_public_raw(%d)\n", ret);
return -1;
}
} else {
memset(d, 0, sizeof(d));
if((ret = wc_ecc_export_private_raw(&key, qx, &qxSz, qy, &qySz, d, &dSz)) != 0) {
fprintf(stderr, "ERROR: wc_ecc_export_private_raw(%d)\n", ret);
return -1;
}
}
for (i = 0; i < keySz / 8; i++) {
fprintf(out, "%02x", qx[i]);
}
for (i = 0; i < keySz / 8; i++) {
fprintf(out, "%02x", qy[i]);
}
if (!pub) {
for (i = 0; i < keySz / 8; i++) {
fprintf(out, "%02x", d[i]);
}
}
wc_ecc_free(&key);
return 0;
}
static void usage(void)
{
char desc[] =
"\n"
"$ command[-e][-pub][-s <size>] in_file [out_file]\n"
"\n"
"in_file is mandate. If no out_file is specified, output to stdout\n"
"-s <size>: Key size bits in decimal (Default: 2049 bit/RSA, 256 bit/ECC)\n"
"-e: Input is a ECC key (Default: RSA)\n"
"-pub: Input is a public key (Default: private)\n"
"-? or -help: Display this help message\n";
printf("\nUsage:\n%s", desc);
}
int main(int ac, char** av)
{
FILE *in, *out;
int ret;
int keySz = 0;
int ecc;
int pub;
int help = 0;
Args_open(ac, av);
help |= Args_option("?");
help |= Args_option("help");
if (help) {
usage();
return 0;
}
ret = Args_optDec("s", &keySz);
ecc = Args_option("e");
pub = Args_option("pub");
in = Args_infile("rb", 0);
out = Args_outfile("w+", ARGS_STDOUT);
if (Args_error()) {
Args_close(in, out);
return -1;
}
if (ecc)
ret = ecc2raw(in, out, keySz, pub);
else
ret = rsa2raw(in, out, keySz, pub);
Args_close(in, out);
return ret;
}

View File

@ -1,15 +0,0 @@
#define HAVE_ECC
#define ECC_TIMING_RESISTANT
#define WC_RSA_BLINDING
#define WOLFSSL_HAVE_SP_RSA
#define WOLFSSL_HAVE_SP_ECC
#define WOLFSSL_SP
#define NO_SHA
#define NO_MD5
#define NO_DES3
#define NO_DSA
#define NO_OLD_TLS
#define WOLFCRYPT_ONLY