diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/CyaSSL-Lib.eww b/IDE/IAR-EWARM/Projects/CyaSSL-Lib/CyaSSL-Lib.eww deleted file mode 100644 index 9702cae02..000000000 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/CyaSSL-Lib.eww +++ /dev/null @@ -1,16 +0,0 @@ - - - - - $WS_DIR$\CyaSSL-Lib.ewp - - - $WS_DIR$\wolfCrypt-benchmark.ewp - - - $WS_DIR$\wolfCrypt-test.ewp - - - - - diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.ewp b/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.ewp deleted file mode 100644 index d61e0a0e9..000000000 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.ewp +++ /dev/null @@ -1,1877 +0,0 @@ - - - - 2 - - Debug - - ARM - - 1 - - General - 3 - - 22 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 29 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 9 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 16 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - BILINK - 0 - - - - - Release - - ARM - - 0 - - General - 3 - - 22 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 29 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 9 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 16 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - BILINK - 0 - - - - - $PROJ_DIR$\benchmark-main.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\benchmark\benchmark.c - - - - diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.icf b/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.icf deleted file mode 100644 index a4ab009ee..000000000 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.icf +++ /dev/null @@ -1,32 +0,0 @@ -/*###ICF### Section handled by ICF editor, don't touch! ****/ -/*-Editor annotation file-*/ -/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -/*-Specials-*/ -define symbol __ICFEDIT_intvec_start__ = 0x00000000; -/*-Memory Regions-*/ -define symbol __ICFEDIT_region_ROM_start__ = 0x00000000; -define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; -define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x2000; -define symbol __ICFEDIT_size_heap__ = 0x2000; -/**** End of ICF editor section. ###ICF###*/ - - -define memory mem with size = 4G; -define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; - -define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; - -initialize by copy { readwrite }; -//initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application -do not initialize { section .noinit }; - -place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; - -place in ROM_region { readonly }; -place in RAM_region { readwrite, - block CSTACK, block HEAP }; \ No newline at end of file diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-test.ewp b/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-test.ewp deleted file mode 100644 index 60e146e43..000000000 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-test.ewp +++ /dev/null @@ -1,1877 +0,0 @@ - - - - 2 - - Debug - - ARM - - 1 - - General - 3 - - 22 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 29 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 9 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 1 - - - - - - - - - CUSTOM - 3 - - - - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 16 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 1 - - - - - - - BILINK - 0 - - - - - Release - - ARM - - 0 - - General - 3 - - 22 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ICCARM - 2 - - 29 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - AARM - 2 - - 9 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - OBJCOPY - 0 - - 1 - 1 - 0 - - - - - - - - - CUSTOM - 3 - - - - - - - BICOMP - 0 - - - - BUILDACTION - 1 - - - - - - - ILINK - 0 - - 16 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IARCHIVE - 0 - - 0 - 1 - 0 - - - - - - - BILINK - 0 - - - - - $PROJ_DIR$\test-main.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\test\test.c - - - - diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-test.icf b/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-test.icf deleted file mode 100644 index 211d253d4..000000000 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-test.icf +++ /dev/null @@ -1,31 +0,0 @@ -/*###ICF### Section handled by ICF editor, don't touch! ****/ -/*-Editor annotation file-*/ -/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ -/*-Specials-*/ -define symbol __ICFEDIT_intvec_start__ = 0x0; -/*-Memory Regions-*/ -define symbol __ICFEDIT_region_ROM_start__ = 0x0; -define symbol __ICFEDIT_region_ROM_end__ = 0x000FFFFF; -define symbol __ICFEDIT_region_RAM_start__ = 0x1FFF0000; -define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; -/*-Sizes-*/ -define symbol __ICFEDIT_size_cstack__ = 0x2000; -define symbol __ICFEDIT_size_heap__ = 0x3000; -/**** End of ICF editor section. ###ICF###*/ - - -define memory mem with size = 4G; -define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; -define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; - -define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; -define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; - -initialize by copy { readwrite }; -do not initialize { section .noinit }; - -place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; - -place in ROM_region { readonly }; -place in RAM_region { readwrite, - block CSTACK, block HEAP }; \ No newline at end of file diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/benchmark-main.c b/IDE/IAR-EWARM/Projects/benchmark/benchmark-main.c similarity index 88% rename from IDE/IAR-EWARM/Projects/CyaSSL-Lib/benchmark-main.c rename to IDE/IAR-EWARM/Projects/benchmark/benchmark-main.c index 113fc4d23..d8f559d4c 100644 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/benchmark-main.c +++ b/IDE/IAR-EWARM/Projects/benchmark/benchmark-main.c @@ -19,7 +19,11 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ -#include "stdio.h" +#ifdef HAVE_CONFIG_H + #include +#endif + +#include typedef struct func_args { int argc; @@ -29,6 +33,7 @@ typedef struct func_args { func_args args = { 0 } ; +extern double current_time(int reset) ; extern int benchmark_test(void *args) ; main(void) { @@ -37,4 +42,3 @@ main(void) { } - diff --git a/IDE/IAR-EWARM/Projects/benchmark/current_time.c b/IDE/IAR-EWARM/Projects/benchmark/current_time.c new file mode 100644 index 000000000..9a21fd740 --- /dev/null +++ b/IDE/IAR-EWARM/Projects/benchmark/current_time.c @@ -0,0 +1,66 @@ +/* current-time.c + * + * Copyright (C) 2006-2015 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#ifdef WOLFSSL_TI_CURRTIME +#include +#include +#include + +#include "inc/hw_ints.h" +#include "inc/hw_memmap.h" +#include "inc/hw_timer.h" +#include "driverlib/rom.h" +#include "driverlib/sysctl.h" +#include "driverlib/timer.h" + +void InitTimer(void) { + uint32_t ui32SysClock = ROM_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | + SYSCTL_OSC_MAIN | + SYSCTL_USE_PLL | + SYSCTL_CFG_VCO_480), 120000000); + + printf("Clock=%dMHz\n", ui32SysClock/1000000) ; + ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); + ROM_TimerConfigure(TIMER0_BASE, TIMER_CFG_PERIODIC); + ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, -1); + ROM_TimerEnable(TIMER0_BASE, TIMER_A); +} + +static int initFlag = false ; +double current_time(int reset) +{ + if(!initFlag)InitTimer() ; + initFlag = true ; + if(reset)ROM_TimerLoadSet(TIMER0_BASE, TIMER_A, -1); + return (double)(-(int)ROM_TimerValueGet(TIMER0_BASE, TIMER_A ))/120000000.0 ; +} + +#else + +double current_time(int reset) { return 0.0 ; } + +#endif \ No newline at end of file diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.ewd b/IDE/IAR-EWARM/Projects/benchmark/wolfCrypt-benchmark.ewd similarity index 50% rename from IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.ewd rename to IDE/IAR-EWARM/Projects/benchmark/wolfCrypt-benchmark.ewd index 0bf90e8eb..3f908a2d3 100644 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/wolfCrypt-benchmark.ewd +++ b/IDE/IAR-EWARM/Projects/benchmark/wolfCrypt-benchmark.ewd @@ -12,7 +12,7 @@ C-SPY 2 - 25 + 26 1 1 + + + + + + @@ -245,7 +269,7 @@ @@ -421,7 +469,7 @@ - - - - IARROM_ID - 2 - - 1 - 1 - 1 - - - - - - - - - IJET_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - JLINK_ID - 2 - - 15 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - LMIFTDI_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - MACRAIGOR_ID - 2 - - 3 - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - PEMICRO_ID - 2 - - 1 - 1 - 1 - - - - - - - - - - - - - - - - - - - RDI_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - - - - - - - STLINK_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - - THIRDPARTY_ID - 2 - - 0 - 1 - 1 - - - - - - - - XDS100_ID - 2 - - 2 - 1 - 1 - - - - - - - - - - - - - $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\PowerPac\PowerPacRTOS.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB6_Plugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin - 0 - - - $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin - 0 - - - $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin - 1 - - - $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin - 0 - - - $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin - 1 - - - $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin - 0 - - - - - Release - - ARM - - 0 - - C-SPY - 2 - - 25 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ARMSIM_ID - 2 - - 1 - 1 - 0 - - - - - - - - ANGEL_ID - 2 - - 0 - 1 - 0 - - - - - - - - - - - - CMSISDAP_ID - 2 - - 0 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GDBSERVER_ID - 2 - - 0 - 1 - 0 - - - - - - - @@ -1740,14 +491,14 @@ 1 1 - 0 + 1 @@ -1971,7 +744,7 @@ 15 1 - 0 + 1 @@ -257,7 +281,7 @@ CMSISDAP_ID 2 - 0 + 2 1 1 + + + + + + @@ -472,7 +520,7 @@ IJET_ID 2 - 2 + 3 1 1 + @@ -677,7 +729,7 @@ 1 @@ -1554,7 +1626,7 @@ CMSISDAP_ID 2 - 0 + 2 1 0 + + + + + + @@ -1769,7 +1865,7 @@ IJET_ID 2 - 2 + 3 1 0 + @@ -1974,7 +2074,7 @@ 0 @@ -602,6 +616,7 @@ + 0 @@ -924,7 +939,7 @@ @@ -961,7 +976,7 @@ - CyaSSL + Config + + $PROJ_DIR$\..\..\..\..\wolfssl\wolfcrypt\settings.h + + + $PROJ_DIR$\..\user_settings.h + + + + wolfCrypt + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\aes.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\arc4.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\asm.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\asn.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\blake2b.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\camellia.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\chacha.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\chacha20_poly1305.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\coding.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\compress.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\curve25519.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\des3.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\dh.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\dsa.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\ecc.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\ecc_fp.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\ed25519.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\error.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\fe_operations.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\ge_operations.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\hash.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\hc128.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\hmac.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\integer.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\logging.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\md2.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\md4.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\md5.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\memory.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\misc.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\pkcs7.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\poly1305.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\pwdbased.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\rabbit.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\random.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\ripemd.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\rsa.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\sha.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\sha256.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\sha512.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\tfm.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\src\wc_port.c + + + + wolfSSL $PROJ_DIR$\..\..\..\..\src\crl.c @@ -1893,108 +2056,6 @@ $PROJ_DIR$\..\..\..\..\src\tls.c - - wolfCrypt - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\aes.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\arc4.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\asm.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\asn.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\blake2b.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\camellia.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\coding.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\compress.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\des3.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\dh.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\dsa.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\ecc.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\ecc_fp.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\error.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\hc128.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\hmac.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\integer.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\logging.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\md2.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\md4.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\md5.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\memory.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\misc.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\wc_port.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\pwdbased.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\rabbit.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\random.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\ripemd.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\rsa.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\sha.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\sha256.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\sha512.c - - - $PROJ_DIR$\..\..\..\..\ctaocrypt\src\tfm.c - - diff --git a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/test-main.c b/IDE/IAR-EWARM/Projects/test/test-main.c similarity index 93% rename from IDE/IAR-EWARM/Projects/CyaSSL-Lib/test-main.c rename to IDE/IAR-EWARM/Projects/test/test-main.c index 5ebfe3219..ad78746d5 100644 --- a/IDE/IAR-EWARM/Projects/CyaSSL-Lib/test-main.c +++ b/IDE/IAR-EWARM/Projects/test/test-main.c @@ -28,9 +28,10 @@ typedef struct func_args { func_args args = { 0 } ; -extern int ctaocrypt_test(void *args) ; +extern int wolfcrypt_test(void *args) ; main(void) { - ctaocrypt_test(&args) ; + wolfcrypt_test(&args) ; return 0; } + diff --git a/IDE/IAR-EWARM/Projects/test/wolfCrypt-test.ewd b/IDE/IAR-EWARM/Projects/test/wolfCrypt-test.ewd new file mode 100644 index 000000000..3f908a2d3 --- /dev/null +++ b/IDE/IAR-EWARM/Projects/test/wolfCrypt-test.ewd @@ -0,0 +1,1374 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/IDE/IAR-EWARM/Projects/test/wolfCrypt-test.ewp b/IDE/IAR-EWARM/Projects/test/wolfCrypt-test.ewp new file mode 100644 index 000000000..ec45ce948 --- /dev/null +++ b/IDE/IAR-EWARM/Projects/test/wolfCrypt-test.ewp @@ -0,0 +1,978 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Config + + $PROJ_DIR$\..\user_settings.h + + + + Lib + + $PROJ_DIR$\..\lib\ewarm\Exe\wolfSSL-Lib.a + + + + Source + + $PROJ_DIR$\..\common\minimum-startup.c + + + $PROJ_DIR$\test-main.c + + + $PROJ_DIR$\..\..\..\..\wolfcrypt\test\test.c + + + + + diff --git a/IDE/IAR-EWARM/Projects/user_settings.h b/IDE/IAR-EWARM/Projects/user_settings.h new file mode 100644 index 000000000..5e4f36e9a --- /dev/null +++ b/IDE/IAR-EWARM/Projects/user_settings.h @@ -0,0 +1,14 @@ + +#define NO_MAIN_DRIVER +#define BENCH_EMBEDDED +#define SINGLE_THREADED +#define NO_FILESYSTEM +#define NO_WRITEV +#define WOLFSSL_USER_IO +#define NO_DEV_RANDOM +#define USE_CERT_BUFFERS_2048 +#define WOLFSSL_USER_CURRTIME + +#define CUSTOM_RAND_GENERATE custom_rand_generate +/* warning "write a real random seed!!!!, just for testing now" */ +static int custom_rand_generate(void) { return 0 ; } \ No newline at end of file diff --git a/IDE/IAR-EWARM/Projects/wolfssl.eww b/IDE/IAR-EWARM/Projects/wolfssl.eww new file mode 100644 index 000000000..b080e4115 --- /dev/null +++ b/IDE/IAR-EWARM/Projects/wolfssl.eww @@ -0,0 +1,224 @@ + + + + + $WS_DIR$\benchmark\wolfCrypt-benchmark.ewp + + + $WS_DIR$\test\wolfCrypt-test.ewp + + + $WS_DIR$\lib\wolfSSL-Lib.ewp + + + + All Examples + + driverlib + Debug + + + grlib + Debug + + + usblib + Debug + + + aes128_cbc_decrypt + Debug + + + aes128_cbc_encrypt + Debug + + + aes128_ccm_decrypt + Debug + + + aes128_ccm_encrypt + Debug + + + aes128_cmac + Debug + + + aes128_ecb_decrypt + Debug + + + aes128_ecb_encrypt + Debug + + + aes128_gcm_decrypt + Debug + + + aes128_gcm_encrypt + Debug + + + bitband + Debug + + + blinky + Debug + + + boot_demo_uart + Debug + + + boot_demo_usb + Debug + + + calibrate + Debug + + + crc32 + Debug + + + enet_io + Debug + + + enet_lwip + Debug + + + enet_uip + Debug + + + fontview + Debug + + + gpio_jtag + Debug + + + grlib_demo + Debug + + + hello + Debug + + + hello_widget + Debug + + + hibernate + Debug + + + interrupts + Debug + + + lang_demo + Debug + + + mpu_fault + Debug + + + qs_weather + Debug + + + scribble + Debug + + + sd_card + Debug + + + sha1_hash + Debug + + + sha1_hmac + Debug + + + synth + Debug + + + tamper + Debug + + + tdes_cbc_decrypt + Debug + + + tdes_cbc_encrypt + Debug + + + timers + Debug + + + uart_echo + Debug + + + udma_demo + Debug + + + usb_dev_bulk + Debug + + + usb_dev_keyboard + Debug + + + usb_dev_msc + Debug + + + usb_host_hub + Debug + + + usb_host_msc + Debug + + + usb_otg_mouse + Debug + + + usb_stick_demo + Debug + + + usb_stick_update + Debug + + + watchdog + Debug + + + + + + diff --git a/IDE/IAR-EWARM/README b/IDE/IAR-EWARM/README index f393cae30..2731104ea 100644 --- a/IDE/IAR-EWARM/README +++ b/IDE/IAR-EWARM/README @@ -7,38 +7,38 @@ In order to generate project for specific target MPU, take following steps. Included Project Files ----------------------- -1. Workspace: CyaSSL-Lib.eww - The workspace includes CyaSSL-Lib library and wolfCrypt-test, wolfCrypt-benchmark - executable projects. The library project generates full set library of wolfCrypt - and CyaSSL functions. +1. Workspace: wolfssl.eww + The workspace includes wolfSSL-Lib library and wolfCrypt-test, wolfCrypt-benchmark + executable projects. -2. Test suites Project: wolfCrypt-test.ewp +2. wolfSSL-Lib Project: lib/wolfSSL-lib.ewp + generates full set library of wolfCrypt and wolfSSL functions. + +3. Test suites Project: test/wolfCrypt-test.ewp generates test.out test suites executable -3. Benchmark Project: wolfCrypt-benchmark.ewp +4. Benchmark Project: benchmark/wolfCrypt-benchmark.ewp generates benchmark.out benchmark executable Set Up Steps ------------ 0. Default Setting Default Target of the projects are set to Cortex-M3 Simulator. - For check the projects, you can build and download to the simulator. + user_settings.h includes default options for the projects. + You can build and download the to the simulator. Open Terminal I/O window, by "view"->"Terminal I/O", and start execution. 1. Project option settings For each project,... General Options: Choose appropriate "Target" options - For executable projects,... +2. For executable projects,... Add "SystemInit" and "startup" for your MPU Debugger: Choose your debug "Driver" -2. For benchmark project,... - Write your own "current_time" benchmark timer under "defined(CYASSL_IAR_ARM)" in benchmark.c - -3. settings.h - Uncomment the "CYASSL_IAR_ARM" define located in: - /cyassl/ctaocrypt/settings. +3. For benchmark project,... + Choose option for current_time function. + Or write own "current_time" benchmark timer with WOLFSSL_USER_CURRTIME option. 4. Build and download Go to "Project->Make" and "Download and Debug" in Menu bar for EWARM build and download. diff --git a/src/include.am b/src/include.am index 8081e5e4c..80ed4de80 100644 --- a/src/include.am +++ b/src/include.am @@ -49,7 +49,8 @@ endif src_libwolfssl_la_SOURCES += \ wolfcrypt/src/hmac.c \ wolfcrypt/src/random.c \ - wolfcrypt/src/sha256.c + wolfcrypt/src/sha256.c \ + wolfcrypt/src/hash.c if BUILD_RSA src_libwolfssl_la_SOURCES += wolfcrypt/src/rsa.c diff --git a/src/internal.c b/src/internal.c index 1591acb3f..71553c263 100644 --- a/src/internal.c +++ b/src/internal.c @@ -1841,11 +1841,30 @@ void SSL_ResourceFree(WOLFSSL* ssl) #endif } +#ifdef WOLFSSL_TI_HASH +static void HashFinal(WOLFSSL * ssl) { + byte dummyHash[32] ; +#ifndef NO_MD5 + wc_Md5Final(&(ssl->hsHashes->hashMd5), dummyHash) ; +#endif +#ifndef NO_SHA + wc_ShaFinal(&(ssl->hsHashes->hashSha), dummyHash) ; +#endif +#ifndef NO_SHA256 + wc_Sha256Final(&(ssl->hsHashes->hashSha256), dummyHash) ; +#endif +} +#else + + #define HashFinal(ssl) + +#endif /* Free any handshake resources no longer needed */ void FreeHandshakeResources(WOLFSSL* ssl) { + HashFinal(ssl) ; #ifdef HAVE_SECURE_RENEGOTIATION if (ssl->secure_renegotiation && ssl->secure_renegotiation->enabled) { WOLFSSL_MSG("Secure Renegotiation needs to retain handshake resources"); @@ -2685,7 +2704,6 @@ void ShrinkInputBuffer(WOLFSSL* ssl, int forcedFree) ssl->buffers.inputBuffer.length = usedLength; } - int SendBuffered(WOLFSSL* ssl) { if (ssl->ctx->CBIOSend == NULL) { @@ -3023,14 +3041,14 @@ static void BuildMD5(WOLFSSL* ssl, Hashes* hashes, const byte* sender) wc_Md5Update(&ssl->hsHashes->hashMd5, sender, SIZEOF_SENDER); wc_Md5Update(&ssl->hsHashes->hashMd5, ssl->arrays->masterSecret,SECRET_LEN); wc_Md5Update(&ssl->hsHashes->hashMd5, PAD1, PAD_MD5); - wc_Md5Final(&ssl->hsHashes->hashMd5, md5_result); + wc_Md5GetHash(&ssl->hsHashes->hashMd5, md5_result); /* make md5 outer */ wc_Md5Update(&ssl->hsHashes->hashMd5, ssl->arrays->masterSecret,SECRET_LEN); wc_Md5Update(&ssl->hsHashes->hashMd5, PAD2, PAD_MD5); wc_Md5Update(&ssl->hsHashes->hashMd5, md5_result, MD5_DIGEST_SIZE); - wc_Md5Final(&ssl->hsHashes->hashMd5, hashes->md5); + wc_Md5GetHash(&ssl->hsHashes->hashMd5, hashes->md5); } @@ -3043,14 +3061,14 @@ static void BuildSHA(WOLFSSL* ssl, Hashes* hashes, const byte* sender) wc_ShaUpdate(&ssl->hsHashes->hashSha, sender, SIZEOF_SENDER); wc_ShaUpdate(&ssl->hsHashes->hashSha, ssl->arrays->masterSecret,SECRET_LEN); wc_ShaUpdate(&ssl->hsHashes->hashSha, PAD1, PAD_SHA); - wc_ShaFinal(&ssl->hsHashes->hashSha, sha_result); + wc_ShaGetHash(&ssl->hsHashes->hashSha, sha_result); /* make sha outer */ wc_ShaUpdate(&ssl->hsHashes->hashSha, ssl->arrays->masterSecret,SECRET_LEN); wc_ShaUpdate(&ssl->hsHashes->hashSha, PAD2, PAD_SHA); wc_ShaUpdate(&ssl->hsHashes->hashSha, sha_result, SHA_DIGEST_SIZE); - wc_ShaFinal(&ssl->hsHashes->hashSha, hashes->sha); + wc_ShaGetHash(&ssl->hsHashes->hashSha, hashes->sha); } #endif @@ -3060,33 +3078,10 @@ static int BuildFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender) { int ret = 0; #ifdef WOLFSSL_SMALL_STACK - #ifndef NO_OLD_TLS - #ifndef NO_MD5 - Md5* md5 = (Md5*)XMALLOC(sizeof(Md5), NULL, DYNAMIC_TYPE_TMP_BUFFER); - #endif - #ifndef NO_SHA - Sha* sha = (Sha*)XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER); - #endif - #endif - #ifndef NO_SHA256 - Sha256* sha256 = (Sha256*)XMALLOC(sizeof(Sha256), NULL, - DYNAMIC_TYPE_TMP_BUFFER); - #endif #ifdef WOLFSSL_SHA384 Sha384* sha384 = (Sha384*)XMALLOC(sizeof(Sha384), NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif #else - #ifndef NO_OLD_TLS - #ifndef NO_MD5 - Md5 md5[1]; - #endif - #ifndef NO_SHA - Sha sha[1]; - #endif - #endif - #ifndef NO_SHA256 - Sha256 sha256[1]; - #endif #ifdef WOLFSSL_SHA384 Sha384 sha384[1]; #endif @@ -3094,32 +3089,10 @@ static int BuildFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender) #ifdef WOLFSSL_SMALL_STACK if (ssl == NULL - #ifndef NO_OLD_TLS - #ifndef NO_MD5 - || md5 == NULL - #endif - #ifndef NO_SHA - || sha == NULL - #endif - #endif - #ifndef NO_SHA256 - || sha256 == NULL - #endif #ifdef WOLFSSL_SHA384 || sha384 == NULL #endif ) { - #ifndef NO_OLD_TLS - #ifndef NO_MD5 - XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER); - #endif - #ifndef NO_SHA - XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER); - #endif - #endif - #ifndef NO_SHA256 - XFREE(sha256, NULL, DYNAMIC_TYPE_TMP_BUFFER); - #endif #ifdef WOLFSSL_SHA384 XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif @@ -3128,17 +3101,6 @@ static int BuildFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender) #endif /* store current states, building requires get_digest which resets state */ -#ifndef NO_OLD_TLS -#ifndef NO_MD5 - md5[0] = ssl->hsHashes->hashMd5; -#endif -#ifndef NO_SHA - sha[0] = ssl->hsHashes->hashSha; - #endif -#endif -#ifndef NO_SHA256 - sha256[0] = ssl->hsHashes->hashSha256; -#endif #ifdef WOLFSSL_SHA384 sha384[0] = ssl->hsHashes->hashSha384; #endif @@ -3156,35 +3118,13 @@ static int BuildFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender) #endif /* restore */ -#ifndef NO_OLD_TLS - #ifndef NO_MD5 - ssl->hsHashes->hashMd5 = md5[0]; - #endif - #ifndef NO_SHA - ssl->hsHashes->hashSha = sha[0]; - #endif -#endif if (IsAtLeastTLSv1_2(ssl)) { - #ifndef NO_SHA256 - ssl->hsHashes->hashSha256 = sha256[0]; - #endif #ifdef WOLFSSL_SHA384 ssl->hsHashes->hashSha384 = sha384[0]; #endif } #ifdef WOLFSSL_SMALL_STACK -#ifndef NO_OLD_TLS -#ifndef NO_MD5 - XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif -#ifndef NO_SHA - XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif -#endif -#ifndef NO_SHA256 - XFREE(sha256, NULL, DYNAMIC_TYPE_TMP_BUFFER); -#endif #ifdef WOLFSSL_SHA384 XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER); #endif @@ -6700,6 +6640,7 @@ int ProcessReply(WOLFSSL* ssl) /* input exhausted? */ if (ssl->buffers.inputBuffer.idx == ssl->buffers.inputBuffer.length) return 0; + /* more messages per record */ else if ((ssl->buffers.inputBuffer.idx - startIdx) < ssl->curSize) { WOLFSSL_MSG("More messages in record"); @@ -6912,13 +6853,6 @@ static void BuildSHA_CertVerify(WOLFSSL* ssl, byte* digest) static int BuildCertHashes(WOLFSSL* ssl, Hashes* hashes) { /* store current states, building requires get_digest which resets state */ - #ifndef NO_OLD_TLS - Md5 md5 = ssl->hsHashes->hashMd5; - Sha sha = ssl->hsHashes->hashSha; - #endif - #ifndef NO_SHA256 - Sha256 sha256 = ssl->hsHashes->hashSha256; - #endif #ifdef WOLFSSL_SHA384 Sha384 sha384 = ssl->hsHashes->hashSha384; #endif @@ -6928,14 +6862,14 @@ static int BuildCertHashes(WOLFSSL* ssl, Hashes* hashes) if (ssl->options.tls) { #if ! defined( NO_OLD_TLS ) - wc_Md5Final(&ssl->hsHashes->hashMd5, hashes->md5); - wc_ShaFinal(&ssl->hsHashes->hashSha, hashes->sha); + wc_Md5GetHash(&ssl->hsHashes->hashMd5, hashes->md5); + wc_ShaGetHash(&ssl->hsHashes->hashSha, hashes->sha); #endif if (IsAtLeastTLSv1_2(ssl)) { int ret; #ifndef NO_SHA256 - ret = wc_Sha256Final(&ssl->hsHashes->hashSha256,hashes->sha256); + ret = wc_Sha256GetHash(&ssl->hsHashes->hashSha256,hashes->sha256); if (ret != 0) return ret; #endif @@ -6958,13 +6892,8 @@ static int BuildCertHashes(WOLFSSL* ssl, Hashes* hashes) } /* restore */ - ssl->hsHashes->hashMd5 = md5; - ssl->hsHashes->hashSha = sha; #endif if (IsAtLeastTLSv1_2(ssl)) { - #ifndef NO_SHA256 - ssl->hsHashes->hashSha256 = sha256; - #endif #ifdef WOLFSSL_SHA384 ssl->hsHashes->hashSha384 = sha384; #endif diff --git a/src/tls.c b/src/tls.c index 754037bc3..f4c76d738 100644 --- a/src/tls.c +++ b/src/tls.c @@ -335,14 +335,14 @@ int BuildTlsFinished(WOLFSSL* ssl, Hashes* hashes, const byte* sender) word32 hashSz = FINISHED_SZ; #ifndef NO_OLD_TLS - wc_Md5Final(&ssl->hsHashes->hashMd5, handshake_hash); - wc_ShaFinal(&ssl->hsHashes->hashSha, &handshake_hash[MD5_DIGEST_SIZE]); + wc_Md5GetHash(&ssl->hsHashes->hashMd5, handshake_hash); + wc_ShaGetHash(&ssl->hsHashes->hashSha, &handshake_hash[MD5_DIGEST_SIZE]); #endif if (IsAtLeastTLSv1_2(ssl)) { #ifndef NO_SHA256 if (ssl->specs.mac_algorithm <= sha256_mac) { - int ret = wc_Sha256Final(&ssl->hsHashes->hashSha256,handshake_hash); + int ret = wc_Sha256GetHash(&ssl->hsHashes->hashSha256,handshake_hash); if (ret != 0) return ret; diff --git a/wolfcrypt/benchmark/benchmark.c b/wolfcrypt/benchmark/benchmark.c index 9c27980e7..f284774f3 100644 --- a/wolfcrypt/benchmark/benchmark.c +++ b/wolfcrypt/benchmark/benchmark.c @@ -1846,9 +1846,8 @@ void bench_ed25519KeySign(void) return ( ns / CLOCK * 2.0); } -#elif defined(WOLFSSL_IAR_ARM) || defined (WOLFSSL_MDK_ARM) - #warning "Write your current_time()" - double current_time(int reset) { return 0.0 ; } +#elif defined(WOLFSSL_IAR_ARM_TIME) || defined (WOLFSSL_MDK_ARM) || defined(WOLFSSL_USER_CURRTIME) + extern double current_time(int reset); #elif defined FREERTOS diff --git a/wolfcrypt/src/aes.c b/wolfcrypt/src/aes.c index 896ee147d..85f01a0d1 100644 --- a/wolfcrypt/src/aes.c +++ b/wolfcrypt/src/aes.c @@ -174,6 +174,11 @@ void wc_AesFreeCavium(Aes* aes) } #endif #else /* HAVE_FIPS */ + +#ifdef WOLFSSL_TI_CRYPT +#include +#else + #include #include #ifdef NO_INLINE @@ -1779,13 +1784,13 @@ int wc_AesCbcDecryptWithKey(byte* out, const byte* in, word32 inSz, /* Allow direct access to one block encrypt */ void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in) { - return wc_AesEncrypt(aes, in, out); + wc_AesEncrypt(aes, in, out); } /* Allow direct access to one block decrypt */ void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in) { - return wc_AesDecrypt(aes, in, out); + wc_AesDecrypt(aes, in, out); } #endif /* FREESCALE_MMCAU, AES direct block */ @@ -3885,6 +3890,8 @@ static int AesCaviumCbcDecrypt(Aes* aes, byte* out, const byte* in, #endif /* HAVE_CAVIUM */ +#endif /* WOLFSSL_TI_CRYPT */ + #endif /* HAVE_FIPS */ #endif /* NO_AES */ diff --git a/wolfcrypt/src/des3.c b/wolfcrypt/src/des3.c index 5edb7f79e..f886ecdc7 100644 --- a/wolfcrypt/src/des3.c +++ b/wolfcrypt/src/des3.c @@ -129,6 +129,11 @@ void wc_Des3_FreeCavium(Des3* des3) #endif /* HAVE_CAVIUM */ #else /* build without fips */ + +#if defined(WOLFSSL_TI_CRYPT) + #include +#else + #include #include @@ -943,7 +948,7 @@ int wc_Des3_SetIV(Des3* des, const byte* iv); PIC32_DECRYPTION, PIC32_ALGO_TDES, PIC32_CRYPTOALGO_TCBC); return 0; } - + #else /* CTaoCrypt software implementation */ /* permuted choice table (key) */ @@ -1668,5 +1673,6 @@ static int wc_Des3_CaviumCbcDecrypt(Des3* des3, byte* out, const byte* in, } #endif /* HAVE_CAVIUM */ +#endif /* WOLFSSL_TI_CRYPT */ #endif /* HAVE_FIPS */ #endif /* NO_DES3 */ diff --git a/wolfcrypt/src/hash.c b/wolfcrypt/src/hash.c new file mode 100644 index 000000000..f275b50c1 --- /dev/null +++ b/wolfcrypt/src/hash.c @@ -0,0 +1,74 @@ +/* hash.c + * + * Copyright (C) 2006-2015 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 + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#if !defined(WOLFSSL_TI_HASH) + +#if !defined(NO_MD5) +#include +#endif +#if !defined(NO_SHA) +#include +#endif +#if !defined(NO_SHA256) +#include +#endif + +#include + +#if !defined(NO_MD5) +void wc_Md5GetHash(Md5* md5, byte* hash) +{ + Md5 save = *md5 ; + wc_Md5Final(md5, hash) ; + *md5 = save ; +} +#endif + +#if !defined(NO_SHA) +int wc_ShaGetHash(Sha* sha, byte* hash) +{ + int ret ; + Sha save = *sha ; + ret = wc_ShaFinal(sha, hash) ; + *sha = save ; + return ret ; +} +#endif + +#if !defined(NO_SHA256) +int wc_Sha256GetHash(Sha256* sha256, byte* hash) +{ + int ret ; + Sha256 save = *sha256 ; + ret = wc_Sha256Final(sha256, hash) ; + *sha256 = save ; + return ret ; +} +#endif + +#endif + diff --git a/wolfcrypt/src/include.am b/wolfcrypt/src/include.am index a6e815427..299921579 100644 --- a/wolfcrypt/src/include.am +++ b/wolfcrypt/src/include.am @@ -38,3 +38,11 @@ EXTRA_DIST += \ wolfcrypt/src/fp_sqr_comba_8.i \ wolfcrypt/src/fp_sqr_comba_9.i \ wolfcrypt/src/fp_sqr_comba_small_set.i + +EXTRA_DIST += wolfcrypt/src/port/ti/ti-aes.c \ + wolfcrypt/src/port/ti/ti-des3.c \ + wolfcrypt/src/port/ti/ti-hash.c \ + wolfcrypt/src/port/ti/ti-ccm.c \ + wolfcrypt/src/port/pic32/pic32mz-hash.c + + diff --git a/wolfcrypt/src/md5.c b/wolfcrypt/src/md5.c index d2583bd9b..fbf732add 100644 --- a/wolfcrypt/src/md5.c +++ b/wolfcrypt/src/md5.c @@ -28,6 +28,10 @@ #if !defined(NO_MD5) +#if defined(WOLFSSL_TI_HASH) + /* #include included by wc_port.c */ +#else + #ifdef WOLFSSL_PIC32MZ_HASH #define wc_InitMd5 wc_InitMd5_sw #define wc_Md5Update wc_Md5Update_sw @@ -176,7 +180,6 @@ #endif /* WOLFSSL_HAVE_MIN */ - void wc_InitMd5(Md5* md5) { md5->digest[0] = 0x67452301L; @@ -389,4 +392,6 @@ int wc_Md5Hash(const byte* data, word32 len, byte* hash) return 0; } +#endif /* WOLFSSL_TI_HASH */ + #endif /* NO_MD5 */ diff --git a/wolfcrypt/src/port/ti/ti-aes.c b/wolfcrypt/src/port/ti/ti-aes.c new file mode 100644 index 000000000..d38e7a3cb --- /dev/null +++ b/wolfcrypt/src/port/ti/ti-aes.c @@ -0,0 +1,548 @@ +/* port/ti/ti-aes.c + * + * Copyright (C) 2006-2015 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 + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#ifndef NO_AES + + +#if defined(WOLFSSL_TI_CRYPT) +#include +#include + +#include +#include +#include + +#include "inc/hw_aes.h" +#include "inc/hw_memmap.h" +#include "inc/hw_ints.h" +#include "driverlib/aes.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom_map.h" +#include "driverlib/rom.h" + +static int AesSetIV(Aes* aes, const byte* iv) +{ + if (aes == NULL) + return BAD_FUNC_ARG; + + if (iv) + XMEMCPY(aes->reg, iv, AES_BLOCK_SIZE); + else + XMEMSET(aes->reg, 0, AES_BLOCK_SIZE); + + return 0; +} + +WOLFSSL_API int wc_AesSetKey(Aes* aes, const byte* key, word32 len, const byte* iv, + int dir) +{ + if(!wolfSSL_TI_CCMInit())return 1 ; + if ((aes == NULL) || (key == NULL) || (iv == NULL)) + return BAD_FUNC_ARG; + if(!((dir == AES_ENCRYPTION) || (dir == AES_DECRYPTION))) + return BAD_FUNC_ARG; + + switch(len) { + case 16: aes->keylen = AES_CFG_KEY_SIZE_128BIT ; break ; + case 24: aes->keylen = AES_CFG_KEY_SIZE_192BIT ; break ; + case 32: aes->keylen = AES_CFG_KEY_SIZE_256BIT ; break ; + default: return BAD_FUNC_ARG; + } + + XMEMCPY(aes->key, key, len) ; + #ifdef WOLFSSL_AES_COUNTER + aes->left = 0; + #endif /* WOLFSSL_AES_COUNTER */ + return AesSetIV(aes, iv); +} + +#define AES_CFG_MODE_CTR_NOCTR AES_CFG_MODE_CTR+100 +#define IS_ALIGN16(p) (((unsigned int)(p)&0xf) == 0) + +static int AesAlign16(Aes* aes, byte* out, const byte* in, word32 sz, word32 dir, word32 mode) +{ + wolfSSL_TI_lockCCM() ; + ROM_AESReset(AES_BASE); + ROM_AESConfigSet(AES_BASE, (aes->keylen | dir | + (mode==AES_CFG_MODE_CTR_NOCTR ? AES_CFG_MODE_CTR : mode))); + ROM_AESIVSet(AES_BASE, aes->reg); + ROM_AESKey1Set(AES_BASE, aes->key, aes->keylen); + if((dir == AES_CFG_DIR_DECRYPT)&& (mode == AES_CFG_MODE_CBC)) + /* if input and output same will overwrite input iv */ + XMEMCPY(aes->tmp, in + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE); + ROM_AESDataProcess(AES_BASE, (uint32_t *)in, (uint32_t *)out, sz); + wolfSSL_TI_unlockCCM() ; + + /* store iv for next call */ + if(mode == AES_CFG_MODE_CBC){ + if(dir == AES_CFG_DIR_ENCRYPT) + XMEMCPY(aes->reg, out + sz - AES_BLOCK_SIZE, AES_BLOCK_SIZE); + else + XMEMCPY(aes->reg, aes->tmp, AES_BLOCK_SIZE); + } + + if(mode == AES_CFG_MODE_CTR) { + do { + int i ; + for (i = AES_BLOCK_SIZE - 1; i >= 0; i--) { + if (++((byte *)aes->reg)[i]) + break ; + } + sz -= AES_BLOCK_SIZE ; + } while((int)sz > 0) ; + } + + return 0 ; +} + +static int AesProcess(Aes* aes, byte* out, const byte* in, word32 sz, word32 dir, word32 mode) +{ + const byte * in_p ; byte * out_p ; + word32 size ; + #define TI_BUFFSIZE 1024 + byte buff[TI_BUFFSIZE] ; + + if ((aes == NULL) || (in == NULL) || (out == NULL)) + return BAD_FUNC_ARG; + if(sz % AES_BLOCK_SIZE) + return BAD_FUNC_ARG; + + while(sz > 0) { + size = sz ; in_p = in ; out_p = out ; + if(!IS_ALIGN16(in)){ + size = sz>TI_BUFFSIZE ? TI_BUFFSIZE : sz ; + XMEMCPY(buff, in, size) ; + in_p = (const byte *)buff ; + } + if(!IS_ALIGN16(out)){ + size = sz>TI_BUFFSIZE ? TI_BUFFSIZE : sz ; + out_p = buff ; + } + + AesAlign16(aes, out_p, in_p, size, dir, mode) ; + + if(!IS_ALIGN16(out)){ + XMEMCPY(out, buff, size) ; + } + sz -= size ; in += size ; out += size ; + } + + return 0 ; +} + +WOLFSSL_API int wc_AesCbcEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) +{ + return AesProcess(aes, out, in, sz, AES_CFG_DIR_ENCRYPT, AES_CFG_MODE_CBC) ; +} + +WOLFSSL_API int wc_AesCbcDecrypt(Aes* aes, byte* out, const byte* in, word32 sz) +{ + return AesProcess(aes, out, in, sz, AES_CFG_DIR_DECRYPT, AES_CFG_MODE_CBC) ; +} + +#ifdef WOLFSSL_AES_COUNTER +WOLFSSL_API void wc_AesCtrEncrypt(Aes* aes, byte* out, const byte* in, word32 sz) +{ + char out_block[AES_BLOCK_SIZE] ; + int odd ; + int even ; + char *tmp ; /* (char *)aes->tmp, for short */ + + tmp = (char *)aes->tmp ; + if(aes->left) { + if((aes->left + sz) >= AES_BLOCK_SIZE){ + odd = AES_BLOCK_SIZE - aes->left ; + } else { + odd = sz ; + } + XMEMCPY(tmp+aes->left, in, odd) ; + if((odd+aes->left) == AES_BLOCK_SIZE){ + AesProcess(aes, (byte *)out_block, (byte const *)tmp, AES_BLOCK_SIZE, + AES_CFG_DIR_ENCRYPT, AES_CFG_MODE_CTR) ; + XMEMCPY(out, out_block+aes->left, odd) ; + aes->left = 0 ; + XMEMSET(tmp, 0x0, AES_BLOCK_SIZE) ; + } + in += odd ; + out+= odd ; + sz -= odd ; + } + odd = sz % AES_BLOCK_SIZE ; /* if there is tail flagment */ + if(sz / AES_BLOCK_SIZE) { + even = (sz/AES_BLOCK_SIZE)*AES_BLOCK_SIZE ; + AesProcess(aes, out, in, even, AES_CFG_DIR_ENCRYPT, AES_CFG_MODE_CTR); + out += even ; + in += even ; + } + if(odd) { + XMEMSET(tmp+aes->left, 0x0, AES_BLOCK_SIZE - aes->left) ; + XMEMCPY(tmp+aes->left, in, odd) ; + AesProcess(aes, (byte *)out_block, (byte const *)tmp, AES_BLOCK_SIZE, + AES_CFG_DIR_ENCRYPT, + AES_CFG_MODE_CTR_NOCTR /* Counter mode without counting IV */ + ); + XMEMCPY(out, out_block+aes->left,odd) ; + aes->left += odd ; + } +} +#endif + +/* AES-DIRECT */ +#if defined(WOLFSSL_AES_DIRECT) +WOLFSSL_API void wc_AesEncryptDirect(Aes* aes, byte* out, const byte* in) +{ + AesProcess(aes, out, in, AES_BLOCK_SIZE, AES_CFG_DIR_ENCRYPT, AES_CFG_MODE_CBC) ; +} +WOLFSSL_API void wc_AesDecryptDirect(Aes* aes, byte* out, const byte* in) +{ + AesProcess(aes, out, in, AES_BLOCK_SIZE, AES_CFG_DIR_DECRYPT, AES_CFG_MODE_CBC) ; +} +WOLFSSL_API int wc_AesSetKeyDirect(Aes* aes, const byte* key, word32 len, + const byte* iv, int dir) +{ + return(wc_AesSetKey(aes, key, len, iv, dir)) ; +} +#endif + + +#if defined(HAVE_AESGCM) || defined(HAVE_AESCCM) + +static int AesAuthSetKey(Aes* aes, const byte* key, word32 keySz) +{ + byte nonce[AES_BLOCK_SIZE]; + + if ((aes == NULL) || (key == NULL)) + return BAD_FUNC_ARG ; + if (!((keySz == 16) || (keySz == 24) || (keySz == 32))) + return BAD_FUNC_ARG ; + + XMEMSET(nonce, 0, sizeof(nonce)); + return wc_AesSetKey(aes, key, keySz, nonce, AES_ENCRYPTION); +} + + +static int AesAuthArgCheck(Aes* aes, byte* out, const byte* in, word32 inSz, + const byte* nonce, word32 nonceSz, + const byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz, word32 *M, word32 *L) +{ + if((aes == NULL)||(nonce == NULL)||(authTag== NULL)||(authIn == NULL)) + return BAD_FUNC_ARG; + if((inSz != 0) && ((out == NULL)||(in == NULL))) + return BAD_FUNC_ARG; + + switch(authTagSz){ + case 4: + *M = AES_CFG_CCM_M_4; break ; + case 6: + *M = AES_CFG_CCM_M_6; break ; + case 8: + *M = AES_CFG_CCM_M_8; break ; + case 10: + *M = AES_CFG_CCM_M_10; break ; + case 12: + *M = AES_CFG_CCM_M_12; break ; + case 14: + *M = AES_CFG_CCM_M_14; break ; + case 16: + *M = AES_CFG_CCM_M_16; break ; + default: + return 1 ; + } + + switch(nonceSz){ + case 7: + *L = AES_CFG_CCM_L_8; break ; + case 8: + *L = AES_CFG_CCM_L_7; break ; + case 9: + *L = AES_CFG_CCM_L_6; break ; + case 10: + *L = AES_CFG_CCM_L_5; break ; + case 11: + *L = AES_CFG_CCM_L_4; break ; + case 12: + *L = AES_CFG_CCM_L_3; break ; + case 13: + *L = AES_CFG_CCM_L_2; break ; + case 14: + *L = AES_CFG_CCM_L_1; break ; + default: + return 1; + } + return 0 ; +} + +static void AesAuthSetIv(Aes *aes, const byte *nonce, word32 len, word32 L, int mode) { + + if(mode == AES_CFG_MODE_CCM){ + XMEMSET(aes->reg, 0, 16) ; + switch(L){ + case AES_CFG_CCM_L_8: + aes->reg[0] = 0x7; break ; + case AES_CFG_CCM_L_7: + aes->reg[0] = 0x6; break ; + case AES_CFG_CCM_L_6: + aes->reg[0] = 0x5; break ; + case AES_CFG_CCM_L_5: + aes->reg[0] = 0x4; break ; + case AES_CFG_CCM_L_4: + aes->reg[0] = 0x3; break ; + case AES_CFG_CCM_L_3: + aes->reg[0] = 0x2; break ; + case AES_CFG_CCM_L_2: + aes->reg[0] = 0x1; break ; + case AES_CFG_CCM_L_1: + aes->reg[0] = 0x0; break ; + } + XMEMCPY(((byte *)aes->reg)+1, nonce, len) ; + } else { + byte *b = (byte *)aes->reg ; + XMEMSET(aes->reg, 0, AES_BLOCK_SIZE); + XMEMCPY(aes->reg, nonce, len); + b[AES_BLOCK_SIZE-4] = 0 ; + b[AES_BLOCK_SIZE-3] = 0 ; + b[AES_BLOCK_SIZE-2] = 0 ; + b[AES_BLOCK_SIZE-1] = 1 ; + } +} + +#define RoundUp16(n) ((n+15)&0xfffffff0) +#define FREE_ALL \ + if(in_save) XFREE(in_save, NULL, DYNAMIC_TYPE_TMP_BUFFER);\ + if(out_save) XFREE(out_save, NULL, DYNAMIC_TYPE_TMP_BUFFER);\ + if(authIn_save)XFREE(authIn_save, NULL, DYNAMIC_TYPE_TMP_BUFFER);\ + if(nonce_save) XFREE(nonce_save, NULL, DYNAMIC_TYPE_TMP_BUFFER); + +static int AesAuthEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz, + const byte* nonce, word32 nonceSz, + byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz, int mode) +{ + word32 M, L ; + byte *in_a, *in_save ; + byte *out_a, *out_save ; + byte *authIn_a, *authIn_save ; + byte *nonce_a, *nonce_save ; + word32 tmpTag[4] ; + int ret ; + + if(AesAuthArgCheck(aes, out, in, inSz, nonce, nonceSz, authTag, authTagSz, authIn, authInSz, &M, &L) + == BAD_FUNC_ARG)return BAD_FUNC_ARG ; + + /* 16 byte padding */ + in_save = NULL ; out_save = NULL ; authIn_save = NULL ; nonce_save = NULL ; + if((inSz%16)==0){ + in_save = NULL ; in_a = (byte *)in ; + out_save = NULL ; out_a = out ; + } else { + if((in_save = XMALLOC(RoundUp16(inSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E ; } + in_a = in_save ; XMEMSET(in_a, 0, RoundUp16(inSz)) ; XMEMCPY(in_a, in, inSz) ; + + if((out_save = XMALLOC(RoundUp16(inSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E ; } + out_a = out_save ; + } + + if((authInSz%16)==0){ + authIn_save = NULL ; authIn_a = (byte *)authIn ; + } else { + if((authIn_save = XMALLOC(RoundUp16(authInSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E ; } + authIn_a = authIn_save ; XMEMSET(authIn_a, 0, RoundUp16(authInSz)) ; XMEMCPY(authIn_a, authIn, authInSz) ; + } + + if((nonceSz%16)==0){ + nonce_save = NULL ; nonce_a = (byte *)nonce ; + } else { + if((nonce_save = XMALLOC(RoundUp16(nonceSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E; } + nonce_a = nonce_save ; XMEMSET(nonce_a, 0, RoundUp16(nonceSz)) ; XMEMCPY(nonce_a, nonce, nonceSz) ; + } + + /* do aes-ccm */ + AesAuthSetIv(aes, nonce, nonceSz, L, mode) ; + ROM_AESReset(AES_BASE); + ROM_AESConfigSet(AES_BASE, (aes->keylen | AES_CFG_DIR_ENCRYPT | + AES_CFG_CTR_WIDTH_128 | + mode | ((mode== AES_CFG_MODE_CCM) ? (L | M) : 0 ))) ; + ROM_AESIVSet(AES_BASE, aes->reg); + ROM_AESKey1Set(AES_BASE, aes->key, aes->keylen); + ret = ROM_AESDataProcessAuth(AES_BASE, (unsigned int*)in_a, (unsigned int *)out_a, inSz, + (unsigned int*)authIn_a, authInSz, (unsigned int *)tmpTag); + if(ret == false){ + XMEMSET(out, 0, inSz) ; + XMEMSET(authTag, 0, authTagSz) ; + } else { + XMEMCPY(out, out_a, inSz) ; + XMEMCPY(authTag, tmpTag, authTagSz) ; + } + + FREE_ALL; + return 0 ; +} + +static int AesAuthDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz, + const byte* nonce, word32 nonceSz, + const byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz, int mode) +{ + word32 M, L ; + byte *in_a, *in_save ; + byte *out_a, *out_save ; + byte *authIn_a, *authIn_save ; + byte *nonce_a, *nonce_save ; + word32 tmpTag[4] ; + bool ret ; + + if(AesAuthArgCheck(aes, out, in, inSz, nonce, nonceSz, authTag, authTagSz, authIn, authInSz, &M, &L) + == BAD_FUNC_ARG)return BAD_FUNC_ARG ; + + /* 16 byte padding */ + in_save = NULL ; out_save = NULL ; authIn_save = NULL ; nonce_save = NULL ; + if((inSz%16)==0){ + in_save = NULL ; in_a = (byte *)in ; + out_save = NULL ; out_a = out ; + } else { + if((in_save = XMALLOC(RoundUp16(inSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E;} + in_a = in_save ; XMEMSET(in_a, 0, RoundUp16(inSz)) ; XMEMCPY(in_a, in, inSz) ; + + if((out_save = XMALLOC(RoundUp16(inSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E;} + out_a = out_save ; + } + + if((authInSz%16)==0){ + authIn_save = NULL ; authIn_a = (byte *)authIn ; + } else { + if((authIn_save = XMALLOC(RoundUp16(authInSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E; } + authIn_a = authIn_save ; XMEMSET(authIn_a, 0, RoundUp16(authInSz)) ; XMEMCPY(authIn_a, authIn, authInSz) ; + } + + if((nonceSz%16)==0){ + nonce_save = NULL ; nonce_a = (byte *)nonce ; + } else { + if((nonce_save = XMALLOC(RoundUp16(nonceSz), NULL, DYNAMIC_TYPE_TMP_BUFFER)) == NULL){ + FREE_ALL; return MEMORY_E; } + nonce_a = nonce_save ; XMEMSET(nonce_a, 0, RoundUp16(nonceSz)) ; XMEMCPY(nonce_a, nonce, nonceSz) ; + } + + /* do aes-ccm */ + AesAuthSetIv(aes, nonce, nonceSz, L, mode) ; + ROM_AESReset(AES_BASE); + ROM_AESConfigSet(AES_BASE, (aes->keylen | AES_CFG_DIR_DECRYPT | + AES_CFG_CTR_WIDTH_128 | + mode | ((mode== AES_CFG_MODE_CCM) ? (L | M) : 0 ))) ; + ROM_AESIVSet(AES_BASE, aes->reg); + ROM_AESKey1Set(AES_BASE, aes->key, aes->keylen); + ret = ROM_AESDataProcessAuth(AES_BASE, (unsigned int*)in_a, (unsigned int *)out_a, inSz, + (unsigned int*)authIn_a, authInSz, (unsigned int *)tmpTag); + if((ret == false) || (XMEMCMP(authTag, tmpTag, authTagSz) != 0)){ + XMEMSET(out, 0, inSz) ; + ret = false ; + } else { + XMEMCPY(out, out_a, inSz) ; + } + + FREE_ALL ; + return ret==true ? 0 : 1 ; +} +#endif + + +#ifdef HAVE_AESGCM +WOLFSSL_API int wc_AesGcmSetKey(Aes* aes, const byte* key, word32 len) +{ + return AesAuthSetKey(aes, key, len) ; +} + +WOLFSSL_API int wc_AesGcmEncrypt(Aes* aes, byte* out, const byte* in, word32 sz, + const byte* iv, word32 ivSz, + byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz) +{ + return AesAuthEncrypt(aes, out, in, sz, iv, ivSz, authTag, authTagSz, + authIn, authInSz, AES_CFG_MODE_GCM_HY0CALC) ; +} +WOLFSSL_API int wc_AesGcmDecrypt(Aes* aes, byte* out, const byte* in, word32 sz, + const byte* iv, word32 ivSz, + const byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz) +{ + return AesAuthDecrypt(aes, out, in, sz, iv, ivSz, authTag, authTagSz, + authIn, authInSz, AES_CFG_MODE_GCM_HY0CALC) ; +} + +WOLFSSL_API int wc_GmacSetKey(Gmac* gmac, const byte* key, word32 len) +{ + return AesAuthSetKey(&gmac->aes, key, len) ; +} + +WOLFSSL_API int wc_GmacUpdate(Gmac* gmac, const byte* iv, word32 ivSz, + const byte* authIn, word32 authInSz, + byte* authTag, word32 authTagSz) +{ + return AesAuthEncrypt(&gmac->aes, NULL, NULL, 0, iv, ivSz, authTag, authTagSz, + authIn, authInSz, AES_CFG_MODE_GCM_HY0CALC) ; +} + +#endif /* HAVE_AESGCM */ + +#ifdef HAVE_AESCCM +WOLFSSL_API void wc_AesCcmSetKey(Aes* aes, const byte* key, word32 keySz) +{ + AesAuthSetKey(aes, key, keySz) ; +} + +WOLFSSL_API void wc_AesCcmEncrypt(Aes* aes, byte* out, const byte* in, word32 inSz, + const byte* nonce, word32 nonceSz, + byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz) +{ + AesAuthEncrypt(aes, out, in, inSz, nonce, nonceSz, authTag, authTagSz, + authIn, authInSz, AES_CFG_MODE_CCM) ; +} + +WOLFSSL_API int wc_AesCcmDecrypt(Aes* aes, byte* out, const byte* in, word32 inSz, + const byte* nonce, word32 nonceSz, + const byte* authTag, word32 authTagSz, + const byte* authIn, word32 authInSz) +{ + return AesAuthDecrypt(aes, out, in, inSz, nonce, nonceSz, authTag, authTagSz, + authIn, authInSz, AES_CFG_MODE_CCM) ; +} +#endif /* HAVE_AESCCM */ + +#endif /* WOLFSSL_TI_CRYPT */ + +#endif /* NO_AES */ + + + diff --git a/wolfcrypt/src/port/ti/ti-ccm.c b/wolfcrypt/src/port/ti/ti-ccm.c new file mode 100644 index 000000000..09705cfb8 --- /dev/null +++ b/wolfcrypt/src/port/ti/ti-ccm.c @@ -0,0 +1,82 @@ +/* port/ti/ti_ccm.c + * + * Copyright (C) 2006-2015 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 + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#if defined(WOLFSSL_TI_CRYPT) || defined(WOLFSSL_TI_HASH) + + +#include +#include + +#include "driverlib/sysctl.h" +#include "driverlib/rom_map.h" +#include "driverlib/rom.h" + +#ifndef SINGLE_THREADED +#include + static wolfSSL_Mutex TI_CCM_Mutex ; +#endif + +#define TIMEOUT 500000 +#define WAIT(stat) { volatile int i ; for(i=0; i +#endif + +#include + +#ifndef NO_DES + +#if defined(WOLFSSL_TI_CRYPT) +#include +#include + +#include +#include +#include + +#include "inc/hw_des.h" +#include "inc/hw_memmap.h" +#include "inc/hw_ints.h" +#include "driverlib/des.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom_map.h" +#include "driverlib/rom.h" + +static int DesSetIV(Des* des, const byte* iv, int tri) +{ + if (des == NULL) + return BAD_FUNC_ARG; + + if (iv) + XMEMCPY(des->reg, iv, tri == DES_CFG_TRIPLE ? DES3_IVLEN : DES_IVLEN); + else + XMEMSET(des->reg, 0, tri == DES_CFG_TRIPLE ? DES3_IVLEN : DES_IVLEN); + + return 0; +} + +static int DesSetKey(Des* des, const byte* key, const byte* iv,int dir, int tri) +{ + if(!wolfSSL_TI_CCMInit())return 1 ; + if ((des == NULL) || (key == NULL) || (iv == NULL)) + return BAD_FUNC_ARG; + if(!((dir == DES_ENCRYPTION) || (dir == DES_DECRYPTION))) + return BAD_FUNC_ARG; + + XMEMCPY(des->key, key, tri == DES_CFG_SINGLE ? DES_KEYLEN : DES3_KEYLEN) ; + return DesSetIV(des, iv, tri); +} + +static int DesCbcAlign16(Des* des, byte* out, const byte* in, word32 sz, word32 dir, word32 tri) +{ + + wolfSSL_TI_lockCCM() ; + ROM_DESReset(DES_BASE); + ROM_DESConfigSet(DES_BASE, (dir | DES_CFG_MODE_CBC | tri)); + ROM_DESIVSet(DES_BASE, des->reg); + ROM_DESKeySet(DES_BASE, des->key); + if(dir == DES_CFG_DIR_DECRYPT) + /* if input and output same will overwrite input iv */ + XMEMCPY(des->tmp, in + sz - DES_BLOCK_SIZE, DES_BLOCK_SIZE); + ROM_DESDataProcess(DES_BASE, (uint32_t *)in, (uint32_t *)out, sz); + wolfSSL_TI_unlockCCM() ; + + /* store iv for next call */ + if(dir == DES_CFG_DIR_ENCRYPT) + XMEMCPY(des->reg, out + sz - DES_BLOCK_SIZE, DES_BLOCK_SIZE); + else + XMEMCPY(des->reg, des->tmp, DES_BLOCK_SIZE); + + return 0 ; +} + +#define IS_ALIGN16(p) (((unsigned int)(p)&0xf) == 0) + +static int DesCbc(Des* des, byte* out, const byte* in, word32 sz, word32 dir, word32 tri) +{ + const byte * in_p ; byte * out_p ; + word32 size ; + #define TI_BUFFSIZE 1024 + byte buff[TI_BUFFSIZE] ; + if ((des == NULL) || (in == NULL) || (out == NULL)) + return BAD_FUNC_ARG; + if(sz % DES_BLOCK_SIZE) + return BAD_FUNC_ARG; + + while(sz > 0) { + size = sz ; in_p = in ; out_p = out ; + if(!IS_ALIGN16(in)){ + size = sz>TI_BUFFSIZE ? TI_BUFFSIZE : sz ; + XMEMCPY(buff, in, size) ; + in_p = (const byte *)buff ; + } + if(!IS_ALIGN16(out)){ + size = sz>TI_BUFFSIZE ? TI_BUFFSIZE : sz ; + out_p = (byte *)buff ; + } + + DesCbcAlign16(des, out_p, in_p, size, dir, tri) ; + + if(!IS_ALIGN16(out)){ + XMEMCPY(out, buff, size) ; + } + sz -= size ; in += size ; out += size ; + } + return 0 ; +} + +WOLFSSL_API int wc_Des_SetKey(Des* des, const byte* key, const byte* iv,int dir) +{ + return DesSetKey(des, key, iv, dir, DES_CFG_SINGLE) ; +} + +WOLFSSL_API void wc_Des_SetIV(Des* des, const byte* iv) +{ + DesSetIV(des, iv, DES_CFG_SINGLE) ; +} + +WOLFSSL_API int wc_Des3_SetKey(Des3* des, const byte* key, const byte* iv,int dir) +{ + return DesSetKey((Des *)des, key, iv, dir, DES_CFG_TRIPLE) ; +} + +WOLFSSL_API int wc_Des3_SetIV(Des3* des, const byte* iv) +{ + return DesSetIV((Des *)des, iv, DES_CFG_TRIPLE) ; +} + + +WOLFSSL_API int wc_Des_CbcEncrypt(Des* des, byte* out, const byte* in, word32 sz) +{ + return DesCbc(des, out, in, sz, DES_CFG_DIR_ENCRYPT, DES_CFG_SINGLE) ; +} + +WOLFSSL_API int wc_Des_CbcDecrypt(Des* des, byte* out, const byte* in, word32 sz) +{ + return DesCbc(des, out, in, sz, DES_CFG_DIR_DECRYPT, DES_CFG_SINGLE) ; +} + +WOLFSSL_API int wc_Des_CbcDecryptWithKey(byte* out, const byte* in, word32 sz, + const byte* key, const byte* iv) +{ return 0 ;} + +WOLFSSL_API int wc_Des3_CbcEncrypt(Des3* des, byte* out, const byte* in, word32 sz) +{ + return DesCbc((Des *)des, out, in, sz, DES_CFG_DIR_ENCRYPT, DES_CFG_TRIPLE) ; +} + +WOLFSSL_API int wc_Des3_CbcDecrypt(Des3* des, byte* out, const byte* in, word32 sz) +{ + return DesCbc((Des *)des, out, in, sz, DES_CFG_DIR_DECRYPT, DES_CFG_TRIPLE) ; +} + +WOLFSSL_API int wc_Des3_CbcDecryptWithKey(byte* out, const byte* in, word32 sz, + const byte* key, const byte* iv) +{ return 0 ; } + + +#endif /* WOLFSSL_TI_CRYPT */ + +#endif /* NO_DES */ diff --git a/wolfcrypt/src/port/ti/ti-hash.c b/wolfcrypt/src/port/ti/ti-hash.c new file mode 100644 index 000000000..98dbba870 --- /dev/null +++ b/wolfcrypt/src/port/ti/ti-hash.c @@ -0,0 +1,271 @@ +/* port/ti/ti-hash.c + * + * Copyright (C) 2006-2015 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 + */ + + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#include + +#if defined(WOLFSSL_TI_HASH) + +#ifdef __cplusplus + extern "C" { +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#ifndef TI_DUMMY_BUILD +#include "inc/hw_memmap.h" +#include "inc/hw_shamd5.h" +#include "inc/hw_ints.h" +#include "driverlib/shamd5.h" +#include "driverlib/sysctl.h" +#include "driverlib/rom_map.h" +#include "driverlib/rom.h" +#else +#define SHAMD5_ALGO_MD5 1 +#define SHAMD5_ALGO_SHA1 2 +#define SHAMD5_ALGO_SHA256 3 +bool wolfSSL_TI_CCMInit(void) { return true ; } +#endif + +static int hashInit(wolfssl_TI_Hash *hash) { + hash->used = 0 ; + hash->msg = 0 ; + hash->len = 0 ; + return 0 ; +} + +static int hashUpdate(wolfssl_TI_Hash *hash, const byte* data, word32 len) +{ + void *p ; + + if((hash== NULL) || (data == NULL))return BAD_FUNC_ARG; + + if(hash->len < hash->used+len) { + if(hash->msg == NULL) { + p = XMALLOC(hash->used+len, NULL, DYNAMIC_TYPE_TMP_BUFFER); + } else { + p = XREALLOC(hash->msg, hash->used+len, NULL, DYNAMIC_TYPE_TMP_BUFFER); + } + if(p == 0)return 1 ; + hash->msg = p ; + hash->len = hash->used+len ; + } + XMEMCPY(hash->msg+hash->used, data, len) ; + hash->used += len ; + return 0 ; +} + +static int hashGetHash(wolfssl_TI_Hash *hash, byte* result, word32 algo, word32 hsize) +{ + uint32_t h[16] ; +#ifndef TI_DUMMY_BUILD + wolfSSL_TI_lockCCM() ; + ROM_SHAMD5Reset(SHAMD5_BASE); + ROM_SHAMD5ConfigSet(SHAMD5_BASE, algo); + ROM_SHAMD5DataProcess(SHAMD5_BASE, + (uint32_t *)hash->msg, hash->used, h); + wolfSSL_TI_unlockCCM() ; +#else + (void) hash ; + (void) algo ; +#endif + XMEMCPY(result, h, hsize) ; + + return 0 ; +} + +static int hashFinal(wolfssl_TI_Hash *hash, byte* result, word32 algo, word32 hsize) +{ + hashGetHash(hash, result, algo, hsize) ; + XFREE(hash->msg, NULL, DYNAMIC_TYPE_TMP_BUFFER); + hashInit(hash) ; + return 0 ; +} + +static int hashHash(const byte* data, word32 len, byte* hash, word32 algo, word32 hsize) +{ + int ret = 0; +#ifdef WOLFSSL_SMALL_STACK + wolfssl_TI_Hash* hash_desc; +#else + wolfssl_TI_Hash hash_desc[1]; +#endif + +#ifdef WOLFSSL_SMALL_STACK + hash_desc = (wolfssl_TI_Hash*)XMALLOC(sizeof(wolfssl_TI_Hash), NULL, DYNAMIC_TYPE_TMP_BUFFER); + if (hash_desc == NULL) + return MEMORY_E; +#endif + + if ((ret = hashInit(hash_desc)) != 0) { + WOLFSSL_MSG("Hash Init failed"); + } + else { + hashUpdate(hash_desc, data, len); + hashFinal(hash_desc, hash, algo, hsize); + } + +#ifdef WOLFSSL_SMALL_STACK + XFREE(hash, NULL, DYNAMIC_TYPE_TMP_BUFFER); +#endif + + return ret; +} + +#if !defined(NO_MD5) +WOLFSSL_API void wc_InitMd5(Md5* md5) +{ + if (md5 == NULL) + return ; + if(!wolfSSL_TI_CCMInit())return ; + hashInit((wolfssl_TI_Hash *)md5) ; +} + +WOLFSSL_API void wc_Md5Update(Md5* md5, const byte* data, word32 len) +{ + hashUpdate((wolfssl_TI_Hash *)md5, data, len) ; +} + +WOLFSSL_API void wc_Md5Final(Md5* md5, byte* hash) +{ + hashFinal((wolfssl_TI_Hash *)md5, hash, SHAMD5_ALGO_MD5, MD5_DIGEST_SIZE) ; +} + +WOLFSSL_API void wc_Md5GetHash(Md5* md5, byte* hash) +{ + hashGetHash(md5, hash, SHAMD5_ALGO_MD5, MD5_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_Md5Hash(const byte*data, word32 len, byte*hash) +{ + return hashHash(data, len, hash, SHAMD5_ALGO_MD5, MD5_DIGEST_SIZE) ; +} + +#endif /* NO_MD5 */ + +#if !defined(NO_SHA) +WOLFSSL_API int wc_InitSha(Sha* sha) +{ + if (sha == NULL) + return 1 ; + if(!wolfSSL_TI_CCMInit())return 1 ; + return hashInit((wolfssl_TI_Hash *)sha) ; +} + +WOLFSSL_API int wc_ShaUpdate(Sha* sha, const byte* data, word32 len) +{ + return hashUpdate((wolfssl_TI_Hash *)sha, data, len) ; +} + +WOLFSSL_API int wc_ShaFinal(Sha* sha, byte* hash) +{ + return hashFinal((wolfssl_TI_Hash *)sha, hash, SHAMD5_ALGO_SHA1, SHA_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_ShaGetHash(Sha* sha, byte* hash) +{ + return hashGetHash(sha, hash, SHAMD5_ALGO_SHA1, SHA_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_ShaHash(const byte*data, word32 len, byte*hash) +{ + return hashHash(data, len, hash, SHAMD5_ALGO_SHA1, SHA_DIGEST_SIZE) ; +} + +#endif /* NO_SHA */ + +#if defined(HAVE_SHA224) +WOLFSSL_API int wc_InitSha224(Sha224* sha224) +{ + if (sha224 == NULL) + return 1 ; + if(!wolfSSL_TI_CCMInit())return 1 ; + return hashInit((wolfssl_TI_Hash *)sha224) ; +} + +WOLFSSL_API int wc_Sha224Update(Sha224* sha224, const byte* data, word32 len) +{ + return hashUpdate((wolfssl_TI_Hash *)sha224, data, len) ; +} + +WOLFSSL_API int wc_Sha224Final(Sha224* sha224, byte* hash) +{ + return hashFinal((wolfssl_TI_Hash *)sha224, hash, SHAMD5_ALGO_SHA224, SHA224_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_Sha224GetHash(Sha224* sha224, byte* hash) +{ + return hashGetHash(sha224, hash, SHAMD5_ALGO_SHA224, SHA224_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_Sha224Hash(const byte* data, word32 len, byte*hash) +{ + return hashHash(data, len, hash, SHAMD5_ALGO_SHA224, SHA224_DIGEST_SIZE) ; +} + +#endif /* HAVE_SHA224 */ + +#if !defined(NO_SHA256) +WOLFSSL_API int wc_InitSha256(Sha256* sha256) +{ + if (sha256 == NULL) + return 1 ; + if(!wolfSSL_TI_CCMInit())return 1 ; + return hashInit((wolfssl_TI_Hash *)sha256) ; +} + +WOLFSSL_API int wc_Sha256Update(Sha256* sha256, const byte* data, word32 len) +{ + return hashUpdate((wolfssl_TI_Hash *)sha256, data, len) ; +} + +WOLFSSL_API int wc_Sha256Final(Sha256* sha256, byte* hash) +{ + return hashFinal((wolfssl_TI_Hash *)sha256, hash, SHAMD5_ALGO_SHA256, SHA256_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_Sha256GetHash(Sha256* sha256, byte* hash) +{ + return hashGetHash(sha256, hash, SHAMD5_ALGO_SHA256, SHA256_DIGEST_SIZE) ; +} + +WOLFSSL_API int wc_Sha256Hash(const byte* data, word32 len, byte*hash) +{ + return hashHash(data, len, hash, SHAMD5_ALGO_SHA256, SHA256_DIGEST_SIZE) ; +} +#endif + +#endif diff --git a/wolfcrypt/src/sha.c b/wolfcrypt/src/sha.c index 0109b8363..be8cf17af 100644 --- a/wolfcrypt/src/sha.c +++ b/wolfcrypt/src/sha.c @@ -64,6 +64,10 @@ #else /* else build without fips */ +#if defined(WOLFSSL_TI_HASH) + /* #include included by wc_port.c */ +#else + #ifdef WOLFSSL_PIC32MZ_HASH #define wc_InitSha wc_InitSha_sw #define wc_ShaUpdate wc_ShaUpdate_sw @@ -447,6 +451,8 @@ int wc_ShaHash(const byte* data, word32 len, byte* hash) return ret; } + #endif /* HAVE_FIPS */ +#endif /* WOLFSSL_TI_HASH */ #endif /* NO_SHA */ diff --git a/wolfcrypt/src/sha256.c b/wolfcrypt/src/sha256.c old mode 100755 new mode 100644 index 2821166b4..f9f02b003 --- a/wolfcrypt/src/sha256.c +++ b/wolfcrypt/src/sha256.c @@ -56,6 +56,10 @@ int wc_Sha256Hash(const byte* data, word32 len, byte* out) #else /* else build without fips */ +#if !defined(NO_SHA256) && defined(WOLFSSL_TI_HASH) + /* #include included by wc_port.c */ +#else + #if !defined (ALIGN32) #if defined (__GNUC__) #define ALIGN32 __attribute__ ( (aligned (32))) @@ -1753,7 +1757,10 @@ static int Transform_AVX2(Sha256* sha256) } #endif /* HAVE_INTEL_AVX2 */ + #endif /* HAVE_FIPS */ +#endif /* WOLFSSL_TI_HAHS */ + #endif /* NO_SHA256 */ diff --git a/wolfcrypt/src/wc_port.c b/wolfcrypt/src/wc_port.c index 864ac2490..419033751 100644 --- a/wolfcrypt/src/wc_port.c +++ b/wolfcrypt/src/wc_port.c @@ -649,4 +649,8 @@ int UnLockMutex(wolfSSL_Mutex *m) #endif /* USE_WINDOWS_API */ #endif /* SINGLE_THREADED */ - + +#if defined(WOLFSSL_TI_CRYPT) || defined(WOLFSSL_TI_HASH) + #include /* initialize and Mutex for TI Crypt Engine */ + #include /* md5, sha1, sha224, sha256 */ +#endif diff --git a/wolfssl/internal.h b/wolfssl/internal.h index 65131fc05..99d3e9a95 100644 --- a/wolfssl/internal.h +++ b/wolfssl/internal.h @@ -88,6 +88,8 @@ #include #endif +#include + #ifdef WOLFSSL_CALLBACKS #include #include diff --git a/wolfssl/test.h b/wolfssl/test.h index 112c3301e..4c95d72c8 100644 --- a/wolfssl/test.h +++ b/wolfssl/test.h @@ -41,6 +41,13 @@ #include #include #include + struct hostent { + char *h_name; /* official name of host */ + char **h_aliases; /* alias list */ + int h_addrtype; /* host address type */ + int h_length; /* length of address */ + char **h_addr_list; /* list of addresses from name server */ + }; #define SOCKET_T int #else #include @@ -410,6 +417,8 @@ static INLINE void build_addr(SOCKADDR_IN_T* addr, const char* peer, #ifdef WOLFSSL_MDK_ARM int err; struct hostent* entry = gethostbyname(peer, &err); + #elif defined(WOLFSSL_TIRTOS) + struct hostent* entry = DNSGetHostByName(peer); #else struct hostent* entry = gethostbyname(peer); #endif @@ -609,7 +618,7 @@ static INLINE void tcp_listen(SOCKET_T* sockfd, word16* port, int useAnyAddr, if (listen(*sockfd, 5) != 0) err_sys("tcp listen failed"); } - #if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API) + #if (defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)) && !defined(WOLFSSL_TIRTOS) if (*port == 0) { socklen_t len = sizeof(addr); if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0) { @@ -667,7 +676,7 @@ static INLINE void udp_accept(SOCKET_T* sockfd, SOCKET_T* clientfd, if (bind(*sockfd, (const struct sockaddr*)&addr, sizeof(addr)) != 0) err_sys("tcp bind failed"); - #if defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API) + #if (defined(NO_MAIN_DRIVER) && !defined(USE_WINDOWS_API)) && !defined(WOLFSSL_TIRTOS) if (port == 0) { socklen_t len = sizeof(addr); if (getsockname(*sockfd, (struct sockaddr*)&addr, &len) == 0) { diff --git a/wolfssl/wolfcrypt/aes.h b/wolfssl/wolfcrypt/aes.h index 5b6ad6a83..a94ad0801 100644 --- a/wolfssl/wolfcrypt/aes.h +++ b/wolfssl/wolfcrypt/aes.h @@ -113,6 +113,9 @@ typedef struct Aes { word32 iv_ce [AES_BLOCK_SIZE /sizeof(word32)] ; int keylen ; #endif +#ifdef WOLFSSL_TI_CRYPT + int keylen ; +#endif } Aes; diff --git a/wolfssl/wolfcrypt/hash.h b/wolfssl/wolfcrypt/hash.h new file mode 100644 index 000000000..bbc2d8b95 --- /dev/null +++ b/wolfssl/wolfcrypt/hash.h @@ -0,0 +1,35 @@ +/* hash.h + * + * Copyright (C) 2006-2015 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 WOLF_CRYPT_HASH_H +#define WOLF_CRYPT_HASH_H + +#ifndef NO_MD5 +WOLFSSL_API void wc_Md5GetHash(Md5*, byte*); +#endif +#ifndef NO_SHA +WOLFSSL_API int wc_ShaGetHash(Sha*, byte*); +#endif +#ifndef NO_SHA256 +WOLFSSL_API int wc_Sha256GetHash(Sha256*, byte*); +#endif + +#endif diff --git a/wolfssl/wolfcrypt/include.am b/wolfssl/wolfcrypt/include.am index 2603f117c..1f3a726b8 100644 --- a/wolfssl/wolfcrypt/include.am +++ b/wolfssl/wolfcrypt/include.am @@ -20,6 +20,7 @@ nobase_include_HEADERS+= \ wolfssl/wolfcrypt/ge_operations.h \ wolfssl/wolfcrypt/error-crypt.h \ wolfssl/wolfcrypt/fips_test.h \ + wolfssl/wolfcrypt/hash.h \ wolfssl/wolfcrypt/hc128.h \ wolfssl/wolfcrypt/hmac.h \ wolfssl/wolfcrypt/integer.h \ @@ -52,5 +53,7 @@ nobase_include_HEADERS+= \ wolfssl/wolfcrypt/mpi_superclass.h noinst_HEADERS+= \ - wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h + wolfssl/wolfcrypt/port/pic32/pic32mz-crypt.h \ + wolfssl/wolfcrypt/port/ti/ti-hash.h \ + wolfssl/wolfcrypt/port/ti/ti-ccm.h diff --git a/wolfssl/wolfcrypt/md5.h b/wolfssl/wolfcrypt/md5.h index ba8d89400..d0b134b6a 100644 --- a/wolfssl/wolfcrypt/md5.h +++ b/wolfssl/wolfcrypt/md5.h @@ -37,7 +37,6 @@ extern "C" { #endif - /* in bytes */ enum { #ifdef STM32F2_HASH @@ -53,6 +52,8 @@ enum { #include "port/pic32/pic32mz-crypt.h" #endif +#ifndef WOLFSSL_TI_HASH + /* MD5 digest */ typedef struct Md5 { word32 buffLen; /* in bytes */ @@ -67,12 +68,15 @@ typedef struct Md5 { #endif } Md5; +#else /* WOLFSSL_TI_HASH */ + #include "wolfssl/wolfcrypt/port/ti/ti-hash.h" +#endif + WOLFSSL_API void wc_InitMd5(Md5*); WOLFSSL_API void wc_Md5Update(Md5*, const byte*, word32); WOLFSSL_API void wc_Md5Final(Md5*, byte*); WOLFSSL_API int wc_Md5Hash(const byte*, word32, byte*); - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/wolfssl/wolfcrypt/port/ti/ti-ccm.h b/wolfssl/wolfcrypt/port/ti/ti-ccm.h new file mode 100644 index 000000000..f0fb24799 --- /dev/null +++ b/wolfssl/wolfcrypt/port/ti/ti-ccm.h @@ -0,0 +1,40 @@ +/* port/ti/ti_ccm.c + * + * Copyright (C) 2006-2015 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 + */ + +#ifdef HAVE_CONFIG_H + #include +#endif + +#include + +#if defined(WOLFSSL_TI_CRYPT) || defined(WOLFSSL_TI_HASH) + +bool wolfSSL_TI_CCMInit(void) ; + +#ifndef SINGLE_THREADED +void wolfSSL_TI_lockCCM() ; +void wolfSSL_TI_unlockCCM() ; +#else +#define wolfSSL_TI_lockCCM() +#define wolfSSL_TI_unlockCCM() +#endif + +#endif diff --git a/wolfssl/wolfcrypt/port/ti/ti-hash.h b/wolfssl/wolfcrypt/port/ti/ti-hash.h new file mode 100644 index 000000000..505ccc498 --- /dev/null +++ b/wolfssl/wolfcrypt/port/ti/ti-hash.h @@ -0,0 +1,64 @@ +/* port/ti/ti-hash.h + * + * Copyright (C) 2006-2015 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 WOLF_CRYPT_TI_HASH_H +#define WOLF_CRYPT_TI_HASH_H + +#include + +#ifndef WOLFSSL_TI_INITBUFF +#define WOLFSSL_TI_INITBUFF 64 +#endif + +#define WOLFSSL_MAX_HASH_SIZE 64 + +typedef struct { + byte *msg ; + word32 used ; + word32 len ; + byte hash[WOLFSSL_MAX_HASH_SIZE] ; +} wolfssl_TI_Hash ; + + +#ifndef TI_HASH_TEST +#if !defined(NO_MD5) +typedef wolfssl_TI_Hash Md5 ; + +#endif +#if !defined(NO_SHA) +typedef wolfssl_TI_Hash Sha ; +#endif +#if !defined(NO_SHA256) +typedef wolfssl_TI_Hash Sha256 ; +#endif + +#if defined(HAVE_SHA224) +typedef wolfssl_TI_Hash Sha224 ; +#define SHA224_DIGEST_SIZE 28 + +WOLFSSL_API int wc_InitSha224(Sha224* sha224) ; +WOLFSSL_API int wc_Sha224Update(Sha224* sha224, const byte* data, word32 len) ; +WOLFSSL_API int wc_Sha224Final(Sha224* sha224, byte* hash) ; +WOLFSSL_API int wc_Sha224Hash(const byte* data, word32 len, byte*hash) ; + +#endif +#endif +#endif /* WOLF_CRYPT_TI_HASH_H */ diff --git a/wolfssl/wolfcrypt/settings.h b/wolfssl/wolfcrypt/settings.h index 57c404a54..77212841a 100644 --- a/wolfssl/wolfcrypt/settings.h +++ b/wolfssl/wolfcrypt/settings.h @@ -156,17 +156,6 @@ #define NO_FILESYSTEM #endif -#if defined(WOLFSSL_IAR_ARM) - #define NO_MAIN_DRIVER - #define SINGLE_THREADED - #define USE_CERT_BUFFERS_1024 - #define BENCH_EMBEDDED - #define NO_FILESYSTEM - #define NO_WRITEV - #define WOLFSSL_USER_IO - #define BENCH_EMBEDDED -#endif - #ifdef MICROCHIP_PIC32 /* #define WOLFSSL_MICROCHIP_PIC32MZ */ #define SIZEOF_LONG_LONG 8 diff --git a/wolfssl/wolfcrypt/sha.h b/wolfssl/wolfcrypt/sha.h index 9fdabed39..80a2c9832 100644 --- a/wolfssl/wolfcrypt/sha.h +++ b/wolfssl/wolfcrypt/sha.h @@ -51,6 +51,8 @@ enum { #include "port/pic32/pic32mz-crypt.h" #endif +#ifndef WOLFSSL_TI_HASH + /* Sha digest */ typedef struct Sha { word32 buffLen; /* in bytes */ @@ -64,6 +66,11 @@ typedef struct Sha { pic32mz_desc desc; /* Crypt Engine descripter */ #endif } Sha; + +#else /* WOLFSSL_TI_HASH */ + #include "wolfssl/wolfcrypt/port/ti/ti-hash.h" +#endif + #endif /* HAVE_FIPS */ WOLFSSL_API int wc_InitSha(Sha*); diff --git a/wolfssl/wolfcrypt/sha256.h b/wolfssl/wolfcrypt/sha256.h index 5dbe2d74b..7cf6d8677 100644 --- a/wolfssl/wolfcrypt/sha256.h +++ b/wolfssl/wolfcrypt/sha256.h @@ -51,6 +51,7 @@ enum { SHA256_PAD_SIZE = 56 }; +#ifndef WOLFSSL_TI_HASH /* Sha256 digest */ typedef struct Sha256 { @@ -64,6 +65,10 @@ typedef struct Sha256 { #endif } Sha256; +#else /* WOLFSSL_TI_HASH */ + #include "wolfssl/wolfcrypt/port/ti/ti-hash.h" +#endif + #endif /* HAVE_FIPS */ WOLFSSL_API int wc_InitSha256(Sha256*);