From 3b285c01ddd1e35ad3ddd8196a348e3af8f30e04 Mon Sep 17 00:00:00 2001 From: yougaliu Date: Mon, 10 Feb 2020 23:56:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1.=20=E6=96=B0=E5=A2=9E=E7=BD=91=E5=85=B3?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=8A=E7=A4=BA=E4=BE=8B=E3=80=82=202.=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=8C=E8=BF=9B=E5=88=B6=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E4=B8=8A=E6=8A=A5=E7=A4=BA=E4=BE=8B=E3=80=82=203.=20IoT=20Expl?= =?UTF-8?q?orer=E5=BC=80=E6=94=BE=E8=87=AA=E5=AE=9A=E4=B9=89topic=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E7=89=B9=E6=80=A7=EF=BC=8C=E5=90=8C=E6=AD=A5IoT=20Hub?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0MQTT=E7=A4=BA=E4=BE=8B=E3=80=82=204.=20OTA?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=94=AF=E6=8C=81=E6=98=AF=E5=90=A6=E4=BD=BF?= =?UTF-8?q?=E8=83=BDHTTPS=E7=BC=96=E8=AF=91=E9=85=8D=E7=BD=AE=E3=80=82=205?= =?UTF-8?q?.=20=E4=BB=A3=E7=A0=81=E6=A0=BC=E5=BC=8F=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E3=80=82=206.=20=E6=95=B0=E6=8D=AE=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E5=92=8C=E6=99=BA=E8=83=BD=E7=81=AF=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=E5=AE=8C=E5=96=84=E3=80=82=207.=20=E7=89=88=E6=9C=AC=E6=9B=B4?= =?UTF-8?q?=E6=94=B9=E4=B8=BA3.1.1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 33 +- Makefile | 6 +- device_info.json | 12 +- external_libs/mbedtls/library/aes.c | 787 +-- external_libs/mbedtls/library/aesni.c | 50 +- external_libs/mbedtls/library/arc4.c | 57 +- external_libs/mbedtls/library/asn1parse.c | 289 +- external_libs/mbedtls/library/asn1write.c | 176 +- external_libs/mbedtls/library/base64.c | 136 +- external_libs/mbedtls/library/bignum.c | 1134 ++--- external_libs/mbedtls/library/blowfish.c | 215 +- external_libs/mbedtls/library/camellia.c | 842 ++-- external_libs/mbedtls/library/ccm.c | 174 +- external_libs/mbedtls/library/certs.c | 342 +- external_libs/mbedtls/library/cipher.c | 577 +-- external_libs/mbedtls/library/cipher_wrap.c | 143 +- external_libs/mbedtls/library/cmac.c | 468 +- external_libs/mbedtls/library/ctr_drbg.c | 271 +- external_libs/mbedtls/library/debug.c | 129 +- external_libs/mbedtls/library/des.c | 450 +- external_libs/mbedtls/library/dhm.c | 305 +- external_libs/mbedtls/library/ecdh.c | 138 +- external_libs/mbedtls/library/ecdsa.c | 165 +- external_libs/mbedtls/library/ecjpake.c | 248 +- external_libs/mbedtls/library/ecp.c | 1065 ++-- external_libs/mbedtls/library/ecp_curves.c | 385 +- external_libs/mbedtls/library/entropy.c | 219 +- external_libs/mbedtls/library/entropy_poll.c | 100 +- external_libs/mbedtls/library/error.c | 415 +- external_libs/mbedtls/library/gcm.c | 869 ++-- external_libs/mbedtls/library/havege.c | 20 +- external_libs/mbedtls/library/hmac_drbg.c | 170 +- external_libs/mbedtls/library/md.c | 216 +- external_libs/mbedtls/library/md2.c | 111 +- external_libs/mbedtls/library/md4.c | 102 +- external_libs/mbedtls/library/md5.c | 103 +- external_libs/mbedtls/library/md_wrap.c | 50 +- .../mbedtls/library/memory_buffer_alloc.c | 259 +- external_libs/mbedtls/library/net_sockets.c | 247 +- external_libs/mbedtls/library/oid.c | 58 +- external_libs/mbedtls/library/padlock.c | 39 +- external_libs/mbedtls/library/pem.c | 193 +- external_libs/mbedtls/library/pk.c | 235 +- external_libs/mbedtls/library/pk_wrap.c | 210 +- external_libs/mbedtls/library/pkcs11.c | 121 +- external_libs/mbedtls/library/pkcs12.c | 178 +- external_libs/mbedtls/library/pkcs5.c | 256 +- external_libs/mbedtls/library/pkparse.c | 839 ++-- external_libs/mbedtls/library/pkwrite.c | 230 +- external_libs/mbedtls/library/platform.c | 73 +- external_libs/mbedtls/library/ripemd160.c | 112 +- external_libs/mbedtls/library/rsa.c | 978 ++-- external_libs/mbedtls/library/sha1.c | 80 +- external_libs/mbedtls/library/sha256.c | 205 +- external_libs/mbedtls/library/sha512.c | 228 +- external_libs/mbedtls/library/ssl_cache.c | 98 +- .../mbedtls/library/ssl_ciphersuites.c | 2065 ++++---- external_libs/mbedtls/library/ssl_cli.c | 2098 ++++---- external_libs/mbedtls/library/ssl_cookie.c | 107 +- external_libs/mbedtls/library/ssl_srv.c | 2320 ++++----- external_libs/mbedtls/library/ssl_ticket.c | 218 +- external_libs/mbedtls/library/ssl_tls.c | 4369 ++++++++--------- external_libs/mbedtls/library/threading.c | 32 +- external_libs/mbedtls/library/timing.c | 133 +- external_libs/mbedtls/library/version.c | 2 +- .../mbedtls/library/version_features.c | 17 +- external_libs/mbedtls/library/x509.c | 621 ++- external_libs/mbedtls/library/x509_create.c | 130 +- external_libs/mbedtls/library/x509_crl.c | 391 +- external_libs/mbedtls/library/x509_crt.c | 1364 +++-- external_libs/mbedtls/library/x509_csr.c | 178 +- external_libs/mbedtls/library/x509write_crt.c | 188 +- external_libs/mbedtls/library/x509write_csr.c | 110 +- external_libs/mbedtls/library/xtea.c | 120 +- include/config.h | 11 +- .../exports/qcloud_iot_export_data_template.h | 28 +- include/exports/qcloud_iot_export_gateway.h | 158 + include/lite-utils.h | 2 + include/qcloud_iot_export.h | 16 +- make.settings | 10 + .../at_device/esp8266/at_device_esp8266.c | 697 ++- platform/os/freertos/HAL_AT_UART_freertos.c | 40 +- platform/os/freertos/HAL_Device_freertos.c | 122 +- platform/os/freertos/HAL_OS_freertos.c | 66 +- platform/os/freertos/HAL_TCP_lwip.c | 67 +- platform/os/freertos/HAL_Timer_freertos.c | 70 +- platform/os/freertos/HAL_UDP_lwip.c | 38 +- platform/os/linux/HAL_AT_UART_linux.c | 302 +- platform/os/linux/HAL_Device_linux.c | 835 ++-- platform/os/linux/HAL_Log_linux.c | 24 +- platform/os/linux/HAL_OS_linux.c | 129 +- platform/os/linux/HAL_TCP_linux.c | 59 +- platform/os/linux/HAL_Timer_linux.c | 51 +- platform/os/linux/HAL_UDP_linux.c | 30 +- platform/os/nonos/HAL_AT_UART_nonos.c | 40 +- platform/os/nonos/HAL_Device_nonos.c | 124 +- platform/os/nonos/HAL_OS_nonos.c | 6 +- platform/os/nonos/HAL_Timer_nonos.c | 58 +- platform/os/rtthread/HAL_Device_rtthread.c | 122 +- platform/os/rtthread/HAL_OS_rtthread.c | 50 +- platform/os/rtthread/HAL_TCP_rtthread.c | 207 +- .../os/rtthread/HAL_TLS_mbedtls_rtthread.c | 110 +- platform/os/rtthread/HAL_Timer_rtthread.c | 66 +- platform/os/windows/HAL_AT_UART_win.c | 8 +- platform/os/windows/HAL_Device_win.c | 746 +-- platform/os/windows/HAL_Log_win.c | 24 +- platform/os/windows/HAL_OS_win.c | 72 +- platform/os/windows/HAL_TCP_win.c | 141 +- platform/os/windows/HAL_Timer_win.c | 69 +- platform/os/windows/HAL_UDP_win.c | 32 +- platform/tls/mbedtls/HAL_DTLS_mbedtls.c | 220 +- platform/tls/mbedtls/HAL_TLS_mbedtls.c | 96 +- samples/CMakeLists.txt | 16 + samples/Makefile | 26 +- samples/data_template/action_config.c | 22 +- samples/data_template/data_config.c | 6 +- samples/data_template/data_template_sample.c | 606 +-- samples/data_template/events_config.c | 46 +- samples/gateway/gateway_sample.c | 412 ++ samples/gateway/sub_dev001.c | 685 +++ samples/mqtt/mqtt_sample.c | 318 ++ samples/ota/ota_mqtt_sample.c | 663 +-- samples/raw_data/raw_data_sample.c | 360 ++ .../scenarized/light_data_template_sample.c | 868 ++-- sdk_src/CMakeLists.txt | 9 +- sdk_src/internal_inc/mqtt_client.h | 2 +- sdk_src/network/at_socket/at_client.c | 1245 +++-- sdk_src/network/at_socket/at_socket_inf.c | 550 +-- sdk_src/network/at_socket/at_utils.c | 482 +- sdk_src/network/at_socket/network_at_tcp.c | 159 +- sdk_src/network/network_interface.c | 30 +- sdk_src/network/socket/network_socket.c | 52 +- sdk_src/network/tls/network_tls.c | 38 +- sdk_src/protocol/http/utils_httpc.c | 198 +- sdk_src/protocol/mqtt/mqtt_client.c | 276 +- sdk_src/protocol/mqtt/mqtt_client_common.c | 304 +- sdk_src/protocol/mqtt/mqtt_client_connect.c | 81 +- sdk_src/protocol/mqtt/mqtt_client_net.c | 10 +- sdk_src/protocol/mqtt/mqtt_client_publish.c | 86 +- sdk_src/protocol/mqtt/mqtt_client_subscribe.c | 32 +- .../protocol/mqtt/mqtt_client_unsubscribe.c | 27 +- sdk_src/protocol/mqtt/mqtt_client_yield.c | 63 +- .../data_template/data_template_aciton.c | 438 +- .../data_template/data_template_client.c | 943 ++-- .../data_template_client_common.c | 5 +- .../data_template/data_template_client_json.c | 217 +- .../data_template_client_manager.c | 261 +- .../data_template/data_template_event.c | 624 +-- sdk_src/services/gateway/gateway_api.c | 303 ++ sdk_src/services/gateway/gateway_common.c | 351 ++ sdk_src/services/ota/ota_client.c | 135 +- sdk_src/services/ota/ota_fetch.c | 47 +- sdk_src/services/ota/ota_lib.c | 144 +- sdk_src/services/ota/ota_mqtt.c | 20 +- sdk_src/services/system/system_mqtt.c | 66 +- sdk_src/utils/json_parser.c | 52 +- sdk_src/utils/json_token.c | 112 +- sdk_src/utils/qcloud_iot_ca.c | 18 +- sdk_src/utils/qcloud_iot_device.c | 52 +- sdk_src/utils/qcloud_iot_log.c | 50 +- sdk_src/utils/string_utils.c | 20 +- sdk_src/utils/utils_aes.c | 822 ++-- sdk_src/utils/utils_base64.c | 161 +- sdk_src/utils/utils_getopt.c | 132 +- sdk_src/utils/utils_hmac.c | 12 +- sdk_src/utils/utils_list.c | 1 - sdk_src/utils/utils_ringbuff.c | 115 +- sdk_src/utils/utils_timer.c | 21 +- tools/build_scripts/parse_make_settings.mk | 5 + tools/cmake_scripts/config.h.in | 3 + 170 files changed, 24740 insertions(+), 23082 deletions(-) create mode 100644 include/exports/qcloud_iot_export_gateway.h create mode 100644 samples/gateway/gateway_sample.c create mode 100644 samples/gateway/sub_dev001.c create mode 100644 samples/mqtt/mqtt_sample.c create mode 100644 samples/raw_data/raw_data_sample.c create mode 100644 sdk_src/services/gateway/gateway_api.c create mode 100644 sdk_src/services/gateway/gateway_common.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 942b942..f72115a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,8 +18,14 @@ set(PLATFORM "linux") #set(COMPILE_TOOLS "MSVC") #set(PLATFORM "windows") +# 是否使能网关功能 +set(FEATURE_GATEWAY_ENABLED OFF) + +# 是否使能多线程 +set(FEATURE_MULTITHREAD_ENABLED OFF) + # 是否打开数据模板事件上报功能 -set(FEATURE_EVENT_POST_ENABLED ON) +set(FEATURE_EVENT_POST_ENABLED OFF) # 是否打开数据模板行为功能 set(FEATURE_ACTION_ENABLED ON) @@ -36,6 +42,9 @@ set(FEATURE_AUTH_WITH_NOTLS OFF) # 是否打开代码中获取设备信息功能,OFF时将从device_info.json中读取设备信息 set(FEATURE_DEBUG_DEV_INFO_USED OFF) +# 是否使用HTTPS下载固件 +set(FEATURE_OTA_USE_HTTPS ON) + # 使用SDK AT组件实现通用TCP模组网络读写需要配置 --->begin # 是否打开AT模组TCP功能 set(FEATURE_AT_TCP_ENABLED OFF) @@ -67,9 +76,9 @@ endif() if(CMAKE_COMPILER_IS_GNUCC) if(${BUILD_TYPE} STREQUAL "release") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror -Wall -Wno-error=sign-compare -Wno-error=format -std=gnu99 -Os -pthread") # 编译选项 elseif(${BUILD_TYPE} STREQUAL "debug") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os -pthread") # 编译选项 + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Werror -Wall -Wno-error=sign-compare -Wno-error=format -std=gnu99 -Os -pthread") # 编译选项 endif() endif() @@ -86,7 +95,7 @@ endif() if(${BUILD_TYPE} STREQUAL "release") option(IOT_DEBUG "Enable IOT_DEBUG" OFF) elseif(${BUILD_TYPE} STREQUAL "debug") - option(IOT_DEBUG "Enable IOT_DEBUG" ON) + option(IOT_DEBUG "Enable IOT_DEBUG" OFF) else() message(FATAL_ERROR "INVAILD BUILD_TYPE:${BUILD_TYPE}!") endif() @@ -103,15 +112,29 @@ else() endif() if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") - option(OTA_MQTT_CHANNEL "Enable TA_MQTT_CHANNEL" ON) + option(OTA_MQTT_CHANNEL "Enable OTA_MQTT_CHANNEL" ON) endif() +option(GATEWAY_ENABLED "Enable GATEWAY" ${FEATURE_GATEWAY_ENABLED}) option(AUTH_WITH_NOTLS "Enable AUTH_WITH_NOTLS" ${FEATURE_AUTH_WITH_NOTLS}) option(EVENT_POST_ENABLED "Enable EVENT_POST" ${FEATURE_EVENT_POST_ENABLED}) option(ACTION_ENABLED "Enable ACTION" ${FEATURE_ACTION_ENABLED}) option(AT_TCP_ENABLED "Enable AT_TCP" ${FEATURE_AT_TCP_ENABLED}) option(DEBUG_DEV_INFO_USED "Enable DEBUG_DEV_INFO_USED" ${FEATURE_DEBUG_DEV_INFO_USED}) + +if(${FEATURE_AUTH_WITH_NOTLS} STREQUAL "ON" ) + option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" OFF) +else() + option(OTA_USE_HTTPS "Enable OTA_USE_HTTPS" ${FEATURE_OTA_USE_HTTPS}) +endif() + +if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON") + option(MULTITHREAD_ENABLED "Enable MULTITHREAD" ON) +else() + option(MULTITHREAD_ENABLED "Enable MULTITHREAD" ${FEATURE_MULTITHREAD_ENABLED}) +endif() + if(AT_TCP_ENABLED STREQUAL "ON") option(AT_UART_RECV_IRQ "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_UART_RECV_IRQ}) option(AT_OS_USED "Enable AT_UART_RECV_IRQ" ${FEATURE_AT_OS_USED}) diff --git a/Makefile b/Makefile index 7afc960..d9db38b 100644 --- a/Makefile +++ b/Makefile @@ -70,6 +70,10 @@ $(call CompLib_Map, AT_TCP_ENABLED, \ $(SRC_DIR)/network/at_socket \ ) +$(call CompLib_Map, GATEWAY_ENABLED, \ + $(SRC_DIR)/services/gateway \ +) + IOTSDK_SRC_FILES := \ $(foreach v, \ @@ -144,7 +148,7 @@ $(call CompInc_Map, AT_TCP_ENABLED, \ $(PLATFORM_DIR)/at_device/$(PLATFORM_AT_DEV) \ ) -CFLAGS += -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os ${IOTSDK_INCLUDE_FILES} -pthread -DFORCE_SSL_VERIFY +CFLAGS += -Werror -Wall -Wno-error=sign-compare -Wno-error=format -Os ${IOTSDK_INCLUDE_FILES} -std=gnu99 -pthread -DFORCE_SSL_VERIFY #CFLAGS += -DMQTT_RMDUP_MSG_ENABLED diff --git a/device_info.json b/device_info.json index de23358..6c9150a 100644 --- a/device_info.json +++ b/device_info.json @@ -15,7 +15,15 @@ }, "subDev":{ - "sub_productId":"YOUR_SUBDEV_PRODUCT_ID", - "sub_devName":"YOUR_SUBDEV_DEVICE_NAME" + "subdev_num":6, + "subdev_list": + [ + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev001"}, + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev002"}, + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev003"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test001"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test002"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test003"} + ] } } \ No newline at end of file diff --git a/external_libs/mbedtls/library/aes.c b/external_libs/mbedtls/library/aes.c index a186dee..a251cce 100644 --- a/external_libs/mbedtls/library/aes.c +++ b/external_libs/mbedtls/library/aes.c @@ -55,8 +55,10 @@ #if !defined(MBEDTLS_AES_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -91,8 +93,7 @@ static int aes_padlock_ace = -1; /* * Forward S-box */ -static const unsigned char FSb[256] = -{ +static const unsigned char FSb[256] = { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, @@ -218,8 +219,7 @@ static const uint32_t FT3[256] = { FT }; /* * Reverse S-box */ -static const unsigned char RSb[256] = -{ +static const unsigned char RSb[256] = { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, @@ -345,8 +345,7 @@ static const uint32_t RT3[256] = { RT }; /* * Round constants */ -static const uint32_t RCON[10] = -{ +static const uint32_t RCON[10] = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x0000001B, 0x00000036 @@ -395,8 +394,7 @@ static void aes_gen_tables( void ) /* * compute pow and log tables over GF(2^8) */ - for( i = 0, x = 1; i < 256; i++ ) - { + for ( i = 0, x = 1; i < 256; i++ ) { pow[i] = x; log[x] = i; x = ( x ^ XTIME( x ) ) & 0xFF; @@ -405,8 +403,7 @@ static void aes_gen_tables( void ) /* * calculate the round constants */ - for( i = 0, x = 1; i < 10; i++ ) - { + for ( i = 0, x = 1; i < 10; i++ ) { RCON[i] = (uint32_t) x; x = XTIME( x ) & 0xFF; } @@ -417,14 +414,17 @@ static void aes_gen_tables( void ) FSb[0x00] = 0x63; RSb[0x63] = 0x00; - for( i = 1; i < 256; i++ ) - { + for ( i = 1; i < 256; i++ ) { x = pow[255 - log[i]]; - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + y = x; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; x ^= y ^ 0x63; FSb[i] = (unsigned char) x; @@ -434,8 +434,7 @@ static void aes_gen_tables( void ) /* * generate the forward and reverse tables */ - for( i = 0; i < 256; i++ ) - { + for ( i = 0; i < 256; i++ ) { x = FSb[i]; y = XTIME( x ) & 0xFF; z = ( y ^ x ) & 0xFF; @@ -471,7 +470,7 @@ void mbedtls_aes_init( mbedtls_aes_context *ctx ) void mbedtls_aes_free( mbedtls_aes_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_aes_context ) ); @@ -482,59 +481,61 @@ void mbedtls_aes_free( mbedtls_aes_context *ctx ) */ #if !defined(MBEDTLS_AES_SETKEY_ENC_ALT) int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { unsigned int i; uint32_t *RK; #if !defined(MBEDTLS_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { + if ( aes_init_done == 0 ) { aes_gen_tables(); aes_init_done = 1; } #endif - switch( keybits ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + switch ( keybits ) { + case 128: + ctx->nr = 10; + break; + case 192: + ctx->nr = 12; + break; + case 256: + ctx->nr = 14; + break; + default : + return ( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); } #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) + if ( aes_padlock_ace == -1 ) aes_padlock_ace = mbedtls_padlock_has_support( MBEDTLS_PADLOCK_ACE ); - if( aes_padlock_ace ) + if ( aes_padlock_ace ) ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16( ctx->buf ); else #endif - ctx->rk = RK = ctx->buf; + ctx->rk = RK = ctx->buf; #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) - return( mbedtls_aesni_setkey_enc( (unsigned char *) ctx->rk, key, keybits ) ); + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) + return ( mbedtls_aesni_setkey_enc( (unsigned char *) ctx->rk, key, keybits ) ); #endif - for( i = 0; i < ( keybits >> 5 ); i++ ) - { + for ( i = 0; i < ( keybits >> 5 ); i++ ) { GET_UINT32_LE( RK[i], key, i << 2 ); } - switch( ctx->nr ) - { + switch ( ctx->nr ) { case 10: - for( i = 0; i < 10; i++, RK += 4 ) - { + for ( i = 0; i < 10; i++, RK += 4 ) { RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); RK[5] = RK[1] ^ RK[4]; RK[6] = RK[2] ^ RK[5]; @@ -544,13 +545,12 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, case 12: - for( i = 0; i < 8; i++, RK += 6 ) - { + for ( i = 0; i < 8; i++, RK += 6 ) { RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); RK[7] = RK[1] ^ RK[6]; RK[8] = RK[2] ^ RK[7]; @@ -562,23 +562,22 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, case 14: - for( i = 0; i < 7; i++, RK += 8 ) - { + for ( i = 0; i < 7; i++, RK += 8 ) { RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); RK[9] = RK[1] ^ RK[8]; RK[10] = RK[2] ^ RK[9]; RK[11] = RK[3] ^ RK[10]; RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); RK[13] = RK[5] ^ RK[12]; RK[14] = RK[6] ^ RK[13]; @@ -587,7 +586,7 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, break; } - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_AES_SETKEY_ENC_ALT */ @@ -596,7 +595,7 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, */ #if !defined(MBEDTLS_AES_SETKEY_DEC_ALT) int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int i, j, ret; mbedtls_aes_context cty; @@ -606,26 +605,25 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, mbedtls_aes_init( &cty ); #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_PADLOCK_ALIGN16) - if( aes_padlock_ace == -1 ) + if ( aes_padlock_ace == -1 ) aes_padlock_ace = mbedtls_padlock_has_support( MBEDTLS_PADLOCK_ACE ); - if( aes_padlock_ace ) + if ( aes_padlock_ace ) ctx->rk = RK = MBEDTLS_PADLOCK_ALIGN16( ctx->buf ); else #endif - ctx->rk = RK = ctx->buf; + ctx->rk = RK = ctx->buf; /* Also checks keybits */ - if( ( ret = mbedtls_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) + if ( ( ret = mbedtls_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) goto exit; ctx->nr = cty.nr; #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) - { + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) { mbedtls_aesni_inverse_key( (unsigned char *) ctx->rk, - (const unsigned char *) cty.rk, ctx->nr ); + (const unsigned char *) cty.rk, ctx->nr ); goto exit; } #endif @@ -637,10 +635,8 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, *RK++ = *SK++; *RK++ = *SK++; - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { + for ( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) { + for ( j = 0; j < 4; j++, SK++ ) { *RK++ = RT0[ FSb[ ( *SK ) & 0xFF ] ] ^ RT1[ FSb[ ( *SK >> 8 ) & 0xFF ] ] ^ RT2[ FSb[ ( *SK >> 16 ) & 0xFF ] ] ^ @@ -656,7 +652,7 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, exit: mbedtls_aes_free( &cty ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_AES_SETKEY_DEC_ALT */ @@ -719,13 +715,16 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -733,28 +732,28 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); @@ -776,13 +775,16 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -790,28 +792,28 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); @@ -824,20 +826,19 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, * AES-ECB block encryption/decryption */ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) - return( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) ); + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_AES ) ) + return ( mbedtls_aesni_crypt_ecb( ctx, mode, input, output ) ); #endif #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86) - if( aes_padlock_ace ) - { - if( mbedtls_padlock_xcryptecb( ctx, mode, input, output ) == 0 ) - return( 0 ); + if ( aes_padlock_ace ) { + if ( mbedtls_padlock_xcryptecb( ctx, mode, input, output ) == 0 ) + return ( 0 ); // If padlock data misaligned, we just fall back to // unaccelerated mode @@ -845,12 +846,12 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, } #endif - if( mode == MBEDTLS_AES_ENCRYPT ) + if ( mode == MBEDTLS_AES_ENCRYPT ) mbedtls_aes_encrypt( ctx, input, output ); else mbedtls_aes_decrypt( ctx, input, output ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -858,23 +859,22 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, * AES-CBC buffer encryption/decryption */ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; - if( length % 16 ) - return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + if ( length % 16 ) + return ( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); #if defined(MBEDTLS_PADLOCK_C) && defined(MBEDTLS_HAVE_X86) - if( aes_padlock_ace ) - { - if( mbedtls_padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) - return( 0 ); + if ( aes_padlock_ace ) { + if ( mbedtls_padlock_xcryptcbc( ctx, mode, length, iv, input, output ) == 0 ) + return ( 0 ); // If padlock data misaligned, we just fall back to // unaccelerated mode @@ -882,14 +882,12 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, } #endif - if( mode == MBEDTLS_AES_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_AES_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 16 ); mbedtls_aes_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 16 ); @@ -898,12 +896,9 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, output += 16; length -= 16; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_aes_crypt_ecb( ctx, mode, output, output ); @@ -915,7 +910,7 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -924,21 +919,19 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, * AES-CFB128 buffer encryption/decryption */ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int c; size_t n = *iv_off; - if( mode == MBEDTLS_AES_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) + if ( mode == MBEDTLS_AES_DECRYPT ) { + while ( length-- ) { + if ( n == 0 ) mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); c = *input++; @@ -947,12 +940,9 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, n = ( n + 1 ) & 0x0F; } - } - else - { - while( length-- ) - { - if( n == 0 ) + } else { + while ( length-- ) { + if ( n == 0 ) mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); @@ -963,39 +953,38 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, *iv_off = n; - return( 0 ); + return ( 0 ); } /* * AES-CFB8 buffer encryption/decryption */ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { unsigned char c; unsigned char ov[17]; - while( length-- ) - { + while ( length-- ) { memcpy( ov, iv, 16 ); mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); - if( mode == MBEDTLS_AES_DECRYPT ) + if ( mode == MBEDTLS_AES_DECRYPT ) ov[16] = *input; c = *output++ = (unsigned char)( iv[0] ^ *input++ ); - if( mode == MBEDTLS_AES_ENCRYPT ) + if ( mode == MBEDTLS_AES_ENCRYPT ) ov[16] = c; memcpy( iv, ov + 1, 16 ); } - return( 0 ); + return ( 0 ); } #endif /*MBEDTLS_CIPHER_MODE_CFB */ @@ -1004,23 +993,22 @@ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, * AES-CTR buffer encryption/decryption */ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ) { int c, i; size_t n = *nc_off; - while( length-- ) - { - if( n == 0 ) { + while ( length-- ) { + if ( n == 0 ) { mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, nonce_counter, stream_block ); - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) + for ( i = 16; i > 0; i-- ) + if ( ++nonce_counter[i - 1] != 0 ) break; } c = *input++; @@ -1031,7 +1019,7 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, *nc_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -1043,45 +1031,65 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, * * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } +static const unsigned char aes_test_ecb_dec[3][16] = { + { + 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, + 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 + }, + { + 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, + 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 + }, + { + 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, + 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE + } }; -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } +static const unsigned char aes_test_ecb_enc[3][16] = { + { + 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, + 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F + }, + { + 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, + 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 + }, + { + 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, + 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 + } }; #if defined(MBEDTLS_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } +static const unsigned char aes_test_cbc_dec[3][16] = { + { + 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, + 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 + }, + { + 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, + 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B + }, + { + 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, + 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 + } }; -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } +static const unsigned char aes_test_cbc_enc[3][16] = { + { + 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, + 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D + }, + { + 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, + 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 + }, + { + 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, + 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 + } }; #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -1091,27 +1099,30 @@ static const unsigned char aes_test_cbc_enc[3][16] = * * http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf */ -static const unsigned char aes_test_cfb128_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C }, - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B }, - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } +static const unsigned char aes_test_cfb128_key[3][32] = { + { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + }, + { + 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, + 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, + 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B + }, + { + 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, + 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, + 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, + 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 + } }; -static const unsigned char aes_test_cfb128_iv[16] = -{ +static const unsigned char aes_test_cfb128_iv[16] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F }; -static const unsigned char aes_test_cfb128_pt[64] = -{ +static const unsigned char aes_test_cfb128_pt[64] = { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A, 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, @@ -1122,32 +1133,37 @@ static const unsigned char aes_test_cfb128_pt[64] = 0xAD, 0x2B, 0x41, 0x7B, 0xE6, 0x6C, 0x37, 0x10 }; -static const unsigned char aes_test_cfb128_ct[3][64] = -{ - { 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, - 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, - 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, - 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, - 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, - 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, - 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, - 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 }, - { 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, - 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, - 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, - 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, - 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, - 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, - 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, - 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF }, - { 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, - 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, - 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, - 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, - 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, - 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, - 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, - 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 } +static const unsigned char aes_test_cfb128_ct[3][64] = { + { + 0x3B, 0x3F, 0xD9, 0x2E, 0xB7, 0x2D, 0xAD, 0x20, + 0x33, 0x34, 0x49, 0xF8, 0xE8, 0x3C, 0xFB, 0x4A, + 0xC8, 0xA6, 0x45, 0x37, 0xA0, 0xB3, 0xA9, 0x3F, + 0xCD, 0xE3, 0xCD, 0xAD, 0x9F, 0x1C, 0xE5, 0x8B, + 0x26, 0x75, 0x1F, 0x67, 0xA3, 0xCB, 0xB1, 0x40, + 0xB1, 0x80, 0x8C, 0xF1, 0x87, 0xA4, 0xF4, 0xDF, + 0xC0, 0x4B, 0x05, 0x35, 0x7C, 0x5D, 0x1C, 0x0E, + 0xEA, 0xC4, 0xC6, 0x6F, 0x9F, 0xF7, 0xF2, 0xE6 + }, + { + 0xCD, 0xC8, 0x0D, 0x6F, 0xDD, 0xF1, 0x8C, 0xAB, + 0x34, 0xC2, 0x59, 0x09, 0xC9, 0x9A, 0x41, 0x74, + 0x67, 0xCE, 0x7F, 0x7F, 0x81, 0x17, 0x36, 0x21, + 0x96, 0x1A, 0x2B, 0x70, 0x17, 0x1D, 0x3D, 0x7A, + 0x2E, 0x1E, 0x8A, 0x1D, 0xD5, 0x9B, 0x88, 0xB1, + 0xC8, 0xE6, 0x0F, 0xED, 0x1E, 0xFA, 0xC4, 0xC9, + 0xC0, 0x5F, 0x9F, 0x9C, 0xA9, 0x83, 0x4F, 0xA0, + 0x42, 0xAE, 0x8F, 0xBA, 0x58, 0x4B, 0x09, 0xFF + }, + { + 0xDC, 0x7E, 0x84, 0xBF, 0xDA, 0x79, 0x16, 0x4B, + 0x7E, 0xCD, 0x84, 0x86, 0x98, 0x5D, 0x38, 0x60, + 0x39, 0xFF, 0xED, 0x14, 0x3B, 0x28, 0xB1, 0xC8, + 0x32, 0x11, 0x3C, 0x63, 0x31, 0xE5, 0x40, 0x7B, + 0xDF, 0x10, 0x13, 0x24, 0x15, 0xE5, 0x4B, 0x92, + 0xA1, 0x3E, 0xD0, 0xA8, 0x26, 0x7A, 0xE2, 0xF9, + 0x75, 0xA3, 0x85, 0x74, 0x1A, 0xB9, 0xCE, 0xF8, + 0x20, 0x31, 0x62, 0x3D, 0x55, 0xB1, 0xE4, 0x71 + } }; #endif /* MBEDTLS_CIPHER_MODE_CFB */ @@ -1158,60 +1174,80 @@ static const unsigned char aes_test_cfb128_ct[3][64] = * http://www.faqs.org/rfcs/rfc3686.html */ -static const unsigned char aes_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } +static const unsigned char aes_test_ctr_key[3][16] = { + { + 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, + 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E + }, + { + 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, + 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 + }, + { + 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, + 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC + } }; -static const unsigned char aes_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } +static const unsigned char aes_test_ctr_nonce_counter[3][16] = { + { + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, + 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, + 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 + } }; -static const unsigned char aes_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } +static const unsigned char aes_test_ctr_pt[3][48] = { + { + 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, + 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 + }, + + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F + }, + + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23 + } }; -static const unsigned char aes_test_ctr_ct[3][48] = -{ - { 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, - 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 }, - { 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, - 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, - 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, - 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 }, - { 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, - 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, - 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, - 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, - 0x25, 0xB2, 0x07, 0x2F } +static const unsigned char aes_test_ctr_ct[3][48] = { + { + 0xE4, 0x09, 0x5D, 0x4F, 0xB7, 0xA7, 0xB3, 0x79, + 0x2D, 0x61, 0x75, 0xA3, 0x26, 0x13, 0x11, 0xB8 + }, + { + 0x51, 0x04, 0xA1, 0x06, 0x16, 0x8A, 0x72, 0xD9, + 0x79, 0x0D, 0x41, 0xEE, 0x8E, 0xDA, 0xD3, 0x88, + 0xEB, 0x2E, 0x1E, 0xFC, 0x46, 0xDA, 0x57, 0xC8, + 0xFC, 0xE6, 0x30, 0xDF, 0x91, 0x41, 0xBE, 0x28 + }, + { + 0xC1, 0xCF, 0x48, 0xA8, 0x9F, 0x2F, 0xFD, 0xD9, + 0xCF, 0x46, 0x52, 0xE9, 0xEF, 0xDB, 0x72, 0xD7, + 0x45, 0x40, 0xA4, 0x2B, 0xDE, 0x6D, 0x78, 0x36, + 0xD5, 0x9A, 0x5C, 0xEA, 0xAE, 0xF3, 0x10, 0x53, + 0x25, 0xB2, 0x07, 0x2F + } }; static const int aes_test_ctr_len[3] = - { 16, 32, 36 }; +{ 16, 32, 36 }; #endif /* MBEDTLS_CIPHER_MODE_CTR */ /* @@ -1244,43 +1280,37 @@ int mbedtls_aes_self_test( int verbose ) /* * ECB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-ECB-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); memset( buf, 0, 16 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { mbedtls_aes_setkey_dec( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) + for ( j = 0; j < 10000; j++ ) mbedtls_aes_crypt_ecb( &ctx, v, buf, buf ); - if( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ecb_dec[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { mbedtls_aes_setkey_enc( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) + for ( j = 0; j < 10000; j++ ) mbedtls_aes_crypt_ecb( &ctx, v, buf, buf ); - if( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ecb_enc[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1288,52 +1318,46 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CBC) /* * CBC mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-CBC-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); - memset( iv , 0, 16 ); + memset( iv, 0, 16 ); memset( prv, 0, 16 ); memset( buf, 0, 16 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { mbedtls_aes_setkey_dec( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) + for ( j = 0; j < 10000; j++ ) mbedtls_aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); - if( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_cbc_dec[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { mbedtls_aes_setkey_enc( &ctx, key, 128 + u * 64 ); - for( j = 0; j < 10000; j++ ) - { + for ( j = 0; j < 10000; j++ ) { unsigned char tmp[16]; mbedtls_aes_crypt_cbc( &ctx, v, 16, iv, buf, buf ); @@ -1343,9 +1367,8 @@ int mbedtls_aes_self_test( int verbose ) memcpy( buf, tmp, 16 ); } - if( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( prv, aes_test_cbc_enc[u], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1353,11 +1376,11 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -1365,14 +1388,13 @@ int mbedtls_aes_self_test( int verbose ) /* * CFB128 mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-CFB128-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, aes_test_cfb128_iv, 16 ); memcpy( key, aes_test_cfb128_key[u], 16 + u * 8 ); @@ -1380,28 +1402,23 @@ int mbedtls_aes_self_test( int verbose ) offset = 0; mbedtls_aes_setkey_enc( &ctx, key, 128 + u * 64 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { memcpy( buf, aes_test_cfb128_ct[u], 64 ); mbedtls_aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - if( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_cfb128_pt, 64 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { memcpy( buf, aes_test_cfb128_pt, 64 ); mbedtls_aes_crypt_cfb128( &ctx, v, 64, &offset, iv, buf, buf ); - if( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_cfb128_ct[u], 64 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1409,11 +1426,11 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CFB */ @@ -1421,14 +1438,13 @@ int mbedtls_aes_self_test( int verbose ) /* * CTR mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-CTR-128 (%s): ", - ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); memcpy( key, aes_test_ctr_key[u], 16 ); @@ -1436,34 +1452,29 @@ int mbedtls_aes_self_test( int verbose ) offset = 0; mbedtls_aes_setkey_enc( &ctx, key, 128 ); - if( v == MBEDTLS_AES_DECRYPT ) - { + if ( v == MBEDTLS_AES_DECRYPT ) { len = aes_test_ctr_len[u]; memcpy( buf, aes_test_ctr_ct[u], len ); mbedtls_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ctr_pt[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - } - else - { + } else { len = aes_test_ctr_len[u]; memcpy( buf, aes_test_ctr_pt[u], len ); mbedtls_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, aes_test_ctr_ct[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; @@ -1471,11 +1482,11 @@ int mbedtls_aes_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -1484,7 +1495,7 @@ int mbedtls_aes_self_test( int verbose ) exit: mbedtls_aes_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/aesni.c b/external_libs/mbedtls/library/aesni.c index 1ca3c3e..e3ac91c 100644 --- a/external_libs/mbedtls/library/aesni.c +++ b/external_libs/mbedtls/library/aesni.c @@ -50,8 +50,7 @@ int mbedtls_aesni_has_support( unsigned int what ) static int done = 0; static unsigned int c = 0; - if( ! done ) - { + if ( ! done ) { asm( "movl $1, %%eax \n\t" "cpuid \n\t" : "=c" (c) @@ -60,7 +59,7 @@ int mbedtls_aesni_has_support( unsigned int what ) done = 1; } - return( ( c & what ) != 0 ); + return ( ( c & what ) != 0 ); } /* @@ -93,9 +92,9 @@ int mbedtls_aesni_has_support( unsigned int what ) * AES-NI AES-ECB block en(de)cryption */ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { asm( "movdqu (%3), %%xmm0 \n\t" // load input "movdqu (%1), %%xmm1 \n\t" // load round key 0 @@ -131,7 +130,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, : "memory", "cc", "xmm0", "xmm1" ); - return( 0 ); + return ( 0 ); } /* @@ -139,15 +138,14 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx, * Based on [CLMUL-WP] algorithms 1 (with equation 27) and 5. */ void mbedtls_aesni_gcm_mult( unsigned char c[16], - const unsigned char a[16], - const unsigned char b[16] ) + const unsigned char a[16], + const unsigned char b[16] ) { unsigned char aa[16], bb[16], cc[16]; size_t i; /* The inputs are in big-endian order, so byte-reverse them */ - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { aa[i] = a[15 - i]; bb[i] = b[15 - i]; } @@ -240,7 +238,7 @@ void mbedtls_aesni_gcm_mult( unsigned char c[16], : "memory", "cc", "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5" ); /* Now byte-reverse the outputs */ - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) c[i] = cc[15 - i]; return; @@ -250,14 +248,14 @@ void mbedtls_aesni_gcm_mult( unsigned char c[16], * Compute decryption round keys from encryption round keys */ void mbedtls_aesni_inverse_key( unsigned char *invkey, - const unsigned char *fwdkey, int nr ) + const unsigned char *fwdkey, int nr ) { unsigned char *ik = invkey; const unsigned char *fk = fwdkey + 16 * nr; memcpy( ik, fk, 16 ); - for( fk -= 16, ik += 16; fk > fwdkey; fk -= 16, ik += 16 ) + for ( fk -= 16, ik += 16; fk > fwdkey; fk -= 16, ik += 16 ) asm( "movdqu (%0), %%xmm0 \n\t" AESIMC xmm0_xmm0 "\n\t" "movdqu %%xmm0, (%1) \n\t" @@ -445,18 +443,24 @@ static void aesni_setkey_enc_256( unsigned char *rk, * Key expansion, wrapper */ int mbedtls_aesni_setkey_enc( unsigned char *rk, - const unsigned char *key, - size_t bits ) + const unsigned char *key, + size_t bits ) { - switch( bits ) - { - case 128: aesni_setkey_enc_128( rk, key ); break; - case 192: aesni_setkey_enc_192( rk, key ); break; - case 256: aesni_setkey_enc_256( rk, key ); break; - default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + switch ( bits ) { + case 128: + aesni_setkey_enc_128( rk, key ); + break; + case 192: + aesni_setkey_enc_192( rk, key ); + break; + case 256: + aesni_setkey_enc_256( rk, key ); + break; + default : + return ( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVE_X86_64 */ diff --git a/external_libs/mbedtls/library/arc4.c b/external_libs/mbedtls/library/arc4.c index 05b33d3..de0fc52 100644 --- a/external_libs/mbedtls/library/arc4.c +++ b/external_libs/mbedtls/library/arc4.c @@ -48,8 +48,10 @@ #if !defined(MBEDTLS_ARC4_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } void mbedtls_arc4_init( mbedtls_arc4_context *ctx ) @@ -59,7 +61,7 @@ void mbedtls_arc4_init( mbedtls_arc4_context *ctx ) void mbedtls_arc4_free( mbedtls_arc4_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_arc4_context ) ); @@ -69,7 +71,7 @@ void mbedtls_arc4_free( mbedtls_arc4_context *ctx ) * ARC4 key schedule */ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, - unsigned int keylen ) + unsigned int keylen ) { int i, j, a; unsigned int k; @@ -79,14 +81,13 @@ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, ctx->y = 0; m = ctx->m; - for( i = 0; i < 256; i++ ) + for ( i = 0; i < 256; i++ ) m[i] = (unsigned char) i; j = k = 0; - for( i = 0; i < 256; i++, k++ ) - { - if( k >= keylen ) k = 0; + for ( i = 0; i < 256; i++, k++ ) { + if ( k >= keylen ) k = 0; a = m[i]; j = ( j + a + key[k] ) & 0xFF; @@ -99,7 +100,7 @@ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key, * ARC4 cipher function */ int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned char *input, - unsigned char *output ) + unsigned char *output ) { int x, y, a, b; size_t i; @@ -109,22 +110,23 @@ int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned y = ctx->y; m = ctx->m; - for( i = 0; i < length; i++ ) - { - x = ( x + 1 ) & 0xFF; a = m[x]; - y = ( y + a ) & 0xFF; b = m[y]; + for ( i = 0; i < length; i++ ) { + x = ( x + 1 ) & 0xFF; + a = m[x]; + y = ( y + a ) & 0xFF; + b = m[y]; m[x] = (unsigned char) b; m[y] = (unsigned char) a; output[i] = (unsigned char) - ( input[i] ^ m[(unsigned char)( a + b )] ); + ( input[i] ^ m[(unsigned char)( a + b )] ); } ctx->x = x; ctx->y = y; - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_ARC4_ALT */ @@ -135,22 +137,19 @@ int mbedtls_arc4_crypt( mbedtls_arc4_context *ctx, size_t length, const unsigned * * http://groups.google.com/group/comp.security.misc/msg/10a300c9d21afca0 */ -static const unsigned char arc4_test_key[3][8] = -{ +static const unsigned char arc4_test_key[3][8] = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; -static const unsigned char arc4_test_pt[3][8] = -{ +static const unsigned char arc4_test_pt[3][8] = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }; -static const unsigned char arc4_test_ct[3][8] = -{ +static const unsigned char arc4_test_ct[3][8] = { { 0x75, 0xB7, 0x87, 0x80, 0x99, 0xE0, 0xC5, 0x96 }, { 0x74, 0x94, 0xC2, 0xE7, 0x10, 0x4B, 0x08, 0x79 }, { 0xDE, 0x18, 0x89, 0x41, 0xA3, 0x37, 0x5D, 0x3A } @@ -168,9 +167,8 @@ int mbedtls_arc4_self_test( int verbose ) mbedtls_arc4_init( &ctx ); - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 3; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " ARC4 test #%d: ", i + 1 ); memcpy( ibuf, arc4_test_pt[i], 8 ); @@ -178,26 +176,25 @@ int mbedtls_arc4_self_test( int verbose ) mbedtls_arc4_setup( &ctx, arc4_test_key[i], 8 ); mbedtls_arc4_crypt( &ctx, 8, ibuf, obuf ); - if( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( obuf, arc4_test_ct[i], 8 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_arc4_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/asn1parse.c b/external_libs/mbedtls/library/asn1parse.c index 4dd65c0..72a5717 100644 --- a/external_libs/mbedtls/library/asn1parse.c +++ b/external_libs/mbedtls/library/asn1parse.c @@ -44,193 +44,192 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* * ASN.1 DER decoding routines */ int mbedtls_asn1_get_len( unsigned char **p, - const unsigned char *end, - size_t *len ) + const unsigned char *end, + size_t *len ) { - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( ( **p & 0x80 ) == 0 ) + if ( ( **p & 0x80 ) == 0 ) *len = *(*p)++; - else - { - switch( **p & 0x7F ) - { - case 1: - if( ( end - *p ) < 2 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - - *len = (*p)[1]; - (*p) += 2; - break; - - case 2: - if( ( end - *p ) < 3 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (size_t)(*p)[1] << 8 ) | (*p)[2]; - (*p) += 3; - break; - - case 3: - if( ( end - *p ) < 4 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (size_t)(*p)[1] << 16 ) | - ( (size_t)(*p)[2] << 8 ) | (*p)[3]; - (*p) += 4; - break; - - case 4: - if( ( end - *p ) < 5 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - - *len = ( (size_t)(*p)[1] << 24 ) | ( (size_t)(*p)[2] << 16 ) | - ( (size_t)(*p)[3] << 8 ) | (*p)[4]; - (*p) += 5; - break; - - default: - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + else { + switch ( **p & 0x7F ) { + case 1: + if ( ( end - *p ) < 2 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + + *len = (*p)[1]; + (*p) += 2; + break; + + case 2: + if ( ( end - *p ) < 3 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + + *len = ( (size_t)(*p)[1] << 8 ) | (*p)[2]; + (*p) += 3; + break; + + case 3: + if ( ( end - *p ) < 4 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + + *len = ( (size_t)(*p)[1] << 16 ) | + ( (size_t)(*p)[2] << 8 ) | (*p)[3]; + (*p) += 4; + break; + + case 4: + if ( ( end - *p ) < 5 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + + *len = ( (size_t)(*p)[1] << 24 ) | ( (size_t)(*p)[2] << 16 ) | + ( (size_t)(*p)[3] << 8 ) | (*p)[4]; + (*p) += 5; + break; + + default: + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); } } - if( *len > (size_t) ( end - *p ) ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( *len > (size_t) ( end - *p ) ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_tag( unsigned char **p, - const unsigned char *end, - size_t *len, int tag ) + const unsigned char *end, + size_t *len, int tag ) { - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( **p != tag ) - return( MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( **p != tag ) + return ( MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); (*p)++; - return( mbedtls_asn1_get_len( p, end, len ) ); + return ( mbedtls_asn1_get_len( p, end, len ) ); } int mbedtls_asn1_get_bool( unsigned char **p, - const unsigned char *end, - int *val ) + const unsigned char *end, + int *val ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_BOOLEAN ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_BOOLEAN ) ) != 0 ) + return ( ret ); - if( len != 1 ) - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( len != 1 ) + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); *val = ( **p != 0 ) ? 1 : 0; (*p)++; - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_int( unsigned char **p, - const unsigned char *end, - int *val ) + const unsigned char *end, + int *val ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) + return ( ret ); - if( len == 0 || len > sizeof( int ) || ( **p & 0x80 ) != 0 ) - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( len == 0 || len > sizeof( int ) || ( **p & 0x80 ) != 0 ) + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); *val = 0; - while( len-- > 0 ) - { + while ( len-- > 0 ) { *val = ( *val << 8 ) | **p; (*p)++; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_BIGNUM_C) int mbedtls_asn1_get_mpi( unsigned char **p, - const unsigned char *end, - mbedtls_mpi *X ) + const unsigned char *end, + mbedtls_mpi *X ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) + return ( ret ); ret = mbedtls_mpi_read_binary( X, *p, len ); *p += len; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_BIGNUM_C */ int mbedtls_asn1_get_bitstring( unsigned char **p, const unsigned char *end, - mbedtls_asn1_bitstring *bs) + mbedtls_asn1_bitstring *bs) { int ret; /* Certificate type is a single byte bitstring */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &bs->len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &bs->len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) + return ( ret ); /* Check length, subtract one for actual bit string length */ - if( bs->len < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( bs->len < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); bs->len -= 1; /* Get number of unused bits, ensure unused bits <= 7 */ bs->unused_bits = **p; - if( bs->unused_bits > 7 ) - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( bs->unused_bits > 7 ) + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); (*p)++; /* Get actual bitstring */ bs->p = *p; *p += bs->len; - if( *p != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* * Get a bit string without unused bits */ int mbedtls_asn1_get_bitstring_null( unsigned char **p, const unsigned char *end, - size_t *len ) + size_t *len ) { int ret; - if( ( ret = mbedtls_asn1_get_tag( p, end, len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, len, MBEDTLS_ASN1_BIT_STRING ) ) != 0 ) + return ( ret ); - if( (*len)-- < 2 || *(*p)++ != 0 ) - return( MBEDTLS_ERR_ASN1_INVALID_DATA ); + if ( (*len)-- < 2 || *(*p)++ != 0 ) + return ( MBEDTLS_ERR_ASN1_INVALID_DATA ); - return( 0 ); + return ( 0 ); } @@ -239,41 +238,39 @@ int mbedtls_asn1_get_bitstring_null( unsigned char **p, const unsigned char *end * Parses and splits an ASN.1 "SEQUENCE OF " */ int mbedtls_asn1_get_sequence_of( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_sequence *cur, - int tag) + const unsigned char *end, + mbedtls_asn1_sequence *cur, + int tag) { int ret; size_t len; mbedtls_asn1_buf *buf; /* Get main sequence tag */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) - { + while ( *p < end ) { buf = &(cur->buf); buf->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &buf->len, tag ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &buf->len, tag ) ) != 0 ) + return ( ret ); buf->p = *p; *p += buf->len; /* Allocate and assign next pointer */ - if( *p < end ) - { + if ( *p < end ) { cur->next = (mbedtls_asn1_sequence*)mbedtls_calloc( 1, - sizeof( mbedtls_asn1_sequence ) ); + sizeof( mbedtls_asn1_sequence ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_ASN1_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_ASN1_ALLOC_FAILED ); cur = cur->next; } @@ -282,77 +279,76 @@ int mbedtls_asn1_get_sequence_of( unsigned char **p, /* Set final sequence entry's next pointer to NULL */ cur->next = NULL; - if( *p != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_alg( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ) + const unsigned char *end, + mbedtls_asn1_buf *alg, mbedtls_asn1_buf *params ) { int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_ASN1_OUT_OF_DATA ); alg->tag = **p; end = *p + len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &alg->len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &alg->len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( ret ); alg->p = *p; *p += alg->len; - if( *p == end ) - { + if ( *p == end ) { mbedtls_zeroize( params, sizeof(mbedtls_asn1_buf) ); - return( 0 ); + return ( 0 ); } params->tag = **p; (*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, ¶ms->len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, ¶ms->len ) ) != 0 ) + return ( ret ); params->p = *p; *p += params->len; - if( *p != end ) - return( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } int mbedtls_asn1_get_alg_null( unsigned char **p, - const unsigned char *end, - mbedtls_asn1_buf *alg ) + const unsigned char *end, + mbedtls_asn1_buf *alg ) { int ret; mbedtls_asn1_buf params; memset( ¶ms, 0, sizeof(mbedtls_asn1_buf) ); - if( ( ret = mbedtls_asn1_get_alg( p, end, alg, ¶ms ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_alg( p, end, alg, ¶ms ) ) != 0 ) + return ( ret ); - if( ( params.tag != MBEDTLS_ASN1_NULL && params.tag != 0 ) || params.len != 0 ) - return( MBEDTLS_ERR_ASN1_INVALID_DATA ); + if ( ( params.tag != MBEDTLS_ASN1_NULL && params.tag != 0 ) || params.len != 0 ) + return ( MBEDTLS_ERR_ASN1_INVALID_DATA ); - return( 0 ); + return ( 0 ); } void mbedtls_asn1_free_named_data( mbedtls_asn1_named_data *cur ) { - if( cur == NULL ) + if ( cur == NULL ) return; mbedtls_free( cur->oid.p ); @@ -365,8 +361,7 @@ void mbedtls_asn1_free_named_data_list( mbedtls_asn1_named_data **head ) { mbedtls_asn1_named_data *cur; - while( ( cur = *head ) != NULL ) - { + while ( ( cur = *head ) != NULL ) { *head = cur->next; mbedtls_asn1_free_named_data( cur ); mbedtls_free( cur ); @@ -374,20 +369,18 @@ void mbedtls_asn1_free_named_data_list( mbedtls_asn1_named_data **head ) } mbedtls_asn1_named_data *mbedtls_asn1_find_named_data( mbedtls_asn1_named_data *list, - const char *oid, size_t len ) + const char *oid, size_t len ) { - while( list != NULL ) - { - if( list->oid.len == len && - memcmp( list->oid.p, oid, len ) == 0 ) - { + while ( list != NULL ) { + if ( list->oid.len == len && + memcmp( list->oid.p, oid, len ) == 0 ) { break; } list = list->next; } - return( list ); + return ( list ); } #endif /* MBEDTLS_ASN1_PARSE_C */ diff --git a/external_libs/mbedtls/library/asn1write.c b/external_libs/mbedtls/library/asn1write.c index 69b61b2..3647465 100644 --- a/external_libs/mbedtls/library/asn1write.c +++ b/external_libs/mbedtls/library/asn1write.c @@ -41,87 +41,82 @@ int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len ) { - if( len < 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len < 0x80 ) { + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = (unsigned char) len; - return( 1 ); + return ( 1 ); } - if( len <= 0xFF ) - { - if( *p - start < 2 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFF ) { + if ( *p - start < 2 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = (unsigned char) len; *--(*p) = 0x81; - return( 2 ); + return ( 2 ); } - if( len <= 0xFFFF ) - { - if( *p - start < 3 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFFFF ) { + if ( *p - start < 3 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = ( len ) & 0xFF; *--(*p) = ( len >> 8 ) & 0xFF; *--(*p) = 0x82; - return( 3 ); + return ( 3 ); } - if( len <= 0xFFFFFF ) - { - if( *p - start < 4 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFFFFFF ) { + if ( *p - start < 4 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = ( len ) & 0xFF; *--(*p) = ( len >> 8 ) & 0xFF; *--(*p) = ( len >> 16 ) & 0xFF; *--(*p) = 0x83; - return( 4 ); + return ( 4 ); } - if( len <= 0xFFFFFFFF ) - { - if( *p - start < 5 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len <= 0xFFFFFFFF ) { + if ( *p - start < 5 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = ( len ) & 0xFF; *--(*p) = ( len >> 8 ) & 0xFF; *--(*p) = ( len >> 16 ) & 0xFF; *--(*p) = ( len >> 24 ) & 0xFF; *--(*p) = 0x84; - return( 5 ); + return ( 5 ); } - return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + return ( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); } int mbedtls_asn1_write_tag( unsigned char **p, unsigned char *start, unsigned char tag ) { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = tag; - return( 1 ); + return ( 1 ); } int mbedtls_asn1_write_raw_buffer( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) + const unsigned char *buf, size_t size ) { size_t len = 0; - if( *p < start || (size_t)( *p - start ) < size ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < size ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len = size; (*p) -= len; memcpy( *p, buf, len ); - return( (int) len ); + return ( (int) len ); } #if defined(MBEDTLS_BIGNUM_C) @@ -134,8 +129,8 @@ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedt // len = mbedtls_mpi_size( X ); - if( *p < start || (size_t)( *p - start ) < len ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < len ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); (*p) -= len; MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( X, *p, len ) ); @@ -143,10 +138,9 @@ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedt // DER format assumes 2s complement for numbers, so the leftmost bit // should be 0 for positive numbers and 1 for negative numbers. // - if( X->s ==1 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( X->s == 1 && **p & 0x80 ) { + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = 0x00; len += 1; @@ -158,7 +152,7 @@ int mbedtls_asn1_write_mpi( unsigned char **p, unsigned char *start, const mbedt ret = (int) len; cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_BIGNUM_C */ @@ -172,31 +166,31 @@ int mbedtls_asn1_write_null( unsigned char **p, unsigned char *start ) MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, 0) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_NULL ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_oid( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len ) + const char *oid, size_t oid_len ) { int ret; size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) oid, oid_len ) ); - MBEDTLS_ASN1_CHK_ADD( len , mbedtls_asn1_write_len( p, start, len ) ); - MBEDTLS_ASN1_CHK_ADD( len , mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OID ) ); + (const unsigned char *) oid, oid_len ) ); + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OID ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - size_t par_len ) + const char *oid, size_t oid_len, + size_t par_len ) { int ret; size_t len = 0; - if( par_len == 0 ) + if ( par_len == 0 ) MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_null( p, start ) ); else len += par_len; @@ -205,9 +199,9 @@ int mbedtls_asn1_write_algorithm_identifier( unsigned char **p, unsigned char *s MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolean ) @@ -215,8 +209,8 @@ int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolea int ret; size_t len = 0; - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = (boolean) ? 255 : 0; len++; @@ -224,7 +218,7 @@ int mbedtls_asn1_write_bool( unsigned char **p, unsigned char *start, int boolea MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_BOOLEAN ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) @@ -236,16 +230,15 @@ int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) // DER format assumes 2s complement for numbers, so the leftmost bit // should be 0 for positive numbers and 1 for negative numbers. // - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len += 1; *--(*p) = val; - if( val > 0 && **p & 0x80 ) - { - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( val > 0 && **p & 0x80 ) { + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = 0x00; len += 1; @@ -254,41 +247,41 @@ int mbedtls_asn1_write_int( unsigned char **p, unsigned char *start, int val ) MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_INTEGER ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_printable_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) + const char *text, size_t text_len ) { int ret; size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); + (const unsigned char *) text, text_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_PRINTABLE_STRING ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_ia5_string( unsigned char **p, unsigned char *start, - const char *text, size_t text_len ) + const char *text, size_t text_len ) { int ret; size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) text, text_len ) ); + (const unsigned char *) text, text_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_IA5_STRING ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t bits ) + const unsigned char *buf, size_t bits ) { int ret; size_t len = 0, size; @@ -297,8 +290,8 @@ int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, // Calculate byte length // - if( *p < start || (size_t)( *p - start ) < size + 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < size + 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len = size + 1; (*p) -= size; @@ -311,11 +304,11 @@ int mbedtls_asn1_write_bitstring( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_BIT_STRING ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, - const unsigned char *buf, size_t size ) + const unsigned char *buf, size_t size ) { int ret; size_t len = 0; @@ -325,66 +318,61 @@ int mbedtls_asn1_write_octet_string( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OCTET_STRING ) ); - return( (int) len ); + return ( (int) len ); } mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data **head, - const char *oid, size_t oid_len, - const unsigned char *val, - size_t val_len ) + const char *oid, size_t oid_len, + const unsigned char *val, + size_t val_len ) { mbedtls_asn1_named_data *cur; - if( ( cur = mbedtls_asn1_find_named_data( *head, oid, oid_len ) ) == NULL ) - { + if ( ( cur = mbedtls_asn1_find_named_data( *head, oid, oid_len ) ) == NULL ) { // Add new entry if not present yet based on OID // cur = (mbedtls_asn1_named_data*)mbedtls_calloc( 1, - sizeof(mbedtls_asn1_named_data) ); - if( cur == NULL ) - return( NULL ); + sizeof(mbedtls_asn1_named_data) ); + if ( cur == NULL ) + return ( NULL ); cur->oid.len = oid_len; cur->oid.p = mbedtls_calloc( 1, oid_len ); - if( cur->oid.p == NULL ) - { + if ( cur->oid.p == NULL ) { mbedtls_free( cur ); - return( NULL ); + return ( NULL ); } memcpy( cur->oid.p, oid, oid_len ); cur->val.len = val_len; cur->val.p = mbedtls_calloc( 1, val_len ); - if( cur->val.p == NULL ) - { + if ( cur->val.p == NULL ) { mbedtls_free( cur->oid.p ); mbedtls_free( cur ); - return( NULL ); + return ( NULL ); } cur->next = *head; *head = cur; - } - else if( cur->val.len < val_len ) - { + } else if ( cur->val.len < val_len ) { /* * Enlarge existing value buffer if needed * Preserve old data until the allocation succeeded, to leave list in * a consistent state in case allocation fails. */ void *p = mbedtls_calloc( 1, val_len ); - if( p == NULL ) - return( NULL ); + if ( p == NULL ) + return ( NULL ); mbedtls_free( cur->val.p ); cur->val.p = p; cur->val.len = val_len; } - if( val != NULL ) + if ( val != NULL ) memcpy( cur->val.p, val, val_len ); - return( cur ); + return ( cur ); } #endif /* MBEDTLS_ASN1_WRITE_C */ diff --git a/external_libs/mbedtls/library/base64.c b/external_libs/mbedtls/library/base64.c index 5cb12cb..d98345d 100644 --- a/external_libs/mbedtls/library/base64.c +++ b/external_libs/mbedtls/library/base64.c @@ -41,8 +41,7 @@ #endif /* MBEDTLS_PLATFORM_C */ #endif /* MBEDTLS_SELF_TEST */ -static const unsigned char base64_enc_map[64] = -{ +static const unsigned char base64_enc_map[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', @@ -52,21 +51,20 @@ static const unsigned char base64_enc_map[64] = '8', '9', '+', '/' }; -static const unsigned char base64_dec_map[128] = -{ +static const unsigned char base64_dec_map[128] = { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 62, 127, 127, 127, 63, 52, 53, - 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, + 54, 55, 56, 57, 58, 59, 60, 61, 127, 127, 127, 64, 127, 127, 127, 0, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 51, 127, 127, 127, 127, 127 + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 127, 127, 127, 127, 127, 127, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 127, 127, 127, 127, 127 }; #define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ @@ -75,38 +73,34 @@ static const unsigned char base64_dec_map[128] = * Encode a buffer into base64 format */ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; int C1, C2, C3; unsigned char *p; - if( slen == 0 ) - { + if ( slen == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } n = slen / 3 + ( slen % 3 != 0 ); - if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) - { + if ( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) { *olen = BASE64_SIZE_T_MAX; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } n *= 4; - if( ( dlen < n + 1 ) || ( NULL == dst ) ) - { + if ( ( dlen < n + 1 ) || ( NULL == dst ) ) { *olen = n + 1; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } n = ( slen / 3 ) * 3; - for( i = 0, p = dst; i < n; i += 3 ) - { + for ( i = 0, p = dst; i < n; i += 3 ) { C1 = *src++; C2 = *src++; C3 = *src++; @@ -117,16 +111,15 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, *p++ = base64_enc_map[C3 & 0x3F]; } - if( i < slen ) - { + if ( i < slen ) { C1 = *src++; C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - if( ( i + 1 ) < slen ) - *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; + if ( ( i + 1 ) < slen ) + *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; else *p++ = '='; *p++ = '='; @@ -135,98 +128,91 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen, *olen = p - dst; *p = 0; - return( 0 ); + return ( 0 ); } /* * Decode a base64-formatted buffer */ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; uint32_t j, x; unsigned char *p; /* First pass: check for validity and get output length */ - for( i = n = j = 0; i < slen; i++ ) - { + for ( i = n = j = 0; i < slen; i++ ) { /* Skip spaces before checking for EOL */ x = 0; - while( i < slen && src[i] == ' ' ) - { + while ( i < slen && src[i] == ' ' ) { ++i; ++x; } /* Spaces at end of buffer are OK */ - if( i == slen ) + if ( i == slen ) break; - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) + if ( ( slen - i ) >= 2 && + src[i] == '\r' && src[i + 1] == '\n' ) continue; - if( src[i] == '\n' ) + if ( src[i] == '\n' ) continue; /* Space inside a line is an error */ - if( x != 0 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( x != 0 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); - if( src[i] == '=' && ++j > 2 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( src[i] == '=' && ++j > 2 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( src[i] > 127 || base64_dec_map[src[i]] == 127 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); + if ( base64_dec_map[src[i]] < 64 && j != 0 ) + return ( MBEDTLS_ERR_BASE64_INVALID_CHARACTER ); n++; } - if( n == 0 ) - { + if ( n == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } n = ( ( n * 6 ) + 7 ) >> 3; n -= j; - if( dst == NULL || dlen < n ) - { + if ( dst == NULL || dlen < n ) { *olen = n; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' || *src == ' ' ) + for ( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) { + if ( *src == '\r' || *src == '\n' || *src == ' ' ) continue; j -= ( base64_dec_map[*src] == 64 ); x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - if( ++n == 4 ) - { + if ( ++n == 4 ) { n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); + if ( j > 0 ) *p++ = (unsigned char)( x >> 16 ); + if ( j > 1 ) *p++ = (unsigned char)( x >> 8 ); + if ( j > 2 ) *p++ = (unsigned char)( x ); } } *olen = p - dst; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SELF_TEST) -static const unsigned char base64_test_dec[64] = -{ +static const unsigned char base64_test_dec[64] = { 0x24, 0x48, 0x6E, 0x56, 0x87, 0x62, 0x5A, 0xBD, 0xBF, 0x17, 0xD9, 0xA2, 0xC4, 0x17, 0x1A, 0x01, 0x94, 0xED, 0x8F, 0x1E, 0x11, 0xB3, 0xD7, 0x09, @@ -250,38 +236,36 @@ int mbedtls_base64_self_test( int verbose ) const unsigned char *src; unsigned char buffer[128]; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " Base64 encoding test: " ); src = base64_test_dec; - if( mbedtls_base64_encode( buffer, sizeof( buffer ), &len, src, 64 ) != 0 || - memcmp( base64_test_enc, buffer, 88 ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_base64_encode( buffer, sizeof( buffer ), &len, src, 64 ) != 0 || + memcmp( base64_test_enc, buffer, 88 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n Base64 decoding test: " ); src = base64_test_enc; - if( mbedtls_base64_decode( buffer, sizeof( buffer ), &len, src, 88 ) != 0 || - memcmp( base64_test_dec, buffer, 64 ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_base64_decode( buffer, sizeof( buffer ), &len, src, 88 ) != 0 || + memcmp( base64_test_dec, buffer, 64 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/bignum.c b/external_libs/mbedtls/library/bignum.c index 4c99e04..d5506a4 100644 --- a/external_libs/mbedtls/library/bignum.c +++ b/external_libs/mbedtls/library/bignum.c @@ -59,8 +59,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) { - volatile mbedtls_mpi_uint *p = v; while( n-- ) *p++ = 0; +static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) +{ + volatile mbedtls_mpi_uint *p = v; + while ( n-- ) *p++ = 0; } #define ciL (sizeof(mbedtls_mpi_uint)) /* chars in limb */ @@ -81,7 +83,7 @@ static void mbedtls_mpi_zeroize( mbedtls_mpi_uint *v, size_t n ) { */ void mbedtls_mpi_init( mbedtls_mpi *X ) { - if( X == NULL ) + if ( X == NULL ) return; X->s = 1; @@ -94,11 +96,10 @@ void mbedtls_mpi_init( mbedtls_mpi *X ) */ void mbedtls_mpi_free( mbedtls_mpi *X ) { - if( X == NULL ) + if ( X == NULL ) return; - if( X->p != NULL ) - { + if ( X->p != NULL ) { mbedtls_mpi_zeroize( X->p, X->n ); mbedtls_free( X->p ); } @@ -115,16 +116,14 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) { mbedtls_mpi_uint *p; - if( nblimbs > MBEDTLS_MPI_MAX_LIMBS ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( nblimbs > MBEDTLS_MPI_MAX_LIMBS ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); - if( X->n < nblimbs ) - { - if( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( nblimbs, ciL ) ) == NULL ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( X->n < nblimbs ) { + if ( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( nblimbs, ciL ) ) == NULL ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); - if( X->p != NULL ) - { + if ( X->p != NULL ) { memcpy( p, X->p, X->n * ciL ); mbedtls_mpi_zeroize( X->p, X->n ); mbedtls_free( X->p ); @@ -134,7 +133,7 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs ) X->p = p; } - return( 0 ); + return ( 0 ); } /* @@ -147,22 +146,21 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) size_t i; /* Actually resize up in this case */ - if( X->n <= nblimbs ) - return( mbedtls_mpi_grow( X, nblimbs ) ); + if ( X->n <= nblimbs ) + return ( mbedtls_mpi_grow( X, nblimbs ) ); - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) + for ( i = X->n - 1; i > 0; i-- ) + if ( X->p[i] != 0 ) break; i++; - if( i < nblimbs ) + if ( i < nblimbs ) i = nblimbs; - if( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( i, ciL ) ) == NULL ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( ( p = (mbedtls_mpi_uint*)mbedtls_calloc( i, ciL ) ) == NULL ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); - if( X->p != NULL ) - { + if ( X->p != NULL ) { memcpy( p, X->p, i * ciL ); mbedtls_mpi_zeroize( X->p, X->n ); mbedtls_free( X->p ); @@ -171,7 +169,7 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs ) X->n = i; X->p = p; - return( 0 ); + return ( 0 ); } /* @@ -182,17 +180,16 @@ int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) int ret; size_t i; - if( X == Y ) - return( 0 ); + if ( X == Y ) + return ( 0 ); - if( Y->p == NULL ) - { + if ( Y->p == NULL ) { mbedtls_mpi_free( X ); - return( 0 ); + return ( 0 ); } - for( i = Y->n - 1; i > 0; i-- ) - if( Y->p[i] != 0 ) + for ( i = Y->n - 1; i > 0; i-- ) + if ( Y->p[i] != 0 ) break; i++; @@ -205,7 +202,7 @@ int mbedtls_mpi_copy( mbedtls_mpi *X, const mbedtls_mpi *Y ) cleanup: - return( ret ); + return ( ret ); } /* @@ -231,20 +228,20 @@ int mbedtls_mpi_safe_cond_assign( mbedtls_mpi *X, const mbedtls_mpi *Y, unsigned size_t i; /* make sure assign is 0 or 1 in a time-constant manner */ - assign = (assign | (unsigned char)-assign) >> 7; + assign = (assign | (unsigned char) - assign) >> 7; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, Y->n ) ); X->s = X->s * ( 1 - assign ) + Y->s * assign; - for( i = 0; i < Y->n; i++ ) + for ( i = 0; i < Y->n; i++ ) X->p[i] = X->p[i] * ( 1 - assign ) + Y->p[i] * assign; - for( ; i < X->n; i++ ) + for ( ; i < X->n; i++ ) X->p[i] *= ( 1 - assign ); cleanup: - return( ret ); + return ( ret ); } /* @@ -259,11 +256,11 @@ int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char sw size_t i; mbedtls_mpi_uint tmp; - if( X == Y ) - return( 0 ); + if ( X == Y ) + return ( 0 ); /* make sure swap is 0 or 1 in a time-constant manner */ - swap = (swap | (unsigned char)-swap) >> 7; + swap = (swap | (unsigned char) - swap) >> 7; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, Y->n ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_grow( Y, X->n ) ); @@ -273,15 +270,14 @@ int mbedtls_mpi_safe_cond_swap( mbedtls_mpi *X, mbedtls_mpi *Y, unsigned char sw Y->s = Y->s * ( 1 - swap ) + s * swap; - for( i = 0; i < X->n; i++ ) - { + for ( i = 0; i < X->n; i++ ) { tmp = X->p[i]; X->p[i] = X->p[i] * ( 1 - swap ) + Y->p[i] * swap; Y->p[i] = Y->p[i] * ( 1 - swap ) + tmp * swap; } cleanup: - return( ret ); + return ( ret ); } /* @@ -299,7 +295,7 @@ int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ) cleanup: - return( ret ); + return ( ret ); } /* @@ -307,10 +303,10 @@ int mbedtls_mpi_lset( mbedtls_mpi *X, mbedtls_mpi_sint z ) */ int mbedtls_mpi_get_bit( const mbedtls_mpi *X, size_t pos ) { - if( X->n * biL <= pos ) - return( 0 ); + if ( X->n * biL <= pos ) + return ( 0 ); - return( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); + return ( ( X->p[pos / biL] >> ( pos % biL ) ) & 0x01 ); } /* @@ -322,13 +318,12 @@ int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ) size_t off = pos / biL; size_t idx = pos % biL; - if( val != 0 && val != 1 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( val != 0 && val != 1 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); - if( X->n * biL <= pos ) - { - if( val == 0 ) - return( 0 ); + if ( X->n * biL <= pos ) { + if ( val == 0 ) + return ( 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, off + 1 ) ); } @@ -338,7 +333,7 @@ int mbedtls_mpi_set_bit( mbedtls_mpi *X, size_t pos, unsigned char val ) cleanup: - return( ret ); + return ( ret ); } /* @@ -348,12 +343,12 @@ size_t mbedtls_mpi_lsb( const mbedtls_mpi *X ) { size_t i, j, count = 0; - for( i = 0; i < X->n; i++ ) - for( j = 0; j < biL; j++, count++ ) - if( ( ( X->p[i] >> j ) & 1 ) != 0 ) - return( count ); + for ( i = 0; i < X->n; i++ ) + for ( j = 0; j < biL; j++, count++ ) + if ( ( ( X->p[i] >> j ) & 1 ) != 0 ) + return ( count ); - return( 0 ); + return ( 0 ); } /* @@ -364,9 +359,8 @@ static size_t mbedtls_clz( const mbedtls_mpi_uint x ) size_t j; mbedtls_mpi_uint mask = (mbedtls_mpi_uint) 1 << (biL - 1); - for( j = 0; j < biL; j++ ) - { - if( x & mask ) break; + for ( j = 0; j < biL; j++ ) { + if ( x & mask ) break; mask >>= 1; } @@ -381,16 +375,16 @@ size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) { size_t i, j; - if( X->n == 0 ) - return( 0 ); + if ( X->n == 0 ) + return ( 0 ); - for( i = X->n - 1; i > 0; i-- ) - if( X->p[i] != 0 ) + for ( i = X->n - 1; i > 0; i-- ) + if ( X->p[i] != 0 ) break; j = biL - mbedtls_clz( X->p[i] ); - return( ( i * biL ) + j ); + return ( ( i * biL ) + j ); } /* @@ -398,7 +392,7 @@ size_t mbedtls_mpi_bitlen( const mbedtls_mpi *X ) */ size_t mbedtls_mpi_size( const mbedtls_mpi *X ) { - return( ( mbedtls_mpi_bitlen( X ) + 7 ) >> 3 ); + return ( ( mbedtls_mpi_bitlen( X ) + 7 ) >> 3 ); } /* @@ -408,14 +402,14 @@ static int mpi_get_digit( mbedtls_mpi_uint *d, int radix, char c ) { *d = 255; - if( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; - if( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; - if( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; + if ( c >= 0x30 && c <= 0x39 ) *d = c - 0x30; + if ( c >= 0x41 && c <= 0x46 ) *d = c - 0x37; + if ( c >= 0x61 && c <= 0x66 ) *d = c - 0x57; - if( *d >= (mbedtls_mpi_uint) radix ) - return( MBEDTLS_ERR_MPI_INVALID_CHARACTER ); + if ( *d >= (mbedtls_mpi_uint) radix ) + return ( MBEDTLS_ERR_MPI_INVALID_CHARACTER ); - return( 0 ); + return ( 0 ); } /* @@ -428,27 +422,24 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) mbedtls_mpi_uint d; mbedtls_mpi T; - if( radix < 2 || radix > 16 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix < 2 || radix > 16 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); mbedtls_mpi_init( &T ); slen = strlen( s ); - if( radix == 16 ) - { - if( slen > MPI_SIZE_T_MAX >> 2 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix == 16 ) { + if ( slen > MPI_SIZE_T_MAX >> 2 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); n = BITS_TO_LIMBS( slen << 2 ); MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, n ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i = slen, j = 0; i > 0; i--, j++ ) - { - if( i == 1 && s[i - 1] == '-' ) - { + for ( i = slen, j = 0; i > 0; i--, j++ ) { + if ( i == 1 && s[i - 1] == '-' ) { X->s = -1; break; } @@ -456,15 +447,11 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) MBEDTLS_MPI_CHK( mpi_get_digit( &d, radix, s[i - 1] ) ); X->p[j / ( 2 * ciL )] |= d << ( ( j % ( 2 * ciL ) ) << 2 ); } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i = 0; i < slen; i++ ) - { - if( i == 0 && s[i] == '-' ) - { + for ( i = 0; i < slen; i++ ) { + if ( i == 0 && s[i] == '-' ) { X->s = -1; continue; } @@ -472,12 +459,9 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) MBEDTLS_MPI_CHK( mpi_get_digit( &d, radix, s[i] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T, X, radix ) ); - if( X->s == 1 ) - { + if ( X->s == 1 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, &T, d ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( X, &T, d ) ); } } @@ -487,7 +471,7 @@ int mbedtls_mpi_read_string( mbedtls_mpi *X, int radix, const char *s ) mbedtls_mpi_free( &T ); - return( ret ); + return ( ret ); } /* @@ -498,23 +482,23 @@ static int mpi_write_hlp( mbedtls_mpi *X, int radix, char **p ) int ret; mbedtls_mpi_uint r; - if( radix < 2 || radix > 16 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix < 2 || radix > 16 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, radix ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_div_int( X, NULL, X, radix ) ); - if( mbedtls_mpi_cmp_int( X, 0 ) != 0 ) + if ( mbedtls_mpi_cmp_int( X, 0 ) != 0 ) MBEDTLS_MPI_CHK( mpi_write_hlp( X, radix, p ) ); - if( r < 10 ) + if ( r < 10 ) *(*p)++ = (char)( r + 0x30 ); else *(*p)++ = (char)( r + 0x37 ); cleanup: - return( ret ); + return ( ret ); } /* @@ -528,38 +512,34 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, char *p; mbedtls_mpi T; - if( radix < 2 || radix > 16 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( radix < 2 || radix > 16 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); n = mbedtls_mpi_bitlen( X ); - if( radix >= 4 ) n >>= 1; - if( radix >= 16 ) n >>= 1; + if ( radix >= 4 ) n >>= 1; + if ( radix >= 16 ) n >>= 1; n += 3; - if( buflen < n ) - { + if ( buflen < n ) { *olen = n; - return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); } p = buf; mbedtls_mpi_init( &T ); - if( X->s == -1 ) + if ( X->s == -1 ) *p++ = '-'; - if( radix == 16 ) - { + if ( radix == 16 ) { int c; size_t i, j, k; - for( i = X->n, k = 0; i > 0; i-- ) - { - for( j = ciL; j > 0; j-- ) - { + for ( i = X->n, k = 0; i > 0; i-- ) { + for ( j = ciL; j > 0; j-- ) { c = ( X->p[i - 1] >> ( ( j - 1 ) << 3) ) & 0xFF; - if( c == 0 && k == 0 && ( i + j ) != 2 ) + if ( c == 0 && k == 0 && ( i + j ) != 2 ) continue; *(p++) = "0123456789ABCDEF" [c / 16]; @@ -567,12 +547,10 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, k = 1; } } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &T, X ) ); - if( T.s == -1 ) + if ( T.s == -1 ) T.s = 1; MBEDTLS_MPI_CHK( mpi_write_hlp( &T, radix, &p ) ); @@ -585,7 +563,7 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix, mbedtls_mpi_free( &T ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_FS_IO) @@ -604,22 +582,28 @@ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin ) char s[ MBEDTLS_MPI_RW_BUFFER_SIZE ]; memset( s, 0, sizeof( s ) ); - if( fgets( s, sizeof( s ) - 1, fin ) == NULL ) - return( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); + if ( fgets( s, sizeof( s ) - 1, fin ) == NULL ) + return ( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); slen = strlen( s ); - if( slen == sizeof( s ) - 2 ) - return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); + if ( slen == sizeof( s ) - 2 ) + return ( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); - if( s[slen - 1] == '\n' ) { slen--; s[slen] = '\0'; } - if( s[slen - 1] == '\r' ) { slen--; s[slen] = '\0'; } + if ( s[slen - 1] == '\n' ) { + slen--; + s[slen] = '\0'; + } + if ( s[slen - 1] == '\r' ) { + slen--; + s[slen] = '\0'; + } p = s + slen; - while( --p >= s ) - if( mpi_get_digit( &d, radix, *p ) != 0 ) + while ( --p >= s ) + if ( mpi_get_digit( &d, radix, *p ) != 0 ) break; - return( mbedtls_mpi_read_string( X, radix, p + 1 ) ); + return ( mbedtls_mpi_read_string( X, radix, p + 1 ) ); } /* @@ -639,25 +623,23 @@ int mbedtls_mpi_write_file( const char *p, const mbedtls_mpi *X, int radix, FILE MBEDTLS_MPI_CHK( mbedtls_mpi_write_string( X, radix, s, sizeof( s ) - 2, &n ) ); - if( p == NULL ) p = ""; + if ( p == NULL ) p = ""; plen = strlen( p ); slen = strlen( s ); s[slen++] = '\r'; s[slen++] = '\n'; - if( fout != NULL ) - { - if( fwrite( p, 1, plen, fout ) != plen || - fwrite( s, 1, slen, fout ) != slen ) - return( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); - } - else + if ( fout != NULL ) { + if ( fwrite( p, 1, plen, fout ) != plen || + fwrite( s, 1, slen, fout ) != slen ) + return ( MBEDTLS_ERR_MPI_FILE_IO_ERROR ); + } else mbedtls_printf( "%s%s", p, s ); cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -669,19 +651,19 @@ int mbedtls_mpi_read_binary( mbedtls_mpi *X, const unsigned char *buf, size_t bu int ret; size_t i, j, n; - for( n = 0; n < buflen; n++ ) - if( buf[n] != 0 ) + for ( n = 0; n < buflen; n++ ) + if ( buf[n] != 0 ) break; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, CHARS_TO_LIMBS( buflen - n ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i = buflen, j = 0; i > n; i--, j++ ) + for ( i = buflen, j = 0; i > n; i--, j++ ) X->p[j / ciL] |= ((mbedtls_mpi_uint) buf[i - 1]) << ((j % ciL) << 3); cleanup: - return( ret ); + return ( ret ); } /* @@ -693,15 +675,15 @@ int mbedtls_mpi_write_binary( const mbedtls_mpi *X, unsigned char *buf, size_t b n = mbedtls_mpi_size( X ); - if( buflen < n ) - return( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); + if ( buflen < n ) + return ( MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL ); memset( buf, 0, buflen ); - for( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) + for ( i = buflen - 1, j = 0; n > 0; i--, j++, n-- ) buf[i] = (unsigned char)( X->p[j / ciL] >> ((j % ciL) << 3) ); - return( 0 ); + return ( 0 ); } /* @@ -718,7 +700,7 @@ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) i = mbedtls_mpi_bitlen( X ) + count; - if( X->n * biL < i ) + if ( X->n * biL < i ) MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, BITS_TO_LIMBS( i ) ) ); ret = 0; @@ -726,22 +708,19 @@ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) /* * shift by count / limb_size */ - if( v0 > 0 ) - { - for( i = X->n; i > v0; i-- ) + if ( v0 > 0 ) { + for ( i = X->n; i > v0; i-- ) X->p[i - 1] = X->p[i - v0 - 1]; - for( ; i > 0; i-- ) + for ( ; i > 0; i-- ) X->p[i - 1] = 0; } /* * shift by count % limb_size */ - if( t1 > 0 ) - { - for( i = v0; i < X->n; i++ ) - { + if ( t1 > 0 ) { + for ( i = v0; i < X->n; i++ ) { r1 = X->p[i] >> (biL - t1); X->p[i] <<= t1; X->p[i] |= r0; @@ -751,7 +730,7 @@ int mbedtls_mpi_shift_l( mbedtls_mpi *X, size_t count ) cleanup: - return( ret ); + return ( ret ); } /* @@ -765,28 +744,25 @@ int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) v0 = count / biL; v1 = count & (biL - 1); - if( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) + if ( v0 > X->n || ( v0 == X->n && v1 > 0 ) ) return mbedtls_mpi_lset( X, 0 ); /* * shift by count / limb_size */ - if( v0 > 0 ) - { - for( i = 0; i < X->n - v0; i++ ) + if ( v0 > 0 ) { + for ( i = 0; i < X->n - v0; i++ ) X->p[i] = X->p[i + v0]; - for( ; i < X->n; i++ ) + for ( ; i < X->n; i++ ) X->p[i] = 0; } /* * shift by count % limb_size */ - if( v1 > 0 ) - { - for( i = X->n; i > 0; i-- ) - { + if ( v1 > 0 ) { + for ( i = X->n; i > 0; i-- ) { r1 = X->p[i - 1] << (biL - v1); X->p[i - 1] >>= v1; X->p[i - 1] |= r0; @@ -794,7 +770,7 @@ int mbedtls_mpi_shift_r( mbedtls_mpi *X, size_t count ) } } - return( 0 ); + return ( 0 ); } /* @@ -804,27 +780,26 @@ int mbedtls_mpi_cmp_abs( const mbedtls_mpi *X, const mbedtls_mpi *Y ) { size_t i, j; - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) + for ( i = X->n; i > 0; i-- ) + if ( X->p[i - 1] != 0 ) break; - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) + for ( j = Y->n; j > 0; j-- ) + if ( Y->p[j - 1] != 0 ) break; - if( i == 0 && j == 0 ) - return( 0 ); + if ( i == 0 && j == 0 ) + return ( 0 ); - if( i > j ) return( 1 ); - if( j > i ) return( -1 ); + if ( i > j ) return ( 1 ); + if ( j > i ) return ( -1 ); - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( 1 ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -1 ); + for ( ; i > 0; i-- ) { + if ( X->p[i - 1] > Y->p[i - 1] ) return ( 1 ); + if ( X->p[i - 1] < Y->p[i - 1] ) return ( -1 ); } - return( 0 ); + return ( 0 ); } /* @@ -834,30 +809,29 @@ int mbedtls_mpi_cmp_mpi( const mbedtls_mpi *X, const mbedtls_mpi *Y ) { size_t i, j; - for( i = X->n; i > 0; i-- ) - if( X->p[i - 1] != 0 ) + for ( i = X->n; i > 0; i-- ) + if ( X->p[i - 1] != 0 ) break; - for( j = Y->n; j > 0; j-- ) - if( Y->p[j - 1] != 0 ) + for ( j = Y->n; j > 0; j-- ) + if ( Y->p[j - 1] != 0 ) break; - if( i == 0 && j == 0 ) - return( 0 ); + if ( i == 0 && j == 0 ) + return ( 0 ); - if( i > j ) return( X->s ); - if( j > i ) return( -Y->s ); + if ( i > j ) return ( X->s ); + if ( j > i ) return ( -Y->s ); - if( X->s > 0 && Y->s < 0 ) return( 1 ); - if( Y->s > 0 && X->s < 0 ) return( -1 ); + if ( X->s > 0 && Y->s < 0 ) return ( 1 ); + if ( Y->s > 0 && X->s < 0 ) return ( -1 ); - for( ; i > 0; i-- ) - { - if( X->p[i - 1] > Y->p[i - 1] ) return( X->s ); - if( X->p[i - 1] < Y->p[i - 1] ) return( -X->s ); + for ( ; i > 0; i-- ) { + if ( X->p[i - 1] > Y->p[i - 1] ) return ( X->s ); + if ( X->p[i - 1] < Y->p[i - 1] ) return ( -X->s ); } - return( 0 ); + return ( 0 ); } /* @@ -873,7 +847,7 @@ int mbedtls_mpi_cmp_int( const mbedtls_mpi *X, mbedtls_mpi_sint z ) Y.n = 1; Y.p = p; - return( mbedtls_mpi_cmp_mpi( X, &Y ) ); + return ( mbedtls_mpi_cmp_mpi( X, &Y ) ); } /* @@ -885,12 +859,13 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi size_t i, j; mbedtls_mpi_uint *o, *p, c, tmp; - if( X == B ) - { - const mbedtls_mpi *T = A; A = X; B = T; + if ( X == B ) { + const mbedtls_mpi *T = A; + A = X; + B = T; } - if( X != A ) + if ( X != A ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, A ) ); /* @@ -898,38 +873,42 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi */ X->s = 1; - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) + for ( j = B->n; j > 0; j-- ) + if ( B->p[j - 1] != 0 ) break; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, j ) ); - o = B->p; p = X->p; c = 0; + o = B->p; + p = X->p; + c = 0; /* * tmp is used because it might happen that p == o */ - for( i = 0; i < j; i++, o++, p++ ) - { - tmp= *o; - *p += c; c = ( *p < c ); - *p += tmp; c += ( *p < tmp ); + for ( i = 0; i < j; i++, o++, p++ ) { + tmp = *o; + *p += c; + c = ( *p < c ); + *p += tmp; + c += ( *p < tmp ); } - while( c != 0 ) - { - if( i >= X->n ) - { + while ( c != 0 ) { + if ( i >= X->n ) { MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i + 1 ) ); p = X->p + i; } - *p += c; c = ( *p < c ); i++; p++; + *p += c; + c = ( *p < c ); + i++; + p++; } cleanup: - return( ret ); + return ( ret ); } /* @@ -940,16 +919,19 @@ static void mpi_sub_hlp( size_t n, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d ) size_t i; mbedtls_mpi_uint c, z; - for( i = c = 0; i < n; i++, s++, d++ ) - { - z = ( *d < c ); *d -= c; - c = ( *d < *s ) + z; *d -= *s; + for ( i = c = 0; i < n; i++, s++, d++ ) { + z = ( *d < c ); + *d -= c; + c = ( *d < *s ) + z; + *d -= *s; } - while( c != 0 ) - { - z = ( *d < c ); *d -= c; - c = z; i++; d++; + while ( c != 0 ) { + z = ( *d < c ); + *d -= c; + c = z; + i++; + d++; } } @@ -962,18 +944,17 @@ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi int ret; size_t n; - if( mbedtls_mpi_cmp_abs( A, B ) < 0 ) - return( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); + if ( mbedtls_mpi_cmp_abs( A, B ) < 0 ) + return ( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); mbedtls_mpi_init( &TB ); - if( X == B ) - { + if ( X == B ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); B = &TB; } - if( X != A ) + if ( X != A ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, A ) ); /* @@ -983,8 +964,8 @@ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi ret = 0; - for( n = B->n; n > 0; n-- ) - if( B->p[n - 1] != 0 ) + for ( n = B->n; n > 0; n-- ) + if ( B->p[n - 1] != 0 ) break; mpi_sub_hlp( n, B->p, X->p ); @@ -993,7 +974,7 @@ int mbedtls_mpi_sub_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi mbedtls_mpi_free( &TB ); - return( ret ); + return ( ret ); } /* @@ -1003,28 +984,22 @@ int mbedtls_mpi_add_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi { int ret, s = A->s; - if( A->s * B->s < 0 ) - { - if( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) - { + if ( A->s * B->s < 0 ) { + if ( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, A, B ) ); X->s = s; - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, B, A ) ); X->s = -s; } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( X, A, B ) ); X->s = s; } cleanup: - return( ret ); + return ( ret ); } /* @@ -1034,28 +1009,22 @@ int mbedtls_mpi_sub_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi { int ret, s = A->s; - if( A->s * B->s > 0 ) - { - if( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) - { + if ( A->s * B->s > 0 ) { + if ( mbedtls_mpi_cmp_abs( A, B ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, A, B ) ); X->s = s; - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( X, B, A ) ); X->s = -s; } - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( X, A, B ) ); X->s = s; } cleanup: - return( ret ); + return ( ret ); } /* @@ -1071,7 +1040,7 @@ int mbedtls_mpi_add_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint _B.n = 1; _B.p = p; - return( mbedtls_mpi_add_mpi( X, A, &_B ) ); + return ( mbedtls_mpi_add_mpi( X, A, &_B ) ); } /* @@ -1087,7 +1056,7 @@ int mbedtls_mpi_sub_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_sint _B.n = 1; _B.p = p; - return( mbedtls_mpi_sub_mpi( X, A, &_B ) ); + return ( mbedtls_mpi_sub_mpi( X, A, &_B ) ); } /* @@ -1106,22 +1075,19 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp mbedtls_mpi_uint c = 0, t = 0; #if defined(MULADDC_HUIT) - for( ; i >= 8; i -= 8 ) - { + for ( ; i >= 8; i -= 8 ) { MULADDC_INIT MULADDC_HUIT MULADDC_STOP } - for( ; i > 0; i-- ) - { + for ( ; i > 0; i-- ) { MULADDC_INIT MULADDC_CORE MULADDC_STOP } #else /* MULADDC_HUIT */ - for( ; i >= 16; i -= 16 ) - { + for ( ; i >= 16; i -= 16 ) { MULADDC_INIT MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE @@ -1135,8 +1101,7 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp MULADDC_STOP } - for( ; i >= 8; i -= 8 ) - { + for ( ; i >= 8; i -= 8 ) { MULADDC_INIT MULADDC_CORE MULADDC_CORE MULADDC_CORE MULADDC_CORE @@ -1146,8 +1111,7 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp MULADDC_STOP } - for( ; i > 0; i-- ) - { + for ( ; i > 0; i-- ) { MULADDC_INIT MULADDC_CORE MULADDC_STOP @@ -1157,9 +1121,10 @@ void mpi_mul_hlp( size_t i, mbedtls_mpi_uint *s, mbedtls_mpi_uint *d, mbedtls_mp t++; do { - *d += c; c = ( *d < c ); d++; - } - while( c != 0 ); + *d += c; + c = ( *d < c ); + d++; + } while ( c != 0 ); } /* @@ -1171,32 +1136,40 @@ int mbedtls_mpi_mul_mpi( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi size_t i, j; mbedtls_mpi TA, TB; - mbedtls_mpi_init( &TA ); mbedtls_mpi_init( &TB ); + mbedtls_mpi_init( &TA ); + mbedtls_mpi_init( &TB ); - if( X == A ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); A = &TA; } - if( X == B ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); B = &TB; } + if ( X == A ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); + A = &TA; + } + if ( X == B ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); + B = &TB; + } - for( i = A->n; i > 0; i-- ) - if( A->p[i - 1] != 0 ) + for ( i = A->n; i > 0; i-- ) + if ( A->p[i - 1] != 0 ) break; - for( j = B->n; j > 0; j-- ) - if( B->p[j - 1] != 0 ) + for ( j = B->n; j > 0; j-- ) + if ( B->p[j - 1] != 0 ) break; MBEDTLS_MPI_CHK( mbedtls_mpi_grow( X, i + j ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( X, 0 ) ); - for( i++; j > 0; j-- ) + for ( i++; j > 0; j-- ) mpi_mul_hlp( i - 1, A->p, X->p + j - 1, B->p[j - 1] ); X->s = A->s * B->s; cleanup: - mbedtls_mpi_free( &TB ); mbedtls_mpi_free( &TA ); + mbedtls_mpi_free( &TB ); + mbedtls_mpi_free( &TA ); - return( ret ); + return ( ret ); } /* @@ -1212,7 +1185,7 @@ int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint _B.p = p; p[0] = b; - return( mbedtls_mpi_mul_mpi( X, A, &_B ) ); + return ( mbedtls_mpi_mul_mpi( X, A, &_B ) ); } /* @@ -1220,7 +1193,7 @@ int mbedtls_mpi_mul_int( mbedtls_mpi *X, const mbedtls_mpi *A, mbedtls_mpi_uint * mbedtls_mpi_uint divisor, d */ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, - mbedtls_mpi_uint u0, mbedtls_mpi_uint d, mbedtls_mpi_uint *r ) + mbedtls_mpi_uint u0, mbedtls_mpi_uint d, mbedtls_mpi_uint *r ) { #if defined(MBEDTLS_HAVE_UDBL) mbedtls_t_udbl dividend, quotient; @@ -1235,8 +1208,7 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, /* * Check for overflow */ - if( 0 == d || u1 >= d ) - { + if ( 0 == d || u1 >= d ) { if (r != NULL) *r = ~0; return ( ~0 ); @@ -1246,10 +1218,10 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, dividend = (mbedtls_t_udbl) u1 << biL; dividend |= (mbedtls_t_udbl) u0; quotient = dividend / d; - if( quotient > ( (mbedtls_t_udbl) 1 << biL ) - 1 ) + if ( quotient > ( (mbedtls_t_udbl) 1 << biL ) - 1 ) quotient = ( (mbedtls_t_udbl) 1 << biL ) - 1; - if( r != NULL ) + if ( r != NULL ) *r = (mbedtls_mpi_uint)( dividend - (quotient * d ) ); return (mbedtls_mpi_uint) quotient; @@ -1282,8 +1254,7 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, q1 = u1 / d1; r0 = u1 - d1 * q1; - while( q1 >= radix || ( q1 * d0 > radix * r0 + u0_msw ) ) - { + while ( q1 >= radix || ( q1 * d0 > radix * r0 + u0_msw ) ) { q1 -= 1; r0 += d1; @@ -1294,8 +1265,7 @@ static mbedtls_mpi_uint mbedtls_int_div_int( mbedtls_mpi_uint u1, q0 = rAX / d1; r0 = rAX - q0 * d1; - while( q0 >= radix || ( q0 * d0 > radix * r0 + u0_lsw ) ) - { + while ( q0 >= radix || ( q0 * d0 > radix * r0 + u0_lsw ) ) { q0 -= 1; r0 += d1; @@ -1320,17 +1290,19 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c size_t i, n, t, k; mbedtls_mpi X, Y, Z, T1, T2; - if( mbedtls_mpi_cmp_int( B, 0 ) == 0 ) - return( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); + if ( mbedtls_mpi_cmp_int( B, 0 ) == 0 ) + return ( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); - mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); - mbedtls_mpi_init( &T1 ); mbedtls_mpi_init( &T2 ); + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &Z ); + mbedtls_mpi_init( &T1 ); + mbedtls_mpi_init( &T2 ); - if( mbedtls_mpi_cmp_abs( A, B ) < 0 ) - { - if( Q != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_lset( Q, 0 ) ); - if( R != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, A ) ); - return( 0 ); + if ( mbedtls_mpi_cmp_abs( A, B ) < 0 ) { + if ( Q != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_lset( Q, 0 ) ); + if ( R != NULL ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, A ) ); + return ( 0 ); } MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &X, A ) ); @@ -1343,38 +1315,32 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &T2, 3 ) ); k = mbedtls_mpi_bitlen( &Y ) % biL; - if( k < biL - 1 ) - { + if ( k < biL - 1 ) { k = biL - 1 - k; MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &X, k ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &Y, k ) ); - } - else k = 0; + } else k = 0; n = X.n - 1; t = Y.n - 1; MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &Y, biL * ( n - t ) ) ); - while( mbedtls_mpi_cmp_mpi( &X, &Y ) >= 0 ) - { + while ( mbedtls_mpi_cmp_mpi( &X, &Y ) >= 0 ) { Z.p[n - t]++; MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &Y ) ); } MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &Y, biL * ( n - t ) ) ); - for( i = n; i > t ; i-- ) - { - if( X.p[i] >= Y.p[t] ) + for ( i = n; i > t ; i-- ) { + if ( X.p[i] >= Y.p[t] ) Z.p[i - t - 1] = ~0; - else - { + else { Z.p[i - t - 1] = mbedtls_int_div_int( X.p[i], X.p[i - 1], - Y.p[t], NULL); + Y.p[t], NULL); } Z.p[i - t - 1]++; - do - { + do { Z.p[i - t - 1]--; MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &T1, 0 ) ); @@ -1386,15 +1352,13 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c T2.p[0] = ( i < 2 ) ? 0 : X.p[i - 2]; T2.p[1] = ( i < 1 ) ? 0 : X.p[i - 1]; T2.p[2] = X.p[i]; - } - while( mbedtls_mpi_cmp_mpi( &T1, &T2 ) > 0 ); + } while ( mbedtls_mpi_cmp_mpi( &T1, &T2 ) > 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T1, &Y, Z.p[i - t - 1] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); - if( mbedtls_mpi_cmp_int( &X, 0 ) < 0 ) - { + if ( mbedtls_mpi_cmp_int( &X, 0 ) < 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &T1, &Y ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T1, biL * ( i - t - 1 ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &X, &X, &T1 ) ); @@ -1402,28 +1366,29 @@ int mbedtls_mpi_div_mpi( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, c } } - if( Q != NULL ) - { + if ( Q != NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( Q, &Z ) ); Q->s = A->s * B->s; } - if( R != NULL ) - { + if ( R != NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &X, k ) ); X.s = A->s; MBEDTLS_MPI_CHK( mbedtls_mpi_copy( R, &X ) ); - if( mbedtls_mpi_cmp_int( R, 0 ) == 0 ) + if ( mbedtls_mpi_cmp_int( R, 0 ) == 0 ) R->s = 1; } cleanup: - mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); - mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 ); + mbedtls_mpi_free( &X ); + mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &Z ); + mbedtls_mpi_free( &T1 ); + mbedtls_mpi_free( &T2 ); - return( ret ); + return ( ret ); } /* @@ -1439,7 +1404,7 @@ int mbedtls_mpi_div_int( mbedtls_mpi *Q, mbedtls_mpi *R, const mbedtls_mpi *A, m _B.n = 1; _B.p = p; - return( mbedtls_mpi_div_mpi( Q, R, A, &_B ) ); + return ( mbedtls_mpi_div_mpi( Q, R, A, &_B ) ); } /* @@ -1449,20 +1414,20 @@ int mbedtls_mpi_mod_mpi( mbedtls_mpi *R, const mbedtls_mpi *A, const mbedtls_mpi { int ret; - if( mbedtls_mpi_cmp_int( B, 0 ) < 0 ) - return( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); + if ( mbedtls_mpi_cmp_int( B, 0 ) < 0 ) + return ( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); MBEDTLS_MPI_CHK( mbedtls_mpi_div_mpi( NULL, R, A, B ) ); - while( mbedtls_mpi_cmp_int( R, 0 ) < 0 ) - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( R, R, B ) ); + while ( mbedtls_mpi_cmp_int( R, 0 ) < 0 ) + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( R, R, B ) ); - while( mbedtls_mpi_cmp_mpi( R, B ) >= 0 ) - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( R, R, B ) ); + while ( mbedtls_mpi_cmp_mpi( R, B ) >= 0 ) + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( R, R, B ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1473,32 +1438,29 @@ int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_ size_t i; mbedtls_mpi_uint x, y, z; - if( b == 0 ) - return( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); + if ( b == 0 ) + return ( MBEDTLS_ERR_MPI_DIVISION_BY_ZERO ); - if( b < 0 ) - return( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); + if ( b < 0 ) + return ( MBEDTLS_ERR_MPI_NEGATIVE_VALUE ); /* * handle trivial cases */ - if( b == 1 ) - { + if ( b == 1 ) { *r = 0; - return( 0 ); + return ( 0 ); } - if( b == 2 ) - { + if ( b == 2 ) { *r = A->p[0] & 1; - return( 0 ); + return ( 0 ); } /* * general case */ - for( i = A->n, y = 0; i > 0; i-- ) - { + for ( i = A->n, y = 0; i > 0; i-- ) { x = A->p[i - 1]; y = ( y << biH ) | ( x >> biH ); z = y / b; @@ -1514,12 +1476,12 @@ int mbedtls_mpi_mod_int( mbedtls_mpi_uint *r, const mbedtls_mpi *A, mbedtls_mpi_ * If A is negative, then the current y represents a negative value. * Flipping it to the positive side. */ - if( A->s < 0 && y != 0 ) + if ( A->s < 0 && y != 0 ) y = b - y; *r = y; - return( 0 ); + return ( 0 ); } /* @@ -1533,7 +1495,7 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N ) x = m0; x += ( ( m0 + 2 ) & 4 ) << 1; - for( i = biL; i >= 8; i /= 2 ) + for ( i = biL; i >= 8; i /= 2 ) x *= ( 2 - ( m0 * x ) ); *mm = ~x + 1; @@ -1543,13 +1505,13 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N ) * Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36) */ static int mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi *N, mbedtls_mpi_uint mm, - const mbedtls_mpi *T ) + const mbedtls_mpi *T ) { size_t i, n, m; mbedtls_mpi_uint u0, u1, *d; - if( T->n < N->n + 1 || T->p == NULL ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( T->n < N->n + 1 || T->p == NULL ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); memset( T->p, 0, T->n * ciL ); @@ -1557,8 +1519,7 @@ static int mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi n = N->n; m = ( B->n < n ) ? B->n : n; - for( i = 0; i < n; i++ ) - { + for ( i = 0; i < n; i++ ) { /* * T = (T + u0*B + u1*N) / 2^biL */ @@ -1568,18 +1529,19 @@ static int mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi mpi_mul_hlp( m, B->p, d, u0 ); mpi_mul_hlp( n, N->p, d, u1 ); - *d++ = u0; d[n + 1] = 0; + *d++ = u0; + d[n + 1] = 0; } memcpy( A->p, d, ( n + 1 ) * ciL ); - if( mbedtls_mpi_cmp_abs( A, N ) >= 0 ) + if ( mbedtls_mpi_cmp_abs( A, N ) >= 0 ) mpi_sub_hlp( n, N->p, A->p ); else /* prevent timing attacks */ mpi_sub_hlp( n, A->p, T->p ); - return( 0 ); + return ( 0 ); } /* @@ -1593,7 +1555,7 @@ static int mpi_montred( mbedtls_mpi *A, const mbedtls_mpi *N, mbedtls_mpi_uint m U.n = U.s = (int) z; U.p = &z; - return( mpi_montmul( A, &U, N, mm, T ) ); + return ( mpi_montmul( A, &U, N, mm, T ) ); } /* @@ -1609,17 +1571,18 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi mbedtls_mpi RR, T, W[ 2 << MBEDTLS_MPI_WINDOW_SIZE ], Apos; int neg; - if( mbedtls_mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( N, 0 ) < 0 || ( N->p[0] & 1 ) == 0 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); - if( mbedtls_mpi_cmp_int( E, 0 ) < 0 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( E, 0 ) < 0 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); /* * Init temps and window size */ mpi_montg_init( &mm, N ); - mbedtls_mpi_init( &RR ); mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &RR ); + mbedtls_mpi_init( &T ); mbedtls_mpi_init( &Apos ); memset( W, 0, sizeof( W ) ); @@ -1628,7 +1591,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi wsize = ( i > 671 ) ? 6 : ( i > 239 ) ? 5 : ( i > 79 ) ? 4 : ( i > 23 ) ? 3 : 1; - if( wsize > MBEDTLS_MPI_WINDOW_SIZE ) + if ( wsize > MBEDTLS_MPI_WINDOW_SIZE ) wsize = MBEDTLS_MPI_WINDOW_SIZE; j = N->n + 1; @@ -1640,8 +1603,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi * Compensate for negative A (and correct at the end) */ neg = ( A->s == -1 ); - if( neg ) - { + if ( neg ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Apos, A ) ); Apos.s = 1; A = &Apos; @@ -1650,22 +1612,20 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi /* * If 1st call, pre-compute R^2 mod N */ - if( _RR == NULL || _RR->p == NULL ) - { + if ( _RR == NULL || _RR->p == NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &RR, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &RR, N->n * 2 * biL ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &RR, &RR, N ) ); - if( _RR != NULL ) + if ( _RR != NULL ) memcpy( _RR, &RR, sizeof( mbedtls_mpi ) ); - } - else + } else memcpy( &RR, _RR, sizeof( mbedtls_mpi ) ); /* * W[1] = A * R^2 * R^-1 mod N = A * R mod N */ - if( mbedtls_mpi_cmp_mpi( A, N ) >= 0 ) + if ( mbedtls_mpi_cmp_mpi( A, N ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &W[1], A, N ) ); else MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[1], A ) ); @@ -1678,8 +1638,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, &RR ) ); MBEDTLS_MPI_CHK( mpi_montred( X, N, mm, &T ) ); - if( wsize > 1 ) - { + if ( wsize > 1 ) { /* * W[1 << (wsize - 1)] = W[1] ^ (wsize - 1) */ @@ -1688,14 +1647,13 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &W[j], N->n + 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[j], &W[1] ) ); - for( i = 0; i < wsize - 1; i++ ) + for ( i = 0; i < wsize - 1; i++ ) MBEDTLS_MPI_CHK( mpi_montmul( &W[j], &W[j], N, mm, &T ) ); /* * W[i] = W[i - 1] * W[1] */ - for( i = j + 1; i < ( one << wsize ); i++ ) - { + for ( i = j + 1; i < ( one << wsize ); i++ ) { MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &W[i], N->n + 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &W[i], &W[i - 1] ) ); @@ -1709,11 +1667,9 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi wbits = 0; state = 0; - while( 1 ) - { - if( bufsize == 0 ) - { - if( nblimbs == 0 ) + while ( 1 ) { + if ( bufsize == 0 ) { + if ( nblimbs == 0 ) break; nblimbs--; @@ -1728,11 +1684,10 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi /* * skip leading 0s */ - if( ei == 0 && state == 0 ) + if ( ei == 0 && state == 0 ) continue; - if( ei == 0 && state == 1 ) - { + if ( ei == 0 && state == 1 ) { /* * out of window, square X */ @@ -1748,12 +1703,11 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi nbits++; wbits |= ( ei << ( wsize - nbits ) ); - if( nbits == wsize ) - { + if ( nbits == wsize ) { /* * X = X^wsize R^-1 mod N */ - for( i = 0; i < wsize; i++ ) + for ( i = 0; i < wsize; i++ ) MBEDTLS_MPI_CHK( mpi_montmul( X, X, N, mm, &T ) ); /* @@ -1770,13 +1724,12 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi /* * process the remaining bits */ - for( i = 0; i < nbits; i++ ) - { + for ( i = 0; i < nbits; i++ ) { MBEDTLS_MPI_CHK( mpi_montmul( X, X, N, mm, &T ) ); wbits <<= 1; - if( ( wbits & ( one << wsize ) ) != 0 ) + if ( ( wbits & ( one << wsize ) ) != 0 ) MBEDTLS_MPI_CHK( mpi_montmul( X, &W[1], N, mm, &T ) ); } @@ -1785,23 +1738,24 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi */ MBEDTLS_MPI_CHK( mpi_montred( X, N, mm, &T ) ); - if( neg ) - { + if ( neg ) { X->s = -1; MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( X, N, X ) ); } cleanup: - for( i = ( one << ( wsize - 1 ) ); i < ( one << wsize ); i++ ) + for ( i = ( one << ( wsize - 1 ) ); i < ( one << wsize ); i++ ) mbedtls_mpi_free( &W[i] ); - mbedtls_mpi_free( &W[1] ); mbedtls_mpi_free( &T ); mbedtls_mpi_free( &Apos ); + mbedtls_mpi_free( &W[1] ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &Apos ); - if( _RR == NULL || _RR->p == NULL ) + if ( _RR == NULL || _RR->p == NULL ) mbedtls_mpi_free( &RR ); - return( ret ); + return ( ret ); } /* @@ -1813,7 +1767,9 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B size_t lz, lzt; mbedtls_mpi TG, TA, TB; - mbedtls_mpi_init( &TG ); mbedtls_mpi_init( &TA ); mbedtls_mpi_init( &TB ); + mbedtls_mpi_init( &TG ); + mbedtls_mpi_init( &TA ); + mbedtls_mpi_init( &TB ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TA, A ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &TB, B ) ); @@ -1821,7 +1777,7 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B lz = mbedtls_mpi_lsb( &TA ); lzt = mbedtls_mpi_lsb( &TB ); - if( lzt < lz ) + if ( lzt < lz ) lz = lzt; MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TA, lz ) ); @@ -1829,18 +1785,14 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B TA.s = TB.s = 1; - while( mbedtls_mpi_cmp_int( &TA, 0 ) != 0 ) - { + while ( mbedtls_mpi_cmp_int( &TA, 0 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TA, mbedtls_mpi_lsb( &TA ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TB, mbedtls_mpi_lsb( &TB ) ) ); - if( mbedtls_mpi_cmp_mpi( &TA, &TB ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &TA, &TB ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( &TA, &TA, &TB ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TA, 1 ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( &TB, &TB, &TA ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TB, 1 ) ); } @@ -1851,9 +1803,11 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B cleanup: - mbedtls_mpi_free( &TG ); mbedtls_mpi_free( &TA ); mbedtls_mpi_free( &TB ); + mbedtls_mpi_free( &TG ); + mbedtls_mpi_free( &TA ); + mbedtls_mpi_free( &TB ); - return( ret ); + return ( ret ); } /* @@ -1864,20 +1818,20 @@ int mbedtls_mpi_gcd( mbedtls_mpi *G, const mbedtls_mpi *A, const mbedtls_mpi *B * deterministic, eg for tests). */ int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( size > MBEDTLS_MPI_MAX_SIZE ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( size > MBEDTLS_MPI_MAX_SIZE ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( f_rng( p_rng, buf, size ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( X, buf, size ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1888,17 +1842,22 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi int ret; mbedtls_mpi G, TA, TU, U1, U2, TB, TV, V1, V2; - if( mbedtls_mpi_cmp_int( N, 0 ) <= 0 ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( N, 0 ) <= 0 ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); - mbedtls_mpi_init( &TA ); mbedtls_mpi_init( &TU ); mbedtls_mpi_init( &U1 ); mbedtls_mpi_init( &U2 ); - mbedtls_mpi_init( &G ); mbedtls_mpi_init( &TB ); mbedtls_mpi_init( &TV ); - mbedtls_mpi_init( &V1 ); mbedtls_mpi_init( &V2 ); + mbedtls_mpi_init( &TA ); + mbedtls_mpi_init( &TU ); + mbedtls_mpi_init( &U1 ); + mbedtls_mpi_init( &U2 ); + mbedtls_mpi_init( &G ); + mbedtls_mpi_init( &TB ); + mbedtls_mpi_init( &TV ); + mbedtls_mpi_init( &V1 ); + mbedtls_mpi_init( &V2 ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &G, A, N ) ); - if( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) - { + if ( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) { ret = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; goto cleanup; } @@ -1913,14 +1872,11 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &V1, 0 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &V2, 1 ) ); - do - { - while( ( TU.p[0] & 1 ) == 0 ) - { + do { + while ( ( TU.p[0] & 1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TU, 1 ) ); - if( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) - { + if ( ( U1.p[0] & 1 ) != 0 || ( U2.p[0] & 1 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &U1, &U1, &TB ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U2, &U2, &TA ) ); } @@ -1929,12 +1885,10 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &U2, 1 ) ); } - while( ( TV.p[0] & 1 ) == 0 ) - { + while ( ( TV.p[0] & 1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &TV, 1 ) ); - if( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) - { + if ( ( V1.p[0] & 1 ) != 0 || ( V2.p[0] & 1 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &V1, &V1, &TB ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V2, &V2, &TA ) ); } @@ -1943,63 +1897,64 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &V2, 1 ) ); } - if( mbedtls_mpi_cmp_mpi( &TU, &TV ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &TU, &TV ) >= 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &TU, &TU, &TV ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U1, &U1, &V1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U2, &U2, &V2 ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &TV, &TV, &TU ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V1, &V1, &U1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V2, &V2, &U2 ) ); } - } - while( mbedtls_mpi_cmp_int( &TU, 0 ) != 0 ); + } while ( mbedtls_mpi_cmp_int( &TU, 0 ) != 0 ); - while( mbedtls_mpi_cmp_int( &V1, 0 ) < 0 ) + while ( mbedtls_mpi_cmp_int( &V1, 0 ) < 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &V1, &V1, N ) ); - while( mbedtls_mpi_cmp_mpi( &V1, N ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &V1, N ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &V1, &V1, N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( X, &V1 ) ); cleanup: - mbedtls_mpi_free( &TA ); mbedtls_mpi_free( &TU ); mbedtls_mpi_free( &U1 ); mbedtls_mpi_free( &U2 ); - mbedtls_mpi_free( &G ); mbedtls_mpi_free( &TB ); mbedtls_mpi_free( &TV ); - mbedtls_mpi_free( &V1 ); mbedtls_mpi_free( &V2 ); + mbedtls_mpi_free( &TA ); + mbedtls_mpi_free( &TU ); + mbedtls_mpi_free( &U1 ); + mbedtls_mpi_free( &U2 ); + mbedtls_mpi_free( &G ); + mbedtls_mpi_free( &TB ); + mbedtls_mpi_free( &TV ); + mbedtls_mpi_free( &V1 ); + mbedtls_mpi_free( &V2 ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_GENPRIME) -static const int small_prime[] = -{ - 3, 5, 7, 11, 13, 17, 19, 23, - 29, 31, 37, 41, 43, 47, 53, 59, - 61, 67, 71, 73, 79, 83, 89, 97, - 101, 103, 107, 109, 113, 127, 131, 137, - 139, 149, 151, 157, 163, 167, 173, 179, - 181, 191, 193, 197, 199, 211, 223, 227, - 229, 233, 239, 241, 251, 257, 263, 269, - 271, 277, 281, 283, 293, 307, 311, 313, - 317, 331, 337, 347, 349, 353, 359, 367, - 373, 379, 383, 389, 397, 401, 409, 419, - 421, 431, 433, 439, 443, 449, 457, 461, - 463, 467, 479, 487, 491, 499, 503, 509, - 521, 523, 541, 547, 557, 563, 569, 571, - 577, 587, 593, 599, 601, 607, 613, 617, - 619, 631, 641, 643, 647, 653, 659, 661, - 673, 677, 683, 691, 701, 709, 719, 727, - 733, 739, 743, 751, 757, 761, 769, 773, - 787, 797, 809, 811, 821, 823, 827, 829, - 839, 853, 857, 859, 863, 877, 881, 883, - 887, 907, 911, 919, 929, 937, 941, 947, - 953, 967, 971, 977, 983, 991, 997, -103 +static const int small_prime[] = { + 3, 5, 7, 11, 13, 17, 19, 23, + 29, 31, 37, 41, 43, 47, 53, 59, + 61, 67, 71, 73, 79, 83, 89, 97, + 101, 103, 107, 109, 113, 127, 131, 137, + 139, 149, 151, 157, 163, 167, 173, 179, + 181, 191, 193, 197, 199, 211, 223, 227, + 229, 233, 239, 241, 251, 257, 263, 269, + 271, 277, 281, 283, 293, 307, 311, 313, + 317, 331, 337, 347, 349, 353, 359, 367, + 373, 379, 383, 389, 397, 401, 409, 419, + 421, 431, 433, 439, 443, 449, 457, 461, + 463, 467, 479, 487, 491, 499, 503, 509, + 521, 523, 541, 547, 557, 563, 569, 571, + 577, 587, 593, 599, 601, 607, 613, 617, + 619, 631, 641, 643, 647, 653, 659, 661, + 673, 677, 683, 691, 701, 709, 719, 727, + 733, 739, 743, 751, 757, 761, 769, 773, + 787, 797, 809, 811, 821, 823, 827, 829, + 839, 853, 857, 859, 863, 877, 881, 883, + 887, 907, 911, 919, 929, 937, 941, 947, + 953, 967, 971, 977, 983, 991, 997, -103 }; /* @@ -2017,22 +1972,21 @@ static int mpi_check_small_factors( const mbedtls_mpi *X ) size_t i; mbedtls_mpi_uint r; - if( ( X->p[0] & 1 ) == 0 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + if ( ( X->p[0] & 1 ) == 0 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); - for( i = 0; small_prime[i] > 0; i++ ) - { - if( mbedtls_mpi_cmp_int( X, small_prime[i] ) <= 0 ) - return( 1 ); + for ( i = 0; small_prime[i] > 0; i++ ) { + if ( mbedtls_mpi_cmp_int( X, small_prime[i] ) <= 0 ) + return ( 1 ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, small_prime[i] ) ); - if( r == 0 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + if ( r == 0 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); } cleanup: - return( ret ); + return ( ret ); } /* @@ -2046,7 +2000,10 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, size_t i, j, k, n, s; mbedtls_mpi W, R, T, A, RR; - mbedtls_mpi_init( &W ); mbedtls_mpi_init( &R ); mbedtls_mpi_init( &T ); mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &W ); + mbedtls_mpi_init( &R ); + mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &A ); mbedtls_mpi_init( &RR ); /* @@ -2066,15 +2023,13 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, ( i >= 650 ) ? 4 : ( i >= 350 ) ? 8 : ( i >= 250 ) ? 12 : ( i >= 150 ) ? 18 : 27 ); - for( i = 0; i < n; i++ ) - { + for ( i = 0; i < n; i++ ) { /* * pick a random A, 1 < A < |X| - 1 */ MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &A, X->n * ciL, f_rng, p_rng ) ); - if( mbedtls_mpi_cmp_mpi( &A, &W ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &A, &W ) >= 0 ) { j = mbedtls_mpi_bitlen( &A ) - mbedtls_mpi_bitlen( &W ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &A, j + 1 ) ); } @@ -2102,20 +2057,19 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, */ MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &A, &A, &R, X, &RR ) ); - if( mbedtls_mpi_cmp_mpi( &A, &W ) == 0 || - mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) + if ( mbedtls_mpi_cmp_mpi( &A, &W ) == 0 || + mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) continue; j = 1; - while( j < s && mbedtls_mpi_cmp_mpi( &A, &W ) != 0 ) - { + while ( j < s && mbedtls_mpi_cmp_mpi( &A, &W ) != 0 ) { /* * A = A * A mod |X| */ MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &A, &A ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &A, &T, X ) ); - if( mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) + if ( mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) break; j++; @@ -2124,27 +2078,29 @@ static int mpi_miller_rabin( const mbedtls_mpi *X, /* * not prime if A != |X| - 1 or A == 1 */ - if( mbedtls_mpi_cmp_mpi( &A, &W ) != 0 || - mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &A, &W ) != 0 || + mbedtls_mpi_cmp_int( &A, 1 ) == 0 ) { ret = MBEDTLS_ERR_MPI_NOT_ACCEPTABLE; break; } } cleanup: - mbedtls_mpi_free( &W ); mbedtls_mpi_free( &R ); mbedtls_mpi_free( &T ); mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &W ); + mbedtls_mpi_free( &R ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &A ); mbedtls_mpi_free( &RR ); - return( ret ); + return ( ret ); } /* * Pseudo-primality test: small factors, then Miller-Rabin */ int mbedtls_mpi_is_prime( const mbedtls_mpi *X, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_mpi XX; @@ -2153,38 +2109,37 @@ int mbedtls_mpi_is_prime( const mbedtls_mpi *X, XX.n = X->n; XX.p = X->p; - if( mbedtls_mpi_cmp_int( &XX, 0 ) == 0 || - mbedtls_mpi_cmp_int( &XX, 1 ) == 0 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + if ( mbedtls_mpi_cmp_int( &XX, 0 ) == 0 || + mbedtls_mpi_cmp_int( &XX, 1 ) == 0 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); - if( mbedtls_mpi_cmp_int( &XX, 2 ) == 0 ) - return( 0 ); + if ( mbedtls_mpi_cmp_int( &XX, 2 ) == 0 ) + return ( 0 ); - if( ( ret = mpi_check_small_factors( &XX ) ) != 0 ) - { - if( ret == 1 ) - return( 0 ); + if ( ( ret = mpi_check_small_factors( &XX ) ) != 0 ) { + if ( ret == 1 ) + return ( 0 ); - return( ret ); + return ( ret ); } - return( mpi_miller_rabin( &XX, f_rng, p_rng ) ); + return ( mpi_miller_rabin( &XX, f_rng, p_rng ) ); } /* * Prime number generation */ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; size_t k, n; mbedtls_mpi_uint r; mbedtls_mpi Y; - if( nbits < 3 || nbits > MBEDTLS_MPI_MAX_BITS ) - return( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); + if ( nbits < 3 || nbits > MBEDTLS_MPI_MAX_BITS ) + return ( MBEDTLS_ERR_MPI_BAD_INPUT_DATA ); mbedtls_mpi_init( &Y ); @@ -2193,24 +2148,20 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( X, n * ciL, f_rng, p_rng ) ); k = mbedtls_mpi_bitlen( X ); - if( k > nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, k - nbits + 1 ) ); + if ( k > nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( X, k - nbits + 1 ) ); - mbedtls_mpi_set_bit( X, nbits-1, 1 ); + mbedtls_mpi_set_bit( X, nbits - 1, 1 ); X->p[0] |= 1; - if( dh_flag == 0 ) - { - while( ( ret = mbedtls_mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) - { - if( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) + if ( dh_flag == 0 ) { + while ( ( ret = mbedtls_mpi_is_prime( X, f_rng, p_rng ) ) != 0 ) { + if ( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) goto cleanup; MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 2 ) ); } - } - else - { + } else { /* * An necessary condition for Y and X = 2Y + 1 to be prime * is X = 2 mod 3 (which is equivalent to Y = 2 mod 3). @@ -2220,30 +2171,28 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, X->p[0] |= 2; MBEDTLS_MPI_CHK( mbedtls_mpi_mod_int( &r, X, 3 ) ); - if( r == 0 ) + if ( r == 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 8 ) ); - else if( r == 1 ) + else if ( r == 1 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( X, X, 4 ) ); /* Set Y = (X-1) / 2, which is X / 2 because X is odd */ MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Y, X ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &Y, 1 ) ); - while( 1 ) - { + while ( 1 ) { /* * First, check small factors for X and Y * before doing Miller-Rabin on any of them */ - if( ( ret = mpi_check_small_factors( X ) ) == 0 && - ( ret = mpi_check_small_factors( &Y ) ) == 0 && - ( ret = mpi_miller_rabin( X, f_rng, p_rng ) ) == 0 && - ( ret = mpi_miller_rabin( &Y, f_rng, p_rng ) ) == 0 ) - { + if ( ( ret = mpi_check_small_factors( X ) ) == 0 && + ( ret = mpi_check_small_factors( &Y ) ) == 0 && + ( ret = mpi_miller_rabin( X, f_rng, p_rng ) ) == 0 && + ( ret = mpi_miller_rabin( &Y, f_rng, p_rng ) ) == 0 ) { break; } - if( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) + if ( ret != MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ) goto cleanup; /* @@ -2260,7 +2209,7 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, mbedtls_mpi_free( &Y ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_GENPRIME */ @@ -2269,8 +2218,7 @@ int mbedtls_mpi_gen_prime( mbedtls_mpi *X, size_t nbits, int dh_flag, #define GCD_PAIR_COUNT 3 -static const int gcd_pairs[GCD_PAIR_COUNT][3] = -{ +static const int gcd_pairs[GCD_PAIR_COUNT][3] = { { 693, 609, 21 }, { 1764, 868, 28 }, { 768454923, 542167814, 1 } @@ -2284,135 +2232,134 @@ int mbedtls_mpi_self_test( int verbose ) int ret, i; mbedtls_mpi A, E, N, X, Y, U, V; - mbedtls_mpi_init( &A ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &N ); mbedtls_mpi_init( &X ); - mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &U ); mbedtls_mpi_init( &V ); + mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &E ); + mbedtls_mpi_init( &N ); + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &U ); + mbedtls_mpi_init( &V ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &A, 16, - "EFE021C2645FD1DC586E69184AF4A31E" \ - "D5F53E93B5F123FA41680867BA110131" \ - "944FE7952E2517337780CB0DB80E61AA" \ - "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); + "EFE021C2645FD1DC586E69184AF4A31E" \ + "D5F53E93B5F123FA41680867BA110131" \ + "944FE7952E2517337780CB0DB80E61AA" \ + "E7C8DDC6C5C6AADEB34EB38A2F40D5E6" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &E, 16, - "B2E7EFD37075B9F03FF989C7C5051C20" \ - "34D2A323810251127E7BF8625A4F49A5" \ - "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ - "5B5C25763222FEFCCFC38B832366C29E" ) ); + "B2E7EFD37075B9F03FF989C7C5051C20" \ + "34D2A323810251127E7BF8625A4F49A5" \ + "F3E27F4DA8BD59C47D6DAABA4C8127BD" \ + "5B5C25763222FEFCCFC38B832366C29E" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &N, 16, - "0066A198186C18C10B2F5ED9B522752A" \ - "9830B69916E535C8F047518A889A43A5" \ - "94B6BED27A168D31D4A52F88925AA8F5" ) ); + "0066A198186C18C10B2F5ED9B522752A" \ + "9830B69916E535C8F047518A889A43A5" \ + "94B6BED27A168D31D4A52F88925AA8F5" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &A, &N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "602AB7ECA597A3D6B56FF9829A5E8B85" \ - "9E857EA95A03512E2BAE7391688D264A" \ - "A5663B0341DB9CCFD2C4C5F421FEC814" \ - "8001B72E848A38CAE1C65F78E56ABDEF" \ - "E12D3C039B8A02D6BE593F0BBBDA56F1" \ - "ECF677152EF804370C1A305CAF3B5BF1" \ - "30879B56C61DE584A0F53A2447A51E" ) ); - - if( verbose != 0 ) + "602AB7ECA597A3D6B56FF9829A5E8B85" \ + "9E857EA95A03512E2BAE7391688D264A" \ + "A5663B0341DB9CCFD2C4C5F421FEC814" \ + "8001B72E848A38CAE1C65F78E56ABDEF" \ + "E12D3C039B8A02D6BE593F0BBBDA56F1" \ + "ECF677152EF804370C1A305CAF3B5BF1" \ + "30879B56C61DE584A0F53A2447A51E" ) ); + + if ( verbose != 0 ) mbedtls_printf( " MPI test #1 (mul_mpi): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); MBEDTLS_MPI_CHK( mbedtls_mpi_div_mpi( &X, &Y, &A, &N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "256567336059E52CAE22925474705F39A94" ) ); + "256567336059E52CAE22925474705F39A94" ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &V, 16, - "6613F26162223DF488E9CD48CC132C7A" \ - "0AC93C701B001B092E4E5B9F73BCD27B" \ - "9EE50D0657C77F374E903CDFA4C642" ) ); + "6613F26162223DF488E9CD48CC132C7A" \ + "0AC93C701B001B092E4E5B9F73BCD27B" \ + "9EE50D0657C77F374E903CDFA4C642" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #2 (div_mpi): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 || - mbedtls_mpi_cmp_mpi( &Y, &V ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 || + mbedtls_mpi_cmp_mpi( &Y, &V ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &X, &A, &E, &N, NULL ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "36E139AEA55215609D2816998ED020BB" \ - "BD96C37890F65171D948E9BC7CBAA4D9" \ - "325D24D6A3C12710F10A09FA08AB87" ) ); + "36E139AEA55215609D2816998ED020BB" \ + "BD96C37890F65171D948E9BC7CBAA4D9" \ + "325D24D6A3C12710F10A09FA08AB87" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #3 (exp_mod): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &X, &A, &N ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &U, 16, - "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ - "C3DBA76456363A10869622EAC2DD84EC" \ - "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); + "003A0AAEDD7E784FC07D8F9EC6E3BFD5" \ + "C3DBA76456363A10869622EAC2DD84EC" \ + "C5B8A74DAC4D09E03B5E0BE779F2DF61" ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #4 (inv_mod): " ); - if( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_mpi( &X, &U ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MPI test #5 (simple gcd): " ); - for( i = 0; i < GCD_PAIR_COUNT; i++ ) - { + for ( i = 0; i < GCD_PAIR_COUNT; i++ ) { MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &X, gcd_pairs[i][0] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &Y, gcd_pairs[i][1] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &A, &X, &Y ) ); - if( mbedtls_mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_mpi_cmp_int( &A, gcd_pairs[i][2] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed at %d\n", i ); ret = 1; @@ -2420,21 +2367,26 @@ int mbedtls_mpi_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: - if( ret != 0 && verbose != 0 ) + if ( ret != 0 && verbose != 0 ) mbedtls_printf( "Unexpected error, return code = %08X\n", ret ); - mbedtls_mpi_free( &A ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &N ); mbedtls_mpi_free( &X ); - mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &U ); mbedtls_mpi_free( &V ); + mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &E ); + mbedtls_mpi_free( &N ); + mbedtls_mpi_free( &X ); + mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &U ); + mbedtls_mpi_free( &V ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/blowfish.c b/external_libs/mbedtls/library/blowfish.c index 9003f0d..48744aa 100644 --- a/external_libs/mbedtls/library/blowfish.c +++ b/external_libs/mbedtls/library/blowfish.c @@ -40,8 +40,10 @@ #if !defined(MBEDTLS_BLOWFISH_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -68,11 +70,11 @@ static void mbedtls_zeroize( void *v, size_t n ) { #endif static const uint32_t P[MBEDTLS_BLOWFISH_ROUNDS + 2] = { - 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, - 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, - 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, - 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, - 0x9216D5D9L, 0x8979FB1BL + 0x243F6A88L, 0x85A308D3L, 0x13198A2EL, 0x03707344L, + 0xA4093822L, 0x299F31D0L, 0x082EFA98L, 0xEC4E6C89L, + 0x452821E6L, 0x38D01377L, 0xBE5466CFL, 0x34E90C6CL, + 0xC0AC29B7L, 0xC97C50DDL, 0x3F84D5B5L, 0xB5470917L, + 0x9216D5D9L, 0x8979FB1BL }; /* declarations of data at the end of this file */ @@ -80,21 +82,21 @@ static const uint32_t S[4][256]; static uint32_t F( mbedtls_blowfish_context *ctx, uint32_t x ) { - unsigned short a, b, c, d; - uint32_t y; - - d = (unsigned short)(x & 0xFF); - x >>= 8; - c = (unsigned short)(x & 0xFF); - x >>= 8; - b = (unsigned short)(x & 0xFF); - x >>= 8; - a = (unsigned short)(x & 0xFF); - y = ctx->S[0][a] + ctx->S[1][b]; - y = y ^ ctx->S[2][c]; - y = y + ctx->S[3][d]; - - return( y ); + unsigned short a, b, c, d; + uint32_t y; + + d = (unsigned short)(x & 0xFF); + x >>= 8; + c = (unsigned short)(x & 0xFF); + x >>= 8; + b = (unsigned short)(x & 0xFF); + x >>= 8; + a = (unsigned short)(x & 0xFF); + y = ctx->S[0][a] + ctx->S[1][b]; + y = y ^ ctx->S[2][c]; + y = y + ctx->S[3][d]; + + return ( y ); } static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t *xr ) @@ -105,8 +107,7 @@ static void blowfish_enc( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t Xl = *xl; Xr = *xr; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i ) - { + for ( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS; ++i ) { Xl = Xl ^ ctx->P[i]; Xr = F( ctx, Xl ) ^ Xr; @@ -134,8 +135,7 @@ static void blowfish_dec( mbedtls_blowfish_context *ctx, uint32_t *xl, uint32_t Xl = *xl; Xr = *xr; - for( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i ) - { + for ( i = MBEDTLS_BLOWFISH_ROUNDS + 1; i > 1; --i ) { Xl = Xl ^ ctx->P[i]; Xr = F( ctx, Xl ) ^ Xr; @@ -162,7 +162,7 @@ void mbedtls_blowfish_init( mbedtls_blowfish_context *ctx ) void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_blowfish_context ) ); @@ -172,33 +172,29 @@ void mbedtls_blowfish_free( mbedtls_blowfish_context *ctx ) * Blowfish key schedule */ int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { unsigned int i, j, k; uint32_t data, datal, datar; - if( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS || - ( keybits % 8 ) ) - { - return( MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH ); + if ( keybits < MBEDTLS_BLOWFISH_MIN_KEY_BITS || keybits > MBEDTLS_BLOWFISH_MAX_KEY_BITS || + ( keybits % 8 ) ) { + return ( MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH ); } keybits >>= 3; - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j++ ) + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 256; j++ ) ctx->S[i][j] = S[i][j]; } j = 0; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i ) - { + for ( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; ++i ) { data = 0x00000000; - for( k = 0; k < 4; ++k ) - { + for ( k = 0; k < 4; ++k ) { data = ( data << 8 ) | key[j++]; - if( j >= keybits ) + if ( j >= keybits ) j = 0; } ctx->P[i] = P[i] ^ data; @@ -207,51 +203,45 @@ int mbedtls_blowfish_setkey( mbedtls_blowfish_context *ctx, const unsigned char datal = 0x00000000; datar = 0x00000000; - for( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 ) - { + for ( i = 0; i < MBEDTLS_BLOWFISH_ROUNDS + 2; i += 2 ) { blowfish_enc( ctx, &datal, &datar ); ctx->P[i] = datal; ctx->P[i + 1] = datar; } - for( i = 0; i < 4; i++ ) - { - for( j = 0; j < 256; j += 2 ) - { + for ( i = 0; i < 4; i++ ) { + for ( j = 0; j < 256; j += 2 ) { blowfish_enc( ctx, &datal, &datar ); ctx->S[i][j] = datal; ctx->S[i][j + 1] = datar; } } - return( 0 ); + return ( 0 ); } /* * Blowfish-ECB block encryption/decryption */ int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, - int mode, - const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ) + int mode, + const unsigned char input[MBEDTLS_BLOWFISH_BLOCKSIZE], + unsigned char output[MBEDTLS_BLOWFISH_BLOCKSIZE] ) { uint32_t X0, X1; GET_UINT32_BE( X0, input, 0 ); GET_UINT32_BE( X1, input, 4 ); - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { + if ( mode == MBEDTLS_BLOWFISH_DECRYPT ) { blowfish_dec( ctx, &X0, &X1 ); - } - else /* MBEDTLS_BLOWFISH_ENCRYPT */ - { + } else { /* MBEDTLS_BLOWFISH_ENCRYPT */ blowfish_enc( ctx, &X0, &X1 ); } PUT_UINT32_BE( X0, output, 0 ); PUT_UINT32_BE( X1, output, 4 ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -259,26 +249,24 @@ int mbedtls_blowfish_crypt_ecb( mbedtls_blowfish_context *ctx, * Blowfish-CBC buffer encryption/decryption */ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[MBEDTLS_BLOWFISH_BLOCKSIZE]; - if( length % MBEDTLS_BLOWFISH_BLOCKSIZE ) - return( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); + if ( length % MBEDTLS_BLOWFISH_BLOCKSIZE ) + return ( MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_BLOWFISH_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, MBEDTLS_BLOWFISH_BLOCKSIZE ); mbedtls_blowfish_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE;i++ ) + for ( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, MBEDTLS_BLOWFISH_BLOCKSIZE ); @@ -287,12 +275,9 @@ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, output += MBEDTLS_BLOWFISH_BLOCKSIZE; length -= MBEDTLS_BLOWFISH_BLOCKSIZE; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < MBEDTLS_BLOWFISH_BLOCKSIZE; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_blowfish_crypt_ecb( ctx, mode, output, output ); @@ -304,7 +289,7 @@ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -313,21 +298,19 @@ int mbedtls_blowfish_crypt_cbc( mbedtls_blowfish_context *ctx, * Blowfish CFB buffer encryption/decryption */ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ) { int c; size_t n = *iv_off; - if( mode == MBEDTLS_BLOWFISH_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) + if ( mode == MBEDTLS_BLOWFISH_DECRYPT ) { + while ( length-- ) { + if ( n == 0 ) mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); c = *input++; @@ -336,12 +319,9 @@ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, n = ( n + 1 ) % MBEDTLS_BLOWFISH_BLOCKSIZE; } - } - else - { - while( length-- ) - { - if( n == 0 ) + } else { + while ( length-- ) { + if ( n == 0 ) mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, iv, iv ); iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); @@ -352,7 +332,7 @@ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, *iv_off = n; - return( 0 ); + return ( 0 ); } #endif /*MBEDTLS_CIPHER_MODE_CFB */ @@ -361,24 +341,23 @@ int mbedtls_blowfish_crypt_cfb64( mbedtls_blowfish_context *ctx, * Blowfish CTR buffer encryption/decryption */ int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], - unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], - const unsigned char *input, - unsigned char *output ) + size_t length, + size_t *nc_off, + unsigned char nonce_counter[MBEDTLS_BLOWFISH_BLOCKSIZE], + unsigned char stream_block[MBEDTLS_BLOWFISH_BLOCKSIZE], + const unsigned char *input, + unsigned char *output ) { int c, i; size_t n = *nc_off; - while( length-- ) - { - if( n == 0 ) { + while ( length-- ) { + if ( n == 0 ) { mbedtls_blowfish_crypt_ecb( ctx, MBEDTLS_BLOWFISH_ENCRYPT, nonce_counter, - stream_block ); + stream_block ); - for( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) + for ( i = MBEDTLS_BLOWFISH_BLOCKSIZE; i > 0; i-- ) + if ( ++nonce_counter[i - 1] != 0 ) break; } c = *input++; @@ -389,12 +368,13 @@ int mbedtls_blowfish_crypt_ctr( mbedtls_blowfish_context *ctx, *nc_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ static const uint32_t S[4][256] = { - { 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, + { + 0xD1310BA6L, 0x98DFB5ACL, 0x2FFD72DBL, 0xD01ADFB7L, 0xB8E1AFEDL, 0x6A267E96L, 0xBA7C9045L, 0xF12C7F99L, 0x24A19947L, 0xB3916CF7L, 0x0801F2E2L, 0x858EFC16L, 0x636920D8L, 0x71574E69L, 0xA458FEA3L, 0xF4933D7EL, @@ -457,8 +437,10 @@ static const uint32_t S[4][256] = { 0xD60F573FL, 0xBC9BC6E4L, 0x2B60A476L, 0x81E67400L, 0x08BA6FB5L, 0x571BE91FL, 0xF296EC6BL, 0x2A0DD915L, 0xB6636521L, 0xE7B9F9B6L, 0xFF34052EL, 0xC5855664L, - 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL }, - { 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, + 0x53B02D5DL, 0xA99F8FA1L, 0x08BA4799L, 0x6E85076AL + }, + { + 0x4B7A70E9L, 0xB5B32944L, 0xDB75092EL, 0xC4192623L, 0xAD6EA6B0L, 0x49A7DF7DL, 0x9CEE60B8L, 0x8FEDB266L, 0xECAA8C71L, 0x699A17FFL, 0x5664526CL, 0xC2B19EE1L, 0x193602A5L, 0x75094C29L, 0xA0591340L, 0xE4183A3EL, @@ -521,8 +503,10 @@ static const uint32_t S[4][256] = { 0x9E447A2EL, 0xC3453484L, 0xFDD56705L, 0x0E1E9EC9L, 0xDB73DBD3L, 0x105588CDL, 0x675FDA79L, 0xE3674340L, 0xC5C43465L, 0x713E38D8L, 0x3D28F89EL, 0xF16DFF20L, - 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L }, - { 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, + 0x153E21E7L, 0x8FB03D4AL, 0xE6E39F2BL, 0xDB83ADF7L + }, + { + 0xE93D5A68L, 0x948140F7L, 0xF64C261CL, 0x94692934L, 0x411520F7L, 0x7602D4F7L, 0xBCF46B2EL, 0xD4A20068L, 0xD4082471L, 0x3320F46AL, 0x43B7D4B7L, 0x500061AFL, 0x1E39F62EL, 0x97244546L, 0x14214F74L, 0xBF8B8840L, @@ -585,8 +569,10 @@ static const uint32_t S[4][256] = { 0xED545578L, 0x08FCA5B5L, 0xD83D7CD3L, 0x4DAD0FC4L, 0x1E50EF5EL, 0xB161E6F8L, 0xA28514D9L, 0x6C51133CL, 0x6FD5C7E7L, 0x56E14EC4L, 0x362ABFCEL, 0xDDC6C837L, - 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L }, - { 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, + 0xD79A3234L, 0x92638212L, 0x670EFA8EL, 0x406000E0L + }, + { + 0x3A39CE37L, 0xD3FAF5CFL, 0xABC27737L, 0x5AC52D1BL, 0x5CB0679EL, 0x4FA33742L, 0xD3822740L, 0x99BC9BBEL, 0xD5118E9DL, 0xBF0F7315L, 0xD62D1C7EL, 0xC700C47BL, 0xB78C1B6BL, 0x21A19045L, 0xB26EB1BEL, 0x6A366EB4L, @@ -649,7 +635,8 @@ static const uint32_t S[4][256] = { 0x85CBFE4EL, 0x8AE88DD8L, 0x7AAAF9B0L, 0x4CF9AA7EL, 0x1948C25CL, 0x02FB8A8CL, 0x01C36AE4L, 0xD6EBE1F9L, 0x90D4F869L, 0xA65CDEA0L, 0x3F09252DL, 0xC208E69FL, - 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L } + 0xB74E6132L, 0xCE77E25BL, 0x578FDFE3L, 0x3AC372E6L + } }; #endif /* !MBEDTLS_BLOWFISH_ALT */ diff --git a/external_libs/mbedtls/library/camellia.c b/external_libs/mbedtls/library/camellia.c index ac6f96a..9acf745 100644 --- a/external_libs/mbedtls/library/camellia.c +++ b/external_libs/mbedtls/library/camellia.c @@ -49,8 +49,10 @@ #if !defined(MBEDTLS_CAMELLIA_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -76,8 +78,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { } #endif -static const unsigned char SIGMA_CHARS[6][8] = -{ +static const unsigned char SIGMA_CHARS[6][8] = { { 0xa0, 0x9e, 0x66, 0x7f, 0x3b, 0xcc, 0x90, 0x8b }, { 0xb6, 0x7a, 0xe8, 0x58, 0x4c, 0xaa, 0x73, 0xb2 }, { 0xc6, 0xef, 0x37, 0x2f, 0xe9, 0x4f, 0x82, 0xbe }, @@ -88,24 +89,23 @@ static const unsigned char SIGMA_CHARS[6][8] = #if defined(MBEDTLS_CAMELLIA_SMALL_MEMORY) -static const unsigned char FSb[256] = -{ - 112,130, 44,236,179, 39,192,229,228,133, 87, 53,234, 12,174, 65, - 35,239,107,147, 69, 25,165, 33,237, 14, 79, 78, 29,101,146,189, - 134,184,175,143,124,235, 31,206, 62, 48,220, 95, 94,197, 11, 26, - 166,225, 57,202,213, 71, 93, 61,217, 1, 90,214, 81, 86,108, 77, - 139, 13,154,102,251,204,176, 45,116, 18, 43, 32,240,177,132,153, - 223, 76,203,194, 52,126,118, 5,109,183,169, 49,209, 23, 4,215, - 20, 88, 58, 97,222, 27, 17, 28, 50, 15,156, 22, 83, 24,242, 34, - 254, 68,207,178,195,181,122,145, 36, 8,232,168, 96,252,105, 80, - 170,208,160,125,161,137, 98,151, 84, 91, 30,149,224,255,100,210, - 16,196, 0, 72,163,247,117,219,138, 3,230,218, 9, 63,221,148, - 135, 92,131, 2,205, 74,144, 51,115,103,246,243,157,127,191,226, - 82,155,216, 38,200, 55,198, 59,129,150,111, 75, 19,190, 99, 46, - 233,121,167,140,159,110,188,142, 41,245,249,182, 47,253,180, 89, - 120,152, 6,106,231, 70,113,186,212, 37,171, 66,136,162,141,250, - 114, 7,185, 85,248,238,172, 10, 54, 73, 42,104, 60, 56,241,164, - 64, 40,211,123,187,201, 67,193, 21,227,173,244,119,199,128,158 +static const unsigned char FSb[256] = { + 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, + 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, + 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, + 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, + 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, + 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, + 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, + 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, + 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, + 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, + 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, + 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, + 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, + 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, + 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, + 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 }; #define SBOX1(n) FSb[(n)] @@ -115,84 +115,80 @@ static const unsigned char FSb[256] = #else /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ -static const unsigned char FSb[256] = -{ - 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, - 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, - 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, - 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, - 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, - 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, - 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, - 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, - 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, - 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, - 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, - 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, - 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, - 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, - 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, - 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 +static const unsigned char FSb[256] = { + 112, 130, 44, 236, 179, 39, 192, 229, 228, 133, 87, 53, 234, 12, 174, 65, + 35, 239, 107, 147, 69, 25, 165, 33, 237, 14, 79, 78, 29, 101, 146, 189, + 134, 184, 175, 143, 124, 235, 31, 206, 62, 48, 220, 95, 94, 197, 11, 26, + 166, 225, 57, 202, 213, 71, 93, 61, 217, 1, 90, 214, 81, 86, 108, 77, + 139, 13, 154, 102, 251, 204, 176, 45, 116, 18, 43, 32, 240, 177, 132, 153, + 223, 76, 203, 194, 52, 126, 118, 5, 109, 183, 169, 49, 209, 23, 4, 215, + 20, 88, 58, 97, 222, 27, 17, 28, 50, 15, 156, 22, 83, 24, 242, 34, + 254, 68, 207, 178, 195, 181, 122, 145, 36, 8, 232, 168, 96, 252, 105, 80, + 170, 208, 160, 125, 161, 137, 98, 151, 84, 91, 30, 149, 224, 255, 100, 210, + 16, 196, 0, 72, 163, 247, 117, 219, 138, 3, 230, 218, 9, 63, 221, 148, + 135, 92, 131, 2, 205, 74, 144, 51, 115, 103, 246, 243, 157, 127, 191, 226, + 82, 155, 216, 38, 200, 55, 198, 59, 129, 150, 111, 75, 19, 190, 99, 46, + 233, 121, 167, 140, 159, 110, 188, 142, 41, 245, 249, 182, 47, 253, 180, 89, + 120, 152, 6, 106, 231, 70, 113, 186, 212, 37, 171, 66, 136, 162, 141, 250, + 114, 7, 185, 85, 248, 238, 172, 10, 54, 73, 42, 104, 60, 56, 241, 164, + 64, 40, 211, 123, 187, 201, 67, 193, 21, 227, 173, 244, 119, 199, 128, 158 }; -static const unsigned char FSb2[256] = -{ - 224, 5, 88, 217, 103, 78, 129, 203, 201, 11, 174, 106, 213, 24, 93, 130, - 70, 223, 214, 39, 138, 50, 75, 66, 219, 28, 158, 156, 58, 202, 37, 123, - 13, 113, 95, 31, 248, 215, 62, 157, 124, 96, 185, 190, 188, 139, 22, 52, - 77, 195, 114, 149, 171, 142, 186, 122, 179, 2, 180, 173, 162, 172, 216, 154, - 23, 26, 53, 204, 247, 153, 97, 90, 232, 36, 86, 64, 225, 99, 9, 51, - 191, 152, 151, 133, 104, 252, 236, 10, 218, 111, 83, 98, 163, 46, 8, 175, - 40, 176, 116, 194, 189, 54, 34, 56, 100, 30, 57, 44, 166, 48, 229, 68, - 253, 136, 159, 101, 135, 107, 244, 35, 72, 16, 209, 81, 192, 249, 210, 160, - 85, 161, 65, 250, 67, 19, 196, 47, 168, 182, 60, 43, 193, 255, 200, 165, - 32, 137, 0, 144, 71, 239, 234, 183, 21, 6, 205, 181, 18, 126, 187, 41, - 15, 184, 7, 4, 155, 148, 33, 102, 230, 206, 237, 231, 59, 254, 127, 197, - 164, 55, 177, 76, 145, 110, 141, 118, 3, 45, 222, 150, 38, 125, 198, 92, - 211, 242, 79, 25, 63, 220, 121, 29, 82, 235, 243, 109, 94, 251, 105, 178, - 240, 49, 12, 212, 207, 140, 226, 117, 169, 74, 87, 132, 17, 69, 27, 245, - 228, 14, 115, 170, 241, 221, 89, 20, 108, 146, 84, 208, 120, 112, 227, 73, - 128, 80, 167, 246, 119, 147, 134, 131, 42, 199, 91, 233, 238, 143, 1, 61 +static const unsigned char FSb2[256] = { + 224, 5, 88, 217, 103, 78, 129, 203, 201, 11, 174, 106, 213, 24, 93, 130, + 70, 223, 214, 39, 138, 50, 75, 66, 219, 28, 158, 156, 58, 202, 37, 123, + 13, 113, 95, 31, 248, 215, 62, 157, 124, 96, 185, 190, 188, 139, 22, 52, + 77, 195, 114, 149, 171, 142, 186, 122, 179, 2, 180, 173, 162, 172, 216, 154, + 23, 26, 53, 204, 247, 153, 97, 90, 232, 36, 86, 64, 225, 99, 9, 51, + 191, 152, 151, 133, 104, 252, 236, 10, 218, 111, 83, 98, 163, 46, 8, 175, + 40, 176, 116, 194, 189, 54, 34, 56, 100, 30, 57, 44, 166, 48, 229, 68, + 253, 136, 159, 101, 135, 107, 244, 35, 72, 16, 209, 81, 192, 249, 210, 160, + 85, 161, 65, 250, 67, 19, 196, 47, 168, 182, 60, 43, 193, 255, 200, 165, + 32, 137, 0, 144, 71, 239, 234, 183, 21, 6, 205, 181, 18, 126, 187, 41, + 15, 184, 7, 4, 155, 148, 33, 102, 230, 206, 237, 231, 59, 254, 127, 197, + 164, 55, 177, 76, 145, 110, 141, 118, 3, 45, 222, 150, 38, 125, 198, 92, + 211, 242, 79, 25, 63, 220, 121, 29, 82, 235, 243, 109, 94, 251, 105, 178, + 240, 49, 12, 212, 207, 140, 226, 117, 169, 74, 87, 132, 17, 69, 27, 245, + 228, 14, 115, 170, 241, 221, 89, 20, 108, 146, 84, 208, 120, 112, 227, 73, + 128, 80, 167, 246, 119, 147, 134, 131, 42, 199, 91, 233, 238, 143, 1, 61 }; -static const unsigned char FSb3[256] = -{ - 56, 65, 22, 118, 217, 147, 96, 242, 114, 194, 171, 154, 117, 6, 87, 160, - 145, 247, 181, 201, 162, 140, 210, 144, 246, 7, 167, 39, 142, 178, 73, 222, - 67, 92, 215, 199, 62, 245, 143, 103, 31, 24, 110, 175, 47, 226, 133, 13, - 83, 240, 156, 101, 234, 163, 174, 158, 236, 128, 45, 107, 168, 43, 54, 166, - 197, 134, 77, 51, 253, 102, 88, 150, 58, 9, 149, 16, 120, 216, 66, 204, - 239, 38, 229, 97, 26, 63, 59, 130, 182, 219, 212, 152, 232, 139, 2, 235, - 10, 44, 29, 176, 111, 141, 136, 14, 25, 135, 78, 11, 169, 12, 121, 17, - 127, 34, 231, 89, 225, 218, 61, 200, 18, 4, 116, 84, 48, 126, 180, 40, - 85, 104, 80, 190, 208, 196, 49, 203, 42, 173, 15, 202, 112, 255, 50, 105, - 8, 98, 0, 36, 209, 251, 186, 237, 69, 129, 115, 109, 132, 159, 238, 74, - 195, 46, 193, 1, 230, 37, 72, 153, 185, 179, 123, 249, 206, 191, 223, 113, - 41, 205, 108, 19, 100, 155, 99, 157, 192, 75, 183, 165, 137, 95, 177, 23, - 244, 188, 211, 70, 207, 55, 94, 71, 148, 250, 252, 91, 151, 254, 90, 172, - 60, 76, 3, 53, 243, 35, 184, 93, 106, 146, 213, 33, 68, 81, 198, 125, - 57, 131, 220, 170, 124, 119, 86, 5, 27, 164, 21, 52, 30, 28, 248, 82, - 32, 20, 233, 189, 221, 228, 161, 224, 138, 241, 214, 122, 187, 227, 64, 79 +static const unsigned char FSb3[256] = { + 56, 65, 22, 118, 217, 147, 96, 242, 114, 194, 171, 154, 117, 6, 87, 160, + 145, 247, 181, 201, 162, 140, 210, 144, 246, 7, 167, 39, 142, 178, 73, 222, + 67, 92, 215, 199, 62, 245, 143, 103, 31, 24, 110, 175, 47, 226, 133, 13, + 83, 240, 156, 101, 234, 163, 174, 158, 236, 128, 45, 107, 168, 43, 54, 166, + 197, 134, 77, 51, 253, 102, 88, 150, 58, 9, 149, 16, 120, 216, 66, 204, + 239, 38, 229, 97, 26, 63, 59, 130, 182, 219, 212, 152, 232, 139, 2, 235, + 10, 44, 29, 176, 111, 141, 136, 14, 25, 135, 78, 11, 169, 12, 121, 17, + 127, 34, 231, 89, 225, 218, 61, 200, 18, 4, 116, 84, 48, 126, 180, 40, + 85, 104, 80, 190, 208, 196, 49, 203, 42, 173, 15, 202, 112, 255, 50, 105, + 8, 98, 0, 36, 209, 251, 186, 237, 69, 129, 115, 109, 132, 159, 238, 74, + 195, 46, 193, 1, 230, 37, 72, 153, 185, 179, 123, 249, 206, 191, 223, 113, + 41, 205, 108, 19, 100, 155, 99, 157, 192, 75, 183, 165, 137, 95, 177, 23, + 244, 188, 211, 70, 207, 55, 94, 71, 148, 250, 252, 91, 151, 254, 90, 172, + 60, 76, 3, 53, 243, 35, 184, 93, 106, 146, 213, 33, 68, 81, 198, 125, + 57, 131, 220, 170, 124, 119, 86, 5, 27, 164, 21, 52, 30, 28, 248, 82, + 32, 20, 233, 189, 221, 228, 161, 224, 138, 241, 214, 122, 187, 227, 64, 79 }; -static const unsigned char FSb4[256] = -{ - 112, 44, 179, 192, 228, 87, 234, 174, 35, 107, 69, 165, 237, 79, 29, 146, - 134, 175, 124, 31, 62, 220, 94, 11, 166, 57, 213, 93, 217, 90, 81, 108, - 139, 154, 251, 176, 116, 43, 240, 132, 223, 203, 52, 118, 109, 169, 209, 4, - 20, 58, 222, 17, 50, 156, 83, 242, 254, 207, 195, 122, 36, 232, 96, 105, - 170, 160, 161, 98, 84, 30, 224, 100, 16, 0, 163, 117, 138, 230, 9, 221, - 135, 131, 205, 144, 115, 246, 157, 191, 82, 216, 200, 198, 129, 111, 19, 99, - 233, 167, 159, 188, 41, 249, 47, 180, 120, 6, 231, 113, 212, 171, 136, 141, - 114, 185, 248, 172, 54, 42, 60, 241, 64, 211, 187, 67, 21, 173, 119, 128, - 130, 236, 39, 229, 133, 53, 12, 65, 239, 147, 25, 33, 14, 78, 101, 189, - 184, 143, 235, 206, 48, 95, 197, 26, 225, 202, 71, 61, 1, 214, 86, 77, - 13, 102, 204, 45, 18, 32, 177, 153, 76, 194, 126, 5, 183, 49, 23, 215, - 88, 97, 27, 28, 15, 22, 24, 34, 68, 178, 181, 145, 8, 168, 252, 80, - 208, 125, 137, 151, 91, 149, 255, 210, 196, 72, 247, 219, 3, 218, 63, 148, - 92, 2, 74, 51, 103, 243, 127, 226, 155, 38, 55, 59, 150, 75, 190, 46, - 121, 140, 110, 142, 245, 182, 253, 89, 152, 106, 70, 186, 37, 66, 162, 250, - 7, 85, 238, 10, 73, 104, 56, 164, 40, 123, 201, 193, 227, 244, 199, 158 +static const unsigned char FSb4[256] = { + 112, 44, 179, 192, 228, 87, 234, 174, 35, 107, 69, 165, 237, 79, 29, 146, + 134, 175, 124, 31, 62, 220, 94, 11, 166, 57, 213, 93, 217, 90, 81, 108, + 139, 154, 251, 176, 116, 43, 240, 132, 223, 203, 52, 118, 109, 169, 209, 4, + 20, 58, 222, 17, 50, 156, 83, 242, 254, 207, 195, 122, 36, 232, 96, 105, + 170, 160, 161, 98, 84, 30, 224, 100, 16, 0, 163, 117, 138, 230, 9, 221, + 135, 131, 205, 144, 115, 246, 157, 191, 82, 216, 200, 198, 129, 111, 19, 99, + 233, 167, 159, 188, 41, 249, 47, 180, 120, 6, 231, 113, 212, 171, 136, 141, + 114, 185, 248, 172, 54, 42, 60, 241, 64, 211, 187, 67, 21, 173, 119, 128, + 130, 236, 39, 229, 133, 53, 12, 65, 239, 147, 25, 33, 14, 78, 101, 189, + 184, 143, 235, 206, 48, 95, 197, 26, 225, 202, 71, 61, 1, 214, 86, 77, + 13, 102, 204, 45, 18, 32, 177, 153, 76, 194, 126, 5, 183, 49, 23, 215, + 88, 97, 27, 28, 15, 22, 24, 34, 68, 178, 181, 145, 8, 168, 252, 80, + 208, 125, 137, 151, 91, 149, 255, 210, 196, 72, 247, 219, 3, 218, 63, 148, + 92, 2, 74, 51, 103, 243, 127, 226, 155, 38, 55, 59, 150, 75, 190, 46, + 121, 140, 110, 142, 245, 182, 253, 89, 152, 106, 70, 186, 37, 66, 162, 250, + 7, 85, 238, 10, 73, 104, 56, 164, 40, 123, 201, 193, 227, 244, 199, 158 }; #define SBOX1(n) FSb[(n)] @@ -202,8 +198,7 @@ static const unsigned char FSb4[256] = #endif /* MBEDTLS_CAMELLIA_SMALL_MEMORY */ -static const unsigned char shifts[2][4][4] = -{ +static const unsigned char shifts[2][4][4] = { { { 1, 1, 1, 1 }, /* KL */ { 0, 0, 0, 0 }, /* KR */ @@ -218,32 +213,46 @@ static const unsigned char shifts[2][4][4] = } }; -static const signed char indexes[2][4][20] = -{ +static const signed char indexes[2][4][20] = { { - { 0, 1, 2, 3, 8, 9, 10, 11, 38, 39, - 36, 37, 23, 20, 21, 22, 27, -1, -1, 26 }, /* KL -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }, /* KR -> RK */ - { 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, - 18, 19, -1, 24, 25, -1, 31, 28, 29, 30 }, /* KA -> RK */ - { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 } /* KB -> RK */ + { + 0, 1, 2, 3, 8, 9, 10, 11, 38, 39, + 36, 37, 23, 20, 21, 22, 27, -1, -1, 26 + }, /* KL -> RK */ + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + }, /* KR -> RK */ + { + 4, 5, 6, 7, 12, 13, 14, 15, 16, 17, + 18, 19, -1, 24, 25, -1, 31, 28, 29, 30 + }, /* KA -> RK */ + { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 + } /* KB -> RK */ }, { - { 0, 1, 2, 3, 61, 62, 63, 60, -1, -1, - -1, -1, 27, 24, 25, 26, 35, 32, 33, 34 }, /* KL -> RK */ - { -1, -1, -1, -1, 8, 9, 10, 11, 16, 17, - 18, 19, -1, -1, -1, -1, 39, 36, 37, 38 }, /* KR -> RK */ - { -1, -1, -1, -1, 12, 13, 14, 15, 58, 59, - 56, 57, 31, 28, 29, 30, -1, -1, -1, -1 }, /* KA -> RK */ - { 4, 5, 6, 7, 65, 66, 67, 64, 20, 21, - 22, 23, -1, -1, -1, -1, 43, 40, 41, 42 } /* KB -> RK */ + { + 0, 1, 2, 3, 61, 62, 63, 60, -1, -1, + -1, -1, 27, 24, 25, 26, 35, 32, 33, 34 + }, /* KL -> RK */ + { + -1, -1, -1, -1, 8, 9, 10, 11, 16, 17, + 18, 19, -1, -1, -1, -1, 39, 36, 37, 38 + }, /* KR -> RK */ + { + -1, -1, -1, -1, 12, 13, 14, 15, 58, 59, + 56, 57, 31, 28, 29, 30, -1, -1, -1, -1 + }, /* KA -> RK */ + { + 4, 5, 6, 7, 65, 66, 67, 64, 20, 21, + 22, 23, -1, -1, -1, -1, 43, 40, 41, 42 + } /* KB -> RK */ } }; -static const signed char transposes[2][20] = -{ +static const signed char transposes[2][20] = { { 21, 22, 23, 20, -1, -1, -1, -1, @@ -330,7 +339,7 @@ void mbedtls_camellia_init( mbedtls_camellia_context *ctx ) void mbedtls_camellia_free( mbedtls_camellia_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_camellia_context ) ); @@ -340,7 +349,7 @@ void mbedtls_camellia_free( mbedtls_camellia_context *ctx ) * Camellia key schedule (encryption) */ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int idx; size_t i; @@ -355,26 +364,32 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c memset( t, 0, 64 ); memset( RK, 0, sizeof(ctx->rk) ); - switch( keybits ) - { - case 128: ctx->nr = 3; idx = 0; break; + switch ( keybits ) { + case 128: + ctx->nr = 3; + idx = 0; + break; case 192: - case 256: ctx->nr = 4; idx = 1; break; - default : return( MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH ); + case 256: + ctx->nr = 4; + idx = 1; + break; + default : + return ( MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH ); } - for( i = 0; i < keybits / 8; ++i ) + for ( i = 0; i < keybits / 8; ++i ) t[i] = key[i]; - if( keybits == 192 ) { - for( i = 0; i < 8; i++ ) + if ( keybits == 192 ) { + for ( i = 0; i < 8; i++ ) t[24 + i] = ~t[16 + i]; } /* * Prepare SIGMA values */ - for( i = 0; i < 6; i++ ) { + for ( i = 0; i < 6; i++ ) { GET_UINT32_BE( SIGMA[i][0], SIGMA_CHARS[i], 0 ); GET_UINT32_BE( SIGMA[i][1], SIGMA_CHARS[i], 4 ); } @@ -386,25 +401,25 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c memset( KC, 0, sizeof(KC) ); /* Store KL, KR */ - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) GET_UINT32_BE( KC[i], t, i * 4 ); /* Generate KA */ - for( i = 0; i < 4; ++i ) + for ( i = 0; i < 4; ++i ) KC[8 + i] = KC[i] ^ KC[4 + i]; camellia_feistel( KC + 8, SIGMA[0], KC + 10 ); camellia_feistel( KC + 10, SIGMA[1], KC + 8 ); - for( i = 0; i < 4; ++i ) + for ( i = 0; i < 4; ++i ) KC[8 + i] ^= KC[i]; camellia_feistel( KC + 8, SIGMA[2], KC + 10 ); camellia_feistel( KC + 10, SIGMA[3], KC + 8 ); - if( keybits > 128 ) { + if ( keybits > 128 ) { /* Generate KB */ - for( i = 0; i < 4; ++i ) + for ( i = 0; i < 4; ++i ) KC[12 + i] = KC[4 + i] ^ KC[8 + i]; camellia_feistel( KC + 12, SIGMA[4], KC + 14 ); @@ -419,7 +434,7 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c SHIFT_AND_PLACE( idx, 0 ); /* Manipulating KR */ - if( keybits > 128 ) { + if ( keybits > 128 ) { SHIFT_AND_PLACE( idx, 1 ); } @@ -427,25 +442,25 @@ int mbedtls_camellia_setkey_enc( mbedtls_camellia_context *ctx, const unsigned c SHIFT_AND_PLACE( idx, 2 ); /* Manipulating KB */ - if( keybits > 128 ) { + if ( keybits > 128 ) { SHIFT_AND_PLACE( idx, 3 ); } /* Do transpositions */ - for( i = 0; i < 20; i++ ) { - if( transposes[idx][i] != -1 ) { + for ( i = 0; i < 20; i++ ) { + if ( transposes[idx][i] != -1 ) { RK[32 + 12 * idx + i] = RK[transposes[idx][i]]; } } - return( 0 ); + return ( 0 ); } /* * Camellia key schedule (decryption) */ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int idx, ret; size_t i; @@ -456,7 +471,7 @@ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned c mbedtls_camellia_init( &cty ); /* Also checks keybits */ - if( ( ret = mbedtls_camellia_setkey_enc( &cty, key, keybits ) ) != 0 ) + if ( ( ret = mbedtls_camellia_setkey_enc( &cty, key, keybits ) ) != 0 ) goto exit; ctx->nr = cty.nr; @@ -470,8 +485,7 @@ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned c *RK++ = *SK++; *RK++ = *SK++; - for( i = 22 + 8 * idx, SK -= 6; i > 0; i--, SK -= 4 ) - { + for ( i = 22 + 8 * idx, SK -= 6; i > 0; i--, SK -= 4 ) { *RK++ = *SK++; *RK++ = *SK++; } @@ -486,16 +500,16 @@ int mbedtls_camellia_setkey_dec( mbedtls_camellia_context *ctx, const unsigned c exit: mbedtls_camellia_free( &cty ); - return( ret ); + return ( ret ); } /* * Camellia-ECB block encryption/decryption */ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { int NR; uint32_t *RK, X[4]; @@ -515,7 +529,7 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, X[2] ^= *RK++; X[3] ^= *RK++; - while( NR ) { + while ( NR ) { --NR; camellia_feistel( X, RK, X + 2 ); RK += 2; @@ -530,7 +544,7 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, camellia_feistel( X + 2, RK, X ); RK += 2; - if( NR ) { + if ( NR ) { FL(X[0], X[1], RK[0], RK[1]); RK += 2; FLInv(X[2], X[3], RK[0], RK[1]); @@ -548,7 +562,7 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, PUT_UINT32_BE( X[0], output, 8 ); PUT_UINT32_BE( X[1], output, 12 ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -556,26 +570,24 @@ int mbedtls_camellia_crypt_ecb( mbedtls_camellia_context *ctx, * Camellia-CBC buffer encryption/decryption */ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; - if( length % 16 ) - return( MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH ); + if ( length % 16 ) + return ( MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_CAMELLIA_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_CAMELLIA_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 16 ); mbedtls_camellia_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 16 ); @@ -584,12 +596,9 @@ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, output += 16; length -= 16; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_camellia_crypt_ecb( ctx, mode, output, output ); @@ -601,7 +610,7 @@ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -610,21 +619,19 @@ int mbedtls_camellia_crypt_cbc( mbedtls_camellia_context *ctx, * Camellia-CFB128 buffer encryption/decryption */ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int c; size_t n = *iv_off; - if( mode == MBEDTLS_CAMELLIA_DECRYPT ) - { - while( length-- ) - { - if( n == 0 ) + if ( mode == MBEDTLS_CAMELLIA_DECRYPT ) { + while ( length-- ) { + if ( n == 0 ) mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, iv, iv ); c = *input++; @@ -633,12 +640,9 @@ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, n = ( n + 1 ) & 0x0F; } - } - else - { - while( length-- ) - { - if( n == 0 ) + } else { + while ( length-- ) { + if ( n == 0 ) mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, iv, iv ); iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); @@ -649,7 +653,7 @@ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, *iv_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ @@ -658,24 +662,23 @@ int mbedtls_camellia_crypt_cfb128( mbedtls_camellia_context *ctx, * Camellia-CTR buffer encryption/decryption */ int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, - size_t length, - size_t *nc_off, - unsigned char nonce_counter[16], - unsigned char stream_block[16], - const unsigned char *input, - unsigned char *output ) + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ) { int c, i; size_t n = *nc_off; - while( length-- ) - { - if( n == 0 ) { + while ( length-- ) { + if ( n == 0 ) { mbedtls_camellia_crypt_ecb( ctx, MBEDTLS_CAMELLIA_ENCRYPT, nonce_counter, - stream_block ); + stream_block ); - for( i = 16; i > 0; i-- ) - if( ++nonce_counter[i - 1] != 0 ) + for ( i = 16; i > 0; i-- ) + if ( ++nonce_counter[i - 1] != 0 ) break; } c = *input++; @@ -686,7 +689,7 @@ int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, *nc_off = n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ #endif /* !MBEDTLS_CAMELLIA_ALT */ @@ -703,124 +706,178 @@ int mbedtls_camellia_crypt_ctr( mbedtls_camellia_context *ctx, */ #define CAMELLIA_TESTS_ECB 2 -static const unsigned char camellia_test_ecb_key[3][CAMELLIA_TESTS_ECB][32] = -{ +static const unsigned char camellia_test_ecb_key[3][CAMELLIA_TESTS_ECB][32] = { { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }, { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }, { - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, - 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, - 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }, }; -static const unsigned char camellia_test_ecb_plain[CAMELLIA_TESTS_ECB][16] = -{ - { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, - 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 }, - { 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } +static const unsigned char camellia_test_ecb_plain[CAMELLIA_TESTS_ECB][16] = { + { + 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef, + 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + } }; -static const unsigned char camellia_test_ecb_cipher[3][CAMELLIA_TESTS_ECB][16] = -{ +static const unsigned char camellia_test_ecb_cipher[3][CAMELLIA_TESTS_ECB][16] = { { - { 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, - 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 }, - { 0x38, 0x3C, 0x6C, 0x2A, 0xAB, 0xEF, 0x7F, 0xDE, - 0x25, 0xCD, 0x47, 0x0B, 0xF7, 0x74, 0xA3, 0x31 } + { + 0x67, 0x67, 0x31, 0x38, 0x54, 0x96, 0x69, 0x73, + 0x08, 0x57, 0x06, 0x56, 0x48, 0xea, 0xbe, 0x43 + }, + { + 0x38, 0x3C, 0x6C, 0x2A, 0xAB, 0xEF, 0x7F, 0xDE, + 0x25, 0xCD, 0x47, 0x0B, 0xF7, 0x74, 0xA3, 0x31 + } }, { - { 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, - 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 }, - { 0xD1, 0x76, 0x3F, 0xC0, 0x19, 0xD7, 0x7C, 0xC9, - 0x30, 0xBF, 0xF2, 0xA5, 0x6F, 0x7C, 0x93, 0x64 } + { + 0xb4, 0x99, 0x34, 0x01, 0xb3, 0xe9, 0x96, 0xf8, + 0x4e, 0xe5, 0xce, 0xe7, 0xd7, 0x9b, 0x09, 0xb9 + }, + { + 0xD1, 0x76, 0x3F, 0xC0, 0x19, 0xD7, 0x7C, 0xC9, + 0x30, 0xBF, 0xF2, 0xA5, 0x6F, 0x7C, 0x93, 0x64 + } }, { - { 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, - 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 }, - { 0x05, 0x03, 0xFB, 0x10, 0xAB, 0x24, 0x1E, 0x7C, - 0xF4, 0x5D, 0x8C, 0xDE, 0xEE, 0x47, 0x43, 0x35 } + { + 0x9a, 0xcc, 0x23, 0x7d, 0xff, 0x16, 0xd7, 0x6c, + 0x20, 0xef, 0x7c, 0x91, 0x9e, 0x3a, 0x75, 0x09 + }, + { + 0x05, 0x03, 0xFB, 0x10, 0xAB, 0x24, 0x1E, 0x7C, + 0xF4, 0x5D, 0x8C, 0xDE, 0xEE, 0x47, 0x43, 0x35 + } } }; #if defined(MBEDTLS_CIPHER_MODE_CBC) #define CAMELLIA_TESTS_CBC 3 -static const unsigned char camellia_test_cbc_key[3][32] = -{ - { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, - 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C } +static const unsigned char camellia_test_cbc_key[3][32] = { + { + 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, + 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C + } , - { 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, - 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, - 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B } + { + 0x8E, 0x73, 0xB0, 0xF7, 0xDA, 0x0E, 0x64, 0x52, + 0xC8, 0x10, 0xF3, 0x2B, 0x80, 0x90, 0x79, 0xE5, + 0x62, 0xF8, 0xEA, 0xD2, 0x52, 0x2C, 0x6B, 0x7B + } , - { 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, - 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, - 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, - 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 } + { + 0x60, 0x3D, 0xEB, 0x10, 0x15, 0xCA, 0x71, 0xBE, + 0x2B, 0x73, 0xAE, 0xF0, 0x85, 0x7D, 0x77, 0x81, + 0x1F, 0x35, 0x2C, 0x07, 0x3B, 0x61, 0x08, 0xD7, + 0x2D, 0x98, 0x10, 0xA3, 0x09, 0x14, 0xDF, 0xF4 + } }; static const unsigned char camellia_test_cbc_iv[16] = - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F } +{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F +} ; -static const unsigned char camellia_test_cbc_plain[CAMELLIA_TESTS_CBC][16] = -{ - { 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, - 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A }, - { 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, - 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51 }, - { 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, - 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF } +static const unsigned char camellia_test_cbc_plain[CAMELLIA_TESTS_CBC][16] = { + { + 0x6B, 0xC1, 0xBE, 0xE2, 0x2E, 0x40, 0x9F, 0x96, + 0xE9, 0x3D, 0x7E, 0x11, 0x73, 0x93, 0x17, 0x2A + }, + { + 0xAE, 0x2D, 0x8A, 0x57, 0x1E, 0x03, 0xAC, 0x9C, + 0x9E, 0xB7, 0x6F, 0xAC, 0x45, 0xAF, 0x8E, 0x51 + }, + { + 0x30, 0xC8, 0x1C, 0x46, 0xA3, 0x5C, 0xE4, 0x11, + 0xE5, 0xFB, 0xC1, 0x19, 0x1A, 0x0A, 0x52, 0xEF + } }; -static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = -{ +static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = { { - { 0x16, 0x07, 0xCF, 0x49, 0x4B, 0x36, 0xBB, 0xF0, - 0x0D, 0xAE, 0xB0, 0xB5, 0x03, 0xC8, 0x31, 0xAB }, - { 0xA2, 0xF2, 0xCF, 0x67, 0x16, 0x29, 0xEF, 0x78, - 0x40, 0xC5, 0xA5, 0xDF, 0xB5, 0x07, 0x48, 0x87 }, - { 0x0F, 0x06, 0x16, 0x50, 0x08, 0xCF, 0x8B, 0x8B, - 0x5A, 0x63, 0x58, 0x63, 0x62, 0x54, 0x3E, 0x54 } + { + 0x16, 0x07, 0xCF, 0x49, 0x4B, 0x36, 0xBB, 0xF0, + 0x0D, 0xAE, 0xB0, 0xB5, 0x03, 0xC8, 0x31, 0xAB + }, + { + 0xA2, 0xF2, 0xCF, 0x67, 0x16, 0x29, 0xEF, 0x78, + 0x40, 0xC5, 0xA5, 0xDF, 0xB5, 0x07, 0x48, 0x87 + }, + { + 0x0F, 0x06, 0x16, 0x50, 0x08, 0xCF, 0x8B, 0x8B, + 0x5A, 0x63, 0x58, 0x63, 0x62, 0x54, 0x3E, 0x54 + } }, { - { 0x2A, 0x48, 0x30, 0xAB, 0x5A, 0xC4, 0xA1, 0xA2, - 0x40, 0x59, 0x55, 0xFD, 0x21, 0x95, 0xCF, 0x93 }, - { 0x5D, 0x5A, 0x86, 0x9B, 0xD1, 0x4C, 0xE5, 0x42, - 0x64, 0xF8, 0x92, 0xA6, 0xDD, 0x2E, 0xC3, 0xD5 }, - { 0x37, 0xD3, 0x59, 0xC3, 0x34, 0x98, 0x36, 0xD8, - 0x84, 0xE3, 0x10, 0xAD, 0xDF, 0x68, 0xC4, 0x49 } + { + 0x2A, 0x48, 0x30, 0xAB, 0x5A, 0xC4, 0xA1, 0xA2, + 0x40, 0x59, 0x55, 0xFD, 0x21, 0x95, 0xCF, 0x93 + }, + { + 0x5D, 0x5A, 0x86, 0x9B, 0xD1, 0x4C, 0xE5, 0x42, + 0x64, 0xF8, 0x92, 0xA6, 0xDD, 0x2E, 0xC3, 0xD5 + }, + { + 0x37, 0xD3, 0x59, 0xC3, 0x34, 0x98, 0x36, 0xD8, + 0x84, 0xE3, 0x10, 0xAD, 0xDF, 0x68, 0xC4, 0x49 + } }, { - { 0xE6, 0xCF, 0xA3, 0x5F, 0xC0, 0x2B, 0x13, 0x4A, - 0x4D, 0x2C, 0x0B, 0x67, 0x37, 0xAC, 0x3E, 0xDA }, - { 0x36, 0xCB, 0xEB, 0x73, 0xBD, 0x50, 0x4B, 0x40, - 0x70, 0xB1, 0xB7, 0xDE, 0x2B, 0x21, 0xEB, 0x50 }, - { 0xE3, 0x1A, 0x60, 0x55, 0x29, 0x7D, 0x96, 0xCA, - 0x33, 0x30, 0xCD, 0xF1, 0xB1, 0x86, 0x0A, 0x83 } + { + 0xE6, 0xCF, 0xA3, 0x5F, 0xC0, 0x2B, 0x13, 0x4A, + 0x4D, 0x2C, 0x0B, 0x67, 0x37, 0xAC, 0x3E, 0xDA + }, + { + 0x36, 0xCB, 0xEB, 0x73, 0xBD, 0x50, 0x4B, 0x40, + 0x70, 0xB1, 0xB7, 0xDE, 0x2B, 0x21, 0xEB, 0x50 + }, + { + 0xE3, 0x1A, 0x60, 0x55, 0x29, 0x7D, 0x96, 0xCA, + 0x33, 0x30, 0xCD, 0xF1, 0xB1, 0x86, 0x0A, 0x83 + } } }; #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -832,60 +889,80 @@ static const unsigned char camellia_test_cbc_cipher[3][CAMELLIA_TESTS_CBC][16] = * http://www.faqs.org/rfcs/rfc5528.html */ -static const unsigned char camellia_test_ctr_key[3][16] = -{ - { 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, - 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E }, - { 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, - 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 }, - { 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, - 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC } +static const unsigned char camellia_test_ctr_key[3][16] = { + { + 0xAE, 0x68, 0x52, 0xF8, 0x12, 0x10, 0x67, 0xCC, + 0x4B, 0xF7, 0xA5, 0x76, 0x55, 0x77, 0xF3, 0x9E + }, + { + 0x7E, 0x24, 0x06, 0x78, 0x17, 0xFA, 0xE0, 0xD7, + 0x43, 0xD6, 0xCE, 0x1F, 0x32, 0x53, 0x91, 0x63 + }, + { + 0x76, 0x91, 0xBE, 0x03, 0x5E, 0x50, 0x20, 0xA8, + 0xAC, 0x6E, 0x61, 0x85, 0x29, 0xF9, 0xA0, 0xDC + } }; -static const unsigned char camellia_test_ctr_nonce_counter[3][16] = -{ - { 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, - 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 }, - { 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, - 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 } +static const unsigned char camellia_test_ctr_nonce_counter[3][16] = { + { + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0x6C, 0xB6, 0xDB, 0xC0, 0x54, 0x3B, 0x59, + 0xDA, 0x48, 0xD9, 0x0B, 0x00, 0x00, 0x00, 0x01 + }, + { + 0x00, 0xE0, 0x01, 0x7B, 0x27, 0x77, 0x7F, 0x3F, + 0x4A, 0x17, 0x86, 0xF0, 0x00, 0x00, 0x00, 0x01 + } }; -static const unsigned char camellia_test_ctr_pt[3][48] = -{ - { 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, - 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F }, - - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, - 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, - 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, - 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, - 0x20, 0x21, 0x22, 0x23 } +static const unsigned char camellia_test_ctr_pt[3][48] = { + { + 0x53, 0x69, 0x6E, 0x67, 0x6C, 0x65, 0x20, 0x62, + 0x6C, 0x6F, 0x63, 0x6B, 0x20, 0x6D, 0x73, 0x67 + }, + + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F + }, + + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, + 0x20, 0x21, 0x22, 0x23 + } }; -static const unsigned char camellia_test_ctr_ct[3][48] = -{ - { 0xD0, 0x9D, 0xC2, 0x9A, 0x82, 0x14, 0x61, 0x9A, - 0x20, 0x87, 0x7C, 0x76, 0xDB, 0x1F, 0x0B, 0x3F }, - { 0xDB, 0xF3, 0xC7, 0x8D, 0xC0, 0x83, 0x96, 0xD4, - 0xDA, 0x7C, 0x90, 0x77, 0x65, 0xBB, 0xCB, 0x44, - 0x2B, 0x8E, 0x8E, 0x0F, 0x31, 0xF0, 0xDC, 0xA7, - 0x2C, 0x74, 0x17, 0xE3, 0x53, 0x60, 0xE0, 0x48 }, - { 0xB1, 0x9D, 0x1F, 0xCD, 0xCB, 0x75, 0xEB, 0x88, - 0x2F, 0x84, 0x9C, 0xE2, 0x4D, 0x85, 0xCF, 0x73, - 0x9C, 0xE6, 0x4B, 0x2B, 0x5C, 0x9D, 0x73, 0xF1, - 0x4F, 0x2D, 0x5D, 0x9D, 0xCE, 0x98, 0x89, 0xCD, - 0xDF, 0x50, 0x86, 0x96 } +static const unsigned char camellia_test_ctr_ct[3][48] = { + { + 0xD0, 0x9D, 0xC2, 0x9A, 0x82, 0x14, 0x61, 0x9A, + 0x20, 0x87, 0x7C, 0x76, 0xDB, 0x1F, 0x0B, 0x3F + }, + { + 0xDB, 0xF3, 0xC7, 0x8D, 0xC0, 0x83, 0x96, 0xD4, + 0xDA, 0x7C, 0x90, 0x77, 0x65, 0xBB, 0xCB, 0x44, + 0x2B, 0x8E, 0x8E, 0x0F, 0x31, 0xF0, 0xDC, 0xA7, + 0x2C, 0x74, 0x17, 0xE3, 0x53, 0x60, 0xE0, 0x48 + }, + { + 0xB1, 0x9D, 0x1F, 0xCD, 0xCB, 0x75, 0xEB, 0x88, + 0x2F, 0x84, 0x9C, 0xE2, 0x4D, 0x85, 0xCF, 0x73, + 0x9C, 0xE6, 0x4B, 0x2B, 0x5C, 0x9D, 0x73, 0xF1, + 0x4F, 0x2D, 0x5D, 0x9D, 0xCE, 0x98, 0x89, 0xCD, + 0xDF, 0x50, 0x86, 0x96 + } }; static const int camellia_test_ctr_len[3] = - { 16, 32, 36 }; +{ 16, 32, 36 }; #endif /* MBEDTLS_CIPHER_MODE_CTR */ /* @@ -911,111 +988,107 @@ int mbedtls_camellia_self_test( int verbose ) memset( key, 0, 32 ); - for( j = 0; j < 6; j++ ) { + for ( j = 0; j < 6; j++ ) { u = j >> 1; - v = j & 1; + v = j & 1; - if( verbose != 0 ) - mbedtls_printf( " CAMELLIA-ECB-%3d (%s): ", 128 + u * 64, - (v == MBEDTLS_CAMELLIA_DECRYPT) ? "dec" : "enc"); + if ( verbose != 0 ) + mbedtls_printf( " CAMELLIA-ECB-%3d (%s): ", 128 + u * 64, + (v == MBEDTLS_CAMELLIA_DECRYPT) ? "dec" : "enc"); - for( i = 0; i < CAMELLIA_TESTS_ECB; i++ ) { - memcpy( key, camellia_test_ecb_key[u][i], 16 + 8 * u ); + for ( i = 0; i < CAMELLIA_TESTS_ECB; i++ ) { + memcpy( key, camellia_test_ecb_key[u][i], 16 + 8 * u ); - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_cipher[u][i], 16 ); - memcpy( dst, camellia_test_ecb_plain[i], 16 ); - } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ - mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); - memcpy( src, camellia_test_ecb_plain[i], 16 ); - memcpy( dst, camellia_test_ecb_cipher[u][i], 16 ); - } + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { + mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); + memcpy( src, camellia_test_ecb_cipher[u][i], 16 ); + memcpy( dst, camellia_test_ecb_plain[i], 16 ); + } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ + mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); + memcpy( src, camellia_test_ecb_plain[i], 16 ); + memcpy( dst, camellia_test_ecb_cipher[u][i], 16 ); + } - mbedtls_camellia_crypt_ecb( &ctx, v, src, buf ); + mbedtls_camellia_crypt_ecb( &ctx, v, src, buf ); - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) - mbedtls_printf( "failed\n" ); + if ( memcmp( buf, dst, 16 ) != 0 ) { + if ( verbose != 0 ) + mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); + } } - } - if( verbose != 0 ) - mbedtls_printf( "passed\n" ); + if ( verbose != 0 ) + mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CBC) /* * CBC mode */ - for( j = 0; j < 6; j++ ) - { + for ( j = 0; j < 6; j++ ) { u = j >> 1; v = j & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CAMELLIA-CBC-%3d (%s): ", 128 + u * 64, - ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); memcpy( src, camellia_test_cbc_iv, 16 ); memcpy( dst, camellia_test_cbc_iv, 16 ); memcpy( key, camellia_test_cbc_key[u], 16 + 8 * u ); - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { mbedtls_camellia_setkey_dec( &ctx, key, 128 + u * 64 ); } else { mbedtls_camellia_setkey_enc( &ctx, key, 128 + u * 64 ); } - for( i = 0; i < CAMELLIA_TESTS_CBC; i++ ) { + for ( i = 0; i < CAMELLIA_TESTS_CBC; i++ ) { - if( v == MBEDTLS_CAMELLIA_DECRYPT ) { - memcpy( iv , src, 16 ); + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { + memcpy( iv, src, 16 ); memcpy( src, camellia_test_cbc_cipher[u][i], 16 ); memcpy( dst, camellia_test_cbc_plain[i], 16 ); } else { /* MBEDTLS_CAMELLIA_ENCRYPT */ - memcpy( iv , dst, 16 ); + memcpy( iv, dst, 16 ); memcpy( src, camellia_test_cbc_plain[i], 16 ); memcpy( dst, camellia_test_cbc_cipher[u][i], 16 ); } mbedtls_camellia_crypt_cbc( &ctx, v, 16, iv, src, buf ); - if( memcmp( buf, dst, 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, dst, 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CTR) /* * CTR mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CAMELLIA-CTR-128 (%s): ", - ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); + ( v == MBEDTLS_CAMELLIA_DECRYPT ) ? "dec" : "enc" ); memcpy( nonce_counter, camellia_test_ctr_nonce_counter[u], 16 ); memcpy( key, camellia_test_ctr_key[u], 16 ); @@ -1023,48 +1096,43 @@ int mbedtls_camellia_self_test( int verbose ) offset = 0; mbedtls_camellia_setkey_enc( &ctx, key, 128 ); - if( v == MBEDTLS_CAMELLIA_DECRYPT ) - { + if ( v == MBEDTLS_CAMELLIA_DECRYPT ) { len = camellia_test_ctr_len[u]; memcpy( buf, camellia_test_ctr_ct[u], len ); mbedtls_camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, camellia_test_ctr_pt[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, camellia_test_ctr_pt[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - } - else - { + } else { len = camellia_test_ctr_len[u]; memcpy( buf, camellia_test_ctr_pt[u], len ); mbedtls_camellia_crypt_ctr( &ctx, len, &offset, nonce_counter, stream_block, - buf, buf ); + buf, buf ); - if( memcmp( buf, camellia_test_ctr_ct[u], len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, camellia_test_ctr_ct[u], len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #endif /* MBEDTLS_CIPHER_MODE_CTR */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/ccm.c b/external_libs/mbedtls/library/ccm.c index 13a8fd1..5d0b985 100644 --- a/external_libs/mbedtls/library/ccm.c +++ b/external_libs/mbedtls/library/ccm.c @@ -50,8 +50,10 @@ #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } #define CCM_ENCRYPT 0 @@ -74,24 +76,23 @@ int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx, const mbedtls_cipher_info_t *cipher_info; cipher_info = mbedtls_cipher_info_from_values( cipher, keybits, MBEDTLS_MODE_ECB ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); - if( cipher_info->block_size != 16 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( cipher_info->block_size != 16 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); mbedtls_cipher_free( &ctx->cipher_ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -155,15 +156,15 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, * Additional requirement: a < 2^16 - 2^8 to simplify the code. * 'length' checked later (when writing it to the first block) */ - if( tag_len < 4 || tag_len > 16 || tag_len % 2 != 0 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( tag_len < 4 || tag_len > 16 || tag_len % 2 != 0 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); /* Also implies q is within bounds */ - if( iv_len < 7 || iv_len > 13 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( iv_len < 7 || iv_len > 13 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); - if( add_len > 0xFF00 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( add_len > 0xFF00 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); q = 16 - 1 - (unsigned char) iv_len; @@ -186,11 +187,11 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, memcpy( b + 1, iv, iv_len ); - for( i = 0, len_left = length; i < q; i++, len_left >>= 8 ) - b[15-i] = (unsigned char)( len_left & 0xFF ); + for ( i = 0, len_left = length; i < q; i++, len_left >>= 8 ) + b[15 - i] = (unsigned char)( len_left & 0xFF ); - if( len_left > 0 ) - return( MBEDTLS_ERR_CCM_BAD_INPUT ); + if ( len_left > 0 ) + return ( MBEDTLS_ERR_CCM_BAD_INPUT ); /* Start CBC-MAC with first block */ @@ -201,8 +202,7 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, * If there is additional data, update CBC-MAC with * add_len, add, 0 (padding to a block boundary) */ - if( add_len > 0 ) - { + if ( add_len > 0 ) { size_t use_len; len_left = add_len; src = add; @@ -218,8 +218,7 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, UPDATE_CBC_MAC; - while( len_left > 0 ) - { + while ( len_left > 0 ) { use_len = len_left > 16 ? 16 : len_left; memset( b, 0, 16 ); @@ -256,12 +255,10 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, src = input; dst = output; - while( len_left > 0 ) - { + while ( len_left > 0 ) { size_t use_len = len_left > 16 ? 16 : len_left; - if( mode == CCM_ENCRYPT ) - { + if ( mode == CCM_ENCRYPT ) { memset( b, 0, 16 ); memcpy( b, src, use_len ); UPDATE_CBC_MAC; @@ -269,8 +266,7 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, CTR_CRYPT( dst, src, use_len ); - if( mode == CCM_DECRYPT ) - { + if ( mode == CCM_DECRYPT ) { memset( b, 0, 16 ); memcpy( b, dst, use_len ); UPDATE_CBC_MAC; @@ -284,68 +280,66 @@ static int ccm_auth_crypt( mbedtls_ccm_context *ctx, int mode, size_t length, * Increment counter. * No need to check for overflow thanks to the length check above. */ - for( i = 0; i < q; i++ ) - if( ++ctr[15-i] != 0 ) + for ( i = 0; i < q; i++ ) + if ( ++ctr[15 - i] != 0 ) break; } /* * Authentication: reset counter and crypt/mask internal tag */ - for( i = 0; i < q; i++ ) - ctr[15-i] = 0; + for ( i = 0; i < q; i++ ) + ctr[15 - i] = 0; CTR_CRYPT( y, y, 16 ); memcpy( tag, y, tag_len ); - return( 0 ); + return ( 0 ); } /* * Authenticated encryption */ int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *add, size_t add_len, + const unsigned char *input, unsigned char *output, + unsigned char *tag, size_t tag_len ) { - return( ccm_auth_crypt( ctx, CCM_ENCRYPT, length, iv, iv_len, - add, add_len, input, output, tag, tag_len ) ); + return ( ccm_auth_crypt( ctx, CCM_ENCRYPT, length, iv, iv_len, + add, add_len, input, output, tag, tag_len ) ); } /* * Authenticated decryption */ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length, - const unsigned char *iv, size_t iv_len, - const unsigned char *add, size_t add_len, - const unsigned char *input, unsigned char *output, - const unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *add, size_t add_len, + const unsigned char *input, unsigned char *output, + const unsigned char *tag, size_t tag_len ) { int ret; unsigned char check_tag[16]; unsigned char i; int diff; - if( ( ret = ccm_auth_crypt( ctx, CCM_DECRYPT, length, - iv, iv_len, add, add_len, - input, output, check_tag, tag_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = ccm_auth_crypt( ctx, CCM_DECRYPT, length, + iv, iv_len, add, add_len, + input, output, check_tag, tag_len ) ) != 0 ) { + return ( ret ); } /* Check tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) + for ( diff = 0, i = 0; i < tag_len; i++ ) diff |= tag[i] ^ check_tag[i]; - if( diff != 0 ) - { + if ( diff != 0 ) { mbedtls_zeroize( output, length ); - return( MBEDTLS_ERR_CCM_AUTH_FAILED ); + return ( MBEDTLS_ERR_CCM_AUTH_FAILED ); } - return( 0 ); + return ( 0 ); } @@ -388,13 +382,17 @@ static const size_t tag_len[NB_TESTS] = { 4, 6, 8 }; static const unsigned char res[NB_TESTS][32] = { { 0x71, 0x62, 0x01, 0x5b, 0x4d, 0xac, 0x25, 0x5d }, - { 0xd2, 0xa1, 0xf0, 0xe0, 0x51, 0xea, 0x5f, 0x62, + { + 0xd2, 0xa1, 0xf0, 0xe0, 0x51, 0xea, 0x5f, 0x62, 0x08, 0x1a, 0x77, 0x92, 0x07, 0x3d, 0x59, 0x3d, - 0x1f, 0xc6, 0x4f, 0xbf, 0xac, 0xcd }, - { 0xe3, 0xb2, 0x01, 0xa9, 0xf5, 0xb7, 0x1a, 0x7a, + 0x1f, 0xc6, 0x4f, 0xbf, 0xac, 0xcd + }, + { + 0xe3, 0xb2, 0x01, 0xa9, 0xf5, 0xb7, 0x1a, 0x7a, 0x9b, 0x1c, 0xea, 0xec, 0xcd, 0x97, 0xe7, 0x0b, 0x61, 0x76, 0xaa, 0xd9, 0xa4, 0x42, 0x8a, 0xa5, - 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 } + 0x48, 0x43, 0x92, 0xfb, 0xc1, 0xb0, 0x99, 0x51 + } }; int mbedtls_ccm_self_test( int verbose ) @@ -406,57 +404,53 @@ int mbedtls_ccm_self_test( int verbose ) mbedtls_ccm_init( &ctx ); - if( mbedtls_ccm_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, key, 8 * sizeof key ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_ccm_setkey( &ctx, MBEDTLS_CIPHER_ID_AES, key, 8 * sizeof key ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( " CCM: setup failed" ); - return( 1 ); + return ( 1 ); } - for( i = 0; i < NB_TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < NB_TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " CCM-AES #%u: ", (unsigned int) i + 1 ); ret = mbedtls_ccm_encrypt_and_tag( &ctx, msg_len[i], - iv, iv_len[i], ad, add_len[i], - msg, out, - out + msg_len[i], tag_len[i] ); - - if( ret != 0 || - memcmp( out, res[i], msg_len[i] + tag_len[i] ) != 0 ) - { - if( verbose != 0 ) + iv, iv_len[i], ad, add_len[i], + msg, out, + out + msg_len[i], tag_len[i] ); + + if ( ret != 0 || + memcmp( out, res[i], msg_len[i] + tag_len[i] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } ret = mbedtls_ccm_auth_decrypt( &ctx, msg_len[i], - iv, iv_len[i], ad, add_len[i], - res[i], out, - res[i] + msg_len[i], tag_len[i] ); - - if( ret != 0 || - memcmp( out, msg, msg_len[i] ) != 0 ) - { - if( verbose != 0 ) + iv, iv_len[i], ad, add_len[i], + res[i], out, + res[i] + msg_len[i], tag_len[i] ); + + if ( ret != 0 || + memcmp( out, msg, msg_len[i] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } mbedtls_ccm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ diff --git a/external_libs/mbedtls/library/certs.c b/external_libs/mbedtls/library/certs.c index ffe6bc9..7bfb546 100644 --- a/external_libs/mbedtls/library/certs.c +++ b/external_libs/mbedtls/library/certs.c @@ -49,63 +49,63 @@ const char mbedtls_test_ca_crt_ec[] = TEST_CA_CRT_EC; const char mbedtls_test_ca_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"Proc-Type: 4,ENCRYPTED\r\n" -"DEK-Info: DES-EDE3-CBC,307EAB469933D64E\r\n" -"\r\n" -"IxbrRmKcAzctJqPdTQLA4SWyBYYGYJVkYEna+F7Pa5t5Yg/gKADrFKcm6B72e7DG\r\n" -"ihExtZI648s0zdYw6qSJ74vrPSuWDe5qm93BqsfVH9svtCzWHW0pm1p0KTBCFfUq\r\n" -"UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb\r\n" -"a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm\r\n" -"-----END EC PRIVATE KEY-----\r\n"; + "-----BEGIN EC PRIVATE KEY-----\r\n" + "Proc-Type: 4,ENCRYPTED\r\n" + "DEK-Info: DES-EDE3-CBC,307EAB469933D64E\r\n" + "\r\n" + "IxbrRmKcAzctJqPdTQLA4SWyBYYGYJVkYEna+F7Pa5t5Yg/gKADrFKcm6B72e7DG\r\n" + "ihExtZI648s0zdYw6qSJ74vrPSuWDe5qm93BqsfVH9svtCzWHW0pm1p0KTBCFfUq\r\n" + "UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb\r\n" + "a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm\r\n" + "-----END EC PRIVATE KEY-----\r\n"; const char mbedtls_test_ca_pwd_ec[] = "PolarSSLTest"; const char mbedtls_test_srv_crt_ec[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" -"MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG\r\n" -"CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA\r\n" -"2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd\r\n" -"BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB\r\n" -"PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh\r\n" -"clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG\r\n" -"CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S\r\n" -"C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V\r\n" -"fGa5kHvHARBPc8YAIVIqDvHH1Q==\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIICHzCCAaWgAwIBAgIBCTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" + "MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG\r\n" + "CCqGSM49AwEHA0IABDfMVtl2CR5acj7HWS3/IG7ufPkGkXTQrRS192giWWKSTuUA\r\n" + "2CMR/+ov0jRdXRa9iojCa3cNVc2KKg76Aci07f+jgZ0wgZowCQYDVR0TBAIwADAd\r\n" + "BgNVHQ4EFgQUUGGlj9QH2deCAQzlZX+MY0anE74wbgYDVR0jBGcwZYAUnW0gJEkB\r\n" + "PyvLeLUZvH4kydv7NnyhQqRAMD4xCzAJBgNVBAYTAk5MMREwDwYDVQQKEwhQb2xh\r\n" + "clNTTDEcMBoGA1UEAxMTUG9sYXJzc2wgVGVzdCBFQyBDQYIJAMFD4n5iQ8zoMAoG\r\n" + "CCqGSM49BAMCA2gAMGUCMQCaLFzXptui5WQN8LlO3ddh1hMxx6tzgLvT03MTVK2S\r\n" + "C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V\r\n" + "fGa5kHvHARBPc8YAIVIqDvHH1Q==\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_srv_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\r\n" -"AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\r\n" -"6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\r\n" -"-----END EC PRIVATE KEY-----\r\n"; + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIPEqEyB2AnCoPL/9U/YDHvdqXYbIogTywwyp6/UfDw6noAoGCCqGSM49\r\n" + "AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/\r\n" + "6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==\r\n" + "-----END EC PRIVATE KEY-----\r\n"; const char mbedtls_test_cli_crt_ec[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIICLDCCAbKgAwIBAgIBDTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" -"MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjBBMQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxHzAdBgNVBAMTFlBvbGFyU1NMIFRlc3QgQ2xpZW50IDIw\r\n" -"WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARX5a6xc9/TrLuTuIH/Eq7u5lOszlVT\r\n" -"9jQOzC7jYyUL35ji81xgNpbA1RgUcOV/n9VLRRjlsGzVXPiWj4dwo+THo4GdMIGa\r\n" -"MAkGA1UdEwQCMAAwHQYDVR0OBBYEFHoAX4Zk/OBd5REQO7LmO8QmP8/iMG4GA1Ud\r\n" -"IwRnMGWAFJ1tICRJAT8ry3i1Gbx+JMnb+zZ8oUKkQDA+MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0GC\r\n" -"CQDBQ+J+YkPM6DAKBggqhkjOPQQDAgNoADBlAjBKZQ17IIOimbmoD/yN7o89u3BM\r\n" -"lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU\r\n" -"LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIICLDCCAbKgAwIBAgIBDTAKBggqhkjOPQQDAjA+MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0EwHhcN\r\n" + "MTMwOTI0MTU1MjA0WhcNMjMwOTIyMTU1MjA0WjBBMQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxHzAdBgNVBAMTFlBvbGFyU1NMIFRlc3QgQ2xpZW50IDIw\r\n" + "WTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARX5a6xc9/TrLuTuIH/Eq7u5lOszlVT\r\n" + "9jQOzC7jYyUL35ji81xgNpbA1RgUcOV/n9VLRRjlsGzVXPiWj4dwo+THo4GdMIGa\r\n" + "MAkGA1UdEwQCMAAwHQYDVR0OBBYEFHoAX4Zk/OBd5REQO7LmO8QmP8/iMG4GA1Ud\r\n" + "IwRnMGWAFJ1tICRJAT8ry3i1Gbx+JMnb+zZ8oUKkQDA+MQswCQYDVQQGEwJOTDER\r\n" + "MA8GA1UEChMIUG9sYXJTU0wxHDAaBgNVBAMTE1BvbGFyc3NsIFRlc3QgRUMgQ0GC\r\n" + "CQDBQ+J+YkPM6DAKBggqhkjOPQQDAgNoADBlAjBKZQ17IIOimbmoD/yN7o89u3BM\r\n" + "lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU\r\n" + "LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_cli_key_ec[] = -"-----BEGIN EC PRIVATE KEY-----\r\n" -"MHcCAQEEIPb3hmTxZ3/mZI3vyk7p3U3wBf+WIop6hDhkFzJhmLcqoAoGCCqGSM49\r\n" -"AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW\r\n" -"wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==\r\n" -"-----END EC PRIVATE KEY-----\r\n"; + "-----BEGIN EC PRIVATE KEY-----\r\n" + "MHcCAQEEIPb3hmTxZ3/mZI3vyk7p3U3wBf+WIop6hDhkFzJhmLcqoAoGCCqGSM49\r\n" + "AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW\r\n" + "wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==\r\n" + "-----END EC PRIVATE KEY-----\r\n"; const size_t mbedtls_test_ca_crt_ec_len = sizeof( mbedtls_test_ca_crt_ec ); const size_t mbedtls_test_ca_key_ec_len = sizeof( mbedtls_test_ca_key_ec ); @@ -144,140 +144,140 @@ const size_t mbedtls_test_cli_key_ec_len = sizeof( mbedtls_test_cli_key_ec ); const char mbedtls_test_ca_crt_rsa[] = TEST_CA_CRT_RSA; const char mbedtls_test_ca_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"Proc-Type: 4,ENCRYPTED\r\n" -"DEK-Info: DES-EDE3-CBC,A8A95B05D5B7206B\r\n" -"\r\n" -"9Qd9GeArejl1GDVh2lLV1bHt0cPtfbh5h/5zVpAVaFpqtSPMrElp50Rntn9et+JA\r\n" -"7VOyboR+Iy2t/HU4WvA687k3Bppe9GwKHjHhtl//8xFKwZr3Xb5yO5JUP8AUctQq\r\n" -"Nb8CLlZyuUC+52REAAthdWgsX+7dJO4yabzUcQ22Tp9JSD0hiL43BlkWYUNK3dAo\r\n" -"PZlmiptjnzVTjg1MxsBSydZinWOLBV8/JQgxSPo2yD4uEfig28qbvQ2wNIn0pnAb\r\n" -"GxnSAOazkongEGfvcjIIs+LZN9gXFhxcOh6kc4Q/c99B7QWETwLLkYgZ+z1a9VY9\r\n" -"gEU7CwCxYCD+h9hY6FPmsK0/lC4O7aeRKpYq00rPPxs6i7phiexg6ax6yTMmArQq\r\n" -"QmK3TAsJm8V/J5AWpLEV6jAFgRGymGGHnof0DXzVWZidrcZJWTNuGEX90nB3ee2w\r\n" -"PXJEFWKoD3K3aFcSLdHYr3mLGxP7H9ThQai9VsycxZKS5kwvBKQ//YMrmFfwPk8x\r\n" -"vTeY4KZMaUrveEel5tWZC94RSMKgxR6cyE1nBXyTQnDOGbfpNNgBKxyKbINWoOJU\r\n" -"WJZAwlsQn+QzCDwpri7+sV1mS3gBE6UY7aQmnmiiaC2V3Hbphxct/en5QsfDOt1X\r\n" -"JczSfpRWLlbPznZg8OQh/VgCMA58N5DjOzTIK7sJJ5r+94ZBTCpgAMbF588f0NTR\r\n" -"KCe4yrxGJR7X02M4nvD4IwOlpsQ8xQxZtOSgXv4LkxvdU9XJJKWZ/XNKJeWztxSe\r\n" -"Z1vdTc2YfsDBA2SEv33vxHx2g1vqtw8SjDRT2RaQSS0QuSaMJimdOX6mTOCBKk1J\r\n" -"9Q5mXTrER+/LnK0jEmXsBXWA5bqqVZIyahXSx4VYZ7l7w/PHiUDtDgyRhMMKi4n2\r\n" -"iQvQcWSQTjrpnlJbca1/DkpRt3YwrvJwdqb8asZU2VrNETh5x0QVefDRLFiVpif/\r\n" -"tUaeAe/P1F8OkS7OIZDs1SUbv/sD2vMbhNkUoCms3/PvNtdnvgL4F0zhaDpKCmlT\r\n" -"P8vx49E7v5CyRNmED9zZg4o3wmMqrQO93PtTug3Eu9oVx1zPQM1NVMyBa2+f29DL\r\n" -"1nuTCeXdo9+ni45xx+jAI4DCwrRdhJ9uzZyC6962H37H6D+5naNvClFR1s6li1Gb\r\n" -"nqPoiy/OBsEx9CaDGcqQBp5Wme/3XW+6z1ISOx+igwNTVCT14mHdBMbya0eIKft5\r\n" -"X+GnwtgEMyCYyyWuUct8g4RzErcY9+yW9Om5Hzpx4zOuW4NPZgPDTgK+t2RSL/Yq\r\n" -"rE1njrgeGYcVeG3f+OftH4s6fPbq7t1A5ZgUscbLMBqr9tK+OqygR4EgKBPsH6Cz\r\n" -"L6zlv/2RV0qAHvVuDJcIDIgwY5rJtINEm32rhOeFNJwZS5MNIC1czXZx5//ugX7l\r\n" -"I4sy5nbVhwSjtAk8Xg5dZbdTZ6mIrb7xqH+fdakZor1khG7bC2uIwibD3cSl2XkR\r\n" -"wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde\r\n" -"P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; + "-----BEGIN RSA PRIVATE KEY-----\r\n" + "Proc-Type: 4,ENCRYPTED\r\n" + "DEK-Info: DES-EDE3-CBC,A8A95B05D5B7206B\r\n" + "\r\n" + "9Qd9GeArejl1GDVh2lLV1bHt0cPtfbh5h/5zVpAVaFpqtSPMrElp50Rntn9et+JA\r\n" + "7VOyboR+Iy2t/HU4WvA687k3Bppe9GwKHjHhtl//8xFKwZr3Xb5yO5JUP8AUctQq\r\n" + "Nb8CLlZyuUC+52REAAthdWgsX+7dJO4yabzUcQ22Tp9JSD0hiL43BlkWYUNK3dAo\r\n" + "PZlmiptjnzVTjg1MxsBSydZinWOLBV8/JQgxSPo2yD4uEfig28qbvQ2wNIn0pnAb\r\n" + "GxnSAOazkongEGfvcjIIs+LZN9gXFhxcOh6kc4Q/c99B7QWETwLLkYgZ+z1a9VY9\r\n" + "gEU7CwCxYCD+h9hY6FPmsK0/lC4O7aeRKpYq00rPPxs6i7phiexg6ax6yTMmArQq\r\n" + "QmK3TAsJm8V/J5AWpLEV6jAFgRGymGGHnof0DXzVWZidrcZJWTNuGEX90nB3ee2w\r\n" + "PXJEFWKoD3K3aFcSLdHYr3mLGxP7H9ThQai9VsycxZKS5kwvBKQ//YMrmFfwPk8x\r\n" + "vTeY4KZMaUrveEel5tWZC94RSMKgxR6cyE1nBXyTQnDOGbfpNNgBKxyKbINWoOJU\r\n" + "WJZAwlsQn+QzCDwpri7+sV1mS3gBE6UY7aQmnmiiaC2V3Hbphxct/en5QsfDOt1X\r\n" + "JczSfpRWLlbPznZg8OQh/VgCMA58N5DjOzTIK7sJJ5r+94ZBTCpgAMbF588f0NTR\r\n" + "KCe4yrxGJR7X02M4nvD4IwOlpsQ8xQxZtOSgXv4LkxvdU9XJJKWZ/XNKJeWztxSe\r\n" + "Z1vdTc2YfsDBA2SEv33vxHx2g1vqtw8SjDRT2RaQSS0QuSaMJimdOX6mTOCBKk1J\r\n" + "9Q5mXTrER+/LnK0jEmXsBXWA5bqqVZIyahXSx4VYZ7l7w/PHiUDtDgyRhMMKi4n2\r\n" + "iQvQcWSQTjrpnlJbca1/DkpRt3YwrvJwdqb8asZU2VrNETh5x0QVefDRLFiVpif/\r\n" + "tUaeAe/P1F8OkS7OIZDs1SUbv/sD2vMbhNkUoCms3/PvNtdnvgL4F0zhaDpKCmlT\r\n" + "P8vx49E7v5CyRNmED9zZg4o3wmMqrQO93PtTug3Eu9oVx1zPQM1NVMyBa2+f29DL\r\n" + "1nuTCeXdo9+ni45xx+jAI4DCwrRdhJ9uzZyC6962H37H6D+5naNvClFR1s6li1Gb\r\n" + "nqPoiy/OBsEx9CaDGcqQBp5Wme/3XW+6z1ISOx+igwNTVCT14mHdBMbya0eIKft5\r\n" + "X+GnwtgEMyCYyyWuUct8g4RzErcY9+yW9Om5Hzpx4zOuW4NPZgPDTgK+t2RSL/Yq\r\n" + "rE1njrgeGYcVeG3f+OftH4s6fPbq7t1A5ZgUscbLMBqr9tK+OqygR4EgKBPsH6Cz\r\n" + "L6zlv/2RV0qAHvVuDJcIDIgwY5rJtINEm32rhOeFNJwZS5MNIC1czXZx5//ugX7l\r\n" + "I4sy5nbVhwSjtAk8Xg5dZbdTZ6mIrb7xqH+fdakZor1khG7bC2uIwibD3cSl2XkR\r\n" + "wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde\r\n" + "P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2\r\n" + "-----END RSA PRIVATE KEY-----\r\n"; const char mbedtls_test_ca_pwd_rsa[] = "PolarSSLTest"; const char mbedtls_test_srv_crt_rsa[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" -"MTEwMjEyMTQ0NDA2WhcNMjEwMjEyMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN\r\n" -"AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN\r\n" -"owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz\r\n" -"NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM\r\n" -"tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P\r\n" -"hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya\r\n" -"HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD\r\n" -"VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw\r\n" -"FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQADggEBAJxnXClY\r\n" -"oHkbp70cqBrsGXLybA74czbO5RdLEgFs7rHVS9r+c293luS/KdliLScZqAzYVylw\r\n" -"UfRWvKMoWhHYKp3dEIS4xTXk6/5zXxhv9Rw8SGc8qn6vITHk1S1mPevtekgasY5Y\r\n" -"iWQuM3h4YVlRH3HHEMAD1TnAexfXHHDFQGe+Bd1iAbz1/sH9H8l4StwX6egvTK3M\r\n" -"wXRwkKkvjKaEDA9ATbZx0mI8LGsxSuCqe9r9dyjmttd47J1p1Rulz3CLzaRcVIuS\r\n" -"RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8\r\n" -"zhuYwjVuX6JHG0c=\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIIDNzCCAh+gAwIBAgIBAjANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" + "MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" + "MTEwMjEyMTQ0NDA2WhcNMjEwMjEyMTQ0NDA2WjA0MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcN\r\n" + "AQEBBQADggEPADCCAQoCggEBAMFNo93nzR3RBNdJcriZrA545Do8Ss86ExbQWuTN\r\n" + "owCIp+4ea5anUrSQ7y1yej4kmvy2NKwk9XfgJmSMnLAofaHa6ozmyRyWvP7BBFKz\r\n" + "NtSj+uGxdtiQwWG0ZlI2oiZTqqt0Xgd9GYLbKtgfoNkNHC1JZvdbJXNG6AuKT2kM\r\n" + "tQCQ4dqCEGZ9rlQri2V5kaHiYcPNQEkI7mgM8YuG0ka/0LiqEQMef1aoGh5EGA8P\r\n" + "hYvai0Re4hjGYi/HZo36Xdh98yeJKQHFkA4/J/EwyEoO79bex8cna8cFPXrEAjya\r\n" + "HT4P6DSYW8tzS1KW2BGiLICIaTla0w+w3lkvEcf36hIBMJcCAwEAAaNNMEswCQYD\r\n" + "VR0TBAIwADAdBgNVHQ4EFgQUpQXoZLjc32APUBJNYKhkr02LQ5MwHwYDVR0jBBgw\r\n" + "FoAUtFrkpbPe0lL2udWmlQ/rPrzH/f8wDQYJKoZIhvcNAQEFBQADggEBAJxnXClY\r\n" + "oHkbp70cqBrsGXLybA74czbO5RdLEgFs7rHVS9r+c293luS/KdliLScZqAzYVylw\r\n" + "UfRWvKMoWhHYKp3dEIS4xTXk6/5zXxhv9Rw8SGc8qn6vITHk1S1mPevtekgasY5Y\r\n" + "iWQuM3h4YVlRH3HHEMAD1TnAexfXHHDFQGe+Bd1iAbz1/sH9H8l4StwX6egvTK3M\r\n" + "wXRwkKkvjKaEDA9ATbZx0mI8LGsxSuCqe9r9dyjmttd47J1p1Rulz3CLzaRcVIuS\r\n" + "RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8\r\n" + "zhuYwjVuX6JHG0c=\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_srv_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"MIIEpAIBAAKCAQEAwU2j3efNHdEE10lyuJmsDnjkOjxKzzoTFtBa5M2jAIin7h5r\r\n" -"lqdStJDvLXJ6PiSa/LY0rCT1d+AmZIycsCh9odrqjObJHJa8/sEEUrM21KP64bF2\r\n" -"2JDBYbRmUjaiJlOqq3ReB30Zgtsq2B+g2Q0cLUlm91slc0boC4pPaQy1AJDh2oIQ\r\n" -"Zn2uVCuLZXmRoeJhw81ASQjuaAzxi4bSRr/QuKoRAx5/VqgaHkQYDw+Fi9qLRF7i\r\n" -"GMZiL8dmjfpd2H3zJ4kpAcWQDj8n8TDISg7v1t7HxydrxwU9esQCPJodPg/oNJhb\r\n" -"y3NLUpbYEaIsgIhpOVrTD7DeWS8Rx/fqEgEwlwIDAQABAoIBAQCXR0S8EIHFGORZ\r\n" -"++AtOg6eENxD+xVs0f1IeGz57Tjo3QnXX7VBZNdj+p1ECvhCE/G7XnkgU5hLZX+G\r\n" -"Z0jkz/tqJOI0vRSdLBbipHnWouyBQ4e/A1yIJdlBtqXxJ1KE/ituHRbNc4j4kL8Z\r\n" -"/r6pvwnTI0PSx2Eqs048YdS92LT6qAv4flbNDxMn2uY7s4ycS4Q8w1JXnCeaAnYm\r\n" -"WYI5wxO+bvRELR2Mcz5DmVnL8jRyml6l6582bSv5oufReFIbyPZbQWlXgYnpu6He\r\n" -"GTc7E1zKYQGG/9+DQUl/1vQuCPqQwny0tQoX2w5tdYpdMdVm+zkLtbajzdTviJJa\r\n" -"TWzL6lt5AoGBAN86+SVeJDcmQJcv4Eq6UhtRr4QGMiQMz0Sod6ettYxYzMgxtw28\r\n" -"CIrgpozCc+UaZJLo7UxvC6an85r1b2nKPCLQFaggJ0H4Q0J/sZOhBIXaoBzWxveK\r\n" -"nupceKdVxGsFi8CDy86DBfiyFivfBj+47BbaQzPBj7C4rK7UlLjab2rDAoGBAN2u\r\n" -"AM2gchoFiu4v1HFL8D7lweEpi6ZnMJjnEu/dEgGQJFjwdpLnPbsj4c75odQ4Gz8g\r\n" -"sw9lao9VVzbusoRE/JGI4aTdO0pATXyG7eG1Qu+5Yc1YGXcCrliA2xM9xx+d7f+s\r\n" -"mPzN+WIEg5GJDYZDjAzHG5BNvi/FfM1C9dOtjv2dAoGAF0t5KmwbjWHBhcVqO4Ic\r\n" -"BVvN3BIlc1ue2YRXEDlxY5b0r8N4XceMgKmW18OHApZxfl8uPDauWZLXOgl4uepv\r\n" -"whZC3EuWrSyyICNhLY21Ah7hbIEBPF3L3ZsOwC+UErL+dXWLdB56Jgy3gZaBeW7b\r\n" -"vDrEnocJbqCm7IukhXHOBK8CgYEAwqdHB0hqyNSzIOGY7v9abzB6pUdA3BZiQvEs\r\n" -"3LjHVd4HPJ2x0N8CgrBIWOE0q8+0hSMmeE96WW/7jD3fPWwCR5zlXknxBQsfv0gP\r\n" -"3BC5PR0Qdypz+d+9zfMf625kyit4T/hzwhDveZUzHnk1Cf+IG7Q+TOEnLnWAWBED\r\n" -"ISOWmrUCgYAFEmRxgwAc/u+D6t0syCwAYh6POtscq9Y0i9GyWk89NzgC4NdwwbBH\r\n" -"4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE\r\n" -"TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; + "-----BEGIN RSA PRIVATE KEY-----\r\n" + "MIIEpAIBAAKCAQEAwU2j3efNHdEE10lyuJmsDnjkOjxKzzoTFtBa5M2jAIin7h5r\r\n" + "lqdStJDvLXJ6PiSa/LY0rCT1d+AmZIycsCh9odrqjObJHJa8/sEEUrM21KP64bF2\r\n" + "2JDBYbRmUjaiJlOqq3ReB30Zgtsq2B+g2Q0cLUlm91slc0boC4pPaQy1AJDh2oIQ\r\n" + "Zn2uVCuLZXmRoeJhw81ASQjuaAzxi4bSRr/QuKoRAx5/VqgaHkQYDw+Fi9qLRF7i\r\n" + "GMZiL8dmjfpd2H3zJ4kpAcWQDj8n8TDISg7v1t7HxydrxwU9esQCPJodPg/oNJhb\r\n" + "y3NLUpbYEaIsgIhpOVrTD7DeWS8Rx/fqEgEwlwIDAQABAoIBAQCXR0S8EIHFGORZ\r\n" + "++AtOg6eENxD+xVs0f1IeGz57Tjo3QnXX7VBZNdj+p1ECvhCE/G7XnkgU5hLZX+G\r\n" + "Z0jkz/tqJOI0vRSdLBbipHnWouyBQ4e/A1yIJdlBtqXxJ1KE/ituHRbNc4j4kL8Z\r\n" + "/r6pvwnTI0PSx2Eqs048YdS92LT6qAv4flbNDxMn2uY7s4ycS4Q8w1JXnCeaAnYm\r\n" + "WYI5wxO+bvRELR2Mcz5DmVnL8jRyml6l6582bSv5oufReFIbyPZbQWlXgYnpu6He\r\n" + "GTc7E1zKYQGG/9+DQUl/1vQuCPqQwny0tQoX2w5tdYpdMdVm+zkLtbajzdTviJJa\r\n" + "TWzL6lt5AoGBAN86+SVeJDcmQJcv4Eq6UhtRr4QGMiQMz0Sod6ettYxYzMgxtw28\r\n" + "CIrgpozCc+UaZJLo7UxvC6an85r1b2nKPCLQFaggJ0H4Q0J/sZOhBIXaoBzWxveK\r\n" + "nupceKdVxGsFi8CDy86DBfiyFivfBj+47BbaQzPBj7C4rK7UlLjab2rDAoGBAN2u\r\n" + "AM2gchoFiu4v1HFL8D7lweEpi6ZnMJjnEu/dEgGQJFjwdpLnPbsj4c75odQ4Gz8g\r\n" + "sw9lao9VVzbusoRE/JGI4aTdO0pATXyG7eG1Qu+5Yc1YGXcCrliA2xM9xx+d7f+s\r\n" + "mPzN+WIEg5GJDYZDjAzHG5BNvi/FfM1C9dOtjv2dAoGAF0t5KmwbjWHBhcVqO4Ic\r\n" + "BVvN3BIlc1ue2YRXEDlxY5b0r8N4XceMgKmW18OHApZxfl8uPDauWZLXOgl4uepv\r\n" + "whZC3EuWrSyyICNhLY21Ah7hbIEBPF3L3ZsOwC+UErL+dXWLdB56Jgy3gZaBeW7b\r\n" + "vDrEnocJbqCm7IukhXHOBK8CgYEAwqdHB0hqyNSzIOGY7v9abzB6pUdA3BZiQvEs\r\n" + "3LjHVd4HPJ2x0N8CgrBIWOE0q8+0hSMmeE96WW/7jD3fPWwCR5zlXknxBQsfv0gP\r\n" + "3BC5PR0Qdypz+d+9zfMf625kyit4T/hzwhDveZUzHnk1Cf+IG7Q+TOEnLnWAWBED\r\n" + "ISOWmrUCgYAFEmRxgwAc/u+D6t0syCwAYh6POtscq9Y0i9GyWk89NzgC4NdwwbBH\r\n" + "4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE\r\n" + "TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==\r\n" + "-----END RSA PRIVATE KEY-----\r\n"; const char mbedtls_test_cli_crt_rsa[] = -"-----BEGIN CERTIFICATE-----\r\n" -"MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" -"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" -"MTEwMjEyMTQ0NDA3WhcNMjEwMjEyMTQ0NDA3WjA8MQswCQYDVQQGEwJOTDERMA8G\r\n" -"A1UEChMIUG9sYXJTU0wxGjAYBgNVBAMTEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN\r\n" -"BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f\r\n" -"M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu\r\n" -"1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw\r\n" -"MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v\r\n" -"4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/\r\n" -"/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB\r\n" -"o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf\r\n" -"BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC\r\n" -"AQEAAn86isAM8X+mVwJqeItt6E9slhEQbAofyk+diH1Lh8Y9iLlWQSKbw/UXYjx5\r\n" -"LLPZcniovxIcARC/BjyZR9g3UwTHNGNm+rwrqa15viuNOFBchykX/Orsk02EH7NR\r\n" -"Alw5WLPorYjED6cdVQgBl9ot93HdJogRiXCxErM7NC8/eP511mjq+uLDjLKH8ZPQ\r\n" -"8I4ekHJnroLsDkIwXKGIsvIBHQy2ac/NwHLCQOK6mfum1pRx52V4Utu5dLLjD5bM\r\n" -"xOBC7KU4xZKuMXXZM6/93Yb51K/J4ahf1TxJlTWXtnzDr9saEYdNy2SKY/6ZiDNH\r\n" -"D+stpAKiQLAWaAusIWKYEyw9MQ==\r\n" -"-----END CERTIFICATE-----\r\n"; + "-----BEGIN CERTIFICATE-----\r\n" + "MIIDPzCCAiegAwIBAgIBBDANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" + "MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" + "MTEwMjEyMTQ0NDA3WhcNMjEwMjEyMTQ0NDA3WjA8MQswCQYDVQQGEwJOTDERMA8G\r\n" + "A1UEChMIUG9sYXJTU0wxGjAYBgNVBAMTEVBvbGFyU1NMIENsaWVudCAyMIIBIjAN\r\n" + "BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f\r\n" + "M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu\r\n" + "1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw\r\n" + "MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v\r\n" + "4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/\r\n" + "/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB\r\n" + "o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf\r\n" + "BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC\r\n" + "AQEAAn86isAM8X+mVwJqeItt6E9slhEQbAofyk+diH1Lh8Y9iLlWQSKbw/UXYjx5\r\n" + "LLPZcniovxIcARC/BjyZR9g3UwTHNGNm+rwrqa15viuNOFBchykX/Orsk02EH7NR\r\n" + "Alw5WLPorYjED6cdVQgBl9ot93HdJogRiXCxErM7NC8/eP511mjq+uLDjLKH8ZPQ\r\n" + "8I4ekHJnroLsDkIwXKGIsvIBHQy2ac/NwHLCQOK6mfum1pRx52V4Utu5dLLjD5bM\r\n" + "xOBC7KU4xZKuMXXZM6/93Yb51K/J4ahf1TxJlTWXtnzDr9saEYdNy2SKY/6ZiDNH\r\n" + "D+stpAKiQLAWaAusIWKYEyw9MQ==\r\n" + "-----END CERTIFICATE-----\r\n"; const char mbedtls_test_cli_key_rsa[] = -"-----BEGIN RSA PRIVATE KEY-----\r\n" -"MIIEpAIBAAKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6fM60Nj4o8VmXl3ETZzGaF\r\n" -"B9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu1C93KYRhTYJQj6eVSHD1\r\n" -"bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEwMjDV0/YI0FZPRo7yX/k9\r\n" -"Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v4Jv4EFbMs44TFeY0BGbH\r\n" -"7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx//DZrtenNLQNiTrM9AM+v\r\n" -"dqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQABAoIBAGdNtfYDiap6bzst\r\n" -"yhCiI8m9TtrhZw4MisaEaN/ll3XSjaOG2dvV6xMZCMV+5TeXDHOAZnY18Yi18vzz\r\n" -"4Ut2TnNFzizCECYNaA2fST3WgInnxUkV3YXAyP6CNxJaCmv2aA0yFr2kFVSeaKGt\r\n" -"ymvljNp2NVkvm7Th8fBQBO7I7AXhz43k0mR7XmPgewe8ApZOG3hstkOaMvbWAvWA\r\n" -"zCZupdDjZYjOJqlA4eEA4H8/w7F83r5CugeBE8LgEREjLPiyejrU5H1fubEY+h0d\r\n" -"l5HZBJ68ybTXfQ5U9o/QKA3dd0toBEhhdRUDGzWtjvwkEQfqF1reGWj/tod/gCpf\r\n" -"DFi6X0ECgYEA4wOv/pjSC3ty6TuOvKX2rOUiBrLXXv2JSxZnMoMiWI5ipLQt+RYT\r\n" -"VPafL/m7Dn6MbwjayOkcZhBwk5CNz5A6Q4lJ64Mq/lqHznRCQQ2Mc1G8eyDF/fYL\r\n" -"Ze2pLvwP9VD5jTc2miDfw+MnvJhywRRLcemDFP8k4hQVtm8PMp3ZmNECgYEA4gz7\r\n" -"wzObR4gn8ibe617uQPZjWzUj9dUHYd+in1gwBCIrtNnaRn9I9U/Q6tegRYpii4ys\r\n" -"c176NmU+umy6XmuSKV5qD9bSpZWG2nLFnslrN15Lm3fhZxoeMNhBaEDTnLT26yoi\r\n" -"33gp0mSSWy94ZEqipms+ULF6sY1ZtFW6tpGFoy8CgYAQHhnnvJflIs2ky4q10B60\r\n" -"ZcxFp3rtDpkp0JxhFLhiizFrujMtZSjYNm5U7KkgPVHhLELEUvCmOnKTt4ap/vZ0\r\n" -"BxJNe1GZH3pW6SAvGDQpl9sG7uu/vTFP+lCxukmzxB0DrrDcvorEkKMom7ZCCRvW\r\n" -"KZsZ6YeH2Z81BauRj218kQKBgQCUV/DgKP2985xDTT79N08jUo3hTP5MVYCCuj/+\r\n" -"UeEw1TvZcx3LJby7P6Xad6a1/BqveaGyFKIfEFIaBUBItk801sDDpDaYc4gL00Xc\r\n" -"7lFuBHOZkxJYlss5QrGpuOEl9ZwUt5IrFLBdYaKqNHzNVC1pCPfb/JyH6Dr2HUxq\r\n" -"gxUwAQKBgQCcU6G2L8AG9d9c0UpOyL1tMvFe5Ttw0KjlQVdsh1MP6yigYo9DYuwu\r\n" -"bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv\r\n" -"8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==\r\n" -"-----END RSA PRIVATE KEY-----\r\n"; + "-----BEGIN RSA PRIVATE KEY-----\r\n" + "MIIEpAIBAAKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6fM60Nj4o8VmXl3ETZzGaF\r\n" + "B9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu1C93KYRhTYJQj6eVSHD1\r\n" + "bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEwMjDV0/YI0FZPRo7yX/k9\r\n" + "Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v4Jv4EFbMs44TFeY0BGbH\r\n" + "7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx//DZrtenNLQNiTrM9AM+v\r\n" + "dqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQABAoIBAGdNtfYDiap6bzst\r\n" + "yhCiI8m9TtrhZw4MisaEaN/ll3XSjaOG2dvV6xMZCMV+5TeXDHOAZnY18Yi18vzz\r\n" + "4Ut2TnNFzizCECYNaA2fST3WgInnxUkV3YXAyP6CNxJaCmv2aA0yFr2kFVSeaKGt\r\n" + "ymvljNp2NVkvm7Th8fBQBO7I7AXhz43k0mR7XmPgewe8ApZOG3hstkOaMvbWAvWA\r\n" + "zCZupdDjZYjOJqlA4eEA4H8/w7F83r5CugeBE8LgEREjLPiyejrU5H1fubEY+h0d\r\n" + "l5HZBJ68ybTXfQ5U9o/QKA3dd0toBEhhdRUDGzWtjvwkEQfqF1reGWj/tod/gCpf\r\n" + "DFi6X0ECgYEA4wOv/pjSC3ty6TuOvKX2rOUiBrLXXv2JSxZnMoMiWI5ipLQt+RYT\r\n" + "VPafL/m7Dn6MbwjayOkcZhBwk5CNz5A6Q4lJ64Mq/lqHznRCQQ2Mc1G8eyDF/fYL\r\n" + "Ze2pLvwP9VD5jTc2miDfw+MnvJhywRRLcemDFP8k4hQVtm8PMp3ZmNECgYEA4gz7\r\n" + "wzObR4gn8ibe617uQPZjWzUj9dUHYd+in1gwBCIrtNnaRn9I9U/Q6tegRYpii4ys\r\n" + "c176NmU+umy6XmuSKV5qD9bSpZWG2nLFnslrN15Lm3fhZxoeMNhBaEDTnLT26yoi\r\n" + "33gp0mSSWy94ZEqipms+ULF6sY1ZtFW6tpGFoy8CgYAQHhnnvJflIs2ky4q10B60\r\n" + "ZcxFp3rtDpkp0JxhFLhiizFrujMtZSjYNm5U7KkgPVHhLELEUvCmOnKTt4ap/vZ0\r\n" + "BxJNe1GZH3pW6SAvGDQpl9sG7uu/vTFP+lCxukmzxB0DrrDcvorEkKMom7ZCCRvW\r\n" + "KZsZ6YeH2Z81BauRj218kQKBgQCUV/DgKP2985xDTT79N08jUo3hTP5MVYCCuj/+\r\n" + "UeEw1TvZcx3LJby7P6Xad6a1/BqveaGyFKIfEFIaBUBItk801sDDpDaYc4gL00Xc\r\n" + "7lFuBHOZkxJYlss5QrGpuOEl9ZwUt5IrFLBdYaKqNHzNVC1pCPfb/JyH6Dr2HUxq\r\n" + "gxUwAQKBgQCcU6G2L8AG9d9c0UpOyL1tMvFe5Ttw0KjlQVdsh1MP6yigYo9DYuwu\r\n" + "bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv\r\n" + "8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==\r\n" + "-----END RSA PRIVATE KEY-----\r\n"; const size_t mbedtls_test_ca_crt_rsa_len = sizeof( mbedtls_test_ca_crt_rsa ); const size_t mbedtls_test_ca_key_rsa_len = sizeof( mbedtls_test_ca_key_rsa ); diff --git a/external_libs/mbedtls/library/cipher.c b/external_libs/mbedtls/library/cipher.c index a883438..ad2ac4b 100644 --- a/external_libs/mbedtls/library/cipher.c +++ b/external_libs/mbedtls/library/cipher.c @@ -61,8 +61,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } static int supported_init = 0; @@ -72,12 +74,11 @@ const int *mbedtls_cipher_list( void ) const mbedtls_cipher_definition_t *def; int *type; - if( ! supported_init ) - { + if ( ! supported_init ) { def = mbedtls_cipher_definitions; type = mbedtls_cipher_supported; - while( def->type != 0 ) + while ( def->type != 0 ) *type++ = (*def++).type; *type = 0; @@ -85,47 +86,47 @@ const int *mbedtls_cipher_list( void ) supported_init = 1; } - return( mbedtls_cipher_supported ); + return ( mbedtls_cipher_supported ); } const mbedtls_cipher_info_t *mbedtls_cipher_info_from_type( const mbedtls_cipher_type_t cipher_type ) { const mbedtls_cipher_definition_t *def; - for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) - if( def->type == cipher_type ) - return( def->info ); + for ( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if ( def->type == cipher_type ) + return ( def->info ); - return( NULL ); + return ( NULL ); } const mbedtls_cipher_info_t *mbedtls_cipher_info_from_string( const char *cipher_name ) { const mbedtls_cipher_definition_t *def; - if( NULL == cipher_name ) - return( NULL ); + if ( NULL == cipher_name ) + return ( NULL ); - for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) - if( ! strcmp( def->info->name, cipher_name ) ) - return( def->info ); + for ( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if ( ! strcmp( def->info->name, cipher_name ) ) + return ( def->info ); - return( NULL ); + return ( NULL ); } const mbedtls_cipher_info_t *mbedtls_cipher_info_from_values( const mbedtls_cipher_id_t cipher_id, - int key_bitlen, - const mbedtls_cipher_mode_t mode ) + int key_bitlen, + const mbedtls_cipher_mode_t mode ) { const mbedtls_cipher_definition_t *def; - for( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) - if( def->info->base->cipher == cipher_id && - def->info->key_bitlen == (unsigned) key_bitlen && - def->info->mode == mode ) - return( def->info ); + for ( def = mbedtls_cipher_definitions; def->info != NULL; def++ ) + if ( def->info->base->cipher == cipher_id && + def->info->key_bitlen == (unsigned) key_bitlen && + def->info->mode == mode ) + return ( def->info ); - return( NULL ); + return ( NULL ); } void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ) @@ -135,18 +136,17 @@ void mbedtls_cipher_init( mbedtls_cipher_context_t *ctx ) void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; #if defined(MBEDTLS_CMAC_C) - if( ctx->cmac_ctx ) - { - mbedtls_zeroize( ctx->cmac_ctx, sizeof( mbedtls_cmac_context_t ) ); - mbedtls_free( ctx->cmac_ctx ); + if ( ctx->cmac_ctx ) { + mbedtls_zeroize( ctx->cmac_ctx, sizeof( mbedtls_cmac_context_t ) ); + mbedtls_free( ctx->cmac_ctx ); } #endif - if( ctx->cipher_ctx ) + if ( ctx->cipher_ctx ) ctx->cipher_info->base->ctx_free_func( ctx->cipher_ctx ); mbedtls_zeroize( ctx, sizeof(mbedtls_cipher_context_t) ); @@ -154,13 +154,13 @@ void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx ) int mbedtls_cipher_setup( mbedtls_cipher_context_t *ctx, const mbedtls_cipher_info_t *cipher_info ) { - if( NULL == cipher_info || NULL == ctx ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == cipher_info || NULL == ctx ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); memset( ctx, 0, sizeof( mbedtls_cipher_context_t ) ); - if( NULL == ( ctx->cipher_ctx = cipher_info->base->ctx_alloc_func() ) ) - return( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); + if ( NULL == ( ctx->cipher_ctx = cipher_info->base->ctx_alloc_func() ) ) + return ( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); ctx->cipher_info = cipher_info; @@ -175,19 +175,18 @@ int mbedtls_cipher_setup( mbedtls_cipher_context_t *ctx, const mbedtls_cipher_in #endif #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ - return( 0 ); + return ( 0 ); } int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *key, - int key_bitlen, const mbedtls_operation_t operation ) + int key_bitlen, const mbedtls_operation_t operation ) { - if( NULL == ctx || NULL == ctx->cipher_info ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_KEY_LEN ) == 0 && - (int) ctx->cipher_info->key_bitlen != key_bitlen ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_KEY_LEN ) == 0 && + (int) ctx->cipher_info->key_bitlen != key_bitlen ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } ctx->key_bitlen = key_bitlen; @@ -196,162 +195,149 @@ int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *k /* * For CFB and CTR mode always use the encryption key schedule */ - if( MBEDTLS_ENCRYPT == operation || - MBEDTLS_MODE_CFB == ctx->cipher_info->mode || - MBEDTLS_MODE_CTR == ctx->cipher_info->mode ) - { + if ( MBEDTLS_ENCRYPT == operation || + MBEDTLS_MODE_CFB == ctx->cipher_info->mode || + MBEDTLS_MODE_CTR == ctx->cipher_info->mode ) { return ctx->cipher_info->base->setkey_enc_func( ctx->cipher_ctx, key, ctx->key_bitlen ); } - if( MBEDTLS_DECRYPT == operation ) + if ( MBEDTLS_DECRYPT == operation ) return ctx->cipher_info->base->setkey_dec_func( ctx->cipher_ctx, key, ctx->key_bitlen ); - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } int mbedtls_cipher_set_iv( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len ) + const unsigned char *iv, size_t iv_len ) { size_t actual_iv_size; - if( NULL == ctx || NULL == ctx->cipher_info || NULL == iv ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == iv ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); /* avoid buffer overflow in ctx->iv */ - if( iv_len > MBEDTLS_MAX_IV_LENGTH ) - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + if ( iv_len > MBEDTLS_MAX_IV_LENGTH ) + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); - if( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_IV_LEN ) != 0 ) + if ( ( ctx->cipher_info->flags & MBEDTLS_CIPHER_VARIABLE_IV_LEN ) != 0 ) actual_iv_size = iv_len; - else - { + else { actual_iv_size = ctx->cipher_info->iv_size; /* avoid reading past the end of input buffer */ - if( actual_iv_size > iv_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( actual_iv_size > iv_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } memcpy( ctx->iv, iv, actual_iv_size ); ctx->iv_size = actual_iv_size; - return( 0 ); + return ( 0 ); } int mbedtls_cipher_reset( mbedtls_cipher_context_t *ctx ) { - if( NULL == ctx || NULL == ctx->cipher_info ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); ctx->unprocessed_len = 0; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_GCM_C) int mbedtls_cipher_update_ad( mbedtls_cipher_context_t *ctx, - const unsigned char *ad, size_t ad_len ) + const unsigned char *ad, size_t ad_len ) { - if( NULL == ctx || NULL == ctx->cipher_info ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { return mbedtls_gcm_starts( (mbedtls_gcm_context *) ctx->cipher_ctx, ctx->operation, - ctx->iv, ctx->iv_size, ad, ad_len ); + ctx->iv, ctx->iv_size, ad, ad_len ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_GCM_C */ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *input, - size_t ilen, unsigned char *output, size_t *olen ) + size_t ilen, unsigned char *output, size_t *olen ) { int ret; size_t block_size = 0; - if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } *olen = 0; block_size = mbedtls_cipher_get_block_size( ctx ); - if( ctx->cipher_info->mode == MBEDTLS_MODE_ECB ) - { - if( ilen != block_size ) - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_ECB ) { + if ( ilen != block_size ) + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); *olen = ilen; - if( 0 != ( ret = ctx->cipher_info->base->ecb_func( ctx->cipher_ctx, - ctx->operation, input, output ) ) ) - { - return( ret ); + if ( 0 != ( ret = ctx->cipher_info->base->ecb_func( ctx->cipher_ctx, + ctx->operation, input, output ) ) ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_GCM_C) - if( ctx->cipher_info->mode == MBEDTLS_MODE_GCM ) - { + if ( ctx->cipher_info->mode == MBEDTLS_MODE_GCM ) { *olen = ilen; return mbedtls_gcm_update( (mbedtls_gcm_context *) ctx->cipher_ctx, ilen, input, - output ); + output ); } #endif - if ( 0 == block_size ) - { + if ( 0 == block_size ) { return MBEDTLS_ERR_CIPHER_INVALID_CONTEXT; } - if( input == output && - ( ctx->unprocessed_len != 0 || ilen % block_size ) ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( input == output && + ( ctx->unprocessed_len != 0 || ilen % block_size ) ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) - if( ctx->cipher_info->mode == MBEDTLS_MODE_CBC ) - { + if ( ctx->cipher_info->mode == MBEDTLS_MODE_CBC ) { size_t copy_len = 0; /* * If there is not enough data for a full block, cache it. */ - if( ( ctx->operation == MBEDTLS_DECRYPT && - ilen + ctx->unprocessed_len <= block_size ) || + if ( ( ctx->operation == MBEDTLS_DECRYPT && + ilen + ctx->unprocessed_len <= block_size ) || ( ctx->operation == MBEDTLS_ENCRYPT && - ilen + ctx->unprocessed_len < block_size ) ) - { + ilen + ctx->unprocessed_len < block_size ) ) { memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, ilen ); ctx->unprocessed_len += ilen; - return( 0 ); + return ( 0 ); } /* * Process cached data first */ - if( 0 != ctx->unprocessed_len ) - { + if ( 0 != ctx->unprocessed_len ) { copy_len = block_size - ctx->unprocessed_len; memcpy( &( ctx->unprocessed_data[ctx->unprocessed_len] ), input, copy_len ); - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, block_size, ctx->iv, - ctx->unprocessed_data, output ) ) ) - { - return( ret ); + if ( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, block_size, ctx->iv, + ctx->unprocessed_data, output ) ) ) { + return ( ret ); } *olen += block_size; @@ -365,15 +351,13 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i /* * Cache final, incomplete block */ - if( 0 != ilen ) - { - if( 0 == block_size ) - { + if ( 0 != ilen ) { + if ( 0 == block_size ) { return MBEDTLS_ERR_CIPHER_INVALID_CONTEXT; } copy_len = ilen % block_size; - if( copy_len == 0 && ctx->operation == MBEDTLS_DECRYPT ) + if ( copy_len == 0 && ctx->operation == MBEDTLS_DECRYPT ) copy_len = block_size; memcpy( ctx->unprocessed_data, &( input[ilen - copy_len] ), @@ -386,69 +370,61 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i /* * Process remaining full blocks */ - if( ilen ) - { - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, ilen, ctx->iv, input, output ) ) ) - { - return( ret ); + if ( ilen ) { + if ( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, ilen, ctx->iv, input, output ) ) ) { + return ( ret ); } *olen += ilen; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) - if( ctx->cipher_info->mode == MBEDTLS_MODE_CFB ) - { - if( 0 != ( ret = ctx->cipher_info->base->cfb_func( ctx->cipher_ctx, - ctx->operation, ilen, &ctx->unprocessed_len, ctx->iv, - input, output ) ) ) - { - return( ret ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_CFB ) { + if ( 0 != ( ret = ctx->cipher_info->base->cfb_func( ctx->cipher_ctx, + ctx->operation, ilen, &ctx->unprocessed_len, ctx->iv, + input, output ) ) ) { + return ( ret ); } *olen = ilen; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) - if( ctx->cipher_info->mode == MBEDTLS_MODE_CTR ) - { - if( 0 != ( ret = ctx->cipher_info->base->ctr_func( ctx->cipher_ctx, - ilen, &ctx->unprocessed_len, ctx->iv, - ctx->unprocessed_data, input, output ) ) ) - { - return( ret ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_CTR ) { + if ( 0 != ( ret = ctx->cipher_info->base->ctr_func( ctx->cipher_ctx, + ilen, &ctx->unprocessed_len, ctx->iv, + ctx->unprocessed_data, input, output ) ) ) { + return ( ret ); } *olen = ilen; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ #if defined(MBEDTLS_CIPHER_MODE_STREAM) - if( ctx->cipher_info->mode == MBEDTLS_MODE_STREAM ) - { - if( 0 != ( ret = ctx->cipher_info->base->stream_func( ctx->cipher_ctx, - ilen, input, output ) ) ) - { - return( ret ); + if ( ctx->cipher_info->mode == MBEDTLS_MODE_STREAM ) { + if ( 0 != ( ret = ctx->cipher_info->base->stream_func( ctx->cipher_ctx, + ilen, input, output ) ) ) { + return ( ret ); } *olen = ilen; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_STREAM */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) @@ -457,23 +433,23 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i * PKCS7 (and PKCS5) padding: fill with ll bytes, with ll = padding_len */ static void add_pkcs_padding( unsigned char *output, size_t output_len, - size_t data_len ) + size_t data_len ) { size_t padding_len = output_len - data_len; unsigned char i; - for( i = 0; i < padding_len; i++ ) + for ( i = 0; i < padding_len; i++ ) output[data_len + i] = (unsigned char) padding_len; } static int get_pkcs_padding( unsigned char *input, size_t input_len, - size_t *data_len ) + size_t *data_len ) { size_t i, pad_idx; unsigned char padding_len, bad = 0; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); padding_len = input[input_len - 1]; *data_len = input_len - padding_len; @@ -485,10 +461,10 @@ static int get_pkcs_padding( unsigned char *input, size_t input_len, /* The number of bytes checked must be independent of padding_len, * so pick input_len, which is usually 8 or 16 (one block) */ pad_idx = input_len - padding_len; - for( i = 0; i < input_len; i++ ) + for ( i = 0; i < input_len; i++ ) bad |= ( input[i] ^ padding_len ) * ( i >= pad_idx ); - return( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); + return ( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); } #endif /* MBEDTLS_CIPHER_PADDING_PKCS7 */ @@ -503,7 +479,7 @@ static void add_one_and_zeros_padding( unsigned char *output, unsigned char i = 0; output[data_len] = 0x80; - for( i = 1; i < padding_len; i++ ) + for ( i = 1; i < padding_len; i++ ) output[data_len + i] = 0x00; } @@ -513,20 +489,19 @@ static int get_one_and_zeros_padding( unsigned char *input, size_t input_len, size_t i; unsigned char done = 0, prev_done, bad; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); bad = 0xFF; *data_len = 0; - for( i = input_len; i > 0; i-- ) - { + for ( i = input_len; i > 0; i-- ) { prev_done = done; - done |= ( input[i-1] != 0 ); + done |= ( input[i - 1] != 0 ); *data_len |= ( i - 1 ) * ( done != prev_done ); - bad &= ( input[i-1] ^ 0x80 ) | ( done == prev_done ); + bad &= ( input[i - 1] ^ 0x80 ) | ( done == prev_done ); } - return( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); + return ( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); } #endif /* MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS */ @@ -541,7 +516,7 @@ static void add_zeros_and_len_padding( unsigned char *output, size_t padding_len = output_len - data_len; unsigned char i = 0; - for( i = 1; i < padding_len; i++ ) + for ( i = 1; i < padding_len; i++ ) output[data_len + i - 1] = 0x00; output[output_len - 1] = (unsigned char) padding_len; } @@ -552,8 +527,8 @@ static int get_zeros_and_len_padding( unsigned char *input, size_t input_len, size_t i, pad_idx; unsigned char padding_len, bad = 0; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); padding_len = input[input_len - 1]; *data_len = input_len - padding_len; @@ -564,10 +539,10 @@ static int get_zeros_and_len_padding( unsigned char *input, size_t input_len, /* The number of bytes checked must be independent of padding_len */ pad_idx = input_len - padding_len; - for( i = 0; i < input_len - 1; i++ ) + for ( i = 0; i < input_len - 1; i++ ) bad |= input[i] * ( i >= pad_idx ); - return( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); + return ( MBEDTLS_ERR_CIPHER_INVALID_PADDING * ( bad != 0 ) ); } #endif /* MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN */ @@ -580,7 +555,7 @@ static void add_zeros_padding( unsigned char *output, { size_t i; - for( i = data_len; i < output_len; i++ ) + for ( i = data_len; i < output_len; i++ ) output[i] = 0x00; } @@ -590,18 +565,17 @@ static int get_zeros_padding( unsigned char *input, size_t input_len, size_t i; unsigned char done = 0, prev_done; - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); *data_len = 0; - for( i = input_len; i > 0; i-- ) - { + for ( i = input_len; i > 0; i-- ) { prev_done = done; - done |= ( input[i-1] != 0 ); + done |= ( input[i - 1] != 0 ); *data_len |= i * ( done != prev_done ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_PADDING_ZEROS */ @@ -612,197 +586,184 @@ static int get_zeros_padding( unsigned char *input, size_t input_len, * but a trivial get_padding function */ static int get_no_padding( unsigned char *input, size_t input_len, - size_t *data_len ) + size_t *data_len ) { - if( NULL == input || NULL == data_len ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == input || NULL == data_len ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); *data_len = input_len; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ int mbedtls_cipher_finish( mbedtls_cipher_context_t *ctx, - unsigned char *output, size_t *olen ) + unsigned char *output, size_t *olen ) { - if( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == olen ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); *olen = 0; - if( MBEDTLS_MODE_CFB == ctx->cipher_info->mode || - MBEDTLS_MODE_CTR == ctx->cipher_info->mode || - MBEDTLS_MODE_GCM == ctx->cipher_info->mode || - MBEDTLS_MODE_STREAM == ctx->cipher_info->mode ) - { - return( 0 ); + if ( MBEDTLS_MODE_CFB == ctx->cipher_info->mode || + MBEDTLS_MODE_CTR == ctx->cipher_info->mode || + MBEDTLS_MODE_GCM == ctx->cipher_info->mode || + MBEDTLS_MODE_STREAM == ctx->cipher_info->mode ) { + return ( 0 ); } - if( MBEDTLS_MODE_ECB == ctx->cipher_info->mode ) - { - if( ctx->unprocessed_len != 0 ) - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + if ( MBEDTLS_MODE_ECB == ctx->cipher_info->mode ) { + if ( ctx->unprocessed_len != 0 ) + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) - if( MBEDTLS_MODE_CBC == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_CBC == ctx->cipher_info->mode ) { int ret = 0; - if( MBEDTLS_ENCRYPT == ctx->operation ) - { + if ( MBEDTLS_ENCRYPT == ctx->operation ) { /* check for 'no padding' mode */ - if( NULL == ctx->add_padding ) - { - if( 0 != ctx->unprocessed_len ) - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + if ( NULL == ctx->add_padding ) { + if ( 0 != ctx->unprocessed_len ) + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); - return( 0 ); + return ( 0 ); } ctx->add_padding( ctx->unprocessed_data, mbedtls_cipher_get_iv_size( ctx ), - ctx->unprocessed_len ); - } - else if( mbedtls_cipher_get_block_size( ctx ) != ctx->unprocessed_len ) - { + ctx->unprocessed_len ); + } else if ( mbedtls_cipher_get_block_size( ctx ) != ctx->unprocessed_len ) { /* * For decrypt operations, expect a full block, * or an empty block if no padding */ - if( NULL == ctx->add_padding && 0 == ctx->unprocessed_len ) - return( 0 ); + if ( NULL == ctx->add_padding && 0 == ctx->unprocessed_len ) + return ( 0 ); - return( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); + return ( MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED ); } /* cipher block */ - if( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, - ctx->operation, mbedtls_cipher_get_block_size( ctx ), ctx->iv, - ctx->unprocessed_data, output ) ) ) - { - return( ret ); + if ( 0 != ( ret = ctx->cipher_info->base->cbc_func( ctx->cipher_ctx, + ctx->operation, mbedtls_cipher_get_block_size( ctx ), ctx->iv, + ctx->unprocessed_data, output ) ) ) { + return ( ret ); } /* Set output size for decryption */ - if( MBEDTLS_DECRYPT == ctx->operation ) + if ( MBEDTLS_DECRYPT == ctx->operation ) return ctx->get_padding( output, mbedtls_cipher_get_block_size( ctx ), olen ); /* Set output size for encryption */ *olen = mbedtls_cipher_get_block_size( ctx ); - return( 0 ); + return ( 0 ); } #else ((void) output); #endif /* MBEDTLS_CIPHER_MODE_CBC */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } #if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING) int mbedtls_cipher_set_padding_mode( mbedtls_cipher_context_t *ctx, mbedtls_cipher_padding_t mode ) { - if( NULL == ctx || - MBEDTLS_MODE_CBC != ctx->cipher_info->mode ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || + MBEDTLS_MODE_CBC != ctx->cipher_info->mode ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } - switch( mode ) - { + switch ( mode ) { #if defined(MBEDTLS_CIPHER_PADDING_PKCS7) - case MBEDTLS_PADDING_PKCS7: - ctx->add_padding = add_pkcs_padding; - ctx->get_padding = get_pkcs_padding; - break; + case MBEDTLS_PADDING_PKCS7: + ctx->add_padding = add_pkcs_padding; + ctx->get_padding = get_pkcs_padding; + break; #endif #if defined(MBEDTLS_CIPHER_PADDING_ONE_AND_ZEROS) - case MBEDTLS_PADDING_ONE_AND_ZEROS: - ctx->add_padding = add_one_and_zeros_padding; - ctx->get_padding = get_one_and_zeros_padding; - break; + case MBEDTLS_PADDING_ONE_AND_ZEROS: + ctx->add_padding = add_one_and_zeros_padding; + ctx->get_padding = get_one_and_zeros_padding; + break; #endif #if defined(MBEDTLS_CIPHER_PADDING_ZEROS_AND_LEN) - case MBEDTLS_PADDING_ZEROS_AND_LEN: - ctx->add_padding = add_zeros_and_len_padding; - ctx->get_padding = get_zeros_and_len_padding; - break; + case MBEDTLS_PADDING_ZEROS_AND_LEN: + ctx->add_padding = add_zeros_and_len_padding; + ctx->get_padding = get_zeros_and_len_padding; + break; #endif #if defined(MBEDTLS_CIPHER_PADDING_ZEROS) - case MBEDTLS_PADDING_ZEROS: - ctx->add_padding = add_zeros_padding; - ctx->get_padding = get_zeros_padding; - break; + case MBEDTLS_PADDING_ZEROS: + ctx->add_padding = add_zeros_padding; + ctx->get_padding = get_zeros_padding; + break; #endif - case MBEDTLS_PADDING_NONE: - ctx->add_padding = NULL; - ctx->get_padding = get_no_padding; - break; + case MBEDTLS_PADDING_NONE: + ctx->add_padding = NULL; + ctx->get_padding = get_no_padding; + break; - default: - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + default: + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_WITH_PADDING */ #if defined(MBEDTLS_GCM_C) int mbedtls_cipher_write_tag( mbedtls_cipher_context_t *ctx, - unsigned char *tag, size_t tag_len ) + unsigned char *tag, size_t tag_len ) { - if( NULL == ctx || NULL == ctx->cipher_info || NULL == tag ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || NULL == tag ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( MBEDTLS_ENCRYPT != ctx->operation ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( MBEDTLS_ENCRYPT != ctx->operation ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) return mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, tag, tag_len ); - return( 0 ); + return ( 0 ); } int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, - const unsigned char *tag, size_t tag_len ) + const unsigned char *tag, size_t tag_len ) { int ret; - if( NULL == ctx || NULL == ctx->cipher_info || - MBEDTLS_DECRYPT != ctx->operation ) - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( NULL == ctx || NULL == ctx->cipher_info || + MBEDTLS_DECRYPT != ctx->operation ) { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { unsigned char check_tag[16]; size_t i; int diff; - if( tag_len > sizeof( check_tag ) ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( tag_len > sizeof( check_tag ) ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( 0 != ( ret = mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, - check_tag, tag_len ) ) ) - { - return( ret ); + if ( 0 != ( ret = mbedtls_gcm_finish( (mbedtls_gcm_context *) ctx->cipher_ctx, + check_tag, tag_len ) ) ) { + return ( ret ); } /* Check the tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) + for ( diff = 0, i = 0; i < tag_len; i++ ) diff |= tag[i] ^ check_tag[i]; - if( diff != 0 ) - return( MBEDTLS_ERR_CIPHER_AUTH_FAILED ); + if ( diff != 0 ) + return ( MBEDTLS_ERR_CIPHER_AUTH_FAILED ); - return( 0 ); + return ( 0 ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_GCM_C */ @@ -810,28 +771,28 @@ int mbedtls_cipher_check_tag( mbedtls_cipher_context_t *ctx, * Packet-oriented wrapper for non-AEAD modes */ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen ) + const unsigned char *iv, size_t iv_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen ) { int ret; size_t finish_olen; - if( ( ret = mbedtls_cipher_set_iv( ctx, iv, iv_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_set_iv( ctx, iv, iv_len ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_reset( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_reset( ctx ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_update( ctx, input, ilen, output, olen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_update( ctx, input, ilen, output, olen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_finish( ctx, output + *olen, &finish_olen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_finish( ctx, output + *olen, &finish_olen ) ) != 0 ) + return ( ret ); *olen += finish_olen; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_AEAD) @@ -839,78 +800,74 @@ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx, * Packet-oriented encryption for AEAD modes */ int mbedtls_cipher_auth_encrypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + unsigned char *tag, size_t tag_len ) { #if defined(MBEDTLS_GCM_C) - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { *olen = ilen; - return( mbedtls_gcm_crypt_and_tag( ctx->cipher_ctx, MBEDTLS_GCM_ENCRYPT, ilen, - iv, iv_len, ad, ad_len, input, output, - tag_len, tag ) ); + return ( mbedtls_gcm_crypt_and_tag( ctx->cipher_ctx, MBEDTLS_GCM_ENCRYPT, ilen, + iv, iv_len, ad, ad_len, input, output, + tag_len, tag ) ); } #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CCM_C) - if( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) { *olen = ilen; - return( mbedtls_ccm_encrypt_and_tag( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, input, output, - tag, tag_len ) ); + return ( mbedtls_ccm_encrypt_and_tag( ctx->cipher_ctx, ilen, + iv, iv_len, ad, ad_len, input, output, + tag, tag_len ) ); } #endif /* MBEDTLS_CCM_C */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } /* * Packet-oriented decryption for AEAD modes */ int mbedtls_cipher_auth_decrypt( mbedtls_cipher_context_t *ctx, - const unsigned char *iv, size_t iv_len, - const unsigned char *ad, size_t ad_len, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, - const unsigned char *tag, size_t tag_len ) + const unsigned char *iv, size_t iv_len, + const unsigned char *ad, size_t ad_len, + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, + const unsigned char *tag, size_t tag_len ) { #if defined(MBEDTLS_GCM_C) - if( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_GCM == ctx->cipher_info->mode ) { int ret; *olen = ilen; ret = mbedtls_gcm_auth_decrypt( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, - tag, tag_len, input, output ); + iv, iv_len, ad, ad_len, + tag, tag_len, input, output ); - if( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ) + if ( ret == MBEDTLS_ERR_GCM_AUTH_FAILED ) ret = MBEDTLS_ERR_CIPHER_AUTH_FAILED; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CCM_C) - if( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) - { + if ( MBEDTLS_MODE_CCM == ctx->cipher_info->mode ) { int ret; *olen = ilen; ret = mbedtls_ccm_auth_decrypt( ctx->cipher_ctx, ilen, - iv, iv_len, ad, ad_len, - input, output, tag, tag_len ); + iv, iv_len, ad, ad_len, + input, output, tag, tag_len ); - if( ret == MBEDTLS_ERR_CCM_AUTH_FAILED ) + if ( ret == MBEDTLS_ERR_CCM_AUTH_FAILED ) ret = MBEDTLS_ERR_CIPHER_AUTH_FAILED; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_CCM_C */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } #endif /* MBEDTLS_CIPHER_MODE_AEAD */ diff --git a/external_libs/mbedtls/library/cipher_wrap.c b/external_libs/mbedtls/library/cipher_wrap.c index dc76af8..0871f6b 100644 --- a/external_libs/mbedtls/library/cipher_wrap.c +++ b/external_libs/mbedtls/library/cipher_wrap.c @@ -79,10 +79,10 @@ static void *gcm_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_gcm_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_gcm_init( (mbedtls_gcm_context *) ctx ); - return( ctx ); + return ( ctx ); } static void gcm_ctx_free( void *ctx ) @@ -98,10 +98,10 @@ static void *ccm_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ccm_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ccm_init( (mbedtls_ccm_context *) ctx ); - return( ctx ); + return ( ctx ); } static void ccm_ctx_free( void *ctx ) @@ -114,37 +114,37 @@ static void ccm_ctx_free( void *ctx ) #if defined(MBEDTLS_AES_C) static int aes_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_ecb( (mbedtls_aes_context *) ctx, operation, input, output ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) static int aes_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) + unsigned char *iv, const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_cbc( (mbedtls_aes_context *) ctx, operation, length, iv, input, - output ); + output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) static int aes_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, size_t *iv_off, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_cfb128( (mbedtls_aes_context *) ctx, operation, length, iv_off, iv, - input, output ); + input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) static int aes_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ) { return mbedtls_aes_crypt_ctr( (mbedtls_aes_context *) ctx, length, nc_off, nonce_counter, - stream_block, input, output ); + stream_block, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -164,12 +164,12 @@ static void * aes_ctx_alloc( void ) { mbedtls_aes_context *aes = mbedtls_calloc( 1, sizeof( mbedtls_aes_context ) ); - if( aes == NULL ) - return( NULL ); + if ( aes == NULL ) + return ( NULL ); mbedtls_aes_init( aes ); - return( aes ); + return ( aes ); } static void aes_ctx_free( void *ctx ) @@ -342,7 +342,7 @@ static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_AES, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t gcm_aes_info = { @@ -405,7 +405,7 @@ static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_AES, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t ccm_aes_info = { @@ -468,39 +468,39 @@ static const mbedtls_cipher_info_t aes_256_ccm_info = { #if defined(MBEDTLS_CAMELLIA_C) static int camellia_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_ecb( (mbedtls_camellia_context *) ctx, operation, input, - output ); + output ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) static int camellia_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_cbc( (mbedtls_camellia_context *) ctx, operation, length, iv, - input, output ); + input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) static int camellia_crypt_cfb128_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, size_t *iv_off, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_cfb128( (mbedtls_camellia_context *) ctx, operation, length, - iv_off, iv, input, output ); + iv_off, iv, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) static int camellia_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ) { return mbedtls_camellia_crypt_ctr( (mbedtls_camellia_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); + nonce_counter, stream_block, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -521,12 +521,12 @@ static void * camellia_ctx_alloc( void ) mbedtls_camellia_context *ctx; ctx = mbedtls_calloc( 1, sizeof( mbedtls_camellia_context ) ); - if( ctx == NULL ) - return( NULL ); + if ( ctx == NULL ) + return ( NULL ); mbedtls_camellia_init( ctx ); - return( ctx ); + return ( ctx ); } static void camellia_ctx_free( void *ctx ) @@ -699,7 +699,7 @@ static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_gcm_setkey( (mbedtls_gcm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t gcm_camellia_info = { @@ -762,7 +762,7 @@ static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { return mbedtls_ccm_setkey( (mbedtls_ccm_context *) ctx, MBEDTLS_CIPHER_ID_CAMELLIA, - key, key_bitlen ); + key, key_bitlen ); } static const mbedtls_cipher_base_t ccm_camellia_info = { @@ -825,14 +825,14 @@ static const mbedtls_cipher_info_t camellia_256_ccm_info = { #if defined(MBEDTLS_DES_C) static int des_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { ((void) operation); return mbedtls_des_crypt_ecb( (mbedtls_des_context *) ctx, input, output ); } static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { ((void) operation); return mbedtls_des3_crypt_ecb( (mbedtls_des3_context *) ctx, input, output ); @@ -840,19 +840,19 @@ static int des3_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, #if defined(MBEDTLS_CIPHER_MODE_CBC) static int des_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) + unsigned char *iv, const unsigned char *input, unsigned char *output ) { return mbedtls_des_crypt_cbc( (mbedtls_des_context *) ctx, operation, length, iv, input, - output ); + output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CBC) static int des3_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, size_t length, - unsigned char *iv, const unsigned char *input, unsigned char *output ) + unsigned char *iv, const unsigned char *input, unsigned char *output ) { return mbedtls_des3_crypt_cbc( (mbedtls_des3_context *) ctx, operation, length, iv, input, - output ); + output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -908,12 +908,12 @@ static void * des_ctx_alloc( void ) { mbedtls_des_context *des = mbedtls_calloc( 1, sizeof( mbedtls_des_context ) ); - if( des == NULL ) - return( NULL ); + if ( des == NULL ) + return ( NULL ); mbedtls_des_init( des ); - return( des ); + return ( des ); } static void des_ctx_free( void *ctx ) @@ -927,12 +927,12 @@ static void * des3_ctx_alloc( void ) mbedtls_des3_context *des3; des3 = mbedtls_calloc( 1, sizeof( mbedtls_des3_context ) ); - if( des3 == NULL ) - return( NULL ); + if ( des3 == NULL ) + return ( NULL ); mbedtls_des3_init( des3 ); - return( des3 ); + return ( des3 ); } static void des3_ctx_free( void *ctx ) @@ -1079,39 +1079,39 @@ static const mbedtls_cipher_info_t des_ede3_cbc_info = { #if defined(MBEDTLS_BLOWFISH_C) static int blowfish_crypt_ecb_wrap( void *ctx, mbedtls_operation_t operation, - const unsigned char *input, unsigned char *output ) + const unsigned char *input, unsigned char *output ) { return mbedtls_blowfish_crypt_ecb( (mbedtls_blowfish_context *) ctx, operation, input, - output ); + output ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) static int blowfish_crypt_cbc_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, unsigned char *iv, const unsigned char *input, - unsigned char *output ) + size_t length, unsigned char *iv, const unsigned char *input, + unsigned char *output ) { return mbedtls_blowfish_crypt_cbc( (mbedtls_blowfish_context *) ctx, operation, length, iv, - input, output ); + input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CIPHER_MODE_CFB) static int blowfish_crypt_cfb64_wrap( void *ctx, mbedtls_operation_t operation, - size_t length, size_t *iv_off, unsigned char *iv, - const unsigned char *input, unsigned char *output ) + size_t length, size_t *iv_off, unsigned char *iv, + const unsigned char *input, unsigned char *output ) { return mbedtls_blowfish_crypt_cfb64( (mbedtls_blowfish_context *) ctx, operation, length, - iv_off, iv, input, output ); + iv_off, iv, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CFB */ #if defined(MBEDTLS_CIPHER_MODE_CTR) static int blowfish_crypt_ctr_wrap( void *ctx, size_t length, size_t *nc_off, - unsigned char *nonce_counter, unsigned char *stream_block, - const unsigned char *input, unsigned char *output ) + unsigned char *nonce_counter, unsigned char *stream_block, + const unsigned char *input, unsigned char *output ) { return mbedtls_blowfish_crypt_ctr( (mbedtls_blowfish_context *) ctx, length, nc_off, - nonce_counter, stream_block, input, output ); + nonce_counter, stream_block, input, output ); } #endif /* MBEDTLS_CIPHER_MODE_CTR */ @@ -1126,12 +1126,12 @@ static void * blowfish_ctx_alloc( void ) mbedtls_blowfish_context *ctx; ctx = mbedtls_calloc( 1, sizeof( mbedtls_blowfish_context ) ); - if( ctx == NULL ) - return( NULL ); + if ( ctx == NULL ) + return ( NULL ); mbedtls_blowfish_init( ctx ); - return( ctx ); + return ( ctx ); } static void blowfish_ctx_free( void *ctx ) @@ -1217,18 +1217,18 @@ static int arc4_crypt_stream_wrap( void *ctx, size_t length, const unsigned char *input, unsigned char *output ) { - return( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) ); + return ( mbedtls_arc4_crypt( (mbedtls_arc4_context *) ctx, length, input, output ) ); } static int arc4_setkey_wrap( void *ctx, const unsigned char *key, unsigned int key_bitlen ) { /* we get key_bitlen in bits, arc4 expects it in bytes */ - if( key_bitlen % 8 != 0 ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( key_bitlen % 8 != 0 ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); mbedtls_arc4_setup( (mbedtls_arc4_context *) ctx, key, key_bitlen / 8 ); - return( 0 ); + return ( 0 ); } static void * arc4_ctx_alloc( void ) @@ -1236,12 +1236,12 @@ static void * arc4_ctx_alloc( void ) mbedtls_arc4_context *ctx; ctx = mbedtls_calloc( 1, sizeof( mbedtls_arc4_context ) ); - if( ctx == NULL ) - return( NULL ); + if ( ctx == NULL ) + return ( NULL ); mbedtls_arc4_init( ctx ); - return( ctx ); + return ( ctx ); } static void arc4_ctx_free( void *ctx ) @@ -1290,7 +1290,7 @@ static int null_crypt_stream( void *ctx, size_t length, { ((void) ctx); memmove( output, input, length ); - return( 0 ); + return ( 0 ); } static int null_setkey( void *ctx, const unsigned char *key, @@ -1300,12 +1300,12 @@ static int null_setkey( void *ctx, const unsigned char *key, ((void) key); ((void) key_bitlen); - return( 0 ); + return ( 0 ); } static void * null_ctx_alloc( void ) { - return( (void *) 1 ); + return ( (void *) 1 ); } static void null_ctx_free( void *ctx ) @@ -1346,8 +1346,7 @@ static const mbedtls_cipher_info_t null_cipher_info = { }; #endif /* defined(MBEDTLS_CIPHER_NULL_CIPHER) */ -const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = -{ +const mbedtls_cipher_definition_t mbedtls_cipher_definitions[] = { #if defined(MBEDTLS_AES_C) { MBEDTLS_CIPHER_AES_128_ECB, &aes_128_ecb_info }, { MBEDTLS_CIPHER_AES_192_ECB, &aes_192_ecb_info }, diff --git a/external_libs/mbedtls/library/cmac.c b/external_libs/mbedtls/library/cmac.c index ee2fe05..3bfd1e1 100644 --- a/external_libs/mbedtls/library/cmac.c +++ b/external_libs/mbedtls/library/cmac.c @@ -66,8 +66,10 @@ #endif /* MBEDTLS_PLATFORM_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -92,21 +94,15 @@ static int cmac_multiply_by_u( unsigned char *output, unsigned char overflow = 0x00; int i; - if( blocksize == MBEDTLS_AES_BLOCK_SIZE ) - { + if ( blocksize == MBEDTLS_AES_BLOCK_SIZE ) { R_n = R_128; - } - else if( blocksize == MBEDTLS_DES3_BLOCK_SIZE ) - { + } else if ( blocksize == MBEDTLS_DES3_BLOCK_SIZE ) { R_n = R_64; - } - else - { - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + } else { + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } - for( i = blocksize - 1; i >= 0; i-- ) - { + for ( i = blocksize - 1; i >= 0; i-- ) { output[i] = input[i] << 1 | overflow; overflow = input[i] >> 7; } @@ -127,7 +123,7 @@ static int cmac_multiply_by_u( unsigned char *output, output[ blocksize - 1 ] ^= R_n & mask; - return( 0 ); + return ( 0 ); } /* @@ -147,22 +143,22 @@ static int cmac_generate_subkeys( mbedtls_cipher_context_t *ctx, block_size = ctx->cipher_info->block_size; /* Calculate Ek(0) */ - if( ( ret = mbedtls_cipher_update( ctx, L, block_size, L, &olen ) ) != 0 ) + if ( ( ret = mbedtls_cipher_update( ctx, L, block_size, L, &olen ) ) != 0 ) goto exit; /* * Generate K1 and K2 */ - if( ( ret = cmac_multiply_by_u( K1, L , block_size ) ) != 0 ) + if ( ( ret = cmac_multiply_by_u( K1, L, block_size ) ) != 0 ) goto exit; - if( ( ret = cmac_multiply_by_u( K2, K1 , block_size ) ) != 0 ) + if ( ( ret = cmac_multiply_by_u( K2, K1, block_size ) ) != 0 ) goto exit; exit: mbedtls_zeroize( L, sizeof( L ) ); - return( ret ); + return ( ret ); } static void cmac_xor_block( unsigned char *output, const unsigned char *input1, @@ -171,7 +167,7 @@ static void cmac_xor_block( unsigned char *output, const unsigned char *input1, { size_t index; - for( index = 0; index < block_size; index++ ) + for ( index = 0; index < block_size; index++ ) output[ index ] = input1[ index ] ^ input2[ index ]; } @@ -188,11 +184,10 @@ static void cmac_pad( unsigned char padded_block[MBEDTLS_CIPHER_BLKSIZE_MAX], { size_t j; - for( j = 0; j < padded_block_len; j++ ) - { - if( j < last_block_len ) + for ( j = 0; j < padded_block_len; j++ ) { + if ( j < last_block_len ) padded_block[j] = last_block[j]; - else if( j == last_block_len ) + else if ( j == last_block_len ) padded_block[j] = 0x80; else padded_block[j] = 0x00; @@ -206,31 +201,30 @@ int mbedtls_cipher_cmac_starts( mbedtls_cipher_context_t *ctx, mbedtls_cmac_context_t *cmac_ctx; int retval; - if( ctx == NULL || ctx->cipher_info == NULL || key == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || key == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); - if( ( retval = mbedtls_cipher_setkey( ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - return( retval ); + if ( ( retval = mbedtls_cipher_setkey( ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) + return ( retval ); type = ctx->cipher_info->type; - switch( type ) - { + switch ( type ) { case MBEDTLS_CIPHER_AES_128_ECB: case MBEDTLS_CIPHER_AES_192_ECB: case MBEDTLS_CIPHER_AES_256_ECB: case MBEDTLS_CIPHER_DES_EDE3_ECB: break; default: - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); } /* Allocated and initialise in the cipher context memory for the CMAC * context */ cmac_ctx = mbedtls_calloc( 1, sizeof( mbedtls_cmac_context_t ) ); - if( cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); + if ( cmac_ctx == NULL ) + return ( MBEDTLS_ERR_CIPHER_ALLOC_FAILED ); ctx->cmac_ctx = cmac_ctx; @@ -247,9 +241,9 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, int n, j, ret = 0; size_t olen, block_size; - if( ctx == NULL || ctx->cipher_info == NULL || input == NULL || - ctx->cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || input == NULL || + ctx->cmac_ctx == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cmac_ctx = ctx->cmac_ctx; block_size = ctx->cipher_info->block_size; @@ -257,19 +251,17 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, /* Is there data still to process from the last call, that's greater in * size than a block? */ - if( cmac_ctx->unprocessed_len > 0 && - ilen > block_size - cmac_ctx->unprocessed_len ) - { + if ( cmac_ctx->unprocessed_len > 0 && + ilen > block_size - cmac_ctx->unprocessed_len ) { memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], input, block_size - cmac_ctx->unprocessed_len ); cmac_xor_block( state, cmac_ctx->unprocessed_block, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - { - goto exit; + if ( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, + &olen ) ) != 0 ) { + goto exit; } input += block_size - cmac_ctx->unprocessed_len; @@ -280,22 +272,20 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, /* n is the number of blocks including any final partial block */ n = ( ilen + block_size - 1 ) / block_size; - /* Iterate across the input data in block sized chunks */ - for( j = 0; j < n - 1; j++ ) - { + /* Iterate across the input data in block sized chunks */ + for ( j = 0; j < n - 1; j++ ) { cmac_xor_block( state, input, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - goto exit; + if ( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, + &olen ) ) != 0 ) + goto exit; ilen -= block_size; input += block_size; } /* If there is data left over that wasn't aligned to a block */ - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], input, ilen ); @@ -303,7 +293,7 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, } exit: - return( ret ); + return ( ret ); } int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, @@ -317,9 +307,9 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, int ret; size_t olen, block_size; - if( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL || - output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL || + output == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cmac_ctx = ctx->cmac_ctx; block_size = ctx->cipher_info->block_size; @@ -332,22 +322,18 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, last_block = cmac_ctx->unprocessed_block; /* Calculate last block */ - if( cmac_ctx->unprocessed_len < block_size ) - { + if ( cmac_ctx->unprocessed_len < block_size ) { cmac_pad( M_last, block_size, last_block, cmac_ctx->unprocessed_len ); cmac_xor_block( M_last, M_last, K2, block_size ); - } - else - { + } else { /* Last block is complete block */ cmac_xor_block( M_last, last_block, K1, block_size ); } cmac_xor_block( state, M_last, state, block_size ); - if( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, - &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_update( ctx, state, block_size, state, + &olen ) ) != 0 ) { goto exit; } @@ -364,15 +350,15 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, sizeof( cmac_ctx->unprocessed_block ) ); mbedtls_zeroize( state, MBEDTLS_CIPHER_BLKSIZE_MAX ); - return( ret ); + return ( ret ); } int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ) { mbedtls_cmac_context_t* cmac_ctx; - if( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->cipher_info == NULL || ctx->cmac_ctx == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cmac_ctx = ctx->cmac_ctx; @@ -383,7 +369,7 @@ int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ) mbedtls_zeroize( cmac_ctx->state, sizeof( cmac_ctx->state ) ); - return( 0 ); + return ( 0 ); } int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, @@ -394,20 +380,20 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, mbedtls_cipher_context_t ctx; int ret; - if( cipher_info == NULL || key == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( cipher_info == NULL || key == NULL || input == NULL || output == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); mbedtls_cipher_init( &ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) goto exit; ret = mbedtls_cipher_cmac_starts( &ctx, key, keylen ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; ret = mbedtls_cipher_cmac_update( &ctx, input, ilen ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; ret = mbedtls_cipher_cmac_finish( &ctx, output ); @@ -415,7 +401,7 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info, exit: mbedtls_cipher_free( &ctx ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_AES_C) @@ -431,29 +417,25 @@ int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length, unsigned char zero_key[MBEDTLS_AES_BLOCK_SIZE]; unsigned char int_key[MBEDTLS_AES_BLOCK_SIZE]; - if( key == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); + if ( key == NULL || input == NULL || output == NULL ) + return ( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA ); cipher_info = mbedtls_cipher_info_from_type( MBEDTLS_CIPHER_AES_128_ECB ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { /* Failing at this point must be due to a build issue */ ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; goto exit; } - if( key_length == MBEDTLS_AES_BLOCK_SIZE ) - { + if ( key_length == MBEDTLS_AES_BLOCK_SIZE ) { /* Use key as is */ memcpy( int_key, key, MBEDTLS_AES_BLOCK_SIZE ); - } - else - { + } else { memset( zero_key, 0, MBEDTLS_AES_BLOCK_SIZE ); ret = mbedtls_cipher_cmac( cipher_info, zero_key, 128, key, key_length, int_key ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; } @@ -463,7 +445,7 @@ int mbedtls_aes_cmac_prf_128( const unsigned char *key, size_t key_length, exit: mbedtls_zeroize( int_key, sizeof( int_key ) ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_AES_C */ @@ -731,55 +713,49 @@ static int cmac_test_subkeys( int verbose, unsigned char K2[MBEDTLS_CIPHER_BLKSIZE_MAX]; cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { /* Failing at this point must be due to a build issue */ - return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } - for( i = 0; i < num_tests; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < num_tests; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " %s CMAC subkey #%u: ", testname, i + 1 ); mbedtls_cipher_init( &ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "test execution failed\n" ); goto cleanup; } - if( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "test execution failed\n" ); goto cleanup; } ret = cmac_generate_subkeys( &ctx, K1, K2 ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto cleanup; } - if( ( ret = memcmp( K1, subkeys, block_size ) ) != 0 || - ( ret = memcmp( K2, &subkeys[block_size], block_size ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = memcmp( K1, subkeys, block_size ) ) != 0 || + ( ret = memcmp( K2, &subkeys[block_size], block_size ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto cleanup; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); mbedtls_cipher_free( &ctx ); @@ -791,7 +767,7 @@ static int cmac_test_subkeys( int verbose, mbedtls_cipher_free( &ctx ); exit: - return( ret ); + return ( ret ); } static int cmac_test_wth_cipher( int verbose, @@ -810,39 +786,35 @@ static int cmac_test_wth_cipher( int verbose, unsigned char output[MBEDTLS_CIPHER_BLKSIZE_MAX]; cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { /* Failing at this point must be due to a build issue */ ret = MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE; goto exit; } - for( i = 0; i < num_tests; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < num_tests; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " %s CMAC #%u: ", testname, i + 1 ); - if( ( ret = mbedtls_cipher_cmac( cipher_info, key, keybits, messages, - message_lengths[i], output ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_cipher_cmac( cipher_info, key, keybits, messages, + message_lengths[i], output ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto exit; } - if( ( ret = memcmp( output, &expected_result[i * block_size], block_size ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = memcmp( output, &expected_result[i * block_size], block_size ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } exit: - return( ret ); + return ( ret ); } #if defined(MBEDTLS_AES_C) @@ -852,25 +824,21 @@ static int test_aes128_cmac_prf( int verbose ) int ret; unsigned char output[MBEDTLS_AES_BLOCK_SIZE]; - for( i = 0; i < NB_PRF_TESTS; i++ ) - { + for ( i = 0; i < NB_PRF_TESTS; i++ ) { mbedtls_printf( " AES CMAC 128 PRF #%u: ", i ); ret = mbedtls_aes_cmac_prf_128( PRFK, PRFKlen[i], PRFM, 20, output ); - if( ret != 0 || - memcmp( output, PRFT[i], MBEDTLS_AES_BLOCK_SIZE ) != 0 ) - { + if ( ret != 0 || + memcmp( output, PRFT[i], MBEDTLS_AES_BLOCK_SIZE ) != 0 ) { - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); - } - else if( verbose != 0 ) - { + return ( ret ); + } else if ( verbose != 0 ) { mbedtls_printf( "passed\n" ); } } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_AES_C */ @@ -880,152 +848,142 @@ int mbedtls_cmac_self_test( int verbose ) #if defined(MBEDTLS_AES_C) /* AES-128 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 128", - aes_128_key, - 128, - (const unsigned char*)aes_128_subkeys, - MBEDTLS_CIPHER_AES_128_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "AES 128", - aes_128_key, - 128, - test_message, - aes_message_lengths, - (const unsigned char*)aes_128_expected_result, - MBEDTLS_CIPHER_AES_128_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "AES 128", + aes_128_key, + 128, + (const unsigned char*)aes_128_subkeys, + MBEDTLS_CIPHER_AES_128_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); + } + + if ( ( ret = cmac_test_wth_cipher( verbose, + "AES 128", + aes_128_key, + 128, + test_message, + aes_message_lengths, + (const unsigned char*)aes_128_expected_result, + MBEDTLS_CIPHER_AES_128_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } /* AES-192 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 192", - aes_192_key, - 192, - (const unsigned char*)aes_192_subkeys, - MBEDTLS_CIPHER_AES_192_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "AES 192", - aes_192_key, - 192, - test_message, - aes_message_lengths, - (const unsigned char*)aes_192_expected_result, - MBEDTLS_CIPHER_AES_192_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - /* AES-256 */ - if( ( ret = cmac_test_subkeys( verbose, - "AES 256", - aes_256_key, - 256, - (const unsigned char*)aes_256_subkeys, - MBEDTLS_CIPHER_AES_256_ECB, - MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher ( verbose, - "AES 256", - aes_256_key, - 256, + if ( ( ret = cmac_test_subkeys( verbose, + "AES 192", + aes_192_key, + 192, + (const unsigned char*)aes_192_subkeys, + MBEDTLS_CIPHER_AES_192_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); + } + + if ( ( ret = cmac_test_wth_cipher( verbose, + "AES 192", + aes_192_key, + 192, test_message, aes_message_lengths, - (const unsigned char*)aes_256_expected_result, - MBEDTLS_CIPHER_AES_256_ECB, + (const unsigned char*)aes_192_expected_result, + MBEDTLS_CIPHER_AES_192_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); + } + + /* AES-256 */ + if ( ( ret = cmac_test_subkeys( verbose, + "AES 256", + aes_256_key, + 256, + (const unsigned char*)aes_256_subkeys, + MBEDTLS_CIPHER_AES_256_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); + } + + if ( ( ret = cmac_test_wth_cipher ( verbose, + "AES 256", + aes_256_key, + 256, + test_message, + aes_message_lengths, + (const unsigned char*)aes_256_expected_result, + MBEDTLS_CIPHER_AES_256_ECB, + MBEDTLS_AES_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_DES_C) /* 3DES 2 key */ - if( ( ret = cmac_test_subkeys( verbose, - "3DES 2 key", - des3_2key_key, - 192, - (const unsigned char*)des3_2key_subkeys, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "3DES 2 key", - des3_2key_key, - 192, - test_message, - des3_message_lengths, - (const unsigned char*)des3_2key_expected_result, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "3DES 2 key", + des3_2key_key, + 192, + (const unsigned char*)des3_2key_subkeys, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); + } + + if ( ( ret = cmac_test_wth_cipher( verbose, + "3DES 2 key", + des3_2key_key, + 192, + test_message, + des3_message_lengths, + (const unsigned char*)des3_2key_expected_result, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } /* 3DES 3 key */ - if( ( ret = cmac_test_subkeys( verbose, - "3DES 3 key", - des3_3key_key, - 192, - (const unsigned char*)des3_3key_subkeys, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); - } - - if( ( ret = cmac_test_wth_cipher( verbose, - "3DES 3 key", - des3_3key_key, - 192, - test_message, - des3_message_lengths, - (const unsigned char*)des3_3key_expected_result, - MBEDTLS_CIPHER_DES_EDE3_ECB, - MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) ) != 0 ) - { - return( ret ); + if ( ( ret = cmac_test_subkeys( verbose, + "3DES 3 key", + des3_3key_key, + 192, + (const unsigned char*)des3_3key_subkeys, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); + } + + if ( ( ret = cmac_test_wth_cipher( verbose, + "3DES 3 key", + des3_3key_key, + 192, + test_message, + des3_message_lengths, + (const unsigned char*)des3_3key_expected_result, + MBEDTLS_CIPHER_DES_EDE3_ECB, + MBEDTLS_DES3_BLOCK_SIZE, + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { + return ( ret ); } #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( ( ret = test_aes128_cmac_prf( verbose ) ) != 0 ) - return( ret ); + if ( ( ret = test_aes128_cmac_prf( verbose ) ) != 0 ) + return ( ret ); #endif /* MBEDTLS_AES_C */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/ctr_drbg.c b/external_libs/mbedtls/library/ctr_drbg.c index 386f8ad..e0837ca 100644 --- a/external_libs/mbedtls/library/ctr_drbg.c +++ b/external_libs/mbedtls/library/ctr_drbg.c @@ -50,8 +50,10 @@ #endif /* MBEDTLS_SELF_TEST */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -71,12 +73,12 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx ) * NIST tests to succeed (which require known length fixed entropy) */ int mbedtls_ctr_drbg_seed_entropy_len( - mbedtls_ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len, - size_t entropy_len ) + mbedtls_ctr_drbg_context *ctx, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len, + size_t entropy_len ) { int ret; unsigned char key[MBEDTLS_CTR_DRBG_KEYSIZE]; @@ -96,25 +98,25 @@ int mbedtls_ctr_drbg_seed_entropy_len( */ mbedtls_aes_setkey_enc( &ctx->aes_ctx, key, MBEDTLS_CTR_DRBG_KEYBITS ); - if( ( ret = mbedtls_ctr_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ctr_drbg_reseed( ctx, custom, len ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ) { - return( mbedtls_ctr_drbg_seed_entropy_len( ctx, f_entropy, p_entropy, custom, len, - MBEDTLS_CTR_DRBG_ENTROPY_LEN ) ); + return ( mbedtls_ctr_drbg_seed_entropy_len( ctx, f_entropy, p_entropy, custom, len, + MBEDTLS_CTR_DRBG_ENTROPY_LEN ) ); } void mbedtls_ctr_drbg_free( mbedtls_ctr_drbg_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; #if defined(MBEDTLS_THREADING_C) @@ -152,8 +154,8 @@ static int block_cipher_df( unsigned char *output, int i, j; size_t buf_len, use_len; - if( data_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if ( data_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); memset( buf, 0, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT + MBEDTLS_CTR_DRBG_BLOCKSIZE + 16 ); mbedtls_aes_init( &aes_ctx ); @@ -177,7 +179,7 @@ static int block_cipher_df( unsigned char *output, buf_len = MBEDTLS_CTR_DRBG_BLOCKSIZE + 8 + data_len + 1; - for( i = 0; i < MBEDTLS_CTR_DRBG_KEYSIZE; i++ ) + for ( i = 0; i < MBEDTLS_CTR_DRBG_KEYSIZE; i++ ) key[i] = i; mbedtls_aes_setkey_enc( &aes_ctx, key, MBEDTLS_CTR_DRBG_KEYBITS ); @@ -185,15 +187,13 @@ static int block_cipher_df( unsigned char *output, /* * Reduce data to MBEDTLS_CTR_DRBG_SEEDLEN bytes of data */ - for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) - { + for ( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) { p = buf; memset( chain, 0, MBEDTLS_CTR_DRBG_BLOCKSIZE ); use_len = buf_len; - while( use_len > 0 ) - { - for( i = 0; i < MBEDTLS_CTR_DRBG_BLOCKSIZE; i++ ) + while ( use_len > 0 ) { + for ( i = 0; i < MBEDTLS_CTR_DRBG_BLOCKSIZE; i++ ) chain[i] ^= p[i]; p += MBEDTLS_CTR_DRBG_BLOCKSIZE; use_len -= ( use_len >= MBEDTLS_CTR_DRBG_BLOCKSIZE ) ? @@ -217,8 +217,7 @@ static int block_cipher_df( unsigned char *output, iv = tmp + MBEDTLS_CTR_DRBG_KEYSIZE; p = output; - for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) - { + for ( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) { mbedtls_aes_crypt_ecb( &aes_ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); memcpy( p, iv, MBEDTLS_CTR_DRBG_BLOCKSIZE ); p += MBEDTLS_CTR_DRBG_BLOCKSIZE; @@ -226,11 +225,11 @@ static int block_cipher_df( unsigned char *output, mbedtls_aes_free( &aes_ctx ); - return( 0 ); + return ( 0 ); } static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, - const unsigned char data[MBEDTLS_CTR_DRBG_SEEDLEN] ) + const unsigned char data[MBEDTLS_CTR_DRBG_SEEDLEN] ) { unsigned char tmp[MBEDTLS_CTR_DRBG_SEEDLEN]; unsigned char *p = tmp; @@ -238,13 +237,12 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, memset( tmp, 0, MBEDTLS_CTR_DRBG_SEEDLEN ); - for( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) - { + for ( j = 0; j < MBEDTLS_CTR_DRBG_SEEDLEN; j += MBEDTLS_CTR_DRBG_BLOCKSIZE ) { /* * Increase counter */ - for( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) + for ( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) + if ( ++ctx->counter[i - 1] != 0 ) break; /* @@ -255,7 +253,7 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, p += MBEDTLS_CTR_DRBG_BLOCKSIZE; } - for( i = 0; i < MBEDTLS_CTR_DRBG_SEEDLEN; i++ ) + for ( i = 0; i < MBEDTLS_CTR_DRBG_SEEDLEN; i++ ) tmp[i] ^= data[i]; /* @@ -264,19 +262,18 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx, mbedtls_aes_setkey_enc( &ctx->aes_ctx, tmp, MBEDTLS_CTR_DRBG_KEYBITS ); memcpy( ctx->counter, tmp + MBEDTLS_CTR_DRBG_KEYSIZE, MBEDTLS_CTR_DRBG_BLOCKSIZE ); - return( 0 ); + return ( 0 ); } void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) + const unsigned char *additional, size_t add_len ) { unsigned char add_input[MBEDTLS_CTR_DRBG_SEEDLEN]; - if( add_len > 0 ) - { + if ( add_len > 0 ) { /* MAX_INPUT would be more logical here, but we have to match * block_cipher_df()'s limits since we can't propagate errors */ - if( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + if ( add_len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) add_len = MBEDTLS_CTR_DRBG_MAX_SEED_INPUT; block_cipher_df( add_input, additional, add_len ); @@ -285,23 +282,22 @@ void mbedtls_ctr_drbg_update( mbedtls_ctr_drbg_context *ctx, } int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, - const unsigned char *additional, size_t len ) + const unsigned char *additional, size_t len ) { unsigned char seed[MBEDTLS_CTR_DRBG_MAX_SEED_INPUT]; size_t seedlen = 0; - if( ctx->entropy_len + len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if ( ctx->entropy_len + len > MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ) + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); memset( seed, 0, MBEDTLS_CTR_DRBG_MAX_SEED_INPUT ); /* * Gather entropy_len bytes of entropy to seed state */ - if( 0 != ctx->f_entropy( ctx->p_entropy, seed, - ctx->entropy_len ) ) - { - return( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); + if ( 0 != ctx->f_entropy( ctx->p_entropy, seed, + ctx->entropy_len ) ) { + return ( MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED ); } seedlen += ctx->entropy_len; @@ -309,8 +305,7 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, /* * Add additional data */ - if( additional && len ) - { + if ( additional && len ) { memcpy( seed + seedlen, additional, len ); seedlen += len; } @@ -326,12 +321,12 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx, ctr_drbg_update_internal( ctx, seed ); ctx->reseed_counter = 1; - return( 0 ); + return ( 0 ); } int mbedtls_ctr_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t output_len, - const unsigned char *additional, size_t add_len ) + unsigned char *output, size_t output_len, + const unsigned char *additional, size_t add_len ) { int ret = 0; mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; @@ -341,36 +336,33 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, int i; size_t use_len; - if( output_len > MBEDTLS_CTR_DRBG_MAX_REQUEST ) - return( MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG ); + if ( output_len > MBEDTLS_CTR_DRBG_MAX_REQUEST ) + return ( MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG ); - if( add_len > MBEDTLS_CTR_DRBG_MAX_INPUT ) - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + if ( add_len > MBEDTLS_CTR_DRBG_MAX_INPUT ) + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); memset( add_input, 0, MBEDTLS_CTR_DRBG_SEEDLEN ); - if( ctx->reseed_counter > ctx->reseed_interval || - ctx->prediction_resistance ) - { - if( ( ret = mbedtls_ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); + if ( ctx->reseed_counter > ctx->reseed_interval || + ctx->prediction_resistance ) { + if ( ( ret = mbedtls_ctr_drbg_reseed( ctx, additional, add_len ) ) != 0 ) + return ( ret ); add_len = 0; } - if( add_len > 0 ) - { + if ( add_len > 0 ) { block_cipher_df( add_input, additional, add_len ); ctr_drbg_update_internal( ctx, add_input ); } - while( output_len > 0 ) - { + while ( output_len > 0 ) { /* * Increase counter */ - for( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) - if( ++ctx->counter[i - 1] != 0 ) + for ( i = MBEDTLS_CTR_DRBG_BLOCKSIZE; i > 0; i-- ) + if ( ++ctx->counter[i - 1] != 0 ) break; /* @@ -379,7 +371,7 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, mbedtls_aes_crypt_ecb( &ctx->aes_ctx, MBEDTLS_AES_ENCRYPT, ctx->counter, tmp ); use_len = ( output_len > MBEDTLS_CTR_DRBG_BLOCKSIZE ) ? MBEDTLS_CTR_DRBG_BLOCKSIZE : - output_len; + output_len; /* * Copy random block to destination */ @@ -392,7 +384,7 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng, ctx->reseed_counter++; - return( 0 ); + return ( 0 ); } int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_len ) @@ -401,18 +393,18 @@ int mbedtls_ctr_drbg_random( void *p_rng, unsigned char *output, size_t output_l mbedtls_ctr_drbg_context *ctx = (mbedtls_ctr_drbg_context *) p_rng; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = mbedtls_ctr_drbg_random_with_add( ctx, output, output_len, NULL, 0 ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_FS_IO) @@ -422,14 +414,13 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char FILE *f; unsigned char buf[ MBEDTLS_CTR_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "wb" ) ) == NULL ) + return ( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); - if( ( ret = mbedtls_ctr_drbg_random( ctx, buf, MBEDTLS_CTR_DRBG_MAX_INPUT ) ) != 0 ) + if ( ( ret = mbedtls_ctr_drbg_random( ctx, buf, MBEDTLS_CTR_DRBG_MAX_INPUT ) ) != 0 ) goto exit; - if( fwrite( buf, 1, MBEDTLS_CTR_DRBG_MAX_INPUT, f ) != MBEDTLS_CTR_DRBG_MAX_INPUT ) - { + if ( fwrite( buf, 1, MBEDTLS_CTR_DRBG_MAX_INPUT, f ) != MBEDTLS_CTR_DRBG_MAX_INPUT ) { ret = MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR; goto exit; } @@ -438,7 +429,7 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char exit: fclose( f ); - return( ret ); + return ( ret ); } int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char *path ) @@ -447,74 +438,78 @@ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char size_t n; unsigned char buf[ MBEDTLS_CTR_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); n = (size_t) ftell( f ); fseek( f, 0, SEEK_SET ); - if( n > MBEDTLS_CTR_DRBG_MAX_INPUT ) - { + if ( n > MBEDTLS_CTR_DRBG_MAX_INPUT ) { fclose( f ); - return( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); + return ( MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG ); } - if( fread( buf, 1, n, f ) != n ) - { + if ( fread( buf, 1, n, f ) != n ) { fclose( f ); - return( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR ); } fclose( f ); mbedtls_ctr_drbg_update( ctx, buf, n ); - return( mbedtls_ctr_drbg_write_seed_file( ctx, path ) ); + return ( mbedtls_ctr_drbg_write_seed_file( ctx, path ) ); } #endif /* MBEDTLS_FS_IO */ #if defined(MBEDTLS_SELF_TEST) -static const unsigned char entropy_source_pr[96] = - { 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, - 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, - 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, - 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, - 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, - 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, - 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, - 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, - 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, - 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, - 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, - 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 }; - -static const unsigned char entropy_source_nopr[64] = - { 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, - 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, - 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, - 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, - 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, - 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, - 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, - 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e }; - -static const unsigned char nonce_pers_pr[16] = - { 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, - 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c }; - -static const unsigned char nonce_pers_nopr[16] = - { 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, - 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f }; - -static const unsigned char result_pr[16] = - { 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, - 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 }; - -static const unsigned char result_nopr[16] = - { 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, - 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f }; +static const unsigned char entropy_source_pr[96] = { + 0xc1, 0x80, 0x81, 0xa6, 0x5d, 0x44, 0x02, 0x16, + 0x19, 0xb3, 0xf1, 0x80, 0xb1, 0xc9, 0x20, 0x02, + 0x6a, 0x54, 0x6f, 0x0c, 0x70, 0x81, 0x49, 0x8b, + 0x6e, 0xa6, 0x62, 0x52, 0x6d, 0x51, 0xb1, 0xcb, + 0x58, 0x3b, 0xfa, 0xd5, 0x37, 0x5f, 0xfb, 0xc9, + 0xff, 0x46, 0xd2, 0x19, 0xc7, 0x22, 0x3e, 0x95, + 0x45, 0x9d, 0x82, 0xe1, 0xe7, 0x22, 0x9f, 0x63, + 0x31, 0x69, 0xd2, 0x6b, 0x57, 0x47, 0x4f, 0xa3, + 0x37, 0xc9, 0x98, 0x1c, 0x0b, 0xfb, 0x91, 0x31, + 0x4d, 0x55, 0xb9, 0xe9, 0x1c, 0x5a, 0x5e, 0xe4, + 0x93, 0x92, 0xcf, 0xc5, 0x23, 0x12, 0xd5, 0x56, + 0x2c, 0x4a, 0x6e, 0xff, 0xdc, 0x10, 0xd0, 0x68 +}; + +static const unsigned char entropy_source_nopr[64] = { + 0x5a, 0x19, 0x4d, 0x5e, 0x2b, 0x31, 0x58, 0x14, + 0x54, 0xde, 0xf6, 0x75, 0xfb, 0x79, 0x58, 0xfe, + 0xc7, 0xdb, 0x87, 0x3e, 0x56, 0x89, 0xfc, 0x9d, + 0x03, 0x21, 0x7c, 0x68, 0xd8, 0x03, 0x38, 0x20, + 0xf9, 0xe6, 0x5e, 0x04, 0xd8, 0x56, 0xf3, 0xa9, + 0xc4, 0x4a, 0x4c, 0xbd, 0xc1, 0xd0, 0x08, 0x46, + 0xf5, 0x98, 0x3d, 0x77, 0x1c, 0x1b, 0x13, 0x7e, + 0x4e, 0x0f, 0x9d, 0x8e, 0xf4, 0x09, 0xf9, 0x2e +}; + +static const unsigned char nonce_pers_pr[16] = { + 0xd2, 0x54, 0xfc, 0xff, 0x02, 0x1e, 0x69, 0xd2, + 0x29, 0xc9, 0xcf, 0xad, 0x85, 0xfa, 0x48, 0x6c +}; + +static const unsigned char nonce_pers_nopr[16] = { + 0x1b, 0x54, 0xb8, 0xff, 0x06, 0x42, 0xbf, 0xf5, + 0x21, 0xf1, 0x5c, 0x1c, 0x0b, 0x66, 0x5f, 0x3f +}; + +static const unsigned char result_pr[16] = { + 0x34, 0x01, 0x16, 0x56, 0xb4, 0x29, 0x00, 0x8f, + 0x35, 0x63, 0xec, 0xb5, 0xf2, 0x59, 0x07, 0x23 +}; + +static const unsigned char result_nopr[16] = { + 0xa0, 0x54, 0x30, 0x3d, 0x8a, 0x7e, 0xa9, 0x88, + 0x9d, 0x90, 0x3e, 0x07, 0x7c, 0x6f, 0x21, 0x8f +}; static size_t test_offset; static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, @@ -523,7 +518,7 @@ static int ctr_drbg_self_test_entropy( void *data, unsigned char *buf, const unsigned char *p = data; memcpy( buf, p + test_offset, len ); test_offset += len; - return( 0 ); + return ( 0 ); } #define CHK( c ) if( (c) != 0 ) \ @@ -546,12 +541,12 @@ int mbedtls_ctr_drbg_self_test( int verbose ) /* * Based on a NIST CTR_DRBG test vector (PR = True) */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CTR_DRBG (PR = TRUE) : " ); test_offset = 0; CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy, - (void *) entropy_source_pr, nonce_pers_pr, 16, 32 ) ); + (void *) entropy_source_pr, nonce_pers_pr, 16, 32 ) ); mbedtls_ctr_drbg_set_prediction_resistance( &ctx, MBEDTLS_CTR_DRBG_PR_ON ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, MBEDTLS_CTR_DRBG_BLOCKSIZE ) ); @@ -559,20 +554,20 @@ int mbedtls_ctr_drbg_self_test( int verbose ) mbedtls_ctr_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); /* * Based on a NIST CTR_DRBG test vector (PR = FALSE) */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " CTR_DRBG (PR = FALSE): " ); mbedtls_ctr_drbg_init( &ctx ); test_offset = 0; CHK( mbedtls_ctr_drbg_seed_entropy_len( &ctx, ctr_drbg_self_test_entropy, - (void *) entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); + (void *) entropy_source_nopr, nonce_pers_nopr, 16, 32 ) ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) ); CHK( mbedtls_ctr_drbg_reseed( &ctx, NULL, 0 ) ); CHK( mbedtls_ctr_drbg_random( &ctx, buf, 16 ) ); @@ -580,13 +575,13 @@ int mbedtls_ctr_drbg_self_test( int verbose ) mbedtls_ctr_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) - mbedtls_printf( "\n" ); + if ( verbose != 0 ) + mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/debug.c b/external_libs/mbedtls/library/debug.c index a9cd814..8f29902 100644 --- a/external_libs/mbedtls/library/debug.c +++ b/external_libs/mbedtls/library/debug.c @@ -86,7 +86,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, char str[DEBUG_BUF_SIZE]; int ret; - if( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || level > debug_threshold ) + if ( NULL == ssl || NULL == ssl->conf || NULL == ssl->conf->f_dbg || level > debug_threshold ) return; va_start( argp, format ); @@ -95,9 +95,8 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, ret = _vsnprintf_s( str, DEBUG_BUF_SIZE, _TRUNCATE, format, argp ); #else ret = _vsnprintf( str, DEBUG_BUF_SIZE, format, argp ); - if( ret < 0 || (size_t) ret == DEBUG_BUF_SIZE ) - { - str[DEBUG_BUF_SIZE-1] = '\0'; + if ( ret < 0 || (size_t) ret == DEBUG_BUF_SIZE ) { + str[DEBUG_BUF_SIZE - 1] = '\0'; ret = -1; } #endif @@ -106,8 +105,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, #endif va_end( argp ); - if( ret >= 0 && ret < DEBUG_BUF_SIZE - 1 ) - { + if ( ret >= 0 && ret < DEBUG_BUF_SIZE - 1 ) { str[ret] = '\n'; str[ret + 1] = '\0'; } @@ -116,12 +114,12 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level, } void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, int ret ) + const char *file, int line, + const char *text, int ret ) { char str[DEBUG_BUF_SIZE]; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; /* @@ -129,42 +127,39 @@ void mbedtls_debug_print_ret( const mbedtls_ssl_context *ssl, int level, * the logs would be quickly flooded with WANT_READ, so ignore that. * Don't ignore WANT_WRITE however, since is is usually rare. */ - if( ret == MBEDTLS_ERR_SSL_WANT_READ ) + if ( ret == MBEDTLS_ERR_SSL_WANT_READ ) return; mbedtls_snprintf( str, sizeof( str ), "%s() returned %d (-0x%04x)\n", - text, ret, -ret ); + text, ret, -ret ); debug_send_line( ssl, level, file, line, str ); } void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, const char *text, - const unsigned char *buf, size_t len ) + const char *file, int line, const char *text, + const unsigned char *buf, size_t len ) { char str[DEBUG_BUF_SIZE]; char txt[17]; size_t i, idx = 0; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; mbedtls_snprintf( str + idx, sizeof( str ) - idx, "dumping '%s' (%u bytes)\n", - text, (unsigned int) len ); + text, (unsigned int) len ); debug_send_line( ssl, level, file, line, str ); idx = 0; memset( txt, 0, sizeof( txt ) ); - for( i = 0; i < len; i++ ) - { - if( i >= 4096 ) + for ( i = 0; i < len; i++ ) { + if ( i >= 4096 ) break; - if( i % 16 == 0 ) - { - if( i > 0 ) - { + if ( i % 16 == 0 ) { + if ( i > 0 ) { mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); debug_send_line( ssl, level, file, line, str ); @@ -173,18 +168,17 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, } idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, "%04x: ", - (unsigned int) i ); + (unsigned int) i ); } idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %02x", - (unsigned int) buf[i] ); + (unsigned int) buf[i] ); txt[i % 16] = ( buf[i] > 31 && buf[i] < 127 ) ? buf[i] : '.' ; } - if( len > 0 ) - { - for( /* i = i */; i % 16 != 0; i++ ) + if ( len > 0 ) { + for ( /* i = i */; i % 16 != 0; i++ ) idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " " ); mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %s\n", txt ); @@ -194,12 +188,12 @@ void mbedtls_debug_print_buf( const mbedtls_ssl_context *ssl, int level, #if defined(MBEDTLS_ECP_C) void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_ecp_point *X ) + const char *file, int line, + const char *text, const mbedtls_ecp_point *X ) { char str[DEBUG_BUF_SIZE]; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || level > debug_threshold ) return; mbedtls_snprintf( str, sizeof( str ), "%s(X)", text ); @@ -212,46 +206,42 @@ void mbedtls_debug_print_ecp( const mbedtls_ssl_context *ssl, int level, #if defined(MBEDTLS_BIGNUM_C) void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_mpi *X ) + const char *file, int line, + const char *text, const mbedtls_mpi *X ) { char str[DEBUG_BUF_SIZE]; int j, k, zeros = 1; size_t i, n, idx = 0; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || X == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || X == NULL || level > debug_threshold ) return; - for( n = X->n - 1; n > 0; n-- ) - if( X->p[n] != 0 ) + for ( n = X->n - 1; n > 0; n-- ) + if ( X->p[n] != 0 ) break; - for( j = ( sizeof(mbedtls_mpi_uint) << 3 ) - 1; j >= 0; j-- ) - if( ( ( X->p[n] >> j ) & 1 ) != 0 ) + for ( j = ( sizeof(mbedtls_mpi_uint) << 3 ) - 1; j >= 0; j-- ) + if ( ( ( X->p[n] >> j ) & 1 ) != 0 ) break; mbedtls_snprintf( str + idx, sizeof( str ) - idx, "value of '%s' (%d bits) is:\n", - text, (int) ( ( n * ( sizeof(mbedtls_mpi_uint) << 3 ) ) + j + 1 ) ); + text, (int) ( ( n * ( sizeof(mbedtls_mpi_uint) << 3 ) ) + j + 1 ) ); debug_send_line( ssl, level, file, line, str ); idx = 0; - for( i = n + 1, j = 0; i > 0; i-- ) - { - if( zeros && X->p[i - 1] == 0 ) + for ( i = n + 1, j = 0; i > 0; i-- ) { + if ( zeros && X->p[i - 1] == 0 ) continue; - for( k = sizeof( mbedtls_mpi_uint ) - 1; k >= 0; k-- ) - { - if( zeros && ( ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ) == 0 ) + for ( k = sizeof( mbedtls_mpi_uint ) - 1; k >= 0; k-- ) { + if ( zeros && ( ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ) == 0 ) continue; else zeros = 0; - if( j % 16 == 0 ) - { - if( j > 0 ) - { + if ( j % 16 == 0 ) { + if ( j > 0 ) { mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); debug_send_line( ssl, level, file, line, str ); idx = 0; @@ -259,14 +249,14 @@ void mbedtls_debug_print_mpi( const mbedtls_ssl_context *ssl, int level, } idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " %02x", (unsigned int) - ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ); + ( X->p[i - 1] >> ( k << 3 ) ) & 0xFF ); j++; } } - if( zeros == 1 ) + if ( zeros == 1 ) idx += mbedtls_snprintf( str + idx, sizeof( str ) - idx, " 00" ); mbedtls_snprintf( str + idx, sizeof( str ) - idx, "\n" ); @@ -285,31 +275,29 @@ static void debug_print_pk( const mbedtls_ssl_context *ssl, int level, memset( items, 0, sizeof( items ) ); - if( mbedtls_pk_debug( pk, items ) != 0 ) - { + if ( mbedtls_pk_debug( pk, items ) != 0 ) { debug_send_line( ssl, level, file, line, - "invalid PK context\n" ); + "invalid PK context\n" ); return; } - for( i = 0; i < MBEDTLS_PK_DEBUG_MAX_ITEMS; i++ ) - { - if( items[i].type == MBEDTLS_PK_DEBUG_NONE ) + for ( i = 0; i < MBEDTLS_PK_DEBUG_MAX_ITEMS; i++ ) { + if ( items[i].type == MBEDTLS_PK_DEBUG_NONE ) return; mbedtls_snprintf( name, sizeof( name ), "%s%s", text, items[i].name ); name[sizeof( name ) - 1] = '\0'; - if( items[i].type == MBEDTLS_PK_DEBUG_MPI ) + if ( items[i].type == MBEDTLS_PK_DEBUG_MPI ) mbedtls_debug_print_mpi( ssl, level, file, line, name, items[i].value ); else #if defined(MBEDTLS_ECP_C) - if( items[i].type == MBEDTLS_PK_DEBUG_ECP ) - mbedtls_debug_print_ecp( ssl, level, file, line, name, items[i].value ); - else + if ( items[i].type == MBEDTLS_PK_DEBUG_ECP ) + mbedtls_debug_print_ecp( ssl, level, file, line, name, items[i].value ); + else #endif - debug_send_line( ssl, level, file, line, - "should not happen\n" ); + debug_send_line( ssl, level, file, line, + "should not happen\n" ); } } @@ -320,12 +308,10 @@ static void debug_print_line_by_line( const mbedtls_ssl_context *ssl, int level, const char *start, *cur; start = text; - for( cur = text; *cur != '\0'; cur++ ) - { - if( *cur == '\n' ) - { + for ( cur = text; *cur != '\0'; cur++ ) { + if ( *cur == '\n' ) { size_t len = cur - start + 1; - if( len > DEBUG_BUF_SIZE - 1 ) + if ( len > DEBUG_BUF_SIZE - 1 ) len = DEBUG_BUF_SIZE - 1; memcpy( str, start, len ); @@ -339,17 +325,16 @@ static void debug_print_line_by_line( const mbedtls_ssl_context *ssl, int level, } void mbedtls_debug_print_crt( const mbedtls_ssl_context *ssl, int level, - const char *file, int line, - const char *text, const mbedtls_x509_crt *crt ) + const char *file, int line, + const char *text, const mbedtls_x509_crt *crt ) { char str[DEBUG_BUF_SIZE]; int i = 0; - if( ssl->conf == NULL || ssl->conf->f_dbg == NULL || crt == NULL || level > debug_threshold ) + if ( ssl->conf == NULL || ssl->conf->f_dbg == NULL || crt == NULL || level > debug_threshold ) return; - while( crt != NULL ) - { + while ( crt != NULL ) { char buf[1024]; mbedtls_snprintf( str, sizeof( str ), "%s #%d:\n", text, ++i ); diff --git a/external_libs/mbedtls/library/des.c b/external_libs/mbedtls/library/des.c index 09f95cf..8b8fec0 100644 --- a/external_libs/mbedtls/library/des.c +++ b/external_libs/mbedtls/library/des.c @@ -49,8 +49,10 @@ #if !defined(MBEDTLS_DES_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -79,8 +81,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { /* * Expanded DES S-boxes */ -static const uint32_t SB1[64] = -{ +static const uint32_t SB1[64] = { 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, @@ -99,8 +100,7 @@ static const uint32_t SB1[64] = 0x00010004, 0x00010400, 0x00000000, 0x01010004 }; -static const uint32_t SB2[64] = -{ +static const uint32_t SB2[64] = { 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, @@ -119,8 +119,7 @@ static const uint32_t SB2[64] = 0x80000000, 0x80100020, 0x80108020, 0x00108000 }; -static const uint32_t SB3[64] = -{ +static const uint32_t SB3[64] = { 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, @@ -139,8 +138,7 @@ static const uint32_t SB3[64] = 0x00020208, 0x00000008, 0x08020008, 0x00020200 }; -static const uint32_t SB4[64] = -{ +static const uint32_t SB4[64] = { 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, @@ -159,8 +157,7 @@ static const uint32_t SB4[64] = 0x00000080, 0x00800000, 0x00002000, 0x00802080 }; -static const uint32_t SB5[64] = -{ +static const uint32_t SB5[64] = { 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, @@ -179,8 +176,7 @@ static const uint32_t SB5[64] = 0x00000000, 0x40080000, 0x02080100, 0x40000100 }; -static const uint32_t SB6[64] = -{ +static const uint32_t SB6[64] = { 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, @@ -199,8 +195,7 @@ static const uint32_t SB6[64] = 0x20404000, 0x20000000, 0x00400010, 0x20004010 }; -static const uint32_t SB7[64] = -{ +static const uint32_t SB7[64] = { 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, @@ -219,8 +214,7 @@ static const uint32_t SB7[64] = 0x04000002, 0x04000800, 0x00000800, 0x00200002 }; -static const uint32_t SB8[64] = -{ +static const uint32_t SB8[64] = { 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, @@ -242,16 +236,14 @@ static const uint32_t SB8[64] = /* * PC1: left and right halves bit-swap */ -static const uint32_t LHs[16] = -{ +static const uint32_t LHs[16] = { 0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001, 0x00010100, 0x00010101, 0x01000000, 0x01000001, 0x01000100, 0x01000101, 0x01010000, 0x01010001, 0x01010100, 0x01010101 }; -static const uint32_t RHs[16] = -{ +static const uint32_t RHs[16] = { 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001, 0x00010001, 0x01010001, @@ -313,7 +305,7 @@ void mbedtls_des_init( mbedtls_des_context *ctx ) void mbedtls_des_free( mbedtls_des_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_des_context ) ); @@ -326,28 +318,29 @@ void mbedtls_des3_init( mbedtls_des3_context *ctx ) void mbedtls_des3_free( mbedtls_des3_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_des3_context ) ); } static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, - 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, - 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, - 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, - 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, - 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, - 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, - 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, - 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, - 254 }; + 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, + 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, + 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, + 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, + 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, + 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, + 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, + 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, + 254 + }; void mbedtls_des_key_set_parity( unsigned char key[MBEDTLS_DES_KEY_SIZE] ) { int i; - for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + for ( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) key[i] = odd_parity_table[key[i] / 2]; } @@ -358,11 +351,11 @@ int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SI { int i; - for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) - if( key[i] != odd_parity_table[key[i] / 2] ) - return( 1 ); + for ( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + if ( key[i] != odd_parity_table[key[i] / 2] ) + return ( 1 ); - return( 0 ); + return ( 0 ); } /* @@ -388,8 +381,7 @@ int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SI #define WEAK_KEY_COUNT 16 -static const unsigned char weak_key_table[WEAK_KEY_COUNT][MBEDTLS_DES_KEY_SIZE] = -{ +static const unsigned char weak_key_table[WEAK_KEY_COUNT][MBEDTLS_DES_KEY_SIZE] = { { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, @@ -413,11 +405,11 @@ int mbedtls_des_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) { int i; - for( i = 0; i < WEAK_KEY_COUNT; i++ ) - if( memcmp( weak_key_table[i], key, MBEDTLS_DES_KEY_SIZE) == 0 ) - return( 1 ); + for ( i = 0; i < WEAK_KEY_COUNT; i++ ) + if ( memcmp( weak_key_table[i], key, MBEDTLS_DES_KEY_SIZE) == 0 ) + return ( 1 ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_DES_SETKEY_ALT) @@ -432,18 +424,22 @@ void mbedtls_des_setkey( uint32_t SK[32], const unsigned char key[MBEDTLS_DES_KE /* * Permuted Choice 1 */ - T = ((Y >> 4) ^ X) & 0x0F0F0F0F; X ^= T; Y ^= (T << 4); - T = ((Y ) ^ X) & 0x10101010; X ^= T; Y ^= (T ); + T = ((Y >> 4) ^ X) & 0x0F0F0F0F; + X ^= T; + Y ^= (T << 4); + T = ((Y ) ^ X) & 0x10101010; + X ^= T; + Y ^= (T ); X = (LHs[ (X ) & 0xF] << 3) | (LHs[ (X >> 8) & 0xF ] << 2) - | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) - | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) - | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); + | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) + | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) + | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); Y = (RHs[ (Y >> 1) & 0xF] << 3) | (RHs[ (Y >> 9) & 0xF ] << 2) - | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) - | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) - | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); + | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) + | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) + | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); X &= 0x0FFFFFFF; Y &= 0x0FFFFFFF; @@ -451,42 +447,38 @@ void mbedtls_des_setkey( uint32_t SK[32], const unsigned char key[MBEDTLS_DES_KE /* * calculate subkeys */ - for( i = 0; i < 16; i++ ) - { - if( i < 2 || i == 8 || i == 15 ) - { + for ( i = 0; i < 16; i++ ) { + if ( i < 2 || i == 8 || i == 15 ) { X = ((X << 1) | (X >> 27)) & 0x0FFFFFFF; Y = ((Y << 1) | (Y >> 27)) & 0x0FFFFFFF; - } - else - { + } else { X = ((X << 2) | (X >> 26)) & 0x0FFFFFFF; Y = ((Y << 2) | (Y >> 26)) & 0x0FFFFFFF; } *SK++ = ((X << 4) & 0x24000000) | ((X << 28) & 0x10000000) - | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) - | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) - | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) - | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) - | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) - | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) - | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) - | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) - | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) - | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); + | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) + | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) + | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) + | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) + | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) + | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) + | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) + | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) + | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) + | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); *SK++ = ((X << 15) & 0x20000000) | ((X << 17) & 0x10000000) - | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) - | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) - | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) - | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) - | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) - | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) - | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) - | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) - | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) - | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); + | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) + | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) + | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) + | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) + | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) + | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) + | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) + | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) + | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) + | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); } } #endif /* !MBEDTLS_DES_SETKEY_ALT */ @@ -498,7 +490,7 @@ int mbedtls_des_setkey_enc( mbedtls_des_context *ctx, const unsigned char key[MB { mbedtls_des_setkey( ctx->sk, key ); - return( 0 ); + return ( 0 ); } /* @@ -510,26 +502,24 @@ int mbedtls_des_setkey_dec( mbedtls_des_context *ctx, const unsigned char key[MB mbedtls_des_setkey( ctx->sk, key ); - for( i = 0; i < 16; i += 2 ) - { + for ( i = 0; i < 16; i += 2 ) { SWAP( ctx->sk[i ], ctx->sk[30 - i] ); SWAP( ctx->sk[i + 1], ctx->sk[31 - i] ); } - return( 0 ); + return ( 0 ); } static void des3_set2key( uint32_t esk[96], uint32_t dsk[96], - const unsigned char key[MBEDTLS_DES_KEY_SIZE*2] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) { int i; mbedtls_des_setkey( esk, key ); mbedtls_des_setkey( dsk + 32, key + 8 ); - for( i = 0; i < 32; i += 2 ) - { + for ( i = 0; i < 32; i += 2 ) { dsk[i ] = esk[30 - i]; dsk[i + 1] = esk[31 - i]; @@ -548,28 +538,28 @@ static void des3_set2key( uint32_t esk[96], * Triple-DES key schedule (112-bit, encryption) */ int mbedtls_des3_set2key_enc( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) { uint32_t sk[96]; des3_set2key( ctx->sk, sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } /* * Triple-DES key schedule (112-bit, decryption) */ int mbedtls_des3_set2key_dec( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) { uint32_t sk[96]; des3_set2key( sk, ctx->sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } static void des3_set3key( uint32_t esk[96], @@ -582,8 +572,7 @@ static void des3_set3key( uint32_t esk[96], mbedtls_des_setkey( dsk + 32, key + 8 ); mbedtls_des_setkey( esk + 64, key + 16 ); - for( i = 0; i < 32; i += 2 ) - { + for ( i = 0; i < 32; i += 2 ) { dsk[i ] = esk[94 - i]; dsk[i + 1] = esk[95 - i]; @@ -599,28 +588,28 @@ static void des3_set3key( uint32_t esk[96], * Triple-DES key schedule (168-bit, encryption) */ int mbedtls_des3_set3key_enc( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) { uint32_t sk[96]; des3_set3key( ctx->sk, sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } /* * Triple-DES key schedule (168-bit, decryption) */ int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, - const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) { uint32_t sk[96]; des3_set3key( sk, ctx->sk, key ); mbedtls_zeroize( sk, sizeof( sk ) ); - return( 0 ); + return ( 0 ); } /* @@ -628,8 +617,8 @@ int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, */ #if !defined(MBEDTLS_DES_CRYPT_ECB_ALT) int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) + const unsigned char input[8], + unsigned char output[8] ) { int i; uint32_t X, Y, T, *SK; @@ -641,8 +630,7 @@ int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, DES_IP( X, Y ); - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( Y, X ); DES_ROUND( X, Y ); } @@ -652,7 +640,7 @@ int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, PUT_UINT32_BE( Y, output, 0 ); PUT_UINT32_BE( X, output, 4 ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_DES_CRYPT_ECB_ALT */ @@ -661,23 +649,21 @@ int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, * DES-CBC buffer encryption/decryption */ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[8]; - if( length % 8 ) - return( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); + if ( length % 8 ) + return ( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) + if ( mode == MBEDTLS_DES_ENCRYPT ) { + while ( length > 0 ) { + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_des_crypt_ecb( ctx, output, output ); @@ -687,15 +673,12 @@ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, output += 8; length -= 8; } - } - else /* MBEDTLS_DES_DECRYPT */ - { - while( length > 0 ) - { + } else { /* MBEDTLS_DES_DECRYPT */ + while ( length > 0 ) { memcpy( temp, input, 8 ); mbedtls_des_crypt_ecb( ctx, input, output ); - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 8 ); @@ -706,7 +689,7 @@ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -715,8 +698,8 @@ int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, */ #if !defined(MBEDTLS_DES3_CRYPT_ECB_ALT) int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, - const unsigned char input[8], - unsigned char output[8] ) + const unsigned char input[8], + unsigned char output[8] ) { int i; uint32_t X, Y, T, *SK; @@ -728,20 +711,17 @@ int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, DES_IP( X, Y ); - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( Y, X ); DES_ROUND( X, Y ); } - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( X, Y ); DES_ROUND( Y, X ); } - for( i = 0; i < 8; i++ ) - { + for ( i = 0; i < 8; i++ ) { DES_ROUND( Y, X ); DES_ROUND( X, Y ); } @@ -751,7 +731,7 @@ int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, PUT_UINT32_BE( Y, output, 0 ); PUT_UINT32_BE( X, output, 4 ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_DES3_CRYPT_ECB_ALT */ @@ -760,23 +740,21 @@ int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, * 3DES-CBC buffer encryption/decryption */ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, - int mode, - size_t length, - unsigned char iv[8], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[8]; - if( length % 8 ) - return( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); + if ( length % 8 ) + return ( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_DES_ENCRYPT ) - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) + if ( mode == MBEDTLS_DES_ENCRYPT ) { + while ( length > 0 ) { + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_des3_crypt_ecb( ctx, output, output ); @@ -786,15 +764,12 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, output += 8; length -= 8; } - } - else /* MBEDTLS_DES_DECRYPT */ - { - while( length > 0 ) - { + } else { /* MBEDTLS_DES_DECRYPT */ + while ( length > 0 ) { memcpy( temp, input, 8 ); mbedtls_des3_crypt_ecb( ctx, input, output ); - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 8 ); @@ -805,7 +780,7 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -817,47 +792,40 @@ int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, * * http://csrc.nist.gov/groups/STM/cavp/documents/des/tripledes-vectors.zip */ -static const unsigned char des3_test_keys[24] = -{ +static const unsigned char des3_test_keys[24] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23 }; -static const unsigned char des3_test_buf[8] = -{ +static const unsigned char des3_test_buf[8] = { 0x4E, 0x6F, 0x77, 0x20, 0x69, 0x73, 0x20, 0x74 }; -static const unsigned char des3_test_ecb_dec[3][8] = -{ +static const unsigned char des3_test_ecb_dec[3][8] = { { 0xCD, 0xD6, 0x4F, 0x2F, 0x94, 0x27, 0xC1, 0x5D }, { 0x69, 0x96, 0xC8, 0xFA, 0x47, 0xA2, 0xAB, 0xEB }, { 0x83, 0x25, 0x39, 0x76, 0x44, 0x09, 0x1A, 0x0A } }; -static const unsigned char des3_test_ecb_enc[3][8] = -{ +static const unsigned char des3_test_ecb_enc[3][8] = { { 0x6A, 0x2A, 0x19, 0xF4, 0x1E, 0xCA, 0x85, 0x4B }, { 0x03, 0xE6, 0x9F, 0x5B, 0xFA, 0x58, 0xEB, 0x42 }, { 0xDD, 0x17, 0xE8, 0xB8, 0xB4, 0x37, 0xD2, 0x32 } }; #if defined(MBEDTLS_CIPHER_MODE_CBC) -static const unsigned char des3_test_iv[8] = -{ +static const unsigned char des3_test_iv[8] = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF, }; -static const unsigned char des3_test_cbc_dec[3][8] = -{ +static const unsigned char des3_test_cbc_dec[3][8] = { { 0x12, 0x9F, 0x40, 0xB9, 0xD2, 0x00, 0x56, 0xB3 }, { 0x47, 0x0E, 0xFC, 0x9A, 0x6B, 0x8E, 0xE3, 0x93 }, { 0xC5, 0xCE, 0xCF, 0x63, 0xEC, 0xEC, 0x51, 0x4C } }; -static const unsigned char des3_test_cbc_enc[3][8] = -{ +static const unsigned char des3_test_cbc_enc[3][8] = { { 0x54, 0xF1, 0x5A, 0xF6, 0xEB, 0xE3, 0xA4, 0xB4 }, { 0x35, 0x76, 0x11, 0x56, 0x5F, 0xA1, 0x8E, 0x4D }, { 0xCB, 0x19, 0x1F, 0x85, 0xD1, 0xED, 0x84, 0x39 } @@ -883,140 +851,129 @@ int mbedtls_des_self_test( int verbose ) /* * ECB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " DES%c-ECB-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); + ( u == 0 ) ? ' ' : '3', 56 + u * 56, + ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); memcpy( buf, des3_test_buf, 8 ); - switch( i ) - { - case 0: - mbedtls_des_setkey_dec( &ctx, des3_test_keys ); - break; + switch ( i ) { + case 0: + mbedtls_des_setkey_dec( &ctx, des3_test_keys ); + break; - case 1: - mbedtls_des_setkey_enc( &ctx, des3_test_keys ); - break; + case 1: + mbedtls_des_setkey_enc( &ctx, des3_test_keys ); + break; - case 2: - mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); - break; + case 2: + mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); + break; - case 3: - mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); - break; + case 3: + mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); + break; - case 4: - mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); - break; + case 4: + mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); + break; - case 5: - mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); - break; + case 5: + mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); + break; - default: - return( 1 ); + default: + return ( 1 ); } - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) + for ( j = 0; j < 10000; j++ ) { + if ( u == 0 ) mbedtls_des_crypt_ecb( &ctx, buf, buf ); else mbedtls_des3_crypt_ecb( &ctx3, buf, buf ); } - if( ( v == MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || - ( v != MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) + if ( ( v == MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_ecb_dec[u], 8 ) != 0 ) || + ( v != MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_ecb_enc[u], 8 ) != 0 ) ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); #if defined(MBEDTLS_CIPHER_MODE_CBC) /* * CBC mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; v = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " DES%c-CBC-%3d (%s): ", - ( u == 0 ) ? ' ' : '3', 56 + u * 56, - ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); + ( u == 0 ) ? ' ' : '3', 56 + u * 56, + ( v == MBEDTLS_DES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, des3_test_iv, 8 ); memcpy( prv, des3_test_iv, 8 ); memcpy( buf, des3_test_buf, 8 ); - switch( i ) - { - case 0: - mbedtls_des_setkey_dec( &ctx, des3_test_keys ); - break; + switch ( i ) { + case 0: + mbedtls_des_setkey_dec( &ctx, des3_test_keys ); + break; - case 1: - mbedtls_des_setkey_enc( &ctx, des3_test_keys ); - break; + case 1: + mbedtls_des_setkey_enc( &ctx, des3_test_keys ); + break; - case 2: - mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); - break; + case 2: + mbedtls_des3_set2key_dec( &ctx3, des3_test_keys ); + break; - case 3: - mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); - break; + case 3: + mbedtls_des3_set2key_enc( &ctx3, des3_test_keys ); + break; - case 4: - mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); - break; + case 4: + mbedtls_des3_set3key_dec( &ctx3, des3_test_keys ); + break; - case 5: - mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); - break; + case 5: + mbedtls_des3_set3key_enc( &ctx3, des3_test_keys ); + break; - default: - return( 1 ); + default: + return ( 1 ); } - if( v == MBEDTLS_DES_DECRYPT ) - { - for( j = 0; j < 10000; j++ ) - { - if( u == 0 ) + if ( v == MBEDTLS_DES_DECRYPT ) { + for ( j = 0; j < 10000; j++ ) { + if ( u == 0 ) mbedtls_des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); else mbedtls_des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); } - } - else - { - for( j = 0; j < 10000; j++ ) - { + } else { + for ( j = 0; j < 10000; j++ ) { unsigned char tmp[8]; - if( u == 0 ) + if ( u == 0 ) mbedtls_des_crypt_cbc( &ctx, v, 8, iv, buf, buf ); else mbedtls_des3_crypt_cbc( &ctx3, v, 8, iv, buf, buf ); @@ -1029,31 +986,30 @@ int mbedtls_des_self_test( int verbose ) memcpy( buf, prv, 8 ); } - if( ( v == MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || - ( v != MBEDTLS_DES_DECRYPT && - memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) - { - if( verbose != 0 ) + if ( ( v == MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_cbc_dec[u], 8 ) != 0 ) || + ( v != MBEDTLS_DES_DECRYPT && + memcmp( buf, des3_test_cbc_enc[u], 8 ) != 0 ) ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_des_free( &ctx ); mbedtls_des3_free( &ctx3 ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/dhm.c b/external_libs/mbedtls/library/dhm.c index a4715d1..7ff61a3 100644 --- a/external_libs/mbedtls/library/dhm.c +++ b/external_libs/mbedtls/library/dhm.c @@ -58,8 +58,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -71,21 +73,21 @@ static int dhm_read_bignum( mbedtls_mpi *X, { int ret, n; - if( end - *p < 2 ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( end - *p < 2 ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); n = ( (*p)[0] << 8 ) | (*p)[1]; (*p) += 2; - if( (int)( end - *p ) < n ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( (int)( end - *p ) < n ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( ( ret = mbedtls_mpi_read_binary( X, *p, n ) ) != 0 ) - return( MBEDTLS_ERR_DHM_READ_PARAMS_FAILED + ret ); + if ( ( ret = mbedtls_mpi_read_binary( X, *p, n ) ) != 0 ) + return ( MBEDTLS_ERR_DHM_READ_PARAMS_FAILED + ret ); (*p) += n; - return( 0 ); + return ( 0 ); } /* @@ -102,20 +104,21 @@ static int dhm_check_range( const mbedtls_mpi *param, const mbedtls_mpi *P ) mbedtls_mpi L, U; int ret = MBEDTLS_ERR_DHM_BAD_INPUT_DATA; - mbedtls_mpi_init( &L ); mbedtls_mpi_init( &U ); + mbedtls_mpi_init( &L ); + mbedtls_mpi_init( &U ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &L, 2 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &U, P, 2 ) ); - if( mbedtls_mpi_cmp_mpi( param, &L ) >= 0 && - mbedtls_mpi_cmp_mpi( param, &U ) <= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( param, &L ) >= 0 && + mbedtls_mpi_cmp_mpi( param, &U ) <= 0 ) { ret = 0; } cleanup: - mbedtls_mpi_free( &L ); mbedtls_mpi_free( &U ); - return( ret ); + mbedtls_mpi_free( &L ); + mbedtls_mpi_free( &U ); + return ( ret ); } void mbedtls_dhm_init( mbedtls_dhm_context *ctx ) @@ -127,62 +130,60 @@ void mbedtls_dhm_init( mbedtls_dhm_context *ctx ) * Parse the ServerKeyExchange parameters */ int mbedtls_dhm_read_params( mbedtls_dhm_context *ctx, - unsigned char **p, - const unsigned char *end ) + unsigned char **p, + const unsigned char *end ) { int ret; - if( ( ret = dhm_read_bignum( &ctx->P, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->G, p, end ) ) != 0 || - ( ret = dhm_read_bignum( &ctx->GY, p, end ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_read_bignum( &ctx->P, p, end ) ) != 0 || + ( ret = dhm_read_bignum( &ctx->G, p, end ) ) != 0 || + ( ret = dhm_read_bignum( &ctx->GY, p, end ) ) != 0 ) + return ( ret ); - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) + return ( ret ); ctx->len = mbedtls_mpi_size( &ctx->P ); - return( 0 ); + return ( 0 ); } /* * Setup and write the ServerKeyExchange parameters */ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, - unsigned char *output, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *output, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret, count = 0; size_t n1, n2, n3; unsigned char *p; - if( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); /* * Generate X as large as possible ( < P ) */ - do - { + do { mbedtls_mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &ctx->X, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED ); + } while ( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); /* * Calculate GX = G^X mod P */ MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); + &ctx->P, &ctx->RP ) ); - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) + return ( ret ); /* * export P, G, GX @@ -197,8 +198,8 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, n3 = mbedtls_mpi_size( &ctx->GX ); p = output; - DHM_MPI_EXPORT( &ctx->P , n1 ); - DHM_MPI_EXPORT( &ctx->G , n2 ); + DHM_MPI_EXPORT( &ctx->P, n1 ); + DHM_MPI_EXPORT( &ctx->G, n2 ); DHM_MPI_EXPORT( &ctx->GX, n3 ); *olen = p - output; @@ -207,74 +208,72 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size, cleanup: - if( ret != 0 ) - return( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* * Import the peer's public value G^Y */ int mbedtls_dhm_read_public( mbedtls_dhm_context *ctx, - const unsigned char *input, size_t ilen ) + const unsigned char *input, size_t ilen ) { int ret; - if( ctx == NULL || ilen < 1 || ilen > ctx->len ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( ctx == NULL || ilen < 1 || ilen > ctx->len ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( ( ret = mbedtls_mpi_read_binary( &ctx->GY, input, ilen ) ) != 0 ) - return( MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED + ret ); + if ( ( ret = mbedtls_mpi_read_binary( &ctx->GY, input, ilen ) ) != 0 ) + return ( MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* * Create own private value X and export G^X */ int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size, - unsigned char *output, size_t olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *output, size_t olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret, count = 0; - if( ctx == NULL || olen < 1 || olen > ctx->len ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( ctx == NULL || olen < 1 || olen > ctx->len ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( &ctx->P, 0 ) == 0 ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); /* * generate X and calculate GX = G^X mod P */ - do - { + do { mbedtls_mpi_fill_random( &ctx->X, x_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &ctx->X, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED ); - } - while( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED ); + } while ( dhm_check_range( &ctx->X, &ctx->P ) != 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->GX, &ctx->G, &ctx->X, - &ctx->P , &ctx->RP ) ); + &ctx->P, &ctx->RP ) ); - if( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GX, &ctx->P ) ) != 0 ) + return ( ret ); MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &ctx->GX, output, olen ) ); cleanup: - if( ret != 0 ) - return( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -284,7 +283,7 @@ int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size, * Berlin Heidelberg, 1996. p. 104-113. */ static int dhm_update_blinding( mbedtls_dhm_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, count; @@ -292,28 +291,26 @@ static int dhm_update_blinding( mbedtls_dhm_context *ctx, * Don't use any blinding the first time a particular X is used, * but remember it to use blinding next time. */ - if( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->pX ) != 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &ctx->X, &ctx->pX ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &ctx->pX, &ctx->X ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &ctx->Vi, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &ctx->Vf, 1 ) ); - return( 0 ); + return ( 0 ); } /* * Ok, we need blinding. Can we re-use existing values? * If yes, just update them by squaring them. */ - if( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ) - { + if ( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->P ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->Vf, &ctx->Vf, &ctx->Vf ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->Vf, &ctx->Vf, &ctx->P ) ); - return( 0 ); + return ( 0 ); } /* @@ -322,62 +319,57 @@ static int dhm_update_blinding( mbedtls_dhm_context *ctx, /* Vi = random( 2, P-1 ) */ count = 0; - do - { + do { mbedtls_mpi_fill_random( &ctx->Vi, mbedtls_mpi_size( &ctx->P ), f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &ctx->Vi, &ctx->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &ctx->Vi, &ctx->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &ctx->Vi, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); - } - while( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) <= 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_MPI_NOT_ACCEPTABLE ); + } while ( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) <= 0 ); /* Vf = Vi^-X mod P */ MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->Vf, &ctx->Vi, &ctx->P ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->Vf, &ctx->Vf, &ctx->X, &ctx->P, &ctx->RP ) ); cleanup: - return( ret ); + return ( ret ); } /* * Derive and export the shared secret (G^Y)^X mod P */ int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx, - unsigned char *output, size_t output_size, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *output, size_t output_size, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_mpi GYb; - if( ctx == NULL || output_size < ctx->len ) - return( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); + if ( ctx == NULL || output_size < ctx->len ) + return ( MBEDTLS_ERR_DHM_BAD_INPUT_DATA ); - if( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) - return( ret ); + if ( ( ret = dhm_check_range( &ctx->GY, &ctx->P ) ) != 0 ) + return ( ret ); mbedtls_mpi_init( &GYb ); /* Blind peer's value */ - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { MBEDTLS_MPI_CHK( dhm_update_blinding( ctx, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &GYb, &ctx->GY, &ctx->Vi ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &GYb, &GYb, &ctx->P ) ); - } - else + } else MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &GYb, &ctx->GY ) ); /* Do modular exponentiation */ MBEDTLS_MPI_CHK( mbedtls_mpi_exp_mod( &ctx->K, &GYb, &ctx->X, - &ctx->P, &ctx->RP ) ); + &ctx->P, &ctx->RP ) ); /* Unblind secret value */ - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->K, &ctx->K, &ctx->Vf ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->K, &ctx->K, &ctx->P ) ); } @@ -389,10 +381,10 @@ int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx, cleanup: mbedtls_mpi_free( &GYb ); - if( ret != 0 ) - return( MBEDTLS_ERR_DHM_CALC_SECRET_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_DHM_CALC_SECRET_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -400,9 +392,15 @@ int mbedtls_dhm_calc_secret( mbedtls_dhm_context *ctx, */ void mbedtls_dhm_free( mbedtls_dhm_context *ctx ) { - mbedtls_mpi_free( &ctx->pX); mbedtls_mpi_free( &ctx->Vf ); mbedtls_mpi_free( &ctx->Vi ); - mbedtls_mpi_free( &ctx->RP ); mbedtls_mpi_free( &ctx->K ); mbedtls_mpi_free( &ctx->GY ); - mbedtls_mpi_free( &ctx->GX ); mbedtls_mpi_free( &ctx->X ); mbedtls_mpi_free( &ctx->G ); + mbedtls_mpi_free( &ctx->pX); + mbedtls_mpi_free( &ctx->Vf ); + mbedtls_mpi_free( &ctx->Vi ); + mbedtls_mpi_free( &ctx->RP ); + mbedtls_mpi_free( &ctx->K ); + mbedtls_mpi_free( &ctx->GY ); + mbedtls_mpi_free( &ctx->GX ); + mbedtls_mpi_free( &ctx->X ); + mbedtls_mpi_free( &ctx->G ); mbedtls_mpi_free( &ctx->P ); mbedtls_zeroize( ctx, sizeof( mbedtls_dhm_context ) ); @@ -413,7 +411,7 @@ void mbedtls_dhm_free( mbedtls_dhm_context *ctx ) * Parse DHM parameters */ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, - size_t dhminlen ) + size_t dhminlen ) { int ret; size_t len; @@ -424,22 +422,20 @@ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, mbedtls_pem_init( &pem ); /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( dhminlen == 0 || dhmin[dhminlen - 1] != '\0' ) + if ( dhminlen == 0 || dhmin[dhminlen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN DH PARAMETERS-----", - "-----END DH PARAMETERS-----", - dhmin, NULL, 0, &dhminlen ); + "-----BEGIN DH PARAMETERS-----", + "-----END DH PARAMETERS-----", + dhmin, NULL, 0, &dhminlen ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ dhminlen = pem.buflen; - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) goto exit; p = ( ret == 0 ) ? pem.buf : (unsigned char *) dhmin; @@ -455,39 +451,34 @@ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, * privateValueLength INTEGER OPTIONAL * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + ret; goto exit; } end = p + len; - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->P ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->G ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->P ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &dhm->G ) ) != 0 ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + ret; goto exit; } - if( p != end ) - { + if ( p != end ) { /* This might be the optional privateValueLength. * If so, we can cleanly discard it */ mbedtls_mpi rec; mbedtls_mpi_init( &rec ); ret = mbedtls_asn1_get_mpi( &p, end, &rec ); mbedtls_mpi_free( &rec ); - if ( ret != 0 ) - { + if ( ret != 0 ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + ret; goto exit; } - if ( p != end ) - { + if ( p != end ) { ret = MBEDTLS_ERR_DHM_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; goto exit; } } @@ -500,10 +491,10 @@ int mbedtls_dhm_parse_dhm( mbedtls_dhm_context *dhm, const unsigned char *dhmin, #if defined(MBEDTLS_PEM_PARSE_C) mbedtls_pem_free( &pem ); #endif - if( ret != 0 ) + if ( ret != 0 ) mbedtls_dhm_free( dhm ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_FS_IO) @@ -519,41 +510,38 @@ static int load_file( const char *path, unsigned char **buf, size_t *n ) FILE *f; long size; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { + if ( ( size = ftell( f ) ) == -1 ) { fclose( f ); - return( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); } fseek( f, 0, SEEK_SET ); *n = (size_t) size; - if( *n + 1 == 0 || - ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) - { + if ( *n + 1 == 0 || + ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) { fclose( f ); - return( MBEDTLS_ERR_DHM_ALLOC_FAILED ); + return ( MBEDTLS_ERR_DHM_ALLOC_FAILED ); } - if( fread( *buf, 1, *n, f ) != *n ) - { + if ( fread( *buf, 1, *n, f ) != *n ) { fclose( f ); mbedtls_free( *buf ); - return( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_DHM_FILE_IO_ERROR ); } fclose( f ); (*buf)[*n] = '\0'; - if( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) + if ( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) ++*n; - return( 0 ); + return ( 0 ); } /* @@ -565,15 +553,15 @@ int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path ) size_t n; unsigned char *buf; - if( ( ret = load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_dhm_parse_dhm( dhm, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ #endif /* MBEDTLS_ASN1_PARSE_C */ @@ -581,11 +569,11 @@ int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path ) #if defined(MBEDTLS_SELF_TEST) static const char mbedtls_test_dhm_params[] = -"-----BEGIN DH PARAMETERS-----\r\n" -"MIGHAoGBAJ419DBEOgmQTzo5qXl5fQcN9TN455wkOL7052HzxxRVMyhYmwQcgJvh\r\n" -"1sa18fyfR9OiVEMYglOpkqVoGLN7qd5aQNNi5W7/C+VBdHTBJcGZJyyP5B3qcz32\r\n" -"9mLJKudlVudV0Qxk5qUJaPZ/xupz0NyoVpviuiBOI1gNi8ovSXWzAgEC\r\n" -"-----END DH PARAMETERS-----\r\n"; + "-----BEGIN DH PARAMETERS-----\r\n" + "MIGHAoGBAJ419DBEOgmQTzo5qXl5fQcN9TN455wkOL7052HzxxRVMyhYmwQcgJvh\r\n" + "1sa18fyfR9OiVEMYglOpkqVoGLN7qd5aQNNi5W7/C+VBdHTBJcGZJyyP5B3qcz32\r\n" + "9mLJKudlVudV0Qxk5qUJaPZ/xupz0NyoVpviuiBOI1gNi8ovSXWzAgEC\r\n" + "-----END DH PARAMETERS-----\r\n"; static const size_t mbedtls_test_dhm_params_len = sizeof( mbedtls_test_dhm_params ); @@ -599,27 +587,26 @@ int mbedtls_dhm_self_test( int verbose ) mbedtls_dhm_init( &dhm ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " DHM parameter load: " ); - if( ( ret = mbedtls_dhm_parse_dhm( &dhm, - (const unsigned char *) mbedtls_test_dhm_params, - mbedtls_test_dhm_params_len ) ) != 0 ) - { - if( verbose != 0 ) + if ( ( ret = mbedtls_dhm_parse_dhm( &dhm, + (const unsigned char *) mbedtls_test_dhm_params, + mbedtls_test_dhm_params_len ) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n\n" ); exit: mbedtls_dhm_free( &dhm ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/ecdh.c b/external_libs/mbedtls/library/ecdh.c index c0a8147..17658c1 100644 --- a/external_libs/mbedtls/library/ecdh.c +++ b/external_libs/mbedtls/library/ecdh.c @@ -42,8 +42,8 @@ * Generate public key: simple wrapper around mbedtls_ecp_gen_keypair */ int mbedtls_ecdh_gen_public( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { return mbedtls_ecp_gen_keypair( grp, d, Q, f_rng, p_rng ); } @@ -52,9 +52,9 @@ int mbedtls_ecdh_gen_public( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp * Compute shared secret (SEC1 3.3.1) */ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, - const mbedtls_ecp_point *Q, const mbedtls_mpi *d, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + const mbedtls_ecp_point *Q, const mbedtls_mpi *d, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_ecp_point P; @@ -68,8 +68,7 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, &P, d, Q, f_rng, p_rng ) ); - if( mbedtls_ecp_is_zero( &P ) ) - { + if ( mbedtls_ecp_is_zero( &P ) ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -79,7 +78,7 @@ int mbedtls_ecdh_compute_shared( mbedtls_ecp_group *grp, mbedtls_mpi *z, cleanup: mbedtls_ecp_point_free( &P ); - return( ret ); + return ( ret ); } /* @@ -95,7 +94,7 @@ void mbedtls_ecdh_init( mbedtls_ecdh_context *ctx ) */ void mbedtls_ecdh_free( mbedtls_ecdh_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_ecp_group_free( &ctx->grp ); @@ -116,33 +115,33 @@ void mbedtls_ecdh_free( mbedtls_ecdh_context *ctx ) * } ServerECDHParams; */ int mbedtls_ecdh_make_params( mbedtls_ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; size_t grp_len, pt_len; - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->grp.pbits == 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) + != 0 ) + return ( ret ); - if( ( ret = mbedtls_ecp_tls_write_group( &ctx->grp, &grp_len, buf, blen ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_write_group( &ctx->grp, &grp_len, buf, blen ) ) + != 0 ) + return ( ret ); buf += grp_len; blen -= grp_len; - if( ( ret = mbedtls_ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - &pt_len, buf, blen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, + &pt_len, buf, blen ) ) != 0 ) + return ( ret ); *olen = grp_len + pt_len; - return( 0 ); + return ( 0 ); } /* @@ -153,109 +152,108 @@ int mbedtls_ecdh_make_params( mbedtls_ecdh_context *ctx, size_t *olen, * } ServerECDHParams; */ int mbedtls_ecdh_read_params( mbedtls_ecdh_context *ctx, - const unsigned char **buf, const unsigned char *end ) + const unsigned char **buf, const unsigned char *end ) { int ret; - if( ( ret = mbedtls_ecp_tls_read_group( &ctx->grp, buf, end - *buf ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_read_group( &ctx->grp, buf, end - *buf ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, buf, end - *buf ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, buf, end - *buf ) ) + != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* * Get parameters from a keypair */ int mbedtls_ecdh_get_params( mbedtls_ecdh_context *ctx, const mbedtls_ecp_keypair *key, - mbedtls_ecdh_side side ) + mbedtls_ecdh_side side ) { int ret; - if( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 ) + return ( ret ); /* If it's not our key, just import the public part as Qp */ - if( side == MBEDTLS_ECDH_THEIRS ) - return( mbedtls_ecp_copy( &ctx->Qp, &key->Q ) ); + if ( side == MBEDTLS_ECDH_THEIRS ) + return ( mbedtls_ecp_copy( &ctx->Qp, &key->Q ) ); /* Our key: import public (as Q) and private parts */ - if( side != MBEDTLS_ECDH_OURS ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( side != MBEDTLS_ECDH_OURS ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 || - ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 || + ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* * Setup and export the client public value */ int mbedtls_ecdh_make_public( mbedtls_ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; - if( ctx == NULL || ctx->grp.pbits == 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->grp.pbits == 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) - != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecdh_gen_public( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ) + != 0 ) + return ( ret ); return mbedtls_ecp_tls_write_point( &ctx->grp, &ctx->Q, ctx->point_format, - olen, buf, blen ); + olen, buf, blen ); } /* * Parse and import the client's public value */ int mbedtls_ecdh_read_public( mbedtls_ecdh_context *ctx, - const unsigned char *buf, size_t blen ) + const unsigned char *buf, size_t blen ) { int ret; const unsigned char *p = buf; - if( ctx == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, &p, blen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_tls_read_point( &ctx->grp, &ctx->Qp, &p, blen ) ) != 0 ) + return ( ret ); - if( (size_t)( p - buf ) != blen ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( (size_t)( p - buf ) != blen ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - return( 0 ); + return ( 0 ); } /* * Derive and export the shared secret */ int mbedtls_ecdh_calc_secret( mbedtls_ecdh_context *ctx, size_t *olen, - unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; - if( ctx == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecdh_compute_shared( &ctx->grp, &ctx->z, &ctx->Qp, &ctx->d, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ecdh_compute_shared( &ctx->grp, &ctx->z, &ctx->Qp, &ctx->d, + f_rng, p_rng ) ) != 0 ) { + return ( ret ); } - if( mbedtls_mpi_size( &ctx->z ) > blen ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( mbedtls_mpi_size( &ctx->z ) > blen ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); *olen = ctx->grp.pbits / 8 + ( ( ctx->grp.pbits % 8 ) != 0 ); return mbedtls_mpi_write_binary( &ctx->z, buf, *olen ); diff --git a/external_libs/mbedtls/library/ecdsa.c b/external_libs/mbedtls/library/ecdsa.c index 4156f3c..9fc6595 100644 --- a/external_libs/mbedtls/library/ecdsa.c +++ b/external_libs/mbedtls/library/ecdsa.c @@ -54,15 +54,15 @@ static int derive_mpi( const mbedtls_ecp_group *grp, mbedtls_mpi *x, size_t use_size = blen > n_size ? n_size : blen; MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( x, buf, use_size ) ); - if( use_size * 8 > grp->nbits ) + if ( use_size * 8 > grp->nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( x, use_size * 8 - grp->nbits ) ); /* While at it, reduce modulo N */ - if( mbedtls_mpi_cmp_mpi( x, &grp->N ) >= 0 ) + if ( mbedtls_mpi_cmp_mpi( x, &grp->N ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( x, x, &grp->N ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -70,40 +70,38 @@ static int derive_mpi( const mbedtls_ecp_group *grp, mbedtls_mpi *x, * Obviously, compared to SEC1 4.1.3, we skip step 4 (hash message) */ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, - const mbedtls_mpi *d, const unsigned char *buf, size_t blen, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const mbedtls_mpi *d, const unsigned char *buf, size_t blen, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, key_tries, sign_tries, blind_tries; mbedtls_ecp_point R; mbedtls_mpi k, e, t; /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( grp->N.p == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); mbedtls_ecp_point_init( &R ); - mbedtls_mpi_init( &k ); mbedtls_mpi_init( &e ); mbedtls_mpi_init( &t ); + mbedtls_mpi_init( &k ); + mbedtls_mpi_init( &e ); + mbedtls_mpi_init( &t ); sign_tries = 0; - do - { + do { /* * Steps 1-3: generate a suitable ephemeral keypair * and set r = xR mod n */ key_tries = 0; - do - { + do { MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair( grp, &k, &R, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( r, &R.X, &grp->N ) ); - if( key_tries++ > 10 ) - { + if ( key_tries++ > 10 ) { ret = MBEDTLS_ERR_ECP_RANDOM_FAILED; goto cleanup; } - } - while( mbedtls_mpi_cmp_int( r, 0 ) == 0 ); + } while ( mbedtls_mpi_cmp_int( r, 0 ) == 0 ); /* * Step 5: derive MPI from hashed message @@ -115,18 +113,16 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, * avoiding a potential timing leak. */ blind_tries = 0; - do - { + do { size_t n_size = ( grp->nbits + 7 ) / 8; MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &t, n_size, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &t, 8 * n_size - grp->nbits ) ); /* See mbedtls_ecp_gen_keypair() */ - if( ++blind_tries > 30 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( &t, 1 ) < 0 || - mbedtls_mpi_cmp_mpi( &t, &grp->N ) >= 0 ); + if ( ++blind_tries > 30 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( &t, 1 ) < 0 || + mbedtls_mpi_cmp_mpi( &t, &grp->N ) >= 0 ); /* * Step 6: compute s = (e + r * d) / k = t (e + rd) / (kt) mod n @@ -139,19 +135,19 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( s, s, &e ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( s, s, &grp->N ) ); - if( sign_tries++ > 10 ) - { + if ( sign_tries++ > 10 ) { ret = MBEDTLS_ERR_ECP_RANDOM_FAILED; goto cleanup; } - } - while( mbedtls_mpi_cmp_int( s, 0 ) == 0 ); + } while ( mbedtls_mpi_cmp_int( s, 0 ) == 0 ); cleanup: mbedtls_ecp_point_free( &R ); - mbedtls_mpi_free( &k ); mbedtls_mpi_free( &e ); mbedtls_mpi_free( &t ); + mbedtls_mpi_free( &k ); + mbedtls_mpi_free( &e ); + mbedtls_mpi_free( &t ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_ECDSA_DETERMINISTIC) @@ -159,8 +155,8 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, * Deterministic signature wrapper */ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s, - const mbedtls_mpi *d, const unsigned char *buf, size_t blen, - mbedtls_md_type_t md_alg ) + const mbedtls_mpi *d, const unsigned char *buf, size_t blen, + mbedtls_md_type_t md_alg ) { int ret; mbedtls_hmac_drbg_context rng_ctx; @@ -169,8 +165,8 @@ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi const mbedtls_md_info_t *md_info; mbedtls_mpi h; - if( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); mbedtls_mpi_init( &h ); mbedtls_hmac_drbg_init( &rng_ctx ); @@ -182,13 +178,13 @@ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi mbedtls_hmac_drbg_seed_buf( &rng_ctx, md_info, data, 2 * grp_len ); ret = mbedtls_ecdsa_sign( grp, r, s, d, buf, blen, - mbedtls_hmac_drbg_random, &rng_ctx ); + mbedtls_hmac_drbg_random, &rng_ctx ); cleanup: mbedtls_hmac_drbg_free( &rng_ctx ); mbedtls_mpi_free( &h ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECDSA_DETERMINISTIC */ @@ -197,26 +193,28 @@ int mbedtls_ecdsa_sign_det( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi * Obviously, compared to SEC1 4.1.3, we skip step 2 (hash message) */ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, - const unsigned char *buf, size_t blen, - const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s) + const unsigned char *buf, size_t blen, + const mbedtls_ecp_point *Q, const mbedtls_mpi *r, const mbedtls_mpi *s) { int ret; mbedtls_mpi e, s_inv, u1, u2; mbedtls_ecp_point R; mbedtls_ecp_point_init( &R ); - mbedtls_mpi_init( &e ); mbedtls_mpi_init( &s_inv ); mbedtls_mpi_init( &u1 ); mbedtls_mpi_init( &u2 ); + mbedtls_mpi_init( &e ); + mbedtls_mpi_init( &s_inv ); + mbedtls_mpi_init( &u1 ); + mbedtls_mpi_init( &u2 ); /* Fail cleanly on curves such as Curve25519 that can't be used for ECDSA */ - if( grp->N.p == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( grp->N.p == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Step 1: make sure r and s are in range 1..n-1 */ - if( mbedtls_mpi_cmp_int( r, 1 ) < 0 || mbedtls_mpi_cmp_mpi( r, &grp->N ) >= 0 || - mbedtls_mpi_cmp_int( s, 1 ) < 0 || mbedtls_mpi_cmp_mpi( s, &grp->N ) >= 0 ) - { + if ( mbedtls_mpi_cmp_int( r, 1 ) < 0 || mbedtls_mpi_cmp_mpi( r, &grp->N ) >= 0 || + mbedtls_mpi_cmp_int( s, 1 ) < 0 || mbedtls_mpi_cmp_mpi( s, &grp->N ) >= 0 ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } @@ -250,8 +248,7 @@ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, */ MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( grp, &R, &u1, &grp->G, &u2, Q ) ); - if( mbedtls_ecp_is_zero( &R ) ) - { + if ( mbedtls_ecp_is_zero( &R ) ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } @@ -265,17 +262,19 @@ int mbedtls_ecdsa_verify( mbedtls_ecp_group *grp, /* * Step 8: check if v (that is, R.X) is equal to r */ - if( mbedtls_mpi_cmp_mpi( &R.X, r ) != 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &R.X, r ) != 0 ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } cleanup: mbedtls_ecp_point_free( &R ); - mbedtls_mpi_free( &e ); mbedtls_mpi_free( &s_inv ); mbedtls_mpi_free( &u1 ); mbedtls_mpi_free( &u2 ); + mbedtls_mpi_free( &e ); + mbedtls_mpi_free( &s_inv ); + mbedtls_mpi_free( &u1 ); + mbedtls_mpi_free( &u2 ); - return( ret ); + return ( ret ); } /* @@ -294,22 +293,22 @@ static int ecdsa_signature_to_asn1( const mbedtls_mpi *r, const mbedtls_mpi *s, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &p, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &p, buf, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ); memcpy( sig, p, len ); *slen = len; - return( 0 ); + return ( 0 ); } /* * Compute and write signature */ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + const unsigned char *hash, size_t hlen, + unsigned char *sig, size_t *slen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_mpi r, s; @@ -322,12 +321,12 @@ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t (void) p_rng; MBEDTLS_MPI_CHK( mbedtls_ecdsa_sign_det( &ctx->grp, &r, &s, &ctx->d, - hash, hlen, md_alg ) ); + hash, hlen, md_alg ) ); #else (void) md_alg; MBEDTLS_MPI_CHK( mbedtls_ecdsa_sign( &ctx->grp, &r, &s, &ctx->d, - hash, hlen, f_rng, p_rng ) ); + hash, hlen, f_rng, p_rng ) ); #endif MBEDTLS_MPI_CHK( ecdsa_signature_to_asn1( &r, &s, sig, slen ) ); @@ -336,18 +335,18 @@ int mbedtls_ecdsa_write_signature( mbedtls_ecdsa_context *ctx, mbedtls_md_type_t mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); - return( ret ); + return ( ret ); } #if ! defined(MBEDTLS_DEPRECATED_REMOVED) && \ defined(MBEDTLS_ECDSA_DETERMINISTIC) int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - unsigned char *sig, size_t *slen, - mbedtls_md_type_t md_alg ) + const unsigned char *hash, size_t hlen, + unsigned char *sig, size_t *slen, + mbedtls_md_type_t md_alg ) { - return( mbedtls_ecdsa_write_signature( ctx, md_alg, hash, hlen, sig, slen, - NULL, NULL ) ); + return ( mbedtls_ecdsa_write_signature( ctx, md_alg, hash, hlen, sig, slen, + NULL, NULL ) ); } #endif @@ -355,8 +354,8 @@ int mbedtls_ecdsa_write_signature_det( mbedtls_ecdsa_context *ctx, * Read and check signature */ int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx, - const unsigned char *hash, size_t hlen, - const unsigned char *sig, size_t slen ) + const unsigned char *hash, size_t hlen, + const unsigned char *sig, size_t slen ) { int ret; unsigned char *p = (unsigned char *) sig; @@ -367,49 +366,46 @@ int mbedtls_ecdsa_read_signature( mbedtls_ecdsa_context *ctx, mbedtls_mpi_init( &r ); mbedtls_mpi_init( &s ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { ret += MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } - if( p + len != end ) - { + if ( p + len != end ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; goto cleanup; } - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &r ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &s ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &r ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &s ) ) != 0 ) { ret += MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } - if( ( ret = mbedtls_ecdsa_verify( &ctx->grp, hash, hlen, - &ctx->Q, &r, &s ) ) != 0 ) + if ( ( ret = mbedtls_ecdsa_verify( &ctx->grp, hash, hlen, + &ctx->Q, &r, &s ) ) != 0 ) goto cleanup; - if( p != end ) + if ( p != end ) ret = MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH; cleanup: mbedtls_mpi_free( &r ); mbedtls_mpi_free( &s ); - return( ret ); + return ( ret ); } /* * Generate key pair */ int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - return( mbedtls_ecp_group_load( &ctx->grp, gid ) || - mbedtls_ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ); + return ( mbedtls_ecp_group_load( &ctx->grp, gid ) || + mbedtls_ecp_gen_keypair( &ctx->grp, &ctx->d, &ctx->Q, f_rng, p_rng ) ); } /* @@ -419,14 +415,13 @@ int mbedtls_ecdsa_from_keypair( mbedtls_ecdsa_context *ctx, const mbedtls_ecp_ke { int ret; - if( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 || - ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 || - ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_group_copy( &ctx->grp, &key->grp ) ) != 0 || + ( ret = mbedtls_mpi_copy( &ctx->d, &key->d ) ) != 0 || + ( ret = mbedtls_ecp_copy( &ctx->Q, &key->Q ) ) != 0 ) { mbedtls_ecdsa_free( ctx ); } - return( ret ); + return ( ret ); } /* diff --git a/external_libs/mbedtls/library/ecjpake.c b/external_libs/mbedtls/library/ecjpake.c index 1fa1c2d..3724652 100644 --- a/external_libs/mbedtls/library/ecjpake.c +++ b/external_libs/mbedtls/library/ecjpake.c @@ -52,7 +52,7 @@ static const char * const ecjpake_id[] = { */ void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; ctx->md_info = NULL; @@ -75,7 +75,7 @@ void mbedtls_ecjpake_init( mbedtls_ecjpake_context *ctx ) */ void mbedtls_ecjpake_free( mbedtls_ecjpake_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; ctx->md_info = NULL; @@ -106,18 +106,18 @@ int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, ctx->role = role; - if( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL ) - return( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); + if ( ( ctx->md_info = mbedtls_md_info_from_type( hash ) ) == NULL ) + return ( MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE ); MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &ctx->grp, curve ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &ctx->s, secret, len ) ); cleanup: - if( ret != 0 ) + if ( ret != 0 ) mbedtls_ecjpake_free( ctx ); - return( ret ); + return ( ret ); } /* @@ -125,14 +125,13 @@ int mbedtls_ecjpake_setup( mbedtls_ecjpake_context *ctx, */ int mbedtls_ecjpake_check( const mbedtls_ecjpake_context *ctx ) { - if( ctx->md_info == NULL || - ctx->grp.id == MBEDTLS_ECP_DP_NONE || - ctx->s.p == NULL ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ctx->md_info == NULL || + ctx->grp.id == MBEDTLS_ECP_DP_NONE || + ctx->s.p == NULL ) { + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } - return( 0 ); + return ( 0 ); } /* @@ -148,13 +147,13 @@ static int ecjpake_write_len_point( unsigned char **p, size_t len; /* Need at least 4 for length plus 1 for point */ - if( end < *p || end - *p < 5 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < *p || end - *p < 5 ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); ret = mbedtls_ecp_point_write_binary( grp, P, pf, &len, *p + 4, end - ( *p + 4 ) ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); (*p)[0] = (unsigned char)( ( len >> 24 ) & 0xFF ); (*p)[1] = (unsigned char)( ( len >> 16 ) & 0xFF ); @@ -163,7 +162,7 @@ static int ecjpake_write_len_point( unsigned char **p, *p += 4 + len; - return( 0 ); + return ( 0 ); } /* @@ -196,16 +195,16 @@ static int ecjpake_hash( const mbedtls_md_info_t *md_info, MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, V ) ); MBEDTLS_MPI_CHK( ecjpake_write_len_point( &p, end, grp, pf, X ) ); - if( end - p < 4 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end - p < 4 ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); *p++ = (unsigned char)( ( id_len >> 24 ) & 0xFF ); *p++ = (unsigned char)( ( id_len >> 16 ) & 0xFF ); *p++ = (unsigned char)( ( id_len >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( id_len ) & 0xFF ); - if( end < p || (size_t)( end - p ) < id_len ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < p || (size_t)( end - p ) < id_len ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); memcpy( p, id, id_len ); p += id_len; @@ -215,11 +214,11 @@ static int ecjpake_hash( const mbedtls_md_info_t *md_info, /* Turn it into an integer mod n */ MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( h, hash, - mbedtls_md_get_size( md_info ) ) ); + mbedtls_md_get_size( md_info ) ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( h, h, &grp->N ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -250,21 +249,19 @@ static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, * opaque r<1..2^8-1>; * } ECSchnorrZKP; */ - if( end < *p ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_point( grp, &V, p, end - *p ) ); - if( end < *p || (size_t)( end - *p ) < 1 ) - { + if ( end < *p || (size_t)( end - *p ) < 1 ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } r_len = *(*p)++; - if( end < *p || (size_t)( end - *p ) < r_len ) - { + if ( end < *p || (size_t)( end - *p ) < r_len ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -277,10 +274,9 @@ static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, */ MBEDTLS_MPI_CHK( ecjpake_hash( md_info, grp, pf, G, &V, X, id, &h ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_muladd( (mbedtls_ecp_group *) grp, - &VV, &h, X, &r, G ) ); + &VV, &h, X, &r, G ) ); - if( mbedtls_ecp_point_cmp( &VV, &V ) != 0 ) - { + if ( mbedtls_ecp_point_cmp( &VV, &V ) != 0 ) { ret = MBEDTLS_ERR_ECP_VERIFY_FAILED; goto cleanup; } @@ -291,7 +287,7 @@ static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, mbedtls_mpi_free( &r ); mbedtls_mpi_free( &h ); - return( ret ); + return ( ret ); } /* @@ -299,7 +295,7 @@ static int ecjpake_zkp_read( const mbedtls_md_info_t *md_info, */ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, const mbedtls_ecp_group *grp, - const int pf, + const int pf, const mbedtls_ecp_point *G, const mbedtls_mpi *x, const mbedtls_ecp_point *X, @@ -315,8 +311,8 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, mbedtls_mpi h; /* later recycled to hold r */ size_t len; - if( end < *p ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); mbedtls_ecp_point_init( &V ); mbedtls_mpi_init( &v ); @@ -324,7 +320,7 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, /* Compute signature */ MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair_base( (mbedtls_ecp_group *) grp, - G, &v, &V, f_rng, p_rng ) ); + G, &v, &V, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( ecjpake_hash( md_info, grp, pf, G, &V, X, id, &h ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &h, &h, x ) ); /* x*h */ MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &h, &v, &h ) ); /* v - x*h */ @@ -332,12 +328,11 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, /* Write it out */ MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( grp, &V, - pf, &len, *p, end - *p ) ); + pf, &len, *p, end - *p ) ); *p += len; len = mbedtls_mpi_size( &h ); /* actually r */ - if( end < *p || (size_t)( end - *p ) < 1 + len || len > 255 ) - { + if ( end < *p || (size_t)( end - *p ) < 1 + len || len > 255 ) { ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; goto cleanup; } @@ -351,7 +346,7 @@ static int ecjpake_zkp_write( const mbedtls_md_info_t *md_info, mbedtls_mpi_free( &v ); mbedtls_mpi_free( &h ); - return( ret ); + return ( ret ); } /* @@ -369,8 +364,8 @@ static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, { int ret; - if( end < *p ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * struct { @@ -379,8 +374,7 @@ static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, * } ECJPAKEKeyKP; */ MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_point( grp, X, p, end - *p ) ); - if( mbedtls_ecp_is_zero( X ) ) - { + if ( mbedtls_ecp_is_zero( X ) ) { ret = MBEDTLS_ERR_ECP_INVALID_KEY; goto cleanup; } @@ -388,7 +382,7 @@ static int ecjpake_kkp_read( const mbedtls_md_info_t *md_info, MBEDTLS_MPI_CHK( ecjpake_zkp_read( md_info, grp, pf, G, X, id, p, end ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -410,14 +404,14 @@ static int ecjpake_kkp_write( const mbedtls_md_info_t *md_info, int ret; size_t len; - if( end < *p ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( end < *p ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); /* Generate key (7.4.2.3.1) and write it out */ MBEDTLS_MPI_CHK( mbedtls_ecp_gen_keypair_base( (mbedtls_ecp_group *) grp, G, x, X, - f_rng, p_rng ) ); + f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_point( grp, X, - pf, &len, *p, end - *p ) ); + pf, &len, *p, end - *p ) ); *p += len; /* Generate and write proof */ @@ -425,7 +419,7 @@ static int ecjpake_kkp_write( const mbedtls_md_info_t *md_info, p, end, f_rng, p_rng ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -454,11 +448,11 @@ static int ecjpake_kkpp_read( const mbedtls_md_info_t *md_info, MBEDTLS_MPI_CHK( ecjpake_kkp_read( md_info, grp, pf, G, Xa, id, &p, end ) ); MBEDTLS_MPI_CHK( ecjpake_kkp_read( md_info, grp, pf, G, Xb, id, &p, end ) ); - if( p != end ) + if ( p != end ) ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; cleanup: - return( ret ); + return ( ret ); } /* @@ -485,14 +479,14 @@ static int ecjpake_kkpp_write( const mbedtls_md_info_t *md_info, const unsigned char *end = buf + len; MBEDTLS_MPI_CHK( ecjpake_kkp_write( md_info, grp, pf, G, xm1, Xa, id, - &p, end, f_rng, p_rng ) ); + &p, end, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( ecjpake_kkp_write( md_info, grp, pf, G, xm2, Xb, id, - &p, end, f_rng, p_rng ) ); + &p, end, f_rng, p_rng ) ); *olen = p - buf; cleanup: - return( ret ); + return ( ret ); } /* @@ -502,24 +496,24 @@ int mbedtls_ecjpake_read_round_one( mbedtls_ecjpake_context *ctx, const unsigned char *buf, size_t len ) { - return( ecjpake_kkpp_read( ctx->md_info, &ctx->grp, ctx->point_format, - &ctx->grp.G, - &ctx->Xp1, &ctx->Xp2, ID_PEER, - buf, len ) ); + return ( ecjpake_kkpp_read( ctx->md_info, &ctx->grp, ctx->point_format, + &ctx->grp.G, + &ctx->Xp1, &ctx->Xp2, ID_PEER, + buf, len ) ); } /* * Generate and write the first round message */ int mbedtls_ecjpake_write_round_one( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { - return( ecjpake_kkpp_write( ctx->md_info, &ctx->grp, ctx->point_format, - &ctx->grp.G, - &ctx->xm1, &ctx->Xm1, &ctx->xm2, &ctx->Xm2, - ID_MINE, buf, len, olen, f_rng, p_rng ) ); + return ( ecjpake_kkpp_write( ctx->md_info, &ctx->grp, ctx->point_format, + &ctx->grp.G, + &ctx->xm1, &ctx->Xm1, &ctx->xm2, &ctx->Xm2, + ID_MINE, buf, len, olen, f_rng, p_rng ) ); } /* @@ -542,15 +536,15 @@ static int ecjpake_ecp_add3( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: mbedtls_mpi_free( &one ); - return( ret ); + return ( ret ); } /* * Read and process second round message (C: 7.4.2.5, S: 7.4.2.6) */ int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { int ret; const unsigned char *p = buf; @@ -576,22 +570,19 @@ int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, * ECJPAKEKeyKP ecjpake_key_kp; * } Client/ServerECJPAKEParams; */ - if( ctx->role == MBEDTLS_ECJPAKE_CLIENT ) - { + if ( ctx->role == MBEDTLS_ECJPAKE_CLIENT ) { MBEDTLS_MPI_CHK( mbedtls_ecp_tls_read_group( &grp, &p, len ) ); - if( grp.id != ctx->grp.id ) - { + if ( grp.id != ctx->grp.id ) { ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; goto cleanup; } } MBEDTLS_MPI_CHK( ecjpake_kkp_read( ctx->md_info, &ctx->grp, - ctx->point_format, - &G, &ctx->Xp, ID_PEER, &p, end ) ); + ctx->point_format, + &G, &ctx->Xp, ID_PEER, &p, end ) ); - if( p != end ) - { + if ( p != end ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -600,7 +591,7 @@ int mbedtls_ecjpake_read_round_two( mbedtls_ecjpake_context *ctx, mbedtls_ecp_group_free( &grp ); mbedtls_ecp_point_free( &G ); - return( ret ); + return ( ret ); } /* @@ -631,16 +622,16 @@ static int ecjpake_mul_secret( mbedtls_mpi *R, int sign, cleanup: mbedtls_mpi_free( &b ); - return( ret ); + return ( ret ); } /* * Generate and write the second round message (S: 7.4.2.5, C: 7.4.2.6) */ int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_ecp_point G; /* C: GA, S: GB */ @@ -675,20 +666,17 @@ int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, * ECJPAKEKeyKP ecjpake_key_kp; * } Client/ServerECJPAKEParams; */ - if( ctx->role == MBEDTLS_ECJPAKE_SERVER ) - { - if( end < p ) - { + if ( ctx->role == MBEDTLS_ECJPAKE_SERVER ) { + if ( end < p ) { ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; goto cleanup; } MBEDTLS_MPI_CHK( mbedtls_ecp_tls_write_group( &ctx->grp, &ec_len, - p, end - p ) ); + p, end - p ) ); p += ec_len; } - if( end < p ) - { + if ( end < p ) { ret = MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL; goto cleanup; } @@ -708,16 +696,16 @@ int mbedtls_ecjpake_write_round_two( mbedtls_ecjpake_context *ctx, mbedtls_ecp_point_free( &Xm ); mbedtls_mpi_free( &xm ); - return( ret ); + return ( ret ); } /* * Derive PMS (7.4.2.7 / 7.4.2.8) */ int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, - unsigned char *buf, size_t len, size_t *olen, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + unsigned char *buf, size_t len, size_t *olen, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; mbedtls_ecp_point K; @@ -726,8 +714,8 @@ int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, size_t x_bytes; *olen = mbedtls_md_get_size( ctx->md_info ); - if( len < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( len < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); mbedtls_ecp_point_init( &K ); mbedtls_mpi_init( &m_xm2_s ); @@ -758,7 +746,7 @@ int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, mbedtls_mpi_free( &m_xm2_s ); mbedtls_mpi_free( &one ); - return( ret ); + return ( ret ); } #undef ID_MINE @@ -779,7 +767,7 @@ int mbedtls_ecjpake_derive_secret( mbedtls_ecjpake_context *ctx, int mbedtls_ecjpake_self_test( int verbose ) { (void) verbose; - return( 0 ); + return ( 0 ); } #else @@ -929,7 +917,7 @@ static int ecjpake_test_load( mbedtls_ecjpake_context *ctx, &ctx->grp.G, NULL, NULL ) ); cleanup: - return( ret ); + return ( ret ); } /* For tests we don't need a secure RNG; @@ -939,8 +927,7 @@ static int ecjpake_lgc( void *p, unsigned char *out, size_t len ) static uint32_t x = 42; (void) p; - while( len > 0 ) - { + while ( len > 0 ) { size_t use_len = len > 4 ? 4 : len; x = 1664525 * x + 1013904223; memcpy( out, &x, use_len ); @@ -948,7 +935,7 @@ static int ecjpake_lgc( void *p, unsigned char *out, size_t len ) len -= use_len; } - return( 0 ); + return ( 0 ); } #define TEST_ASSERT( x ) \ @@ -976,23 +963,23 @@ int mbedtls_ecjpake_self_test( int verbose ) mbedtls_ecjpake_init( &cli ); mbedtls_ecjpake_init( &srv ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECJPAKE test #0 (setup): " ); TEST_ASSERT( mbedtls_ecjpake_setup( &cli, MBEDTLS_ECJPAKE_CLIENT, - MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, - ecjpake_test_password, - sizeof( ecjpake_test_password ) ) == 0 ); + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, + ecjpake_test_password, + sizeof( ecjpake_test_password ) ) == 0 ); TEST_ASSERT( mbedtls_ecjpake_setup( &srv, MBEDTLS_ECJPAKE_SERVER, - MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, - ecjpake_test_password, - sizeof( ecjpake_test_password ) ) == 0 ); + MBEDTLS_MD_SHA256, MBEDTLS_ECP_DP_SECP256R1, + ecjpake_test_password, + sizeof( ecjpake_test_password ) ) == 0 ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECJPAKE test #1 (random handshake): " ); TEST_ASSERT( mbedtls_ecjpake_write_round_one( &cli, @@ -1024,38 +1011,38 @@ int mbedtls_ecjpake_self_test( int verbose ) TEST_ASSERT( len == pmslen ); TEST_ASSERT( memcmp( buf, pms, len ) == 0 ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECJPAKE test #2 (reference handshake): " ); /* Simulate generation of round one */ MBEDTLS_MPI_CHK( ecjpake_test_load( &cli, - ecjpake_test_x1, sizeof( ecjpake_test_x1 ), - ecjpake_test_x2, sizeof( ecjpake_test_x2 ) ) ); + ecjpake_test_x1, sizeof( ecjpake_test_x1 ), + ecjpake_test_x2, sizeof( ecjpake_test_x2 ) ) ); MBEDTLS_MPI_CHK( ecjpake_test_load( &srv, - ecjpake_test_x3, sizeof( ecjpake_test_x3 ), - ecjpake_test_x4, sizeof( ecjpake_test_x4 ) ) ); + ecjpake_test_x3, sizeof( ecjpake_test_x3 ), + ecjpake_test_x4, sizeof( ecjpake_test_x4 ) ) ); /* Read round one */ TEST_ASSERT( mbedtls_ecjpake_read_round_one( &srv, - ecjpake_test_cli_one, - sizeof( ecjpake_test_cli_one ) ) == 0 ); + ecjpake_test_cli_one, + sizeof( ecjpake_test_cli_one ) ) == 0 ); TEST_ASSERT( mbedtls_ecjpake_read_round_one( &cli, - ecjpake_test_srv_one, - sizeof( ecjpake_test_srv_one ) ) == 0 ); + ecjpake_test_srv_one, + sizeof( ecjpake_test_srv_one ) ) == 0 ); /* Skip generation of round two, read round two */ TEST_ASSERT( mbedtls_ecjpake_read_round_two( &cli, - ecjpake_test_srv_two, - sizeof( ecjpake_test_srv_two ) ) == 0 ); + ecjpake_test_srv_two, + sizeof( ecjpake_test_srv_two ) ) == 0 ); TEST_ASSERT( mbedtls_ecjpake_read_round_two( &srv, - ecjpake_test_cli_two, - sizeof( ecjpake_test_cli_two ) ) == 0 ); + ecjpake_test_cli_two, + sizeof( ecjpake_test_cli_two ) ) == 0 ); /* Server derives PMS */ TEST_ASSERT( mbedtls_ecjpake_derive_secret( &srv, @@ -1073,25 +1060,24 @@ int mbedtls_ecjpake_self_test( int verbose ) TEST_ASSERT( len == sizeof( ecjpake_test_pms ) ); TEST_ASSERT( memcmp( buf, ecjpake_test_pms, len ) == 0 ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: mbedtls_ecjpake_free( &cli ); mbedtls_ecjpake_free( &srv ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( ret ); + return ( ret ); } #undef TEST_ASSERT diff --git a/external_libs/mbedtls/library/ecp.c b/external_libs/mbedtls/library/ecp.c index f51f225..2e78e07 100644 --- a/external_libs/mbedtls/library/ecp.c +++ b/external_libs/mbedtls/library/ecp.c @@ -68,8 +68,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #if defined(MBEDTLS_SELF_TEST) @@ -101,8 +103,7 @@ static unsigned long add_count, dbl_count, mul_count; /* * Curve types: internal for now, might be exposed later */ -typedef enum -{ +typedef enum { ECP_TYPE_NONE = 0, ECP_TYPE_SHORT_WEIERSTRASS, /* y^2 = x^3 + a x + b */ ECP_TYPE_MONTGOMERY, /* y^2 = x^3 + a x^2 + x */ @@ -120,8 +121,7 @@ typedef enum * * Reminder: update profiles in x509_crt.c when adding a new curves! */ -static const mbedtls_ecp_curve_info ecp_supported_curves[] = -{ +static const mbedtls_ecp_curve_info ecp_supported_curves[] = { #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) { MBEDTLS_ECP_DP_SECP521R1, 25, 521, "secp521r1" }, #endif @@ -168,7 +168,7 @@ static mbedtls_ecp_group_id ecp_supported_grp_id[ECP_NB_CURVES]; */ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_list( void ) { - return( ecp_supported_curves ); + return ( ecp_supported_curves ); } /* @@ -178,15 +178,13 @@ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ) { static int init_done = 0; - if( ! init_done ) - { + if ( ! init_done ) { size_t i = 0; const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { ecp_supported_grp_id[i++] = curve_info->grp_id; } ecp_supported_grp_id[i] = MBEDTLS_ECP_DP_NONE; @@ -194,7 +192,7 @@ const mbedtls_ecp_group_id *mbedtls_ecp_grp_id_list( void ) init_done = 1; } - return( ecp_supported_grp_id ); + return ( ecp_supported_grp_id ); } /* @@ -204,15 +202,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_grp_id( mbedtls_ecp_gr { const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->grp_id == grp_id ) - return( curve_info ); + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { + if ( curve_info->grp_id == grp_id ) + return ( curve_info ); } - return( NULL ); + return ( NULL ); } /* @@ -222,15 +219,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_tls_id( uint16_t tls_i { const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { - if( curve_info->tls_id == tls_id ) - return( curve_info ); + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { + if ( curve_info->tls_id == tls_id ) + return ( curve_info ); } - return( NULL ); + return ( NULL ); } /* @@ -240,15 +236,14 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name { const mbedtls_ecp_curve_info *curve_info; - for( curve_info = mbedtls_ecp_curve_list(); - curve_info->grp_id != MBEDTLS_ECP_DP_NONE; - curve_info++ ) - { - if( strcmp( curve_info->name, name ) == 0 ) - return( curve_info ); + for ( curve_info = mbedtls_ecp_curve_list(); + curve_info->grp_id != MBEDTLS_ECP_DP_NONE; + curve_info++ ) { + if ( strcmp( curve_info->name, name ) == 0 ) + return ( curve_info ); } - return( NULL ); + return ( NULL ); } /* @@ -256,13 +251,13 @@ const mbedtls_ecp_curve_info *mbedtls_ecp_curve_info_from_name( const char *name */ static inline ecp_curve_type ecp_get_type( const mbedtls_ecp_group *grp ) { - if( grp->G.X.p == NULL ) - return( ECP_TYPE_NONE ); + if ( grp->G.X.p == NULL ) + return ( ECP_TYPE_NONE ); - if( grp->G.Y.p == NULL ) - return( ECP_TYPE_MONTGOMERY ); + if ( grp->G.Y.p == NULL ) + return ( ECP_TYPE_MONTGOMERY ); else - return( ECP_TYPE_SHORT_WEIERSTRASS ); + return ( ECP_TYPE_SHORT_WEIERSTRASS ); } /* @@ -270,7 +265,7 @@ static inline ecp_curve_type ecp_get_type( const mbedtls_ecp_group *grp ) */ void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ) { - if( pt == NULL ) + if ( pt == NULL ) return; mbedtls_mpi_init( &pt->X ); @@ -283,7 +278,7 @@ void mbedtls_ecp_point_init( mbedtls_ecp_point *pt ) */ void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ) { - if( grp == NULL ) + if ( grp == NULL ) return; memset( grp, 0, sizeof( mbedtls_ecp_group ) ); @@ -294,7 +289,7 @@ void mbedtls_ecp_group_init( mbedtls_ecp_group *grp ) */ void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ) { - if( key == NULL ) + if ( key == NULL ) return; mbedtls_ecp_group_init( &key->grp ); @@ -307,7 +302,7 @@ void mbedtls_ecp_keypair_init( mbedtls_ecp_keypair *key ) */ void mbedtls_ecp_point_free( mbedtls_ecp_point *pt ) { - if( pt == NULL ) + if ( pt == NULL ) return; mbedtls_mpi_free( &( pt->X ) ); @@ -322,11 +317,10 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) { size_t i; - if( grp == NULL ) + if ( grp == NULL ) return; - if( grp->h != 1 ) - { + if ( grp->h != 1 ) { mbedtls_mpi_free( &grp->P ); mbedtls_mpi_free( &grp->A ); mbedtls_mpi_free( &grp->B ); @@ -334,9 +328,8 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) mbedtls_mpi_free( &grp->N ); } - if( grp->T != NULL ) - { - for( i = 0; i < grp->T_size; i++ ) + if ( grp->T != NULL ) { + for ( i = 0; i < grp->T_size; i++ ) mbedtls_ecp_point_free( &grp->T[i] ); mbedtls_free( grp->T ); } @@ -349,7 +342,7 @@ void mbedtls_ecp_group_free( mbedtls_ecp_group *grp ) */ void mbedtls_ecp_keypair_free( mbedtls_ecp_keypair *key ) { - if( key == NULL ) + if ( key == NULL ) return; mbedtls_ecp_group_free( &key->grp ); @@ -369,7 +362,7 @@ int mbedtls_ecp_copy( mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ) MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &P->Z, &Q->Z ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -387,12 +380,12 @@ int mbedtls_ecp_set_zero( mbedtls_ecp_point *pt ) { int ret; - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->X , 1 ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Y , 1 ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Z , 0 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->X, 1 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Y, 1 ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Z, 0 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -400,7 +393,7 @@ int mbedtls_ecp_set_zero( mbedtls_ecp_point *pt ) */ int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ) { - return( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ); + return ( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ); } /* @@ -409,21 +402,20 @@ int mbedtls_ecp_is_zero( mbedtls_ecp_point *pt ) int mbedtls_ecp_point_cmp( const mbedtls_ecp_point *P, const mbedtls_ecp_point *Q ) { - if( mbedtls_mpi_cmp_mpi( &P->X, &Q->X ) == 0 && - mbedtls_mpi_cmp_mpi( &P->Y, &Q->Y ) == 0 && - mbedtls_mpi_cmp_mpi( &P->Z, &Q->Z ) == 0 ) - { - return( 0 ); + if ( mbedtls_mpi_cmp_mpi( &P->X, &Q->X ) == 0 && + mbedtls_mpi_cmp_mpi( &P->Y, &Q->Y ) == 0 && + mbedtls_mpi_cmp_mpi( &P->Z, &Q->Z ) == 0 ) { + return ( 0 ); } - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } /* * Import a non-zero point from ASCII strings */ int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, - const char *x, const char *y ) + const char *x, const char *y ) { int ret; @@ -432,99 +424,94 @@ int mbedtls_ecp_point_read_string( mbedtls_ecp_point *P, int radix, MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &P->Z, 1 ) ); cleanup: - return( ret ); + return ( ret ); } /* * Export a point into unsigned binary data (SEC1 2.3.3) */ int mbedtls_ecp_point_write_binary( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *P, - int format, size_t *olen, - unsigned char *buf, size_t buflen ) + int format, size_t *olen, + unsigned char *buf, size_t buflen ) { int ret = 0; size_t plen; - if( format != MBEDTLS_ECP_PF_UNCOMPRESSED && - format != MBEDTLS_ECP_PF_COMPRESSED ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( format != MBEDTLS_ECP_PF_UNCOMPRESSED && + format != MBEDTLS_ECP_PF_COMPRESSED ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Common case: P == 0 */ - if( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) - { - if( buflen < 1 ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) { + if ( buflen < 1 ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); buf[0] = 0x00; *olen = 1; - return( 0 ); + return ( 0 ); } plen = mbedtls_mpi_size( &grp->P ); - if( format == MBEDTLS_ECP_PF_UNCOMPRESSED ) - { + if ( format == MBEDTLS_ECP_PF_UNCOMPRESSED ) { *olen = 2 * plen + 1; - if( buflen < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( buflen < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); buf[0] = 0x04; MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &P->X, buf + 1, plen ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &P->Y, buf + 1 + plen, plen ) ); - } - else if( format == MBEDTLS_ECP_PF_COMPRESSED ) - { + } else if ( format == MBEDTLS_ECP_PF_COMPRESSED ) { *olen = plen + 1; - if( buflen < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( buflen < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); buf[0] = 0x02 + mbedtls_mpi_get_bit( &P->Y, 0 ); MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &P->X, buf + 1, plen ) ); } cleanup: - return( ret ); + return ( ret ); } /* * Import a point from unsigned binary data (SEC1 2.3.4) */ int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, - const unsigned char *buf, size_t ilen ) + const unsigned char *buf, size_t ilen ) { int ret; size_t plen; - if( ilen < 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ilen < 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( buf[0] == 0x00 ) - { - if( ilen == 1 ) - return( mbedtls_ecp_set_zero( pt ) ); + if ( buf[0] == 0x00 ) { + if ( ilen == 1 ) + return ( mbedtls_ecp_set_zero( pt ) ); else - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } plen = mbedtls_mpi_size( &grp->P ); - if( buf[0] != 0x04 ) - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + if ( buf[0] != 0x04 ) + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); - if( ilen != 2 * plen + 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ilen != 2 * plen + 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &pt->X, buf + 1, plen ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &pt->Y, buf + 1 + plen, plen ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &pt->Z, 1 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -534,7 +521,7 @@ int mbedtls_ecp_point_read_binary( const mbedtls_ecp_group *grp, mbedtls_ecp_poi * } ECPoint; */ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, - const unsigned char **buf, size_t buf_len ) + const unsigned char **buf, size_t buf_len ) { unsigned char data_len; const unsigned char *buf_start; @@ -542,12 +529,12 @@ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point /* * We must have at least two bytes (1 for length, at least one for data) */ - if( buf_len < 2 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( buf_len < 2 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); data_len = *(*buf)++; - if( data_len < 1 || data_len > buf_len - 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( data_len < 1 || data_len > buf_len - 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Save buffer start for read_binary and update buf @@ -565,28 +552,28 @@ int mbedtls_ecp_tls_read_point( const mbedtls_ecp_group *grp, mbedtls_ecp_point * } ECPoint; */ int mbedtls_ecp_tls_write_point( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt, - int format, size_t *olen, - unsigned char *buf, size_t blen ) + int format, size_t *olen, + unsigned char *buf, size_t blen ) { int ret; /* * buffer length must be at least one, for our length byte */ - if( blen < 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( blen < 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_point_write_binary( grp, pt, format, - olen, buf + 1, blen - 1) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_point_write_binary( grp, pt, format, + olen, buf + 1, blen - 1) ) != 0 ) + return ( ret ); /* * write length to the first byte and update total length */ - buf[0] = (unsigned char) *olen; + buf[0] = (unsigned char) * olen; ++*olen; - return( 0 ); + return ( 0 ); } /* @@ -600,14 +587,14 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **bu /* * We expect at least three bytes (see below) */ - if( len < 3 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( len < 3 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * First byte is curve_type; only named_curve is handled */ - if( *(*buf)++ != MBEDTLS_ECP_TLS_NAMED_CURVE ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( *(*buf)++ != MBEDTLS_ECP_TLS_NAMED_CURVE ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Next two bytes are the namedcurve value @@ -616,8 +603,8 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **bu tls_id <<= 8; tls_id |= *(*buf)++; - if( ( curve_info = mbedtls_ecp_curve_info_from_tls_id( tls_id ) ) == NULL ) - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + if ( ( curve_info = mbedtls_ecp_curve_info_from_tls_id( tls_id ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); return mbedtls_ecp_group_load( grp, curve_info->grp_id ); } @@ -626,19 +613,19 @@ int mbedtls_ecp_tls_read_group( mbedtls_ecp_group *grp, const unsigned char **bu * Write the ECParameters record corresponding to a group (RFC 4492) */ int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, size_t *olen, - unsigned char *buf, size_t blen ) + unsigned char *buf, size_t blen ) { const mbedtls_ecp_curve_info *curve_info; - if( ( curve_info = mbedtls_ecp_curve_info_from_grp_id( grp->id ) ) == NULL ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ( curve_info = mbedtls_ecp_curve_info_from_grp_id( grp->id ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * We are going to write 3 bytes (see below) */ *olen = 3; - if( blen < *olen ) - return( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); + if ( blen < *olen ) + return ( MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL ); /* * First byte is curve_type, always named_curve @@ -651,7 +638,7 @@ int mbedtls_ecp_tls_write_group( const mbedtls_ecp_group *grp, size_t *olen, buf[0] = curve_info->tls_id >> 8; buf[1] = curve_info->tls_id & 0xFF; - return( 0 ); + return ( 0 ); } /* @@ -664,28 +651,27 @@ static int ecp_modp( mbedtls_mpi *N, const mbedtls_ecp_group *grp ) { int ret; - if( grp->modp == NULL ) - return( mbedtls_mpi_mod_mpi( N, N, &grp->P ) ); + if ( grp->modp == NULL ) + return ( mbedtls_mpi_mod_mpi( N, N, &grp->P ) ); /* N->s < 0 is a much faster test, which fails only if N is 0 */ - if( ( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) || - mbedtls_mpi_bitlen( N ) > 2 * grp->pbits ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( ( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) || + mbedtls_mpi_bitlen( N ) > 2 * grp->pbits ) { + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } MBEDTLS_MPI_CHK( grp->modp( N ) ); /* N->s < 0 is a much faster test, which fails only if N is 0 */ - while( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) + while ( N->s < 0 && mbedtls_mpi_cmp_int( N, 0 ) != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( N, N, &grp->P ) ); - while( mbedtls_mpi_cmp_mpi( N, &grp->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( N, &grp->P ) >= 0 ) /* we known P, N and the result are positive */ MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( N, N, &grp->P ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -745,23 +731,28 @@ static int ecp_normalize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *p int ret; mbedtls_mpi Zi, ZZi; - if( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ) - return( 0 ); + if ( mbedtls_mpi_cmp_int( &pt->Z, 0 ) == 0 ) + return ( 0 ); - mbedtls_mpi_init( &Zi ); mbedtls_mpi_init( &ZZi ); + mbedtls_mpi_init( &Zi ); + mbedtls_mpi_init( &ZZi ); /* * X = X / Z^2 mod p */ MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &Zi, &pt->Z, &grp->P ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ZZi ) ); MOD_MUL( pt->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); + MOD_MUL( ZZi ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ZZi ) ); + MOD_MUL( pt->X ); /* * Y = Y / Z^3 mod p */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ZZi ) ); MOD_MUL( pt->Y ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &Zi ) ); MOD_MUL( pt->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ZZi ) ); + MOD_MUL( pt->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &Zi ) ); + MOD_MUL( pt->Y ); /* * Z = 1 @@ -770,9 +761,10 @@ static int ecp_normalize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *p cleanup: - mbedtls_mpi_free( &Zi ); mbedtls_mpi_free( &ZZi ); + mbedtls_mpi_free( &Zi ); + mbedtls_mpi_free( &ZZi ); - return( ret ); + return ( ret ); } /* @@ -793,51 +785,55 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp, size_t i; mbedtls_mpi *c, u, Zi, ZZi; - if( t_len < 2 ) - return( ecp_normalize_jac( grp, *T ) ); + if ( t_len < 2 ) + return ( ecp_normalize_jac( grp, *T ) ); - if( ( c = mbedtls_calloc( t_len, sizeof( mbedtls_mpi ) ) ) == NULL ) - return( MBEDTLS_ERR_ECP_ALLOC_FAILED ); + if ( ( c = mbedtls_calloc( t_len, sizeof( mbedtls_mpi ) ) ) == NULL ) + return ( MBEDTLS_ERR_ECP_ALLOC_FAILED ); - mbedtls_mpi_init( &u ); mbedtls_mpi_init( &Zi ); mbedtls_mpi_init( &ZZi ); + mbedtls_mpi_init( &u ); + mbedtls_mpi_init( &Zi ); + mbedtls_mpi_init( &ZZi ); /* * c[i] = Z_0 * ... * Z_i */ MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &c[0], &T[0]->Z ) ); - for( i = 1; i < t_len; i++ ) - { - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &c[i], &c[i-1], &T[i]->Z ) ); + for ( i = 1; i < t_len; i++ ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &c[i], &c[i - 1], &T[i]->Z ) ); MOD_MUL( c[i] ); } /* * u = 1 / (Z_0 * ... * Z_n) mod P */ - MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &u, &c[t_len-1], &grp->P ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &u, &c[t_len - 1], &grp->P ) ); - for( i = t_len - 1; ; i-- ) - { + for ( i = t_len - 1; ; i-- ) { /* * Zi = 1 / Z_i mod p * u = 1 / (Z_0 * ... * Z_i) mod P */ - if( i == 0 ) { + if ( i == 0 ) { MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &Zi, &u ) ); - } - else - { - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Zi, &u, &c[i-1] ) ); MOD_MUL( Zi ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &u, &u, &T[i]->Z ) ); MOD_MUL( u ); + } else { + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Zi, &u, &c[i - 1] ) ); + MOD_MUL( Zi ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &u, &u, &T[i]->Z ) ); + MOD_MUL( u ); } /* * proceed as in normalize() */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); MOD_MUL( ZZi ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->X, &T[i]->X, &ZZi ) ); MOD_MUL( T[i]->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &ZZi ) ); MOD_MUL( T[i]->Y ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &Zi ) ); MOD_MUL( T[i]->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ZZi, &Zi, &Zi ) ); + MOD_MUL( ZZi ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->X, &T[i]->X, &ZZi ) ); + MOD_MUL( T[i]->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &ZZi ) ); + MOD_MUL( T[i]->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T[i]->Y, &T[i]->Y, &Zi ) ); + MOD_MUL( T[i]->Y ); /* * Post-precessing: reclaim some memory by shrinking coordinates @@ -849,18 +845,20 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( mbedtls_mpi_shrink( &T[i]->Y, grp->P.n ) ); mbedtls_mpi_free( &T[i]->Z ); - if( i == 0 ) + if ( i == 0 ) break; } cleanup: - mbedtls_mpi_free( &u ); mbedtls_mpi_free( &Zi ); mbedtls_mpi_free( &ZZi ); - for( i = 0; i < t_len; i++ ) + mbedtls_mpi_free( &u ); + mbedtls_mpi_free( &Zi ); + mbedtls_mpi_free( &ZZi ); + for ( i = 0; i < t_len; i++ ) mbedtls_mpi_free( &c[i] ); mbedtls_free( c ); - return( ret ); + return ( ret ); } /* @@ -868,8 +866,8 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp, * "inv" must be 0 (don't invert) or 1 (invert) or the result will be invalid */ static int ecp_safe_invert_jac( const mbedtls_ecp_group *grp, - mbedtls_ecp_point *Q, - unsigned char inv ) + mbedtls_ecp_point *Q, + unsigned char inv ) { int ret; unsigned char nonzero; @@ -885,7 +883,7 @@ static int ecp_safe_invert_jac( const mbedtls_ecp_group *grp, cleanup: mbedtls_mpi_free( &mQY ); - return( ret ); + return ( ret ); } /* @@ -912,67 +910,94 @@ static int ecp_double_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, dbl_count++; #endif - mbedtls_mpi_init( &M ); mbedtls_mpi_init( &S ); mbedtls_mpi_init( &T ); mbedtls_mpi_init( &U ); + mbedtls_mpi_init( &M ); + mbedtls_mpi_init( &S ); + mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &U ); /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { + if ( grp->A.p == NULL ) { /* M = 3(X + Z^2)(X - Z^2) */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &T, &P->X, &S ) ); MOD_ADD( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U, &P->X, &S ) ); MOD_SUB( U ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &U ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); MOD_ADD( M ); - } - else - { + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &T, &P->X, &S ) ); + MOD_ADD( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &U, &P->X, &S ) ); + MOD_SUB( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &U ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); + MOD_ADD( M ); + } else { /* M = 3.X^2 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &P->X ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); MOD_ADD( M ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &P->X ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &M, &S, 3 ) ); + MOD_ADD( M ); /* Optimize away for "koblitz" curves with A = 0 */ - if( mbedtls_mpi_cmp_int( &grp->A, 0 ) != 0 ) - { + if ( mbedtls_mpi_cmp_int( &grp->A, 0 ) != 0 ) { /* M += A.Z^4 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &S, &S ) ); MOD_MUL( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &grp->A ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &M, &M, &S ) ); MOD_ADD( M ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->Z, &P->Z ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &S, &S ) ); + MOD_MUL( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &T, &grp->A ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &M, &M, &S ) ); + MOD_ADD( M ); } } /* S = 4.X.Y^2 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &P->Y, &P->Y ) ); MOD_MUL( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T, 1 ) ); MOD_ADD( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &T ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &S, 1 ) ); MOD_ADD( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &P->Y, &P->Y ) ); + MOD_MUL( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &T, 1 ) ); + MOD_ADD( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &P->X, &T ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &S, 1 ) ); + MOD_ADD( S ); /* U = 8.Y^4 */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &T, &T ) ); MOD_MUL( U ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); MOD_ADD( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &T, &T ) ); + MOD_MUL( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); + MOD_ADD( U ); /* T = M^2 - 2.S */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &M, &M ) ); MOD_MUL( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); MOD_SUB( T ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); MOD_SUB( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T, &M, &M ) ); + MOD_MUL( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); + MOD_SUB( T ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T, &T, &S ) ); + MOD_SUB( T ); /* S = M(S - T) - U */ - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &T ) ); MOD_SUB( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &S, &M ) ); MOD_MUL( S ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &U ) ); MOD_SUB( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &T ) ); + MOD_SUB( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S, &S, &M ) ); + MOD_MUL( S ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S, &S, &U ) ); + MOD_SUB( S ); /* U = 2.Y.Z */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &P->Y, &P->Z ) ); MOD_MUL( U ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); MOD_ADD( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &U, &P->Y, &P->Z ) ); + MOD_MUL( U ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_l( &U, 1 ) ); + MOD_ADD( U ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->X, &T ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->Y, &S ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->Z, &U ) ); cleanup: - mbedtls_mpi_free( &M ); mbedtls_mpi_free( &S ); mbedtls_mpi_free( &T ); mbedtls_mpi_free( &U ); + mbedtls_mpi_free( &M ); + mbedtls_mpi_free( &S ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &U ); - return( ret ); + return ( ret ); } /* @@ -1006,55 +1031,74 @@ static int ecp_add_mixed( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, /* * Trivial cases: P == 0 or Q == 0 (case 1) */ - if( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) - return( mbedtls_ecp_copy( R, Q ) ); + if ( mbedtls_mpi_cmp_int( &P->Z, 0 ) == 0 ) + return ( mbedtls_ecp_copy( R, Q ) ); - if( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 0 ) == 0 ) - return( mbedtls_ecp_copy( R, P ) ); + if ( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 0 ) == 0 ) + return ( mbedtls_ecp_copy( R, P ) ); /* * Make sure Q coordinates are normalized */ - if( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 1 ) != 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - - mbedtls_mpi_init( &T1 ); mbedtls_mpi_init( &T2 ); mbedtls_mpi_init( &T3 ); mbedtls_mpi_init( &T4 ); - mbedtls_mpi_init( &X ); mbedtls_mpi_init( &Y ); mbedtls_mpi_init( &Z ); - - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &P->Z, &P->Z ) ); MOD_MUL( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T1, &P->Z ) ); MOD_MUL( T2 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &T1, &Q->X ) ); MOD_MUL( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T2, &Q->Y ) ); MOD_MUL( T2 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T1, &T1, &P->X ) ); MOD_SUB( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T2, &T2, &P->Y ) ); MOD_SUB( T2 ); + if ( Q->Z.p != NULL && mbedtls_mpi_cmp_int( &Q->Z, 1 ) != 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + + mbedtls_mpi_init( &T1 ); + mbedtls_mpi_init( &T2 ); + mbedtls_mpi_init( &T3 ); + mbedtls_mpi_init( &T4 ); + mbedtls_mpi_init( &X ); + mbedtls_mpi_init( &Y ); + mbedtls_mpi_init( &Z ); + + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &P->Z, &P->Z ) ); + MOD_MUL( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T1, &P->Z ) ); + MOD_MUL( T2 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T1, &T1, &Q->X ) ); + MOD_MUL( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T2, &T2, &Q->Y ) ); + MOD_MUL( T2 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T1, &T1, &P->X ) ); + MOD_SUB( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T2, &T2, &P->Y ) ); + MOD_SUB( T2 ); /* Special cases (2) and (3) */ - if( mbedtls_mpi_cmp_int( &T1, 0 ) == 0 ) - { - if( mbedtls_mpi_cmp_int( &T2, 0 ) == 0 ) - { + if ( mbedtls_mpi_cmp_int( &T1, 0 ) == 0 ) { + if ( mbedtls_mpi_cmp_int( &T2, 0 ) == 0 ) { ret = ecp_double_jac( grp, R, P ); goto cleanup; - } - else - { + } else { ret = mbedtls_ecp_set_zero( R ); goto cleanup; } } - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Z, &P->Z, &T1 ) ); MOD_MUL( Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T1, &T1 ) ); MOD_MUL( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T3, &T1 ) ); MOD_MUL( T4 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &P->X ) ); MOD_MUL( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T1, &T3, 2 ) ); MOD_ADD( T1 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &T2, &T2 ) ); MOD_MUL( X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); MOD_SUB( X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T4 ) ); MOD_SUB( X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T3, &T3, &X ) ); MOD_SUB( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &T2 ) ); MOD_MUL( T3 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T4, &P->Y ) ); MOD_MUL( T4 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &Y, &T3, &T4 ) ); MOD_SUB( Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &Z, &P->Z, &T1 ) ); + MOD_MUL( Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T1, &T1 ) ); + MOD_MUL( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T3, &T1 ) ); + MOD_MUL( T4 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &P->X ) ); + MOD_MUL( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_int( &T1, &T3, 2 ) ); + MOD_ADD( T1 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &X, &T2, &T2 ) ); + MOD_MUL( X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T1 ) ); + MOD_SUB( X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &X, &X, &T4 ) ); + MOD_SUB( X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &T3, &T3, &X ) ); + MOD_SUB( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T3, &T3, &T2 ) ); + MOD_MUL( T3 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &T4, &T4, &P->Y ) ); + MOD_MUL( T4 ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &Y, &T3, &T4 ) ); + MOD_SUB( Y ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->X, &X ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &R->Y, &Y ) ); @@ -1062,10 +1106,15 @@ static int ecp_add_mixed( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: - mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 ); mbedtls_mpi_free( &T3 ); mbedtls_mpi_free( &T4 ); - mbedtls_mpi_free( &X ); mbedtls_mpi_free( &Y ); mbedtls_mpi_free( &Z ); + mbedtls_mpi_free( &T1 ); + mbedtls_mpi_free( &T2 ); + mbedtls_mpi_free( &T3 ); + mbedtls_mpi_free( &T4 ); + mbedtls_mpi_free( &X ); + mbedtls_mpi_free( &Y ); + mbedtls_mpi_free( &Z ); - return( ret ); + return ( ret ); } /* @@ -1076,43 +1125,48 @@ static int ecp_add_mixed( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, * This countermeasure was first suggested in [2]. */ static int ecp_randomize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *pt, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; mbedtls_mpi l, ll; size_t p_size = ( grp->pbits + 7 ) / 8; int count = 0; - mbedtls_mpi_init( &l ); mbedtls_mpi_init( &ll ); + mbedtls_mpi_init( &l ); + mbedtls_mpi_init( &ll ); /* Generate l such that 1 < l < p */ - do - { + do { mbedtls_mpi_fill_random( &l, p_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &l, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); /* Z = l * Z */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Z, &pt->Z, &l ) ); MOD_MUL( pt->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Z, &pt->Z, &l ) ); + MOD_MUL( pt->Z ); /* X = l^2 * X */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &l, &l ) ); MOD_MUL( ll ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ll ) ); MOD_MUL( pt->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &l, &l ) ); + MOD_MUL( ll ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->X, &pt->X, &ll ) ); + MOD_MUL( pt->X ); /* Y = l^3 * Y */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &ll, &l ) ); MOD_MUL( ll ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ll ) ); MOD_MUL( pt->Y ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ll, &ll, &l ) ); + MOD_MUL( ll ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &pt->Y, &pt->Y, &ll ) ); + MOD_MUL( pt->Y ); cleanup: - mbedtls_mpi_free( &l ); mbedtls_mpi_free( &ll ); + mbedtls_mpi_free( &l ); + mbedtls_mpi_free( &ll ); - return( ret ); + return ( ret ); } /* @@ -1154,17 +1208,16 @@ static void ecp_comb_fixed( unsigned char x[], size_t d, size_t i, j; unsigned char c, cc, adjust; - memset( x, 0, d+1 ); + memset( x, 0, d + 1 ); /* First get the classical comb values (except for x_d = 0) */ - for( i = 0; i < d; i++ ) - for( j = 0; j < w; j++ ) + for ( i = 0; i < d; i++ ) + for ( j = 0; j < w; j++ ) x[i] |= mbedtls_mpi_get_bit( m, i + d * j ) << j; /* Now make sure x_1 .. x_d are odd */ c = 0; - for( i = 1; i <= d; i++ ) - { + for ( i = 1; i <= d; i++ ) { /* Add carry and update it */ cc = x[i] & c; x[i] = x[i] ^ c; @@ -1172,9 +1225,9 @@ static void ecp_comb_fixed( unsigned char x[], size_t d, /* Adjust if needed, avoiding branches */ adjust = 1 - ( x[i] & 0x01 ); - c |= x[i] & ( x[i-1] * adjust ); - x[i] = x[i] ^ ( x[i-1] * adjust ); - x[i-1] |= adjust << 7; + c |= x[i] & ( x[i - 1] * adjust ); + x[i] = x[i] ^ ( x[i - 1] * adjust ); + x[i - 1] |= adjust << 7; } } @@ -1204,11 +1257,10 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( mbedtls_ecp_copy( &T[0], P ) ); k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { + for ( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) { cur = T + i; MBEDTLS_MPI_CHK( mbedtls_ecp_copy( cur, T + ( i >> 1 ) ) ); - for( j = 0; j < d; j++ ) + for ( j = 0; j < d; j++ ) MBEDTLS_MPI_CHK( ecp_double_jac( grp, cur, cur ) ); TT[k++] = cur; @@ -1221,11 +1273,9 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp, * Be careful to update T[2^l] only after using it! */ k = 0; - for( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) - { + for ( i = 1; i < ( 1U << ( w - 1 ) ); i <<= 1 ) { j = i; - while( j-- ) - { + while ( j-- ) { MBEDTLS_MPI_CHK( ecp_add_mixed( grp, &T[i + j], &T[j], &T[i] ) ); TT[k++] = &T[i + j]; } @@ -1234,7 +1284,7 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( ecp_normalize_jac_many( grp, TT, k ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1251,8 +1301,7 @@ static int ecp_select_comb( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, ii = ( i & 0x7Fu ) >> 1; /* Read the whole table to thwart cache-based timing attacks */ - for( j = 0; j < t_len; j++ ) - { + for ( j = 0; j < t_len; j++ ) { MBEDTLS_MPI_CHK( mbedtls_mpi_safe_cond_assign( &R->X, &T[j].X, j == ii ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_safe_cond_assign( &R->Y, &T[j].Y, j == ii ) ); } @@ -1261,7 +1310,7 @@ static int ecp_select_comb( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R, MBEDTLS_MPI_CHK( ecp_safe_invert_jac( grp, R, i >> 7 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1286,11 +1335,10 @@ static int ecp_mul_comb_core( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R i = d; MBEDTLS_MPI_CHK( ecp_select_comb( grp, R, T, t_len, x[i] ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &R->Z, 1 ) ); - if( f_rng != 0 ) + if ( f_rng != 0 ) MBEDTLS_MPI_CHK( ecp_randomize_jac( grp, R, f_rng, p_rng ) ); - while( i-- != 0 ) - { + while ( i-- != 0 ) { MBEDTLS_MPI_CHK( ecp_double_jac( grp, R, R ) ); MBEDTLS_MPI_CHK( ecp_select_comb( grp, &Txi, T, t_len, x[i] ) ); MBEDTLS_MPI_CHK( ecp_add_mixed( grp, R, R, &Txi ) ); @@ -1299,7 +1347,7 @@ static int ecp_mul_comb_core( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R cleanup: mbedtls_ecp_point_free( &Txi ); - return( ret ); + return ( ret ); } /* @@ -1322,8 +1370,8 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, mbedtls_mpi_init( &mm ); /* we need N to be odd to trnaform m in an odd number, check now */ - if( mbedtls_mpi_get_bit( &grp->N, 0 ) != 1 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( mbedtls_mpi_get_bit( &grp->N, 0 ) != 1 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); /* * Minimize the number of multiplications, that is minimize @@ -1340,7 +1388,7 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, #if MBEDTLS_ECP_FIXED_POINT_OPTIM == 1 p_eq_g = ( mbedtls_mpi_cmp_mpi( &P->Y, &grp->G.Y ) == 0 && mbedtls_mpi_cmp_mpi( &P->X, &grp->G.X ) == 0 ); - if( p_eq_g ) + if ( p_eq_g ) w++; #else p_eq_g = 0; @@ -1350,9 +1398,9 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, * Make sure w is within bounds. * (The last test is useful only for very small curves in the test suite.) */ - if( w > MBEDTLS_ECP_WINDOW_SIZE ) + if ( w > MBEDTLS_ECP_WINDOW_SIZE ) w = MBEDTLS_ECP_WINDOW_SIZE; - if( w >= grp->nbits ) + if ( w >= grp->nbits ) w = 2; /* Other sizes that depend on w */ @@ -1365,19 +1413,16 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, */ T = p_eq_g ? grp->T : NULL; - if( T == NULL ) - { + if ( T == NULL ) { T = mbedtls_calloc( pre_len, sizeof( mbedtls_ecp_point ) ); - if( T == NULL ) - { + if ( T == NULL ) { ret = MBEDTLS_ERR_ECP_ALLOC_FAILED; goto cleanup; } MBEDTLS_MPI_CHK( ecp_precompute_comb( grp, T, P, w, d ) ); - if( p_eq_g ) - { + if ( p_eq_g ) { grp->T = T; grp->T_size = pre_len; } @@ -1406,9 +1451,8 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: - if( T != NULL && ! p_eq_g ) - { - for( i = 0; i < pre_len; i++ ) + if ( T != NULL && ! p_eq_g ) { + for ( i = 0; i < pre_len; i++ ) mbedtls_ecp_point_free( &T[i] ); mbedtls_free( T ); } @@ -1416,10 +1460,10 @@ static int ecp_mul_comb( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, mbedtls_mpi_free( &M ); mbedtls_mpi_free( &mm ); - if( ret != 0 ) + if ( ret != 0 ) mbedtls_ecp_point_free( R ); - return( ret ); + return ( ret ); } #endif /* ECP_SHORTWEIERSTRASS */ @@ -1442,11 +1486,12 @@ static int ecp_normalize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P int ret; MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &P->Z, &P->Z, &grp->P ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &P->Z ) ); MOD_MUL( P->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &P->Z ) ); + MOD_MUL( P->X ); MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &P->Z, 1 ) ); cleanup: - return( ret ); + return ( ret ); } /* @@ -1458,7 +1503,7 @@ static int ecp_normalize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P * Cost: 2M */ static int ecp_randomize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; mbedtls_mpi l; @@ -1468,25 +1513,25 @@ static int ecp_randomize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P mbedtls_mpi_init( &l ); /* Generate l such that 1 < l < p */ - do - { + do { mbedtls_mpi_fill_random( &l, p_size, f_rng, p_rng ); - while( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) + while ( mbedtls_mpi_cmp_mpi( &l, &grp->P ) >= 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &l, 1 ) ); - if( count++ > 10 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( &l, 1 ) <= 0 ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &l ) ); MOD_MUL( P->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->Z, &P->Z, &l ) ); MOD_MUL( P->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->X, &P->X, &l ) ); + MOD_MUL( P->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &P->Z, &P->Z, &l ) ); + MOD_MUL( P->Z ); cleanup: mbedtls_mpi_free( &l ); - return( ret ); + return ( ret ); } /* @@ -1512,35 +1557,65 @@ static int ecp_double_add_mxz( const mbedtls_ecp_group *grp, int ret; mbedtls_mpi A, AA, B, BB, E, C, D, DA, CB; - mbedtls_mpi_init( &A ); mbedtls_mpi_init( &AA ); mbedtls_mpi_init( &B ); - mbedtls_mpi_init( &BB ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &C ); - mbedtls_mpi_init( &D ); mbedtls_mpi_init( &DA ); mbedtls_mpi_init( &CB ); - - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &A, &P->X, &P->Z ) ); MOD_ADD( A ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &AA, &A, &A ) ); MOD_MUL( AA ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &B, &P->X, &P->Z ) ); MOD_SUB( B ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &BB, &B, &B ) ); MOD_MUL( BB ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &E, &AA, &BB ) ); MOD_SUB( E ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &C, &Q->X, &Q->Z ) ); MOD_ADD( C ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &D, &Q->X, &Q->Z ) ); MOD_SUB( D ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &DA, &D, &A ) ); MOD_MUL( DA ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &CB, &C, &B ) ); MOD_MUL( CB ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &S->X, &DA, &CB ) ); MOD_MUL( S->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->X, &S->X, &S->X ) ); MOD_MUL( S->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S->Z, &DA, &CB ) ); MOD_SUB( S->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, &S->Z, &S->Z ) ); MOD_MUL( S->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, d, &S->Z ) ); MOD_MUL( S->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->X, &AA, &BB ) ); MOD_MUL( R->X ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &grp->A, &E ) ); MOD_MUL( R->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &R->Z, &BB, &R->Z ) ); MOD_ADD( R->Z ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &E, &R->Z ) ); MOD_MUL( R->Z ); + mbedtls_mpi_init( &A ); + mbedtls_mpi_init( &AA ); + mbedtls_mpi_init( &B ); + mbedtls_mpi_init( &BB ); + mbedtls_mpi_init( &E ); + mbedtls_mpi_init( &C ); + mbedtls_mpi_init( &D ); + mbedtls_mpi_init( &DA ); + mbedtls_mpi_init( &CB ); + + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &A, &P->X, &P->Z ) ); + MOD_ADD( A ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &AA, &A, &A ) ); + MOD_MUL( AA ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &B, &P->X, &P->Z ) ); + MOD_SUB( B ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &BB, &B, &B ) ); + MOD_MUL( BB ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &E, &AA, &BB ) ); + MOD_SUB( E ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &C, &Q->X, &Q->Z ) ); + MOD_ADD( C ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &D, &Q->X, &Q->Z ) ); + MOD_SUB( D ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &DA, &D, &A ) ); + MOD_MUL( DA ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &CB, &C, &B ) ); + MOD_MUL( CB ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &S->X, &DA, &CB ) ); + MOD_MUL( S->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->X, &S->X, &S->X ) ); + MOD_MUL( S->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &S->Z, &DA, &CB ) ); + MOD_SUB( S->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, &S->Z, &S->Z ) ); + MOD_MUL( S->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &S->Z, d, &S->Z ) ); + MOD_MUL( S->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->X, &AA, &BB ) ); + MOD_MUL( R->X ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &grp->A, &E ) ); + MOD_MUL( R->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &R->Z, &BB, &R->Z ) ); + MOD_ADD( R->Z ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &R->Z, &E, &R->Z ) ); + MOD_MUL( R->Z ); cleanup: - mbedtls_mpi_free( &A ); mbedtls_mpi_free( &AA ); mbedtls_mpi_free( &B ); - mbedtls_mpi_free( &BB ); mbedtls_mpi_free( &E ); mbedtls_mpi_free( &C ); - mbedtls_mpi_free( &D ); mbedtls_mpi_free( &DA ); mbedtls_mpi_free( &CB ); - - return( ret ); + mbedtls_mpi_free( &A ); + mbedtls_mpi_free( &AA ); + mbedtls_mpi_free( &B ); + mbedtls_mpi_free( &BB ); + mbedtls_mpi_free( &E ); + mbedtls_mpi_free( &C ); + mbedtls_mpi_free( &D ); + mbedtls_mpi_free( &DA ); + mbedtls_mpi_free( &CB ); + + return ( ret ); } /* @@ -1558,7 +1633,8 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, mbedtls_ecp_point RP; mbedtls_mpi PX; - mbedtls_ecp_point_init( &RP ); mbedtls_mpi_init( &PX ); + mbedtls_ecp_point_init( &RP ); + mbedtls_mpi_init( &PX ); /* Save PX and read from P before writing to R, in case P == R */ MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &PX, &P->X ) ); @@ -1573,13 +1649,12 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, MOD_ADD( RP.X ); /* Randomize coordinates of the starting point */ - if( f_rng != NULL ) + if ( f_rng != NULL ) MBEDTLS_MPI_CHK( ecp_randomize_mxz( grp, &RP, f_rng, p_rng ) ); /* Loop invariant: R = result so far, RP = R + P */ i = mbedtls_mpi_bitlen( m ); /* one past the (zero-based) most significant bit */ - while( i-- > 0 ) - { + while ( i-- > 0 ) { b = mbedtls_mpi_get_bit( m, i ); /* * if (b) R = 2R + P else R = 2R, @@ -1598,9 +1673,10 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, MBEDTLS_MPI_CHK( ecp_normalize_mxz( grp, R ) ); cleanup: - mbedtls_ecp_point_free( &RP ); mbedtls_mpi_free( &PX ); + mbedtls_ecp_point_free( &RP ); + mbedtls_mpi_free( &PX ); - return( ret ); + return ( ret ); } #endif /* ECP_MONTGOMERY */ @@ -1609,28 +1685,28 @@ static int ecp_mul_mxz( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, * Multiplication R = m * P */ int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; /* Common sanity checks */ - if( mbedtls_mpi_cmp_int( &P->Z, 1 ) != 0 ) - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( mbedtls_mpi_cmp_int( &P->Z, 1 ) != 0 ) + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); - if( ( ret = mbedtls_ecp_check_privkey( grp, m ) ) != 0 || - ( ret = mbedtls_ecp_check_pubkey( grp, P ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_check_privkey( grp, m ) ) != 0 || + ( ret = mbedtls_ecp_check_pubkey( grp, P ) ) != 0 ) + return ( ret ); #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - return( ecp_mul_mxz( grp, R, m, P, f_rng, p_rng ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) + return ( ecp_mul_mxz( grp, R, m, P, f_rng, p_rng ) ); #endif #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_mul_comb( grp, R, m, P, f_rng, p_rng ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) + return ( ecp_mul_comb( grp, R, m, P, f_rng, p_rng ) ); #endif - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } #if defined(ECP_SHORTWEIERSTRASS) @@ -1644,42 +1720,47 @@ static int ecp_check_pubkey_sw( const mbedtls_ecp_group *grp, const mbedtls_ecp_ mbedtls_mpi YY, RHS; /* pt coordinates must be normalized for our checks */ - if( mbedtls_mpi_cmp_int( &pt->X, 0 ) < 0 || - mbedtls_mpi_cmp_int( &pt->Y, 0 ) < 0 || - mbedtls_mpi_cmp_mpi( &pt->X, &grp->P ) >= 0 || - mbedtls_mpi_cmp_mpi( &pt->Y, &grp->P ) >= 0 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_cmp_int( &pt->X, 0 ) < 0 || + mbedtls_mpi_cmp_int( &pt->Y, 0 ) < 0 || + mbedtls_mpi_cmp_mpi( &pt->X, &grp->P ) >= 0 || + mbedtls_mpi_cmp_mpi( &pt->Y, &grp->P ) >= 0 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); - mbedtls_mpi_init( &YY ); mbedtls_mpi_init( &RHS ); + mbedtls_mpi_init( &YY ); + mbedtls_mpi_init( &RHS ); /* * YY = Y^2 * RHS = X (X^2 + A) + B = X^3 + A X + B */ - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); MOD_MUL( YY ); - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); MOD_MUL( RHS ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &YY, &pt->Y, &pt->Y ) ); + MOD_MUL( YY ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &pt->X, &pt->X ) ); + MOD_MUL( RHS ); /* Special case for A = -3 */ - if( grp->A.p == NULL ) - { - MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &RHS, &RHS, 3 ) ); MOD_SUB( RHS ); - } - else - { - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->A ) ); MOD_ADD( RHS ); + if ( grp->A.p == NULL ) { + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &RHS, &RHS, 3 ) ); + MOD_SUB( RHS ); + } else { + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->A ) ); + MOD_ADD( RHS ); } - MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); MOD_MUL( RHS ); - MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->B ) ); MOD_ADD( RHS ); + MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &RHS, &RHS, &pt->X ) ); + MOD_MUL( RHS ); + MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &RHS, &RHS, &grp->B ) ); + MOD_ADD( RHS ); - if( mbedtls_mpi_cmp_mpi( &YY, &RHS ) != 0 ) + if ( mbedtls_mpi_cmp_mpi( &YY, &RHS ) != 0 ) ret = MBEDTLS_ERR_ECP_INVALID_KEY; cleanup: - mbedtls_mpi_free( &YY ); mbedtls_mpi_free( &RHS ); + mbedtls_mpi_free( &YY ); + mbedtls_mpi_free( &RHS ); - return( ret ); + return ( ret ); } #endif /* ECP_SHORTWEIERSTRASS */ @@ -1694,23 +1775,18 @@ static int mbedtls_ecp_mul_shortcuts( mbedtls_ecp_group *grp, { int ret; - if( mbedtls_mpi_cmp_int( m, 1 ) == 0 ) - { + if ( mbedtls_mpi_cmp_int( m, 1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) ); - } - else if( mbedtls_mpi_cmp_int( m, -1 ) == 0 ) - { + } else if ( mbedtls_mpi_cmp_int( m, -1 ) == 0 ) { MBEDTLS_MPI_CHK( mbedtls_ecp_copy( R, P ) ); - if( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 ) + if ( mbedtls_mpi_cmp_int( &R->Y, 0 ) != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_sub_mpi( &R->Y, &grp->P, &R->Y ) ); - } - else - { + } else { MBEDTLS_MPI_CHK( mbedtls_ecp_mul( grp, R, m, P, NULL, NULL ) ); } cleanup: - return( ret ); + return ( ret ); } /* @@ -1718,14 +1794,14 @@ static int mbedtls_ecp_mul_shortcuts( mbedtls_ecp_group *grp, * NOT constant-time */ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, - const mbedtls_mpi *m, const mbedtls_ecp_point *P, - const mbedtls_mpi *n, const mbedtls_ecp_point *Q ) + const mbedtls_mpi *m, const mbedtls_ecp_point *P, + const mbedtls_mpi *n, const mbedtls_ecp_point *Q ) { int ret; mbedtls_ecp_point mP; - if( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS ) - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + if ( ecp_get_type( grp ) != ECP_TYPE_SHORT_WEIERSTRASS ) + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); mbedtls_ecp_point_init( &mP ); @@ -1738,7 +1814,7 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, cleanup: mbedtls_ecp_point_free( &mP ); - return( ret ); + return ( ret ); } @@ -1749,10 +1825,10 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R, static int ecp_check_pubkey_mx( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt ) { /* [Curve25519 p. 5] Just check X is the correct number of bytes */ - if( mbedtls_mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_size( &pt->X ) > ( grp->nbits + 7 ) / 8 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); - return( 0 ); + return ( 0 ); } #endif /* ECP_MONTGOMERY */ @@ -1762,18 +1838,18 @@ static int ecp_check_pubkey_mx( const mbedtls_ecp_group *grp, const mbedtls_ecp_ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_point *pt ) { /* Must use affine coordinates */ - if( mbedtls_mpi_cmp_int( &pt->Z, 1 ) != 0 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_cmp_int( &pt->Z, 1 ) != 0 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - return( ecp_check_pubkey_mx( grp, pt ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) + return ( ecp_check_pubkey_mx( grp, pt ) ); #endif #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - return( ecp_check_pubkey_sw( grp, pt ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) + return ( ecp_check_pubkey_sw( grp, pt ) ); #endif - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } /* @@ -1782,58 +1858,55 @@ int mbedtls_ecp_check_pubkey( const mbedtls_ecp_group *grp, const mbedtls_ecp_po int mbedtls_ecp_check_privkey( const mbedtls_ecp_group *grp, const mbedtls_mpi *d ) { #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - { + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) { /* see [Curve25519] page 5 */ - if( mbedtls_mpi_get_bit( d, 0 ) != 0 || - mbedtls_mpi_get_bit( d, 1 ) != 0 || - mbedtls_mpi_get_bit( d, 2 ) != 0 || - mbedtls_mpi_bitlen( d ) - 1 != grp->nbits ) /* mbedtls_mpi_bitlen is one-based! */ - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_get_bit( d, 0 ) != 0 || + mbedtls_mpi_get_bit( d, 1 ) != 0 || + mbedtls_mpi_get_bit( d, 2 ) != 0 || + mbedtls_mpi_bitlen( d ) - 1 != grp->nbits ) /* mbedtls_mpi_bitlen is one-based! */ + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); else - return( 0 ); + return ( 0 ); } #endif /* ECP_MONTGOMERY */ #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - { + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) { /* see SEC1 3.2 */ - if( mbedtls_mpi_cmp_int( d, 1 ) < 0 || - mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ) - return( MBEDTLS_ERR_ECP_INVALID_KEY ); + if ( mbedtls_mpi_cmp_int( d, 1 ) < 0 || + mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ) + return ( MBEDTLS_ERR_ECP_INVALID_KEY ); else - return( 0 ); + return ( 0 ); } #endif /* ECP_SHORTWEIERSTRASS */ - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } /* * Generate a keypair with configurable base point */ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, - const mbedtls_ecp_point *G, - mbedtls_mpi *d, mbedtls_ecp_point *Q, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + const mbedtls_ecp_point *G, + mbedtls_mpi *d, mbedtls_ecp_point *Q, + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; size_t n_size = ( grp->nbits + 7 ) / 8; #if defined(ECP_MONTGOMERY) - if( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) - { + if ( ecp_get_type( grp ) == ECP_TYPE_MONTGOMERY ) { /* [M225] page 5 */ size_t b; do { MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( d, n_size, f_rng, p_rng ) ); - } while( mbedtls_mpi_bitlen( d ) == 0); + } while ( mbedtls_mpi_bitlen( d ) == 0); /* Make sure the most significant bit is nbits */ b = mbedtls_mpi_bitlen( d ) - 1; /* mbedtls_mpi_bitlen is one-based */ - if( b > grp->nbits ) + if ( b > grp->nbits ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( d, b - grp->nbits ) ); else MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, grp->nbits, 1 ) ); @@ -1842,53 +1915,48 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp, MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 0, 0 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 1, 0 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( d, 2, 0 ) ); - } - else + } else #endif /* ECP_MONTGOMERY */ #if defined(ECP_SHORTWEIERSTRASS) - if( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) - { - /* SEC1 3.2.1: Generate d such that 1 <= n < N */ - int count = 0; - unsigned char rnd[MBEDTLS_ECP_MAX_BYTES]; - - /* - * Match the procedure given in RFC 6979 (deterministic ECDSA): - * - use the same byte ordering; - * - keep the leftmost nbits bits of the generated octet string; - * - try until result is in the desired range. - * This also avoids any biais, which is especially important for ECDSA. - */ - do - { - MBEDTLS_MPI_CHK( f_rng( p_rng, rnd, n_size ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( d, rnd, n_size ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( d, 8 * n_size - grp->nbits ) ); + if ( ecp_get_type( grp ) == ECP_TYPE_SHORT_WEIERSTRASS ) { + /* SEC1 3.2.1: Generate d such that 1 <= n < N */ + int count = 0; + unsigned char rnd[MBEDTLS_ECP_MAX_BYTES]; /* - * Each try has at worst a probability 1/2 of failing (the msb has - * a probability 1/2 of being 0, and then the result will be < N), - * so after 30 tries failure probability is a most 2**(-30). - * - * For most curves, 1 try is enough with overwhelming probability, - * since N starts with a lot of 1s in binary, but some curves - * such as secp224k1 are actually very close to the worst case. + * Match the procedure given in RFC 6979 (deterministic ECDSA): + * - use the same byte ordering; + * - keep the leftmost nbits bits of the generated octet string; + * - try until result is in the desired range. + * This also avoids any biais, which is especially important for ECDSA. */ - if( ++count > 30 ) - return( MBEDTLS_ERR_ECP_RANDOM_FAILED ); - } - while( mbedtls_mpi_cmp_int( d, 1 ) < 0 || - mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ); - } - else + do { + MBEDTLS_MPI_CHK( f_rng( p_rng, rnd, n_size ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( d, rnd, n_size ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( d, 8 * n_size - grp->nbits ) ); + + /* + * Each try has at worst a probability 1/2 of failing (the msb has + * a probability 1/2 of being 0, and then the result will be < N), + * so after 30 tries failure probability is a most 2**(-30). + * + * For most curves, 1 try is enough with overwhelming probability, + * since N starts with a lot of 1s in binary, but some curves + * such as secp224k1 are actually very close to the worst case. + */ + if ( ++count > 30 ) + return ( MBEDTLS_ERR_ECP_RANDOM_FAILED ); + } while ( mbedtls_mpi_cmp_int( d, 1 ) < 0 || + mbedtls_mpi_cmp_mpi( d, &grp->N ) >= 0 ); + } else #endif /* ECP_SHORTWEIERSTRASS */ - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); cleanup: - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); - return( mbedtls_ecp_mul( grp, Q, d, G, f_rng, p_rng ) ); + return ( mbedtls_ecp_mul( grp, Q, d, G, f_rng, p_rng ) ); } /* @@ -1899,21 +1967,21 @@ int mbedtls_ecp_gen_keypair( mbedtls_ecp_group *grp, int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - return( mbedtls_ecp_gen_keypair_base( grp, &grp->G, d, Q, f_rng, p_rng ) ); + return ( mbedtls_ecp_gen_keypair_base( grp, &grp->G, d, Q, f_rng, p_rng ) ); } /* * Generate a keypair, prettier wrapper */ int mbedtls_ecp_gen_key( mbedtls_ecp_group_id grp_id, mbedtls_ecp_keypair *key, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; - if( ( ret = mbedtls_ecp_group_load( &key->grp, grp_id ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_group_load( &key->grp, grp_id ) ) != 0 ) + return ( ret ); - return( mbedtls_ecp_gen_keypair( &key->grp, &key->d, &key->Q, f_rng, p_rng ) ); + return ( mbedtls_ecp_gen_keypair( &key->grp, &key->d, &key->Q, f_rng, p_rng ) ); } /* @@ -1925,13 +1993,12 @@ int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ec mbedtls_ecp_point Q; mbedtls_ecp_group grp; - if( pub->grp.id == MBEDTLS_ECP_DP_NONE || - pub->grp.id != prv->grp.id || - mbedtls_mpi_cmp_mpi( &pub->Q.X, &prv->Q.X ) || - mbedtls_mpi_cmp_mpi( &pub->Q.Y, &prv->Q.Y ) || - mbedtls_mpi_cmp_mpi( &pub->Q.Z, &prv->Q.Z ) ) - { - return( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); + if ( pub->grp.id == MBEDTLS_ECP_DP_NONE || + pub->grp.id != prv->grp.id || + mbedtls_mpi_cmp_mpi( &pub->Q.X, &prv->Q.X ) || + mbedtls_mpi_cmp_mpi( &pub->Q.Y, &prv->Q.Y ) || + mbedtls_mpi_cmp_mpi( &pub->Q.Z, &prv->Q.Z ) ) { + return ( MBEDTLS_ERR_ECP_BAD_INPUT_DATA ); } mbedtls_ecp_point_init( &Q ); @@ -1943,10 +2010,9 @@ int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ec /* Also checks d is valid */ MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &Q, &prv->d, &prv->grp.G, NULL, NULL ) ); - if( mbedtls_mpi_cmp_mpi( &Q.X, &prv->Q.X ) || - mbedtls_mpi_cmp_mpi( &Q.Y, &prv->Q.Y ) || - mbedtls_mpi_cmp_mpi( &Q.Z, &prv->Q.Z ) ) - { + if ( mbedtls_mpi_cmp_mpi( &Q.X, &prv->Q.X ) || + mbedtls_mpi_cmp_mpi( &Q.Y, &prv->Q.Y ) || + mbedtls_mpi_cmp_mpi( &Q.Z, &prv->Q.Z ) ) { ret = MBEDTLS_ERR_ECP_BAD_INPUT_DATA; goto cleanup; } @@ -1955,7 +2021,7 @@ int mbedtls_ecp_check_pub_priv( const mbedtls_ecp_keypair *pub, const mbedtls_ec mbedtls_ecp_point_free( &Q ); mbedtls_ecp_group_free( &grp ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SELF_TEST) @@ -1972,8 +2038,7 @@ int mbedtls_ecp_self_test( int verbose ) mbedtls_mpi m; unsigned long add_c_prev, dbl_c_prev, mul_c_prev; /* exponents especially adapted for secp192r1 */ - const char *exponents[] = - { + const char *exponents[] = { "000000000000000000000000000000000000000000000001", /* one */ "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22830", /* N - 1 */ "5EA6F389A38B8BC81E767753B15AA5569E1782E30ABE7D25", /* random */ @@ -1994,7 +2059,7 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &grp, mbedtls_ecp_curve_list()->grp_id ) ); #endif - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECP test #1 (constant op_count, base point G): " ); /* Do a dummy multiplication first to trigger precomputation */ @@ -2007,8 +2072,7 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[0] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { + for ( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) { add_c_prev = add_count; dbl_c_prev = dbl_count; mul_c_prev = mul_count; @@ -2019,11 +2083,10 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[i] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &grp.G, NULL, NULL ) ); - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) + if ( add_count != add_c_prev || + dbl_count != dbl_c_prev || + mul_count != mul_c_prev ) { + if ( verbose != 0 ) mbedtls_printf( "failed (%u)\n", (unsigned int) i ); ret = 1; @@ -2031,10 +2094,10 @@ int mbedtls_ecp_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ECP test #2 (constant op_count, other point): " ); /* We computed P = 2G last time, use it */ @@ -2044,8 +2107,7 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[0] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - for( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) - { + for ( i = 1; i < sizeof( exponents ) / sizeof( exponents[0] ); i++ ) { add_c_prev = add_count; dbl_c_prev = dbl_count; mul_c_prev = mul_count; @@ -2056,11 +2118,10 @@ int mbedtls_ecp_self_test( int verbose ) MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &m, 16, exponents[i] ) ); MBEDTLS_MPI_CHK( mbedtls_ecp_mul( &grp, &R, &m, &P, NULL, NULL ) ); - if( add_count != add_c_prev || - dbl_count != dbl_c_prev || - mul_count != mul_c_prev ) - { - if( verbose != 0 ) + if ( add_count != add_c_prev || + dbl_count != dbl_c_prev || + mul_count != mul_c_prev ) { + if ( verbose != 0 ) mbedtls_printf( "failed (%u)\n", (unsigned int) i ); ret = 1; @@ -2068,12 +2129,12 @@ int mbedtls_ecp_self_test( int verbose ) } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: - if( ret < 0 && verbose != 0 ) + if ( ret < 0 && verbose != 0 ) mbedtls_printf( "Unexpected error, return code = %08X\n", ret ); mbedtls_ecp_group_free( &grp ); @@ -2081,10 +2142,10 @@ int mbedtls_ecp_self_test( int verbose ) mbedtls_ecp_point_free( &P ); mbedtls_mpi_free( &m ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/ecp_curves.c b/external_libs/mbedtls/library/ecp_curves.c index 9a6e8eb..d9e9412 100644 --- a/external_libs/mbedtls/library/ecp_curves.c +++ b/external_libs/mbedtls/library/ecp_curves.c @@ -581,7 +581,7 @@ static int ecp_group_load( mbedtls_ecp_group *grp, const mbedtls_mpi_uint *n, size_t nlen) { ecp_mpi_load( &grp->P, p, plen ); - if( a != NULL ) + if ( a != NULL ) ecp_mpi_load( &grp->A, a, alen ); ecp_mpi_load( &grp->B, b, blen ); ecp_mpi_load( &grp->N, n, nlen ); @@ -595,7 +595,7 @@ static int ecp_group_load( mbedtls_ecp_group *grp, grp->h = 1; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_ECP_NIST_OPTIM) @@ -678,10 +678,10 @@ static int ecp_use_curve25519( mbedtls_ecp_group *grp ) grp->nbits = 254; cleanup: - if( ret != 0 ) + if ( ret != 0 ) mbedtls_ecp_group_free( grp ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ @@ -694,80 +694,79 @@ int mbedtls_ecp_group_load( mbedtls_ecp_group *grp, mbedtls_ecp_group_id id ) grp->id = id; - switch( id ) - { + switch ( id ) { #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) case MBEDTLS_ECP_DP_SECP192R1: NIST_MODP( p192 ); - return( LOAD_GROUP( secp192r1 ) ); + return ( LOAD_GROUP( secp192r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP192R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) case MBEDTLS_ECP_DP_SECP224R1: NIST_MODP( p224 ); - return( LOAD_GROUP( secp224r1 ) ); + return ( LOAD_GROUP( secp224r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED) case MBEDTLS_ECP_DP_SECP256R1: NIST_MODP( p256 ); - return( LOAD_GROUP( secp256r1 ) ); + return ( LOAD_GROUP( secp256r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED) case MBEDTLS_ECP_DP_SECP384R1: NIST_MODP( p384 ); - return( LOAD_GROUP( secp384r1 ) ); + return ( LOAD_GROUP( secp384r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED) case MBEDTLS_ECP_DP_SECP521R1: NIST_MODP( p521 ); - return( LOAD_GROUP( secp521r1 ) ); + return ( LOAD_GROUP( secp521r1 ) ); #endif /* MBEDTLS_ECP_DP_SECP521R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED) case MBEDTLS_ECP_DP_SECP192K1: grp->modp = ecp_mod_p192k1; - return( LOAD_GROUP_A( secp192k1 ) ); + return ( LOAD_GROUP_A( secp192k1 ) ); #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED) case MBEDTLS_ECP_DP_SECP224K1: grp->modp = ecp_mod_p224k1; - return( LOAD_GROUP_A( secp224k1 ) ); + return ( LOAD_GROUP_A( secp224k1 ) ); #endif /* MBEDTLS_ECP_DP_SECP224K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED) case MBEDTLS_ECP_DP_SECP256K1: grp->modp = ecp_mod_p256k1; - return( LOAD_GROUP_A( secp256k1 ) ); + return ( LOAD_GROUP_A( secp256k1 ) ); #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) case MBEDTLS_ECP_DP_BP256R1: - return( LOAD_GROUP_A( brainpoolP256r1 ) ); + return ( LOAD_GROUP_A( brainpoolP256r1 ) ); #endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) case MBEDTLS_ECP_DP_BP384R1: - return( LOAD_GROUP_A( brainpoolP384r1 ) ); + return ( LOAD_GROUP_A( brainpoolP384r1 ) ); #endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) case MBEDTLS_ECP_DP_BP512R1: - return( LOAD_GROUP_A( brainpoolP512r1 ) ); + return ( LOAD_GROUP_A( brainpoolP512r1 ) ); #endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_CURVE25519_ENABLED) case MBEDTLS_ECP_DP_CURVE25519: grp->modp = ecp_mod_p255; - return( ecp_use_curve25519( grp ) ); + return ( ecp_use_curve25519( grp ) ); #endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ default: mbedtls_ecp_group_free( grp ); - return( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ); } } @@ -800,10 +799,11 @@ static inline void add64( mbedtls_mpi_uint *dst, mbedtls_mpi_uint *src, mbedtls_ { unsigned char i; mbedtls_mpi_uint c = 0; - for( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++, src++ ) - { - *dst += c; c = ( *dst < c ); - *dst += *src; c += ( *dst < *src ); + for ( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++, src++ ) { + *dst += c; + c = ( *dst < c ); + *dst += *src; + c += ( *dst < *src ); } *carry += c; } @@ -812,8 +812,7 @@ static inline void add64( mbedtls_mpi_uint *dst, mbedtls_mpi_uint *src, mbedtls_ static inline void carry64( mbedtls_mpi_uint *dst, mbedtls_mpi_uint *carry ) { unsigned char i; - for( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++ ) - { + for ( i = 0; i < 8 / sizeof( mbedtls_mpi_uint ); i++, dst++ ) { *dst += *carry; *carry = ( *dst < *carry ); } @@ -840,12 +839,19 @@ static int ecp_mod_p192( mbedtls_mpi *N ) p = N->p; end = p + N->n; - ADD( 3 ); ADD( 5 ); NEXT; // A0 += A3 + A5 - ADD( 3 ); ADD( 4 ); ADD( 5 ); NEXT; // A1 += A3 + A4 + A5 - ADD( 4 ); ADD( 5 ); LAST; // A2 += A4 + A5 + ADD( 3 ); + ADD( 5 ); + NEXT; // A0 += A3 + A5 + ADD( 3 ); + ADD( 4 ); + ADD( 5 ); + NEXT; // A1 += A3 + A4 + A5 + ADD( 4 ); + ADD( 5 ); + LAST; // A2 += A4 + A5 cleanup: - return( ret ); + return ( ret ); } #undef WIDTH @@ -961,11 +967,11 @@ static inline int fix_negative( mbedtls_mpi *N, signed char c, mbedtls_mpi *C, s #if !defined(MBEDTLS_HAVE_INT64) ((void) bits); #else - if( bits == 224 ) - C->p[ C->n - 1 ] = ((mbedtls_mpi_uint) -c) << 32; + if ( bits == 224 ) + C->p[ C->n - 1 ] = ((mbedtls_mpi_uint) - c) << 32; else #endif - C->p[ C->n - 1 ] = (mbedtls_mpi_uint) -c; + C->p[ C->n - 1 ] = (mbedtls_mpi_uint) - c; /* N = - ( C - N ) */ MBEDTLS_MPI_CHK( mbedtls_mpi_sub_abs( N, C, N ) ); @@ -973,7 +979,7 @@ static inline int fix_negative( mbedtls_mpi *N, signed char c, mbedtls_mpi *C, s cleanup: - return( ret ); + return ( ret ); } #if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED) @@ -984,16 +990,33 @@ static int ecp_mod_p224( mbedtls_mpi *N ) { INIT( 224 ); - SUB( 7 ); SUB( 11 ); NEXT; // A0 += -A7 - A11 - SUB( 8 ); SUB( 12 ); NEXT; // A1 += -A8 - A12 - SUB( 9 ); SUB( 13 ); NEXT; // A2 += -A9 - A13 - SUB( 10 ); ADD( 7 ); ADD( 11 ); NEXT; // A3 += -A10 + A7 + A11 - SUB( 11 ); ADD( 8 ); ADD( 12 ); NEXT; // A4 += -A11 + A8 + A12 - SUB( 12 ); ADD( 9 ); ADD( 13 ); NEXT; // A5 += -A12 + A9 + A13 - SUB( 13 ); ADD( 10 ); LAST; // A6 += -A13 + A10 + SUB( 7 ); + SUB( 11 ); + NEXT; // A0 += -A7 - A11 + SUB( 8 ); + SUB( 12 ); + NEXT; // A1 += -A8 - A12 + SUB( 9 ); + SUB( 13 ); + NEXT; // A2 += -A9 - A13 + SUB( 10 ); + ADD( 7 ); + ADD( 11 ); + NEXT; // A3 += -A10 + A7 + A11 + SUB( 11 ); + ADD( 8 ); + ADD( 12 ); + NEXT; // A4 += -A11 + A8 + A12 + SUB( 12 ); + ADD( 9 ); + ADD( 13 ); + NEXT; // A5 += -A12 + A9 + A13 + SUB( 13 ); + ADD( 10 ); + LAST; // A6 += -A13 + A10 cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP224R1_ENABLED */ @@ -1005,32 +1028,79 @@ static int ecp_mod_p256( mbedtls_mpi *N ) { INIT( 256 ); - ADD( 8 ); ADD( 9 ); - SUB( 11 ); SUB( 12 ); SUB( 13 ); SUB( 14 ); NEXT; // A0 - - ADD( 9 ); ADD( 10 ); - SUB( 12 ); SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A1 - - ADD( 10 ); ADD( 11 ); - SUB( 13 ); SUB( 14 ); SUB( 15 ); NEXT; // A2 - - ADD( 11 ); ADD( 11 ); ADD( 12 ); ADD( 12 ); ADD( 13 ); - SUB( 15 ); SUB( 8 ); SUB( 9 ); NEXT; // A3 - - ADD( 12 ); ADD( 12 ); ADD( 13 ); ADD( 13 ); ADD( 14 ); - SUB( 9 ); SUB( 10 ); NEXT; // A4 - - ADD( 13 ); ADD( 13 ); ADD( 14 ); ADD( 14 ); ADD( 15 ); - SUB( 10 ); SUB( 11 ); NEXT; // A5 - - ADD( 14 ); ADD( 14 ); ADD( 15 ); ADD( 15 ); ADD( 14 ); ADD( 13 ); - SUB( 8 ); SUB( 9 ); NEXT; // A6 - - ADD( 15 ); ADD( 15 ); ADD( 15 ); ADD( 8 ); - SUB( 10 ); SUB( 11 ); SUB( 12 ); SUB( 13 ); LAST; // A7 + ADD( 8 ); + ADD( 9 ); + SUB( 11 ); + SUB( 12 ); + SUB( 13 ); + SUB( 14 ); + NEXT; // A0 + + ADD( 9 ); + ADD( 10 ); + SUB( 12 ); + SUB( 13 ); + SUB( 14 ); + SUB( 15 ); + NEXT; // A1 + + ADD( 10 ); + ADD( 11 ); + SUB( 13 ); + SUB( 14 ); + SUB( 15 ); + NEXT; // A2 + + ADD( 11 ); + ADD( 11 ); + ADD( 12 ); + ADD( 12 ); + ADD( 13 ); + SUB( 15 ); + SUB( 8 ); + SUB( 9 ); + NEXT; // A3 + + ADD( 12 ); + ADD( 12 ); + ADD( 13 ); + ADD( 13 ); + ADD( 14 ); + SUB( 9 ); + SUB( 10 ); + NEXT; // A4 + + ADD( 13 ); + ADD( 13 ); + ADD( 14 ); + ADD( 14 ); + ADD( 15 ); + SUB( 10 ); + SUB( 11 ); + NEXT; // A5 + + ADD( 14 ); + ADD( 14 ); + ADD( 15 ); + ADD( 15 ); + ADD( 14 ); + ADD( 13 ); + SUB( 8 ); + SUB( 9 ); + NEXT; // A6 + + ADD( 15 ); + ADD( 15 ); + ADD( 15 ); + ADD( 8 ); + SUB( 10 ); + SUB( 11 ); + SUB( 12 ); + SUB( 13 ); + LAST; // A7 cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP256R1_ENABLED */ @@ -1042,44 +1112,98 @@ static int ecp_mod_p384( mbedtls_mpi *N ) { INIT( 384 ); - ADD( 12 ); ADD( 21 ); ADD( 20 ); - SUB( 23 ); NEXT; // A0 - - ADD( 13 ); ADD( 22 ); ADD( 23 ); - SUB( 12 ); SUB( 20 ); NEXT; // A2 - - ADD( 14 ); ADD( 23 ); - SUB( 13 ); SUB( 21 ); NEXT; // A2 - - ADD( 15 ); ADD( 12 ); ADD( 20 ); ADD( 21 ); - SUB( 14 ); SUB( 22 ); SUB( 23 ); NEXT; // A3 - - ADD( 21 ); ADD( 21 ); ADD( 16 ); ADD( 13 ); ADD( 12 ); ADD( 20 ); ADD( 22 ); - SUB( 15 ); SUB( 23 ); SUB( 23 ); NEXT; // A4 - - ADD( 22 ); ADD( 22 ); ADD( 17 ); ADD( 14 ); ADD( 13 ); ADD( 21 ); ADD( 23 ); - SUB( 16 ); NEXT; // A5 - - ADD( 23 ); ADD( 23 ); ADD( 18 ); ADD( 15 ); ADD( 14 ); ADD( 22 ); - SUB( 17 ); NEXT; // A6 - - ADD( 19 ); ADD( 16 ); ADD( 15 ); ADD( 23 ); - SUB( 18 ); NEXT; // A7 - - ADD( 20 ); ADD( 17 ); ADD( 16 ); - SUB( 19 ); NEXT; // A8 - - ADD( 21 ); ADD( 18 ); ADD( 17 ); - SUB( 20 ); NEXT; // A9 - - ADD( 22 ); ADD( 19 ); ADD( 18 ); - SUB( 21 ); NEXT; // A10 - - ADD( 23 ); ADD( 20 ); ADD( 19 ); - SUB( 22 ); LAST; // A11 + ADD( 12 ); + ADD( 21 ); + ADD( 20 ); + SUB( 23 ); + NEXT; // A0 + + ADD( 13 ); + ADD( 22 ); + ADD( 23 ); + SUB( 12 ); + SUB( 20 ); + NEXT; // A2 + + ADD( 14 ); + ADD( 23 ); + SUB( 13 ); + SUB( 21 ); + NEXT; // A2 + + ADD( 15 ); + ADD( 12 ); + ADD( 20 ); + ADD( 21 ); + SUB( 14 ); + SUB( 22 ); + SUB( 23 ); + NEXT; // A3 + + ADD( 21 ); + ADD( 21 ); + ADD( 16 ); + ADD( 13 ); + ADD( 12 ); + ADD( 20 ); + ADD( 22 ); + SUB( 15 ); + SUB( 23 ); + SUB( 23 ); + NEXT; // A4 + + ADD( 22 ); + ADD( 22 ); + ADD( 17 ); + ADD( 14 ); + ADD( 13 ); + ADD( 21 ); + ADD( 23 ); + SUB( 16 ); + NEXT; // A5 + + ADD( 23 ); + ADD( 23 ); + ADD( 18 ); + ADD( 15 ); + ADD( 14 ); + ADD( 22 ); + SUB( 17 ); + NEXT; // A6 + + ADD( 19 ); + ADD( 16 ); + ADD( 15 ); + ADD( 23 ); + SUB( 18 ); + NEXT; // A7 + + ADD( 20 ); + ADD( 17 ); + ADD( 16 ); + SUB( 19 ); + NEXT; // A8 + + ADD( 21 ); + ADD( 18 ); + ADD( 17 ); + SUB( 20 ); + NEXT; // A9 + + ADD( 22 ); + ADD( 19 ); + ADD( 18 ); + SUB( 21 ); + NEXT; // A10 + + ADD( 23 ); + ADD( 20 ); + ADD( 19 ); + SUB( 22 ); + LAST; // A11 cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP384R1_ENABLED */ @@ -1121,13 +1245,13 @@ static int ecp_mod_p521( mbedtls_mpi *N ) * we need to hold bits 513 to 1056, which is 34 limbs, that is * P521_WIDTH + 1. Otherwise P521_WIDTH is enough. */ - if( N->n < P521_WIDTH ) - return( 0 ); + if ( N->n < P521_WIDTH ) + return ( 0 ); /* M = A1 */ M.s = 1; M.n = N->n - ( P521_WIDTH - 1 ); - if( M.n > P521_WIDTH + 1 ) + if ( M.n > P521_WIDTH + 1 ) M.n = P521_WIDTH + 1; M.p = Mp; memcpy( Mp, N->p + P521_WIDTH - 1, M.n * sizeof( mbedtls_mpi_uint ) ); @@ -1135,14 +1259,14 @@ static int ecp_mod_p521( mbedtls_mpi *N ) /* N = A0 */ N->p[P521_WIDTH - 1] &= P521_MASK; - for( i = P521_WIDTH; i < N->n; i++ ) + for ( i = P521_WIDTH; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + A1 */ MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( N, N, &M ) ); cleanup: - return( ret ); + return ( ret ); } #undef P521_WIDTH @@ -1167,13 +1291,13 @@ static int ecp_mod_p255( mbedtls_mpi *N ) mbedtls_mpi M; mbedtls_mpi_uint Mp[P255_WIDTH + 2]; - if( N->n < P255_WIDTH ) - return( 0 ); + if ( N->n < P255_WIDTH ) + return ( 0 ); /* M = A1 */ M.s = 1; M.n = N->n - ( P255_WIDTH - 1 ); - if( M.n > P255_WIDTH + 1 ) + if ( M.n > P255_WIDTH + 1 ) M.n = P255_WIDTH + 1; M.p = Mp; memset( Mp, 0, sizeof Mp ); @@ -1183,7 +1307,7 @@ static int ecp_mod_p255( mbedtls_mpi *N ) /* N = A0 */ MBEDTLS_MPI_CHK( mbedtls_mpi_set_bit( N, 255, 0 ) ); - for( i = P255_WIDTH; i < N->n; i++ ) + for ( i = P255_WIDTH; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + 19 * A1 */ @@ -1191,7 +1315,7 @@ static int ecp_mod_p255( mbedtls_mpi *N ) MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( N, N, &M ) ); cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_CURVE25519_ENABLED */ @@ -1215,8 +1339,8 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t mbedtls_mpi M, R; mbedtls_mpi_uint Mp[P_KOBLITZ_MAX + P_KOBLITZ_R]; - if( N->n < p_limbs ) - return( 0 ); + if ( N->n < p_limbs ) + return ( 0 ); /* Init R */ R.s = 1; @@ -1229,18 +1353,18 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t /* M = A1 */ M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) + if ( M.n > p_limbs + adjust ) M.n = p_limbs + adjust; memset( Mp, 0, sizeof Mp ); memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( mbedtls_mpi_uint ) ); - if( shift != 0 ) + if ( shift != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &M, shift ) ); M.n += R.n - adjust; /* Make room for multiplication by R */ /* N = A0 */ - if( mask != 0 ) + if ( mask != 0 ) N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) + for ( i = p_limbs; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + R * A1 */ @@ -1251,18 +1375,18 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t /* M = A1 */ M.n = N->n - ( p_limbs - adjust ); - if( M.n > p_limbs + adjust ) + if ( M.n > p_limbs + adjust ) M.n = p_limbs + adjust; memset( Mp, 0, sizeof Mp ); memcpy( Mp, N->p + p_limbs - adjust, M.n * sizeof( mbedtls_mpi_uint ) ); - if( shift != 0 ) + if ( shift != 0 ) MBEDTLS_MPI_CHK( mbedtls_mpi_shift_r( &M, shift ) ); M.n += R.n - adjust; /* Make room for multiplication by R */ /* N = A0 */ - if( mask != 0 ) + if ( mask != 0 ) N->p[p_limbs - 1] &= mask; - for( i = p_limbs; i < N->n; i++ ) + for ( i = p_limbs; i < N->n; i++ ) N->p[i] = 0; /* N = A0 + R * A1 */ @@ -1270,7 +1394,7 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t MBEDTLS_MPI_CHK( mbedtls_mpi_add_abs( N, N, &M ) ); cleanup: - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED) || MBEDTLS_ECP_DP_SECP224K1_ENABLED) || @@ -1284,9 +1408,10 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t static int ecp_mod_p192k1( mbedtls_mpi *N ) { static mbedtls_mpi_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xC9, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; + BYTES_TO_T_UINT_8( 0xC9, 0x11, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) + }; - return( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); + return ( ecp_mod_koblitz( N, Rp, 192 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); } #endif /* MBEDTLS_ECP_DP_SECP192K1_ENABLED */ @@ -1298,12 +1423,13 @@ static int ecp_mod_p192k1( mbedtls_mpi *N ) static int ecp_mod_p224k1( mbedtls_mpi *N ) { static mbedtls_mpi_uint Rp[] = { - BYTES_TO_T_UINT_8( 0x93, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; + BYTES_TO_T_UINT_8( 0x93, 0x1A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) + }; #if defined(MBEDTLS_HAVE_INT64) - return( ecp_mod_koblitz( N, Rp, 4, 1, 32, 0xFFFFFFFF ) ); + return ( ecp_mod_koblitz( N, Rp, 4, 1, 32, 0xFFFFFFFF ) ); #else - return( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); + return ( ecp_mod_koblitz( N, Rp, 224 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); #endif } @@ -1317,8 +1443,9 @@ static int ecp_mod_p224k1( mbedtls_mpi *N ) static int ecp_mod_p256k1( mbedtls_mpi *N ) { static mbedtls_mpi_uint Rp[] = { - BYTES_TO_T_UINT_8( 0xD1, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) }; - return( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); + BYTES_TO_T_UINT_8( 0xD1, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 ) + }; + return ( ecp_mod_koblitz( N, Rp, 256 / 8 / sizeof( mbedtls_mpi_uint ), 0, 0, 0 ) ); } #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ diff --git a/external_libs/mbedtls/library/entropy.c b/external_libs/mbedtls/library/entropy.c index d4d1b27..79d3b93 100644 --- a/external_libs/mbedtls/library/entropy.c +++ b/external_libs/mbedtls/library/entropy.c @@ -60,8 +60,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #define ENTROPY_MAX_LOOP 256 /**< Maximum amount to loop before error */ @@ -129,19 +131,18 @@ void mbedtls_entropy_free( mbedtls_entropy_context *ctx ) } int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, - mbedtls_entropy_f_source_ptr f_source, void *p_source, - size_t threshold, int strong ) + mbedtls_entropy_f_source_ptr f_source, void *p_source, + size_t threshold, int strong ) { int index, ret = 0; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif index = ctx->source_count; - if( index >= MBEDTLS_ENTROPY_MAX_SOURCES ) - { + if ( index >= MBEDTLS_ENTROPY_MAX_SOURCES ) { ret = MBEDTLS_ERR_ENTROPY_MAX_SOURCES; goto exit; } @@ -155,11 +156,11 @@ int mbedtls_entropy_add_source( mbedtls_entropy_context *ctx, exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* @@ -173,8 +174,7 @@ static int entropy_update( mbedtls_entropy_context *ctx, unsigned char source_id size_t use_len = len; const unsigned char *p = data; - if( use_len > MBEDTLS_ENTROPY_BLOCK_SIZE ) - { + if ( use_len > MBEDTLS_ENTROPY_BLOCK_SIZE ) { #if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR) mbedtls_sha512( data, len, tmp, 0 ); #else @@ -195,27 +195,27 @@ static int entropy_update( mbedtls_entropy_context *ctx, unsigned char source_id mbedtls_sha256_update( &ctx->accumulator, p, use_len ); #endif - return( 0 ); + return ( 0 ); } int mbedtls_entropy_update_manual( mbedtls_entropy_context *ctx, - const unsigned char *data, size_t len ) + const unsigned char *data, size_t len ) { int ret; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = entropy_update( ctx, MBEDTLS_ENTROPY_SOURCE_MANUAL, data, len ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* @@ -227,38 +227,35 @@ static int entropy_gather_internal( mbedtls_entropy_context *ctx ) unsigned char buf[MBEDTLS_ENTROPY_MAX_GATHER]; size_t olen; - if( ctx->source_count == 0 ) - return( MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED ); + if ( ctx->source_count == 0 ) + return ( MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED ); /* * Run through our entropy sources */ - for( i = 0; i < ctx->source_count; i++ ) - { - if( ctx->source[i].strong == MBEDTLS_ENTROPY_SOURCE_STRONG ) + for ( i = 0; i < ctx->source_count; i++ ) { + if ( ctx->source[i].strong == MBEDTLS_ENTROPY_SOURCE_STRONG ) have_one_strong = 1; olen = 0; - if( ( ret = ctx->source[i].f_source( ctx->source[i].p_source, - buf, MBEDTLS_ENTROPY_MAX_GATHER, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = ctx->source[i].f_source( ctx->source[i].p_source, + buf, MBEDTLS_ENTROPY_MAX_GATHER, &olen ) ) != 0 ) { + return ( ret ); } /* * Add if we actually gathered something */ - if( olen > 0 ) - { + if ( olen > 0 ) { entropy_update( ctx, (unsigned char) i, buf, olen ); ctx->source[i].size += olen; } } - if( have_one_strong == 0 ) - return( MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE ); + if ( have_one_strong == 0 ) + return ( MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE ); - return( 0 ); + return ( 0 ); } /* @@ -269,18 +266,18 @@ int mbedtls_entropy_gather( mbedtls_entropy_context *ctx ) int ret; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = entropy_gather_internal( ctx ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) @@ -289,46 +286,42 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) mbedtls_entropy_context *ctx = (mbedtls_entropy_context *) data; unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; - if( len > MBEDTLS_ENTROPY_BLOCK_SIZE ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( len > MBEDTLS_ENTROPY_BLOCK_SIZE ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); #if defined(MBEDTLS_ENTROPY_NV_SEED) /* Update the NV entropy seed before generating any entropy for outside * use. */ - if( ctx->initial_entropy_run == 0 ) - { + if ( ctx->initial_entropy_run == 0 ) { ctx->initial_entropy_run = 1; - if( ( ret = mbedtls_entropy_update_nv_seed( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_entropy_update_nv_seed( ctx ) ) != 0 ) + return ( ret ); } #endif #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif /* * Always gather extra entropy before a call */ - do - { - if( count++ > ENTROPY_MAX_LOOP ) - { + do { + if ( count++ > ENTROPY_MAX_LOOP ) { ret = MBEDTLS_ERR_ENTROPY_SOURCE_FAILED; goto exit; } - if( ( ret = entropy_gather_internal( ctx ) ) != 0 ) + if ( ( ret = entropy_gather_internal( ctx ) ) != 0 ) goto exit; done = 1; - for( i = 0; i < ctx->source_count; i++ ) - if( ctx->source[i].size < ctx->source[i].threshold ) + for ( i = 0; i < ctx->source_count; i++ ) + if ( ctx->source[i].size < ctx->source[i].threshold ) done = 0; - } - while( ! done ); + } while ( ! done ); memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); @@ -362,7 +355,7 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) mbedtls_sha256( buf, MBEDTLS_ENTROPY_BLOCK_SIZE, buf, 0 ); #endif /* MBEDTLS_ENTROPY_SHA512_ACCUMULATOR */ - for( i = 0; i < ctx->source_count; i++ ) + for ( i = 0; i < ctx->source_count; i++ ) ctx->source[i].size = 0; memcpy( output, buf, len ); @@ -371,11 +364,11 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len ) exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_ENTROPY_NV_SEED) @@ -385,17 +378,17 @@ int mbedtls_entropy_update_nv_seed( mbedtls_entropy_context *ctx ) unsigned char buf[ MBEDTLS_ENTROPY_MAX_SEED_SIZE ]; /* Read new seed and write it to NV */ - if( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) + return ( ret ); - if( mbedtls_nv_seed_write( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + if ( mbedtls_nv_seed_write( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); /* Manually update the remaining stream with a separator value to diverge */ memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); mbedtls_entropy_update_manual( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ENTROPY_NV_SEED */ @@ -406,14 +399,13 @@ int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *p FILE *f; unsigned char buf[MBEDTLS_ENTROPY_BLOCK_SIZE]; - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + if ( ( f = fopen( path, "wb" ) ) == NULL ) + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); - if( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) + if ( ( ret = mbedtls_entropy_func( ctx, buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) ) != 0 ) goto exit; - if( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != MBEDTLS_ENTROPY_BLOCK_SIZE ) - { + if ( fwrite( buf, 1, MBEDTLS_ENTROPY_BLOCK_SIZE, f ) != MBEDTLS_ENTROPY_BLOCK_SIZE ) { ret = MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR; goto exit; } @@ -422,7 +414,7 @@ int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *p exit: fclose( f ); - return( ret ); + return ( ret ); } int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *path ) @@ -431,27 +423,26 @@ int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char * size_t n; unsigned char buf[ MBEDTLS_ENTROPY_MAX_SEED_SIZE ]; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); n = (size_t) ftell( f ); fseek( f, 0, SEEK_SET ); - if( n > MBEDTLS_ENTROPY_MAX_SEED_SIZE ) + if ( n > MBEDTLS_ENTROPY_MAX_SEED_SIZE ) n = MBEDTLS_ENTROPY_MAX_SEED_SIZE; - if( fread( buf, 1, n, f ) != n ) - { + if ( fread( buf, 1, n, f ) != n ) { fclose( f ); - return( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR ); } fclose( f ); mbedtls_entropy_update_manual( ctx, buf, n ); - return( mbedtls_entropy_write_seed_file( ctx, path ) ); + return ( mbedtls_entropy_write_seed_file( ctx, path ) ); } #endif /* MBEDTLS_FS_IO */ @@ -468,7 +459,7 @@ static int entropy_dummy_source( void *data, unsigned char *output, memset( output, 0x2a, len ); *olen = len; - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_TEST_NULL_ENTROPY */ @@ -481,39 +472,36 @@ static int mbedtls_entropy_source_self_test_gather( unsigned char *buf, size_t b size_t olen = 0; size_t attempts = buf_len; - while( attempts > 0 && entropy_len < buf_len ) - { - if( ( ret = mbedtls_hardware_poll( NULL, buf + entropy_len, - buf_len - entropy_len, &olen ) ) != 0 ) - return( ret ); + while ( attempts > 0 && entropy_len < buf_len ) { + if ( ( ret = mbedtls_hardware_poll( NULL, buf + entropy_len, + buf_len - entropy_len, &olen ) ) != 0 ) + return ( ret ); entropy_len += olen; attempts--; } - if( entropy_len < buf_len ) - { + if ( entropy_len < buf_len ) { ret = 1; } - return( ret ); + return ( ret ); } static int mbedtls_entropy_source_self_test_check_bits( const unsigned char *buf, - size_t buf_len ) + size_t buf_len ) { - unsigned char set= 0xFF; + unsigned char set = 0xFF; unsigned char unset = 0x00; size_t i; - for( i = 0; i < buf_len; i++ ) - { + for ( i = 0; i < buf_len; i++ ) { set &= buf[i]; unset |= buf[i]; } - return( set == 0xFF || unset == 0x00 ); + return ( set == 0xFF || unset == 0x00 ); } /* @@ -533,21 +521,21 @@ int mbedtls_entropy_source_self_test( int verbose ) unsigned char buf0[2 * sizeof( unsigned long long int )]; unsigned char buf1[2 * sizeof( unsigned long long int )]; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ENTROPY_BIAS test: " ); memset( buf0, 0x00, sizeof( buf0 ) ); memset( buf1, 0x00, sizeof( buf1 ) ); - if( ( ret = mbedtls_entropy_source_self_test_gather( buf0, sizeof( buf0 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_gather( buf0, sizeof( buf0 ) ) ) != 0 ) goto cleanup; - if( ( ret = mbedtls_entropy_source_self_test_gather( buf1, sizeof( buf1 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_gather( buf1, sizeof( buf1 ) ) ) != 0 ) goto cleanup; /* Make sure that the returned values are not all 0 or 1 */ - if( ( ret = mbedtls_entropy_source_self_test_check_bits( buf0, sizeof( buf0 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_check_bits( buf0, sizeof( buf0 ) ) ) != 0 ) goto cleanup; - if( ( ret = mbedtls_entropy_source_self_test_check_bits( buf1, sizeof( buf1 ) ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test_check_bits( buf1, sizeof( buf1 ) ) ) != 0 ) goto cleanup; /* Make sure that the entropy source is not returning values in a @@ -555,9 +543,8 @@ int mbedtls_entropy_source_self_test( int verbose ) ret = memcmp( buf0, buf1, sizeof( buf0 ) ) == 0; cleanup: - if( verbose != 0 ) - { - if( ret != 0 ) + if ( verbose != 0 ) { + if ( ret != 0 ) mbedtls_printf( "failed\n" ); else mbedtls_printf( "passed\n" ); @@ -565,7 +552,7 @@ int mbedtls_entropy_source_self_test( int verbose ) mbedtls_printf( "\n" ); } - return( ret != 0 ); + return ( ret != 0 ); } #endif /* MBEDTLS_ENTROPY_HARDWARE_ALT */ @@ -585,22 +572,22 @@ int mbedtls_entropy_self_test( int verbose ) size_t i, j; #endif /* !MBEDTLS_TEST_NULL_ENTROPY */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " ENTROPY test: " ); #if !defined(MBEDTLS_TEST_NULL_ENTROPY) mbedtls_entropy_init( &ctx ); /* First do a gather to make sure we have default sources */ - if( ( ret = mbedtls_entropy_gather( &ctx ) ) != 0 ) + if ( ( ret = mbedtls_entropy_gather( &ctx ) ) != 0 ) goto cleanup; ret = mbedtls_entropy_add_source( &ctx, entropy_dummy_source, NULL, 16, MBEDTLS_ENTROPY_SOURCE_WEAK ); - if( ret != 0 ) + if ( ret != 0 ) goto cleanup; - if( ( ret = mbedtls_entropy_update_manual( &ctx, buf, sizeof buf ) ) != 0 ) + if ( ( ret = mbedtls_entropy_update_manual( &ctx, buf, sizeof buf ) ) != 0 ) goto cleanup; /* @@ -611,26 +598,23 @@ int mbedtls_entropy_self_test( int verbose ) * each of the 32 or 64 bytes to be non-zero has a false failure rate * of at most 2^(-58) which is acceptable. */ - for( i = 0; i < 8; i++ ) - { - if( ( ret = mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ) ) != 0 ) + for ( i = 0; i < 8; i++ ) { + if ( ( ret = mbedtls_entropy_func( &ctx, buf, sizeof( buf ) ) ) != 0 ) goto cleanup; - for( j = 0; j < sizeof( buf ); j++ ) + for ( j = 0; j < sizeof( buf ); j++ ) acc[j] |= buf[j]; } - for( j = 0; j < sizeof( buf ); j++ ) - { - if( acc[j] == 0 ) - { + for ( j = 0; j < sizeof( buf ); j++ ) { + if ( acc[j] == 0 ) { ret = 1; goto cleanup; } } #if defined(MBEDTLS_ENTROPY_HARDWARE_ALT) - if( ( ret = mbedtls_entropy_source_self_test( 0 ) ) != 0 ) + if ( ( ret = mbedtls_entropy_source_self_test( 0 ) ) != 0 ) goto cleanup; #endif @@ -638,9 +622,8 @@ int mbedtls_entropy_self_test( int verbose ) mbedtls_entropy_free( &ctx ); #endif /* !MBEDTLS_TEST_NULL_ENTROPY */ - if( verbose != 0 ) - { - if( ret != 0 ) + if ( verbose != 0 ) { + if ( ret != 0 ) mbedtls_printf( "failed\n" ); else mbedtls_printf( "passed\n" ); @@ -648,7 +631,7 @@ int mbedtls_entropy_self_test( int verbose ) mbedtls_printf( "\n" ); } - return( ret != 0 ); + return ( ret != 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/entropy_poll.c b/external_libs/mbedtls/library/entropy_poll.c index a116e60..f1f207e 100644 --- a/external_libs/mbedtls/library/entropy_poll.c +++ b/external_libs/mbedtls/library/entropy_poll.c @@ -57,28 +57,26 @@ #include int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len, - size_t *olen ) + size_t *olen ) { HCRYPTPROV provider; ((void) data); *olen = 0; - if( CryptAcquireContext( &provider, NULL, NULL, - PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) - { - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( CryptAcquireContext( &provider, NULL, NULL, + PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) == FALSE ) { + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } - if( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) - { + if ( CryptGenRandom( provider, (DWORD) len, output ) == FALSE ) { CryptReleaseContext( provider, 0 ); - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } CryptReleaseContext( provider, 0 ); *olen = len; - return( 0 ); + return ( 0 ); } #else /* _WIN32 && !EFIX64 && !EFI32 */ @@ -102,7 +100,7 @@ static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags ) #endif #endif - return( syscall( SYS_getrandom, buf, buflen, flags ) ); + return ( syscall( SYS_getrandom, buf, buflen, flags ) ); } #include @@ -118,28 +116,28 @@ static int check_version_3_17_plus( void ) ver = un.release; /* Check major version; assume a single digit */ - if( ver[0] < '3' || ver[0] > '9' || ver [1] != '.' ) - return( -1 ); + if ( ver[0] < '3' || ver[0] > '9' || ver [1] != '.' ) + return ( -1 ); - if( ver[0] - '0' > 3 ) - return( 0 ); + if ( ver[0] - '0' > 3 ) + return ( 0 ); /* Ok, so now we know major == 3, check minor. * Assume 1 or 2 digits. */ - if( ver[2] < '0' || ver[2] > '9' ) - return( -1 ); + if ( ver[2] < '0' || ver[2] > '9' ) + return ( -1 ); minor = ver[2] - '0'; - if( ver[3] >= '0' && ver[3] <= '9' ) + if ( ver[3] >= '0' && ver[3] <= '9' ) minor = 10 * minor + ver[3] - '0'; - else if( ver [3] != '.' ) - return( -1 ); + else if ( ver [3] != '.' ) + return ( -1 ); - if( minor < 17 ) - return( -1 ); + if ( minor < 17 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } static int has_getrandom = -1; #endif /* SYS_getrandom */ @@ -148,97 +146,95 @@ static int has_getrandom = -1; #include int mbedtls_platform_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { FILE *file; size_t read_len; ((void) data); #if defined(HAVE_GETRANDOM) - if( has_getrandom == -1 ) + if ( has_getrandom == -1 ) has_getrandom = ( check_version_3_17_plus() == 0 ); - if( has_getrandom ) - { + if ( has_getrandom ) { int ret; - if( ( ret = getrandom_wrapper( output, len, 0 ) ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( ( ret = getrandom_wrapper( output, len, 0 ) ) < 0 ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); *olen = ret; - return( 0 ); + return ( 0 ); } #endif /* HAVE_GETRANDOM */ *olen = 0; file = fopen( "/dev/urandom", "rb" ); - if( file == NULL ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( file == NULL ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); read_len = fread( output, 1, len, file ); - if( read_len != len ) - { + if ( read_len != len ) { fclose( file ); - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); } fclose( file ); *olen = len; - return( 0 ); + return ( 0 ); } #endif /* _WIN32 && !EFIX64 && !EFI32 */ #endif /* !MBEDTLS_NO_PLATFORM_ENTROPY */ #if defined(MBEDTLS_TEST_NULL_ENTROPY) int mbedtls_null_entropy_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { ((void) data); ((void) output); *olen = 0; - if( len < sizeof(unsigned char) ) - return( 0 ); + if ( len < sizeof(unsigned char) ) + return ( 0 ); *olen = sizeof(unsigned char); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_TIMING_C) int mbedtls_hardclock_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { unsigned long timer = mbedtls_timing_hardclock(); ((void) data); *olen = 0; - if( len < sizeof(unsigned long) ) - return( 0 ); + if ( len < sizeof(unsigned long) ) + return ( 0 ); memcpy( output, &timer, sizeof(unsigned long) ); *olen = sizeof(unsigned long); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_TIMING_C */ #if defined(MBEDTLS_HAVEGE_C) int mbedtls_havege_poll( void *data, - unsigned char *output, size_t len, size_t *olen ) + unsigned char *output, size_t len, size_t *olen ) { mbedtls_havege_state *hs = (mbedtls_havege_state *) data; *olen = 0; - if( mbedtls_havege_random( hs, output, len ) != 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( mbedtls_havege_random( hs, output, len ) != 0 ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); *olen = len; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVEGE_C */ @@ -252,16 +248,16 @@ int mbedtls_nv_seed_poll( void *data, memset( buf, 0, MBEDTLS_ENTROPY_BLOCK_SIZE ); - if( mbedtls_nv_seed_read( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) - return( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); + if ( mbedtls_nv_seed_read( buf, MBEDTLS_ENTROPY_BLOCK_SIZE ) < 0 ) + return ( MBEDTLS_ERR_ENTROPY_SOURCE_FAILED ); - if( len < use_len ) - use_len = len; + if ( len < use_len ) + use_len = len; memcpy( output, buf, use_len ); *olen = use_len; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ENTROPY_NV_SEED */ diff --git a/external_libs/mbedtls/library/error.c b/external_libs/mbedtls/library/error.c index dd2db0c..9359641 100644 --- a/external_libs/mbedtls/library/error.c +++ b/external_libs/mbedtls/library/error.c @@ -155,341 +155,339 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) size_t len; int use_ret; - if( buflen == 0 ) + if ( buflen == 0 ) return; memset( buf, 0x00, buflen ); - if( ret < 0 ) + if ( ret < 0 ) ret = -ret; - if( ret & 0xFF80 ) - { + if ( ret & 0xFF80 ) { use_ret = ret & 0xFF80; // High level error codes // // BEGIN generated code #if defined(MBEDTLS_CIPHER_C) - if( use_ret == -(MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "CIPHER - The selected feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "CIPHER - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "CIPHER - Failed to allocate memory" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_PADDING) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_PADDING) ) mbedtls_snprintf( buf, buflen, "CIPHER - Input data contains invalid padding and is rejected" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED) ) mbedtls_snprintf( buf, buflen, "CIPHER - Decryption of block requires a full block" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_AUTH_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_AUTH_FAILED) ) mbedtls_snprintf( buf, buflen, "CIPHER - Authentication failed (for AEAD modes)" ); - if( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_CONTEXT) ) + if ( use_ret == -(MBEDTLS_ERR_CIPHER_INVALID_CONTEXT) ) mbedtls_snprintf( buf, buflen, "CIPHER - The context is invalid, eg because it was free()ed" ); #endif /* MBEDTLS_CIPHER_C */ #if defined(MBEDTLS_DHM_C) - if( use_ret == -(MBEDTLS_ERR_DHM_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "DHM - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_DHM_READ_PARAMS_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_READ_PARAMS_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Reading of the DHM parameters failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Making of the DHM parameters failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_READ_PUBLIC_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Reading of the public values failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_MAKE_PUBLIC_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Making of the public value failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_CALC_SECRET_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_CALC_SECRET_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Calculation of the DHM secret failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "DHM - The ASN.1 data is not formatted correctly" ); - if( use_ret == -(MBEDTLS_ERR_DHM_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "DHM - Allocation of memory failed" ); - if( use_ret == -(MBEDTLS_ERR_DHM_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_DHM_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "DHM - Read/write of file failed" ); #endif /* MBEDTLS_DHM_C */ #if defined(MBEDTLS_ECP_C) - if( use_ret == -(MBEDTLS_ERR_ECP_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "ECP - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "ECP - The buffer is too small to write to" ); - if( use_ret == -(MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "ECP - Requested curve not available" ); - if( use_ret == -(MBEDTLS_ERR_ECP_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "ECP - The signature is not valid" ); - if( use_ret == -(MBEDTLS_ERR_ECP_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "ECP - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_ECP_RANDOM_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_RANDOM_FAILED) ) mbedtls_snprintf( buf, buflen, "ECP - Generation of random value, such as (ephemeral) key, failed" ); - if( use_ret == -(MBEDTLS_ERR_ECP_INVALID_KEY) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_INVALID_KEY) ) mbedtls_snprintf( buf, buflen, "ECP - Invalid private or public key" ); - if( use_ret == -(MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH) ) mbedtls_snprintf( buf, buflen, "ECP - Signature is valid but shorter than the user-supplied length" ); #endif /* MBEDTLS_ECP_C */ #if defined(MBEDTLS_MD_C) - if( use_ret == -(MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_MD_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "MD - The selected feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_MD_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_MD_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "MD - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_MD_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_MD_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "MD - Failed to allocate memory" ); - if( use_ret == -(MBEDTLS_ERR_MD_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_MD_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "MD - Opening or reading of file failed" ); #endif /* MBEDTLS_MD_C */ #if defined(MBEDTLS_PEM_PARSE_C) || defined(MBEDTLS_PEM_WRITE_C) - if( use_ret == -(MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT) ) mbedtls_snprintf( buf, buflen, "PEM - No PEM header or footer found" ); - if( use_ret == -(MBEDTLS_ERR_PEM_INVALID_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_INVALID_DATA) ) mbedtls_snprintf( buf, buflen, "PEM - PEM string is not as expected" ); - if( use_ret == -(MBEDTLS_ERR_PEM_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "PEM - Failed to allocate memory" ); - if( use_ret == -(MBEDTLS_ERR_PEM_INVALID_ENC_IV) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_INVALID_ENC_IV) ) mbedtls_snprintf( buf, buflen, "PEM - RSA IV is not in hex-format" ); - if( use_ret == -(MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG) ) mbedtls_snprintf( buf, buflen, "PEM - Unsupported key encryption algorithm" ); - if( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_REQUIRED) ) mbedtls_snprintf( buf, buflen, "PEM - Private key password can't be empty" ); - if( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PEM - Given private key password does not allow for correct decryption" ); - if( use_ret == -(MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PEM - Unavailable feature, e.g. hashing/encryption combination" ); - if( use_ret == -(MBEDTLS_ERR_PEM_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PEM_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PEM - Bad input parameters to function" ); #endif /* MBEDTLS_PEM_PARSE_C || MBEDTLS_PEM_WRITE_C */ #if defined(MBEDTLS_PK_C) - if( use_ret == -(MBEDTLS_ERR_PK_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_PK_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "PK - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_PK_TYPE_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PK_TYPE_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PK - Type mismatch, eg attempt to encrypt with an ECDSA key" ); - if( use_ret == -(MBEDTLS_ERR_PK_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PK_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PK - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_PK_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_PK_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "PK - Read/write of file failed" ); - if( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_VERSION) ) mbedtls_snprintf( buf, buflen, "PK - Unsupported key version" ); - if( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_PK_KEY_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "PK - Invalid key tag or value" ); - if( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_PK_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_PK_ALG) ) mbedtls_snprintf( buf, buflen, "PK - Key algorithm is unsupported (only RSA and EC are supported)" ); - if( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_REQUIRED) ) mbedtls_snprintf( buf, buflen, "PK - Private key password can't be empty" ); - if( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PK_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PK - Given private key password does not allow for correct decryption" ); - if( use_ret == -(MBEDTLS_ERR_PK_INVALID_PUBKEY) ) + if ( use_ret == -(MBEDTLS_ERR_PK_INVALID_PUBKEY) ) mbedtls_snprintf( buf, buflen, "PK - The pubkey tag or value is invalid (only RSA and EC are supported)" ); - if( use_ret == -(MBEDTLS_ERR_PK_INVALID_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_PK_INVALID_ALG) ) mbedtls_snprintf( buf, buflen, "PK - The algorithm tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE) ) + if ( use_ret == -(MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE) ) mbedtls_snprintf( buf, buflen, "PK - Elliptic curve is unsupported (only NIST curves are supported)" ); - if( use_ret == -(MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PK - Unavailable feature, e.g. RSA disabled for RSA key" ); - if( use_ret == -(MBEDTLS_ERR_PK_SIG_LEN_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PK_SIG_LEN_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PK - The signature is valid but its length is less than expected" ); #endif /* MBEDTLS_PK_C */ #if defined(MBEDTLS_PKCS12_C) - if( use_ret == -(MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PKCS12 - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PKCS12 - Feature not available, e.g. unsupported encryption scheme" ); - if( use_ret == -(MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "PKCS12 - PBE ASN.1 data not as expected" ); - if( use_ret == -(MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PKCS12 - Given private key password does not allow for correct decryption" ); #endif /* MBEDTLS_PKCS12_C */ #if defined(MBEDTLS_PKCS5_C) - if( use_ret == -(MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_PKCS5_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Unexpected ASN.1 data" ); - if( use_ret == -(MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Requested encryption or digest alg not available" ); - if( use_ret == -(MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH) ) mbedtls_snprintf( buf, buflen, "PKCS5 - Given private key password does not allow for correct decryption" ); #endif /* MBEDTLS_PKCS5_C */ #if defined(MBEDTLS_RSA_C) - if( use_ret == -(MBEDTLS_ERR_RSA_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "RSA - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_RSA_INVALID_PADDING) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_INVALID_PADDING) ) mbedtls_snprintf( buf, buflen, "RSA - Input data contains invalid padding and is rejected" ); - if( use_ret == -(MBEDTLS_ERR_RSA_KEY_GEN_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_KEY_GEN_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - Something failed during generation of a key" ); - if( use_ret == -(MBEDTLS_ERR_RSA_KEY_CHECK_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_KEY_CHECK_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - Key failed to pass the library's validity check" ); - if( use_ret == -(MBEDTLS_ERR_RSA_PUBLIC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_PUBLIC_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The public key operation failed" ); - if( use_ret == -(MBEDTLS_ERR_RSA_PRIVATE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_PRIVATE_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The private key operation failed" ); - if( use_ret == -(MBEDTLS_ERR_RSA_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The PKCS#1 verification failed" ); - if( use_ret == -(MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE) ) mbedtls_snprintf( buf, buflen, "RSA - The output buffer for decryption is not large enough" ); - if( use_ret == -(MBEDTLS_ERR_RSA_RNG_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_RSA_RNG_FAILED) ) mbedtls_snprintf( buf, buflen, "RSA - The random generator failed to generate non-zeros" ); #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_SSL_TLS_C) - if( use_ret == -(MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "SSL - The requested feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "SSL - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_MAC) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INVALID_MAC) ) mbedtls_snprintf( buf, buflen, "SSL - Verification of the message MAC failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_RECORD) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INVALID_RECORD) ) mbedtls_snprintf( buf, buflen, "SSL - An invalid SSL record was received" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CONN_EOF) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CONN_EOF) ) mbedtls_snprintf( buf, buflen, "SSL - The connection indicated an EOF" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_CIPHER) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_CIPHER) ) mbedtls_snprintf( buf, buflen, "SSL - An unknown cipher was received" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN) ) mbedtls_snprintf( buf, buflen, "SSL - The server has no ciphersuites in common with the client" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_RNG) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_RNG) ) mbedtls_snprintf( buf, buflen, "SSL - No RNG was provided to the SSL module" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE) ) mbedtls_snprintf( buf, buflen, "SSL - No client certification received from the client, but required by the authentication mode" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE) ) mbedtls_snprintf( buf, buflen, "SSL - Our own certificate(s) is/are too large to send in an SSL message" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - The own certificate is not set, but needed by the server" ); - if( use_ret == -(MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - The own private key or pre-shared key is not set, but needed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - No CA Chain is set, but required to operate" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE) ) mbedtls_snprintf( buf, buflen, "SSL - An unexpected message was received from our peer" ); - if( use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE) ) - { + if ( use_ret == -(MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE) ) { mbedtls_snprintf( buf, buflen, "SSL - A fatal alert message was received from our peer" ); return; } - if( use_ret == -(MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PEER_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Verification of our peer failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY) ) mbedtls_snprintf( buf, buflen, "SSL - The peer notified us that the connection is going to be closed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientHello handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ServerHello handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the Certificate handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the CertificateRequest handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ServerKeyExchange handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ServerHelloDone handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Read Public" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ClientKeyExchange handshake message failed in DHM / ECDH Calculate Secret" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the CertificateVerify handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the ChangeCipherSpec handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_FINISHED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_FINISHED) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the Finished handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Hardware acceleration function returned with error" ); - if( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH) ) mbedtls_snprintf( buf, buflen, "SSL - Hardware acceleration function skipped / left alone data" ); - if( use_ret == -(MBEDTLS_ERR_SSL_COMPRESSION_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_COMPRESSION_FAILED) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the compression / decompression failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION) ) mbedtls_snprintf( buf, buflen, "SSL - Handshake protocol not within min/max boundaries" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET) ) mbedtls_snprintf( buf, buflen, "SSL - Processing of the NewSessionTicket handshake message failed" ); - if( use_ret == -(MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED) ) mbedtls_snprintf( buf, buflen, "SSL - Session ticket has expired" ); - if( use_ret == -(MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH) ) mbedtls_snprintf( buf, buflen, "SSL - Public key type mismatch (eg, asked for RSA key exchange and presented EC key)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY) ) mbedtls_snprintf( buf, buflen, "SSL - Unknown identity received (eg, PSK identity)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INTERNAL_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INTERNAL_ERROR) ) mbedtls_snprintf( buf, buflen, "SSL - Internal error (eg, unexpected failure in lower-level module)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_COUNTER_WRAPPING) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_COUNTER_WRAPPING) ) mbedtls_snprintf( buf, buflen, "SSL - A counter would wrap (eg, too many messages exchanged)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO) ) mbedtls_snprintf( buf, buflen, "SSL - Unexpected message at ServerHello in renegotiation" ); - if( use_ret == -(MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED) ) mbedtls_snprintf( buf, buflen, "SSL - DTLS client must retry for hello verification" ); - if( use_ret == -(MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "SSL - A buffer is too small to receive or write a message" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE) ) mbedtls_snprintf( buf, buflen, "SSL - None of the common ciphersuites is usable (eg, no suitable certificate, see debug messages)" ); - if( use_ret == -(MBEDTLS_ERR_SSL_WANT_READ) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_WANT_READ) ) mbedtls_snprintf( buf, buflen, "SSL - Connection requires a read call" ); - if( use_ret == -(MBEDTLS_ERR_SSL_WANT_WRITE) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_WANT_WRITE) ) mbedtls_snprintf( buf, buflen, "SSL - Connection requires a write call" ); - if( use_ret == -(MBEDTLS_ERR_SSL_TIMEOUT) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_TIMEOUT) ) mbedtls_snprintf( buf, buflen, "SSL - The operation timed out" ); - if( use_ret == -(MBEDTLS_ERR_SSL_CLIENT_RECONNECT) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_CLIENT_RECONNECT) ) mbedtls_snprintf( buf, buflen, "SSL - The client initiated a reconnect from the same port" ); - if( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_RECORD) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_RECORD) ) mbedtls_snprintf( buf, buflen, "SSL - Record header looks valid but is not expected" ); - if( use_ret == -(MBEDTLS_ERR_SSL_NON_FATAL) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_NON_FATAL) ) mbedtls_snprintf( buf, buflen, "SSL - The alert message received indicates a non-fatal error" ); - if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH) ) + if ( use_ret == -(MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH) ) mbedtls_snprintf( buf, buflen, "SSL - Couldn't set the hash for verifying CertificateVerify" ); #endif /* MBEDTLS_SSL_TLS_C */ #if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) - if( use_ret == -(MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "X509 - Unavailable feature, e.g. RSA hashing/encryption combination" ); - if( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_OID) ) + if ( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_OID) ) mbedtls_snprintf( buf, buflen, "X509 - Requested OID is unknown" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_FORMAT) ) mbedtls_snprintf( buf, buflen, "X509 - The CRT/CRL/CSR format is invalid, e.g. different type expected" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_VERSION) ) mbedtls_snprintf( buf, buflen, "X509 - The CRT/CRL/CSR version element is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_SERIAL) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_SERIAL) ) mbedtls_snprintf( buf, buflen, "X509 - The serial tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_ALG) ) mbedtls_snprintf( buf, buflen, "X509 - The algorithm tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_NAME) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_NAME) ) mbedtls_snprintf( buf, buflen, "X509 - The name tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_DATE) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_DATE) ) mbedtls_snprintf( buf, buflen, "X509 - The date tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_SIGNATURE) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_SIGNATURE) ) mbedtls_snprintf( buf, buflen, "X509 - The signature tag or value invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_INVALID_EXTENSIONS) ) + if ( use_ret == -(MBEDTLS_ERR_X509_INVALID_EXTENSIONS) ) mbedtls_snprintf( buf, buflen, "X509 - The extension tag or value is invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_VERSION) ) + if ( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_VERSION) ) mbedtls_snprintf( buf, buflen, "X509 - CRT/CRL/CSR has an unsupported version number" ); - if( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG) ) + if ( use_ret == -(MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG) ) mbedtls_snprintf( buf, buflen, "X509 - Signature algorithm (oid) is unsupported" ); - if( use_ret == -(MBEDTLS_ERR_X509_SIG_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_X509_SIG_MISMATCH) ) mbedtls_snprintf( buf, buflen, "X509 - Signature algorithms do not match. (see \\c ::mbedtls_x509_crt sig_oid)" ); - if( use_ret == -(MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) ) mbedtls_snprintf( buf, buflen, "X509 - Certificate verification failed, e.g. CRL, CA or signature check failed" ); - if( use_ret == -(MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT) ) + if ( use_ret == -(MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT) ) mbedtls_snprintf( buf, buflen, "X509 - Format not recognized as DER or PEM" ); - if( use_ret == -(MBEDTLS_ERR_X509_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_X509_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "X509 - Input invalid" ); - if( use_ret == -(MBEDTLS_ERR_X509_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_X509_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "X509 - Allocation of memory failed" ); - if( use_ret == -(MBEDTLS_ERR_X509_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_X509_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "X509 - Read/write of file failed" ); - if( use_ret == -(MBEDTLS_ERR_X509_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_X509_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "X509 - Destination buffer is too small" ); #endif /* MBEDTLS_X509_USE_C || MBEDTLS_X509_CREATE_C */ // END generated code - if( strlen( buf ) == 0 ) + if ( strlen( buf ) == 0 ) mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); } use_ret = ret & ~0xFF80; - if( use_ret == 0 ) + if ( use_ret == 0 ) return; // If high level code is present, make a concatenation between both @@ -497,9 +495,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) // len = strlen( buf ); - if( len > 0 ) - { - if( buflen - len < 5 ) + if ( len > 0 ) { + if ( buflen - len < 5 ) return; mbedtls_snprintf( buf + len, buflen - len, " : " ); @@ -512,176 +509,176 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) // // BEGIN generated code #if defined(MBEDTLS_AES_C) - if( use_ret == -(MBEDTLS_ERR_AES_INVALID_KEY_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_AES_INVALID_KEY_LENGTH) ) mbedtls_snprintf( buf, buflen, "AES - Invalid key length" ); - if( use_ret == -(MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "AES - Invalid data input length" ); #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_ASN1_PARSE_C) - if( use_ret == -(MBEDTLS_ERR_ASN1_OUT_OF_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_OUT_OF_DATA) ) mbedtls_snprintf( buf, buflen, "ASN1 - Out of data when parsing an ASN1 data structure" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_UNEXPECTED_TAG) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_UNEXPECTED_TAG) ) mbedtls_snprintf( buf, buflen, "ASN1 - ASN1 tag was of an unexpected value" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_LENGTH) ) mbedtls_snprintf( buf, buflen, "ASN1 - Error when trying to determine the length or invalid length" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_LENGTH_MISMATCH) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_LENGTH_MISMATCH) ) mbedtls_snprintf( buf, buflen, "ASN1 - Actual length differs from expected length" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_INVALID_DATA) ) mbedtls_snprintf( buf, buflen, "ASN1 - Data is invalid. (not used)" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "ASN1 - Memory allocation failed" ); - if( use_ret == -(MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_ASN1_BUF_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "ASN1 - Buffer too small when writing ASN.1 data structure" ); #endif /* MBEDTLS_ASN1_PARSE_C */ #if defined(MBEDTLS_BASE64_C) - if( use_ret == -(MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "BASE64 - Output buffer too small" ); - if( use_ret == -(MBEDTLS_ERR_BASE64_INVALID_CHARACTER) ) + if ( use_ret == -(MBEDTLS_ERR_BASE64_INVALID_CHARACTER) ) mbedtls_snprintf( buf, buflen, "BASE64 - Invalid character in input" ); #endif /* MBEDTLS_BASE64_C */ #if defined(MBEDTLS_BIGNUM_C) - if( use_ret == -(MBEDTLS_ERR_MPI_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "BIGNUM - An error occurred while reading from or writing to a file" ); - if( use_ret == -(MBEDTLS_ERR_MPI_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "BIGNUM - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_MPI_INVALID_CHARACTER) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_INVALID_CHARACTER) ) mbedtls_snprintf( buf, buflen, "BIGNUM - There is an invalid character in the digit string" ); - if( use_ret == -(MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The buffer is too small to write to" ); - if( use_ret == -(MBEDTLS_ERR_MPI_NEGATIVE_VALUE) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_NEGATIVE_VALUE) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The input arguments are negative or result in illegal output" ); - if( use_ret == -(MBEDTLS_ERR_MPI_DIVISION_BY_ZERO) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_DIVISION_BY_ZERO) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The input argument for division is zero, which is not allowed" ); - if( use_ret == -(MBEDTLS_ERR_MPI_NOT_ACCEPTABLE) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_NOT_ACCEPTABLE) ) mbedtls_snprintf( buf, buflen, "BIGNUM - The input arguments are not acceptable" ); - if( use_ret == -(MBEDTLS_ERR_MPI_ALLOC_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_MPI_ALLOC_FAILED) ) mbedtls_snprintf( buf, buflen, "BIGNUM - Memory allocation failed" ); #endif /* MBEDTLS_BIGNUM_C */ #if defined(MBEDTLS_BLOWFISH_C) - if( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH) ) mbedtls_snprintf( buf, buflen, "BLOWFISH - Invalid key length" ); - if( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "BLOWFISH - Invalid data input length" ); #endif /* MBEDTLS_BLOWFISH_C */ #if defined(MBEDTLS_CAMELLIA_C) - if( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH) ) mbedtls_snprintf( buf, buflen, "CAMELLIA - Invalid key length" ); - if( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "CAMELLIA - Invalid data input length" ); #endif /* MBEDTLS_CAMELLIA_C */ #if defined(MBEDTLS_CCM_C) - if( use_ret == -(MBEDTLS_ERR_CCM_BAD_INPUT) ) + if ( use_ret == -(MBEDTLS_ERR_CCM_BAD_INPUT) ) mbedtls_snprintf( buf, buflen, "CCM - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_CCM_AUTH_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CCM_AUTH_FAILED) ) mbedtls_snprintf( buf, buflen, "CCM - Authenticated decryption failed" ); #endif /* MBEDTLS_CCM_C */ #if defined(MBEDTLS_CTR_DRBG_C) - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - The entropy source failed" ); - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - Too many random requested in single call" ); - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - Input too large (Entropy + additional)" ); - if( use_ret == -(MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "CTR_DRBG - Read/write error in file" ); #endif /* MBEDTLS_CTR_DRBG_C */ #if defined(MBEDTLS_DES_C) - if( use_ret == -(MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "DES - The data input has an invalid length" ); #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ENTROPY_C) - if( use_ret == -(MBEDTLS_ERR_ENTROPY_SOURCE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_SOURCE_FAILED) ) mbedtls_snprintf( buf, buflen, "ENTROPY - Critical entropy source failure" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_MAX_SOURCES) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_MAX_SOURCES) ) mbedtls_snprintf( buf, buflen, "ENTROPY - No more sources can be added" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_SOURCES_DEFINED) ) mbedtls_snprintf( buf, buflen, "ENTROPY - No sources have been added to poll" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE) ) mbedtls_snprintf( buf, buflen, "ENTROPY - No strong sources have been added to poll" ); - if( use_ret == -(MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "ENTROPY - Read/write error in file" ); #endif /* MBEDTLS_ENTROPY_C */ #if defined(MBEDTLS_GCM_C) - if( use_ret == -(MBEDTLS_ERR_GCM_AUTH_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_GCM_AUTH_FAILED) ) mbedtls_snprintf( buf, buflen, "GCM - Authenticated decryption failed" ); - if( use_ret == -(MBEDTLS_ERR_GCM_BAD_INPUT) ) + if ( use_ret == -(MBEDTLS_ERR_GCM_BAD_INPUT) ) mbedtls_snprintf( buf, buflen, "GCM - Bad input parameters to function" ); #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_HMAC_DRBG_C) - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - Too many random requested in single call" ); - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - Input too large (Entropy + additional)" ); - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - Read/write error in file" ); - if( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED) ) mbedtls_snprintf( buf, buflen, "HMAC_DRBG - The entropy source failed" ); #endif /* MBEDTLS_HMAC_DRBG_C */ #if defined(MBEDTLS_NET_C) - if( use_ret == -(MBEDTLS_ERR_NET_SOCKET_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_SOCKET_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Failed to open a socket" ); - if( use_ret == -(MBEDTLS_ERR_NET_CONNECT_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_CONNECT_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - The connection to the given server / port failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_BIND_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_BIND_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Binding of the socket failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_LISTEN_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_LISTEN_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Could not listen on the socket" ); - if( use_ret == -(MBEDTLS_ERR_NET_ACCEPT_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_ACCEPT_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Could not accept the incoming connection" ); - if( use_ret == -(MBEDTLS_ERR_NET_RECV_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_RECV_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Reading information from the socket failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_SEND_FAILED) ) + if ( use_ret == -(MBEDTLS_ERR_NET_SEND_FAILED) ) mbedtls_snprintf( buf, buflen, "NET - Sending information through the socket failed" ); - if( use_ret == -(MBEDTLS_ERR_NET_CONN_RESET) ) + if ( use_ret == -(MBEDTLS_ERR_NET_CONN_RESET) ) mbedtls_snprintf( buf, buflen, "NET - Connection was reset by peer" ); - if( use_ret == -(MBEDTLS_ERR_NET_UNKNOWN_HOST) ) + if ( use_ret == -(MBEDTLS_ERR_NET_UNKNOWN_HOST) ) mbedtls_snprintf( buf, buflen, "NET - Failed to get an IP address for the given hostname" ); - if( use_ret == -(MBEDTLS_ERR_NET_BUFFER_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_NET_BUFFER_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "NET - Buffer is too small to hold the data" ); - if( use_ret == -(MBEDTLS_ERR_NET_INVALID_CONTEXT) ) + if ( use_ret == -(MBEDTLS_ERR_NET_INVALID_CONTEXT) ) mbedtls_snprintf( buf, buflen, "NET - The context is invalid, eg because it was free()ed" ); #endif /* MBEDTLS_NET_C */ #if defined(MBEDTLS_OID_C) - if( use_ret == -(MBEDTLS_ERR_OID_NOT_FOUND) ) + if ( use_ret == -(MBEDTLS_ERR_OID_NOT_FOUND) ) mbedtls_snprintf( buf, buflen, "OID - OID is not found" ); - if( use_ret == -(MBEDTLS_ERR_OID_BUF_TOO_SMALL) ) + if ( use_ret == -(MBEDTLS_ERR_OID_BUF_TOO_SMALL) ) mbedtls_snprintf( buf, buflen, "OID - output buffer is too small" ); #endif /* MBEDTLS_OID_C */ #if defined(MBEDTLS_PADLOCK_C) - if( use_ret == -(MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED) ) + if ( use_ret == -(MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED) ) mbedtls_snprintf( buf, buflen, "PADLOCK - Input data should be aligned" ); #endif /* MBEDTLS_PADLOCK_C */ #if defined(MBEDTLS_THREADING_C) - if( use_ret == -(MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE) ) + if ( use_ret == -(MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE) ) mbedtls_snprintf( buf, buflen, "THREADING - The selected feature is not available" ); - if( use_ret == -(MBEDTLS_ERR_THREADING_BAD_INPUT_DATA) ) + if ( use_ret == -(MBEDTLS_ERR_THREADING_BAD_INPUT_DATA) ) mbedtls_snprintf( buf, buflen, "THREADING - Bad input parameters to function" ); - if( use_ret == -(MBEDTLS_ERR_THREADING_MUTEX_ERROR) ) + if ( use_ret == -(MBEDTLS_ERR_THREADING_MUTEX_ERROR) ) mbedtls_snprintf( buf, buflen, "THREADING - Locking / unlocking / free failed with error code" ); #endif /* MBEDTLS_THREADING_C */ #if defined(MBEDTLS_XTEA_C) - if( use_ret == -(MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH) ) + if ( use_ret == -(MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH) ) mbedtls_snprintf( buf, buflen, "XTEA - The data input has an invalid length" ); #endif /* MBEDTLS_XTEA_C */ // END generated code - if( strlen( buf ) != 0 ) + if ( strlen( buf ) != 0 ) return; mbedtls_snprintf( buf, buflen, "UNKNOWN ERROR CODE (%04X)", use_ret ); @@ -698,7 +695,7 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) { ((void) ret); - if( buflen > 0 ) + if ( buflen > 0 ) buf[0] = '\0'; } diff --git a/external_libs/mbedtls/library/gcm.c b/external_libs/mbedtls/library/gcm.c index f1210c5..2a2bc00 100644 --- a/external_libs/mbedtls/library/gcm.c +++ b/external_libs/mbedtls/library/gcm.c @@ -78,8 +78,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -107,8 +109,8 @@ static int gcm_gen_table( mbedtls_gcm_context *ctx ) size_t olen = 0; memset( h, 0, 16 ); - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, h, 16, h, &olen ) ) != 0 ) + return ( ret ); /* pack h as two 64-bits ints, big-endian */ GET_UINT32_BE( hi, h, 0 ); @@ -125,16 +127,15 @@ static int gcm_gen_table( mbedtls_gcm_context *ctx ) #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) /* With CLMUL support, we need only h, not the rest of the table */ - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) - return( 0 ); + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) + return ( 0 ); #endif /* 0 corresponds to 0 in GF(2^128) */ ctx->HH[0] = 0; ctx->HL[0] = 0; - for( i = 4; i > 0; i >>= 1 ) - { + for ( i = 4; i > 0; i >>= 1 ) { uint32_t T = ( vl & 1 ) * 0xe1000000U; vl = ( vh << 63 ) | ( vl >> 1 ); vh = ( vh >> 1 ) ^ ( (uint64_t) T << 32); @@ -143,19 +144,17 @@ static int gcm_gen_table( mbedtls_gcm_context *ctx ) ctx->HH[i] = vh; } - for( i = 2; i <= 8; i *= 2 ) - { + for ( i = 2; i <= 8; i *= 2 ) { uint64_t *HiL = ctx->HL + i, *HiH = ctx->HH + i; vh = *HiH; vl = *HiL; - for( j = 1; j < i; j++ ) - { + for ( j = 1; j < i; j++ ) { HiH[j] = vh ^ ctx->HH[j]; HiL[j] = vl ^ ctx->HL[j]; } } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, @@ -167,27 +166,26 @@ int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, const mbedtls_cipher_info_t *cipher_info; cipher_info = mbedtls_cipher_info_from_values( cipher, keybits, MBEDTLS_MODE_ECB ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); - if( cipher_info->block_size != 16 ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( cipher_info->block_size != 16 ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); mbedtls_cipher_free( &ctx->cipher_ctx ); - if( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_cipher_setup( &ctx->cipher_ctx, cipher_info ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, - MBEDTLS_ENCRYPT ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_setkey( &ctx->cipher_ctx, key, keybits, + MBEDTLS_ENCRYPT ) ) != 0 ) { + return ( ret ); } - if( ( ret = gcm_gen_table( ctx ) ) != 0 ) - return( ret ); + if ( ( ret = gcm_gen_table( ctx ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -195,8 +193,7 @@ int mbedtls_gcm_setkey( mbedtls_gcm_context *ctx, * last4[x] = x times P^128 * where x and last4[x] are seen as elements of GF(2^128) as in [MGV] */ -static const uint64_t last4[16] = -{ +static const uint64_t last4[16] = { 0x0000, 0x1c20, 0x3840, 0x2460, 0x7080, 0x6ca0, 0x48c0, 0x54e0, 0xe100, 0xfd20, 0xd940, 0xc560, @@ -215,7 +212,7 @@ static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], uint64_t zh, zl; #if defined(MBEDTLS_AESNI_C) && defined(MBEDTLS_HAVE_X86_64) - if( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) { + if ( mbedtls_aesni_has_support( MBEDTLS_AESNI_CLMUL ) ) { unsigned char h[16]; PUT_UINT32_BE( ctx->HH[8] >> 32, h, 0 ); @@ -233,13 +230,11 @@ static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], zh = ctx->HH[lo]; zl = ctx->HL[lo]; - for( i = 15; i >= 0; i-- ) - { + for ( i = 15; i >= 0; i-- ) { lo = x[i] & 0xf; hi = x[i] >> 4; - if( i != 15 ) - { + if ( i != 15 ) { rem = (unsigned char) zl & 0xf; zl = ( zh << 60 ) | ( zl >> 4 ); zh = ( zh >> 4 ); @@ -264,11 +259,11 @@ static void gcm_mult( mbedtls_gcm_context *ctx, const unsigned char x[16], } int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, - int mode, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len ) + int mode, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len ) { int ret; unsigned char work_buf[16]; @@ -277,10 +272,9 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, size_t use_len, olen = 0; /* IV and AD are limited to 2^64 bits, so 2^61 bytes */ - if( ( (uint64_t) iv_len ) >> 61 != 0 || - ( (uint64_t) add_len ) >> 61 != 0 ) - { - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( ( (uint64_t) iv_len ) >> 61 != 0 || + ( (uint64_t) add_len ) >> 61 != 0 ) { + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); } memset( ctx->y, 0x00, sizeof(ctx->y) ); @@ -290,22 +284,18 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, ctx->len = 0; ctx->add_len = 0; - if( iv_len == 12 ) - { + if ( iv_len == 12 ) { memcpy( ctx->y, iv, iv_len ); ctx->y[15] = 1; - } - else - { + } else { memset( work_buf, 0x00, 16 ); PUT_UINT32_BE( iv_len * 8, work_buf, 12 ); p = iv; - while( iv_len > 0 ) - { + while ( iv_len > 0 ) { use_len = ( iv_len < 16 ) ? iv_len : 16; - for( i = 0; i < use_len; i++ ) + for ( i = 0; i < use_len; i++ ) ctx->y[i] ^= p[i]; gcm_mult( ctx, ctx->y, ctx->y ); @@ -314,25 +304,23 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, p += use_len; } - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) ctx->y[i] ^= work_buf[i]; gcm_mult( ctx, ctx->y, ctx->y ); } - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ctx->base_ectr, - &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ctx->base_ectr, + &olen ) ) != 0 ) { + return ( ret ); } ctx->add_len = add_len; p = add; - while( add_len > 0 ) - { + while ( add_len > 0 ) { use_len = ( add_len < 16 ) ? add_len : 16; - for( i = 0; i < use_len; i++ ) + for ( i = 0; i < use_len; i++ ) ctx->buf[i] ^= p[i]; gcm_mult( ctx, ctx->buf, ctx->buf ); @@ -341,13 +329,13 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx, p += use_len; } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_update( mbedtls_gcm_context *ctx, - size_t length, - const unsigned char *input, - unsigned char *output ) + size_t length, + const unsigned char *input, + unsigned char *output ) { int ret; unsigned char ectr[16]; @@ -356,40 +344,36 @@ int mbedtls_gcm_update( mbedtls_gcm_context *ctx, unsigned char *out_p = output; size_t use_len, olen = 0; - if( output > input && (size_t) ( output - input ) < length ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( output > input && (size_t) ( output - input ) < length ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); /* Total length is restricted to 2^39 - 256 bits, ie 2^36 - 2^5 bytes * Also check for possible overflow */ - if( ctx->len + length < ctx->len || - (uint64_t) ctx->len + length > 0xFFFFFFFE0ull ) - { - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( ctx->len + length < ctx->len || + (uint64_t) ctx->len + length > 0xFFFFFFFE0ull ) { + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); } ctx->len += length; p = input; - while( length > 0 ) - { + while ( length > 0 ) { use_len = ( length < 16 ) ? length : 16; - for( i = 16; i > 12; i-- ) - if( ++ctx->y[i - 1] != 0 ) + for ( i = 16; i > 12; i-- ) + if ( ++ctx->y[i - 1] != 0 ) break; - if( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ectr, - &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_update( &ctx->cipher_ctx, ctx->y, 16, ectr, + &olen ) ) != 0 ) { + return ( ret ); } - for( i = 0; i < use_len; i++ ) - { - if( ctx->mode == MBEDTLS_GCM_DECRYPT ) + for ( i = 0; i < use_len; i++ ) { + if ( ctx->mode == MBEDTLS_GCM_DECRYPT ) ctx->buf[i] ^= p[i]; out_p[i] = ectr[i] ^ p[i]; - if( ctx->mode == MBEDTLS_GCM_ENCRYPT ) + if ( ctx->mode == MBEDTLS_GCM_ENCRYPT ) ctx->buf[i] ^= out_p[i]; } @@ -400,25 +384,24 @@ int mbedtls_gcm_update( mbedtls_gcm_context *ctx, out_p += use_len; } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, - unsigned char *tag, - size_t tag_len ) + unsigned char *tag, + size_t tag_len ) { unsigned char work_buf[16]; size_t i; uint64_t orig_len = ctx->len * 8; uint64_t orig_add_len = ctx->add_len * 8; - if( tag_len > 16 || tag_len < 4 ) - return( MBEDTLS_ERR_GCM_BAD_INPUT ); + if ( tag_len > 16 || tag_len < 4 ) + return ( MBEDTLS_ERR_GCM_BAD_INPUT ); memcpy( tag, ctx->base_ectr, tag_len ); - if( orig_len || orig_add_len ) - { + if ( orig_len || orig_add_len ) { memset( work_buf, 0x00, 16 ); PUT_UINT32_BE( ( orig_add_len >> 32 ), work_buf, 0 ); @@ -426,78 +409,76 @@ int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, PUT_UINT32_BE( ( orig_len >> 32 ), work_buf, 8 ); PUT_UINT32_BE( ( orig_len ), work_buf, 12 ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) ctx->buf[i] ^= work_buf[i]; gcm_mult( ctx, ctx->buf, ctx->buf ); - for( i = 0; i < tag_len; i++ ) + for ( i = 0; i < tag_len; i++ ) tag[i] ^= ctx->buf[i]; } - return( 0 ); + return ( 0 ); } int mbedtls_gcm_crypt_and_tag( mbedtls_gcm_context *ctx, - int mode, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *input, - unsigned char *output, - size_t tag_len, - unsigned char *tag ) + int mode, + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *input, + unsigned char *output, + size_t tag_len, + unsigned char *tag ) { int ret; - if( ( ret = mbedtls_gcm_starts( ctx, mode, iv, iv_len, add, add_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_gcm_starts( ctx, mode, iv, iv_len, add, add_len ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_gcm_update( ctx, length, input, output ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_gcm_update( ctx, length, input, output ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_gcm_finish( ctx, tag, tag_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_gcm_finish( ctx, tag, tag_len ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_gcm_auth_decrypt( mbedtls_gcm_context *ctx, - size_t length, - const unsigned char *iv, - size_t iv_len, - const unsigned char *add, - size_t add_len, - const unsigned char *tag, - size_t tag_len, - const unsigned char *input, - unsigned char *output ) + size_t length, + const unsigned char *iv, + size_t iv_len, + const unsigned char *add, + size_t add_len, + const unsigned char *tag, + size_t tag_len, + const unsigned char *input, + unsigned char *output ) { int ret; unsigned char check_tag[16]; size_t i; int diff; - if( ( ret = mbedtls_gcm_crypt_and_tag( ctx, MBEDTLS_GCM_DECRYPT, length, - iv, iv_len, add, add_len, - input, output, tag_len, check_tag ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_gcm_crypt_and_tag( ctx, MBEDTLS_GCM_DECRYPT, length, + iv, iv_len, add, add_len, + input, output, tag_len, check_tag ) ) != 0 ) { + return ( ret ); } /* Check tag in "constant-time" */ - for( diff = 0, i = 0; i < tag_len; i++ ) + for ( diff = 0, i = 0; i < tag_len; i++ ) diff |= tag[i] ^ check_tag[i]; - if( diff != 0 ) - { + if ( diff != 0 ) { mbedtls_zeroize( output, length ); - return( MBEDTLS_ERR_GCM_AUTH_FAILED ); + return ( MBEDTLS_ERR_GCM_AUTH_FAILED ); } - return( 0 ); + return ( 0 ); } void mbedtls_gcm_free( mbedtls_gcm_context *ctx ) @@ -515,223 +496,299 @@ void mbedtls_gcm_free( mbedtls_gcm_context *ctx ) #define MAX_TESTS 6 static const int key_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 1 }; +{ 0, 0, 1, 1, 1, 1 }; -static const unsigned char key[MAX_TESTS][32] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, - 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, - 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 }, +static const unsigned char key[MAX_TESTS][32] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, + 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08, + 0xfe, 0xff, 0xe9, 0x92, 0x86, 0x65, 0x73, 0x1c, + 0x6d, 0x6a, 0x8f, 0x94, 0x67, 0x30, 0x83, 0x08 + }, }; static const size_t iv_len[MAX_TESTS] = - { 12, 12, 12, 12, 8, 60 }; +{ 12, 12, 12, 12, 8, 60 }; static const int iv_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 2 }; +{ 0, 0, 1, 1, 1, 2 }; -static const unsigned char iv[MAX_TESTS][64] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, - 0xde, 0xca, 0xf8, 0x88 }, - { 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, - 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, - 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, - 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, - 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, - 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, - 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, - 0xa6, 0x37, 0xb3, 0x9b }, +static const unsigned char iv[MAX_TESTS][64] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0xca, 0xfe, 0xba, 0xbe, 0xfa, 0xce, 0xdb, 0xad, + 0xde, 0xca, 0xf8, 0x88 + }, + { + 0x93, 0x13, 0x22, 0x5d, 0xf8, 0x84, 0x06, 0xe5, + 0x55, 0x90, 0x9c, 0x5a, 0xff, 0x52, 0x69, 0xaa, + 0x6a, 0x7a, 0x95, 0x38, 0x53, 0x4f, 0x7d, 0xa1, + 0xe4, 0xc3, 0x03, 0xd2, 0xa3, 0x18, 0xa7, 0x28, + 0xc3, 0xc0, 0xc9, 0x51, 0x56, 0x80, 0x95, 0x39, + 0xfc, 0xf0, 0xe2, 0x42, 0x9a, 0x6b, 0x52, 0x54, + 0x16, 0xae, 0xdb, 0xf5, 0xa0, 0xde, 0x6a, 0x57, + 0xa6, 0x37, 0xb3, 0x9b + }, }; static const size_t add_len[MAX_TESTS] = - { 0, 0, 0, 20, 20, 20 }; +{ 0, 0, 0, 20, 20, 20 }; static const int add_index[MAX_TESTS] = - { 0, 0, 0, 1, 1, 1 }; +{ 0, 0, 0, 1, 1, 1 }; -static const unsigned char additional[MAX_TESTS][64] = -{ +static const unsigned char additional[MAX_TESTS][64] = { { 0x00 }, - { 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, - 0xab, 0xad, 0xda, 0xd2 }, + { + 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, + 0xfe, 0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef, + 0xab, 0xad, 0xda, 0xd2 + }, }; static const size_t pt_len[MAX_TESTS] = - { 0, 16, 64, 60, 60, 60 }; +{ 0, 16, 64, 60, 60, 60 }; static const int pt_index[MAX_TESTS] = - { 0, 0, 1, 1, 1, 1 }; +{ 0, 0, 1, 1, 1, 1 }; -static const unsigned char pt[MAX_TESTS][64] = -{ - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, - { 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, - 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, - 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, - 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, - 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, - 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, - 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, - 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 }, +static const unsigned char pt[MAX_TESTS][64] = { + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + }, + { + 0xd9, 0x31, 0x32, 0x25, 0xf8, 0x84, 0x06, 0xe5, + 0xa5, 0x59, 0x09, 0xc5, 0xaf, 0xf5, 0x26, 0x9a, + 0x86, 0xa7, 0xa9, 0x53, 0x15, 0x34, 0xf7, 0xda, + 0x2e, 0x4c, 0x30, 0x3d, 0x8a, 0x31, 0x8a, 0x72, + 0x1c, 0x3c, 0x0c, 0x95, 0x95, 0x68, 0x09, 0x53, + 0x2f, 0xcf, 0x0e, 0x24, 0x49, 0xa6, 0xb5, 0x25, + 0xb1, 0x6a, 0xed, 0xf5, 0xaa, 0x0d, 0xe6, 0x57, + 0xba, 0x63, 0x7b, 0x39, 0x1a, 0xaf, 0xd2, 0x55 + }, }; -static const unsigned char ct[MAX_TESTS * 3][64] = -{ +static const unsigned char ct[MAX_TESTS * 3][64] = { { 0x00 }, - { 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, - 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 }, - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 }, - { 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, - 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, - 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, - 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, - 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, - 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, - 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, - 0x3d, 0x58, 0xe0, 0x91 }, - { 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, - 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, - 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, - 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, - 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, - 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, - 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, - 0xc2, 0x3f, 0x45, 0x98 }, - { 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, - 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, - 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, - 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, - 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, - 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, - 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, - 0x4c, 0x34, 0xae, 0xe5 }, + { + 0x03, 0x88, 0xda, 0xce, 0x60, 0xb6, 0xa3, 0x92, + 0xf3, 0x28, 0xc2, 0xb9, 0x71, 0xb2, 0xfe, 0x78 + }, + { + 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, + 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, + 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, + 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, + 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, + 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, + 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, + 0x3d, 0x58, 0xe0, 0x91, 0x47, 0x3f, 0x59, 0x85 + }, + { + 0x42, 0x83, 0x1e, 0xc2, 0x21, 0x77, 0x74, 0x24, + 0x4b, 0x72, 0x21, 0xb7, 0x84, 0xd0, 0xd4, 0x9c, + 0xe3, 0xaa, 0x21, 0x2f, 0x2c, 0x02, 0xa4, 0xe0, + 0x35, 0xc1, 0x7e, 0x23, 0x29, 0xac, 0xa1, 0x2e, + 0x21, 0xd5, 0x14, 0xb2, 0x54, 0x66, 0x93, 0x1c, + 0x7d, 0x8f, 0x6a, 0x5a, 0xac, 0x84, 0xaa, 0x05, + 0x1b, 0xa3, 0x0b, 0x39, 0x6a, 0x0a, 0xac, 0x97, + 0x3d, 0x58, 0xe0, 0x91 + }, + { + 0x61, 0x35, 0x3b, 0x4c, 0x28, 0x06, 0x93, 0x4a, + 0x77, 0x7f, 0xf5, 0x1f, 0xa2, 0x2a, 0x47, 0x55, + 0x69, 0x9b, 0x2a, 0x71, 0x4f, 0xcd, 0xc6, 0xf8, + 0x37, 0x66, 0xe5, 0xf9, 0x7b, 0x6c, 0x74, 0x23, + 0x73, 0x80, 0x69, 0x00, 0xe4, 0x9f, 0x24, 0xb2, + 0x2b, 0x09, 0x75, 0x44, 0xd4, 0x89, 0x6b, 0x42, + 0x49, 0x89, 0xb5, 0xe1, 0xeb, 0xac, 0x0f, 0x07, + 0xc2, 0x3f, 0x45, 0x98 + }, + { + 0x8c, 0xe2, 0x49, 0x98, 0x62, 0x56, 0x15, 0xb6, + 0x03, 0xa0, 0x33, 0xac, 0xa1, 0x3f, 0xb8, 0x94, + 0xbe, 0x91, 0x12, 0xa5, 0xc3, 0xa2, 0x11, 0xa8, + 0xba, 0x26, 0x2a, 0x3c, 0xca, 0x7e, 0x2c, 0xa7, + 0x01, 0xe4, 0xa9, 0xa4, 0xfb, 0xa4, 0x3c, 0x90, + 0xcc, 0xdc, 0xb2, 0x81, 0xd4, 0x8c, 0x7c, 0x6f, + 0xd6, 0x28, 0x75, 0xd2, 0xac, 0xa4, 0x17, 0x03, + 0x4c, 0x34, 0xae, 0xe5 + }, { 0x00 }, - { 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, - 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 }, - { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 }, - { 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, - 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, - 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, - 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, - 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, - 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, - 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, - 0xcc, 0xda, 0x27, 0x10 }, - { 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, - 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, - 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, - 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, - 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, - 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, - 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, - 0xa0, 0xf0, 0x62, 0xf7 }, - { 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, - 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, - 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, - 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, - 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, - 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, - 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, - 0xe9, 0xb7, 0x37, 0x3b }, + { + 0x98, 0xe7, 0x24, 0x7c, 0x07, 0xf0, 0xfe, 0x41, + 0x1c, 0x26, 0x7e, 0x43, 0x84, 0xb0, 0xf6, 0x00 + }, + { + 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, + 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, + 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, + 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, + 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, + 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, + 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, + 0xcc, 0xda, 0x27, 0x10, 0xac, 0xad, 0xe2, 0x56 + }, + { + 0x39, 0x80, 0xca, 0x0b, 0x3c, 0x00, 0xe8, 0x41, + 0xeb, 0x06, 0xfa, 0xc4, 0x87, 0x2a, 0x27, 0x57, + 0x85, 0x9e, 0x1c, 0xea, 0xa6, 0xef, 0xd9, 0x84, + 0x62, 0x85, 0x93, 0xb4, 0x0c, 0xa1, 0xe1, 0x9c, + 0x7d, 0x77, 0x3d, 0x00, 0xc1, 0x44, 0xc5, 0x25, + 0xac, 0x61, 0x9d, 0x18, 0xc8, 0x4a, 0x3f, 0x47, + 0x18, 0xe2, 0x44, 0x8b, 0x2f, 0xe3, 0x24, 0xd9, + 0xcc, 0xda, 0x27, 0x10 + }, + { + 0x0f, 0x10, 0xf5, 0x99, 0xae, 0x14, 0xa1, 0x54, + 0xed, 0x24, 0xb3, 0x6e, 0x25, 0x32, 0x4d, 0xb8, + 0xc5, 0x66, 0x63, 0x2e, 0xf2, 0xbb, 0xb3, 0x4f, + 0x83, 0x47, 0x28, 0x0f, 0xc4, 0x50, 0x70, 0x57, + 0xfd, 0xdc, 0x29, 0xdf, 0x9a, 0x47, 0x1f, 0x75, + 0xc6, 0x65, 0x41, 0xd4, 0xd4, 0xda, 0xd1, 0xc9, + 0xe9, 0x3a, 0x19, 0xa5, 0x8e, 0x8b, 0x47, 0x3f, + 0xa0, 0xf0, 0x62, 0xf7 + }, + { + 0xd2, 0x7e, 0x88, 0x68, 0x1c, 0xe3, 0x24, 0x3c, + 0x48, 0x30, 0x16, 0x5a, 0x8f, 0xdc, 0xf9, 0xff, + 0x1d, 0xe9, 0xa1, 0xd8, 0xe6, 0xb4, 0x47, 0xef, + 0x6e, 0xf7, 0xb7, 0x98, 0x28, 0x66, 0x6e, 0x45, + 0x81, 0xe7, 0x90, 0x12, 0xaf, 0x34, 0xdd, 0xd9, + 0xe2, 0xf0, 0x37, 0x58, 0x9b, 0x29, 0x2d, 0xb3, + 0xe6, 0x7c, 0x03, 0x67, 0x45, 0xfa, 0x22, 0xe7, + 0xe9, 0xb7, 0x37, 0x3b + }, { 0x00 }, - { 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, - 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 }, - { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad }, - { 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, - 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, - 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, - 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, - 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, - 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, - 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, - 0xbc, 0xc9, 0xf6, 0x62 }, - { 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, - 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, - 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, - 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, - 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, - 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, - 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, - 0xf4, 0x7c, 0x9b, 0x1f }, - { 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, - 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, - 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, - 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, - 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, - 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, - 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, - 0x44, 0xae, 0x7e, 0x3f }, + { + 0xce, 0xa7, 0x40, 0x3d, 0x4d, 0x60, 0x6b, 0x6e, + 0x07, 0x4e, 0xc5, 0xd3, 0xba, 0xf3, 0x9d, 0x18 + }, + { + 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, + 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, + 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, + 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, + 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, + 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, + 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, + 0xbc, 0xc9, 0xf6, 0x62, 0x89, 0x80, 0x15, 0xad + }, + { + 0x52, 0x2d, 0xc1, 0xf0, 0x99, 0x56, 0x7d, 0x07, + 0xf4, 0x7f, 0x37, 0xa3, 0x2a, 0x84, 0x42, 0x7d, + 0x64, 0x3a, 0x8c, 0xdc, 0xbf, 0xe5, 0xc0, 0xc9, + 0x75, 0x98, 0xa2, 0xbd, 0x25, 0x55, 0xd1, 0xaa, + 0x8c, 0xb0, 0x8e, 0x48, 0x59, 0x0d, 0xbb, 0x3d, + 0xa7, 0xb0, 0x8b, 0x10, 0x56, 0x82, 0x88, 0x38, + 0xc5, 0xf6, 0x1e, 0x63, 0x93, 0xba, 0x7a, 0x0a, + 0xbc, 0xc9, 0xf6, 0x62 + }, + { + 0xc3, 0x76, 0x2d, 0xf1, 0xca, 0x78, 0x7d, 0x32, + 0xae, 0x47, 0xc1, 0x3b, 0xf1, 0x98, 0x44, 0xcb, + 0xaf, 0x1a, 0xe1, 0x4d, 0x0b, 0x97, 0x6a, 0xfa, + 0xc5, 0x2f, 0xf7, 0xd7, 0x9b, 0xba, 0x9d, 0xe0, + 0xfe, 0xb5, 0x82, 0xd3, 0x39, 0x34, 0xa4, 0xf0, + 0x95, 0x4c, 0xc2, 0x36, 0x3b, 0xc7, 0x3f, 0x78, + 0x62, 0xac, 0x43, 0x0e, 0x64, 0xab, 0xe4, 0x99, + 0xf4, 0x7c, 0x9b, 0x1f + }, + { + 0x5a, 0x8d, 0xef, 0x2f, 0x0c, 0x9e, 0x53, 0xf1, + 0xf7, 0x5d, 0x78, 0x53, 0x65, 0x9e, 0x2a, 0x20, + 0xee, 0xb2, 0xb2, 0x2a, 0xaf, 0xde, 0x64, 0x19, + 0xa0, 0x58, 0xab, 0x4f, 0x6f, 0x74, 0x6b, 0xf4, + 0x0f, 0xc0, 0xc3, 0xb7, 0x80, 0xf2, 0x44, 0x45, + 0x2d, 0xa3, 0xeb, 0xf1, 0xc5, 0xd8, 0x2c, 0xde, + 0xa2, 0x41, 0x89, 0x97, 0x20, 0x0e, 0xf8, 0x2e, + 0x44, 0xae, 0x7e, 0x3f + }, }; -static const unsigned char tag[MAX_TESTS * 3][16] = -{ - { 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, - 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a }, - { 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, - 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf }, - { 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, - 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 }, - { 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, - 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 }, - { 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, - 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb }, - { 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, - 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50 }, - { 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, - 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 }, - { 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, - 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb }, - { 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, - 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 }, - { 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, - 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c }, - { 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, - 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8 }, - { 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, - 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9 }, - { 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, - 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b }, - { 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, - 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 }, - { 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, - 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c }, - { 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, - 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b }, - { 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, - 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2 }, - { 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, - 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a }, +static const unsigned char tag[MAX_TESTS * 3][16] = { + { + 0x58, 0xe2, 0xfc, 0xce, 0xfa, 0x7e, 0x30, 0x61, + 0x36, 0x7f, 0x1d, 0x57, 0xa4, 0xe7, 0x45, 0x5a + }, + { + 0xab, 0x6e, 0x47, 0xd4, 0x2c, 0xec, 0x13, 0xbd, + 0xf5, 0x3a, 0x67, 0xb2, 0x12, 0x57, 0xbd, 0xdf + }, + { + 0x4d, 0x5c, 0x2a, 0xf3, 0x27, 0xcd, 0x64, 0xa6, + 0x2c, 0xf3, 0x5a, 0xbd, 0x2b, 0xa6, 0xfa, 0xb4 + }, + { + 0x5b, 0xc9, 0x4f, 0xbc, 0x32, 0x21, 0xa5, 0xdb, + 0x94, 0xfa, 0xe9, 0x5a, 0xe7, 0x12, 0x1a, 0x47 + }, + { + 0x36, 0x12, 0xd2, 0xe7, 0x9e, 0x3b, 0x07, 0x85, + 0x56, 0x1b, 0xe1, 0x4a, 0xac, 0xa2, 0xfc, 0xcb + }, + { + 0x61, 0x9c, 0xc5, 0xae, 0xff, 0xfe, 0x0b, 0xfa, + 0x46, 0x2a, 0xf4, 0x3c, 0x16, 0x99, 0xd0, 0x50 + }, + { + 0xcd, 0x33, 0xb2, 0x8a, 0xc7, 0x73, 0xf7, 0x4b, + 0xa0, 0x0e, 0xd1, 0xf3, 0x12, 0x57, 0x24, 0x35 + }, + { + 0x2f, 0xf5, 0x8d, 0x80, 0x03, 0x39, 0x27, 0xab, + 0x8e, 0xf4, 0xd4, 0x58, 0x75, 0x14, 0xf0, 0xfb + }, + { + 0x99, 0x24, 0xa7, 0xc8, 0x58, 0x73, 0x36, 0xbf, + 0xb1, 0x18, 0x02, 0x4d, 0xb8, 0x67, 0x4a, 0x14 + }, + { + 0x25, 0x19, 0x49, 0x8e, 0x80, 0xf1, 0x47, 0x8f, + 0x37, 0xba, 0x55, 0xbd, 0x6d, 0x27, 0x61, 0x8c + }, + { + 0x65, 0xdc, 0xc5, 0x7f, 0xcf, 0x62, 0x3a, 0x24, + 0x09, 0x4f, 0xcc, 0xa4, 0x0d, 0x35, 0x33, 0xf8 + }, + { + 0xdc, 0xf5, 0x66, 0xff, 0x29, 0x1c, 0x25, 0xbb, + 0xb8, 0x56, 0x8f, 0xc3, 0xd3, 0x76, 0xa6, 0xd9 + }, + { + 0x53, 0x0f, 0x8a, 0xfb, 0xc7, 0x45, 0x36, 0xb9, + 0xa9, 0x63, 0xb4, 0xf1, 0xc4, 0xcb, 0x73, 0x8b + }, + { + 0xd0, 0xd1, 0xc8, 0xa7, 0x99, 0x99, 0x6b, 0xf0, + 0x26, 0x5b, 0x98, 0xb5, 0xd4, 0x8a, 0xb9, 0x19 + }, + { + 0xb0, 0x94, 0xda, 0xc5, 0xd9, 0x34, 0x71, 0xbd, + 0xec, 0x1a, 0x50, 0x22, 0x70, 0xe3, 0xcc, 0x6c + }, + { + 0x76, 0xfc, 0x6e, 0xce, 0x0f, 0x4e, 0x17, 0x68, + 0xcd, 0xdf, 0x88, 0x53, 0xbb, 0x2d, 0x55, 0x1b + }, + { + 0x3a, 0x33, 0x7d, 0xbf, 0x46, 0xa7, 0x92, 0xc4, + 0x5e, 0x45, 0x49, 0x13, 0xfe, 0x2e, 0xa8, 0xf2 + }, + { + 0xa4, 0x4a, 0x82, 0x66, 0xee, 0x1c, 0x8e, 0xb0, + 0xc8, 0xb5, 0xd4, 0xcf, 0x5a, 0xe9, 0xf1, 0x9a + }, }; int mbedtls_gcm_self_test( int verbose ) @@ -744,207 +801,187 @@ int mbedtls_gcm_self_test( int verbose ) mbedtls_gcm_init( &ctx ); - for( j = 0; j < 3; j++ ) - { + for ( j = 0; j < 3; j++ ) { int key_len = 128 + 64 * j; - for( i = 0; i < MAX_TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < MAX_TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d (%s): ", - key_len, i, "enc" ); + key_len, i, "enc" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_ENCRYPT, - pt_len[i], - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i], - pt[pt_index[i]], buf, 16, tag_buf ); - - if( ret != 0 || - memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + pt_len[i], + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i], + pt[pt_index[i]], buf, 16, tag_buf ); + + if ( ret != 0 || + memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d (%s): ", - key_len, i, "dec" ); + key_len, i, "dec" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_crypt_and_tag( &ctx, MBEDTLS_GCM_DECRYPT, - pt_len[i], - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i], - ct[j * 6 + i], buf, 16, tag_buf ); - - if( ret != 0 || - memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + pt_len[i], + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i], + ct[j * 6 + i], buf, 16, tag_buf ); + + if ( ret != 0 || + memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d split (%s): ", - key_len, i, "enc" ); + key_len, i, "enc" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_starts( &ctx, MBEDTLS_GCM_ENCRYPT, - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i] ); - if( ret != 0 ) - { - if( verbose != 0 ) + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i] ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( pt_len[i] > 32 ) - { + if ( pt_len[i] > 32 ) { size_t rest_len = pt_len[i] - 32; ret = mbedtls_gcm_update( &ctx, 32, pt[pt_index[i]], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } ret = mbedtls_gcm_update( &ctx, rest_len, pt[pt_index[i]] + 32, - buf + 32 ); - if( ret != 0 ) - { - if( verbose != 0 ) + buf + 32 ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - } - else - { + } else { ret = mbedtls_gcm_update( &ctx, pt_len[i], pt[pt_index[i]], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } ret = mbedtls_gcm_finish( &ctx, tag_buf, 16 ); - if( ret != 0 || - memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( buf, ct[j * 6 + i], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " AES-GCM-%3d #%d split (%s): ", - key_len, i, "dec" ); + key_len, i, "dec" ); mbedtls_gcm_setkey( &ctx, cipher, key[key_index[i]], key_len ); ret = mbedtls_gcm_starts( &ctx, MBEDTLS_GCM_DECRYPT, - iv[iv_index[i]], iv_len[i], - additional[add_index[i]], add_len[i] ); - if( ret != 0 ) - { - if( verbose != 0 ) + iv[iv_index[i]], iv_len[i], + additional[add_index[i]], add_len[i] ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( pt_len[i] > 32 ) - { + if ( pt_len[i] > 32 ) { size_t rest_len = pt_len[i] - 32; ret = mbedtls_gcm_update( &ctx, 32, ct[j * 6 + i], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } ret = mbedtls_gcm_update( &ctx, rest_len, ct[j * 6 + i] + 32, - buf + 32 ); - if( ret != 0 ) - { - if( verbose != 0 ) + buf + 32 ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - } - else - { + } else { ret = mbedtls_gcm_update( &ctx, pt_len[i], ct[j * 6 + i], buf ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } ret = mbedtls_gcm_finish( &ctx, tag_buf, 16 ); - if( ret != 0 || - memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || - memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 || + memcmp( buf, pt[pt_index[i]], pt_len[i] ) != 0 || + memcmp( tag_buf, tag[j * 6 + i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_gcm_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */ diff --git a/external_libs/mbedtls/library/havege.c b/external_libs/mbedtls/library/havege.c index 2b75ef7..54b40bf 100644 --- a/external_libs/mbedtls/library/havege.c +++ b/external_libs/mbedtls/library/havege.c @@ -40,8 +40,10 @@ #include /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* ------------------------------------------------------------------------ @@ -178,8 +180,7 @@ static void havege_fill( mbedtls_havege_state *hs ) memset( RES, 0, sizeof( RES ) ); - while( n < MBEDTLS_HAVEGE_COLLECT_SIZE * 4 ) - { + while ( n < MBEDTLS_HAVEGE_COLLECT_SIZE * 4 ) { ONE_ITERATION ONE_ITERATION ONE_ITERATION @@ -205,7 +206,7 @@ void mbedtls_havege_init( mbedtls_havege_state *hs ) void mbedtls_havege_free( mbedtls_havege_state *hs ) { - if( hs == NULL ) + if ( hs == NULL ) return; mbedtls_zeroize( hs, sizeof( mbedtls_havege_state ) ); @@ -221,13 +222,12 @@ int mbedtls_havege_random( void *p_rng, unsigned char *buf, size_t len ) mbedtls_havege_state *hs = (mbedtls_havege_state *) p_rng; unsigned char *p = buf; - while( len > 0 ) - { + while ( len > 0 ) { use_len = len; - if( use_len > sizeof(int) ) + if ( use_len > sizeof(int) ) use_len = sizeof(int); - if( hs->offset[1] >= MBEDTLS_HAVEGE_COLLECT_SIZE ) + if ( hs->offset[1] >= MBEDTLS_HAVEGE_COLLECT_SIZE ) havege_fill( hs ); val = hs->pool[hs->offset[0]++]; @@ -239,7 +239,7 @@ int mbedtls_havege_random( void *p_rng, unsigned char *buf, size_t len ) p += use_len; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVEGE_C */ diff --git a/external_libs/mbedtls/library/hmac_drbg.c b/external_libs/mbedtls/library/hmac_drbg.c index bf5f9b5..365285d 100644 --- a/external_libs/mbedtls/library/hmac_drbg.c +++ b/external_libs/mbedtls/library/hmac_drbg.c @@ -51,8 +51,10 @@ #endif /* MBEDTLS_PLATFORM_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -71,20 +73,19 @@ void mbedtls_hmac_drbg_init( mbedtls_hmac_drbg_context *ctx ) * HMAC_DRBG update, using optional additional data (10.1.2.2) */ void mbedtls_hmac_drbg_update( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t add_len ) + const unsigned char *additional, size_t add_len ) { size_t md_len = mbedtls_md_get_size( ctx->md_ctx.md_info ); unsigned char rounds = ( additional != NULL && add_len != 0 ) ? 2 : 1; unsigned char sep[1]; unsigned char K[MBEDTLS_MD_MAX_SIZE]; - for( sep[0] = 0; sep[0] < rounds; sep[0]++ ) - { + for ( sep[0] = 0; sep[0] < rounds; sep[0]++ ) { /* Step 1 or 4 */ mbedtls_md_hmac_reset( &ctx->md_ctx ); mbedtls_md_hmac_update( &ctx->md_ctx, ctx->V, md_len ); mbedtls_md_hmac_update( &ctx->md_ctx, sep, 1 ); - if( rounds == 2 ) + if ( rounds == 2 ) mbedtls_md_hmac_update( &ctx->md_ctx, additional, add_len ); mbedtls_md_hmac_finish( &ctx->md_ctx, K ); @@ -99,13 +100,13 @@ void mbedtls_hmac_drbg_update( mbedtls_hmac_drbg_context *ctx, * Simplified HMAC_DRBG initialisation (for use with deterministic ECDSA) */ int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - const unsigned char *data, size_t data_len ) + const mbedtls_md_info_t * md_info, + const unsigned char *data, size_t data_len ) { int ret; - if( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); /* * Set initial working state. @@ -117,36 +118,34 @@ int mbedtls_hmac_drbg_seed_buf( mbedtls_hmac_drbg_context *ctx, mbedtls_hmac_drbg_update( ctx, data, data_len ); - return( 0 ); + return ( 0 ); } /* * HMAC_DRBG reseeding: 10.1.2.4 (arabic) + 9.2 (Roman) */ int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, - const unsigned char *additional, size_t len ) + const unsigned char *additional, size_t len ) { unsigned char seed[MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT]; size_t seedlen; /* III. Check input length */ - if( len > MBEDTLS_HMAC_DRBG_MAX_INPUT || - ctx->entropy_len + len > MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT ) - { - return( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); + if ( len > MBEDTLS_HMAC_DRBG_MAX_INPUT || + ctx->entropy_len + len > MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT ) { + return ( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); } memset( seed, 0, MBEDTLS_HMAC_DRBG_MAX_SEED_INPUT ); /* IV. Gather entropy_len bytes of entropy for the seed */ - if( ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) != 0 ) - return( MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED ); + if ( ctx->f_entropy( ctx->p_entropy, seed, ctx->entropy_len ) != 0 ) + return ( MBEDTLS_ERR_HMAC_DRBG_ENTROPY_SOURCE_FAILED ); seedlen = ctx->entropy_len; /* 1. Concatenate entropy and additional data if any */ - if( additional != NULL && len != 0 ) - { + if ( additional != NULL && len != 0 ) { memcpy( seed + seedlen, additional, len ); seedlen += len; } @@ -158,24 +157,24 @@ int mbedtls_hmac_drbg_reseed( mbedtls_hmac_drbg_context *ctx, ctx->reseed_counter = 1; /* 4. Done */ - return( 0 ); + return ( 0 ); } /* * HMAC_DRBG initialisation (10.1.2.3 + 9.1) */ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, - const mbedtls_md_info_t * md_info, - int (*f_entropy)(void *, unsigned char *, size_t), - void *p_entropy, - const unsigned char *custom, - size_t len ) + const mbedtls_md_info_t * md_info, + int (*f_entropy)(void *, unsigned char *, size_t), + void *p_entropy, + const unsigned char *custom, + size_t len ) { int ret; size_t entropy_len, md_size; - if( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &ctx->md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); md_size = mbedtls_md_get_size( md_info ); @@ -201,7 +200,7 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, */ entropy_len = md_size <= 20 ? 16 : /* 160-bits hash -> 128 bits */ md_size <= 28 ? 24 : /* 224-bits hash -> 192 bits */ - 32; /* better (256+) -> 256 bits */ + 32; /* better (256+) -> 256 bits */ /* * For initialisation, use more entropy to emulate a nonce @@ -209,19 +208,19 @@ int mbedtls_hmac_drbg_seed( mbedtls_hmac_drbg_context *ctx, */ ctx->entropy_len = entropy_len * 3 / 2; - if( ( ret = mbedtls_hmac_drbg_reseed( ctx, custom, len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_hmac_drbg_reseed( ctx, custom, len ) ) != 0 ) + return ( ret ); ctx->entropy_len = entropy_len; - return( 0 ); + return ( 0 ); } /* * Set prediction resistance */ void mbedtls_hmac_drbg_set_prediction_resistance( mbedtls_hmac_drbg_context *ctx, - int resistance ) + int resistance ) { ctx->prediction_resistance = resistance; } @@ -247,8 +246,8 @@ void mbedtls_hmac_drbg_set_reseed_interval( mbedtls_hmac_drbg_context *ctx, int * 10.1.2.5 (arabic) + 9.3 (Roman) */ int mbedtls_hmac_drbg_random_with_add( void *p_rng, - unsigned char *output, size_t out_len, - const unsigned char *additional, size_t add_len ) + unsigned char *output, size_t out_len, + const unsigned char *additional, size_t add_len ) { int ret; mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng; @@ -257,31 +256,29 @@ int mbedtls_hmac_drbg_random_with_add( void *p_rng, unsigned char *out = output; /* II. Check request length */ - if( out_len > MBEDTLS_HMAC_DRBG_MAX_REQUEST ) - return( MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG ); + if ( out_len > MBEDTLS_HMAC_DRBG_MAX_REQUEST ) + return ( MBEDTLS_ERR_HMAC_DRBG_REQUEST_TOO_BIG ); /* III. Check input length */ - if( add_len > MBEDTLS_HMAC_DRBG_MAX_INPUT ) - return( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); + if ( add_len > MBEDTLS_HMAC_DRBG_MAX_INPUT ) + return ( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); /* 1. (aka VII and IX) Check reseed counter and PR */ - if( ctx->f_entropy != NULL && /* For no-reseeding instances */ - ( ctx->prediction_resistance == MBEDTLS_HMAC_DRBG_PR_ON || - ctx->reseed_counter > ctx->reseed_interval ) ) - { - if( ( ret = mbedtls_hmac_drbg_reseed( ctx, additional, add_len ) ) != 0 ) - return( ret ); + if ( ctx->f_entropy != NULL && /* For no-reseeding instances */ + ( ctx->prediction_resistance == MBEDTLS_HMAC_DRBG_PR_ON || + ctx->reseed_counter > ctx->reseed_interval ) ) { + if ( ( ret = mbedtls_hmac_drbg_reseed( ctx, additional, add_len ) ) != 0 ) + return ( ret ); add_len = 0; /* VII.4 */ } /* 2. Use additional data if any */ - if( additional != NULL && add_len != 0 ) + if ( additional != NULL && add_len != 0 ) mbedtls_hmac_drbg_update( ctx, additional, add_len ); /* 3, 4, 5. Generate bytes */ - while( left != 0 ) - { + while ( left != 0 ) { size_t use_len = left > md_len ? md_len : left; mbedtls_md_hmac_reset( &ctx->md_ctx ); @@ -300,7 +297,7 @@ int mbedtls_hmac_drbg_random_with_add( void *p_rng, ctx->reseed_counter++; /* 8. Done */ - return( 0 ); + return ( 0 ); } /* @@ -312,18 +309,18 @@ int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len mbedtls_hmac_drbg_context *ctx = (mbedtls_hmac_drbg_context *) p_rng; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif ret = mbedtls_hmac_drbg_random_with_add( ctx, output, out_len, NULL, 0 ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* @@ -331,7 +328,7 @@ int mbedtls_hmac_drbg_random( void *p_rng, unsigned char *output, size_t out_len */ void mbedtls_hmac_drbg_free( mbedtls_hmac_drbg_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; #if defined(MBEDTLS_THREADING_C) @@ -348,14 +345,13 @@ int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const cha FILE *f; unsigned char buf[ MBEDTLS_HMAC_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "wb" ) ) == NULL ) - return( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "wb" ) ) == NULL ) + return ( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); - if( ( ret = mbedtls_hmac_drbg_random( ctx, buf, sizeof( buf ) ) ) != 0 ) + if ( ( ret = mbedtls_hmac_drbg_random( ctx, buf, sizeof( buf ) ) ) != 0 ) goto exit; - if( fwrite( buf, 1, sizeof( buf ), f ) != sizeof( buf ) ) - { + if ( fwrite( buf, 1, sizeof( buf ), f ) != sizeof( buf ) ) { ret = MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR; goto exit; } @@ -364,7 +360,7 @@ int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const cha exit: fclose( f ); - return( ret ); + return ( ret ); } int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const char *path ) @@ -373,30 +369,28 @@ int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const ch size_t n; unsigned char buf[ MBEDTLS_HMAC_DRBG_MAX_INPUT ]; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); n = (size_t) ftell( f ); fseek( f, 0, SEEK_SET ); - if( n > MBEDTLS_HMAC_DRBG_MAX_INPUT ) - { + if ( n > MBEDTLS_HMAC_DRBG_MAX_INPUT ) { fclose( f ); - return( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); + return ( MBEDTLS_ERR_HMAC_DRBG_INPUT_TOO_BIG ); } - if( fread( buf, 1, n, f ) != n ) - { + if ( fread( buf, 1, n, f ) != n ) { fclose( f ); - return( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR ); } fclose( f ); mbedtls_hmac_drbg_update( ctx, buf, n ); - return( mbedtls_hmac_drbg_write_seed_file( ctx, path ) ); + return ( mbedtls_hmac_drbg_write_seed_file( ctx, path ) ); } #endif /* MBEDTLS_FS_IO */ @@ -408,7 +402,7 @@ int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const ch int mbedtls_hmac_drbg_self_test( int verbose ) { (void) verbose; - return( 0 ); + return ( 0 ); } #else @@ -420,7 +414,8 @@ static const unsigned char entropy_pr[] = { 0xf7, 0x3e, 0x9c, 0x5b, 0x64, 0xef, 0xd8, 0xca, 0x02, 0x8c, 0xf8, 0x11, 0x48, 0xa5, 0x84, 0xfe, 0x69, 0xab, 0x5a, 0xee, 0x42, 0xaa, 0x4d, 0x42, 0x17, 0x60, 0x99, 0xd4, 0x5e, 0x13, 0x97, 0xdc, 0x40, 0x4d, 0x86, 0xa3, - 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 }; + 0x7b, 0xf5, 0x59, 0x54, 0x75, 0x69, 0x51, 0xe4 +}; static const unsigned char result_pr[OUTPUT_LEN] = { 0x9a, 0x00, 0xa2, 0xd0, 0x0e, 0xd5, 0x9b, 0xfe, 0x31, 0xec, 0xb1, 0x39, 0x9b, 0x60, 0x81, 0x48, 0xd1, 0x96, 0x9d, 0x25, 0x0d, 0x3c, 0x1e, 0x94, @@ -428,14 +423,16 @@ static const unsigned char result_pr[OUTPUT_LEN] = { 0x73, 0x19, 0x70, 0xc0, 0x10, 0x7a, 0xa4, 0x89, 0x25, 0x19, 0x95, 0x5e, 0x4b, 0xc6, 0x00, 0x1d, 0x7f, 0x4e, 0x6a, 0x2b, 0xf8, 0xa3, 0x01, 0xab, 0x46, 0x05, 0x5c, 0x09, 0xa6, 0x71, 0x88, 0xf1, 0xa7, 0x40, 0xee, 0xf3, - 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 }; + 0xe1, 0x5c, 0x02, 0x9b, 0x44, 0xaf, 0x03, 0x44 +}; /* From a NIST PR=false test vector */ static const unsigned char entropy_nopr[] = { 0x79, 0x34, 0x9b, 0xbf, 0x7c, 0xdd, 0xa5, 0x79, 0x95, 0x57, 0x86, 0x66, 0x21, 0xc9, 0x13, 0x83, 0x11, 0x46, 0x73, 0x3a, 0xbf, 0x8c, 0x35, 0xc8, 0xc7, 0x21, 0x5b, 0x5b, 0x96, 0xc4, 0x8e, 0x9b, 0x33, 0x8c, 0x74, 0xe3, - 0xe9, 0x9d, 0xfe, 0xdf }; + 0xe9, 0x9d, 0xfe, 0xdf +}; static const unsigned char result_nopr[OUTPUT_LEN] = { 0xc6, 0xa1, 0x6a, 0xb8, 0xd4, 0x20, 0x70, 0x6f, 0x0f, 0x34, 0xab, 0x7f, 0xec, 0x5a, 0xdc, 0xa9, 0xd8, 0xca, 0x3a, 0x13, 0x3e, 0x15, 0x9c, 0xa6, @@ -443,7 +440,8 @@ static const unsigned char result_nopr[OUTPUT_LEN] = { 0xff, 0xb1, 0x0d, 0x71, 0x94, 0xf1, 0xc1, 0xa5, 0xcf, 0x73, 0x22, 0xec, 0x1a, 0xe0, 0x96, 0x4e, 0xd4, 0xbf, 0x12, 0x27, 0x46, 0xe0, 0x87, 0xfd, 0xb5, 0xb3, 0xe9, 0x1b, 0x34, 0x93, 0xd5, 0xbb, 0x98, 0xfa, 0xed, 0x49, - 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 }; + 0xe8, 0x5f, 0x13, 0x0f, 0xc8, 0xa4, 0x59, 0xb7 +}; /* "Entropy" from buffer */ static size_t test_offset; @@ -453,7 +451,7 @@ static int hmac_drbg_self_test_entropy( void *data, const unsigned char *p = data; memcpy( buf, p + test_offset, len ); test_offset += len; - return( 0 ); + return ( 0 ); } #define CHK( c ) if( (c) != 0 ) \ @@ -477,13 +475,13 @@ int mbedtls_hmac_drbg_self_test( int verbose ) /* * PR = True */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " HMAC_DRBG (PR = True) : " ); test_offset = 0; CHK( mbedtls_hmac_drbg_seed( &ctx, md_info, - hmac_drbg_self_test_entropy, (void *) entropy_pr, - NULL, 0 ) ); + hmac_drbg_self_test_entropy, (void *) entropy_pr, + NULL, 0 ) ); mbedtls_hmac_drbg_set_prediction_resistance( &ctx, MBEDTLS_HMAC_DRBG_PR_ON ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); @@ -492,21 +490,21 @@ int mbedtls_hmac_drbg_self_test( int verbose ) mbedtls_hmac_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); /* * PR = False */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " HMAC_DRBG (PR = False) : " ); mbedtls_hmac_drbg_init( &ctx ); test_offset = 0; CHK( mbedtls_hmac_drbg_seed( &ctx, md_info, - hmac_drbg_self_test_entropy, (void *) entropy_nopr, - NULL, 0 ) ); + hmac_drbg_self_test_entropy, (void *) entropy_nopr, + NULL, 0 ) ); CHK( mbedtls_hmac_drbg_reseed( &ctx, NULL, 0 ) ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); CHK( mbedtls_hmac_drbg_random( &ctx, buf, OUTPUT_LEN ) ); @@ -515,13 +513,13 @@ int mbedtls_hmac_drbg_self_test( int verbose ) mbedtls_hmac_drbg_free( &ctx ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/md.c b/external_libs/mbedtls/library/md.c index eda98f6..090780b 100644 --- a/external_libs/mbedtls/library/md.c +++ b/external_libs/mbedtls/library/md.c @@ -49,8 +49,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -59,122 +61,121 @@ static void mbedtls_zeroize( void *v, size_t n ) { static const int supported_digests[] = { #if defined(MBEDTLS_SHA512_C) - MBEDTLS_MD_SHA512, - MBEDTLS_MD_SHA384, + MBEDTLS_MD_SHA512, + MBEDTLS_MD_SHA384, #endif #if defined(MBEDTLS_SHA256_C) - MBEDTLS_MD_SHA256, - MBEDTLS_MD_SHA224, + MBEDTLS_MD_SHA256, + MBEDTLS_MD_SHA224, #endif #if defined(MBEDTLS_SHA1_C) - MBEDTLS_MD_SHA1, + MBEDTLS_MD_SHA1, #endif #if defined(MBEDTLS_RIPEMD160_C) - MBEDTLS_MD_RIPEMD160, + MBEDTLS_MD_RIPEMD160, #endif #if defined(MBEDTLS_MD5_C) - MBEDTLS_MD_MD5, + MBEDTLS_MD_MD5, #endif #if defined(MBEDTLS_MD4_C) - MBEDTLS_MD_MD4, + MBEDTLS_MD_MD4, #endif #if defined(MBEDTLS_MD2_C) - MBEDTLS_MD_MD2, + MBEDTLS_MD_MD2, #endif - MBEDTLS_MD_NONE + MBEDTLS_MD_NONE }; const int *mbedtls_md_list( void ) { - return( supported_digests ); + return ( supported_digests ); } const mbedtls_md_info_t *mbedtls_md_info_from_string( const char *md_name ) { - if( NULL == md_name ) - return( NULL ); + if ( NULL == md_name ) + return ( NULL ); /* Get the appropriate digest information */ #if defined(MBEDTLS_MD2_C) - if( !strcmp( "MD2", md_name ) ) + if ( !strcmp( "MD2", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD2 ); #endif #if defined(MBEDTLS_MD4_C) - if( !strcmp( "MD4", md_name ) ) + if ( !strcmp( "MD4", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD4 ); #endif #if defined(MBEDTLS_MD5_C) - if( !strcmp( "MD5", md_name ) ) + if ( !strcmp( "MD5", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ); #endif #if defined(MBEDTLS_RIPEMD160_C) - if( !strcmp( "RIPEMD160", md_name ) ) + if ( !strcmp( "RIPEMD160", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_RIPEMD160 ); #endif #if defined(MBEDTLS_SHA1_C) - if( !strcmp( "SHA1", md_name ) || !strcmp( "SHA", md_name ) ) + if ( !strcmp( "SHA1", md_name ) || !strcmp( "SHA", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ); #endif #if defined(MBEDTLS_SHA256_C) - if( !strcmp( "SHA224", md_name ) ) + if ( !strcmp( "SHA224", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA224 ); - if( !strcmp( "SHA256", md_name ) ) + if ( !strcmp( "SHA256", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ); #endif #if defined(MBEDTLS_SHA512_C) - if( !strcmp( "SHA384", md_name ) ) + if ( !strcmp( "SHA384", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA384 ); - if( !strcmp( "SHA512", md_name ) ) + if ( !strcmp( "SHA512", md_name ) ) return mbedtls_md_info_from_type( MBEDTLS_MD_SHA512 ); #endif - return( NULL ); + return ( NULL ); } const mbedtls_md_info_t *mbedtls_md_info_from_type( mbedtls_md_type_t md_type ) { - switch( md_type ) - { + switch ( md_type ) { #if defined(MBEDTLS_MD2_C) case MBEDTLS_MD_MD2: - return( &mbedtls_md2_info ); + return ( &mbedtls_md2_info ); #endif #if defined(MBEDTLS_MD4_C) case MBEDTLS_MD_MD4: - return( &mbedtls_md4_info ); + return ( &mbedtls_md4_info ); #endif #if defined(MBEDTLS_MD5_C) case MBEDTLS_MD_MD5: - return( &mbedtls_md5_info ); + return ( &mbedtls_md5_info ); #endif #if defined(MBEDTLS_RIPEMD160_C) case MBEDTLS_MD_RIPEMD160: - return( &mbedtls_ripemd160_info ); + return ( &mbedtls_ripemd160_info ); #endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: - return( &mbedtls_sha1_info ); + return ( &mbedtls_sha1_info ); #endif #if defined(MBEDTLS_SHA256_C) case MBEDTLS_MD_SHA224: - return( &mbedtls_sha224_info ); + return ( &mbedtls_sha224_info ); case MBEDTLS_MD_SHA256: - return( &mbedtls_sha256_info ); + return ( &mbedtls_sha256_info ); #endif #if defined(MBEDTLS_SHA512_C) case MBEDTLS_MD_SHA384: - return( &mbedtls_sha384_info ); + return ( &mbedtls_sha384_info ); case MBEDTLS_MD_SHA512: - return( &mbedtls_sha512_info ); + return ( &mbedtls_sha512_info ); #endif default: - return( NULL ); + return ( NULL ); } } @@ -185,14 +186,13 @@ void mbedtls_md_init( mbedtls_md_context_t *ctx ) void mbedtls_md_free( mbedtls_md_context_t *ctx ) { - if( ctx == NULL || ctx->md_info == NULL ) + if ( ctx == NULL || ctx->md_info == NULL ) return; - if( ctx->md_ctx != NULL ) + if ( ctx->md_ctx != NULL ) ctx->md_info->ctx_free_func( ctx->md_ctx ); - if( ctx->hmac_ctx != NULL ) - { + if ( ctx->hmac_ctx != NULL ) { mbedtls_zeroize( ctx->hmac_ctx, 2 * ctx->md_info->block_size ); mbedtls_free( ctx->hmac_ctx ); } @@ -203,16 +203,15 @@ void mbedtls_md_free( mbedtls_md_context_t *ctx ) int mbedtls_md_clone( mbedtls_md_context_t *dst, const mbedtls_md_context_t *src ) { - if( dst == NULL || dst->md_info == NULL || - src == NULL || src->md_info == NULL || - dst->md_info != src->md_info ) - { - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( dst == NULL || dst->md_info == NULL || + src == NULL || src->md_info == NULL || + dst->md_info != src->md_info ) { + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); } dst->md_info->clone_func( dst->md_ctx, src->md_ctx ); - return( 0 ); + return ( 0 ); } #if ! defined(MBEDTLS_DEPRECATED_REMOVED) @@ -224,66 +223,64 @@ int mbedtls_md_init_ctx( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_ int mbedtls_md_setup( mbedtls_md_context_t *ctx, const mbedtls_md_info_t *md_info, int hmac ) { - if( md_info == NULL || ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL || ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - if( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_MD_ALLOC_FAILED ); + if ( ( ctx->md_ctx = md_info->ctx_alloc_func() ) == NULL ) + return ( MBEDTLS_ERR_MD_ALLOC_FAILED ); - if( hmac != 0 ) - { + if ( hmac != 0 ) { ctx->hmac_ctx = mbedtls_calloc( 2, md_info->block_size ); - if( ctx->hmac_ctx == NULL ) - { + if ( ctx->hmac_ctx == NULL ) { md_info->ctx_free_func( ctx->md_ctx ); - return( MBEDTLS_ERR_MD_ALLOC_FAILED ); + return ( MBEDTLS_ERR_MD_ALLOC_FAILED ); } } ctx->md_info = md_info; - return( 0 ); + return ( 0 ); } int mbedtls_md_starts( mbedtls_md_context_t *ctx ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->starts_func( ctx->md_ctx ); - return( 0 ); + return ( 0 ); } int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->update_func( ctx->md_ctx, input, ilen ); - return( 0 ); + return ( 0 ); } int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->finish_func( ctx->md_ctx, output ); - return( 0 ); + return ( 0 ); } int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { - if( md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); md_info->digest_func( input, ilen, output ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_FS_IO) @@ -295,24 +292,23 @@ int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigne mbedtls_md_context_t ctx; unsigned char buf[1024]; - if( md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_MD_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_MD_FILE_IO_ERROR ); mbedtls_md_init( &ctx ); - if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) + if ( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) goto cleanup; md_info->starts_func( ctx.md_ctx ); - while( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) + while ( ( n = fread( buf, 1, sizeof( buf ), f ) ) > 0 ) md_info->update_func( ctx.md_ctx, buf, n ); - if( ferror( f ) != 0 ) - { + if ( ferror( f ) != 0 ) { ret = MBEDTLS_ERR_MD_FILE_IO_ERROR; goto cleanup; } @@ -323,7 +319,7 @@ int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigne fclose( f ); mbedtls_md_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -333,11 +329,10 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, unsigned char *ipad, *opad; size_t i; - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); - if( keylen > (size_t) ctx->md_info->block_size ) - { + if ( keylen > (size_t) ctx->md_info->block_size ) { ctx->md_info->starts_func( ctx->md_ctx ); ctx->md_info->update_func( ctx->md_ctx, key, keylen ); ctx->md_info->finish_func( ctx->md_ctx, sum ); @@ -352,8 +347,7 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, memset( ipad, 0x36, ctx->md_info->block_size ); memset( opad, 0x5C, ctx->md_info->block_size ); - for( i = 0; i < keylen; i++ ) - { + for ( i = 0; i < keylen; i++ ) { ipad[i] = (unsigned char)( ipad[i] ^ key[i] ); opad[i] = (unsigned char)( opad[i] ^ key[i] ); } @@ -363,17 +357,17 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key, ctx->md_info->starts_func( ctx->md_ctx ); ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *input, size_t ilen ) { - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->update_func( ctx->md_ctx, input, ilen ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) @@ -381,8 +375,8 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) unsigned char tmp[MBEDTLS_MD_MAX_SIZE]; unsigned char *opad; - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); opad = (unsigned char *) ctx->hmac_ctx + ctx->md_info->block_size; @@ -392,38 +386,38 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output ) ctx->md_info->update_func( ctx->md_ctx, tmp, ctx->md_info->size ); ctx->md_info->finish_func( ctx->md_ctx, output ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx ) { unsigned char *ipad; - if( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL || ctx->hmac_ctx == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ipad = (unsigned char *) ctx->hmac_ctx; ctx->md_info->starts_func( ctx->md_ctx ); ctx->md_info->update_func( ctx->md_ctx, ipad, ctx->md_info->block_size ); - return( 0 ); + return ( 0 ); } int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, size_t keylen, - const unsigned char *input, size_t ilen, - unsigned char *output ) + const unsigned char *input, size_t ilen, + unsigned char *output ) { mbedtls_md_context_t ctx; int ret; - if( md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); mbedtls_md_init( &ctx ); - if( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &ctx, md_info, 1 ) ) != 0 ) + return ( ret ); mbedtls_md_hmac_starts( &ctx, key, keylen ); mbedtls_md_hmac_update( &ctx, input, ilen ); @@ -431,39 +425,39 @@ int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key, mbedtls_md_free( &ctx ); - return( 0 ); + return ( 0 ); } int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data ) { - if( ctx == NULL || ctx->md_info == NULL ) - return( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->md_info == NULL ) + return ( MBEDTLS_ERR_MD_BAD_INPUT_DATA ); ctx->md_info->process_func( ctx->md_ctx, data ); - return( 0 ); + return ( 0 ); } unsigned char mbedtls_md_get_size( const mbedtls_md_info_t *md_info ) { - if( md_info == NULL ) - return( 0 ); + if ( md_info == NULL ) + return ( 0 ); return md_info->size; } mbedtls_md_type_t mbedtls_md_get_type( const mbedtls_md_info_t *md_info ) { - if( md_info == NULL ) - return( MBEDTLS_MD_NONE ); + if ( md_info == NULL ) + return ( MBEDTLS_MD_NONE ); return md_info->type; } const char *mbedtls_md_get_name( const mbedtls_md_info_t *md_info ) { - if( md_info == NULL ) - return( NULL ); + if ( md_info == NULL ) + return ( NULL ); return md_info->name; } diff --git a/external_libs/mbedtls/library/md2.c b/external_libs/mbedtls/library/md2.c index 8976701..8a4d5ef 100644 --- a/external_libs/mbedtls/library/md2.c +++ b/external_libs/mbedtls/library/md2.c @@ -49,12 +49,13 @@ #if !defined(MBEDTLS_MD2_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } -static const unsigned char PI_SUBST[256] = -{ +static const unsigned char PI_SUBST[256] = { 0x29, 0x2E, 0x43, 0xC9, 0xA2, 0xD8, 0x7C, 0x01, 0x3D, 0x36, 0x54, 0xA1, 0xEC, 0xF0, 0x06, 0x13, 0x62, 0xA7, 0x05, 0xF3, 0xC0, 0xC7, 0x73, 0x8C, 0x98, 0x93, 0x2B, 0xD9, 0xBC, 0x4C, @@ -90,7 +91,7 @@ void mbedtls_md2_init( mbedtls_md2_context *ctx ) void mbedtls_md2_free( mbedtls_md2_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_md2_context ) ); @@ -119,19 +120,16 @@ void mbedtls_md2_process( mbedtls_md2_context *ctx ) int i, j; unsigned char t = 0; - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { ctx->state[i + 16] = ctx->buffer[i]; ctx->state[i + 32] = (unsigned char)( ctx->buffer[i] ^ ctx->state[i]); } - for( i = 0; i < 18; i++ ) - { - for( j = 0; j < 48; j++ ) - { + for ( i = 0; i < 18; i++ ) { + for ( j = 0; j < 48; j++ ) { ctx->state[j] = (unsigned char) - ( ctx->state[j] ^ PI_SUBST[t] ); + ( ctx->state[j] ^ PI_SUBST[t] ); t = ctx->state[j]; } @@ -140,10 +138,9 @@ void mbedtls_md2_process( mbedtls_md2_context *ctx ) t = ctx->cksum[15]; - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { ctx->cksum[i] = (unsigned char) - ( ctx->cksum[i] ^ PI_SUBST[ctx->buffer[i] ^ t] ); + ( ctx->cksum[i] ^ PI_SUBST[ctx->buffer[i] ^ t] ); t = ctx->cksum[i]; } } @@ -156,9 +153,8 @@ void mbedtls_md2_update( mbedtls_md2_context *ctx, const unsigned char *input, s { size_t fill; - while( ilen > 0 ) - { - if( ctx->left + ilen > 16 ) + while ( ilen > 0 ) { + if ( ctx->left + ilen > 16 ) fill = 16 - ctx->left; else fill = ilen; @@ -169,8 +165,7 @@ void mbedtls_md2_update( mbedtls_md2_context *ctx, const unsigned char *input, s input += fill; ilen -= fill; - if( ctx->left == 16 ) - { + if ( ctx->left == 16 ) { ctx->left = 0; mbedtls_md2_process( ctx ); } @@ -187,7 +182,7 @@ void mbedtls_md2_finish( mbedtls_md2_context *ctx, unsigned char output[16] ) x = (unsigned char)( 16 - ctx->left ); - for( i = ctx->left; i < 16; i++ ) + for ( i = ctx->left; i < 16; i++ ) ctx->buffer[i] = x; mbedtls_md2_process( ctx ); @@ -219,34 +214,48 @@ void mbedtls_md2( const unsigned char *input, size_t ilen, unsigned char output[ /* * RFC 1319 test vectors */ -static const char md2_test_str[7][81] = -{ +static const char md2_test_str[7][81] = { { "" }, { "a" }, { "abc" }, { "message digest" }, { "abcdefghijklmnopqrstuvwxyz" }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } + { + "12345678901234567890123456789012345678901234567890123456789012" \ + "345678901234567890" + } }; -static const unsigned char md2_test_sum[7][16] = -{ - { 0x83, 0x50, 0xE5, 0xA3, 0xE2, 0x4C, 0x15, 0x3D, - 0xF2, 0x27, 0x5C, 0x9F, 0x80, 0x69, 0x27, 0x73 }, - { 0x32, 0xEC, 0x01, 0xEC, 0x4A, 0x6D, 0xAC, 0x72, - 0xC0, 0xAB, 0x96, 0xFB, 0x34, 0xC0, 0xB5, 0xD1 }, - { 0xDA, 0x85, 0x3B, 0x0D, 0x3F, 0x88, 0xD9, 0x9B, - 0x30, 0x28, 0x3A, 0x69, 0xE6, 0xDE, 0xD6, 0xBB }, - { 0xAB, 0x4F, 0x49, 0x6B, 0xFB, 0x2A, 0x53, 0x0B, - 0x21, 0x9F, 0xF3, 0x30, 0x31, 0xFE, 0x06, 0xB0 }, - { 0x4E, 0x8D, 0xDF, 0xF3, 0x65, 0x02, 0x92, 0xAB, - 0x5A, 0x41, 0x08, 0xC3, 0xAA, 0x47, 0x94, 0x0B }, - { 0xDA, 0x33, 0xDE, 0xF2, 0xA4, 0x2D, 0xF1, 0x39, - 0x75, 0x35, 0x28, 0x46, 0xC3, 0x03, 0x38, 0xCD }, - { 0xD5, 0x97, 0x6F, 0x79, 0xD8, 0x3D, 0x3A, 0x0D, - 0xC9, 0x80, 0x6C, 0x3C, 0x66, 0xF3, 0xEF, 0xD8 } +static const unsigned char md2_test_sum[7][16] = { + { + 0x83, 0x50, 0xE5, 0xA3, 0xE2, 0x4C, 0x15, 0x3D, + 0xF2, 0x27, 0x5C, 0x9F, 0x80, 0x69, 0x27, 0x73 + }, + { + 0x32, 0xEC, 0x01, 0xEC, 0x4A, 0x6D, 0xAC, 0x72, + 0xC0, 0xAB, 0x96, 0xFB, 0x34, 0xC0, 0xB5, 0xD1 + }, + { + 0xDA, 0x85, 0x3B, 0x0D, 0x3F, 0x88, 0xD9, 0x9B, + 0x30, 0x28, 0x3A, 0x69, 0xE6, 0xDE, 0xD6, 0xBB + }, + { + 0xAB, 0x4F, 0x49, 0x6B, 0xFB, 0x2A, 0x53, 0x0B, + 0x21, 0x9F, 0xF3, 0x30, 0x31, 0xFE, 0x06, 0xB0 + }, + { + 0x4E, 0x8D, 0xDF, 0xF3, 0x65, 0x02, 0x92, 0xAB, + 0x5A, 0x41, 0x08, 0xC3, 0xAA, 0x47, 0x94, 0x0B + }, + { + 0xDA, 0x33, 0xDE, 0xF2, 0xA4, 0x2D, 0xF1, 0x39, + 0x75, 0x35, 0x28, 0x46, 0xC3, 0x03, 0x38, 0xCD + }, + { + 0xD5, 0x97, 0x6F, 0x79, 0xD8, 0x3D, 0x3A, 0x0D, + 0xC9, 0x80, 0x6C, 0x3C, 0x66, 0xF3, 0xEF, 0xD8 + } }; /* @@ -257,30 +266,28 @@ int mbedtls_md2_self_test( int verbose ) int i; unsigned char md2sum[16]; - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 7; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " MD2 test #%d: ", i + 1 ); mbedtls_md2( (unsigned char *) md2_test_str[i], - strlen( md2_test_str[i] ), md2sum ); + strlen( md2_test_str[i] ), md2sum ); - if( memcmp( md2sum, md2_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( md2sum, md2_test_sum[i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/md4.c b/external_libs/mbedtls/library/md4.c index 11a77e3..1e6da38 100644 --- a/external_libs/mbedtls/library/md4.c +++ b/external_libs/mbedtls/library/md4.c @@ -49,8 +49,10 @@ #if !defined(MBEDTLS_MD4_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -83,7 +85,7 @@ void mbedtls_md4_init( mbedtls_md4_context *ctx ) void mbedtls_md4_free( mbedtls_md4_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_md4_context ) ); @@ -222,7 +224,7 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -231,11 +233,10 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), (void *) input, fill ); mbedtls_md4_process( ctx, ctx->buffer ); @@ -244,23 +245,20 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_md4_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), (void *) input, ilen ); } } -static const unsigned char md4_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char md4_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -276,7 +274,7 @@ void mbedtls_md4_finish( mbedtls_md4_context *ctx, unsigned char output[16] ) unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_LE( low, msglen, 0 ); @@ -315,34 +313,48 @@ void mbedtls_md4( const unsigned char *input, size_t ilen, unsigned char output[ /* * RFC 1320 test vectors */ -static const char md4_test_str[7][81] = -{ +static const char md4_test_str[7][81] = { { "" }, { "a" }, { "abc" }, { "message digest" }, { "abcdefghijklmnopqrstuvwxyz" }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } + { + "12345678901234567890123456789012345678901234567890123456789012" \ + "345678901234567890" + } }; -static const unsigned char md4_test_sum[7][16] = -{ - { 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, - 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 }, - { 0xBD, 0xE5, 0x2C, 0xB3, 0x1D, 0xE3, 0x3E, 0x46, - 0x24, 0x5E, 0x05, 0xFB, 0xDB, 0xD6, 0xFB, 0x24 }, - { 0xA4, 0x48, 0x01, 0x7A, 0xAF, 0x21, 0xD8, 0x52, - 0x5F, 0xC1, 0x0A, 0xE8, 0x7A, 0xA6, 0x72, 0x9D }, - { 0xD9, 0x13, 0x0A, 0x81, 0x64, 0x54, 0x9F, 0xE8, - 0x18, 0x87, 0x48, 0x06, 0xE1, 0xC7, 0x01, 0x4B }, - { 0xD7, 0x9E, 0x1C, 0x30, 0x8A, 0xA5, 0xBB, 0xCD, - 0xEE, 0xA8, 0xED, 0x63, 0xDF, 0x41, 0x2D, 0xA9 }, - { 0x04, 0x3F, 0x85, 0x82, 0xF2, 0x41, 0xDB, 0x35, - 0x1C, 0xE6, 0x27, 0xE1, 0x53, 0xE7, 0xF0, 0xE4 }, - { 0xE3, 0x3B, 0x4D, 0xDC, 0x9C, 0x38, 0xF2, 0x19, - 0x9C, 0x3E, 0x7B, 0x16, 0x4F, 0xCC, 0x05, 0x36 } +static const unsigned char md4_test_sum[7][16] = { + { + 0x31, 0xD6, 0xCF, 0xE0, 0xD1, 0x6A, 0xE9, 0x31, + 0xB7, 0x3C, 0x59, 0xD7, 0xE0, 0xC0, 0x89, 0xC0 + }, + { + 0xBD, 0xE5, 0x2C, 0xB3, 0x1D, 0xE3, 0x3E, 0x46, + 0x24, 0x5E, 0x05, 0xFB, 0xDB, 0xD6, 0xFB, 0x24 + }, + { + 0xA4, 0x48, 0x01, 0x7A, 0xAF, 0x21, 0xD8, 0x52, + 0x5F, 0xC1, 0x0A, 0xE8, 0x7A, 0xA6, 0x72, 0x9D + }, + { + 0xD9, 0x13, 0x0A, 0x81, 0x64, 0x54, 0x9F, 0xE8, + 0x18, 0x87, 0x48, 0x06, 0xE1, 0xC7, 0x01, 0x4B + }, + { + 0xD7, 0x9E, 0x1C, 0x30, 0x8A, 0xA5, 0xBB, 0xCD, + 0xEE, 0xA8, 0xED, 0x63, 0xDF, 0x41, 0x2D, 0xA9 + }, + { + 0x04, 0x3F, 0x85, 0x82, 0xF2, 0x41, 0xDB, 0x35, + 0x1C, 0xE6, 0x27, 0xE1, 0x53, 0xE7, 0xF0, 0xE4 + }, + { + 0xE3, 0x3B, 0x4D, 0xDC, 0x9C, 0x38, 0xF2, 0x19, + 0x9C, 0x3E, 0x7B, 0x16, 0x4F, 0xCC, 0x05, 0x36 + } }; /* @@ -353,30 +365,28 @@ int mbedtls_md4_self_test( int verbose ) int i; unsigned char md4sum[16]; - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 7; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " MD4 test #%d: ", i + 1 ); mbedtls_md4( (unsigned char *) md4_test_str[i], - strlen( md4_test_str[i] ), md4sum ); + strlen( md4_test_str[i] ), md4sum ); - if( memcmp( md4sum, md4_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( md4sum, md4_test_sum[i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/md5.c b/external_libs/mbedtls/library/md5.c index 5d972dc..2bf4f5a 100644 --- a/external_libs/mbedtls/library/md5.c +++ b/external_libs/mbedtls/library/md5.c @@ -48,8 +48,10 @@ #if !defined(MBEDTLS_MD5_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -82,7 +84,7 @@ void mbedtls_md5_init( mbedtls_md5_context *ctx ) void mbedtls_md5_free( mbedtls_md5_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_md5_context ) ); @@ -241,7 +243,7 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -250,11 +252,10 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_md5_process( ctx, ctx->buffer ); input += fill; @@ -262,22 +263,19 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_md5_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), input, ilen ); } } -static const unsigned char md5_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char md5_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -293,7 +291,7 @@ void mbedtls_md5_finish( mbedtls_md5_context *ctx, unsigned char output[16] ) unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_LE( low, msglen, 0 ); @@ -331,39 +329,52 @@ void mbedtls_md5( const unsigned char *input, size_t ilen, unsigned char output[ /* * RFC 1321 test vectors */ -static const unsigned char md5_test_buf[7][81] = -{ +static const unsigned char md5_test_buf[7][81] = { { "" }, { "a" }, { "abc" }, { "message digest" }, { "abcdefghijklmnopqrstuvwxyz" }, { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" }, - { "12345678901234567890123456789012345678901234567890123456789012" \ - "345678901234567890" } + { + "12345678901234567890123456789012345678901234567890123456789012" \ + "345678901234567890" + } }; -static const int md5_test_buflen[7] = -{ +static const int md5_test_buflen[7] = { 0, 1, 3, 14, 26, 62, 80 }; -static const unsigned char md5_test_sum[7][16] = -{ - { 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, - 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E }, - { 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, - 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 }, - { 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, - 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 }, - { 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, - 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 }, - { 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, - 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B }, - { 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, - 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F }, - { 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, - 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A } +static const unsigned char md5_test_sum[7][16] = { + { + 0xD4, 0x1D, 0x8C, 0xD9, 0x8F, 0x00, 0xB2, 0x04, + 0xE9, 0x80, 0x09, 0x98, 0xEC, 0xF8, 0x42, 0x7E + }, + { + 0x0C, 0xC1, 0x75, 0xB9, 0xC0, 0xF1, 0xB6, 0xA8, + 0x31, 0xC3, 0x99, 0xE2, 0x69, 0x77, 0x26, 0x61 + }, + { + 0x90, 0x01, 0x50, 0x98, 0x3C, 0xD2, 0x4F, 0xB0, + 0xD6, 0x96, 0x3F, 0x7D, 0x28, 0xE1, 0x7F, 0x72 + }, + { + 0xF9, 0x6B, 0x69, 0x7D, 0x7C, 0xB7, 0x93, 0x8D, + 0x52, 0x5A, 0x2F, 0x31, 0xAA, 0xF1, 0x61, 0xD0 + }, + { + 0xC3, 0xFC, 0xD3, 0xD7, 0x61, 0x92, 0xE4, 0x00, + 0x7D, 0xFB, 0x49, 0x6C, 0xCA, 0x67, 0xE1, 0x3B + }, + { + 0xD1, 0x74, 0xAB, 0x98, 0xD2, 0x77, 0xD9, 0xF5, + 0xA5, 0x61, 0x1C, 0x2C, 0x9F, 0x41, 0x9D, 0x9F + }, + { + 0x57, 0xED, 0xF4, 0xA2, 0x2B, 0xE3, 0xC9, 0x55, + 0xAC, 0x49, 0xDA, 0x2E, 0x21, 0x07, 0xB6, 0x7A + } }; /* @@ -374,29 +385,27 @@ int mbedtls_md5_self_test( int verbose ) int i; unsigned char md5sum[16]; - for( i = 0; i < 7; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 7; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " MD5 test #%d: ", i + 1 ); mbedtls_md5( md5_test_buf[i], md5_test_buflen[i], md5sum ); - if( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( md5sum, md5_test_sum[i], 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/md_wrap.c b/external_libs/mbedtls/library/md_wrap.c index 2cfcae2..839779e 100644 --- a/external_libs/mbedtls/library/md_wrap.c +++ b/external_libs/mbedtls/library/md_wrap.c @@ -91,10 +91,10 @@ static void *md2_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md2_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_md2_init( (mbedtls_md2_context *) ctx ); - return( ctx ); + return ( ctx ); } static void md2_ctx_free( void *ctx ) @@ -106,7 +106,7 @@ static void md2_ctx_free( void *ctx ) static void md2_clone_wrap( void *dst, const void *src ) { mbedtls_md2_clone( (mbedtls_md2_context *) dst, - (const mbedtls_md2_context *) src ); + (const mbedtls_md2_context *) src ); } static void md2_process_wrap( void *ctx, const unsigned char *data ) @@ -155,10 +155,10 @@ static void *md4_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md4_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_md4_init( (mbedtls_md4_context *) ctx ); - return( ctx ); + return ( ctx ); } static void md4_ctx_free( void *ctx ) @@ -170,7 +170,7 @@ static void md4_ctx_free( void *ctx ) static void md4_clone_wrap( void *dst, const void *src ) { mbedtls_md4_clone( (mbedtls_md4_context *) dst, - (const mbedtls_md4_context *) src ); + (const mbedtls_md4_context *) src ); } static void md4_process_wrap( void *ctx, const unsigned char *data ) @@ -217,10 +217,10 @@ static void *md5_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_md5_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_md5_init( (mbedtls_md5_context *) ctx ); - return( ctx ); + return ( ctx ); } static void md5_ctx_free( void *ctx ) @@ -232,7 +232,7 @@ static void md5_ctx_free( void *ctx ) static void md5_clone_wrap( void *dst, const void *src ) { mbedtls_md5_clone( (mbedtls_md5_context *) dst, - (const mbedtls_md5_context *) src ); + (const mbedtls_md5_context *) src ); } static void md5_process_wrap( void *ctx, const unsigned char *data ) @@ -279,10 +279,10 @@ static void *ripemd160_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ripemd160_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ripemd160_init( (mbedtls_ripemd160_context *) ctx ); - return( ctx ); + return ( ctx ); } static void ripemd160_ctx_free( void *ctx ) @@ -294,7 +294,7 @@ static void ripemd160_ctx_free( void *ctx ) static void ripemd160_clone_wrap( void *dst, const void *src ) { mbedtls_ripemd160_clone( (mbedtls_ripemd160_context *) dst, - (const mbedtls_ripemd160_context *) src ); + (const mbedtls_ripemd160_context *) src ); } static void ripemd160_process_wrap( void *ctx, const unsigned char *data ) @@ -341,16 +341,16 @@ static void *sha1_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha1_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_sha1_init( (mbedtls_sha1_context *) ctx ); - return( ctx ); + return ( ctx ); } static void sha1_clone_wrap( void *dst, const void *src ) { mbedtls_sha1_clone( (mbedtls_sha1_context *) dst, - (const mbedtls_sha1_context *) src ); + (const mbedtls_sha1_context *) src ); } static void sha1_ctx_free( void *ctx ) @@ -403,7 +403,7 @@ static void sha224_finish_wrap( void *ctx, unsigned char *output ) } static void sha224_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha256( input, ilen, output, 1 ); } @@ -412,10 +412,10 @@ static void *sha224_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha256_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_sha256_init( (mbedtls_sha256_context *) ctx ); - return( ctx ); + return ( ctx ); } static void sha224_ctx_free( void *ctx ) @@ -427,7 +427,7 @@ static void sha224_ctx_free( void *ctx ) static void sha224_clone_wrap( void *dst, const void *src ) { mbedtls_sha256_clone( (mbedtls_sha256_context *) dst, - (const mbedtls_sha256_context *) src ); + (const mbedtls_sha256_context *) src ); } static void sha224_process_wrap( void *ctx, const unsigned char *data ) @@ -456,7 +456,7 @@ static void sha256_starts_wrap( void *ctx ) } static void sha256_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha256( input, ilen, output, 0 ); } @@ -497,7 +497,7 @@ static void sha384_finish_wrap( void *ctx, unsigned char *output ) } static void sha384_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha512( input, ilen, output, 1 ); } @@ -506,10 +506,10 @@ static void *sha384_ctx_alloc( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_sha512_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_sha512_init( (mbedtls_sha512_context *) ctx ); - return( ctx ); + return ( ctx ); } static void sha384_ctx_free( void *ctx ) @@ -521,7 +521,7 @@ static void sha384_ctx_free( void *ctx ) static void sha384_clone_wrap( void *dst, const void *src ) { mbedtls_sha512_clone( (mbedtls_sha512_context *) dst, - (const mbedtls_sha512_context *) src ); + (const mbedtls_sha512_context *) src ); } static void sha384_process_wrap( void *ctx, const unsigned char *data ) @@ -550,7 +550,7 @@ static void sha512_starts_wrap( void *ctx ) } static void sha512_wrap( const unsigned char *input, size_t ilen, - unsigned char *output ) + unsigned char *output ) { mbedtls_sha512( input, ilen, output, 0 ); } diff --git a/external_libs/mbedtls/library/memory_buffer_alloc.c b/external_libs/mbedtls/library/memory_buffer_alloc.c index 545d5a2..47796cd 100644 --- a/external_libs/mbedtls/library/memory_buffer_alloc.c +++ b/external_libs/mbedtls/library/memory_buffer_alloc.c @@ -43,8 +43,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #define MAGIC1 0xFF00AA55 @@ -52,8 +54,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { #define MAX_BT 20 typedef struct _memory_header memory_header; -struct _memory_header -{ +struct _memory_header { size_t magic1; size_t size; size_t alloc; @@ -68,8 +69,7 @@ struct _memory_header size_t magic2; }; -typedef struct -{ +typedef struct { unsigned char *buf; size_t len; memory_header *first; @@ -99,15 +99,15 @@ static void debug_header( memory_header *hdr ) #endif mbedtls_fprintf( stderr, "HDR: PTR(%10zu), PREV(%10zu), NEXT(%10zu), " - "ALLOC(%zu), SIZE(%10zu)\n", - (size_t) hdr, (size_t) hdr->prev, (size_t) hdr->next, - hdr->alloc, hdr->size ); + "ALLOC(%zu), SIZE(%10zu)\n", + (size_t) hdr, (size_t) hdr->prev, (size_t) hdr->next, + hdr->alloc, hdr->size ); mbedtls_fprintf( stderr, " FPREV(%10zu), FNEXT(%10zu)\n", - (size_t) hdr->prev_free, (size_t) hdr->next_free ); + (size_t) hdr->prev_free, (size_t) hdr->next_free ); #if defined(MBEDTLS_MEMORY_BACKTRACE) mbedtls_fprintf( stderr, "TRACE: \n" ); - for( i = 0; i < hdr->trace_count; i++ ) + for ( i = 0; i < hdr->trace_count; i++ ) mbedtls_fprintf( stderr, "%s\n", hdr->trace[i] ); mbedtls_fprintf( stderr, "\n" ); #endif @@ -118,8 +118,7 @@ static void debug_chain() memory_header *cur = heap.first; mbedtls_fprintf( stderr, "\nBlock list\n" ); - while( cur != NULL ) - { + while ( cur != NULL ) { debug_header( cur ); cur = cur->next; } @@ -127,8 +126,7 @@ static void debug_chain() mbedtls_fprintf( stderr, "Free list\n" ); cur = heap.first_free; - while( cur != NULL ) - { + while ( cur != NULL ) { debug_header( cur ); cur = cur->next_free; } @@ -137,96 +135,86 @@ static void debug_chain() static int verify_header( memory_header *hdr ) { - if( hdr->magic1 != MAGIC1 ) - { + if ( hdr->magic1 != MAGIC1 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: MAGIC1 mismatch\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->magic2 != MAGIC2 ) - { + if ( hdr->magic2 != MAGIC2 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: MAGIC2 mismatch\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->alloc > 1 ) - { + if ( hdr->alloc > 1 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: alloc has illegal value\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->prev != NULL && hdr->prev == hdr->next ) - { + if ( hdr->prev != NULL && hdr->prev == hdr->next ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: prev == next\n" ); #endif - return( 1 ); + return ( 1 ); } - if( hdr->prev_free != NULL && hdr->prev_free == hdr->next_free ) - { + if ( hdr->prev_free != NULL && hdr->prev_free == hdr->next_free ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: prev_free == next_free\n" ); #endif - return( 1 ); + return ( 1 ); } - return( 0 ); + return ( 0 ); } static int verify_chain() { memory_header *prv = heap.first, *cur = heap.first->next; - if( verify_header( heap.first ) != 0 ) - { + if ( verify_header( heap.first ) != 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification of first header " - "failed\n" ); + "failed\n" ); #endif - return( 1 ); + return ( 1 ); } - if( heap.first->prev != NULL ) - { + if ( heap.first->prev != NULL ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification failed: " - "first->prev != NULL\n" ); + "first->prev != NULL\n" ); #endif - return( 1 ); + return ( 1 ); } - while( cur != NULL ) - { - if( verify_header( cur ) != 0 ) - { + while ( cur != NULL ) { + if ( verify_header( cur ) != 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification of header " - "failed\n" ); + "failed\n" ); #endif - return( 1 ); + return ( 1 ); } - if( cur->prev != prv ) - { + if ( cur->prev != prv ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: verification failed: " - "cur->prev != prv\n" ); + "cur->prev != prv\n" ); #endif - return( 1 ); + return ( 1 ); } prv = cur; cur = cur->next; } - return( 0 ); + return ( 0 ); } static void *buffer_alloc_calloc( size_t n, size_t size ) @@ -240,38 +228,35 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) size_t trace_cnt; #endif - if( heap.buf == NULL || heap.first == NULL ) - return( NULL ); + if ( heap.buf == NULL || heap.first == NULL ) + return ( NULL ); original_len = len = n * size; - if( n != 0 && len / n != size ) - return( NULL ); + if ( n != 0 && len / n != size ) + return ( NULL ); - if( len % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) - { + if ( len % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) { len -= len % MBEDTLS_MEMORY_ALIGN_MULTIPLE; len += MBEDTLS_MEMORY_ALIGN_MULTIPLE; } // Find block that fits // - while( cur != NULL ) - { - if( cur->size >= len ) + while ( cur != NULL ) { + if ( cur->size >= len ) break; cur = cur->next_free; } - if( cur == NULL ) - return( NULL ); + if ( cur == NULL ) + return ( NULL ); - if( cur->alloc != 0 ) - { + if ( cur->alloc != 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: block in free_list but allocated " - "data\n" ); + "data\n" ); #endif mbedtls_exit( 1 ); } @@ -282,19 +267,18 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) // Found location, split block if > memory_header + 4 room left // - if( cur->size - len < sizeof(memory_header) + - MBEDTLS_MEMORY_ALIGN_MULTIPLE ) - { + if ( cur->size - len < sizeof(memory_header) + + MBEDTLS_MEMORY_ALIGN_MULTIPLE ) { cur->alloc = 1; // Remove from free_list // - if( cur->prev_free != NULL ) + if ( cur->prev_free != NULL ) cur->prev_free->next_free = cur->next_free; else heap.first_free = cur->next_free; - if( cur->next_free != NULL ) + if ( cur->next_free != NULL ) cur->next_free->prev_free = cur->prev_free; cur->prev_free = NULL; @@ -302,7 +286,7 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) #if defined(MBEDTLS_MEMORY_DEBUG) heap.total_used += cur->size; - if( heap.total_used > heap.maximum_used ) + if ( heap.total_used > heap.maximum_used ) heap.maximum_used = heap.total_used; #endif #if defined(MBEDTLS_MEMORY_BACKTRACE) @@ -311,13 +295,13 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) cur->trace_count = trace_cnt; #endif - if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) + if ( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) mbedtls_exit( 1 ); ret = (unsigned char *) cur + sizeof( memory_header ); memset( ret, 0, original_len ); - return( ret ); + return ( ret ); } p = ( (unsigned char *) cur ) + sizeof(memory_header) + len; @@ -334,19 +318,19 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) new->magic1 = MAGIC1; new->magic2 = MAGIC2; - if( new->next != NULL ) + if ( new->next != NULL ) new->next->prev = new; // Replace cur with new in free_list // new->prev_free = cur->prev_free; new->next_free = cur->next_free; - if( new->prev_free != NULL ) + if ( new->prev_free != NULL ) new->prev_free->next_free = new; else heap.first_free = new; - if( new->next_free != NULL ) + if ( new->next_free != NULL ) new->next_free->prev_free = new; cur->alloc = 1; @@ -357,10 +341,10 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) #if defined(MBEDTLS_MEMORY_DEBUG) heap.header_count++; - if( heap.header_count > heap.maximum_header_count ) + if ( heap.header_count > heap.maximum_header_count ) heap.maximum_header_count = heap.header_count; heap.total_used += cur->size; - if( heap.total_used > heap.maximum_used ) + if ( heap.total_used > heap.maximum_used ) heap.maximum_used = heap.total_used; #endif #if defined(MBEDTLS_MEMORY_BACKTRACE) @@ -369,13 +353,13 @@ static void *buffer_alloc_calloc( size_t n, size_t size ) cur->trace_count = trace_cnt; #endif - if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) + if ( ( heap.verify & MBEDTLS_MEMORY_VERIFY_ALLOC ) && verify_chain() != 0 ) mbedtls_exit( 1 ); ret = (unsigned char *) cur + sizeof( memory_header ); memset( ret, 0, original_len ); - return( ret ); + return ( ret ); } static void buffer_alloc_free( void *ptr ) @@ -383,14 +367,13 @@ static void buffer_alloc_free( void *ptr ) memory_header *hdr, *old = NULL; unsigned char *p = (unsigned char *) ptr; - if( ptr == NULL || heap.buf == NULL || heap.first == NULL ) + if ( ptr == NULL || heap.buf == NULL || heap.first == NULL ) return; - if( p < heap.buf || p > heap.buf + heap.len ) - { + if ( p < heap.buf || p > heap.buf + heap.len ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: mbedtls_free() outside of managed " - "space\n" ); + "space\n" ); #endif mbedtls_exit( 1 ); } @@ -398,14 +381,13 @@ static void buffer_alloc_free( void *ptr ) p -= sizeof(memory_header); hdr = (memory_header *) p; - if( verify_header( hdr ) != 0 ) + if ( verify_header( hdr ) != 0 ) mbedtls_exit( 1 ); - if( hdr->alloc != 1 ) - { + if ( hdr->alloc != 1 ) { #if defined(MBEDTLS_MEMORY_DEBUG) mbedtls_fprintf( stderr, "FATAL: mbedtls_free() on unallocated " - "data\n" ); + "data\n" ); #endif mbedtls_exit( 1 ); } @@ -425,8 +407,7 @@ static void buffer_alloc_free( void *ptr ) // Regroup with block before // - if( hdr->prev != NULL && hdr->prev->alloc == 0 ) - { + if ( hdr->prev != NULL && hdr->prev->alloc == 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) heap.header_count--; #endif @@ -435,7 +416,7 @@ static void buffer_alloc_free( void *ptr ) old = hdr; hdr = hdr->prev; - if( hdr->next != NULL ) + if ( hdr->next != NULL ) hdr->next->prev = hdr; memset( old, 0, sizeof(memory_header) ); @@ -443,8 +424,7 @@ static void buffer_alloc_free( void *ptr ) // Regroup with block after // - if( hdr->next != NULL && hdr->next->alloc == 0 ) - { + if ( hdr->next != NULL && hdr->next->alloc == 0 ) { #if defined(MBEDTLS_MEMORY_DEBUG) heap.header_count--; #endif @@ -452,29 +432,28 @@ static void buffer_alloc_free( void *ptr ) old = hdr->next; hdr->next = hdr->next->next; - if( hdr->prev_free != NULL || hdr->next_free != NULL ) - { - if( hdr->prev_free != NULL ) + if ( hdr->prev_free != NULL || hdr->next_free != NULL ) { + if ( hdr->prev_free != NULL ) hdr->prev_free->next_free = hdr->next_free; else heap.first_free = hdr->next_free; - if( hdr->next_free != NULL ) + if ( hdr->next_free != NULL ) hdr->next_free->prev_free = hdr->prev_free; } hdr->prev_free = old->prev_free; hdr->next_free = old->next_free; - if( hdr->prev_free != NULL ) + if ( hdr->prev_free != NULL ) hdr->prev_free->next_free = hdr; else heap.first_free = hdr; - if( hdr->next_free != NULL ) + if ( hdr->next_free != NULL ) hdr->next_free->prev_free = hdr; - if( hdr->next != NULL ) + if ( hdr->next != NULL ) hdr->next->prev = hdr; memset( old, 0, sizeof(memory_header) ); @@ -483,15 +462,14 @@ static void buffer_alloc_free( void *ptr ) // Prepend to free_list if we have not merged // (Does not have to stay in same order as prev / next list) // - if( old == NULL ) - { + if ( old == NULL ) { hdr->next_free = heap.first_free; - if( heap.first_free != NULL ) + if ( heap.first_free != NULL ) heap.first_free->prev_free = hdr; heap.first_free = hdr; } - if( ( heap.verify & MBEDTLS_MEMORY_VERIFY_FREE ) && verify_chain() != 0 ) + if ( ( heap.verify & MBEDTLS_MEMORY_VERIFY_FREE ) && verify_chain() != 0 ) mbedtls_exit( 1 ); } @@ -509,18 +487,17 @@ int mbedtls_memory_buffer_alloc_verify() void mbedtls_memory_buffer_alloc_status() { mbedtls_fprintf( stderr, - "Current use: %zu blocks / %zu bytes, max: %zu blocks / " - "%zu bytes (total %zu bytes), alloc / free: %zu / %zu\n", - heap.header_count, heap.total_used, - heap.maximum_header_count, heap.maximum_used, - heap.maximum_header_count * sizeof( memory_header ) - + heap.maximum_used, - heap.alloc_count, heap.free_count ); - - if( heap.first->next == NULL ) + "Current use: %zu blocks / %zu bytes, max: %zu blocks / " + "%zu bytes (total %zu bytes), alloc / free: %zu / %zu\n", + heap.header_count, heap.total_used, + heap.maximum_header_count, heap.maximum_used, + heap.maximum_header_count * sizeof( memory_header ) + + heap.maximum_used, + heap.alloc_count, heap.free_count ); + + if ( heap.first->next == NULL ) mbedtls_fprintf( stderr, "All memory de-allocated in stack buffer\n" ); - else - { + else { mbedtls_fprintf( stderr, "Memory currently allocated:\n" ); debug_chain(); } @@ -549,19 +526,19 @@ void mbedtls_memory_buffer_alloc_cur_get( size_t *cur_used, size_t *cur_blocks ) static void *buffer_alloc_calloc_mutexed( size_t n, size_t size ) { void *buf; - if( mbedtls_mutex_lock( &heap.mutex ) != 0 ) - return( NULL ); + if ( mbedtls_mutex_lock( &heap.mutex ) != 0 ) + return ( NULL ); buf = buffer_alloc_calloc( n, size ); - if( mbedtls_mutex_unlock( &heap.mutex ) ) - return( NULL ); - return( buf ); + if ( mbedtls_mutex_unlock( &heap.mutex ) ) + return ( NULL ); + return ( buf ); } static void buffer_alloc_free_mutexed( void *ptr ) { /* We have to good option here, but corrupting the heap seems * worse than loosing memory. */ - if( mbedtls_mutex_lock( &heap.mutex ) ) + if ( mbedtls_mutex_lock( &heap.mutex ) ) return; buffer_alloc_free( ptr ); (void) mbedtls_mutex_unlock( &heap.mutex ); @@ -576,18 +553,17 @@ void mbedtls_memory_buffer_alloc_init( unsigned char *buf, size_t len ) #if defined(MBEDTLS_THREADING_C) mbedtls_mutex_init( &heap.mutex ); mbedtls_platform_set_calloc_free( buffer_alloc_calloc_mutexed, - buffer_alloc_free_mutexed ); + buffer_alloc_free_mutexed ); #else mbedtls_platform_set_calloc_free( buffer_alloc_calloc, buffer_alloc_free ); #endif - if( (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) - { + if ( (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE ) { /* Adjust len first since buf is used in the computation */ len -= MBEDTLS_MEMORY_ALIGN_MULTIPLE - - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; + - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; buf += MBEDTLS_MEMORY_ALIGN_MULTIPLE - - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; + - (size_t) buf % MBEDTLS_MEMORY_ALIGN_MULTIPLE; } heap.buf = buf; @@ -611,28 +587,27 @@ void mbedtls_memory_buffer_alloc_free() #if defined(MBEDTLS_SELF_TEST) static int check_pointer( void *p ) { - if( p == NULL ) - return( -1 ); + if ( p == NULL ) + return ( -1 ); - if( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 ) - return( -1 ); + if ( (size_t) p % MBEDTLS_MEMORY_ALIGN_MULTIPLE != 0 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } static int check_all_free( ) { - if( + if ( #if defined(MBEDTLS_MEMORY_DEBUG) heap.total_used != 0 || #endif heap.first != heap.first_free || - (void *) heap.first != (void *) heap.buf ) - { - return( -1 ); + (void *) heap.first != (void *) heap.buf ) { + return ( -1 ); } - return( 0 ); + return ( 0 ); } #define TEST_ASSERT( condition ) \ @@ -651,7 +626,7 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) unsigned char *p, *q, *r, *end; int ret = 0; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MBA test #1 (basic alloc-free cycle): " ); mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); @@ -675,10 +650,10 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) mbedtls_memory_buffer_alloc_free( ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MBA test #2 (buf not aligned): " ); mbedtls_memory_buffer_alloc_init( buf + 1, sizeof( buf ) - 1 ); @@ -701,10 +676,10 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) mbedtls_memory_buffer_alloc_free( ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " MBA test #3 (full): " ); mbedtls_memory_buffer_alloc_init( buf, sizeof( buf ) ); @@ -732,13 +707,13 @@ int mbedtls_memory_buffer_alloc_self_test( int verbose ) mbedtls_memory_buffer_alloc_free( ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); cleanup: mbedtls_memory_buffer_alloc_free( ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/net_sockets.c b/external_libs/mbedtls/library/net_sockets.c index cc06cbf..f894a87 100644 --- a/external_libs/mbedtls/library/net_sockets.c +++ b/external_libs/mbedtls/library/net_sockets.c @@ -107,10 +107,9 @@ static int net_prepare( void ) !defined(EFI32) WSADATA wsaData; - if( wsa_init_done == 0 ) - { - if( WSAStartup( MAKEWORD(2,0), &wsaData ) != 0 ) - return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + if ( wsa_init_done == 0 ) { + if ( WSAStartup( MAKEWORD(2, 0), &wsaData ) != 0 ) + return ( MBEDTLS_ERR_NET_SOCKET_FAILED ); wsa_init_done = 1; } @@ -119,7 +118,7 @@ static int net_prepare( void ) signal( SIGPIPE, SIG_IGN ); #endif #endif - return( 0 ); + return ( 0 ); } /* @@ -138,8 +137,8 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char int ret; struct addrinfo hints, *addr_list, *cur; - if( ( ret = net_prepare() ) != 0 ) - return( ret ); + if ( ( ret = net_prepare() ) != 0 ) + return ( ret ); /* Do name resolution with both IPv6 and IPv4 */ memset( &hints, 0, sizeof( hints ) ); @@ -147,23 +146,20 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - if( getaddrinfo( host, port, &hints, &addr_list ) != 0 ) - return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + if ( getaddrinfo( host, port, &hints, &addr_list ) != 0 ) + return ( MBEDTLS_ERR_NET_UNKNOWN_HOST ); /* Try the sockaddrs until a connection succeeds */ ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { + for ( cur = addr_list; cur != NULL; cur = cur->ai_next ) { ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( ctx->fd < 0 ) - { + cur->ai_protocol ); + if ( ctx->fd < 0 ) { ret = MBEDTLS_ERR_NET_SOCKET_FAILED; continue; } - if( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) - { + if ( connect( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) == 0 ) { ret = 0; break; } @@ -174,7 +170,7 @@ int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char freeaddrinfo( addr_list ); - return( ret ); + return ( ret ); } /* @@ -185,53 +181,47 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char int n, ret; struct addrinfo hints, *addr_list, *cur; - if( ( ret = net_prepare() ) != 0 ) - return( ret ); + if ( ( ret = net_prepare() ) != 0 ) + return ( ret ); /* Bind to IPv6 and/or IPv4, but only in the desired protocol */ memset( &hints, 0, sizeof( hints ) ); hints.ai_family = AF_UNSPEC; hints.ai_socktype = proto == MBEDTLS_NET_PROTO_UDP ? SOCK_DGRAM : SOCK_STREAM; hints.ai_protocol = proto == MBEDTLS_NET_PROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP; - if( bind_ip == NULL ) + if ( bind_ip == NULL ) hints.ai_flags = AI_PASSIVE; - if( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) - return( MBEDTLS_ERR_NET_UNKNOWN_HOST ); + if ( getaddrinfo( bind_ip, port, &hints, &addr_list ) != 0 ) + return ( MBEDTLS_ERR_NET_UNKNOWN_HOST ); /* Try the sockaddrs until a binding succeeds */ ret = MBEDTLS_ERR_NET_UNKNOWN_HOST; - for( cur = addr_list; cur != NULL; cur = cur->ai_next ) - { + for ( cur = addr_list; cur != NULL; cur = cur->ai_next ) { ctx->fd = (int) socket( cur->ai_family, cur->ai_socktype, - cur->ai_protocol ); - if( ctx->fd < 0 ) - { + cur->ai_protocol ); + if ( ctx->fd < 0 ) { ret = MBEDTLS_ERR_NET_SOCKET_FAILED; continue; } n = 1; - if( setsockopt( ctx->fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &n, sizeof( n ) ) != 0 ) - { + if ( setsockopt( ctx->fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &n, sizeof( n ) ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_SOCKET_FAILED; continue; } - if( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) - { + if ( bind( ctx->fd, cur->ai_addr, MSVC_INT_CAST cur->ai_addrlen ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_BIND_FAILED; continue; } /* Listen only makes sense for TCP */ - if( proto == MBEDTLS_NET_PROTO_TCP ) - { - if( listen( ctx->fd, MBEDTLS_NET_LISTEN_BACKLOG ) != 0 ) - { + if ( proto == MBEDTLS_NET_PROTO_TCP ) { + if ( listen( ctx->fd, MBEDTLS_NET_LISTEN_BACKLOG ) != 0 ) { close( ctx->fd ); ret = MBEDTLS_ERR_NET_LISTEN_FAILED; continue; @@ -245,7 +235,7 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char freeaddrinfo( addr_list ); - return( ret ); + return ( ret ); } @@ -258,7 +248,7 @@ int mbedtls_net_bind( mbedtls_net_context *ctx, const char *bind_ip, const char static int net_would_block( const mbedtls_net_context *ctx ) { ((void) ctx); - return( WSAGetLastError() == WSAEWOULDBLOCK ); + return ( WSAGetLastError() == WSAEWOULDBLOCK ); } #else /* @@ -272,20 +262,19 @@ static int net_would_block( const mbedtls_net_context *ctx ) /* * Never return 'WOULD BLOCK' on a non-blocking socket */ - if( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) - return( 0 ); + if ( ( fcntl( ctx->fd, F_GETFL ) & O_NONBLOCK ) != O_NONBLOCK ) + return ( 0 ); - switch( errno ) - { + switch ( errno ) { #if defined EAGAIN case EAGAIN: #endif #if defined EWOULDBLOCK && EWOULDBLOCK != EAGAIN case EWOULDBLOCK: #endif - return( 1 ); + return ( 1 ); } - return( 0 ); + return ( 0 ); } #endif /* ( _WIN32 || _WIN32_WCE ) && !EFIX64 && !EFI32 */ @@ -311,100 +300,87 @@ int mbedtls_net_accept( mbedtls_net_context *bind_ctx, #endif /* Is this a TCP or UDP socket? */ - if( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, - (void *) &type, &type_len ) != 0 || - ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) - { - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + if ( getsockopt( bind_ctx->fd, SOL_SOCKET, SO_TYPE, + (void *) &type, &type_len ) != 0 || + ( type != SOCK_STREAM && type != SOCK_DGRAM ) ) { + return ( MBEDTLS_ERR_NET_ACCEPT_FAILED ); } - if( type == SOCK_STREAM ) - { + if ( type == SOCK_STREAM ) { /* TCP: actual accept() */ ret = client_ctx->fd = (int) accept( bind_ctx->fd, - (struct sockaddr *) &client_addr, &n ); - } - else - { + (struct sockaddr *) &client_addr, &n ); + } else { /* UDP: wait for a message, but keep it in the queue */ char buf[1] = { 0 }; ret = (int) recvfrom( bind_ctx->fd, buf, sizeof( buf ), MSG_PEEK, - (struct sockaddr *) &client_addr, &n ); + (struct sockaddr *) &client_addr, &n ); #if defined(_WIN32) - if( ret == SOCKET_ERROR && - WSAGetLastError() == WSAEMSGSIZE ) - { + if ( ret == SOCKET_ERROR && + WSAGetLastError() == WSAEMSGSIZE ) { /* We know buf is too small, thanks, just peeking here */ ret = 0; } #endif } - if( ret < 0 ) - { - if( net_would_block( bind_ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ret < 0 ) { + if ( net_would_block( bind_ctx ) != 0 ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + return ( MBEDTLS_ERR_NET_ACCEPT_FAILED ); } /* UDP: hijack the listening socket to communicate with the client, * then bind a new socket to accept new connections */ - if( type != SOCK_STREAM ) - { + if ( type != SOCK_STREAM ) { struct sockaddr_storage local_addr; int one = 1; - if( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) - return( MBEDTLS_ERR_NET_ACCEPT_FAILED ); + if ( connect( bind_ctx->fd, (struct sockaddr *) &client_addr, n ) != 0 ) + return ( MBEDTLS_ERR_NET_ACCEPT_FAILED ); client_ctx->fd = bind_ctx->fd; bind_ctx->fd = -1; /* In case we exit early */ n = sizeof( struct sockaddr_storage ); - if( getsockname( client_ctx->fd, - (struct sockaddr *) &local_addr, &n ) != 0 || - ( bind_ctx->fd = (int) socket( local_addr.ss_family, - SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || - setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &one, sizeof( one ) ) != 0 ) - { - return( MBEDTLS_ERR_NET_SOCKET_FAILED ); + if ( getsockname( client_ctx->fd, + (struct sockaddr *) &local_addr, &n ) != 0 || + ( bind_ctx->fd = (int) socket( local_addr.ss_family, + SOCK_DGRAM, IPPROTO_UDP ) ) < 0 || + setsockopt( bind_ctx->fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &one, sizeof( one ) ) != 0 ) { + return ( MBEDTLS_ERR_NET_SOCKET_FAILED ); } - if( bind( bind_ctx->fd, (struct sockaddr *) &local_addr, n ) != 0 ) - { - return( MBEDTLS_ERR_NET_BIND_FAILED ); + if ( bind( bind_ctx->fd, (struct sockaddr *) &local_addr, n ) != 0 ) { + return ( MBEDTLS_ERR_NET_BIND_FAILED ); } } - if( client_ip != NULL ) - { - if( client_addr.ss_family == AF_INET ) - { + if ( client_ip != NULL ) { + if ( client_addr.ss_family == AF_INET ) { struct sockaddr_in *addr4 = (struct sockaddr_in *) &client_addr; *ip_len = sizeof( addr4->sin_addr.s_addr ); - if( buf_size < *ip_len ) - return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); + if ( buf_size < *ip_len ) + return ( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); memcpy( client_ip, &addr4->sin_addr.s_addr, *ip_len ); - } - else - { + } else { struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *) &client_addr; *ip_len = sizeof( addr6->sin6_addr.s6_addr ); - if( buf_size < *ip_len ) - return( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); + if ( buf_size < *ip_len ) + return ( MBEDTLS_ERR_NET_BUFFER_TOO_SMALL ); memcpy( client_ip, &addr6->sin6_addr.s6_addr, *ip_len); } } - return( 0 ); + return ( 0 ); } /* @@ -415,9 +391,9 @@ int mbedtls_net_set_block( mbedtls_net_context *ctx ) #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) u_long n = 0; - return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); + return ( ioctlsocket( ctx->fd, FIONBIO, &n ) ); #else - return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) & ~O_NONBLOCK ) ); + return ( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) & ~O_NONBLOCK ) ); #endif } @@ -426,9 +402,9 @@ int mbedtls_net_set_nonblock( mbedtls_net_context *ctx ) #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) u_long n = 1; - return( ioctlsocket( ctx->fd, FIONBIO, &n ) ); + return ( ioctlsocket( ctx->fd, FIONBIO, &n ) ); #else - return( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) | O_NONBLOCK ) ); + return ( fcntl( ctx->fd, F_SETFL, fcntl( ctx->fd, F_GETFL ) | O_NONBLOCK ) ); #endif } @@ -460,47 +436,46 @@ int mbedtls_net_recv( void *ctx, unsigned char *buf, size_t len ) int ret; int fd = ((mbedtls_net_context *) ctx)->fd; - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + if ( fd < 0 ) + return ( MBEDTLS_ERR_NET_INVALID_CONTEXT ); ret = (int) read( fd, buf, len ); - if( ret < 0 ) - { - if( net_would_block( ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ret < 0 ) { + if ( net_would_block( ctx ) != 0 ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( WSAGetLastError() == WSAECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); #else - if( errno == EPIPE || errno == ECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( errno == EPIPE || errno == ECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( errno == EINTR ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_NET_RECV_FAILED ); + return ( MBEDTLS_ERR_NET_RECV_FAILED ); } - return( ret ); + return ( ret ); } /* * Read at most 'len' characters, blocking for at most 'timeout' ms */ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, - uint32_t timeout ) + uint32_t timeout ) { int ret; struct timeval tv; fd_set read_fds; int fd = ((mbedtls_net_context *) ctx)->fd; - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + if ( fd < 0 ) + return ( MBEDTLS_ERR_NET_INVALID_CONTEXT ); FD_ZERO( &read_fds ); FD_SET( fd, &read_fds ); @@ -511,25 +486,24 @@ int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, ret = select( fd + 1, &read_fds, NULL, NULL, timeout == 0 ? NULL : &tv ); /* Zero fds ready means we timed out */ - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_TIMEOUT ); + if ( ret == 0 ) + return ( MBEDTLS_ERR_SSL_TIMEOUT ); - if( ret < 0 ) - { + if ( ret < 0 ) { #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) - if( WSAGetLastError() == WSAEINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( WSAGetLastError() == WSAEINTR ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #else - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( errno == EINTR ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_NET_RECV_FAILED ); + return ( MBEDTLS_ERR_NET_RECV_FAILED ); } /* This call will not block */ - return( mbedtls_net_recv( ctx, buf, len ) ); + return ( mbedtls_net_recv( ctx, buf, len ) ); } /* @@ -540,32 +514,31 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) int ret; int fd = ((mbedtls_net_context *) ctx)->fd; - if( fd < 0 ) - return( MBEDTLS_ERR_NET_INVALID_CONTEXT ); + if ( fd < 0 ) + return ( MBEDTLS_ERR_NET_INVALID_CONTEXT ); ret = (int) write( fd, buf, len ); - if( ret < 0 ) - { - if( net_would_block( ctx ) != 0 ) - return( MBEDTLS_ERR_SSL_WANT_WRITE ); + if ( ret < 0 ) { + if ( net_would_block( ctx ) != 0 ) + return ( MBEDTLS_ERR_SSL_WANT_WRITE ); #if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \ !defined(EFI32) - if( WSAGetLastError() == WSAECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( WSAGetLastError() == WSAECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); #else - if( errno == EPIPE || errno == ECONNRESET ) - return( MBEDTLS_ERR_NET_CONN_RESET ); + if ( errno == EPIPE || errno == ECONNRESET ) + return ( MBEDTLS_ERR_NET_CONN_RESET ); - if( errno == EINTR ) - return( MBEDTLS_ERR_SSL_WANT_WRITE ); + if ( errno == EINTR ) + return ( MBEDTLS_ERR_SSL_WANT_WRITE ); #endif - return( MBEDTLS_ERR_NET_SEND_FAILED ); + return ( MBEDTLS_ERR_NET_SEND_FAILED ); } - return( ret ); + return ( ret ); } /* @@ -573,7 +546,7 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len ) */ void mbedtls_net_free( mbedtls_net_context *ctx ) { - if( ctx->fd == -1 ) + if ( ctx->fd == -1 ) return; shutdown( ctx->fd, 2 ); diff --git a/external_libs/mbedtls/library/oid.c b/external_libs/mbedtls/library/oid.c index f13826e..641f622 100644 --- a/external_libs/mbedtls/library/oid.c +++ b/external_libs/mbedtls/library/oid.c @@ -161,8 +161,7 @@ typedef struct { const char *short_name; } oid_x520_attr_t; -static const oid_x520_attr_t oid_x520_attr_type[] = -{ +static const oid_x520_attr_t oid_x520_attr_type[] = { { { ADD_LEN( MBEDTLS_OID_AT_CN ), "id-at-commonName", "Common Name" }, "CN", @@ -180,7 +179,7 @@ static const oid_x520_attr_t oid_x520_attr_type[] = "ST", }, { - { ADD_LEN( MBEDTLS_OID_AT_ORGANIZATION ),"id-at-organizationName", "Organization" }, + { ADD_LEN( MBEDTLS_OID_AT_ORGANIZATION ), "id-at-organizationName", "Organization" }, "O", }, { @@ -192,11 +191,11 @@ static const oid_x520_attr_t oid_x520_attr_type[] = "emailAddress", }, { - { ADD_LEN( MBEDTLS_OID_AT_SERIAL_NUMBER ),"id-at-serialNumber", "Serial number" }, + { ADD_LEN( MBEDTLS_OID_AT_SERIAL_NUMBER ), "id-at-serialNumber", "Serial number" }, "serialNumber", }, { - { ADD_LEN( MBEDTLS_OID_AT_POSTAL_ADDRESS ),"id-at-postalAddress", "Postal address" }, + { ADD_LEN( MBEDTLS_OID_AT_POSTAL_ADDRESS ), "id-at-postalAddress", "Postal address" }, "postalAddress", }, { @@ -224,7 +223,7 @@ static const oid_x520_attr_t oid_x520_attr_type[] = "title", }, { - { ADD_LEN( MBEDTLS_OID_AT_DN_QUALIFIER ),"id-at-dnQualifier", "Distinguished Name qualifier" }, + { ADD_LEN( MBEDTLS_OID_AT_DN_QUALIFIER ), "id-at-dnQualifier", "Distinguished Name qualifier" }, "dnQualifier", }, { @@ -256,8 +255,7 @@ typedef struct { int ext_type; } oid_x509_ext_t; -static const oid_x509_ext_t oid_x509_ext[] = -{ +static const oid_x509_ext_t oid_x509_ext[] = { { { ADD_LEN( MBEDTLS_OID_BASIC_CONSTRAINTS ), "id-ce-basicConstraints", "Basic Constraints" }, MBEDTLS_X509_EXT_BASIC_CONSTRAINTS, @@ -287,8 +285,7 @@ static const oid_x509_ext_t oid_x509_ext[] = FN_OID_TYPED_FROM_ASN1(oid_x509_ext_t, x509_ext, oid_x509_ext) FN_OID_GET_ATTR1(mbedtls_oid_get_x509_ext_type, oid_x509_ext_t, x509_ext, int, ext_type) -static const mbedtls_oid_descriptor_t oid_ext_key_usage[] = -{ +static const mbedtls_oid_descriptor_t oid_ext_key_usage[] = { { ADD_LEN( MBEDTLS_OID_SERVER_AUTH ), "id-kp-serverAuth", "TLS Web Server Authentication" }, { ADD_LEN( MBEDTLS_OID_CLIENT_AUTH ), "id-kp-clientAuth", "TLS Web Client Authentication" }, { ADD_LEN( MBEDTLS_OID_CODE_SIGNING ), "id-kp-codeSigning", "Code Signing" }, @@ -312,8 +309,7 @@ typedef struct { mbedtls_pk_type_t pk_alg; } oid_sig_alg_t; -static const oid_sig_alg_t oid_sig_alg[] = -{ +static const oid_sig_alg_t oid_sig_alg[] = { #if defined(MBEDTLS_RSA_C) #if defined(MBEDTLS_MD2_C) { @@ -420,8 +416,7 @@ typedef struct { mbedtls_pk_type_t pk_alg; } oid_pk_alg_t; -static const oid_pk_alg_t oid_pk_alg[] = -{ +static const oid_pk_alg_t oid_pk_alg[] = { { { ADD_LEN( MBEDTLS_OID_PKCS1_RSA ), "rsaEncryption", "RSA" }, MBEDTLS_PK_RSA, @@ -453,8 +448,7 @@ typedef struct { mbedtls_ecp_group_id grp_id; } oid_ecp_grp_t; -static const oid_ecp_grp_t oid_ecp_grp[] = -{ +static const oid_ecp_grp_t oid_ecp_grp[] = { #if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED) { { ADD_LEN( MBEDTLS_OID_EC_GRP_SECP192R1 ), "secp192r1", "secp192r1" }, @@ -505,19 +499,19 @@ static const oid_ecp_grp_t oid_ecp_grp[] = #endif /* MBEDTLS_ECP_DP_SECP256K1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED) { - { ADD_LEN( MBEDTLS_OID_EC_GRP_BP256R1 ), "brainpoolP256r1","brainpool256r1" }, + { ADD_LEN( MBEDTLS_OID_EC_GRP_BP256R1 ), "brainpoolP256r1", "brainpool256r1" }, MBEDTLS_ECP_DP_BP256R1, }, #endif /* MBEDTLS_ECP_DP_BP256R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED) { - { ADD_LEN( MBEDTLS_OID_EC_GRP_BP384R1 ), "brainpoolP384r1","brainpool384r1" }, + { ADD_LEN( MBEDTLS_OID_EC_GRP_BP384R1 ), "brainpoolP384r1", "brainpool384r1" }, MBEDTLS_ECP_DP_BP384R1, }, #endif /* MBEDTLS_ECP_DP_BP384R1_ENABLED */ #if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED) { - { ADD_LEN( MBEDTLS_OID_EC_GRP_BP512R1 ), "brainpoolP512r1","brainpool512r1" }, + { ADD_LEN( MBEDTLS_OID_EC_GRP_BP512R1 ), "brainpoolP512r1", "brainpool512r1" }, MBEDTLS_ECP_DP_BP512R1, }, #endif /* MBEDTLS_ECP_DP_BP512R1_ENABLED */ @@ -541,8 +535,7 @@ typedef struct { mbedtls_cipher_type_t cipher_alg; } oid_cipher_alg_t; -static const oid_cipher_alg_t oid_cipher_alg[] = -{ +static const oid_cipher_alg_t oid_cipher_alg[] = { { { ADD_LEN( MBEDTLS_OID_DES_CBC ), "desCBC", "DES-CBC" }, MBEDTLS_CIPHER_DES_CBC, @@ -570,8 +563,7 @@ typedef struct { mbedtls_md_type_t md_alg; } oid_md_alg_t; -static const oid_md_alg_t oid_md_alg[] = -{ +static const oid_md_alg_t oid_md_alg[] = { #if defined(MBEDTLS_MD2_C) { { ADD_LEN( MBEDTLS_OID_DIGEST_ALG_MD2 ), "id-md2", "MD2" }, @@ -637,8 +629,7 @@ typedef struct { mbedtls_cipher_type_t cipher_alg; } oid_pkcs12_pbe_alg_t; -static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = -{ +static const oid_pkcs12_pbe_alg_t oid_pkcs12_pbe_alg[] = { { { ADD_LEN( MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC ), "pbeWithSHAAnd3-KeyTripleDES-CBC", "PBE with SHA1 and 3-Key 3DES" }, MBEDTLS_MD_SHA1, MBEDTLS_CIPHER_DES_EDE3_CBC, @@ -668,7 +659,7 @@ FN_OID_GET_ATTR2(mbedtls_oid_get_pkcs12_pbe_alg, oid_pkcs12_pbe_alg_t, pkcs12_pb /* Return the x.y.z.... style numeric string for the given OID */ int mbedtls_oid_get_numeric_string( char *buf, size_t size, - const mbedtls_asn1_buf *oid ) + const mbedtls_asn1_buf *oid ) { int ret; size_t i, n; @@ -679,24 +670,21 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, n = size; /* First byte contains first two dots */ - if( oid->len > 0 ) - { + if ( oid->len > 0 ) { ret = mbedtls_snprintf( p, n, "%d.%d", oid->p[0] / 40, oid->p[0] % 40 ); OID_SAFE_SNPRINTF; } value = 0; - for( i = 1; i < oid->len; i++ ) - { + for ( i = 1; i < oid->len; i++ ) { /* Prevent overflow in value. */ - if( ( ( value << 7 ) >> 7 ) != value ) - return( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); + if ( ( ( value << 7 ) >> 7 ) != value ) + return ( MBEDTLS_ERR_OID_BUF_TOO_SMALL ); value <<= 7; value += oid->p[i] & 0x7F; - if( !( oid->p[i] & 0x80 ) ) - { + if ( !( oid->p[i] & 0x80 ) ) { /* Last byte */ ret = mbedtls_snprintf( p, n, ".%d", value ); OID_SAFE_SNPRINTF; @@ -704,7 +692,7 @@ int mbedtls_oid_get_numeric_string( char *buf, size_t size, } } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } #endif /* MBEDTLS_OID_C */ diff --git a/external_libs/mbedtls/library/padlock.c b/external_libs/mbedtls/library/padlock.c index b85ff9c..8e701cf 100644 --- a/external_libs/mbedtls/library/padlock.c +++ b/external_libs/mbedtls/library/padlock.c @@ -51,8 +51,7 @@ int mbedtls_padlock_has_support( int feature ) static int flags = -1; int ebx = 0, edx = 0; - if( flags == -1 ) - { + if ( flags == -1 ) { asm( "movl %%ebx, %0 \n\t" "movl $0xC0000000, %%eax \n\t" "cpuid \n\t" @@ -71,16 +70,16 @@ int mbedtls_padlock_has_support( int feature ) flags = edx; } - return( flags & feature ); + return ( flags & feature ); } /* * PadLock AES-ECB block en(de)cryption */ int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { int ebx = 0; uint32_t *rk; @@ -92,8 +91,8 @@ int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, blk = MBEDTLS_PADLOCK_ALIGN16( buf ); memcpy( blk, input, 16 ); - ctrl = blk + 4; - *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode^1 ) - 10 ) << 9 ); + ctrl = blk + 4; + *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode ^ 1 ) - 10 ) << 9 ); asm( "pushfl \n\t" "popfl \n\t" @@ -111,18 +110,18 @@ int mbedtls_padlock_xcryptecb( mbedtls_aes_context *ctx, memcpy( output, blk, 16 ); - return( 0 ); + return ( 0 ); } /* * PadLock AES-CBC buffer en(de)cryption */ int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int ebx = 0; size_t count; @@ -131,15 +130,15 @@ int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, uint32_t *ctrl; unsigned char buf[256]; - if( ( (long) input & 15 ) != 0 || - ( (long) output & 15 ) != 0 ) - return( MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED ); + if ( ( (long) input & 15 ) != 0 || + ( (long) output & 15 ) != 0 ) + return ( MBEDTLS_ERR_PADLOCK_DATA_MISALIGNED ); rk = ctx->rk; iw = MBEDTLS_PADLOCK_ALIGN16( buf ); memcpy( iw, iv, 16 ); - ctrl = iw + 4; + ctrl = iw + 4; *ctrl = 0x80 | ctx->nr | ( ( ctx->nr + ( mode ^ 1 ) - 10 ) << 9 ); count = ( length + 15 ) >> 4; @@ -157,12 +156,12 @@ int mbedtls_padlock_xcryptcbc( mbedtls_aes_context *ctx, "movl %1, %%ebx \n\t" : "=m" (ebx) : "m" (ebx), "m" (count), "m" (ctrl), - "m" (rk), "m" (input), "m" (output), "m" (iw) + "m" (rk), "m" (input), "m" (output), "m" (iw) : "memory", "eax", "ecx", "edx", "esi", "edi" ); memcpy( iv, iw, 16 ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVE_X86 */ diff --git a/external_libs/mbedtls/library/pem.c b/external_libs/mbedtls/library/pem.c index 1ee3966..9ac6742 100644 --- a/external_libs/mbedtls/library/pem.c +++ b/external_libs/mbedtls/library/pem.c @@ -45,8 +45,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #if defined(MBEDTLS_PEM_PARSE_C) @@ -67,19 +69,19 @@ static int pem_get_iv( const unsigned char *s, unsigned char *iv, memset( iv, 0, iv_len ); - for( i = 0; i < iv_len * 2; i++, s++ ) - { - if( *s >= '0' && *s <= '9' ) j = *s - '0'; else - if( *s >= 'A' && *s <= 'F' ) j = *s - '7'; else - if( *s >= 'a' && *s <= 'f' ) j = *s - 'W'; else - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + for ( i = 0; i < iv_len * 2; i++, s++ ) { + if ( *s >= '0' && *s <= '9' ) j = *s - '0'; + else if ( *s >= 'A' && *s <= 'F' ) j = *s - '7'; + else if ( *s >= 'a' && *s <= 'f' ) j = *s - 'W'; + else + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); k = ( ( i & 1 ) != 0 ) ? j : j << 4; iv[i >> 1] = (unsigned char)( iv[i >> 1] | k ); } - return( 0 ); + return ( 0 ); } static void pem_pbkdf1( unsigned char *key, size_t keylen, @@ -100,8 +102,7 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen, mbedtls_md5_update( &md5_ctx, iv, 8 ); mbedtls_md5_finish( &md5_ctx, md5sum ); - if( keylen <= 16 ) - { + if ( keylen <= 16 ) { memcpy( key, md5sum, keylen ); mbedtls_md5_free( &md5_ctx ); @@ -121,7 +122,7 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen, mbedtls_md5_finish( &md5_ctx, md5sum ); use_len = 16; - if( keylen < 32 ) + if ( keylen < 32 ) use_len = keylen - 16; memcpy( key + 16, md5sum, use_len ); @@ -135,8 +136,8 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen, * Decrypt with DES-CBC, using PBKDF1 for key derivation */ static void pem_des_decrypt( unsigned char des_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) + unsigned char *buf, size_t buflen, + const unsigned char *pwd, size_t pwdlen ) { mbedtls_des_context des_ctx; unsigned char des_key[8]; @@ -147,7 +148,7 @@ static void pem_des_decrypt( unsigned char des_iv[8], mbedtls_des_setkey_dec( &des_ctx, des_key ); mbedtls_des_crypt_cbc( &des_ctx, MBEDTLS_DES_DECRYPT, buflen, - des_iv, buf, buf ); + des_iv, buf, buf ); mbedtls_des_free( &des_ctx ); mbedtls_zeroize( des_key, 8 ); @@ -157,8 +158,8 @@ static void pem_des_decrypt( unsigned char des_iv[8], * Decrypt with 3DES-CBC, using PBKDF1 for key derivation */ static void pem_des3_decrypt( unsigned char des3_iv[8], - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) + unsigned char *buf, size_t buflen, + const unsigned char *pwd, size_t pwdlen ) { mbedtls_des3_context des3_ctx; unsigned char des3_key[24]; @@ -169,7 +170,7 @@ static void pem_des3_decrypt( unsigned char des3_iv[8], mbedtls_des3_set3key_dec( &des3_ctx, des3_key ); mbedtls_des3_crypt_cbc( &des3_ctx, MBEDTLS_DES_DECRYPT, buflen, - des3_iv, buf, buf ); + des3_iv, buf, buf ); mbedtls_des3_free( &des3_ctx ); mbedtls_zeroize( des3_key, 24 ); @@ -181,8 +182,8 @@ static void pem_des3_decrypt( unsigned char des3_iv[8], * Decrypt with AES-XXX-CBC, using PBKDF1 for key derivation */ static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, - unsigned char *buf, size_t buflen, - const unsigned char *pwd, size_t pwdlen ) + unsigned char *buf, size_t buflen, + const unsigned char *pwd, size_t pwdlen ) { mbedtls_aes_context aes_ctx; unsigned char aes_key[32]; @@ -193,7 +194,7 @@ static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, mbedtls_aes_setkey_dec( &aes_ctx, aes_key, keylen * 8 ); mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_DECRYPT, buflen, - aes_iv, buf, buf ); + aes_iv, buf, buf ); mbedtls_aes_free( &aes_ctx ); mbedtls_zeroize( aes_key, keylen ); @@ -204,8 +205,8 @@ static void pem_aes_decrypt( unsigned char aes_iv[16], unsigned int keylen, ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const char *footer, - const unsigned char *data, const unsigned char *pwd, - size_t pwdlen, size_t *use_len ) + const unsigned char *data, const unsigned char *pwd, + size_t pwdlen, size_t *use_len ) { int ret, enc; size_t len; @@ -221,141 +222,133 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ - if( ctx == NULL ) - return( MBEDTLS_ERR_PEM_BAD_INPUT_DATA ); + if ( ctx == NULL ) + return ( MBEDTLS_ERR_PEM_BAD_INPUT_DATA ); s1 = (unsigned char *) strstr( (const char *) data, header ); - if( s1 == NULL ) - return( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); + if ( s1 == NULL ) + return ( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); s2 = (unsigned char *) strstr( (const char *) data, footer ); - if( s2 == NULL || s2 <= s1 ) - return( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); + if ( s2 == NULL || s2 <= s1 ) + return ( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); s1 += strlen( header ); - if( *s1 == ' ' ) s1++; - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); + if ( *s1 == ' ' ) s1++; + if ( *s1 == '\r' ) s1++; + if ( *s1 == '\n' ) s1++; + else return ( MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ); end = s2; end += strlen( footer ); - if( *end == ' ' ) end++; - if( *end == '\r' ) end++; - if( *end == '\n' ) end++; + if ( *end == ' ' ) end++; + if ( *end == '\r' ) end++; + if ( *end == '\n' ) end++; *use_len = end - data; enc = 0; - if( memcmp( s1, "Proc-Type: 4,ENCRYPTED", 22 ) == 0 ) - { + if ( memcmp( s1, "Proc-Type: 4,ENCRYPTED", 22 ) == 0 ) { #if defined(MBEDTLS_MD5_C) && defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) ) enc++; s1 += 22; - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( MBEDTLS_ERR_PEM_INVALID_DATA ); + if ( *s1 == '\r' ) s1++; + if ( *s1 == '\n' ) s1++; + else return ( MBEDTLS_ERR_PEM_INVALID_DATA ); #if defined(MBEDTLS_DES_C) - if( memcmp( s1, "DEK-Info: DES-EDE3-CBC,", 23 ) == 0 ) - { + if ( memcmp( s1, "DEK-Info: DES-EDE3-CBC,", 23 ) == 0 ) { enc_alg = MBEDTLS_CIPHER_DES_EDE3_CBC; s1 += 23; - if( pem_get_iv( s1, pem_iv, 8 ) != 0 ) - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + if ( pem_get_iv( s1, pem_iv, 8 ) != 0 ) + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); s1 += 16; - } - else if( memcmp( s1, "DEK-Info: DES-CBC,", 18 ) == 0 ) - { + } else if ( memcmp( s1, "DEK-Info: DES-CBC,", 18 ) == 0 ) { enc_alg = MBEDTLS_CIPHER_DES_CBC; s1 += 18; - if( pem_get_iv( s1, pem_iv, 8) != 0 ) - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + if ( pem_get_iv( s1, pem_iv, 8) != 0 ) + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); s1 += 16; } #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( memcmp( s1, "DEK-Info: AES-", 14 ) == 0 ) - { - if( memcmp( s1, "DEK-Info: AES-128-CBC,", 22 ) == 0 ) + if ( memcmp( s1, "DEK-Info: AES-", 14 ) == 0 ) { + if ( memcmp( s1, "DEK-Info: AES-128-CBC,", 22 ) == 0 ) enc_alg = MBEDTLS_CIPHER_AES_128_CBC; - else if( memcmp( s1, "DEK-Info: AES-192-CBC,", 22 ) == 0 ) + else if ( memcmp( s1, "DEK-Info: AES-192-CBC,", 22 ) == 0 ) enc_alg = MBEDTLS_CIPHER_AES_192_CBC; - else if( memcmp( s1, "DEK-Info: AES-256-CBC,", 22 ) == 0 ) + else if ( memcmp( s1, "DEK-Info: AES-256-CBC,", 22 ) == 0 ) enc_alg = MBEDTLS_CIPHER_AES_256_CBC; else - return( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); + return ( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); s1 += 22; - if( pem_get_iv( s1, pem_iv, 16 ) != 0 ) - return( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); + if ( pem_get_iv( s1, pem_iv, 16 ) != 0 ) + return ( MBEDTLS_ERR_PEM_INVALID_ENC_IV ); s1 += 32; } #endif /* MBEDTLS_AES_C */ - if( enc_alg == MBEDTLS_CIPHER_NONE ) - return( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); + if ( enc_alg == MBEDTLS_CIPHER_NONE ) + return ( MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG ); - if( *s1 == '\r' ) s1++; - if( *s1 == '\n' ) s1++; - else return( MBEDTLS_ERR_PEM_INVALID_DATA ); + if ( *s1 == '\r' ) s1++; + if ( *s1 == '\n' ) s1++; + else return ( MBEDTLS_ERR_PEM_INVALID_DATA ); #else - return( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ } - if( s1 == s2 ) - return( MBEDTLS_ERR_PEM_INVALID_DATA ); + if ( s1 == s2 ) + return ( MBEDTLS_ERR_PEM_INVALID_DATA ); ret = mbedtls_base64_decode( NULL, 0, &len, s1, s2 - s1 ); - if( ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER ) - return( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); + if ( ret == MBEDTLS_ERR_BASE64_INVALID_CHARACTER ) + return ( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); - if( ( buf = mbedtls_calloc( 1, len ) ) == NULL ) - return( MBEDTLS_ERR_PEM_ALLOC_FAILED ); + if ( ( buf = mbedtls_calloc( 1, len ) ) == NULL ) + return ( MBEDTLS_ERR_PEM_ALLOC_FAILED ); - if( ( ret = mbedtls_base64_decode( buf, len, &len, s1, s2 - s1 ) ) != 0 ) - { + if ( ( ret = mbedtls_base64_decode( buf, len, &len, s1, s2 - s1 ) ) != 0 ) { mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); + return ( MBEDTLS_ERR_PEM_INVALID_DATA + ret ); } - if( enc != 0 ) - { + if ( enc != 0 ) { #if defined(MBEDTLS_MD5_C) && defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) ) - if( pwd == NULL ) - { + if ( pwd == NULL ) { mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ); + return ( MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ); } #if defined(MBEDTLS_DES_C) - if( enc_alg == MBEDTLS_CIPHER_DES_EDE3_CBC ) + if ( enc_alg == MBEDTLS_CIPHER_DES_EDE3_CBC ) pem_des3_decrypt( pem_iv, buf, len, pwd, pwdlen ); - else if( enc_alg == MBEDTLS_CIPHER_DES_CBC ) + else if ( enc_alg == MBEDTLS_CIPHER_DES_CBC ) pem_des_decrypt( pem_iv, buf, len, pwd, pwdlen ); #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( enc_alg == MBEDTLS_CIPHER_AES_128_CBC ) + if ( enc_alg == MBEDTLS_CIPHER_AES_128_CBC ) pem_aes_decrypt( pem_iv, 16, buf, len, pwd, pwdlen ); - else if( enc_alg == MBEDTLS_CIPHER_AES_192_CBC ) + else if ( enc_alg == MBEDTLS_CIPHER_AES_192_CBC ) pem_aes_decrypt( pem_iv, 24, buf, len, pwd, pwdlen ); - else if( enc_alg == MBEDTLS_CIPHER_AES_256_CBC ) + else if ( enc_alg == MBEDTLS_CIPHER_AES_256_CBC ) pem_aes_decrypt( pem_iv, 32, buf, len, pwd, pwdlen ); #endif /* MBEDTLS_AES_C */ @@ -365,14 +358,13 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const * * Use that as heurisitic to try detecting password mismatchs. */ - if( len <= 2 || buf[0] != 0x30 || buf[1] > 0x83 ) - { + if ( len <= 2 || buf[0] != 0x30 || buf[1] > 0x83 ) { mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ); + return ( MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ); } #else mbedtls_free( buf ); - return( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE ); #endif /* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */ } @@ -380,7 +372,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const ctx->buf = buf; ctx->buflen = len; - return( 0 ); + return ( 0 ); } void mbedtls_pem_free( mbedtls_pem_context *ctx ) @@ -394,8 +386,8 @@ void mbedtls_pem_free( mbedtls_pem_context *ctx ) #if defined(MBEDTLS_PEM_WRITE_C) int mbedtls_pem_write_buffer( const char *header, const char *footer, - const unsigned char *der_data, size_t der_len, - unsigned char *buf, size_t buf_len, size_t *olen ) + const unsigned char *der_data, size_t der_len, + unsigned char *buf, size_t buf_len, size_t *olen ) { int ret; unsigned char *encode_buf, *c, *p = buf; @@ -404,28 +396,25 @@ int mbedtls_pem_write_buffer( const char *header, const char *footer, mbedtls_base64_encode( NULL, 0, &use_len, der_data, der_len ); add_len = strlen( header ) + strlen( footer ) + ( use_len / 64 ) + 1; - if( use_len + add_len > buf_len ) - { + if ( use_len + add_len > buf_len ) { *olen = use_len + add_len; - return( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL ); } - if( ( encode_buf = mbedtls_calloc( 1, use_len ) ) == NULL ) - return( MBEDTLS_ERR_PEM_ALLOC_FAILED ); + if ( ( encode_buf = mbedtls_calloc( 1, use_len ) ) == NULL ) + return ( MBEDTLS_ERR_PEM_ALLOC_FAILED ); - if( ( ret = mbedtls_base64_encode( encode_buf, use_len, &use_len, der_data, - der_len ) ) != 0 ) - { + if ( ( ret = mbedtls_base64_encode( encode_buf, use_len, &use_len, der_data, + der_len ) ) != 0 ) { mbedtls_free( encode_buf ); - return( ret ); + return ( ret ); } memcpy( p, header, strlen( header ) ); p += strlen( header ); c = encode_buf; - while( use_len ) - { + while ( use_len ) { len = ( use_len > 64 ) ? 64 : use_len; memcpy( p, c, len ); use_len -= len; @@ -441,7 +430,7 @@ int mbedtls_pem_write_buffer( const char *header, const char *footer, *olen = p - buf; mbedtls_free( encode_buf ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ #endif /* MBEDTLS_PEM_PARSE_C || MBEDTLS_PEM_WRITE_C */ diff --git a/external_libs/mbedtls/library/pk.c b/external_libs/mbedtls/library/pk.c index 10bd0a5..299cbdc 100644 --- a/external_libs/mbedtls/library/pk.c +++ b/external_libs/mbedtls/library/pk.c @@ -40,8 +40,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -49,7 +51,7 @@ static void mbedtls_zeroize( void *v, size_t n ) { */ void mbedtls_pk_init( mbedtls_pk_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; ctx->pk_info = NULL; @@ -61,7 +63,7 @@ void mbedtls_pk_init( mbedtls_pk_context *ctx ) */ void mbedtls_pk_free( mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) + if ( ctx == NULL || ctx->pk_info == NULL ) return; ctx->pk_info->ctx_free_func( ctx->pk_ctx ); @@ -74,24 +76,24 @@ void mbedtls_pk_free( mbedtls_pk_context *ctx ) */ const mbedtls_pk_info_t * mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ) { - switch( pk_type ) { + switch ( pk_type ) { #if defined(MBEDTLS_RSA_C) case MBEDTLS_PK_RSA: - return( &mbedtls_rsa_info ); + return ( &mbedtls_rsa_info ); #endif #if defined(MBEDTLS_ECP_C) case MBEDTLS_PK_ECKEY: - return( &mbedtls_eckey_info ); + return ( &mbedtls_eckey_info ); case MBEDTLS_PK_ECKEY_DH: - return( &mbedtls_eckeydh_info ); + return ( &mbedtls_eckeydh_info ); #endif #if defined(MBEDTLS_ECDSA_C) case MBEDTLS_PK_ECDSA: - return( &mbedtls_ecdsa_info ); + return ( &mbedtls_ecdsa_info ); #endif /* MBEDTLS_PK_RSA_ALT omitted on purpose */ default: - return( NULL ); + return ( NULL ); } } @@ -100,15 +102,15 @@ const mbedtls_pk_info_t * mbedtls_pk_info_from_type( mbedtls_pk_type_t pk_type ) */ int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ) { - if( ctx == NULL || info == NULL || ctx->pk_info != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || info == NULL || ctx->pk_info != NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); + if ( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) + return ( MBEDTLS_ERR_PK_ALLOC_FAILED ); ctx->pk_info = info; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) @@ -116,18 +118,18 @@ int mbedtls_pk_setup( mbedtls_pk_context *ctx, const mbedtls_pk_info_t *info ) * Initialize an RSA-alt context */ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, - mbedtls_pk_rsa_alt_decrypt_func decrypt_func, - mbedtls_pk_rsa_alt_sign_func sign_func, - mbedtls_pk_rsa_alt_key_len_func key_len_func ) + mbedtls_pk_rsa_alt_decrypt_func decrypt_func, + mbedtls_pk_rsa_alt_sign_func sign_func, + mbedtls_pk_rsa_alt_key_len_func key_len_func ) { mbedtls_rsa_alt_context *rsa_alt; const mbedtls_pk_info_t *info = &mbedtls_rsa_alt_info; - if( ctx == NULL || ctx->pk_info != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info != NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); + if ( ( ctx->pk_ctx = info->ctx_alloc_func() ) == NULL ) + return ( MBEDTLS_ERR_PK_ALLOC_FAILED ); ctx->pk_info = info; @@ -138,7 +140,7 @@ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, rsa_alt->sign_func = sign_func; rsa_alt->key_len_func = key_len_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PK_RSA_ALT_SUPPORT */ @@ -148,10 +150,10 @@ int mbedtls_pk_setup_rsa_alt( mbedtls_pk_context *ctx, void * key, int mbedtls_pk_can_do( const mbedtls_pk_context *ctx, mbedtls_pk_type_t type ) { /* null or NONE context can't do anything */ - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( 0 ); - return( ctx->pk_info->can_do( type ) ); + return ( ctx->pk_info->can_do( type ) ); } /* @@ -161,61 +163,60 @@ static inline int pk_hashlen_helper( mbedtls_md_type_t md_alg, size_t *hash_len { const mbedtls_md_info_t *md_info; - if( *hash_len != 0 ) - return( 0 ); + if ( *hash_len != 0 ) + return ( 0 ); - if( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) - return( -1 ); + if ( ( md_info = mbedtls_md_info_from_type( md_alg ) ) == NULL ) + return ( -1 ); *hash_len = mbedtls_md_get_size( md_info ); - return( 0 ); + return ( 0 ); } /* * Verify a signature */ int mbedtls_pk_verify( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL || + pk_hashlen_helper( md_alg, &hash_len ) != 0 ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->verify_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->verify_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len ) ); + return ( ctx->pk_info->verify_func( ctx->pk_ctx, md_alg, hash, hash_len, + sig, sig_len ) ); } /* * Verify a signature with options */ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, - mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ! mbedtls_pk_can_do( ctx, type ) ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ! mbedtls_pk_can_do( ctx, type ) ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - if( type == MBEDTLS_PK_RSASSA_PSS ) - { + if ( type == MBEDTLS_PK_RSASSA_PSS ) { #if defined(MBEDTLS_RSA_C) && defined(MBEDTLS_PKCS1_V21) int ret; const mbedtls_pk_rsassa_pss_options *pss_opts; - if( options == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( options == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); pss_opts = (const mbedtls_pk_rsassa_pss_options *) options; - if( sig_len < mbedtls_pk_get_len( ctx ) ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( sig_len < mbedtls_pk_get_len( ctx ) ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); ret = mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_pk_rsa( *ctx ), NULL, NULL, MBEDTLS_RSA_PUBLIC, @@ -223,78 +224,78 @@ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options, pss_opts->mgf1_hash_id, pss_opts->expected_salt_len, sig ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); - if( sig_len > mbedtls_pk_get_len( ctx ) ) - return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); + if ( sig_len > mbedtls_pk_get_len( ctx ) ) + return ( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( 0 ); + return ( 0 ); #else - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); #endif } /* General case: no options */ - if( options != NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( options != NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - return( mbedtls_pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); + return ( mbedtls_pk_verify( ctx, md_alg, hash, hash_len, sig, sig_len ) ); } /* * Make a signature */ int mbedtls_pk_sign( mbedtls_pk_context *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ctx == NULL || ctx->pk_info == NULL || - pk_hashlen_helper( md_alg, &hash_len ) != 0 ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL || + pk_hashlen_helper( md_alg, &hash_len ) != 0 ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->sign_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->sign_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->sign_func( ctx->pk_ctx, md_alg, hash, hash_len, - sig, sig_len, f_rng, p_rng ) ); + return ( ctx->pk_info->sign_func( ctx->pk_ctx, md_alg, hash, hash_len, + sig, sig_len, f_rng, p_rng ) ); } /* * Decrypt message */ int mbedtls_pk_decrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->decrypt_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->decrypt_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->decrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); + return ( ctx->pk_info->decrypt_func( ctx->pk_ctx, input, ilen, + output, olen, osize, f_rng, p_rng ) ); } /* * Encrypt message */ int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->encrypt_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->encrypt_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - return( ctx->pk_info->encrypt_func( ctx->pk_ctx, input, ilen, - output, olen, osize, f_rng, p_rng ) ); + return ( ctx->pk_info->encrypt_func( ctx->pk_ctx, input, ilen, + output, olen, osize, f_rng, p_rng ) ); } /* @@ -302,25 +303,21 @@ int mbedtls_pk_encrypt( mbedtls_pk_context *ctx, */ int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_context *prv ) { - if( pub == NULL || pub->pk_info == NULL || - prv == NULL || prv->pk_info == NULL || - prv->pk_info->check_pair_func == NULL ) - { - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( pub == NULL || pub->pk_info == NULL || + prv == NULL || prv->pk_info == NULL || + prv->pk_info->check_pair_func == NULL ) { + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); } - if( prv->pk_info->type == MBEDTLS_PK_RSA_ALT ) - { - if( pub->pk_info->type != MBEDTLS_PK_RSA ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); - } - else - { - if( pub->pk_info != prv->pk_info ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( prv->pk_info->type == MBEDTLS_PK_RSA_ALT ) { + if ( pub->pk_info->type != MBEDTLS_PK_RSA ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + } else { + if ( pub->pk_info != prv->pk_info ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); } - return( prv->pk_info->check_pair_func( pub->pk_ctx, prv->pk_ctx ) ); + return ( prv->pk_info->check_pair_func( pub->pk_ctx, prv->pk_ctx ) ); } /* @@ -328,10 +325,10 @@ int mbedtls_pk_check_pair( const mbedtls_pk_context *pub, const mbedtls_pk_conte */ size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( 0 ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( 0 ); - return( ctx->pk_info->get_bitlen( ctx->pk_ctx ) ); + return ( ctx->pk_info->get_bitlen( ctx->pk_ctx ) ); } /* @@ -339,14 +336,14 @@ size_t mbedtls_pk_get_bitlen( const mbedtls_pk_context *ctx ) */ int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *items ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); - if( ctx->pk_info->debug_func == NULL ) - return( MBEDTLS_ERR_PK_TYPE_MISMATCH ); + if ( ctx->pk_info->debug_func == NULL ) + return ( MBEDTLS_ERR_PK_TYPE_MISMATCH ); ctx->pk_info->debug_func( ctx->pk_ctx, items ); - return( 0 ); + return ( 0 ); } /* @@ -354,10 +351,10 @@ int mbedtls_pk_debug( const mbedtls_pk_context *ctx, mbedtls_pk_debug_item *item */ const char *mbedtls_pk_get_name( const mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( "invalid PK" ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( "invalid PK" ); - return( ctx->pk_info->name ); + return ( ctx->pk_info->name ); } /* @@ -365,10 +362,10 @@ const char *mbedtls_pk_get_name( const mbedtls_pk_context *ctx ) */ mbedtls_pk_type_t mbedtls_pk_get_type( const mbedtls_pk_context *ctx ) { - if( ctx == NULL || ctx->pk_info == NULL ) - return( MBEDTLS_PK_NONE ); + if ( ctx == NULL || ctx->pk_info == NULL ) + return ( MBEDTLS_PK_NONE ); - return( ctx->pk_info->type ); + return ( ctx->pk_info->type ); } #endif /* MBEDTLS_PK_C */ diff --git a/external_libs/mbedtls/library/pk_wrap.c b/external_libs/mbedtls/library/pk_wrap.c index 712ad48..c8a37c0 100644 --- a/external_libs/mbedtls/library/pk_wrap.c +++ b/external_libs/mbedtls/library/pk_wrap.c @@ -51,94 +51,96 @@ #if defined(MBEDTLS_PK_RSA_ALT_SUPPORT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #endif #if defined(MBEDTLS_RSA_C) static int rsa_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_RSA || - type == MBEDTLS_PK_RSASSA_PSS ); + return ( type == MBEDTLS_PK_RSA || + type == MBEDTLS_PK_RSASSA_PSS ); } static size_t rsa_get_bitlen( const void *ctx ) { - return( 8 * ((const mbedtls_rsa_context *) ctx)->len ); + return ( 8 * ((const mbedtls_rsa_context *) ctx)->len ); } static int rsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { int ret; - if( sig_len < ((mbedtls_rsa_context *) ctx)->len ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( sig_len < ((mbedtls_rsa_context *) ctx)->len ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_rsa_pkcs1_verify( (mbedtls_rsa_context *) ctx, NULL, NULL, - MBEDTLS_RSA_PUBLIC, md_alg, - (unsigned int) hash_len, hash, sig ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_rsa_pkcs1_verify( (mbedtls_rsa_context *) ctx, NULL, NULL, + MBEDTLS_RSA_PUBLIC, md_alg, + (unsigned int) hash_len, hash, sig ) ) != 0 ) + return ( ret ); - if( sig_len > ((mbedtls_rsa_context *) ctx)->len ) - return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); + if ( sig_len > ((mbedtls_rsa_context *) ctx)->len ) + return ( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( 0 ); + return ( 0 ); } static int rsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { *sig_len = ((mbedtls_rsa_context *) ctx)->len; - return( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); + return ( mbedtls_rsa_pkcs1_sign( (mbedtls_rsa_context *) ctx, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, + md_alg, (unsigned int) hash_len, hash, sig ) ); } static int rsa_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - if( ilen != ((mbedtls_rsa_context *) ctx)->len ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen != ((mbedtls_rsa_context *) ctx)->len ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - return( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, f_rng, p_rng, - MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); + return ( mbedtls_rsa_pkcs1_decrypt( (mbedtls_rsa_context *) ctx, f_rng, p_rng, + MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); } static int rsa_encrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { *olen = ((mbedtls_rsa_context *) ctx)->len; - if( *olen > osize ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( *olen > osize ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); - return( mbedtls_rsa_pkcs1_encrypt( (mbedtls_rsa_context *) ctx, - f_rng, p_rng, MBEDTLS_RSA_PUBLIC, ilen, input, output ) ); + return ( mbedtls_rsa_pkcs1_encrypt( (mbedtls_rsa_context *) ctx, + f_rng, p_rng, MBEDTLS_RSA_PUBLIC, ilen, input, output ) ); } static int rsa_check_pair_wrap( const void *pub, const void *prv ) { - return( mbedtls_rsa_check_pub_priv( (const mbedtls_rsa_context *) pub, - (const mbedtls_rsa_context *) prv ) ); + return ( mbedtls_rsa_check_pub_priv( (const mbedtls_rsa_context *) pub, + (const mbedtls_rsa_context *) prv ) ); } static void *rsa_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_rsa_init( (mbedtls_rsa_context *) ctx, 0, 0 ); - return( ctx ); + return ( ctx ); } static void rsa_free_wrap( void *ctx ) @@ -182,79 +184,79 @@ const mbedtls_pk_info_t mbedtls_rsa_info = { */ static int eckey_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_ECKEY || - type == MBEDTLS_PK_ECKEY_DH || - type == MBEDTLS_PK_ECDSA ); + return ( type == MBEDTLS_PK_ECKEY || + type == MBEDTLS_PK_ECKEY_DH || + type == MBEDTLS_PK_ECDSA ); } static size_t eckey_get_bitlen( const void *ctx ) { - return( ((mbedtls_ecp_keypair *) ctx)->grp.pbits ); + return ( ((mbedtls_ecp_keypair *) ctx)->grp.pbits ); } #if defined(MBEDTLS_ECDSA_C) /* Forward declarations */ static int ecdsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ); + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ); static int ecdsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ); static int eckey_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { int ret; mbedtls_ecdsa_context ecdsa; mbedtls_ecdsa_init( &ecdsa ); - if( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) + if ( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) ret = ecdsa_verify_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len ); mbedtls_ecdsa_free( &ecdsa ); - return( ret ); + return ( ret ); } static int eckey_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret; mbedtls_ecdsa_context ecdsa; mbedtls_ecdsa_init( &ecdsa ); - if( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) + if ( ( ret = mbedtls_ecdsa_from_keypair( &ecdsa, ctx ) ) == 0 ) ret = ecdsa_sign_wrap( &ecdsa, md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng ); mbedtls_ecdsa_free( &ecdsa ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECDSA_C */ static int eckey_check_pair( const void *pub, const void *prv ) { - return( mbedtls_ecp_check_pub_priv( (const mbedtls_ecp_keypair *) pub, - (const mbedtls_ecp_keypair *) prv ) ); + return ( mbedtls_ecp_check_pub_priv( (const mbedtls_ecp_keypair *) pub, + (const mbedtls_ecp_keypair *) prv ) ); } static void *eckey_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecp_keypair ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ecp_keypair_init( ctx ); - return( ctx ); + return ( ctx ); } static void eckey_free_wrap( void *ctx ) @@ -295,8 +297,8 @@ const mbedtls_pk_info_t mbedtls_eckey_info = { */ static int eckeydh_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_ECKEY || - type == MBEDTLS_PK_ECKEY_DH ); + return ( type == MBEDTLS_PK_ECKEY || + type == MBEDTLS_PK_ECKEY_DH ); } const mbedtls_pk_info_t mbedtls_eckeydh_info = { @@ -318,42 +320,42 @@ const mbedtls_pk_info_t mbedtls_eckeydh_info = { #if defined(MBEDTLS_ECDSA_C) static int ecdsa_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_ECDSA ); + return ( type == MBEDTLS_PK_ECDSA ); } static int ecdsa_verify_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - const unsigned char *sig, size_t sig_len ) + const unsigned char *hash, size_t hash_len, + const unsigned char *sig, size_t sig_len ) { int ret; ((void) md_alg); ret = mbedtls_ecdsa_read_signature( (mbedtls_ecdsa_context *) ctx, - hash, hash_len, sig, sig_len ); + hash, hash_len, sig, sig_len ); - if( ret == MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH ) - return( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); + if ( ret == MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH ) + return ( MBEDTLS_ERR_PK_SIG_LEN_MISMATCH ); - return( ret ); + return ( ret ); } static int ecdsa_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { - return( mbedtls_ecdsa_write_signature( (mbedtls_ecdsa_context *) ctx, - md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng ) ); + return ( mbedtls_ecdsa_write_signature( (mbedtls_ecdsa_context *) ctx, + md_alg, hash, hash_len, sig, sig_len, f_rng, p_rng ) ); } static void *ecdsa_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_ecdsa_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) mbedtls_ecdsa_init( (mbedtls_ecdsa_context *) ctx ); - return( ctx ); + return ( ctx ); } static void ecdsa_free_wrap( void *ctx ) @@ -385,44 +387,44 @@ const mbedtls_pk_info_t mbedtls_ecdsa_info = { static int rsa_alt_can_do( mbedtls_pk_type_t type ) { - return( type == MBEDTLS_PK_RSA ); + return ( type == MBEDTLS_PK_RSA ); } static size_t rsa_alt_get_bitlen( const void *ctx ) { const mbedtls_rsa_alt_context *rsa_alt = (const mbedtls_rsa_alt_context *) ctx; - return( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); + return ( 8 * rsa_alt->key_len_func( rsa_alt->key ) ); } static int rsa_alt_sign_wrap( void *ctx, mbedtls_md_type_t md_alg, - const unsigned char *hash, size_t hash_len, - unsigned char *sig, size_t *sig_len, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *hash, size_t hash_len, + unsigned char *sig, size_t *sig_len, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_alt_context *rsa_alt = (mbedtls_rsa_alt_context *) ctx; *sig_len = rsa_alt->key_len_func( rsa_alt->key ); - return( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, - md_alg, (unsigned int) hash_len, hash, sig ) ); + return ( rsa_alt->sign_func( rsa_alt->key, f_rng, p_rng, MBEDTLS_RSA_PRIVATE, + md_alg, (unsigned int) hash_len, hash, sig ) ); } static int rsa_alt_decrypt_wrap( void *ctx, - const unsigned char *input, size_t ilen, - unsigned char *output, size_t *olen, size_t osize, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + const unsigned char *input, size_t ilen, + unsigned char *output, size_t *olen, size_t osize, + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { mbedtls_rsa_alt_context *rsa_alt = (mbedtls_rsa_alt_context *) ctx; ((void) f_rng); ((void) p_rng); - if( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen != rsa_alt->key_len_func( rsa_alt->key ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - return( rsa_alt->decrypt_func( rsa_alt->key, - MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); + return ( rsa_alt->decrypt_func( rsa_alt->key, + MBEDTLS_RSA_PRIVATE, olen, input, output, osize ) ); } #if defined(MBEDTLS_RSA_C) @@ -433,25 +435,23 @@ static int rsa_alt_check_pair( const void *pub, const void *prv ) size_t sig_len = 0; int ret; - if( rsa_alt_get_bitlen( prv ) != rsa_get_bitlen( pub ) ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( rsa_alt_get_bitlen( prv ) != rsa_get_bitlen( pub ) ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); memset( hash, 0x2a, sizeof( hash ) ); - if( ( ret = rsa_alt_sign_wrap( (void *) prv, MBEDTLS_MD_NONE, - hash, sizeof( hash ), - sig, &sig_len, NULL, NULL ) ) != 0 ) - { - return( ret ); + if ( ( ret = rsa_alt_sign_wrap( (void *) prv, MBEDTLS_MD_NONE, + hash, sizeof( hash ), + sig, &sig_len, NULL, NULL ) ) != 0 ) { + return ( ret ); } - if( rsa_verify_wrap( (void *) pub, MBEDTLS_MD_NONE, - hash, sizeof( hash ), sig, sig_len ) != 0 ) - { - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( rsa_verify_wrap( (void *) pub, MBEDTLS_MD_NONE, + hash, sizeof( hash ), sig, sig_len ) != 0 ) { + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -459,10 +459,10 @@ static void *rsa_alt_alloc_wrap( void ) { void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_alt_context ) ); - if( ctx != NULL ) + if ( ctx != NULL ) memset( ctx, 0, sizeof( mbedtls_rsa_alt_context ) ); - return( ctx ); + return ( ctx ); } static void rsa_alt_free_wrap( void *ctx ) diff --git a/external_libs/mbedtls/library/pkcs11.c b/external_libs/mbedtls/library/pkcs11.c index 0ea6425..80f866b 100644 --- a/external_libs/mbedtls/library/pkcs11.c +++ b/external_libs/mbedtls/library/pkcs11.c @@ -52,35 +52,30 @@ int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t unsigned char *cert_blob = NULL; size_t cert_blob_size = 0; - if( cert == NULL ) - { + if ( cert == NULL ) { ret = 2; goto cleanup; } - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, NULL, - &cert_blob_size ) != CKR_OK ) - { + if ( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, NULL, + &cert_blob_size ) != CKR_OK ) { ret = 3; goto cleanup; } cert_blob = mbedtls_calloc( 1, cert_blob_size ); - if( NULL == cert_blob ) - { + if ( NULL == cert_blob ) { ret = 4; goto cleanup; } - if( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, cert_blob, - &cert_blob_size ) != CKR_OK ) - { + if ( pkcs11h_certificate_getCertificateBlob( pkcs11_cert, cert_blob, + &cert_blob_size ) != CKR_OK ) { ret = 5; goto cleanup; } - if( 0 != mbedtls_x509_crt_parse( cert, cert_blob, cert_blob_size ) ) - { + if ( 0 != mbedtls_x509_crt_parse( cert, cert_blob, cert_blob_size ) ) { ret = 6; goto cleanup; } @@ -88,25 +83,25 @@ int mbedtls_pkcs11_x509_cert_bind( mbedtls_x509_crt *cert, pkcs11h_certificate_t ret = 0; cleanup: - if( NULL != cert_blob ) + if ( NULL != cert_blob ) mbedtls_free( cert_blob ); - return( ret ); + return ( ret ); } int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key, - pkcs11h_certificate_t pkcs11_cert ) + pkcs11h_certificate_t pkcs11_cert ) { int ret = 1; mbedtls_x509_crt cert; mbedtls_x509_crt_init( &cert ); - if( priv_key == NULL ) + if ( priv_key == NULL ) goto cleanup; - if( 0 != mbedtls_pkcs11_x509_cert_bind( &cert, pkcs11_cert ) ) + if ( 0 != mbedtls_pkcs11_x509_cert_bind( &cert, pkcs11_cert ) ) goto cleanup; priv_key->len = mbedtls_pk_get_len( &cert.pk ); @@ -117,92 +112,87 @@ int mbedtls_pkcs11_priv_key_bind( mbedtls_pkcs11_context *priv_key, cleanup: mbedtls_x509_crt_free( &cert ); - return( ret ); + return ( ret ); } void mbedtls_pkcs11_priv_key_free( mbedtls_pkcs11_context *priv_key ) { - if( NULL != priv_key ) + if ( NULL != priv_key ) pkcs11h_certificate_freeCertificate( priv_key->pkcs11h_cert ); } int mbedtls_pkcs11_decrypt( mbedtls_pkcs11_context *ctx, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ) { size_t input_len, output_len; - if( NULL == ctx ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( NULL == ctx ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( MBEDTLS_RSA_PRIVATE != mode ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( MBEDTLS_RSA_PRIVATE != mode ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); output_len = input_len = ctx->len; - if( input_len < 16 || input_len > output_max_len ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( input_len < 16 || input_len > output_max_len ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); /* Determine size of output buffer */ - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, NULL, &output_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, + input_len, NULL, &output_len ) != CKR_OK ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } - if( output_len > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( output_len > output_max_len ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); - if( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, - input_len, output, &output_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( pkcs11h_certificate_decryptAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, input, + input_len, output, &output_len ) != CKR_OK ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } *olen = output_len; - return( 0 ); + return ( 0 ); } int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { size_t sig_len = 0, asn_len = 0, oid_size = 0; unsigned char *p = sig; const char *oid; - if( NULL == ctx ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( NULL == ctx ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( MBEDTLS_RSA_PRIVATE != mode ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( MBEDTLS_RSA_PRIVATE != mode ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); asn_len = 10 + oid_size; } sig_len = ctx->len; - if( hashlen > sig_len || asn_len > sig_len || - hashlen + asn_len > sig_len ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( hashlen > sig_len || asn_len > sig_len || + hashlen + asn_len > sig_len ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { /* * DigestInfo ::= SEQUENCE { * digestAlgorithm DigestAlgorithmIdentifier, @@ -228,13 +218,12 @@ int mbedtls_pkcs11_sign( mbedtls_pkcs11_context *ctx, memcpy( p, hash, hashlen ); - if( pkcs11h_certificate_signAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, sig, - asn_len + hashlen, sig, &sig_len ) != CKR_OK ) - { - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( pkcs11h_certificate_signAny( ctx->pkcs11h_cert, CKM_RSA_PKCS, sig, + asn_len + hashlen, sig, &sig_len ) != CKR_OK ) { + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); } - return( 0 ); + return ( 0 ); } #endif /* defined(MBEDTLS_PKCS11_C) */ diff --git a/external_libs/mbedtls/library/pkcs12.c b/external_libs/mbedtls/library/pkcs12.c index c603a13..438de6c 100644 --- a/external_libs/mbedtls/library/pkcs12.c +++ b/external_libs/mbedtls/library/pkcs12.c @@ -48,8 +48,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } static int pkcs12_parse_pbe_params( mbedtls_asn1_buf *params, @@ -66,24 +68,24 @@ static int pkcs12_parse_pbe_params( mbedtls_asn1_buf *params, * } * */ - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - if( ( ret = mbedtls_asn1_get_tag( p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); salt->p = *p; *p += salt->len; - if( ( ret = mbedtls_asn1_get_int( p, end, iterations ) ) != 0 ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( p, end, iterations ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + ret ); - if( *p != end ) - return( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_PKCS12_PBE_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } #define PKCS12_MAX_PWDLEN 128 @@ -98,44 +100,42 @@ static int pkcs12_pbe_derive_key_iv( mbedtls_asn1_buf *pbe_params, mbedtls_md_ty size_t i; unsigned char unipwd[PKCS12_MAX_PWDLEN * 2 + 2]; - if( pwdlen > PKCS12_MAX_PWDLEN ) - return( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); + if ( pwdlen > PKCS12_MAX_PWDLEN ) + return ( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); memset( &salt, 0, sizeof(mbedtls_asn1_buf) ); memset( &unipwd, 0, sizeof(unipwd) ); - if( ( ret = pkcs12_parse_pbe_params( pbe_params, &salt, - &iterations ) ) != 0 ) - return( ret ); + if ( ( ret = pkcs12_parse_pbe_params( pbe_params, &salt, + &iterations ) ) != 0 ) + return ( ret ); - for( i = 0; i < pwdlen; i++ ) + for ( i = 0; i < pwdlen; i++ ) unipwd[i * 2 + 1] = pwd[i]; - if( ( ret = mbedtls_pkcs12_derivation( key, keylen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - MBEDTLS_PKCS12_DERIVE_KEY, iterations ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pkcs12_derivation( key, keylen, unipwd, pwdlen * 2 + 2, + salt.p, salt.len, md_type, + MBEDTLS_PKCS12_DERIVE_KEY, iterations ) ) != 0 ) { + return ( ret ); } - if( iv == NULL || ivlen == 0 ) - return( 0 ); + if ( iv == NULL || ivlen == 0 ) + return ( 0 ); - if( ( ret = mbedtls_pkcs12_derivation( iv, ivlen, unipwd, pwdlen * 2 + 2, - salt.p, salt.len, md_type, - MBEDTLS_PKCS12_DERIVE_IV, iterations ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pkcs12_derivation( iv, ivlen, unipwd, pwdlen * 2 + 2, + salt.p, salt.len, md_type, + MBEDTLS_PKCS12_DERIVE_IV, iterations ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #undef PKCS12_MAX_PWDLEN int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t len, + unsigned char *output ) { #if !defined(MBEDTLS_ARC4_C) ((void) pbe_params); @@ -145,7 +145,7 @@ int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, ((void) data); ((void) len); ((void) output); - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); #else int ret; unsigned char key[16]; @@ -154,30 +154,29 @@ int mbedtls_pkcs12_pbe_sha1_rc4_128( mbedtls_asn1_buf *pbe_params, int mode, mbedtls_arc4_init( &ctx ); - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, MBEDTLS_MD_SHA1, - pwd, pwdlen, - key, 16, NULL, 0 ) ) != 0 ) - { - return( ret ); + if ( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, MBEDTLS_MD_SHA1, + pwd, pwdlen, + key, 16, NULL, 0 ) ) != 0 ) { + return ( ret ); } mbedtls_arc4_setup( &ctx, key, 16 ); - if( ( ret = mbedtls_arc4_crypt( &ctx, len, data, output ) ) != 0 ) + if ( ( ret = mbedtls_arc4_crypt( &ctx, len, data, output ) ) != 0 ) goto exit; exit: mbedtls_zeroize( key, sizeof( key ) ); mbedtls_arc4_free( &ctx ); - return( ret ); + return ( ret ); #endif /* MBEDTLS_ARC4_C */ } int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, - mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t len, - unsigned char *output ) + mbedtls_cipher_type_t cipher_type, mbedtls_md_type_t md_type, + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t len, + unsigned char *output ) { int ret, keylen = 0; unsigned char key[32]; @@ -187,39 +186,37 @@ int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, size_t olen = 0; cipher_info = mbedtls_cipher_info_from_type( cipher_type ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); keylen = cipher_info->key_bitlen / 8; - if( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, md_type, pwd, pwdlen, - key, keylen, - iv, cipher_info->iv_size ) ) != 0 ) - { - return( ret ); + if ( ( ret = pkcs12_pbe_derive_key_iv( pbe_params, md_type, pwd, pwdlen, + key, keylen, + iv, cipher_info->iv_size ) ) != 0 ) { + return ( ret ); } mbedtls_cipher_init( &cipher_ctx ); - if( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_set_iv( &cipher_ctx, iv, cipher_info->iv_size ) ) != 0 ) + if ( ( ret = mbedtls_cipher_set_iv( &cipher_ctx, iv, cipher_info->iv_size ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_reset( &cipher_ctx ) ) != 0 ) + if ( ( ret = mbedtls_cipher_reset( &cipher_ctx ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_update( &cipher_ctx, data, len, - output, &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_update( &cipher_ctx, data, len, + output, &olen ) ) != 0 ) { goto exit; } - if( ( ret = mbedtls_cipher_finish( &cipher_ctx, output + olen, &olen ) ) != 0 ) + if ( ( ret = mbedtls_cipher_finish( &cipher_ctx, output + olen, &olen ) ) != 0 ) ret = MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH; exit: @@ -227,7 +224,7 @@ int mbedtls_pkcs12_pbe( mbedtls_asn1_buf *pbe_params, int mode, mbedtls_zeroize( iv, sizeof( iv ) ); mbedtls_cipher_free( &cipher_ctx ); - return( ret ); + return ( ret ); } static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, @@ -236,8 +233,7 @@ static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, unsigned char *p = data; size_t use_len; - while( data_len > 0 ) - { + while ( data_len > 0 ) { use_len = ( data_len > fill_len ) ? fill_len : data_len; memcpy( p, filler, use_len ); p += use_len; @@ -246,9 +242,9 @@ static void pkcs12_fill_buffer( unsigned char *data, size_t data_len, } int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *salt, size_t saltlen, - mbedtls_md_type_t md_type, int id, int iterations ) + const unsigned char *pwd, size_t pwdlen, + const unsigned char *salt, size_t saltlen, + mbedtls_md_type_t md_type, int id, int iterations ) { int ret; unsigned int j; @@ -265,20 +261,20 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, mbedtls_md_context_t md_ctx; // This version only allows max of 64 bytes of password or salt - if( datalen > 128 || pwdlen > 64 || saltlen > 64 ) - return( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); + if ( datalen > 128 || pwdlen > 64 || saltlen > 64 ) + return ( MBEDTLS_ERR_PKCS12_BAD_INPUT_DATA ); md_info = mbedtls_md_info_from_type( md_type ); - if( md_info == NULL ) - return( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_PKCS12_FEATURE_UNAVAILABLE ); mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) + return ( ret ); hlen = mbedtls_md_get_size( md_info ); - if( hlen <= 32 ) + if ( hlen <= 32 ) v = 64; else v = 128; @@ -289,28 +285,26 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, pkcs12_fill_buffer( pwd_block, v, pwd, pwdlen ); p = data; - while( datalen > 0 ) - { + while ( datalen > 0 ) { // Calculate hash( diversifier || salt_block || pwd_block ) - if( ( ret = mbedtls_md_starts( &md_ctx ) ) != 0 ) + if ( ( ret = mbedtls_md_starts( &md_ctx ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_update( &md_ctx, diversifier, v ) ) != 0 ) + if ( ( ret = mbedtls_md_update( &md_ctx, diversifier, v ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_update( &md_ctx, salt_block, v ) ) != 0 ) + if ( ( ret = mbedtls_md_update( &md_ctx, salt_block, v ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_update( &md_ctx, pwd_block, v ) ) != 0 ) + if ( ( ret = mbedtls_md_update( &md_ctx, pwd_block, v ) ) != 0 ) goto exit; - if( ( ret = mbedtls_md_finish( &md_ctx, hash_output ) ) != 0 ) + if ( ( ret = mbedtls_md_finish( &md_ctx, hash_output ) ) != 0 ) goto exit; // Perform remaining ( iterations - 1 ) recursive hash calculations - for( i = 1; i < (size_t) iterations; i++ ) - { - if( ( ret = mbedtls_md( md_info, hash_output, hlen, hash_output ) ) != 0 ) + for ( i = 1; i < (size_t) iterations; i++ ) { + if ( ( ret = mbedtls_md( md_info, hash_output, hlen, hash_output ) ) != 0 ) goto exit; } @@ -319,21 +313,20 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, datalen -= use_len; p += use_len; - if( datalen == 0 ) + if ( datalen == 0 ) break; // Concatenating copies of hash_output into hash_block (B) pkcs12_fill_buffer( hash_block, v, hash_output, hlen ); // B += 1 - for( i = v; i > 0; i-- ) - if( ++hash_block[i - 1] != 0 ) + for ( i = v; i > 0; i-- ) + if ( ++hash_block[i - 1] != 0 ) break; // salt_block += B c = 0; - for( i = v; i > 0; i-- ) - { + for ( i = v; i > 0; i-- ) { j = salt_block[i - 1] + hash_block[i - 1] + c; c = (unsigned char) (j >> 8); salt_block[i - 1] = j & 0xFF; @@ -341,8 +334,7 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, // pwd_block += B c = 0; - for( i = v; i > 0; i-- ) - { + for ( i = v; i > 0; i-- ) { j = pwd_block[i - 1] + hash_block[i - 1] + c; c = (unsigned char) (j >> 8); pwd_block[i - 1] = j & 0xFF; @@ -359,7 +351,7 @@ int mbedtls_pkcs12_derivation( unsigned char *data, size_t datalen, mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PKCS12_C */ diff --git a/external_libs/mbedtls/library/pkcs5.c b/external_libs/mbedtls/library/pkcs5.c index e28d5a8..695e293 100644 --- a/external_libs/mbedtls/library/pkcs5.c +++ b/external_libs/mbedtls/library/pkcs5.c @@ -60,9 +60,9 @@ static int pkcs5_parse_pbkdf2_params( const mbedtls_asn1_buf *params, unsigned char *p = params->p; const unsigned char *end = params->p + params->len; - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); /* * PBKDF2-params ::= SEQUENCE { * salt OCTET STRING, @@ -72,46 +72,45 @@ static int pkcs5_parse_pbkdf2_params( const mbedtls_asn1_buf *params, * } * */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &salt->len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); salt->p = p; p += salt->len; - if( ( ret = mbedtls_asn1_get_int( &p, end, iterations ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, iterations ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_int( &p, end, keylen ) ) != 0 ) - { - if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, keylen ) ) != 0 ) { + if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); } - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_alg_null( &p, end, &prf_alg_oid ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg_null( &p, end, &prf_alg_oid ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); - if( MBEDTLS_OID_CMP( MBEDTLS_OID_HMAC_SHA1, &prf_alg_oid ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_HMAC_SHA1, &prf_alg_oid ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); *md_type = MBEDTLS_MD_SHA1; - if( p != end ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, - const unsigned char *pwd, size_t pwdlen, - const unsigned char *data, size_t datalen, - unsigned char *output ) + const unsigned char *pwd, size_t pwdlen, + const unsigned char *data, size_t datalen, + unsigned char *output ) { int ret, iterations = 0, keylen = 0; unsigned char *p, *end; @@ -135,41 +134,39 @@ int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, * encryptionScheme AlgorithmIdentifier {{PBES2-Encs}} * } */ - if( pbe_params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( pbe_params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); - if( ( ret = mbedtls_asn1_get_alg( &p, end, &kdf_alg_oid, &kdf_alg_params ) ) != 0 ) - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg( &p, end, &kdf_alg_oid, &kdf_alg_params ) ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); // Only PBKDF2 supported at the moment // - if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBKDF2, &kdf_alg_oid ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBKDF2, &kdf_alg_oid ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); - if( ( ret = pkcs5_parse_pbkdf2_params( &kdf_alg_params, - &salt, &iterations, &keylen, - &md_type ) ) != 0 ) - { - return( ret ); + if ( ( ret = pkcs5_parse_pbkdf2_params( &kdf_alg_params, + &salt, &iterations, &keylen, + &md_type ) ) != 0 ) { + return ( ret ); } md_info = mbedtls_md_info_from_type( md_type ); - if( md_info == NULL ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); - if( ( ret = mbedtls_asn1_get_alg( &p, end, &enc_scheme_oid, - &enc_scheme_params ) ) != 0 ) - { - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg( &p, end, &enc_scheme_oid, + &enc_scheme_params ) ) != 0 ) { + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT + ret ); } - if( mbedtls_oid_get_cipher_alg( &enc_scheme_oid, &cipher_alg ) != 0 ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( mbedtls_oid_get_cipher_alg( &enc_scheme_oid, &cipher_alg ) != 0 ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); cipher_info = mbedtls_cipher_info_from_type( cipher_alg ); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_PKCS5_FEATURE_UNAVAILABLE ); /* * The value of keylen from pkcs5_parse_pbkdf2_params() is ignored @@ -177,10 +174,9 @@ int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, */ keylen = cipher_info->key_bitlen / 8; - if( enc_scheme_params.tag != MBEDTLS_ASN1_OCTET_STRING || - enc_scheme_params.len != cipher_info->iv_size ) - { - return( MBEDTLS_ERR_PKCS5_INVALID_FORMAT ); + if ( enc_scheme_params.tag != MBEDTLS_ASN1_OCTET_STRING || + enc_scheme_params.len != cipher_info->iv_size ) { + return ( MBEDTLS_ERR_PKCS5_INVALID_FORMAT ); } mbedtls_md_init( &md_ctx ); @@ -188,36 +184,35 @@ int mbedtls_pkcs5_pbes2( const mbedtls_asn1_buf *pbe_params, int mode, memcpy( iv, enc_scheme_params.p, enc_scheme_params.len ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) goto exit; - if( ( ret = mbedtls_pkcs5_pbkdf2_hmac( &md_ctx, pwd, pwdlen, salt.p, salt.len, - iterations, keylen, key ) ) != 0 ) - { + if ( ( ret = mbedtls_pkcs5_pbkdf2_hmac( &md_ctx, pwd, pwdlen, salt.p, salt.len, + iterations, keylen, key ) ) != 0 ) { goto exit; } - if( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setup( &cipher_ctx, cipher_info ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) + if ( ( ret = mbedtls_cipher_setkey( &cipher_ctx, key, 8 * keylen, (mbedtls_operation_t) mode ) ) != 0 ) goto exit; - if( ( ret = mbedtls_cipher_crypt( &cipher_ctx, iv, enc_scheme_params.len, - data, datalen, output, &olen ) ) != 0 ) + if ( ( ret = mbedtls_cipher_crypt( &cipher_ctx, iv, enc_scheme_params.len, + data, datalen, output, &olen ) ) != 0 ) ret = MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH; exit: mbedtls_md_free( &md_ctx ); mbedtls_cipher_free( &cipher_ctx ); - return( ret ); + return ( ret ); } int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *password, - size_t plen, const unsigned char *salt, size_t slen, - unsigned int iteration_count, - uint32_t key_length, unsigned char *output ) + size_t plen, const unsigned char *salt, size_t slen, + unsigned int iteration_count, + uint32_t key_length, unsigned char *output ) { int ret, j; unsigned int i; @@ -231,43 +226,41 @@ int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *p memset( counter, 0, 4 ); counter[3] = 1; - if( iteration_count > 0xFFFFFFFF ) - return( MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA ); + if ( iteration_count > 0xFFFFFFFF ) + return ( MBEDTLS_ERR_PKCS5_BAD_INPUT_DATA ); - while( key_length ) - { + while ( key_length ) { // U1 ends up in work // - if( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_update( ctx, salt, slen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_update( ctx, salt, slen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_update( ctx, counter, 4 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_update( ctx, counter, 4 ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_finish( ctx, work ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_finish( ctx, work ) ) != 0 ) + return ( ret ); memcpy( md1, work, md_size ); - for( i = 1; i < iteration_count; i++ ) - { + for ( i = 1; i < iteration_count; i++ ) { // U2 ends up in md1 // - if( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_starts( ctx, password, plen ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_update( ctx, md1, md_size ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_update( ctx, md1, md_size ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_md_hmac_finish( ctx, md1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_hmac_finish( ctx, md1 ) ) != 0 ) + return ( ret ); // U1 xor U2 // - for( j = 0; j < md_size; j++ ) + for ( j = 0; j < md_size; j++ ) work[j] ^= md1[j]; } @@ -277,12 +270,12 @@ int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *p key_length -= (uint32_t) use_len; out_p += use_len; - for( i = 4; i > 0; i-- ) - if( ++counter[i - 1] != 0 ) + for ( i = 4; i > 0; i-- ) + if ( ++counter[i - 1] != 0 ) break; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SELF_TEST) @@ -290,20 +283,19 @@ int mbedtls_pkcs5_pbkdf2_hmac( mbedtls_md_context_t *ctx, const unsigned char *p #if !defined(MBEDTLS_SHA1_C) int mbedtls_pkcs5_self_test( int verbose ) { - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " PBKDF2 (SHA1): skipped\n\n" ); - return( 0 ); + return ( 0 ); } #else #define MAX_TESTS 6 static const size_t plen[MAX_TESTS] = - { 8, 8, 8, 24, 9 }; +{ 8, 8, 8, 24, 9 }; -static const unsigned char password[MAX_TESTS][32] = -{ +static const unsigned char password[MAX_TESTS][32] = { "password", "password", "password", @@ -312,10 +304,9 @@ static const unsigned char password[MAX_TESTS][32] = }; static const size_t slen[MAX_TESTS] = - { 4, 4, 4, 36, 5 }; +{ 4, 4, 4, 36, 5 }; -static const unsigned char salt[MAX_TESTS][40] = -{ +static const unsigned char salt[MAX_TESTS][40] = { "salt", "salt", "salt", @@ -324,28 +315,37 @@ static const unsigned char salt[MAX_TESTS][40] = }; static const uint32_t it_cnt[MAX_TESTS] = - { 1, 2, 4096, 4096, 4096 }; +{ 1, 2, 4096, 4096, 4096 }; static const uint32_t key_len[MAX_TESTS] = - { 20, 20, 20, 25, 16 }; +{ 20, 20, 20, 25, 16 }; -static const unsigned char result_key[MAX_TESTS][32] = -{ - { 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, - 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, - 0x2f, 0xe0, 0x37, 0xa6 }, - { 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, - 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, - 0xd8, 0xde, 0x89, 0x57 }, - { 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, - 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, - 0x65, 0xa4, 0x29, 0xc1 }, - { 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, - 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, - 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, - 0x38 }, - { 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, - 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 }, +static const unsigned char result_key[MAX_TESTS][32] = { + { + 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, + 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, + 0x2f, 0xe0, 0x37, 0xa6 + }, + { + 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, + 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, + 0xd8, 0xde, 0x89, 0x57 + }, + { + 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, + 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, + 0x65, 0xa4, 0x29, 0xc1 + }, + { + 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, + 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, + 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, + 0x38 + }, + { + 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, + 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3 + }, }; int mbedtls_pkcs5_self_test( int verbose ) @@ -358,46 +358,42 @@ int mbedtls_pkcs5_self_test( int verbose ) mbedtls_md_init( &sha1_ctx ); info_sha1 = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ); - if( info_sha1 == NULL ) - { + if ( info_sha1 == NULL ) { ret = 1; goto exit; } - if( ( ret = mbedtls_md_setup( &sha1_ctx, info_sha1, 1 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &sha1_ctx, info_sha1, 1 ) ) != 0 ) { ret = 1; goto exit; } - for( i = 0; i < MAX_TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < MAX_TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " PBKDF2 (SHA1) #%d: ", i ); ret = mbedtls_pkcs5_pbkdf2_hmac( &sha1_ctx, password[i], plen[i], salt[i], - slen[i], it_cnt[i], key_len[i], key ); - if( ret != 0 || - memcmp( result_key[i], key, key_len[i] ) != 0 ) - { - if( verbose != 0 ) + slen[i], it_cnt[i], key_len[i], key ); + if ( ret != 0 || + memcmp( result_key[i], key, key_len[i] ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_md_free( &sha1_ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SHA1_C */ diff --git a/external_libs/mbedtls/library/pkparse.c b/external_libs/mbedtls/library/pkparse.c index 275429e..e425e1e 100644 --- a/external_libs/mbedtls/library/pkparse.c +++ b/external_libs/mbedtls/library/pkparse.c @@ -62,8 +62,10 @@ #if defined(MBEDTLS_FS_IO) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -78,66 +80,63 @@ int mbedtls_pk_load_file( const char *path, unsigned char **buf, size_t *n ) FILE *f; long size; - if( ( f = fopen( path, "rb" ) ) == NULL ) - return( MBEDTLS_ERR_PK_FILE_IO_ERROR ); + if ( ( f = fopen( path, "rb" ) ) == NULL ) + return ( MBEDTLS_ERR_PK_FILE_IO_ERROR ); fseek( f, 0, SEEK_END ); - if( ( size = ftell( f ) ) == -1 ) - { + if ( ( size = ftell( f ) ) == -1 ) { fclose( f ); - return( MBEDTLS_ERR_PK_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_PK_FILE_IO_ERROR ); } fseek( f, 0, SEEK_SET ); *n = (size_t) size; - if( *n + 1 == 0 || - ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) - { + if ( *n + 1 == 0 || + ( *buf = mbedtls_calloc( 1, *n + 1 ) ) == NULL ) { fclose( f ); - return( MBEDTLS_ERR_PK_ALLOC_FAILED ); + return ( MBEDTLS_ERR_PK_ALLOC_FAILED ); } - if( fread( *buf, 1, *n, f ) != *n ) - { + if ( fread( *buf, 1, *n, f ) != *n ) { fclose( f ); mbedtls_free( *buf ); - return( MBEDTLS_ERR_PK_FILE_IO_ERROR ); + return ( MBEDTLS_ERR_PK_FILE_IO_ERROR ); } fclose( f ); (*buf)[*n] = '\0'; - if( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) + if ( strstr( (const char *) *buf, "-----BEGIN " ) != NULL ) ++*n; - return( 0 ); + return ( 0 ); } /* * Load and parse a private key */ int mbedtls_pk_parse_keyfile( mbedtls_pk_context *ctx, - const char *path, const char *pwd ) + const char *path, const char *pwd ) { int ret; size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); - if( pwd == NULL ) + if ( pwd == NULL ) ret = mbedtls_pk_parse_key( ctx, buf, n, NULL, 0 ); else ret = mbedtls_pk_parse_key( ctx, buf, n, - (const unsigned char *) pwd, strlen( pwd ) ); + (const unsigned char *) pwd, strlen( pwd ) ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } /* @@ -149,15 +148,15 @@ int mbedtls_pk_parse_public_keyfile( mbedtls_pk_context *ctx, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_pk_parse_public_key( ctx, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -177,29 +176,27 @@ static int pk_get_ecparams( unsigned char **p, const unsigned char *end, /* Tag may be either OID or SEQUENCE */ params->tag = **p; - if( params->tag != MBEDTLS_ASN1_OID + if ( params->tag != MBEDTLS_ASN1_OID #if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) - && params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) + && params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) #endif - ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } - if( ( ret = mbedtls_asn1_get_tag( p, end, ¶ms->len, params->tag ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, ¶ms->len, params->tag ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } params->p = *p; *p += params->len; - if( *p != end ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) @@ -232,11 +229,11 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ int ver; /* SpecifiedECDomainVersion ::= INTEGER { 1, 2, 3 } */ - if( ( ret = mbedtls_asn1_get_int( &p, end, &ver ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &ver ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ver < 1 || ver > 3 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( ver < 1 || ver > 3 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); /* * FieldID { FIELD-ID:IOSet } ::= SEQUENCE { -- Finite field @@ -244,9 +241,9 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * parameters FIELD-ID.&Type({IOSet}{@fieldType}) * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); end_field = p + len; @@ -258,26 +255,25 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * } * prime-field OBJECT IDENTIFIER ::= { id-fieldType 1 } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end_field, &len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end_field, &len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( ret ); - if( len != MBEDTLS_OID_SIZE( MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD ) || - memcmp( p, MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD, len ) != 0 ) - { - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + if ( len != MBEDTLS_OID_SIZE( MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD ) || + memcmp( p, MBEDTLS_OID_ANSI_X9_62_PRIME_FIELD, len ) != 0 ) { + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); } p += len; /* Prime-p ::= INTEGER -- Field of size p. */ - if( ( ret = mbedtls_asn1_get_mpi( &p, end_field, &grp->P ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_mpi( &p, end_field, &grp->P ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); grp->pbits = mbedtls_mpi_bitlen( &grp->P ); - if( p != end_field ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end_field ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); /* * Curve ::= SEQUENCE { @@ -288,9 +284,9 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * -- with version equal to ecdpVer2 or ecdpVer3 * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( ret ); end_curve = p + len; @@ -298,51 +294,47 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * FieldElement ::= OCTET STRING * containing an integer in the case of a prime field */ - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || - ( ret = mbedtls_mpi_read_binary( &grp->A, p, len ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || + ( ret = mbedtls_mpi_read_binary( &grp->A, p, len ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } p += len; - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || - ( ret = mbedtls_mpi_read_binary( &grp->B, p, len ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 || + ( ret = mbedtls_mpi_read_binary( &grp->B, p, len ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } p += len; /* Ignore seed BIT STRING OPTIONAL */ - if( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_BIT_STRING ) ) == 0 ) + if ( ( ret = mbedtls_asn1_get_tag( &p, end_curve, &len, MBEDTLS_ASN1_BIT_STRING ) ) == 0 ) p += len; - if( p != end_curve ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end_curve ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); /* * ECPoint ::= OCTET STRING */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_ecp_point_read_binary( grp, &grp->G, - ( const unsigned char *) p, len ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_point_read_binary( grp, &grp->G, + ( const unsigned char *) p, len ) ) != 0 ) { /* * If we can't read the point because it's compressed, cheat by * reading only the X coordinate and the parity bit of Y. */ - if( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE || - ( p[0] != 0x02 && p[0] != 0x03 ) || - len != mbedtls_mpi_size( &grp->P ) + 1 || - mbedtls_mpi_read_binary( &grp->G.X, p + 1, len - 1 ) != 0 || - mbedtls_mpi_lset( &grp->G.Y, p[0] - 2 ) != 0 || - mbedtls_mpi_lset( &grp->G.Z, 1 ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE || + ( p[0] != 0x02 && p[0] != 0x03 ) || + len != mbedtls_mpi_size( &grp->P ) + 1 || + mbedtls_mpi_read_binary( &grp->G.X, p + 1, len - 1 ) != 0 || + mbedtls_mpi_lset( &grp->G.Y, p[0] - 2 ) != 0 || + mbedtls_mpi_lset( &grp->G.Z, 1 ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } } @@ -351,8 +343,8 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ /* * order INTEGER */ - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &grp->N ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &grp->N ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); grp->nbits = mbedtls_mpi_bitlen( &grp->N ); @@ -360,7 +352,7 @@ static int pk_group_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_ * Allow optional elements by purposefully not enforcing p == end here. */ - return( 0 ); + return ( 0 ); } /* @@ -375,23 +367,21 @@ static int pk_group_id_from_group( const mbedtls_ecp_group *grp, mbedtls_ecp_gro mbedtls_ecp_group_init( &ref ); - for( id = mbedtls_ecp_grp_id_list(); *id != MBEDTLS_ECP_DP_NONE; id++ ) - { + for ( id = mbedtls_ecp_grp_id_list(); *id != MBEDTLS_ECP_DP_NONE; id++ ) { /* Load the group associated to that id */ mbedtls_ecp_group_free( &ref ); MBEDTLS_MPI_CHK( mbedtls_ecp_group_load( &ref, *id ) ); /* Compare to the group we were given, starting with easy tests */ - if( grp->pbits == ref.pbits && grp->nbits == ref.nbits && - mbedtls_mpi_cmp_mpi( &grp->P, &ref.P ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->A, &ref.A ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->B, &ref.B ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->N, &ref.N ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->G.X, &ref.G.X ) == 0 && - mbedtls_mpi_cmp_mpi( &grp->G.Z, &ref.G.Z ) == 0 && - /* For Y we may only know the parity bit, so compare only that */ - mbedtls_mpi_get_bit( &grp->G.Y, 0 ) == mbedtls_mpi_get_bit( &ref.G.Y, 0 ) ) - { + if ( grp->pbits == ref.pbits && grp->nbits == ref.nbits && + mbedtls_mpi_cmp_mpi( &grp->P, &ref.P ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->A, &ref.A ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->B, &ref.B ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->N, &ref.N ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->G.X, &ref.G.X ) == 0 && + mbedtls_mpi_cmp_mpi( &grp->G.Z, &ref.G.Z ) == 0 && + /* For Y we may only know the parity bit, so compare only that */ + mbedtls_mpi_get_bit( &grp->G.Y, 0 ) == mbedtls_mpi_get_bit( &ref.G.Y, 0 ) ) { break; } @@ -402,10 +392,10 @@ static int pk_group_id_from_group( const mbedtls_ecp_group *grp, mbedtls_ecp_gro *grp_id = *id; - if( ret == 0 && *id == MBEDTLS_ECP_DP_NONE ) + if ( ret == 0 && *id == MBEDTLS_ECP_DP_NONE ) ret = MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE; - return( ret ); + return ( ret ); } /* @@ -419,7 +409,7 @@ static int pk_group_id_from_specified( const mbedtls_asn1_buf *params, mbedtls_ecp_group_init( &grp ); - if( ( ret = pk_group_from_specified( params, &grp ) ) != 0 ) + if ( ( ret = pk_group_from_specified( params, &grp ) ) != 0 ) goto cleanup; ret = pk_group_id_from_group( &grp, grp_id ); @@ -427,7 +417,7 @@ static int pk_group_id_from_specified( const mbedtls_asn1_buf *params, cleanup: mbedtls_ecp_group_free( &grp ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PK_PARSE_EC_EXTENDED */ @@ -444,31 +434,28 @@ static int pk_use_ecparams( const mbedtls_asn1_buf *params, mbedtls_ecp_group *g int ret; mbedtls_ecp_group_id grp_id; - if( params->tag == MBEDTLS_ASN1_OID ) - { - if( mbedtls_oid_get_ec_grp( params, &grp_id ) != 0 ) - return( MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE ); - } - else - { + if ( params->tag == MBEDTLS_ASN1_OID ) { + if ( mbedtls_oid_get_ec_grp( params, &grp_id ) != 0 ) + return ( MBEDTLS_ERR_PK_UNKNOWN_NAMED_CURVE ); + } else { #if defined(MBEDTLS_PK_PARSE_EC_EXTENDED) - if( ( ret = pk_group_id_from_specified( params, &grp_id ) ) != 0 ) - return( ret ); + if ( ( ret = pk_group_id_from_specified( params, &grp_id ) ) != 0 ) + return ( ret ); #else - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); #endif } /* * grp may already be initilialized; if so, make sure IDs match */ - if( grp->id != MBEDTLS_ECP_DP_NONE && grp->id != grp_id ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( grp->id != MBEDTLS_ECP_DP_NONE && grp->id != grp_id ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); - if( ( ret = mbedtls_ecp_group_load( grp, grp_id ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ecp_group_load( grp, grp_id ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -483,9 +470,8 @@ static int pk_get_ecpubkey( unsigned char **p, const unsigned char *end, { int ret; - if( ( ret = mbedtls_ecp_point_read_binary( &key->grp, &key->Q, - (const unsigned char *) *p, end - *p ) ) == 0 ) - { + if ( ( ret = mbedtls_ecp_point_read_binary( &key->grp, &key->Q, + (const unsigned char *) *p, end - *p ) ) == 0 ) { ret = mbedtls_ecp_check_pubkey( &key->grp, &key->Q ); } @@ -494,7 +480,7 @@ static int pk_get_ecpubkey( unsigned char **p, const unsigned char *end, */ *p = (unsigned char *) end; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_ECP_C */ @@ -512,28 +498,28 @@ static int pk_get_rsapubkey( unsigned char **p, int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->N ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->E ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); + if ( ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->N ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( p, end, &rsa->E ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); - if( *p != end ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( ret = mbedtls_rsa_check_pubkey( rsa ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY ); + if ( ( ret = mbedtls_rsa_check_pubkey( rsa ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY ); rsa->len = mbedtls_mpi_size( &rsa->N ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -552,23 +538,22 @@ static int pk_get_pk_alg( unsigned char **p, memset( params, 0, sizeof(mbedtls_asn1_buf) ); - if( ( ret = mbedtls_asn1_get_alg( p, end, &alg_oid, params ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_alg( p, end, &alg_oid, params ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_ALG + ret ); - if( mbedtls_oid_get_pk_alg( &alg_oid, pk_alg ) != 0 ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( mbedtls_oid_get_pk_alg( &alg_oid, pk_alg ) != 0 ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); /* * No parameters with RSA (only for EC) */ - if( *pk_alg == MBEDTLS_PK_RSA && - ( ( params->tag != MBEDTLS_ASN1_NULL && params->tag != 0 ) || - params->len != 0 ) ) - { - return( MBEDTLS_ERR_PK_INVALID_ALG ); + if ( *pk_alg == MBEDTLS_PK_RSA && + ( ( params->tag != MBEDTLS_ASN1_NULL && params->tag != 0 ) || + params->len != 0 ) ) { + return ( MBEDTLS_ERR_PK_INVALID_ALG ); } - return( 0 ); + return ( 0 ); } /* @@ -577,7 +562,7 @@ static int pk_get_pk_alg( unsigned char **p, * subjectPublicKey BIT STRING } */ int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, - mbedtls_pk_context *pk ) + mbedtls_pk_context *pk ) { int ret; size_t len; @@ -585,54 +570,51 @@ int mbedtls_pk_parse_subpubkey( unsigned char **p, const unsigned char *end, mbedtls_pk_type_t pk_alg = MBEDTLS_PK_NONE; const mbedtls_pk_info_t *pk_info; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = *p + len; - if( ( ret = pk_get_pk_alg( p, end, &pk_alg, &alg_params ) ) != 0 ) - return( ret ); + if ( ( ret = pk_get_pk_alg( p, end, &pk_alg, &alg_params ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_PK_INVALID_PUBKEY + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_PK_INVALID_PUBKEY + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_RSA_C) - if( pk_alg == MBEDTLS_PK_RSA ) - { + if ( pk_alg == MBEDTLS_PK_RSA ) { ret = pk_get_rsapubkey( p, end, mbedtls_pk_rsa( *pk ) ); } else #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( pk_alg == MBEDTLS_PK_ECKEY_DH || pk_alg == MBEDTLS_PK_ECKEY ) - { - ret = pk_use_ecparams( &alg_params, &mbedtls_pk_ec( *pk )->grp ); - if( ret == 0 ) - ret = pk_get_ecpubkey( p, end, mbedtls_pk_ec( *pk ) ); - } else + if ( pk_alg == MBEDTLS_PK_ECKEY_DH || pk_alg == MBEDTLS_PK_ECKEY ) { + ret = pk_use_ecparams( &alg_params, &mbedtls_pk_ec( *pk )->grp ); + if ( ret == 0 ) + ret = pk_get_ecpubkey( p, end, mbedtls_pk_ec( *pk ) ); + } else #endif /* MBEDTLS_ECP_C */ - ret = MBEDTLS_ERR_PK_UNKNOWN_PK_ALG; + ret = MBEDTLS_ERR_PK_UNKNOWN_PK_ALG; - if( ret == 0 && *p != end ) + if ( ret == 0 && *p != end ) ret = MBEDTLS_ERR_PK_INVALID_PUBKEY MBEDTLS_ERR_ASN1_LENGTH_MISMATCH; - if( ret != 0 ) + if ( ret != 0 ) mbedtls_pk_free( pk ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_RSA_C) @@ -666,53 +648,47 @@ static int pk_parse_key_pkcs1_der( mbedtls_rsa_context *rsa, * otherPrimeInfos OtherPrimeInfos OPTIONAL * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end, &rsa->ver ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &rsa->ver ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - if( rsa->ver != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); + if ( rsa->ver != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); } - if( ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->N ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->E ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->D ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->P ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->Q ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DP ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DQ ) ) != 0 || - ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->QP ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->N ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->E ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->D ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->P ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->Q ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DP ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->DQ ) ) != 0 || + ( ret = mbedtls_asn1_get_mpi( &p, end, &rsa->QP ) ) != 0 ) { mbedtls_rsa_free( rsa ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } rsa->len = mbedtls_mpi_size( &rsa->N ); - if( p != end ) - { + if ( p != end ) { mbedtls_rsa_free( rsa ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - if( ( ret = mbedtls_rsa_check_privkey( rsa ) ) != 0 ) - { + if ( ( ret = mbedtls_rsa_check_privkey( rsa ) ) != 0 ) { mbedtls_rsa_free( rsa ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_RSA_C */ @@ -742,103 +718,90 @@ static int pk_parse_key_sec1_der( mbedtls_ecp_keypair *eck, * publicKey [1] BIT STRING OPTIONAL * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( version != 1 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); + if ( version != 1 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_VERSION ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_mpi_read_binary( &eck->d, p, len ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_read_binary( &eck->d, p, len ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } p += len; pubkey_done = 0; - if( p != end ) - { + if ( p != end ) { /* * Is 'parameters' present? */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { - if( ( ret = pk_get_ecparams( &p, p + len, ¶ms) ) != 0 || - ( ret = pk_use_ecparams( ¶ms, &eck->grp ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) { + if ( ( ret = pk_get_ecparams( &p, p + len, ¶ms) ) != 0 || + ( ret = pk_use_ecparams( ¶ms, &eck->grp ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( ret ); + return ( ret ); } - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } /* * Is 'publickey' present? If not, or if we can't read it (eg because it * is compressed), create it from the private key. */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) { end2 = p + len; - if( ( ret = mbedtls_asn1_get_bitstring_null( &p, end2, &len ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring_null( &p, end2, &len ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( p + len != end2 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p + len != end2 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( ( ret = pk_get_ecpubkey( &p, end2, eck ) ) == 0 ) + if ( ( ret = pk_get_ecpubkey( &p, end2, eck ) ) == 0 ) pubkey_done = 1; - else - { + else { /* * The only acceptable failure mode of pk_get_ecpubkey() above * is if the point format is not recognized. */ - if( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + if ( ret != MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } } - if( ! pubkey_done && - ( ret = mbedtls_ecp_mul( &eck->grp, &eck->Q, &eck->d, &eck->grp.G, - NULL, NULL ) ) != 0 ) - { + if ( ! pubkey_done && + ( ret = mbedtls_ecp_mul( &eck->grp, &eck->Q, &eck->d, &eck->grp.G, + NULL, NULL ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_ecp_check_privkey( &eck->grp, &eck->d ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_check_privkey( &eck->grp, &eck->d ) ) != 0 ) { mbedtls_ecp_keypair_free( eck ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ECP_C */ @@ -846,9 +809,9 @@ static int pk_parse_key_sec1_der( mbedtls_ecp_keypair *eck, * Parse an unencrypted PKCS#8 encoded private key */ static int pk_parse_key_pkcs8_unencrypted_der( - mbedtls_pk_context *pk, - const unsigned char* key, - size_t keylen ) + mbedtls_pk_context *pk, + const unsigned char* key, + size_t keylen ) { int ret, version; size_t len; @@ -874,60 +837,55 @@ static int pk_parse_key_pkcs8_unencrypted_der( * The PrivateKey OCTET STRING is a SEC1 ECPrivateKey */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end, &version ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( version != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_VERSION + ret ); + if ( version != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_VERSION + ret ); - if( ( ret = pk_get_pk_alg( &p, end, &pk_alg, ¶ms ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = pk_get_pk_alg( &p, end, &pk_alg, ¶ms ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( len < 1 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( len < 1 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( pk_alg ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_RSA_C) - if( pk_alg == MBEDTLS_PK_RSA ) - { - if( ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), p, len ) ) != 0 ) - { + if ( pk_alg == MBEDTLS_PK_RSA ) { + if ( ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), p, len ) ) != 0 ) { mbedtls_pk_free( pk ); - return( ret ); + return ( ret ); } } else #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( pk_alg == MBEDTLS_PK_ECKEY || pk_alg == MBEDTLS_PK_ECKEY_DH ) - { - if( ( ret = pk_use_ecparams( ¶ms, &mbedtls_pk_ec( *pk )->grp ) ) != 0 || - ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), p, len ) ) != 0 ) - { - mbedtls_pk_free( pk ); - return( ret ); - } - } else + if ( pk_alg == MBEDTLS_PK_ECKEY || pk_alg == MBEDTLS_PK_ECKEY_DH ) { + if ( ( ret = pk_use_ecparams( ¶ms, &mbedtls_pk_ec( *pk )->grp ) ) != 0 || + ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), p, len ) ) != 0 ) { + mbedtls_pk_free( pk ); + return ( ret ); + } + } else #endif /* MBEDTLS_ECP_C */ - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - return( 0 ); + return ( 0 ); } /* @@ -935,9 +893,9 @@ static int pk_parse_key_pkcs8_unencrypted_der( */ #if defined(MBEDTLS_PKCS12_C) || defined(MBEDTLS_PKCS5_C) static int pk_parse_key_pkcs8_encrypted_der( - mbedtls_pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) + mbedtls_pk_context *pk, + const unsigned char *key, size_t keylen, + const unsigned char *pwd, size_t pwdlen ) { int ret, decrypted = 0; size_t len; @@ -954,8 +912,8 @@ static int pk_parse_key_pkcs8_encrypted_der( p = (unsigned char *) key; end = p + keylen; - if( pwdlen == 0 ) - return( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); + if ( pwdlen == 0 ) + return ( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); /* * This function parses the EncryptedPrivatKeyInfo object (PKCS#8) @@ -971,85 +929,75 @@ static int pk_parse_key_pkcs8_encrypted_der( * * The EncryptedData OCTET STRING is a PKCS#8 PrivateKeyInfo */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); } end = p + len; - if( ( ret = mbedtls_asn1_get_alg( &p, end, &pbe_alg_oid, &pbe_params ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_alg( &p, end, &pbe_alg_oid, &pbe_params ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT + ret ); - if( len > sizeof( buf ) ) - return( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); + if ( len > sizeof( buf ) ) + return ( MBEDTLS_ERR_PK_BAD_INPUT_DATA ); /* * Decrypt EncryptedData with appropriate PDE */ #if defined(MBEDTLS_PKCS12_C) - if( mbedtls_oid_get_pkcs12_pbe_alg( &pbe_alg_oid, &md_alg, &cipher_alg ) == 0 ) - { - if( ( ret = mbedtls_pkcs12_pbe( &pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, - cipher_alg, md_alg, - pwd, pwdlen, p, len, buf ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - - return( ret ); + if ( mbedtls_oid_get_pkcs12_pbe_alg( &pbe_alg_oid, &md_alg, &cipher_alg ) == 0 ) { + if ( ( ret = mbedtls_pkcs12_pbe( &pbe_params, MBEDTLS_PKCS12_PBE_DECRYPT, + cipher_alg, md_alg, + pwd, pwdlen, p, len, buf ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_PKCS12_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + + return ( ret ); } decrypted = 1; - } - else if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128, &pbe_alg_oid ) == 0 ) - { - if( ( ret = mbedtls_pkcs12_pbe_sha1_rc4_128( &pbe_params, - MBEDTLS_PKCS12_PBE_DECRYPT, - pwd, pwdlen, - p, len, buf ) ) != 0 ) - { - return( ret ); + } else if ( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS12_PBE_SHA1_RC4_128, &pbe_alg_oid ) == 0 ) { + if ( ( ret = mbedtls_pkcs12_pbe_sha1_rc4_128( &pbe_params, + MBEDTLS_PKCS12_PBE_DECRYPT, + pwd, pwdlen, + p, len, buf ) ) != 0 ) { + return ( ret ); } // Best guess for password mismatch when using RC4. If first tag is // not MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE // - if( *buf != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + if ( *buf != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); decrypted = 1; - } - else + } else #endif /* MBEDTLS_PKCS12_C */ #if defined(MBEDTLS_PKCS5_C) - if( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBES2, &pbe_alg_oid ) == 0 ) - { - if( ( ret = mbedtls_pkcs5_pbes2( &pbe_params, MBEDTLS_PKCS5_DECRYPT, pwd, pwdlen, - p, len, buf ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_PKCS5_PBES2, &pbe_alg_oid ) == 0 ) { + if ( ( ret = mbedtls_pkcs5_pbes2( &pbe_params, MBEDTLS_PKCS5_DECRYPT, pwd, pwdlen, + p, len, buf ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_PKCS5_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - return( ret ); - } + return ( ret ); + } - decrypted = 1; - } - else + decrypted = 1; + } else #endif /* MBEDTLS_PKCS5_C */ - { - ((void) pwd); - } + { + ((void) pwd); + } - if( decrypted == 0 ) - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + if ( decrypted == 0 ) + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - return( pk_parse_key_pkcs8_unencrypted_der( pk, buf, len ) ); + return ( pk_parse_key_pkcs8_unencrypted_der( pk, buf, len ) ); } #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ @@ -1057,8 +1005,8 @@ static int pk_parse_key_pkcs8_encrypted_der( * Parse a private key */ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, - const unsigned char *key, size_t keylen, - const unsigned char *pwd, size_t pwdlen ) + const unsigned char *key, size_t keylen, + const unsigned char *pwd, size_t pwdlen ) { int ret; const mbedtls_pk_info_t *pk_info; @@ -1071,114 +1019,102 @@ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, #if defined(MBEDTLS_RSA_C) /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN RSA PRIVATE KEY-----", - "-----END RSA PRIVATE KEY-----", - key, pwd, pwdlen, &len ); - - if( ret == 0 ) - { - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), - pem.buf, pem.buflen ) ) != 0 ) - { + "-----BEGIN RSA PRIVATE KEY-----", + "-----END RSA PRIVATE KEY-----", + key, pwd, pwdlen, &len ); + + if ( ret == 0 ) { + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), + pem.buf, pem.buflen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) - return( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) + return ( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); + else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN EC PRIVATE KEY-----", - "-----END EC PRIVATE KEY-----", - key, pwd, pwdlen, &len ); - if( ret == 0 ) - { - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), - pem.buf, pem.buflen ) ) != 0 ) - { + "-----BEGIN EC PRIVATE KEY-----", + "-----END EC PRIVATE KEY-----", + key, pwd, pwdlen, &len ); + if ( ret == 0 ) { + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), + pem.buf, pem.buflen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) - return( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); - else if( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) - return( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_MISMATCH ) + return ( MBEDTLS_ERR_PK_PASSWORD_MISMATCH ); + else if ( ret == MBEDTLS_ERR_PEM_PASSWORD_REQUIRED ) + return ( MBEDTLS_ERR_PK_PASSWORD_REQUIRED ); + else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #endif /* MBEDTLS_ECP_C */ /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN PRIVATE KEY-----", - "-----END PRIVATE KEY-----", - key, NULL, 0, &len ); - if( ret == 0 ) - { - if( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, - pem.buf, pem.buflen ) ) != 0 ) - { + "-----BEGIN PRIVATE KEY-----", + "-----END PRIVATE KEY-----", + key, NULL, 0, &len ); + if ( ret == 0 ) { + if ( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, + pem.buf, pem.buflen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #if defined(MBEDTLS_PKCS12_C) || defined(MBEDTLS_PKCS5_C) /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN ENCRYPTED PRIVATE KEY-----", - "-----END ENCRYPTED PRIVATE KEY-----", - key, NULL, 0, &len ); - if( ret == 0 ) - { - if( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, - pem.buf, pem.buflen, - pwd, pwdlen ) ) != 0 ) - { + "-----BEGIN ENCRYPTED PRIVATE KEY-----", + "-----END ENCRYPTED PRIVATE KEY-----", + key, NULL, 0, &len ); + if ( ret == 0 ) { + if ( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, + pem.buf, pem.buflen, + pwd, pwdlen ) ) != 0 ) { mbedtls_pk_free( pk ); } mbedtls_pem_free( &pem ); - return( ret ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - return( ret ); + return ( ret ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) + return ( ret ); #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ #else ((void) ret); @@ -1194,59 +1130,55 @@ int mbedtls_pk_parse_key( mbedtls_pk_context *pk, * error */ #if defined(MBEDTLS_PKCS12_C) || defined(MBEDTLS_PKCS5_C) - if( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, key, keylen, - pwd, pwdlen ) ) == 0 ) - { - return( 0 ); + if ( ( ret = pk_parse_key_pkcs8_encrypted_der( pk, key, keylen, + pwd, pwdlen ) ) == 0 ) { + return ( 0 ); } mbedtls_pk_free( pk ); - if( ret == MBEDTLS_ERR_PK_PASSWORD_MISMATCH ) - { - return( ret ); + if ( ret == MBEDTLS_ERR_PK_PASSWORD_MISMATCH ) { + return ( ret ); } #endif /* MBEDTLS_PKCS12_C || MBEDTLS_PKCS5_C */ - if( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, key, keylen ) ) == 0 ) - return( 0 ); + if ( ( ret = pk_parse_key_pkcs8_unencrypted_der( pk, key, keylen ) ) == 0 ) + return ( 0 ); mbedtls_pk_free( pk ); #if defined(MBEDTLS_RSA_C) - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_RSA ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), key, keylen ) ) == 0 ) - { - return( 0 ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_pkcs1_der( mbedtls_pk_rsa( *pk ), key, keylen ) ) == 0 ) { + return ( 0 ); } mbedtls_pk_free( pk ); #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) - return( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); + if ( ( pk_info = mbedtls_pk_info_from_type( MBEDTLS_PK_ECKEY ) ) == NULL ) + return ( MBEDTLS_ERR_PK_UNKNOWN_PK_ALG ); - if( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || - ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), key, keylen ) ) == 0 ) - { - return( 0 ); + if ( ( ret = mbedtls_pk_setup( pk, pk_info ) ) != 0 || + ( ret = pk_parse_key_sec1_der( mbedtls_pk_ec( *pk ), key, keylen ) ) == 0 ) { + return ( 0 ); } mbedtls_pk_free( pk ); #endif /* MBEDTLS_ECP_C */ - return( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); + return ( MBEDTLS_ERR_PK_KEY_INVALID_FORMAT ); } /* * Parse a public key */ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, - const unsigned char *key, size_t keylen ) + const unsigned char *key, size_t keylen ) { int ret; unsigned char *p; @@ -1257,26 +1189,23 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, mbedtls_pem_init( &pem ); /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( keylen == 0 || key[keylen - 1] != '\0' ) + if ( keylen == 0 || key[keylen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN PUBLIC KEY-----", - "-----END PUBLIC KEY-----", - key, NULL, 0, &len ); + "-----BEGIN PUBLIC KEY-----", + "-----END PUBLIC KEY-----", + key, NULL, 0, &len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ key = pem.buf; keylen = pem.buflen; - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PEM_PARSE_C */ p = (unsigned char *) key; @@ -1287,7 +1216,7 @@ int mbedtls_pk_parse_public_key( mbedtls_pk_context *ctx, mbedtls_pem_free( &pem ); #endif - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PK_PARSE_C */ diff --git a/external_libs/mbedtls/library/pkwrite.c b/external_libs/mbedtls/library/pkwrite.c index 83b798c..064965a 100644 --- a/external_libs/mbedtls/library/pkwrite.c +++ b/external_libs/mbedtls/library/pkwrite.c @@ -62,7 +62,7 @@ * } */ static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, - mbedtls_rsa_context *rsa ) + mbedtls_rsa_context *rsa ) { int ret; size_t len = 0; @@ -72,9 +72,9 @@ static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } #endif /* MBEDTLS_RSA_C */ @@ -83,26 +83,25 @@ static int pk_write_rsa_pubkey( unsigned char **p, unsigned char *start, * EC public key is an EC point */ static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start, - mbedtls_ecp_keypair *ec ) + mbedtls_ecp_keypair *ec ) { int ret; size_t len = 0; unsigned char buf[MBEDTLS_ECP_MAX_PT_LEN]; - if( ( ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q, - MBEDTLS_ECP_PF_UNCOMPRESSED, - &len, buf, sizeof( buf ) ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ecp_point_write_binary( &ec->grp, &ec->Q, + MBEDTLS_ECP_PF_UNCOMPRESSED, + &len, buf, sizeof( buf ) ) ) != 0 ) { + return ( ret ); } - if( *p < start || (size_t)( *p - start ) < len ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < len ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *p -= len; memcpy( *p, buf, len ); - return( (int) len ); + return ( (int) len ); } /* @@ -111,41 +110,41 @@ static int pk_write_ec_pubkey( unsigned char **p, unsigned char *start, * } */ static int pk_write_ec_param( unsigned char **p, unsigned char *start, - mbedtls_ecp_keypair *ec ) + mbedtls_ecp_keypair *ec ) { int ret; size_t len = 0; const char *oid; size_t oid_len; - if( ( ret = mbedtls_oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_oid_get_oid_by_ec_grp( ec->grp.id, &oid, &oid_len ) ) != 0 ) + return ( ret ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_oid( p, start, oid, oid_len ) ); - return( (int) len ); + return ( (int) len ); } #endif /* MBEDTLS_ECP_C */ int mbedtls_pk_write_pubkey( unsigned char **p, unsigned char *start, - const mbedtls_pk_context *key ) + const mbedtls_pk_context *key ) { int ret; size_t len = 0; #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) MBEDTLS_ASN1_CHK_ADD( len, pk_write_rsa_pubkey( p, start, mbedtls_pk_rsa( *key ) ) ); else #endif #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - MBEDTLS_ASN1_CHK_ADD( len, pk_write_ec_pubkey( p, start, mbedtls_pk_ec( *key ) ) ); - else + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) + MBEDTLS_ASN1_CHK_ADD( len, pk_write_ec_pubkey( p, start, mbedtls_pk_ec( *key ) ) ); + else #endif - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - return( (int) len ); + return ( (int) len ); } int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, size_t size ) @@ -159,8 +158,8 @@ int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, si MBEDTLS_ASN1_CHK_ADD( len, mbedtls_pk_write_pubkey( &c, buf, key ) ); - if( c - buf < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( c - buf < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); /* * SubjectPublicKeyInfo ::= SEQUENCE { @@ -173,27 +172,25 @@ int mbedtls_pk_write_pubkey_der( mbedtls_pk_context *key, unsigned char *buf, si MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_BIT_STRING ) ); - if( ( ret = mbedtls_oid_get_oid_by_pk_alg( mbedtls_pk_get_type( key ), - &oid, &oid_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_oid_get_oid_by_pk_alg( mbedtls_pk_get_type( key ), + &oid, &oid_len ) ) != 0 ) { + return ( ret ); } #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - { + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) { MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, mbedtls_pk_ec( *key ) ) ); } #endif MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( &c, buf, oid, oid_len, - par_len ) ); + par_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_t size ) @@ -203,8 +200,7 @@ int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_ size_t len = 0; #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) - { + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) { mbedtls_rsa_context *rsa = mbedtls_pk_rsa( *key ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &rsa->QP ) ); @@ -219,67 +215,64 @@ int mbedtls_pk_write_key_der( mbedtls_pk_context *key, unsigned char *buf, size_ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); - } - else + MBEDTLS_ASN1_SEQUENCE ) ); + } else #endif /* MBEDTLS_RSA_C */ #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - { - mbedtls_ecp_keypair *ec = mbedtls_pk_ec( *key ); - size_t pub_len = 0, par_len = 0; - - /* - * RFC 5915, or SEC1 Appendix C.4 - * - * ECPrivateKey ::= SEQUENCE { - * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), - * privateKey OCTET STRING, - * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, - * publicKey [1] BIT STRING OPTIONAL - * } - */ - - /* publicKey */ - MBEDTLS_ASN1_CHK_ADD( pub_len, pk_write_ec_pubkey( &c, buf, ec ) ); - - if( c - buf < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); - *--c = 0; - pub_len += 1; - - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_BIT_STRING ) ); - - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); - MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ); - len += pub_len; - - /* parameters */ - MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, ec ) ); - - MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_len( &c, buf, par_len ) ); - MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_tag( &c, buf, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); - len += par_len; - - /* privateKey: write as MPI then fix tag */ - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &ec->d ) ); - *c = MBEDTLS_ASN1_OCTET_STRING; - - /* version */ - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, 1 ) ); - - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); - MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); - } - else + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) { + mbedtls_ecp_keypair *ec = mbedtls_pk_ec( *key ); + size_t pub_len = 0, par_len = 0; + + /* + * RFC 5915, or SEC1 Appendix C.4 + * + * ECPrivateKey ::= SEQUENCE { + * version INTEGER { ecPrivkeyVer1(1) } (ecPrivkeyVer1), + * privateKey OCTET STRING, + * parameters [0] ECParameters {{ NamedCurve }} OPTIONAL, + * publicKey [1] BIT STRING OPTIONAL + * } + */ + + /* publicKey */ + MBEDTLS_ASN1_CHK_ADD( pub_len, pk_write_ec_pubkey( &c, buf, ec ) ); + + if ( c - buf < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + *--c = 0; + pub_len += 1; + + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_BIT_STRING ) ); + + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_len( &c, buf, pub_len ) ); + MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_asn1_write_tag( &c, buf, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ); + len += pub_len; + + /* parameters */ + MBEDTLS_ASN1_CHK_ADD( par_len, pk_write_ec_param( &c, buf, ec ) ); + + MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_len( &c, buf, par_len ) ); + MBEDTLS_ASN1_CHK_ADD( par_len, mbedtls_asn1_write_tag( &c, buf, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); + len += par_len; + + /* privateKey: write as MPI then fix tag */ + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_mpi( &c, buf, &ec->d ) ); + *c = MBEDTLS_ASN1_OCTET_STRING; + + /* version */ + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, 1 ) ); + + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); + MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | + MBEDTLS_ASN1_SEQUENCE ) ); + } else #endif /* MBEDTLS_ECP_C */ - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - return( (int) len ); + return ( (int) len ); } #if defined(MBEDTLS_PEM_WRITE_C) @@ -381,20 +374,18 @@ int mbedtls_pk_write_pubkey_pem( mbedtls_pk_context *key, unsigned char *buf, si unsigned char output_buf[PUB_DER_MAX_BYTES]; size_t olen = 0; - if( ( ret = mbedtls_pk_write_pubkey_der( key, output_buf, - sizeof(output_buf) ) ) < 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pk_write_pubkey_der( key, output_buf, + sizeof(output_buf) ) ) < 0 ) { + return ( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_PUBLIC_KEY, PEM_END_PUBLIC_KEY, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_PUBLIC_KEY, PEM_END_PUBLIC_KEY, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } int mbedtls_pk_write_key_pem( mbedtls_pk_context *key, unsigned char *buf, size_t size ) @@ -404,35 +395,30 @@ int mbedtls_pk_write_key_pem( mbedtls_pk_context *key, unsigned char *buf, size_ const char *begin, *end; size_t olen = 0; - if( ( ret = mbedtls_pk_write_key_der( key, output_buf, sizeof(output_buf) ) ) < 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_write_key_der( key, output_buf, sizeof(output_buf) ) ) < 0 ) + return ( ret ); #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) - { + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_RSA ) { begin = PEM_BEGIN_PRIVATE_KEY_RSA; end = PEM_END_PRIVATE_KEY_RSA; - } - else + } else #endif #if defined(MBEDTLS_ECP_C) - if( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) - { - begin = PEM_BEGIN_PRIVATE_KEY_EC; - end = PEM_END_PRIVATE_KEY_EC; - } - else + if ( mbedtls_pk_get_type( key ) == MBEDTLS_PK_ECKEY ) { + begin = PEM_BEGIN_PRIVATE_KEY_EC; + end = PEM_END_PRIVATE_KEY_EC; + } else #endif - return( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE ); - if( ( ret = mbedtls_pem_write_buffer( begin, end, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( begin, end, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ diff --git a/external_libs/mbedtls/library/platform.c b/external_libs/mbedtls/library/platform.c index 2591c45..4e40c95 100644 --- a/external_libs/mbedtls/library/platform.c +++ b/external_libs/mbedtls/library/platform.c @@ -35,7 +35,7 @@ static void *platform_calloc_uninit( size_t n, size_t size ) { ((void) n); ((void) size); - return( NULL ); + return ( NULL ); } #define MBEDTLS_PLATFORM_STD_CALLOC platform_calloc_uninit @@ -54,11 +54,11 @@ void * (*mbedtls_calloc)( size_t, size_t ) = MBEDTLS_PLATFORM_STD_CALLOC; void (*mbedtls_free)( void * ) = MBEDTLS_PLATFORM_STD_FREE; int mbedtls_platform_set_calloc_free( void * (*calloc_func)( size_t, size_t ), - void (*free_func)( void * ) ) + void (*free_func)( void * ) ) { mbedtls_calloc = calloc_func; mbedtls_free = free_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_MEMORY */ @@ -70,23 +70,22 @@ int mbedtls_platform_win32_snprintf( char *s, size_t n, const char *fmt, ... ) va_list argp; /* Avoid calling the invalid parameter handler by checking ourselves */ - if( s == NULL || n == 0 || fmt == NULL ) - return( -1 ); + if ( s == NULL || n == 0 || fmt == NULL ) + return ( -1 ); va_start( argp, fmt ); #if defined(_TRUNCATE) ret = _vsnprintf_s( s, n, _TRUNCATE, fmt, argp ); #else ret = _vsnprintf( s, n, fmt, argp ); - if( ret < 0 || (size_t) ret == n ) - { - s[n-1] = '\0'; + if ( ret < 0 || (size_t) ret == n ) { + s[n - 1] = '\0'; ret = -1; } #endif va_end( argp ); - return( ret ); + return ( ret ); } #endif @@ -101,22 +100,22 @@ static int platform_snprintf_uninit( char * s, size_t n, ((void) s); ((void) n); ((void) format); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_SNPRINTF platform_snprintf_uninit #endif /* !MBEDTLS_PLATFORM_STD_SNPRINTF */ int (*mbedtls_snprintf)( char * s, size_t n, - const char * format, - ... ) = MBEDTLS_PLATFORM_STD_SNPRINTF; + const char * format, + ... ) = MBEDTLS_PLATFORM_STD_SNPRINTF; int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, - const char * format, - ... ) ) + const char * format, + ... ) ) { mbedtls_snprintf = snprintf_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_SNPRINTF_ALT */ @@ -128,7 +127,7 @@ int mbedtls_platform_set_snprintf( int (*snprintf_func)( char * s, size_t n, static int platform_printf_uninit( const char *format, ... ) { ((void) format); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_PRINTF platform_printf_uninit @@ -139,7 +138,7 @@ int (*mbedtls_printf)( const char *, ... ) = MBEDTLS_PLATFORM_STD_PRINTF; int mbedtls_platform_set_printf( int (*printf_func)( const char *, ... ) ) { mbedtls_printf = printf_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_PRINTF_ALT */ @@ -152,19 +151,19 @@ static int platform_fprintf_uninit( FILE *stream, const char *format, ... ) { ((void) stream); ((void) format); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_FPRINTF platform_fprintf_uninit #endif /* !MBEDTLS_PLATFORM_STD_FPRINTF */ int (*mbedtls_fprintf)( FILE *, const char *, ... ) = - MBEDTLS_PLATFORM_STD_FPRINTF; + MBEDTLS_PLATFORM_STD_FPRINTF; int mbedtls_platform_set_fprintf( int (*fprintf_func)( FILE *, const char *, ... ) ) { mbedtls_fprintf = fprintf_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_FPRINTF_ALT */ @@ -186,7 +185,7 @@ void (*mbedtls_exit)( int status ) = MBEDTLS_PLATFORM_STD_EXIT; int mbedtls_platform_set_exit( void (*exit_func)( int status ) ) { mbedtls_exit = exit_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_EXIT_ALT */ @@ -200,7 +199,7 @@ int mbedtls_platform_set_exit( void (*exit_func)( int status ) ) static mbedtls_time_t platform_time_uninit( mbedtls_time_t* timer ) { ((void) timer); - return( 0 ); + return ( 0 ); } #define MBEDTLS_PLATFORM_STD_TIME platform_time_uninit @@ -211,7 +210,7 @@ mbedtls_time_t (*mbedtls_time)( mbedtls_time_t* timer ) = MBEDTLS_PLATFORM_STD_T int mbedtls_platform_set_time( mbedtls_time_t (*time_func)( mbedtls_time_t* timer ) ) { mbedtls_time = time_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_TIME_ALT */ @@ -227,17 +226,16 @@ int mbedtls_platform_std_nv_seed_read( unsigned char *buf, size_t buf_len ) FILE *file; size_t n; - if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL ) + if ( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "rb" ) ) == NULL ) return -1; - if( ( n = fread( buf, 1, buf_len, file ) ) != buf_len ) - { + if ( ( n = fread( buf, 1, buf_len, file ) ) != buf_len ) { fclose( file ); return -1; } fclose( file ); - return( n ); + return ( n ); } int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ) @@ -245,17 +243,16 @@ int mbedtls_platform_std_nv_seed_write( unsigned char *buf, size_t buf_len ) FILE *file; size_t n; - if( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL ) + if ( ( file = fopen( MBEDTLS_PLATFORM_STD_NV_SEED_FILE, "w" ) ) == NULL ) return -1; - if( ( n = fwrite( buf, 1, buf_len, file ) ) != buf_len ) - { + if ( ( n = fwrite( buf, 1, buf_len, file ) ) != buf_len ) { fclose( file ); return -1; } fclose( file ); - return( n ); + return ( n ); } #endif /* MBEDTLS_PLATFORM_NO_STD_FUNCTIONS */ @@ -268,7 +265,7 @@ static int platform_nv_seed_read_uninit( unsigned char *buf, size_t buf_len ) { ((void) buf); ((void) buf_len); - return( -1 ); + return ( -1 ); } #define MBEDTLS_PLATFORM_STD_NV_SEED_READ platform_nv_seed_read_uninit @@ -282,24 +279,24 @@ static int platform_nv_seed_write_uninit( unsigned char *buf, size_t buf_len ) { ((void) buf); ((void) buf_len); - return( -1 ); + return ( -1 ); } #define MBEDTLS_PLATFORM_STD_NV_SEED_WRITE platform_nv_seed_write_uninit #endif /* !MBEDTLS_PLATFORM_STD_NV_SEED_WRITE */ int (*mbedtls_nv_seed_read)( unsigned char *buf, size_t buf_len ) = - MBEDTLS_PLATFORM_STD_NV_SEED_READ; + MBEDTLS_PLATFORM_STD_NV_SEED_READ; int (*mbedtls_nv_seed_write)( unsigned char *buf, size_t buf_len ) = - MBEDTLS_PLATFORM_STD_NV_SEED_WRITE; + MBEDTLS_PLATFORM_STD_NV_SEED_WRITE; int mbedtls_platform_set_nv_seed( - int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), - int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) ) + int (*nv_seed_read_func)( unsigned char *buf, size_t buf_len ), + int (*nv_seed_write_func)( unsigned char *buf, size_t buf_len ) ) { mbedtls_nv_seed_read = nv_seed_read_func; mbedtls_nv_seed_write = nv_seed_write_func; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PLATFORM_NV_SEED_ALT */ #endif /* MBEDTLS_ENTROPY_NV_SEED */ diff --git a/external_libs/mbedtls/library/ripemd160.c b/external_libs/mbedtls/library/ripemd160.c index cdb0a63..72c3345 100644 --- a/external_libs/mbedtls/library/ripemd160.c +++ b/external_libs/mbedtls/library/ripemd160.c @@ -70,8 +70,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ) @@ -81,14 +83,14 @@ void mbedtls_ripemd160_init( mbedtls_ripemd160_context *ctx ) void mbedtls_ripemd160_free( mbedtls_ripemd160_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_ripemd160_context ) ); } void mbedtls_ripemd160_clone( mbedtls_ripemd160_context *dst, - const mbedtls_ripemd160_context *src ) + const mbedtls_ripemd160_context *src ) { *dst = *src; } @@ -294,12 +296,12 @@ void mbedtls_ripemd160_process( mbedtls_ripemd160_context *ctx, const unsigned c * RIPEMD-160 process buffer */ void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, - const unsigned char *input, size_t ilen ) + const unsigned char *input, size_t ilen ) { size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -308,11 +310,10 @@ void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_ripemd160_process( ctx, ctx->buffer ); input += fill; @@ -320,22 +321,19 @@ void mbedtls_ripemd160_update( mbedtls_ripemd160_context *ctx, left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_ripemd160_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) - { + if ( ilen > 0 ) { memcpy( (void *) (ctx->buffer + left), input, ilen ); } } -static const unsigned char ripemd160_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char ripemd160_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -351,7 +349,7 @@ void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, unsigned char out unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_LE( low, msglen, 0 ); @@ -374,7 +372,7 @@ void mbedtls_ripemd160_finish( mbedtls_ripemd160_context *ctx, unsigned char out * output = RIPEMD-160( input buffer ) */ void mbedtls_ripemd160( const unsigned char *input, size_t ilen, - unsigned char output[20] ) + unsigned char output[20] ) { mbedtls_ripemd160_context ctx; @@ -392,8 +390,7 @@ void mbedtls_ripemd160( const unsigned char *input, size_t ilen, */ #define TESTS 8 #define KEYS 2 -static const char *ripemd160_test_input[TESTS] = -{ +static const char *ripemd160_test_input[TESTS] = { "", "a", "abc", @@ -402,27 +399,42 @@ static const char *ripemd160_test_input[TESTS] = "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", "1234567890123456789012345678901234567890" - "1234567890123456789012345678901234567890", + "1234567890123456789012345678901234567890", }; -static const unsigned char ripemd160_test_md[TESTS][20] = -{ - { 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, - 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 }, - { 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, - 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe }, - { 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, - 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc }, - { 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, - 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 }, - { 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, - 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc }, - { 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, - 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b }, - { 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed, - 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 }, - { 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb, - 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb }, +static const unsigned char ripemd160_test_md[TESTS][20] = { + { + 0x9c, 0x11, 0x85, 0xa5, 0xc5, 0xe9, 0xfc, 0x54, 0x61, 0x28, + 0x08, 0x97, 0x7e, 0xe8, 0xf5, 0x48, 0xb2, 0x25, 0x8d, 0x31 + }, + { + 0x0b, 0xdc, 0x9d, 0x2d, 0x25, 0x6b, 0x3e, 0xe9, 0xda, 0xae, + 0x34, 0x7b, 0xe6, 0xf4, 0xdc, 0x83, 0x5a, 0x46, 0x7f, 0xfe + }, + { + 0x8e, 0xb2, 0x08, 0xf7, 0xe0, 0x5d, 0x98, 0x7a, 0x9b, 0x04, + 0x4a, 0x8e, 0x98, 0xc6, 0xb0, 0x87, 0xf1, 0x5a, 0x0b, 0xfc + }, + { + 0x5d, 0x06, 0x89, 0xef, 0x49, 0xd2, 0xfa, 0xe5, 0x72, 0xb8, + 0x81, 0xb1, 0x23, 0xa8, 0x5f, 0xfa, 0x21, 0x59, 0x5f, 0x36 + }, + { + 0xf7, 0x1c, 0x27, 0x10, 0x9c, 0x69, 0x2c, 0x1b, 0x56, 0xbb, + 0xdc, 0xeb, 0x5b, 0x9d, 0x28, 0x65, 0xb3, 0x70, 0x8d, 0xbc + }, + { + 0x12, 0xa0, 0x53, 0x38, 0x4a, 0x9c, 0x0c, 0x88, 0xe4, 0x05, + 0xa0, 0x6c, 0x27, 0xdc, 0xf4, 0x9a, 0xda, 0x62, 0xeb, 0x2b + }, + { + 0xb0, 0xe2, 0x0b, 0x6e, 0x31, 0x16, 0x64, 0x02, 0x86, 0xed, + 0x3a, 0x87, 0xa5, 0x71, 0x30, 0x79, 0xb2, 0x1f, 0x51, 0x89 + }, + { + 0x9b, 0x75, 0x2e, 0x45, 0x57, 0x3d, 0x4b, 0x39, 0xf4, 0xdb, + 0xd3, 0x32, 0x3c, 0xab, 0x82, 0xbf, 0x63, 0x32, 0x6b, 0xfb + }, }; /* @@ -435,31 +447,29 @@ int mbedtls_ripemd160_self_test( int verbose ) memset( output, 0, sizeof output ); - for( i = 0; i < TESTS; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < TESTS; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " RIPEMD-160 test #%d: ", i + 1 ); mbedtls_ripemd160( (const unsigned char *) ripemd160_test_input[i], - strlen( ripemd160_test_input[i] ), - output ); + strlen( ripemd160_test_input[i] ), + output ); - if( memcmp( output, ripemd160_test_md[i], 20 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( output, ripemd160_test_md[i], 20 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/rsa.c b/external_libs/mbedtls/library/rsa.c index 40ef2a9..64dc380 100644 --- a/external_libs/mbedtls/library/rsa.c +++ b/external_libs/mbedtls/library/rsa.c @@ -65,8 +65,8 @@ * Initialize an RSA context */ void mbedtls_rsa_init( mbedtls_rsa_context *ctx, - int padding, - int hash_id ) + int padding, + int hash_id ) { memset( ctx, 0, sizeof( mbedtls_rsa_context ) ); @@ -92,21 +92,23 @@ void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding, int hash_id * Generate an RSA keypair */ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - unsigned int nbits, int exponent ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + unsigned int nbits, int exponent ) { int ret; mbedtls_mpi P1, Q1, H, G; - if( f_rng == NULL || nbits < 128 || exponent < 3 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL || nbits < 128 || exponent < 3 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( nbits % 2 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( nbits % 2 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); - mbedtls_mpi_init( &H ); mbedtls_mpi_init( &G ); + mbedtls_mpi_init( &P1 ); + mbedtls_mpi_init( &Q1 ); + mbedtls_mpi_init( &H ); + mbedtls_mpi_init( &G ); /* * find primes P and Q with Q < P so that: @@ -114,30 +116,28 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, */ MBEDTLS_MPI_CHK( mbedtls_mpi_lset( &ctx->E, exponent ) ); - do - { + do { MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->P, nbits >> 1, 0, - f_rng, p_rng ) ); + f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->Q, nbits >> 1, 0, - f_rng, p_rng ) ); + f_rng, p_rng ) ); - if( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) + if ( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) continue; MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->N, &ctx->P, &ctx->Q ) ); - if( mbedtls_mpi_bitlen( &ctx->N ) != nbits ) + if ( mbedtls_mpi_bitlen( &ctx->N ) != nbits ) continue; - if( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) - mbedtls_mpi_swap( &ctx->P, &ctx->Q ); + if ( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) + mbedtls_mpi_swap( &ctx->P, &ctx->Q ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &P1, &ctx->P, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &Q1, &ctx->Q, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &H, &P1, &Q1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &G, &ctx->E, &H ) ); - } - while( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ); + } while ( mbedtls_mpi_cmp_int( &G, 1 ) != 0 ); /* * D = E^-1 mod ((P-1)*(Q-1)) @@ -145,7 +145,7 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, * DQ = D mod (Q - 1) * QP = Q^-1 mod P */ - MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->D , &ctx->E, &H ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->D, &ctx->E, &H ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->DP, &ctx->D, &P1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->DQ, &ctx->D, &Q1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->QP, &ctx->Q, &ctx->P ) ); @@ -154,15 +154,17 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, cleanup: - mbedtls_mpi_free( &P1 ); mbedtls_mpi_free( &Q1 ); mbedtls_mpi_free( &H ); mbedtls_mpi_free( &G ); + mbedtls_mpi_free( &P1 ); + mbedtls_mpi_free( &Q1 ); + mbedtls_mpi_free( &H ); + mbedtls_mpi_free( &G ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_rsa_free( ctx ); - return( MBEDTLS_ERR_RSA_KEY_GEN_FAILED + ret ); + return ( MBEDTLS_ERR_RSA_KEY_GEN_FAILED + ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_GENPRIME */ @@ -172,22 +174,22 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, */ int mbedtls_rsa_check_pubkey( const mbedtls_rsa_context *ctx ) { - if( !ctx->N.p || !ctx->E.p ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( !ctx->N.p || !ctx->E.p ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - if( ( ctx->N.p[0] & 1 ) == 0 || - ( ctx->E.p[0] & 1 ) == 0 ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( ( ctx->N.p[0] & 1 ) == 0 || + ( ctx->E.p[0] & 1 ) == 0 ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - if( mbedtls_mpi_bitlen( &ctx->N ) < 128 || - mbedtls_mpi_bitlen( &ctx->N ) > MBEDTLS_MPI_MAX_BITS ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_mpi_bitlen( &ctx->N ) < 128 || + mbedtls_mpi_bitlen( &ctx->N ) > MBEDTLS_MPI_MAX_BITS ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - if( mbedtls_mpi_bitlen( &ctx->E ) < 2 || - mbedtls_mpi_cmp_mpi( &ctx->E, &ctx->N ) >= 0 ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_mpi_bitlen( &ctx->E ) < 2 || + mbedtls_mpi_cmp_mpi( &ctx->E, &ctx->N ) >= 0 ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - return( 0 ); + return ( 0 ); } /* @@ -198,15 +200,24 @@ int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx ) int ret; mbedtls_mpi PQ, DE, P1, Q1, H, I, G, G2, L1, L2, DP, DQ, QP; - if( ( ret = mbedtls_rsa_check_pubkey( ctx ) ) != 0 ) - return( ret ); - - if( !ctx->P.p || !ctx->Q.p || !ctx->D.p ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); - - mbedtls_mpi_init( &PQ ); mbedtls_mpi_init( &DE ); mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); - mbedtls_mpi_init( &H ); mbedtls_mpi_init( &I ); mbedtls_mpi_init( &G ); mbedtls_mpi_init( &G2 ); - mbedtls_mpi_init( &L1 ); mbedtls_mpi_init( &L2 ); mbedtls_mpi_init( &DP ); mbedtls_mpi_init( &DQ ); + if ( ( ret = mbedtls_rsa_check_pubkey( ctx ) ) != 0 ) + return ( ret ); + + if ( !ctx->P.p || !ctx->Q.p || !ctx->D.p ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + + mbedtls_mpi_init( &PQ ); + mbedtls_mpi_init( &DE ); + mbedtls_mpi_init( &P1 ); + mbedtls_mpi_init( &Q1 ); + mbedtls_mpi_init( &H ); + mbedtls_mpi_init( &I ); + mbedtls_mpi_init( &G ); + mbedtls_mpi_init( &G2 ); + mbedtls_mpi_init( &L1 ); + mbedtls_mpi_init( &L2 ); + mbedtls_mpi_init( &DP ); + mbedtls_mpi_init( &DQ ); mbedtls_mpi_init( &QP ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &PQ, &ctx->P, &ctx->Q ) ); @@ -226,30 +237,38 @@ int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx ) /* * Check for a valid PKCS1v2 private key */ - if( mbedtls_mpi_cmp_mpi( &PQ, &ctx->N ) != 0 || - mbedtls_mpi_cmp_mpi( &DP, &ctx->DP ) != 0 || - mbedtls_mpi_cmp_mpi( &DQ, &ctx->DQ ) != 0 || - mbedtls_mpi_cmp_mpi( &QP, &ctx->QP ) != 0 || - mbedtls_mpi_cmp_int( &L2, 0 ) != 0 || - mbedtls_mpi_cmp_int( &I, 1 ) != 0 || - mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &PQ, &ctx->N ) != 0 || + mbedtls_mpi_cmp_mpi( &DP, &ctx->DP ) != 0 || + mbedtls_mpi_cmp_mpi( &DQ, &ctx->DQ ) != 0 || + mbedtls_mpi_cmp_mpi( &QP, &ctx->QP ) != 0 || + mbedtls_mpi_cmp_int( &L2, 0 ) != 0 || + mbedtls_mpi_cmp_int( &I, 1 ) != 0 || + mbedtls_mpi_cmp_int( &G, 1 ) != 0 ) { ret = MBEDTLS_ERR_RSA_KEY_CHECK_FAILED; } cleanup: - mbedtls_mpi_free( &PQ ); mbedtls_mpi_free( &DE ); mbedtls_mpi_free( &P1 ); mbedtls_mpi_free( &Q1 ); - mbedtls_mpi_free( &H ); mbedtls_mpi_free( &I ); mbedtls_mpi_free( &G ); mbedtls_mpi_free( &G2 ); - mbedtls_mpi_free( &L1 ); mbedtls_mpi_free( &L2 ); mbedtls_mpi_free( &DP ); mbedtls_mpi_free( &DQ ); + mbedtls_mpi_free( &PQ ); + mbedtls_mpi_free( &DE ); + mbedtls_mpi_free( &P1 ); + mbedtls_mpi_free( &Q1 ); + mbedtls_mpi_free( &H ); + mbedtls_mpi_free( &I ); + mbedtls_mpi_free( &G ); + mbedtls_mpi_free( &G2 ); + mbedtls_mpi_free( &L1 ); + mbedtls_mpi_free( &L2 ); + mbedtls_mpi_free( &DP ); + mbedtls_mpi_free( &DQ ); mbedtls_mpi_free( &QP ); - if( ret == MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ) - return( ret ); + if ( ret == MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ) + return ( ret ); - if( ret != 0 ) - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -257,27 +276,25 @@ int mbedtls_rsa_check_privkey( const mbedtls_rsa_context *ctx ) */ int mbedtls_rsa_check_pub_priv( const mbedtls_rsa_context *pub, const mbedtls_rsa_context *prv ) { - if( mbedtls_rsa_check_pubkey( pub ) != 0 || - mbedtls_rsa_check_privkey( prv ) != 0 ) - { - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_rsa_check_pubkey( pub ) != 0 || + mbedtls_rsa_check_privkey( prv ) != 0 ) { + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - if( mbedtls_mpi_cmp_mpi( &pub->N, &prv->N ) != 0 || - mbedtls_mpi_cmp_mpi( &pub->E, &prv->E ) != 0 ) - { - return( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); + if ( mbedtls_mpi_cmp_mpi( &pub->N, &prv->N ) != 0 || + mbedtls_mpi_cmp_mpi( &pub->E, &prv->E ) != 0 ) { + return ( MBEDTLS_ERR_RSA_KEY_CHECK_FAILED ); } - return( 0 ); + return ( 0 ); } /* * Do an RSA public key operation */ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, - const unsigned char *input, - unsigned char *output ) + const unsigned char *input, + unsigned char *output ) { int ret; size_t olen; @@ -286,14 +303,13 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, mbedtls_mpi_init( &T ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &T, input, ctx->len ) ); - if( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) { ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; goto cleanup; } @@ -304,16 +320,16 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif mbedtls_mpi_free( &T ); - if( ret != 0 ) - return( MBEDTLS_ERR_RSA_PUBLIC_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_RSA_PUBLIC_FAILED + ret ); - return( 0 ); + return ( 0 ); } /* @@ -323,12 +339,11 @@ int mbedtls_rsa_public( mbedtls_rsa_context *ctx, * Berlin Heidelberg, 1996. p. 104-113. */ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng ) { int ret, count = 0; - if( ctx->Vf.p != NULL ) - { + if ( ctx->Vf.p != NULL ) { /* We already have blinding values, just update them by squaring */ MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &ctx->Vi, &ctx->Vi, &ctx->Vi ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mod_mpi( &ctx->Vi, &ctx->Vi, &ctx->N ) ); @@ -340,12 +355,12 @@ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, /* Unblinding value: Vf = random number, invertible mod N */ do { - if( count++ > 10 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED ); + if ( count++ > 10 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED ); MBEDTLS_MPI_CHK( mbedtls_mpi_fill_random( &ctx->Vf, ctx->len - 1, f_rng, p_rng ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_gcd( &ctx->Vi, &ctx->Vf, &ctx->N ) ); - } while( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ); + } while ( mbedtls_mpi_cmp_int( &ctx->Vi, 1 ) != 0 ); /* Blinding value: Vi = Vf^(-e) mod N */ MBEDTLS_MPI_CHK( mbedtls_mpi_inv_mod( &ctx->Vi, &ctx->Vf, &ctx->N ) ); @@ -353,42 +368,42 @@ static int rsa_prepare_blinding( mbedtls_rsa_context *ctx, cleanup: - return( ret ); + return ( ret ); } /* * Do an RSA private key operation */ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + const unsigned char *input, + unsigned char *output ) { int ret; size_t olen; mbedtls_mpi T, T1, T2; /* Make sure we have private key info, prevent possible misuse */ - if( ctx->P.p == NULL || ctx->Q.p == NULL || ctx->D.p == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ctx->P.p == NULL || ctx->Q.p == NULL || ctx->D.p == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - mbedtls_mpi_init( &T ); mbedtls_mpi_init( &T1 ); mbedtls_mpi_init( &T2 ); + mbedtls_mpi_init( &T ); + mbedtls_mpi_init( &T1 ); + mbedtls_mpi_init( &T2 ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif MBEDTLS_MPI_CHK( mbedtls_mpi_read_binary( &T, input, ctx->len ) ); - if( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) - { + if ( mbedtls_mpi_cmp_mpi( &T, &ctx->N ) >= 0 ) { ret = MBEDTLS_ERR_MPI_BAD_INPUT_DATA; goto cleanup; } - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { /* * Blinding * T = T * Vi mod N @@ -424,8 +439,7 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, MBEDTLS_MPI_CHK( mbedtls_mpi_add_mpi( &T, &T2, &T1 ) ); #endif /* MBEDTLS_RSA_NO_CRT */ - if( f_rng != NULL ) - { + if ( f_rng != NULL ) { /* * Unblind * T = T * Vf mod N @@ -439,16 +453,18 @@ int mbedtls_rsa_private( mbedtls_rsa_context *ctx, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - mbedtls_mpi_free( &T ); mbedtls_mpi_free( &T1 ); mbedtls_mpi_free( &T2 ); + mbedtls_mpi_free( &T ); + mbedtls_mpi_free( &T1 ); + mbedtls_mpi_free( &T2 ); - if( ret != 0 ) - return( MBEDTLS_ERR_RSA_PRIVATE_FAILED + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_RSA_PRIVATE_FAILED + ret ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_PKCS1_V21) @@ -478,10 +494,9 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, /* Generate and apply dbMask */ p = dst; - while( dlen > 0 ) - { + while ( dlen > 0 ) { use_len = hlen; - if( dlen < hlen ) + if ( dlen < hlen ) use_len = dlen; mbedtls_md_starts( md_ctx ); @@ -489,7 +504,7 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, mbedtls_md_update( md_ctx, counter, 4 ); mbedtls_md_finish( md_ctx, mask ); - for( i = 0; i < use_len; ++i ) + for ( i = 0; i < use_len; ++i ) *p++ ^= mask[i]; counter[3]++; @@ -504,13 +519,13 @@ static void mgf_mask( unsigned char *dst, size_t dlen, unsigned char *src, * Implementation of the PKCS#1 v2.1 RSAES-OAEP-ENCRYPT function */ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t ilen, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + const unsigned char *label, size_t label_len, + size_t ilen, + const unsigned char *input, + unsigned char *output ) { size_t olen; int ret; @@ -519,30 +534,30 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, const mbedtls_md_info_t *md_info; mbedtls_md_context_t md_ctx; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( f_rng == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); md_info = mbedtls_md_info_from_type( (mbedtls_md_type_t) ctx->hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; hlen = mbedtls_md_get_size( md_info ); /* first comparison checks for overflow */ - if( ilen + 2 * hlen + 2 < ilen || olen < ilen + 2 * hlen + 2 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen + 2 * hlen + 2 < ilen || olen < ilen + 2 * hlen + 2 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); memset( output, 0, olen ); *p++ = 0; /* Generate a random octet string seed */ - if( ( ret = f_rng( p_rng, p, hlen ) ) != 0 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); + if ( ( ret = f_rng( p_rng, p, hlen ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); p += hlen; @@ -554,25 +569,24 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, memcpy( p, input, ilen ); mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } /* maskedDB: Apply dbMask to DB */ mgf_mask( output + hlen + 1, olen - hlen - 1, output + 1, hlen, - &md_ctx ); + &md_ctx ); /* maskedSeed: Apply seedMask to seed */ mgf_mask( output + 1, hlen, output + hlen + 1, olen - hlen - 1, - &md_ctx ); + &md_ctx ); mbedtls_md_free( &md_ctx ); - return( ( mode == MBEDTLS_RSA_PUBLIC ) - ? mbedtls_rsa_public( ctx, output, output ) - : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); + return ( ( mode == MBEDTLS_RSA_PUBLIC ) + ? mbedtls_rsa_public( ctx, output, output ) + : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -581,65 +595,61 @@ int mbedtls_rsa_rsaes_oaep_encrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-ENCRYPT function */ int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t ilen, + const unsigned char *input, + unsigned char *output ) { size_t nb_pad, olen; int ret; unsigned char *p = output; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); // We don't check p_rng because it won't be dereferenced here - if( f_rng == NULL || input == NULL || output == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL || input == NULL || output == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; /* first comparison checks for overflow */ - if( ilen + 11 < ilen || olen < ilen + 11 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen + 11 < ilen || olen < ilen + 11 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); nb_pad = olen - 3 - ilen; *p++ = 0; - if( mode == MBEDTLS_RSA_PUBLIC ) - { + if ( mode == MBEDTLS_RSA_PUBLIC ) { *p++ = MBEDTLS_RSA_CRYPT; - while( nb_pad-- > 0 ) - { + while ( nb_pad-- > 0 ) { int rng_dl = 100; do { ret = f_rng( p_rng, p, 1 ); - } while( *p == 0 && --rng_dl && ret == 0 ); + } while ( *p == 0 && --rng_dl && ret == 0 ); /* Check if RNG failed to generate data */ - if( rng_dl == 0 || ret != 0 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); + if ( rng_dl == 0 || ret != 0 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); p++; } - } - else - { + } else { *p++ = MBEDTLS_RSA_SIGN; - while( nb_pad-- > 0 ) + while ( nb_pad-- > 0 ) *p++ = 0xFF; } *p++ = 0; memcpy( p, input, ilen ); - return( ( mode == MBEDTLS_RSA_PUBLIC ) - ? mbedtls_rsa_public( ctx, output, output ) - : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); + return ( ( mode == MBEDTLS_RSA_PUBLIC ) + ? mbedtls_rsa_public( ctx, output, output ) + : mbedtls_rsa_private( ctx, f_rng, p_rng, output, output ) ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -647,28 +657,27 @@ int mbedtls_rsa_rsaes_pkcs1_v15_encrypt( mbedtls_rsa_context *ctx, * Add the message padding, then do an RSA operation */ int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t ilen, - const unsigned char *input, - unsigned char *output ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t ilen, + const unsigned char *input, + unsigned char *output ) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsaes_pkcs1_v15_encrypt( ctx, f_rng, p_rng, mode, ilen, - input, output ); + input, output ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsaes_oaep_encrypt( ctx, f_rng, p_rng, mode, NULL, 0, - ilen, input, output ); + ilen, input, output ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -677,14 +686,14 @@ int mbedtls_rsa_pkcs1_encrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-OAEP-DECRYPT function */ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - const unsigned char *label, size_t label_len, - size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + const unsigned char *label, size_t label_len, + size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len ) { int ret; size_t ilen, i, pad_len; @@ -698,23 +707,23 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, /* * Parameters sanity checks */ - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ilen = ctx->len; - if( ilen < 16 || ilen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen < 16 || ilen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); md_info = mbedtls_md_info_from_type( (mbedtls_md_type_t) ctx->hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hlen = mbedtls_md_get_size( md_info ); // checking for integer underflow - if( 2 * hlen + 2 > ilen ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( 2 * hlen + 2 > ilen ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); /* * RSA operation @@ -723,17 +732,16 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, ? mbedtls_rsa_public( ctx, input, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, input, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); /* * Unmask data and generate lHash */ mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } @@ -742,11 +750,11 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, /* seed: Apply seedMask to maskedSeed */ mgf_mask( buf + 1, hlen, buf + hlen + 1, ilen - hlen - 1, - &md_ctx ); + &md_ctx ); /* DB: Apply dbMask to maskedDB */ mgf_mask( buf + hlen + 1, ilen - hlen - 1, buf + 1, hlen, - &md_ctx ); + &md_ctx ); mbedtls_md_free( &md_ctx ); @@ -761,17 +769,16 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, p += hlen; /* Skip seed */ /* Check lHash */ - for( i = 0; i < hlen; i++ ) + for ( i = 0; i < hlen; i++ ) bad |= lhash[i] ^ *p++; /* Get zero-padding len, but always read till end of buffer * (minus one, for the 01 byte) */ pad_len = 0; pad_done = 0; - for( i = 0; i < ilen - 2 * hlen - 2; i++ ) - { + for ( i = 0; i < ilen - 2 * hlen - 2; i++ ) { pad_done |= p[i]; - pad_len += ((pad_done | (unsigned char)-pad_done) >> 7) ^ 1; + pad_len += ((pad_done | (unsigned char) - pad_done) >> 7) ^ 1; } p += pad_len; @@ -783,16 +790,16 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, * recommendations in PKCS#1 v2.2: an opponent cannot distinguish between * the different error conditions. */ - if( bad != 0 ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( bad != 0 ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - if( ilen - ( p - buf ) > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( ilen - ( p - buf ) > output_max_len ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); *olen = ilen - (p - buf); memcpy( output, p, *olen ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -801,32 +808,32 @@ int mbedtls_rsa_rsaes_oaep_decrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSAES-PKCS1-V1_5-DECRYPT function */ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len) { int ret; size_t ilen, pad_count = 0, i; unsigned char *p, bad, pad_done = 0; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ilen = ctx->len; - if( ilen < 16 || ilen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ilen < 16 || ilen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ret = ( mode == MBEDTLS_RSA_PUBLIC ) ? mbedtls_rsa_public( ctx, input, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, input, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); p = buf; bad = 0; @@ -837,29 +844,24 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, bad |= *p++; /* First byte must be 0 */ /* This test does not depend on secret data */ - if( mode == MBEDTLS_RSA_PRIVATE ) - { + if ( mode == MBEDTLS_RSA_PRIVATE ) { bad |= *p++ ^ MBEDTLS_RSA_CRYPT; /* Get padding len, but always read till end of buffer * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { - pad_done |= ((p[i] | (unsigned char)-p[i]) >> 7) ^ 1; - pad_count += ((pad_done | (unsigned char)-pad_done) >> 7) ^ 1; + for ( i = 0; i < ilen - 3; i++ ) { + pad_done |= ((p[i] | (unsigned char) - p[i]) >> 7) ^ 1; + pad_count += ((pad_done | (unsigned char) - pad_done) >> 7) ^ 1; } p += pad_count; bad |= *p++; /* Must be zero */ - } - else - { + } else { bad |= *p++ ^ MBEDTLS_RSA_SIGN; /* Get padding len, but always read till end of buffer * (minus one, for the 00 byte) */ - for( i = 0; i < ilen - 3; i++ ) - { + for ( i = 0; i < ilen - 3; i++ ) { pad_done |= ( p[i] != 0xFF ); pad_count += ( pad_done == 0 ); } @@ -870,16 +872,16 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, bad |= ( pad_count < 8 ); - if( bad ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( bad ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - if( ilen - ( p - buf ) > output_max_len ) - return( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); + if ( ilen - ( p - buf ) > output_max_len ) + return ( MBEDTLS_ERR_RSA_OUTPUT_TOO_LARGE ); *olen = ilen - (p - buf); memcpy( output, p, *olen ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -887,30 +889,29 @@ int mbedtls_rsa_rsaes_pkcs1_v15_decrypt( mbedtls_rsa_context *ctx, * Do an RSA operation, then remove the message padding */ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, size_t *olen, - const unsigned char *input, - unsigned char *output, - size_t output_max_len) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, size_t *olen, + const unsigned char *input, + unsigned char *output, + size_t output_max_len) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsaes_pkcs1_v15_decrypt( ctx, f_rng, p_rng, mode, olen, - input, output, output_max_len ); + input, output, output_max_len ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsaes_oaep_decrypt( ctx, f_rng, p_rng, mode, NULL, 0, - olen, input, output, - output_max_len ); + olen, input, output, + output_max_len ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -919,13 +920,13 @@ int mbedtls_rsa_pkcs1_decrypt( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSASSA-PSS-SIGN function */ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { size_t olen; unsigned char *p = sig; @@ -936,39 +937,38 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, const mbedtls_md_info_t *md_info; mbedtls_md_context_t md_ctx; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( f_rng == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( f_rng == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { /* Gather length of hash to sign */ md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); } md_info = mbedtls_md_info_from_type( (mbedtls_md_type_t) ctx->hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hlen = mbedtls_md_get_size( md_info ); slen = hlen; - if( olen < hlen + slen + 2 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( olen < hlen + slen + 2 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); memset( sig, 0, olen ); /* Generate salt of length slen */ - if( ( ret = f_rng( p_rng, salt, slen ) ) != 0 ) - return( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); + if ( ( ret = f_rng( p_rng, salt, slen ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_RNG_FAILED + ret ); /* Note: EMSA-PSS encoding is over the length of N - 1 bits */ msb = mbedtls_mpi_bitlen( &ctx->N ) - 1; @@ -978,10 +978,9 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, p += slen; mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } /* Generate H = Hash( M' ) */ @@ -992,7 +991,7 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, mbedtls_md_finish( &md_ctx, p ); /* Compensate for boundary condition when applying mask */ - if( msb % 8 == 0 ) + if ( msb % 8 == 0 ) offset = 1; /* maskedDB: Apply dbMask to DB */ @@ -1006,9 +1005,9 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, p += hlen; *p++ = 0xBC; - return( ( mode == MBEDTLS_RSA_PUBLIC ) - ? mbedtls_rsa_public( ctx, sig, sig ) - : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig ) ); + return ( ( mode == MBEDTLS_RSA_PUBLIC ) + ? mbedtls_rsa_public( ctx, sig, sig ) + : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig ) ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -1020,13 +1019,13 @@ int mbedtls_rsa_rsassa_pss_sign( mbedtls_rsa_context *ctx, * Do an RSA operation to sign the message digest */ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { size_t nb_pad, olen, oid_size = 0; unsigned char *p = sig; @@ -1037,20 +1036,19 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, volatile unsigned char diff_no_optimize; int ret; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); olen = ctx->len; nb_pad = olen - 3; - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - if( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mbedtls_oid_get_oid_by_md( md_alg, &oid, &oid_size ) != 0 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); nb_pad -= 10 + oid_size; @@ -1059,8 +1057,8 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, nb_pad -= hashlen; - if( ( nb_pad < 8 ) || ( nb_pad > olen ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( ( nb_pad < 8 ) || ( nb_pad > olen ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); *p++ = 0; *p++ = MBEDTLS_RSA_SIGN; @@ -1068,12 +1066,9 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, p += nb_pad; *p++ = 0; - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { memcpy( p, hash, hashlen ); - } - else - { + } else { /* * DigestInfo ::= SEQUENCE { * digestAlgorithm DigestAlgorithmIdentifier, @@ -1098,34 +1093,32 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, memcpy( p, hash, hashlen ); } - if( mode == MBEDTLS_RSA_PUBLIC ) - return( mbedtls_rsa_public( ctx, sig, sig ) ); + if ( mode == MBEDTLS_RSA_PUBLIC ) + return ( mbedtls_rsa_public( ctx, sig, sig ) ); /* * In order to prevent Lenstra's attack, make the signature in a * temporary buffer and check it before returning it. */ sig_try = mbedtls_calloc( 1, ctx->len ); - if( sig_try == NULL ) - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + if ( sig_try == NULL ) + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); verif = mbedtls_calloc( 1, ctx->len ); - if( verif == NULL ) - { + if ( verif == NULL ) { mbedtls_free( sig_try ); - return( MBEDTLS_ERR_MPI_ALLOC_FAILED ); + return ( MBEDTLS_ERR_MPI_ALLOC_FAILED ); } MBEDTLS_MPI_CHK( mbedtls_rsa_private( ctx, f_rng, p_rng, sig, sig_try ) ); MBEDTLS_MPI_CHK( mbedtls_rsa_public( ctx, sig_try, verif ) ); /* Compare in constant time just in case */ - for( diff = 0, i = 0; i < ctx->len; i++ ) + for ( diff = 0, i = 0; i < ctx->len; i++ ) diff |= verif[i] ^ sig[i]; diff_no_optimize = diff; - if( diff_no_optimize != 0 ) - { + if ( diff_no_optimize != 0 ) { ret = MBEDTLS_ERR_RSA_PRIVATE_FAILED; goto cleanup; } @@ -1136,7 +1129,7 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, mbedtls_free( sig_try ); mbedtls_free( verif ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -1144,30 +1137,29 @@ int mbedtls_rsa_rsassa_pkcs1_v15_sign( mbedtls_rsa_context *ctx, * Do an RSA operation to sign the message digest */ int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + unsigned char *sig ) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsassa_pkcs1_v15_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsassa_pss_sign( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -1176,15 +1168,15 @@ int mbedtls_rsa_pkcs1_sign( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSASSA-PSS-VERIFY function */ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - mbedtls_md_type_t mgf1_hash_id, - int expected_salt_len, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + mbedtls_md_type_t mgf1_hash_id, + int expected_salt_len, + const unsigned char *sig ) { int ret; size_t siglen; @@ -1197,39 +1189,38 @@ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, mbedtls_md_context_t md_ctx; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V21 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); siglen = ctx->len; - if( siglen < 16 || siglen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( siglen < 16 || siglen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ret = ( mode == MBEDTLS_RSA_PUBLIC ) ? mbedtls_rsa_public( ctx, sig, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); p = buf; - if( buf[siglen - 1] != 0xBC ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( buf[siglen - 1] != 0xBC ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - if( md_alg != MBEDTLS_MD_NONE ) - { + if ( md_alg != MBEDTLS_MD_NONE ) { /* Gather length of hash to sign */ md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); } md_info = mbedtls_md_info_from_type( mgf1_hash_id ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hlen = mbedtls_md_get_size( md_info ); slen = siglen - hlen - 1; /* Currently length of salt + padding */ @@ -1242,43 +1233,39 @@ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, msb = mbedtls_mpi_bitlen( &ctx->N ) - 1; /* Compensate for boundary condition when applying mask */ - if( msb % 8 == 0 ) - { + if ( msb % 8 == 0 ) { p++; siglen -= 1; } - if( buf[0] >> ( 8 - siglen * 8 + msb ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( buf[0] >> ( 8 - siglen * 8 + msb ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); mbedtls_md_init( &md_ctx ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 0 ) ) != 0 ) { mbedtls_md_free( &md_ctx ); - return( ret ); + return ( ret ); } mgf_mask( p, siglen - hlen - 1, p + siglen - hlen - 1, hlen, &md_ctx ); buf[0] &= 0xFF >> ( siglen * 8 - msb ); - while( p < buf + siglen && *p == 0 ) + while ( p < buf + siglen && *p == 0 ) p++; - if( p == buf + siglen || - *p++ != 0x01 ) - { + if ( p == buf + siglen || + *p++ != 0x01 ) { mbedtls_md_free( &md_ctx ); - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } /* Actual salt len */ slen -= p - buf; - if( expected_salt_len != MBEDTLS_RSA_SALT_LEN_ANY && - slen != (size_t) expected_salt_len ) - { + if ( expected_salt_len != MBEDTLS_RSA_SALT_LEN_ANY && + slen != (size_t) expected_salt_len ) { mbedtls_md_free( &md_ctx ); - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } /* @@ -1292,32 +1279,32 @@ int mbedtls_rsa_rsassa_pss_verify_ext( mbedtls_rsa_context *ctx, mbedtls_md_free( &md_ctx ); - if( memcmp( p + slen, result, hlen ) == 0 ) - return( 0 ); + if ( memcmp( p + slen, result, hlen ) == 0 ) + return ( 0 ); else - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); } /* * Simplified PKCS#1 v2.1 RSASSA-PSS-VERIFY function */ int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ) { mbedtls_md_type_t mgf1_hash_id = ( ctx->hash_id != MBEDTLS_MD_NONE ) - ? (mbedtls_md_type_t) ctx->hash_id - : md_alg; + ? (mbedtls_md_type_t) ctx->hash_id + : md_alg; - return( mbedtls_rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode, - md_alg, hashlen, hash, - mgf1_hash_id, MBEDTLS_RSA_SALT_LEN_ANY, - sig ) ); + return ( mbedtls_rsa_rsassa_pss_verify_ext( ctx, f_rng, p_rng, mode, + md_alg, hashlen, hash, + mgf1_hash_id, MBEDTLS_RSA_SALT_LEN_ANY, + sig ) ); } #endif /* MBEDTLS_PKCS1_V21 */ @@ -1327,13 +1314,13 @@ int mbedtls_rsa_rsassa_pss_verify( mbedtls_rsa_context *ctx, * Implementation of the PKCS#1 v2.1 RSASSA-PKCS1-v1_5-VERIFY function */ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ) { int ret; size_t len, siglen, asn1_len; @@ -1343,47 +1330,45 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, mbedtls_asn1_buf oid; unsigned char buf[MBEDTLS_MPI_MAX_SIZE]; - if( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( mode == MBEDTLS_RSA_PRIVATE && ctx->padding != MBEDTLS_RSA_PKCS_V15 ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); siglen = ctx->len; - if( siglen < 16 || siglen > sizeof( buf ) ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( siglen < 16 || siglen > sizeof( buf ) ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); ret = ( mode == MBEDTLS_RSA_PUBLIC ) ? mbedtls_rsa_public( ctx, sig, buf ) : mbedtls_rsa_private( ctx, f_rng, p_rng, sig, buf ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); p = buf; - if( *p++ != 0 || *p++ != MBEDTLS_RSA_SIGN ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + if ( *p++ != 0 || *p++ != MBEDTLS_RSA_SIGN ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); - while( *p != 0 ) - { - if( p >= buf + siglen - 1 || *p != 0xFF ) - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + while ( *p != 0 ) { + if ( p >= buf + siglen - 1 || *p != 0xFF ) + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); p++; } p++; len = siglen - ( p - buf ); - if( len == hashlen && md_alg == MBEDTLS_MD_NONE ) - { - if( memcmp( p, hash, hashlen ) == 0 ) - return( 0 ); + if ( len == hashlen && md_alg == MBEDTLS_MD_NONE ) { + if ( memcmp( p, hash, hashlen ) == 0 ) + return ( 0 ); else - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); } md_info = mbedtls_md_info_from_type( md_alg ); - if( md_info == NULL ) - return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + if ( md_info == NULL ) + return ( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); hashlen = mbedtls_md_get_size( md_info ); end = p + len; @@ -1391,53 +1376,53 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, /* * Parse the ASN.1 structure inside the PKCS#1 v1.5 structure */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( asn1_len + 2 != len ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( asn1_len + 2 != len ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( asn1_len + 6 + hashlen != len ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( asn1_len + 6 + hashlen != len ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); oid.p = p; p += oid.len; - if( mbedtls_oid_get_md_alg( &oid, &msg_md_alg ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( mbedtls_oid_get_md_alg( &oid, &msg_md_alg ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( md_alg != msg_md_alg ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( md_alg != msg_md_alg ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); /* * assume the algorithm parameters must be NULL */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_NULL ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_NULL ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &asn1_len, MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( asn1_len != hashlen ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( asn1_len != hashlen ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - if( memcmp( p, hash, hashlen ) != 0 ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( memcmp( p, hash, hashlen ) != 0 ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); p += hashlen; - if( p != end ) - return( MBEDTLS_ERR_RSA_VERIFY_FAILED ); + if ( p != end ) + return ( MBEDTLS_ERR_RSA_VERIFY_FAILED ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -1445,30 +1430,29 @@ int mbedtls_rsa_rsassa_pkcs1_v15_verify( mbedtls_rsa_context *ctx, * Do an RSA operation and check the message digest */ int mbedtls_rsa_pkcs1_verify( mbedtls_rsa_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng, - int mode, - mbedtls_md_type_t md_alg, - unsigned int hashlen, - const unsigned char *hash, - const unsigned char *sig ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng, + int mode, + mbedtls_md_type_t md_alg, + unsigned int hashlen, + const unsigned char *hash, + const unsigned char *sig ) { - switch( ctx->padding ) - { + switch ( ctx->padding ) { #if defined(MBEDTLS_PKCS1_V15) case MBEDTLS_RSA_PKCS_V15: return mbedtls_rsa_rsassa_pkcs1_v15_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif #if defined(MBEDTLS_PKCS1_V21) case MBEDTLS_RSA_PKCS_V21: return mbedtls_rsa_rsassa_pss_verify( ctx, f_rng, p_rng, mode, md_alg, - hashlen, hash, sig ); + hashlen, hash, sig ); #endif default: - return( MBEDTLS_ERR_RSA_INVALID_PADDING ); + return ( MBEDTLS_ERR_RSA_INVALID_PADDING ); } } @@ -1503,10 +1487,10 @@ int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src ) dst->hash_id = src->hash_id; cleanup: - if( ret != 0 ) + if ( ret != 0 ) mbedtls_rsa_free( dst ); - return( ret ); + return ( ret ); } /* @@ -1514,11 +1498,19 @@ int mbedtls_rsa_copy( mbedtls_rsa_context *dst, const mbedtls_rsa_context *src ) */ void mbedtls_rsa_free( mbedtls_rsa_context *ctx ) { - mbedtls_mpi_free( &ctx->Vi ); mbedtls_mpi_free( &ctx->Vf ); - mbedtls_mpi_free( &ctx->RQ ); mbedtls_mpi_free( &ctx->RP ); mbedtls_mpi_free( &ctx->RN ); - mbedtls_mpi_free( &ctx->QP ); mbedtls_mpi_free( &ctx->DQ ); mbedtls_mpi_free( &ctx->DP ); - mbedtls_mpi_free( &ctx->Q ); mbedtls_mpi_free( &ctx->P ); mbedtls_mpi_free( &ctx->D ); - mbedtls_mpi_free( &ctx->E ); mbedtls_mpi_free( &ctx->N ); + mbedtls_mpi_free( &ctx->Vi ); + mbedtls_mpi_free( &ctx->Vf ); + mbedtls_mpi_free( &ctx->RQ ); + mbedtls_mpi_free( &ctx->RP ); + mbedtls_mpi_free( &ctx->RN ); + mbedtls_mpi_free( &ctx->QP ); + mbedtls_mpi_free( &ctx->DQ ); + mbedtls_mpi_free( &ctx->DP ); + mbedtls_mpi_free( &ctx->Q ); + mbedtls_mpi_free( &ctx->P ); + mbedtls_mpi_free( &ctx->D ); + mbedtls_mpi_free( &ctx->E ); + mbedtls_mpi_free( &ctx->N ); #if defined(MBEDTLS_THREADING_C) mbedtls_mutex_free( &ctx->mutex ); @@ -1589,19 +1581,19 @@ static int myrand( void *rng_state, unsigned char *output, size_t len ) #if !defined(__OpenBSD__) size_t i; - if( rng_state != NULL ) + if ( rng_state != NULL ) rng_state = NULL; - for( i = 0; i < len; ++i ) + for ( i = 0; i < len; ++i ) output[i] = rand(); #else - if( rng_state != NULL ) + if ( rng_state != NULL ) rng_state = NULL; arc4random_buf( output, len ); #endif /* !OpenBSD */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PKCS1_V15 */ @@ -1624,97 +1616,91 @@ int mbedtls_rsa_self_test( int verbose ) mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 ); rsa.len = KEY_LEN; - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.N , 16, RSA_N ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.E , 16, RSA_E ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.D , 16, RSA_D ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.P , 16, RSA_P ) ); - MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.Q , 16, RSA_Q ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.N, 16, RSA_N ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.E, 16, RSA_E ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.D, 16, RSA_D ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.P, 16, RSA_P ) ); + MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.Q, 16, RSA_Q ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.DP, 16, RSA_DP ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.DQ, 16, RSA_DQ ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &rsa.QP, 16, RSA_QP ) ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " RSA key validation: " ); - if( mbedtls_rsa_check_pubkey( &rsa ) != 0 || - mbedtls_rsa_check_privkey( &rsa ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_check_pubkey( &rsa ) != 0 || + mbedtls_rsa_check_privkey( &rsa ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n PKCS#1 encryption : " ); memcpy( rsa_plaintext, RSA_PT, PT_LEN ); - if( mbedtls_rsa_pkcs1_encrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PUBLIC, PT_LEN, - rsa_plaintext, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_encrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PUBLIC, PT_LEN, + rsa_plaintext, rsa_ciphertext ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n PKCS#1 decryption : " ); - if( mbedtls_rsa_pkcs1_decrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, &len, - rsa_ciphertext, rsa_decrypted, - sizeof(rsa_decrypted) ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_decrypt( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, &len, + rsa_ciphertext, rsa_decrypted, + sizeof(rsa_decrypted) ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( rsa_decrypted, rsa_plaintext, len ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); #if defined(MBEDTLS_SHA1_C) - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " PKCS#1 data sign : " ); mbedtls_sha1( rsa_plaintext, PT_LEN, sha1sum ); - if( mbedtls_rsa_pkcs1_sign( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, MBEDTLS_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_sign( &rsa, myrand, NULL, MBEDTLS_RSA_PRIVATE, MBEDTLS_MD_SHA1, 0, + sha1sum, rsa_ciphertext ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n PKCS#1 sig. verify: " ); - if( mbedtls_rsa_pkcs1_verify( &rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA1, 0, - sha1sum, rsa_ciphertext ) != 0 ) - { - if( verbose != 0 ) + if ( mbedtls_rsa_pkcs1_verify( &rsa, NULL, NULL, MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA1, 0, + sha1sum, rsa_ciphertext ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); #endif /* MBEDTLS_SHA1_C */ - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); cleanup: @@ -1722,7 +1708,7 @@ int mbedtls_rsa_self_test( int verbose ) #else /* MBEDTLS_PKCS1_V15 */ ((void) verbose); #endif /* MBEDTLS_PKCS1_V15 */ - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/sha1.c b/external_libs/mbedtls/library/sha1.c index 2ccf2a2..2fad9f7 100644 --- a/external_libs/mbedtls/library/sha1.c +++ b/external_libs/mbedtls/library/sha1.c @@ -48,8 +48,10 @@ #if !defined(MBEDTLS_SHA1_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = (unsigned char*)v; + while ( n-- ) *p++ = 0; } /* @@ -82,7 +84,7 @@ void mbedtls_sha1_init( mbedtls_sha1_context *ctx ) void mbedtls_sha1_free( mbedtls_sha1_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_sha1_context ) ); @@ -275,7 +277,7 @@ void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -284,11 +286,10 @@ void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_sha1_process( ctx, ctx->buffer ); input += fill; @@ -296,20 +297,18 @@ void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_sha1_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) + if ( ilen > 0 ) memcpy( (void *) (ctx->buffer + left), input, ilen ); } -static const unsigned char sha1_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char sha1_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -325,7 +324,7 @@ void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, unsigned char output[20] ) unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_BE( high, msglen, 0 ); @@ -364,26 +363,29 @@ void mbedtls_sha1( const unsigned char *input, size_t ilen, unsigned char output /* * FIPS-180-1 test vectors */ -static const unsigned char sha1_test_buf[3][57] = -{ +static const unsigned char sha1_test_buf[3][57] = { { "abc" }, { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, { "" } }; -static const int sha1_test_buflen[3] = -{ +static const int sha1_test_buflen[3] = { 3, 56, 1000 }; -static const unsigned char sha1_test_sum[3][20] = -{ - { 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, - 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D }, - { 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, - 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 }, - { 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, - 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F } +static const unsigned char sha1_test_sum[3][20] = { + { + 0xA9, 0x99, 0x3E, 0x36, 0x47, 0x06, 0x81, 0x6A, 0xBA, 0x3E, + 0x25, 0x71, 0x78, 0x50, 0xC2, 0x6C, 0x9C, 0xD0, 0xD8, 0x9D + }, + { + 0x84, 0x98, 0x3E, 0x44, 0x1C, 0x3B, 0xD2, 0x6E, 0xBA, 0xAE, + 0x4A, 0xA1, 0xF9, 0x51, 0x29, 0xE5, 0xE5, 0x46, 0x70, 0xF1 + }, + { + 0x34, 0xAA, 0x97, 0x3C, 0xD4, 0xC4, 0xDA, 0xA4, 0xF6, 0x1E, + 0xEB, 0x2B, 0xDB, 0xAD, 0x27, 0x31, 0x65, 0x34, 0x01, 0x6F + } }; /* @@ -401,46 +403,42 @@ int mbedtls_sha1_self_test( int verbose ) /* * SHA-1 */ - for( i = 0; i < 3; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 3; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " SHA-1 test #%d: ", i + 1 ); mbedtls_sha1_starts( &ctx ); - if( i == 2 ) - { + if ( i == 2 ) { memset( buf, 'a', buflen = 1000 ); - for( j = 0; j < 1000; j++ ) + for ( j = 0; j < 1000; j++ ) mbedtls_sha1_update( &ctx, buf, buflen ); - } - else + } else mbedtls_sha1_update( &ctx, sha1_test_buf[i], - sha1_test_buflen[i] ); + sha1_test_buflen[i] ); mbedtls_sha1_finish( &ctx, sha1sum ); - if( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( sha1sum, sha1_test_sum[i], 20 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_sha1_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/sha256.c b/external_libs/mbedtls/library/sha256.c index ad25d38..1906fe9 100644 --- a/external_libs/mbedtls/library/sha256.c +++ b/external_libs/mbedtls/library/sha256.c @@ -51,8 +51,10 @@ #if !defined(MBEDTLS_SHA256_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -85,7 +87,7 @@ void mbedtls_sha256_init( mbedtls_sha256_context *ctx ) void mbedtls_sha256_free( mbedtls_sha256_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_sha256_context ) ); @@ -105,8 +107,7 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ) ctx->total[0] = 0; ctx->total[1] = 0; - if( is224 == 0 ) - { + if ( is224 == 0 ) { /* SHA-256 */ ctx->state[0] = 0x6A09E667; ctx->state[1] = 0xBB67AE85; @@ -116,9 +117,7 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ) ctx->state[5] = 0x9B05688C; ctx->state[6] = 0x1F83D9AB; ctx->state[7] = 0x5BE0CD19; - } - else - { + } else { /* SHA-224 */ ctx->state[0] = 0xC1059ED8; ctx->state[1] = 0x367CD507; @@ -134,8 +133,7 @@ void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ) } #if !defined(MBEDTLS_SHA256_PROCESS_ALT) -static const uint32_t K[] = -{ +static const uint32_t K[] = { 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, @@ -185,52 +183,56 @@ void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char da uint32_t A[8]; unsigned int i; - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) A[i] = ctx->state[i]; #if defined(MBEDTLS_SHA256_SMALLER) - for( i = 0; i < 64; i++ ) - { - if( i < 16 ) + for ( i = 0; i < 64; i++ ) { + if ( i < 16 ) GET_UINT32_BE( W[i], data, 4 * i ); else R( i ); P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i], K[i] ); - temp1 = A[7]; A[7] = A[6]; A[6] = A[5]; A[5] = A[4]; A[4] = A[3]; - A[3] = A[2]; A[2] = A[1]; A[1] = A[0]; A[0] = temp1; + temp1 = A[7]; + A[7] = A[6]; + A[6] = A[5]; + A[5] = A[4]; + A[4] = A[3]; + A[3] = A[2]; + A[2] = A[1]; + A[1] = A[0]; + A[0] = temp1; } #else /* MBEDTLS_SHA256_SMALLER */ - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) GET_UINT32_BE( W[i], data, 4 * i ); - for( i = 0; i < 16; i += 8 ) - { - P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i+0], K[i+0] ); - P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], W[i+1], K[i+1] ); - P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], W[i+2], K[i+2] ); - P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], W[i+3], K[i+3] ); - P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], W[i+4], K[i+4] ); - P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], W[i+5], K[i+5] ); - P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], W[i+6], K[i+6] ); - P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], W[i+7], K[i+7] ); + for ( i = 0; i < 16; i += 8 ) { + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i + 0], K[i + 0] ); + P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], W[i + 1], K[i + 1] ); + P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], W[i + 2], K[i + 2] ); + P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], W[i + 3], K[i + 3] ); + P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], W[i + 4], K[i + 4] ); + P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], W[i + 5], K[i + 5] ); + P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], W[i + 6], K[i + 6] ); + P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], W[i + 7], K[i + 7] ); } - for( i = 16; i < 64; i += 8 ) - { - P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], R(i+0), K[i+0] ); - P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], R(i+1), K[i+1] ); - P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], R(i+2), K[i+2] ); - P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], R(i+3), K[i+3] ); - P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], R(i+4), K[i+4] ); - P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], R(i+5), K[i+5] ); - P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], R(i+6), K[i+6] ); - P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], R(i+7), K[i+7] ); + for ( i = 16; i < 64; i += 8 ) { + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], R(i + 0), K[i + 0] ); + P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], R(i + 1), K[i + 1] ); + P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], R(i + 2), K[i + 2] ); + P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], R(i + 3), K[i + 3] ); + P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], R(i + 4), K[i + 4] ); + P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], R(i + 5), K[i + 5] ); + P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], R(i + 6), K[i + 6] ); + P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], R(i + 7), K[i + 7] ); } #endif /* MBEDTLS_SHA256_SMALLER */ - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) ctx->state[i] += A[i]; } #endif /* !MBEDTLS_SHA256_PROCESS_ALT */ @@ -239,12 +241,12 @@ void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char da * SHA-256 process buffer */ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input, - size_t ilen ) + size_t ilen ) { size_t fill; uint32_t left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = ctx->total[0] & 0x3F; @@ -253,11 +255,10 @@ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *in ctx->total[0] += (uint32_t) ilen; ctx->total[0] &= 0xFFFFFFFF; - if( ctx->total[0] < (uint32_t) ilen ) + if ( ctx->total[0] < (uint32_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_sha256_process( ctx, ctx->buffer ); input += fill; @@ -265,20 +266,18 @@ void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *in left = 0; } - while( ilen >= 64 ) - { + while ( ilen >= 64 ) { mbedtls_sha256_process( ctx, input ); input += 64; ilen -= 64; } - if( ilen > 0 ) + if ( ilen > 0 ) memcpy( (void *) (ctx->buffer + left), input, ilen ); } -static const unsigned char sha256_padding[64] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char sha256_padding[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 @@ -294,7 +293,7 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32 unsigned char msglen[8]; high = ( ctx->total[0] >> 29 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT32_BE( high, msglen, 0 ); @@ -314,7 +313,7 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32 PUT_UINT32_BE( ctx->state[5], output, 20 ); PUT_UINT32_BE( ctx->state[6], output, 24 ); - if( ctx->is224 == 0 ) + if ( ctx->is224 == 0 ) PUT_UINT32_BE( ctx->state[7], output, 28 ); } @@ -324,7 +323,7 @@ void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32 * output = SHA-256( input buffer ) */ void mbedtls_sha256( const unsigned char *input, size_t ilen, - unsigned char output[32], int is224 ) + unsigned char output[32], int is224 ) { mbedtls_sha256_context ctx; @@ -339,51 +338,60 @@ void mbedtls_sha256( const unsigned char *input, size_t ilen, /* * FIPS-180-2 test vectors */ -static const unsigned char sha256_test_buf[3][57] = -{ +static const unsigned char sha256_test_buf[3][57] = { { "abc" }, { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" }, { "" } }; -static const int sha256_test_buflen[3] = -{ +static const int sha256_test_buflen[3] = { 3, 56, 1000 }; -static const unsigned char sha256_test_sum[6][32] = -{ +static const unsigned char sha256_test_sum[6][32] = { /* * SHA-224 test vectors */ - { 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, - 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, - 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, - 0xE3, 0x6C, 0x9D, 0xA7 }, - { 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, - 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, - 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, - 0x52, 0x52, 0x25, 0x25 }, - { 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, - 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, - 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, - 0x4E, 0xE7, 0xAD, 0x67 }, + { + 0x23, 0x09, 0x7D, 0x22, 0x34, 0x05, 0xD8, 0x22, + 0x86, 0x42, 0xA4, 0x77, 0xBD, 0xA2, 0x55, 0xB3, + 0x2A, 0xAD, 0xBC, 0xE4, 0xBD, 0xA0, 0xB3, 0xF7, + 0xE3, 0x6C, 0x9D, 0xA7 + }, + { + 0x75, 0x38, 0x8B, 0x16, 0x51, 0x27, 0x76, 0xCC, + 0x5D, 0xBA, 0x5D, 0xA1, 0xFD, 0x89, 0x01, 0x50, + 0xB0, 0xC6, 0x45, 0x5C, 0xB4, 0xF5, 0x8B, 0x19, + 0x52, 0x52, 0x25, 0x25 + }, + { + 0x20, 0x79, 0x46, 0x55, 0x98, 0x0C, 0x91, 0xD8, + 0xBB, 0xB4, 0xC1, 0xEA, 0x97, 0x61, 0x8A, 0x4B, + 0xF0, 0x3F, 0x42, 0x58, 0x19, 0x48, 0xB2, 0xEE, + 0x4E, 0xE7, 0xAD, 0x67 + }, /* * SHA-256 test vectors */ - { 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, - 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, - 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, - 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD }, - { 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, - 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, - 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, - 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 }, - { 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, - 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, - 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, - 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 } + { + 0xBA, 0x78, 0x16, 0xBF, 0x8F, 0x01, 0xCF, 0xEA, + 0x41, 0x41, 0x40, 0xDE, 0x5D, 0xAE, 0x22, 0x23, + 0xB0, 0x03, 0x61, 0xA3, 0x96, 0x17, 0x7A, 0x9C, + 0xB4, 0x10, 0xFF, 0x61, 0xF2, 0x00, 0x15, 0xAD + }, + { + 0x24, 0x8D, 0x6A, 0x61, 0xD2, 0x06, 0x38, 0xB8, + 0xE5, 0xC0, 0x26, 0x93, 0x0C, 0x3E, 0x60, 0x39, + 0xA3, 0x3C, 0xE4, 0x59, 0x64, 0xFF, 0x21, 0x67, + 0xF6, 0xEC, 0xED, 0xD4, 0x19, 0xDB, 0x06, 0xC1 + }, + { + 0xCD, 0xC7, 0x6E, 0x5C, 0x99, 0x14, 0xFB, 0x92, + 0x81, 0xA1, 0xC7, 0xE2, 0x84, 0xD7, 0x3E, 0x67, + 0xF1, 0x80, 0x9A, 0x48, 0xA4, 0x97, 0x20, 0x0E, + 0x04, 0x6D, 0x39, 0xCC, 0xC7, 0x11, 0x2C, 0xD0 + } }; /* @@ -397,60 +405,55 @@ int mbedtls_sha256_self_test( int verbose ) mbedtls_sha256_context ctx; buf = mbedtls_calloc( 1024, sizeof(unsigned char) ); - if( NULL == buf ) - { - if( verbose != 0 ) + if ( NULL == buf ) { + if ( verbose != 0 ) mbedtls_printf( "Buffer allocation failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_sha256_init( &ctx ); - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { j = i % 3; k = i < 3; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " SHA-%d test #%d: ", 256 - k * 32, j + 1 ); mbedtls_sha256_starts( &ctx, k ); - if( j == 2 ) - { + if ( j == 2 ) { memset( buf, 'a', buflen = 1000 ); - for( j = 0; j < 1000; j++ ) + for ( j = 0; j < 1000; j++ ) mbedtls_sha256_update( &ctx, buf, buflen ); - } - else + } else mbedtls_sha256_update( &ctx, sha256_test_buf[j], - sha256_test_buflen[j] ); + sha256_test_buflen[j] ); mbedtls_sha256_finish( &ctx, sha256sum ); - if( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( sha256sum, sha256_test_sum[i], 32 - k * 4 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_sha256_free( &ctx ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/sha512.c b/external_libs/mbedtls/library/sha512.c index 724522a..18a58eb 100644 --- a/external_libs/mbedtls/library/sha512.c +++ b/external_libs/mbedtls/library/sha512.c @@ -35,9 +35,9 @@ #include "mbedtls/sha512.h" #if defined(_MSC_VER) || defined(__WATCOMC__) - #define UL64(x) x##ui64 +#define UL64(x) x##ui64 #else - #define UL64(x) x##ULL +#define UL64(x) x##ULL #endif #include @@ -57,8 +57,10 @@ #if !defined(MBEDTLS_SHA512_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -99,7 +101,7 @@ void mbedtls_sha512_init( mbedtls_sha512_context *ctx ) void mbedtls_sha512_free( mbedtls_sha512_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_sha512_context ) ); @@ -119,8 +121,7 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ) ctx->total[0] = 0; ctx->total[1] = 0; - if( is384 == 0 ) - { + if ( is384 == 0 ) { /* SHA-512 */ ctx->state[0] = UL64(0x6A09E667F3BCC908); ctx->state[1] = UL64(0xBB67AE8584CAA73B); @@ -130,9 +131,7 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ) ctx->state[5] = UL64(0x9B05688C2B3E6C1F); ctx->state[6] = UL64(0x1F83D9ABFB41BD6B); ctx->state[7] = UL64(0x5BE0CD19137E2179); - } - else - { + } else { /* SHA-384 */ ctx->state[0] = UL64(0xCBBB9D5DC1059ED8); ctx->state[1] = UL64(0x629A292A367CD507); @@ -152,8 +151,7 @@ void mbedtls_sha512_starts( mbedtls_sha512_context *ctx, int is384 ) /* * Round constants */ -static const uint64_t K[80] = -{ +static const uint64_t K[80] = { UL64(0x428A2F98D728AE22), UL64(0x7137449123EF65CD), UL64(0xB5C0FBCFEC4D3B2F), UL64(0xE9B5DBA58189DBBC), UL64(0x3956C25BF348B538), UL64(0x59F111F1B605D019), @@ -221,13 +219,11 @@ void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char da d += temp1; h = temp1 + temp2; \ } - for( i = 0; i < 16; i++ ) - { + for ( i = 0; i < 16; i++ ) { GET_UINT64_BE( W[i], data, i << 3 ); } - for( ; i < 80; i++ ) - { + for ( ; i < 80; i++ ) { W[i] = S1(W[i - 2]) + W[i - 7] + S0(W[i - 15]) + W[i - 16]; } @@ -242,18 +238,24 @@ void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char da H = ctx->state[7]; i = 0; - do - { - P( A, B, C, D, E, F, G, H, W[i], K[i] ); i++; - P( H, A, B, C, D, E, F, G, W[i], K[i] ); i++; - P( G, H, A, B, C, D, E, F, W[i], K[i] ); i++; - P( F, G, H, A, B, C, D, E, W[i], K[i] ); i++; - P( E, F, G, H, A, B, C, D, W[i], K[i] ); i++; - P( D, E, F, G, H, A, B, C, W[i], K[i] ); i++; - P( C, D, E, F, G, H, A, B, W[i], K[i] ); i++; - P( B, C, D, E, F, G, H, A, W[i], K[i] ); i++; - } - while( i < 80 ); + do { + P( A, B, C, D, E, F, G, H, W[i], K[i] ); + i++; + P( H, A, B, C, D, E, F, G, W[i], K[i] ); + i++; + P( G, H, A, B, C, D, E, F, W[i], K[i] ); + i++; + P( F, G, H, A, B, C, D, E, W[i], K[i] ); + i++; + P( E, F, G, H, A, B, C, D, W[i], K[i] ); + i++; + P( D, E, F, G, H, A, B, C, W[i], K[i] ); + i++; + P( C, D, E, F, G, H, A, B, W[i], K[i] ); + i++; + P( B, C, D, E, F, G, H, A, W[i], K[i] ); + i++; + } while ( i < 80 ); ctx->state[0] += A; ctx->state[1] += B; @@ -270,12 +272,12 @@ void mbedtls_sha512_process( mbedtls_sha512_context *ctx, const unsigned char da * SHA-512 process buffer */ void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *input, - size_t ilen ) + size_t ilen ) { size_t fill; unsigned int left; - if( ilen == 0 ) + if ( ilen == 0 ) return; left = (unsigned int) (ctx->total[0] & 0x7F); @@ -283,11 +285,10 @@ void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *in ctx->total[0] += (uint64_t) ilen; - if( ctx->total[0] < (uint64_t) ilen ) + if ( ctx->total[0] < (uint64_t) ilen ) ctx->total[1]++; - if( left && ilen >= fill ) - { + if ( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); mbedtls_sha512_process( ctx, ctx->buffer ); input += fill; @@ -295,20 +296,18 @@ void mbedtls_sha512_update( mbedtls_sha512_context *ctx, const unsigned char *in left = 0; } - while( ilen >= 128 ) - { + while ( ilen >= 128 ) { mbedtls_sha512_process( ctx, input ); input += 128; ilen -= 128; } - if( ilen > 0 ) + if ( ilen > 0 ) memcpy( (void *) (ctx->buffer + left), input, ilen ); } -static const unsigned char sha512_padding[128] = -{ - 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +static const unsigned char sha512_padding[128] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -328,7 +327,7 @@ void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64 unsigned char msglen[16]; high = ( ctx->total[0] >> 61 ) - | ( ctx->total[1] << 3 ); + | ( ctx->total[1] << 3 ); low = ( ctx->total[0] << 3 ); PUT_UINT64_BE( high, msglen, 0 ); @@ -347,8 +346,7 @@ void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64 PUT_UINT64_BE( ctx->state[4], output, 32 ); PUT_UINT64_BE( ctx->state[5], output, 40 ); - if( ctx->is384 == 0 ) - { + if ( ctx->is384 == 0 ) { PUT_UINT64_BE( ctx->state[6], output, 48 ); PUT_UINT64_BE( ctx->state[7], output, 56 ); } @@ -360,7 +358,7 @@ void mbedtls_sha512_finish( mbedtls_sha512_context *ctx, unsigned char output[64 * output = SHA-512( input buffer ) */ void mbedtls_sha512( const unsigned char *input, size_t ilen, - unsigned char output[64], int is384 ) + unsigned char output[64], int is384 ) { mbedtls_sha512_context ctx; @@ -376,70 +374,81 @@ void mbedtls_sha512( const unsigned char *input, size_t ilen, /* * FIPS-180-2 test vectors */ -static const unsigned char sha512_test_buf[3][113] = -{ +static const unsigned char sha512_test_buf[3][113] = { { "abc" }, - { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" - "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" }, + { + "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" + "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" + }, { "" } }; -static const int sha512_test_buflen[3] = -{ +static const int sha512_test_buflen[3] = { 3, 112, 1000 }; -static const unsigned char sha512_test_sum[6][64] = -{ +static const unsigned char sha512_test_sum[6][64] = { /* * SHA-384 test vectors */ - { 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, - 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, - 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, - 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, - 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, - 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 }, - { 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, - 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, - 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, - 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, - 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, - 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 }, - { 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, - 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, - 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, - 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, - 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, - 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 }, + { + 0xCB, 0x00, 0x75, 0x3F, 0x45, 0xA3, 0x5E, 0x8B, + 0xB5, 0xA0, 0x3D, 0x69, 0x9A, 0xC6, 0x50, 0x07, + 0x27, 0x2C, 0x32, 0xAB, 0x0E, 0xDE, 0xD1, 0x63, + 0x1A, 0x8B, 0x60, 0x5A, 0x43, 0xFF, 0x5B, 0xED, + 0x80, 0x86, 0x07, 0x2B, 0xA1, 0xE7, 0xCC, 0x23, + 0x58, 0xBA, 0xEC, 0xA1, 0x34, 0xC8, 0x25, 0xA7 + }, + { + 0x09, 0x33, 0x0C, 0x33, 0xF7, 0x11, 0x47, 0xE8, + 0x3D, 0x19, 0x2F, 0xC7, 0x82, 0xCD, 0x1B, 0x47, + 0x53, 0x11, 0x1B, 0x17, 0x3B, 0x3B, 0x05, 0xD2, + 0x2F, 0xA0, 0x80, 0x86, 0xE3, 0xB0, 0xF7, 0x12, + 0xFC, 0xC7, 0xC7, 0x1A, 0x55, 0x7E, 0x2D, 0xB9, + 0x66, 0xC3, 0xE9, 0xFA, 0x91, 0x74, 0x60, 0x39 + }, + { + 0x9D, 0x0E, 0x18, 0x09, 0x71, 0x64, 0x74, 0xCB, + 0x08, 0x6E, 0x83, 0x4E, 0x31, 0x0A, 0x4A, 0x1C, + 0xED, 0x14, 0x9E, 0x9C, 0x00, 0xF2, 0x48, 0x52, + 0x79, 0x72, 0xCE, 0xC5, 0x70, 0x4C, 0x2A, 0x5B, + 0x07, 0xB8, 0xB3, 0xDC, 0x38, 0xEC, 0xC4, 0xEB, + 0xAE, 0x97, 0xDD, 0xD8, 0x7F, 0x3D, 0x89, 0x85 + }, /* * SHA-512 test vectors */ - { 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, - 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, - 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, - 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, - 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, - 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, - 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, - 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F }, - { 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, - 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, - 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, - 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, - 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, - 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, - 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, - 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 }, - { 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, - 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, - 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, - 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, - 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, - 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, - 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, - 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B } + { + 0xDD, 0xAF, 0x35, 0xA1, 0x93, 0x61, 0x7A, 0xBA, + 0xCC, 0x41, 0x73, 0x49, 0xAE, 0x20, 0x41, 0x31, + 0x12, 0xE6, 0xFA, 0x4E, 0x89, 0xA9, 0x7E, 0xA2, + 0x0A, 0x9E, 0xEE, 0xE6, 0x4B, 0x55, 0xD3, 0x9A, + 0x21, 0x92, 0x99, 0x2A, 0x27, 0x4F, 0xC1, 0xA8, + 0x36, 0xBA, 0x3C, 0x23, 0xA3, 0xFE, 0xEB, 0xBD, + 0x45, 0x4D, 0x44, 0x23, 0x64, 0x3C, 0xE8, 0x0E, + 0x2A, 0x9A, 0xC9, 0x4F, 0xA5, 0x4C, 0xA4, 0x9F + }, + { + 0x8E, 0x95, 0x9B, 0x75, 0xDA, 0xE3, 0x13, 0xDA, + 0x8C, 0xF4, 0xF7, 0x28, 0x14, 0xFC, 0x14, 0x3F, + 0x8F, 0x77, 0x79, 0xC6, 0xEB, 0x9F, 0x7F, 0xA1, + 0x72, 0x99, 0xAE, 0xAD, 0xB6, 0x88, 0x90, 0x18, + 0x50, 0x1D, 0x28, 0x9E, 0x49, 0x00, 0xF7, 0xE4, + 0x33, 0x1B, 0x99, 0xDE, 0xC4, 0xB5, 0x43, 0x3A, + 0xC7, 0xD3, 0x29, 0xEE, 0xB6, 0xDD, 0x26, 0x54, + 0x5E, 0x96, 0xE5, 0x5B, 0x87, 0x4B, 0xE9, 0x09 + }, + { + 0xE7, 0x18, 0x48, 0x3D, 0x0C, 0xE7, 0x69, 0x64, + 0x4E, 0x2E, 0x42, 0xC7, 0xBC, 0x15, 0xB4, 0x63, + 0x8E, 0x1F, 0x98, 0xB1, 0x3B, 0x20, 0x44, 0x28, + 0x56, 0x32, 0xA8, 0x03, 0xAF, 0xA9, 0x73, 0xEB, + 0xDE, 0x0F, 0xF2, 0x44, 0x87, 0x7E, 0xA6, 0x0A, + 0x4C, 0xB0, 0x43, 0x2C, 0xE5, 0x77, 0xC3, 0x1B, + 0xEB, 0x00, 0x9C, 0x5C, 0x2C, 0x49, 0xAA, 0x2E, + 0x4E, 0xAD, 0xB2, 0x17, 0xAD, 0x8C, 0xC0, 0x9B + } }; /* @@ -453,60 +462,55 @@ int mbedtls_sha512_self_test( int verbose ) mbedtls_sha512_context ctx; buf = mbedtls_calloc( 1024, sizeof(unsigned char) ); - if( NULL == buf ) - { - if( verbose != 0 ) + if ( NULL == buf ) { + if ( verbose != 0 ) mbedtls_printf( "Buffer allocation failed\n" ); - return( 1 ); + return ( 1 ); } mbedtls_sha512_init( &ctx ); - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { j = i % 3; k = i < 3; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " SHA-%d test #%d: ", 512 - k * 128, j + 1 ); mbedtls_sha512_starts( &ctx, k ); - if( j == 2 ) - { + if ( j == 2 ) { memset( buf, 'a', buflen = 1000 ); - for( j = 0; j < 1000; j++ ) + for ( j = 0; j < 1000; j++ ) mbedtls_sha512_update( &ctx, buf, buflen ); - } - else + } else mbedtls_sha512_update( &ctx, sha512_test_buf[j], - sha512_test_buflen[j] ); + sha512_test_buflen[j] ); mbedtls_sha512_finish( &ctx, sha512sum ); - if( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( sha512sum, sha512_test_sum[i], 64 - k * 16 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_sha512_free( &ctx ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/ssl_cache.c b/external_libs/mbedtls/library/ssl_cache.c index 9b62de2..5a24972 100644 --- a/external_libs/mbedtls/library/ssl_cache.c +++ b/external_libs/mbedtls/library/ssl_cache.c @@ -65,31 +65,30 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) mbedtls_ssl_cache_entry *cur, *entry; #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_lock( &cache->mutex ) != 0 ) - return( 1 ); + if ( mbedtls_mutex_lock( &cache->mutex ) != 0 ) + return ( 1 ); #endif cur = cache->chain; entry = NULL; - while( cur != NULL ) - { + while ( cur != NULL ) { entry = cur; cur = cur->next; #if defined(MBEDTLS_HAVE_TIME) - if( cache->timeout != 0 && - (int) ( t - entry->timestamp ) > cache->timeout ) + if ( cache->timeout != 0 && + (int) ( t - entry->timestamp ) > cache->timeout ) continue; #endif - if( session->ciphersuite != entry->session.ciphersuite || - session->compression != entry->session.compression || - session->id_len != entry->session.id_len ) + if ( session->ciphersuite != entry->session.ciphersuite || + session->compression != entry->session.compression || + session->id_len != entry->session.id_len ) continue; - if( memcmp( session->id, entry->session.id, - entry->session.id_len ) != 0 ) + if ( memcmp( session->id, entry->session.id, + entry->session.id_len ) != 0 ) continue; memcpy( session->master, entry->session.master, 48 ); @@ -100,19 +99,16 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) /* * Restore peer certificate (without rest of the original chain) */ - if( entry->peer_cert.p != NULL ) - { - if( ( session->peer_cert = mbedtls_calloc( 1, - sizeof(mbedtls_x509_crt) ) ) == NULL ) - { + if ( entry->peer_cert.p != NULL ) { + if ( ( session->peer_cert = mbedtls_calloc( 1, + sizeof(mbedtls_x509_crt) ) ) == NULL ) { ret = 1; goto exit; } mbedtls_x509_crt_init( session->peer_cert ); - if( mbedtls_x509_crt_parse( session->peer_cert, entry->peer_cert.p, - entry->peer_cert.len ) != 0 ) - { + if ( mbedtls_x509_crt_parse( session->peer_cert, entry->peer_cert.p, + entry->peer_cert.len ) != 0 ) { mbedtls_free( session->peer_cert ); session->peer_cert = NULL; ret = 1; @@ -127,11 +123,11 @@ int mbedtls_ssl_cache_get( void *data, mbedtls_ssl_session *session ) exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) + if ( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) ret = 1; #endif - return( ret ); + return ( ret ); } int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) @@ -146,32 +142,29 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) int count = 0; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &cache->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &cache->mutex ) ) != 0 ) + return ( ret ); #endif cur = cache->chain; prv = NULL; - while( cur != NULL ) - { + while ( cur != NULL ) { count++; #if defined(MBEDTLS_HAVE_TIME) - if( cache->timeout != 0 && - (int) ( t - cur->timestamp ) > cache->timeout ) - { + if ( cache->timeout != 0 && + (int) ( t - cur->timestamp ) > cache->timeout ) { cur->timestamp = t; break; /* expired, reuse this slot, update timestamp */ } #endif - if( memcmp( session->id, cur->session.id, cur->session.id_len ) == 0 ) + if ( memcmp( session->id, cur->session.id, cur->session.id_len ) == 0 ) break; /* client reconnected, keep timestamp for session id */ #if defined(MBEDTLS_HAVE_TIME) - if( oldest == 0 || cur->timestamp < oldest ) - { + if ( oldest == 0 || cur->timestamp < oldest ) { oldest = cur->timestamp; old = cur; } @@ -181,16 +174,13 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) cur = cur->next; } - if( cur == NULL ) - { + if ( cur == NULL ) { #if defined(MBEDTLS_HAVE_TIME) /* * Reuse oldest entry if max_entries reached */ - if( count >= cache->max_entries ) - { - if( old == NULL ) - { + if ( count >= cache->max_entries ) { + if ( old == NULL ) { ret = 1; goto exit; } @@ -202,10 +192,8 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) * Reuse first entry in chain if max_entries reached, * but move to last place */ - if( count >= cache->max_entries ) - { - if( cache->chain == NULL ) - { + if ( count >= cache->max_entries ) { + if ( cache->chain == NULL ) { ret = 1; goto exit; } @@ -216,19 +204,17 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) prv->next = cur; } #endif /* MBEDTLS_HAVE_TIME */ - else - { + else { /* * max_entries not reached, create new entry */ cur = mbedtls_calloc( 1, sizeof(mbedtls_ssl_cache_entry) ); - if( cur == NULL ) - { + if ( cur == NULL ) { ret = 1; goto exit; } - if( prv == NULL ) + if ( prv == NULL ) cache->chain = cur; else prv->next = cur; @@ -245,8 +231,7 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) /* * If we're reusing an entry, free its certificate first */ - if( cur->peer_cert.p != NULL ) - { + if ( cur->peer_cert.p != NULL ) { mbedtls_free( cur->peer_cert.p ); memset( &cur->peer_cert, 0, sizeof(mbedtls_x509_buf) ); } @@ -254,11 +239,9 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) /* * Store peer certificate */ - if( session->peer_cert != NULL ) - { + if ( session->peer_cert != NULL ) { cur->peer_cert.p = mbedtls_calloc( 1, session->peer_cert->raw.len ); - if( cur->peer_cert.p == NULL ) - { + if ( cur->peer_cert.p == NULL ) { ret = 1; goto exit; } @@ -275,17 +258,17 @@ int mbedtls_ssl_cache_set( void *data, const mbedtls_ssl_session *session ) exit: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) + if ( mbedtls_mutex_unlock( &cache->mutex ) != 0 ) ret = 1; #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_HAVE_TIME) void mbedtls_ssl_cache_set_timeout( mbedtls_ssl_cache_context *cache, int timeout ) { - if( timeout < 0 ) timeout = 0; + if ( timeout < 0 ) timeout = 0; cache->timeout = timeout; } @@ -293,7 +276,7 @@ void mbedtls_ssl_cache_set_timeout( mbedtls_ssl_cache_context *cache, int timeou void mbedtls_ssl_cache_set_max_entries( mbedtls_ssl_cache_context *cache, int max ) { - if( max < 0 ) max = 0; + if ( max < 0 ) max = 0; cache->max_entries = max; } @@ -304,8 +287,7 @@ void mbedtls_ssl_cache_free( mbedtls_ssl_cache_context *cache ) cur = cache->chain; - while( cur != NULL ) - { + while ( cur != NULL ) { prv = cur; cur = cur->next; diff --git a/external_libs/mbedtls/library/ssl_ciphersuites.c b/external_libs/mbedtls/library/ssl_ciphersuites.c index a762bf7..9d0186d 100644 --- a/external_libs/mbedtls/library/ssl_ciphersuites.c +++ b/external_libs/mbedtls/library/ssl_ciphersuites.c @@ -52,8 +52,7 @@ * 4. By hash function used when relevant * 5. By key exchange/auth again: EC > non-EC */ -static const int ciphersuite_preference[] = -{ +static const int ciphersuite_preference[] = { #if defined(MBEDTLS_SSL_CIPHERSUITES) MBEDTLS_SSL_CIPHERSUITES, #else @@ -264,112 +263,139 @@ static const int ciphersuite_preference[] = 0 }; -static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = -{ +static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = { #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8, "TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -377,32 +403,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-ECDSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS-ECDHE-ECDSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, "TLS-ECDHE-ECDSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA, "TLS-ECDHE-ECDSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_ECDSA_WITH_NULL_SHA, "TLS-ECDHE-ECDSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ @@ -411,48 +443,60 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_AES_C */ @@ -460,35 +504,43 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -496,32 +548,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS-ECDHE-RSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_RC4_128_SHA, "TLS-ECDHE-RSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA, "TLS-ECDHE-RSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_RSA_WITH_NULL_SHA, "TLS-ECDHE-RSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED */ @@ -529,121 +587,153 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, "TLS-DHE-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C && MBEDTLS_GCM_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, "TLS-DHE-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA256", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CBC_SHA, "TLS-DHE-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CBC_SHA, "TLS-DHE-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM, "TLS-DHE-RSA-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8, "TLS-DHE-RSA-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM, "TLS-DHE-RSA-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8, "TLS-DHE-RSA-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM, "TLS-DHE-RSA-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_256_CCM_8, "TLS-DHE-RSA-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM, "TLS-DHE-RSA-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_RSA_WITH_AES_128_CCM_8, "TLS-DHE-RSA-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-128-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-DHE-RSA-WITH-CAMELLIA-256-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -651,11 +741,13 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ @@ -664,122 +756,154 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA512_C) && defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_GCM_SHA384, "TLS-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C && MBEDTLS_GCM_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_GCM_SHA256, "TLS-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256, "TLS-RSA-WITH-AES-256-CBC-SHA256", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA256, "TLS-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA256, "TLS-RSA-WITH-AES-256-CBC-SHA256", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA, "TLS-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA, "TLS-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CBC_SHA, "TLS-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_RSA_WITH_AES_256_CBC_SHA, "TLS-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_RSA_WITH_AES_256_CCM, "TLS-RSA-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8, "TLS-RSA-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_RSA_WITH_AES_128_CCM, "TLS-RSA-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8, "TLS-RSA-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_CCM, "TLS-RSA-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_RSA_WITH_AES_256_CCM_8, "TLS-RSA-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CCM, "TLS-RSA-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_RSA_WITH_AES_128_CCM_8, "TLS-RSA-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-128-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_CBC_SHA, "TLS-RSA-WITH-CAMELLIA-256-CBC-SHA", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -787,30 +911,36 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_MD5_C) - { MBEDTLS_TLS_RSA_WITH_RC4_128_MD5, "TLS-RSA-WITH-RC4-128-MD5", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_RSA_WITH_RC4_128_MD5, "TLS-RSA-WITH-RC4-128-MD5", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_RC4_128_SHA, "TLS-RSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_RSA_WITH_RC4_128_SHA, "TLS-RSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ @@ -819,48 +949,60 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_AES_C */ @@ -868,35 +1010,43 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-RSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-RSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -904,32 +1054,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-RSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-RSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA, "TLS-ECDH-RSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_RC4_128_SHA, "TLS-ECDH-RSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA, "TLS-ECDH-RSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDH_RSA_WITH_NULL_SHA, "TLS-ECDH-RSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED */ @@ -938,48 +1094,60 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_SHA1_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_AES_C */ @@ -987,35 +1155,43 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256, "TLS-ECDH-ECDSA-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384, "TLS-ECDH-ECDSA-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1023,32 +1199,38 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, "TLS-ECDH-ECDSA-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA, "TLS-ECDH-ECDSA-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_RC4_128_SHA, "TLS-ECDH-ECDSA-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA, "TLS-ECDH-ECDSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDH_ECDSA_WITH_NULL_SHA, "TLS-ECDH-ECDSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ @@ -1057,111 +1239,139 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256, "TLS-PSK-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_GCM_SHA256, "TLS-PSK-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384, "TLS-PSK-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_GCM_SHA384, "TLS-PSK-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, "TLS-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA256, "TLS-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384, "TLS-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA384, "TLS-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, "TLS-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, "TLS-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, "TLS-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, "TLS-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_PSK_WITH_AES_256_CCM, "TLS-PSK-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, "TLS-PSK-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_PSK_WITH_AES_128_CCM, "TLS-PSK-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, "TLS-PSK-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CCM, "TLS-PSK-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_PSK_WITH_AES_256_CCM_8, "TLS-PSK-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CCM, "TLS-PSK-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_PSK_WITH_AES_128_CCM_8, "TLS-PSK-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-PSK-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-PSK-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-PSK-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-PSK-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1169,22 +1379,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_RC4_128_SHA, "TLS-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_PSK_WITH_RC4_128_SHA, "TLS-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ @@ -1193,111 +1407,139 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, "TLS-DHE-PSK-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_GCM_SHA256, "TLS-DHE-PSK-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, "TLS-DHE-PSK-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_GCM_SHA384, "TLS-DHE-PSK-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CBC_SHA, "TLS-DHE-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CBC_SHA, "TLS-DHE-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM, "TLS-DHE-PSK-WITH-AES-256-CCM", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8, "TLS-DHE-PSK-WITH-AES-256-CCM-8", - MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM, "TLS-DHE-PSK-WITH-AES-128-CCM", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - { MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8, "TLS-DHE-PSK-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM, "TLS-DHE-PSK-WITH-AES-256-CCM", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_256_CCM_8, "TLS-DHE-PSK-WITH-AES-256-CCM-8", + MBEDTLS_CIPHER_AES_256_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM, "TLS-DHE-PSK-WITH-AES-128-CCM", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + { + MBEDTLS_TLS_DHE_PSK_WITH_AES_128_CCM_8, "TLS-DHE-PSK-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-DHE-PSK-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-DHE-PSK-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1305,22 +1547,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-DHE-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA, "TLS-DHE-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA, "TLS-DHE-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ @@ -1330,33 +1576,41 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA, "TLS-ECDHE-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_AES_C */ @@ -1364,19 +1618,23 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-ECDHE-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-ECDHE-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1384,22 +1642,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-ECDHE-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA, "TLS-ECDHE-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA, "TLS-ECDHE-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ @@ -1408,51 +1670,63 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, "TLS-RSA-PSK-WITH-AES-128-GCM-SHA256", - MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_GCM_SHA256, "TLS-RSA-PSK-WITH-AES-128-GCM-SHA256", + MBEDTLS_CIPHER_AES_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, "TLS-RSA-PSK-WITH-AES-256-GCM-SHA384", - MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_256_GCM_SHA384, "TLS-RSA-PSK-WITH-AES-256-GCM-SHA384", + MBEDTLS_CIPHER_AES_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA256", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA256, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA256", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA384", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA384, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA384", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA", - MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, - - { MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA", - MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_128_CBC_SHA, "TLS-RSA-PSK-WITH-AES-128-CBC-SHA", + MBEDTLS_CIPHER_AES_128_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, + + { + MBEDTLS_TLS_RSA_PSK_WITH_AES_256_CBC_SHA, "TLS-RSA-PSK-WITH-AES-256-CBC-SHA", + MBEDTLS_CIPHER_AES_256_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_AES_C */ @@ -1460,37 +1734,45 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CAMELLIA_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-CBC-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-CBC-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_CBC, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-CBC-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-CBC-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_CBC, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #if defined(MBEDTLS_GCM_C) #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-GCM-SHA256", - MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256, "TLS-RSA-PSK-WITH-CAMELLIA-128-GCM-SHA256", + MBEDTLS_CIPHER_CAMELLIA_128_GCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA256_C */ #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-GCM-SHA384", - MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384, "TLS-RSA-PSK-WITH-CAMELLIA-256-GCM-SHA384", + MBEDTLS_CIPHER_CAMELLIA_256_GCM, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_GCM_C */ #endif /* MBEDTLS_CAMELLIA_C */ @@ -1498,22 +1780,26 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_DES_C) #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-PSK-WITH-3DES-EDE-CBC-SHA", - MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - 0 }, + { + MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA, "TLS-RSA-PSK-WITH-3DES-EDE-CBC-SHA", + MBEDTLS_CIPHER_DES_EDE3_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + 0 + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_ARC4_C) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA, "TLS-RSA-PSK-WITH-RC4-128-SHA", - MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_NODTLS }, + { + MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA, "TLS-RSA-PSK-WITH-RC4-128-SHA", + MBEDTLS_CIPHER_ARC4_128, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_NODTLS + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_ARC4_C */ #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ @@ -1521,11 +1807,13 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) #if defined(MBEDTLS_AES_C) #if defined(MBEDTLS_CCM_C) - { MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, "TLS-ECJPAKE-WITH-AES-128-CCM-8", - MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECJPAKE, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_SHORT_TAG }, + { + MBEDTLS_TLS_ECJPAKE_WITH_AES_128_CCM_8, "TLS-ECJPAKE-WITH-AES-128-CCM-8", + MBEDTLS_CIPHER_AES_128_CCM, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECJPAKE, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_SHORT_TAG + }, #endif /* MBEDTLS_CCM_C */ #endif /* MBEDTLS_AES_C */ #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -1534,131 +1822,161 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CIPHER_NULL_CIPHER) #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) #if defined(MBEDTLS_MD5_C) - { MBEDTLS_TLS_RSA_WITH_NULL_MD5, "TLS-RSA-WITH-NULL-MD5", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_NULL_MD5, "TLS-RSA-WITH-NULL-MD5", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_MD5, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_NULL_SHA, "TLS-RSA-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_NULL_SHA, "TLS-RSA-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_WITH_NULL_SHA256, "TLS-RSA-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_NULL_SHA256, "TLS-RSA-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_PSK_WITH_NULL_SHA, "TLS-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_PSK_WITH_NULL_SHA, "TLS-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_PSK_WITH_NULL_SHA256, "TLS-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_PSK_WITH_NULL_SHA256, "TLS-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_PSK_WITH_NULL_SHA384, "TLS-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_PSK_WITH_NULL_SHA384, "TLS-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA, "TLS-DHE-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA, "TLS-DHE-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256, "TLS-DHE-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA256, "TLS-DHE-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384, "TLS-DHE-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_PSK_WITH_NULL_SHA384, "TLS-DHE-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_DHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA, "TLS-ECDHE-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA, "TLS-ECDHE-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256, "TLS-ECDHE-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA256, "TLS-ECDHE-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384, "TLS-ECDHE-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_ECDHE_PSK_WITH_NULL_SHA384, "TLS-ECDHE-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_ECDHE_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA, "TLS-RSA-PSK-WITH-NULL-SHA", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA, "TLS-RSA-PSK-WITH-NULL-SHA", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #if defined(MBEDTLS_SHA256_C) - { MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256, "TLS-RSA-PSK-WITH-NULL-SHA256", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA256, "TLS-RSA-PSK-WITH-NULL-SHA256", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA256, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #if defined(MBEDTLS_SHA512_C) - { MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384, "TLS-RSA-PSK-WITH-NULL-SHA384", - MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_PSK_WITH_NULL_SHA384, "TLS-RSA-PSK-WITH-NULL-SHA384", + MBEDTLS_CIPHER_NULL, MBEDTLS_MD_SHA384, MBEDTLS_KEY_EXCHANGE_RSA_PSK, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_1, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #endif /* MBEDTLS_CIPHER_NULL_CIPHER */ @@ -1667,36 +1985,42 @@ static const mbedtls_ssl_ciphersuite_t ciphersuite_definitions[] = #if defined(MBEDTLS_CIPHER_MODE_CBC) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA, "TLS-DHE-RSA-WITH-DES-CBC-SHA", - MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA, "TLS-DHE-RSA-WITH-DES-CBC-SHA", + MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_DHE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) #if defined(MBEDTLS_SHA1_C) - { MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA, "TLS-RSA-WITH-DES-CBC-SHA", - MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, - MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, - MBEDTLS_CIPHERSUITE_WEAK }, + { + MBEDTLS_TLS_RSA_WITH_DES_CBC_SHA, "TLS-RSA-WITH-DES-CBC-SHA", + MBEDTLS_CIPHER_DES_CBC, MBEDTLS_MD_SHA1, MBEDTLS_KEY_EXCHANGE_RSA, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_0, + MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3, + MBEDTLS_CIPHERSUITE_WEAK + }, #endif /* MBEDTLS_SHA1_C */ #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* MBEDTLS_DES_C */ #endif /* MBEDTLS_ENABLE_WEAK_CIPHERSUITES */ - { 0, "", - MBEDTLS_CIPHER_NONE, MBEDTLS_MD_NONE, MBEDTLS_KEY_EXCHANGE_NONE, - 0, 0, 0, 0, 0 } + { + 0, "", + MBEDTLS_CIPHER_NONE, MBEDTLS_MD_NONE, MBEDTLS_KEY_EXCHANGE_NONE, + 0, 0, 0, 0, 0 + } }; #if defined(MBEDTLS_SSL_CIPHERSUITES) const int *mbedtls_ssl_list_ciphersuites( void ) { - return( ciphersuite_preference ); + return ( ciphersuite_preference ); } #else #define MAX_CIPHERSUITES sizeof( ciphersuite_definitions ) / \ @@ -1710,65 +2034,61 @@ const int *mbedtls_ssl_list_ciphersuites( void ) * On initial call filter out all ciphersuites not supported by current * build based on presence in the ciphersuite_definitions. */ - if( supported_init == 0 ) - { + if ( supported_init == 0 ) { const int *p; int *q; - for( p = ciphersuite_preference, q = supported_ciphersuites; - *p != 0 && q < supported_ciphersuites + MAX_CIPHERSUITES - 1; - p++ ) - { + for ( p = ciphersuite_preference, q = supported_ciphersuites; + *p != 0 && q < supported_ciphersuites + MAX_CIPHERSUITES - 1; + p++ ) { #if defined(MBEDTLS_REMOVE_ARC4_CIPHERSUITES) const mbedtls_ssl_ciphersuite_t *cs_info; - if( ( cs_info = mbedtls_ssl_ciphersuite_from_id( *p ) ) != NULL && - cs_info->cipher != MBEDTLS_CIPHER_ARC4_128 ) + if ( ( cs_info = mbedtls_ssl_ciphersuite_from_id( *p ) ) != NULL && + cs_info->cipher != MBEDTLS_CIPHER_ARC4_128 ) #else - if( mbedtls_ssl_ciphersuite_from_id( *p ) != NULL ) + if ( mbedtls_ssl_ciphersuite_from_id( *p ) != NULL ) #endif - *(q++) = *p; + * (q++) = *p; } *q = 0; supported_init = 1; } - return( supported_ciphersuites ); + return ( supported_ciphersuites ); } #endif /* MBEDTLS_SSL_CIPHERSUITES */ const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_string( - const char *ciphersuite_name ) + const char *ciphersuite_name ) { const mbedtls_ssl_ciphersuite_t *cur = ciphersuite_definitions; - if( NULL == ciphersuite_name ) - return( NULL ); + if ( NULL == ciphersuite_name ) + return ( NULL ); - while( cur->id != 0 ) - { - if( 0 == strcmp( cur->name, ciphersuite_name ) ) - return( cur ); + while ( cur->id != 0 ) { + if ( 0 == strcmp( cur->name, ciphersuite_name ) ) + return ( cur ); cur++; } - return( NULL ); + return ( NULL ); } const mbedtls_ssl_ciphersuite_t *mbedtls_ssl_ciphersuite_from_id( int ciphersuite ) { const mbedtls_ssl_ciphersuite_t *cur = ciphersuite_definitions; - while( cur->id != 0 ) - { - if( cur->id == ciphersuite ) - return( cur ); + while ( cur->id != 0 ) { + if ( cur->id == ciphersuite ) + return ( cur ); cur++; } - return( NULL ); + return ( NULL ); } const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ) @@ -1777,10 +2097,10 @@ const char *mbedtls_ssl_get_ciphersuite_name( const int ciphersuite_id ) cur = mbedtls_ssl_ciphersuite_from_id( ciphersuite_id ); - if( cur == NULL ) - return( "unknown" ); + if ( cur == NULL ) + return ( "unknown" ); - return( cur->name ); + return ( cur->name ); } int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ) @@ -1789,32 +2109,31 @@ int mbedtls_ssl_get_ciphersuite_id( const char *ciphersuite_name ) cur = mbedtls_ssl_ciphersuite_from_string( ciphersuite_name ); - if( cur == NULL ) - return( 0 ); + if ( cur == NULL ) + return ( 0 ); - return( cur->id ); + return ( cur->id ); } #if defined(MBEDTLS_PK_C) mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg( const mbedtls_ssl_ciphersuite_t *info ) { - switch( info->key_exchange ) - { + switch ( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_RSA: case MBEDTLS_KEY_EXCHANGE_DHE_RSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: case MBEDTLS_KEY_EXCHANGE_RSA_PSK: - return( MBEDTLS_PK_RSA ); + return ( MBEDTLS_PK_RSA ); case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: - return( MBEDTLS_PK_ECDSA ); + return ( MBEDTLS_PK_ECDSA ); case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: - return( MBEDTLS_PK_ECKEY ); + return ( MBEDTLS_PK_ECKEY ); default: - return( MBEDTLS_PK_NONE ); + return ( MBEDTLS_PK_NONE ); } } #endif /* MBEDTLS_PK_C */ @@ -1822,17 +2141,16 @@ mbedtls_pk_type_t mbedtls_ssl_get_ciphersuite_sig_pk_alg( const mbedtls_ssl_ciph #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) int mbedtls_ssl_ciphersuite_uses_ec( const mbedtls_ssl_ciphersuite_t *info ) { - switch( info->key_exchange ) - { + switch ( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_ECDHE_RSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA: case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK: case MBEDTLS_KEY_EXCHANGE_ECDH_RSA: case MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA: - return( 1 ); + return ( 1 ); default: - return( 0 ); + return ( 0 ); } } #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C */ @@ -1840,16 +2158,15 @@ int mbedtls_ssl_ciphersuite_uses_ec( const mbedtls_ssl_ciphersuite_t *info ) #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) int mbedtls_ssl_ciphersuite_uses_psk( const mbedtls_ssl_ciphersuite_t *info ) { - switch( info->key_exchange ) - { + switch ( info->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_PSK: case MBEDTLS_KEY_EXCHANGE_RSA_PSK: case MBEDTLS_KEY_EXCHANGE_DHE_PSK: case MBEDTLS_KEY_EXCHANGE_ECDHE_PSK: - return( 1 ); + return ( 1 ); default: - return( 0 ); + return ( 0 ); } } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ diff --git a/external_libs/mbedtls/library/ssl_cli.c b/external_libs/mbedtls/library/ssl_cli.c index 223823b..b1b81c9 100644 --- a/external_libs/mbedtls/library/ssl_cli.c +++ b/external_libs/mbedtls/library/ssl_cli.c @@ -49,8 +49,10 @@ #if defined(MBEDTLS_SSL_SESSION_TICKETS) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #endif @@ -65,16 +67,15 @@ static void ssl_write_hostname_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->hostname == NULL ) + if ( ssl->hostname == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding server name extension: %s", - ssl->hostname ) ); + ssl->hostname ) ); hostname_len = strlen( ssl->hostname ); - if( end < p || (size_t)( end - p ) < hostname_len + 9 ) - { + if ( end < p || (size_t)( end - p ) < hostname_len + 9 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -118,21 +119,20 @@ static void ssl_write_hostname_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_RENEGOTIATION) static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) + if ( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding renegotiation extension" ) ); - if( end < p || (size_t)( end - p ) < 5 + ssl->verify_data_len ) - { + if ( end < p || (size_t)( end - p ) < 5 + ssl->verify_data_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -159,8 +159,8 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -172,13 +172,12 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->max_minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( ssl->conf->max_minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding signature_algorithms extension" ) ); - for( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) - { + for ( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) { #if defined(MBEDTLS_ECDSA_C) sig_alg_len += 2; #endif @@ -187,8 +186,7 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, #endif } - if( end < p || (size_t)( end - p ) < sig_alg_len + 6 ) - { + if ( end < p || (size_t)( end - p ) < sig_alg_len + 6 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -198,8 +196,7 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, */ sig_alg_len = 0; - for( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) - { + for ( md = ssl->conf->sig_hashes; *md != MBEDTLS_MD_NONE; md++ ) { #if defined(MBEDTLS_ECDSA_C) sig_alg_list[sig_alg_len++] = mbedtls_ssl_hash_from_md_alg( *md ); sig_alg_list[sig_alg_len++] = MBEDTLS_SSL_SIG_ECDSA; @@ -244,8 +241,8 @@ static void ssl_write_signature_algorithms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -263,15 +260,12 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding supported_elliptic_curves extension" ) ); #if defined(MBEDTLS_ECP_C) - for( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) - { + for ( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) { info = mbedtls_ecp_curve_info_from_grp_id( *grp_id ); #else - for( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) - { + for ( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) { #endif - if( info == NULL ) - { + if ( info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid curve in ssl configuration" ) ); return; } @@ -279,8 +273,7 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, elliptic_curve_len += 2; } - if( end < p || (size_t)( end - p ) < 6 + elliptic_curve_len ) - { + if ( end < p || (size_t)( end - p ) < 6 + elliptic_curve_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -288,18 +281,16 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, elliptic_curve_len = 0; #if defined(MBEDTLS_ECP_C) - for( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) - { + for ( grp_id = ssl->conf->curve_list; *grp_id != MBEDTLS_ECP_DP_NONE; grp_id++ ) { info = mbedtls_ecp_curve_info_from_grp_id( *grp_id ); #else - for( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) - { + for ( info = mbedtls_ecp_curve_list(); info->grp_id != MBEDTLS_ECP_DP_NONE; info++ ) { #endif elliptic_curve_list[elliptic_curve_len++] = info->tls_id >> 8; elliptic_curve_list[elliptic_curve_len++] = info->tls_id & 0xFF; } - if( elliptic_curve_len == 0 ) + if ( elliptic_curve_len == 0 ) return; *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES >> 8 ) & 0xFF ); @@ -315,8 +306,8 @@ static void ssl_write_supported_elliptic_curves_ext( mbedtls_ssl_context *ssl, } static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -325,8 +316,7 @@ static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding supported_point_formats extension" ) ); - if( end < p || (size_t)( end - p ) < 6 ) - { + if ( end < p || (size_t)( end - p ) < 6 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -358,13 +348,12 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, *olen = 0; /* Skip costly extension if we can't use EC J-PAKE anyway */ - if( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) + if ( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding ecjpake_kkpp extension" ) ); - if( end - p < 4 ) - { + if ( end - p < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -377,38 +366,32 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, * We don't want to compute fresh values every time (both for performance * and consistency reasons), so cache the extension content. */ - if( ssl->handshake->ecjpake_cache == NULL || - ssl->handshake->ecjpake_cache_len == 0 ) - { + if ( ssl->handshake->ecjpake_cache == NULL || + ssl->handshake->ecjpake_cache_len == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "generating new ecjpake parameters" ) ); ret = mbedtls_ecjpake_write_round_one( &ssl->handshake->ecjpake_ctx, - p + 2, end - p - 2, &kkpp_len, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1 , "mbedtls_ecjpake_write_round_one", ret ); + p + 2, end - p - 2, &kkpp_len, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_one", ret ); return; } ssl->handshake->ecjpake_cache = mbedtls_calloc( 1, kkpp_len ); - if( ssl->handshake->ecjpake_cache == NULL ) - { + if ( ssl->handshake->ecjpake_cache == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "allocation failed" ) ); return; } memcpy( ssl->handshake->ecjpake_cache, p + 2, kkpp_len ); ssl->handshake->ecjpake_cache_len = kkpp_len; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 3, ( "re-using cached ecjpake parameters" ) ); kkpp_len = ssl->handshake->ecjpake_cache_len; - if( (size_t)( end - p - 2 ) < kkpp_len ) - { + if ( (size_t)( end - p - 2 ) < kkpp_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -425,22 +408,21 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) { + if ( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding max_fragment_length extension" ) ); - if( end < p || (size_t)( end - p ) < 5 ) - { + if ( end < p || (size_t)( end - p ) < 5 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -459,22 +441,20 @@ static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, size_t *olen ) + unsigned char *buf, size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) - { + if ( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding truncated_hmac extension" ) ); - if( end < p || (size_t)( end - p ) < 4 ) - { + if ( end < p || (size_t)( end - p ) < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -491,24 +471,22 @@ static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, size_t *olen ) + unsigned char *buf, size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; *olen = 0; - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || - ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || + ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding encrypt_then_mac " - "extension" ) ); + "extension" ) ); - if( end < p || (size_t)( end - p ) < 4 ) - { + if ( end < p || (size_t)( end - p ) < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -532,17 +510,15 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->conf->max_minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding extended_master_secret " - "extension" ) ); + "extension" ) ); - if( end < p || (size_t)( end - p ) < 4 ) - { + if ( end < p || (size_t)( end - p ) < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -559,7 +535,7 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_SESSION_TICKETS) static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, size_t *olen ) + unsigned char *buf, size_t *olen ) { unsigned char *p = buf; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; @@ -567,15 +543,13 @@ static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED ) - { + if ( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding session ticket extension" ) ); - if( end < p || (size_t)( end - p ) < 4 + tlen ) - { + if ( end < p || (size_t)( end - p ) < 4 + tlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -588,8 +562,7 @@ static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, *olen = 4; - if( ssl->session_negotiate->ticket == NULL || tlen == 0 ) - { + if ( ssl->session_negotiate->ticket == NULL || tlen == 0 ) { return; } @@ -612,18 +585,16 @@ static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl, *olen = 0; - if( ssl->conf->alpn_list == NULL ) - { + if ( ssl->conf->alpn_list == NULL ) { return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, adding alpn extension" ) ); - for( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) + for ( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) alpnlen += (unsigned char)( strlen( *cur ) & 0xFF ) + 1; - if( end < p || (size_t)( end - p ) < 6 + alpnlen ) - { + if ( end < p || (size_t)( end - p ) < 6 + alpnlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -642,8 +613,7 @@ static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl, /* Skip writing extension and list length for now */ p += 4; - for( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) - { + for ( cur = ssl->conf->alpn_list; *cur != NULL; cur++ ) { *p = (unsigned char)( strlen( *cur ) & 0xFF ); memcpy( p + 1, *cur, *p ); p += 1 + *p; @@ -676,10 +646,9 @@ static int ssl_generate_random( mbedtls_ssl_context *ssl ) * When responding to a verify request, MUST reuse random (RFC 6347 4.2.1) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->verify_cookie != NULL ) - { - return( 0 ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->verify_cookie != NULL ) { + return ( 0 ); } #endif @@ -692,16 +661,16 @@ static int ssl_generate_random( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, current time: %lu", t ) ); #else - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) + return ( ret ); p += 4; #endif /* MBEDTLS_HAVE_TIME */ - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) @@ -716,25 +685,23 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client hello" ) ); - if( ssl->conf->f_rng == NULL ) - { + if ( ssl->conf->f_rng == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no RNG provided") ); - return( MBEDTLS_ERR_SSL_NO_RNG ); + return ( MBEDTLS_ERR_SSL_NO_RNG ); } #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { ssl->major_ver = ssl->conf->min_major_ver; ssl->minor_ver = ssl->conf->min_minor_ver; } - if( ssl->conf->max_major_ver == 0 ) - { + if ( ssl->conf->max_major_ver == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "configured max major version is invalid, " - "consider using mbedtls_ssl_config_defaults()" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "consider using mbedtls_ssl_config_defaults()" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* @@ -748,16 +715,15 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) p = buf + 4; mbedtls_ssl_write_version( ssl->conf->max_major_ver, ssl->conf->max_minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); p += 2; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, max version: [%d:%d]", - buf[4], buf[5] ) ); + buf[4], buf[5] ) ); - if( ( ret = ssl_generate_random( ssl ) ) != 0 ) - { + if ( ( ret = ssl_generate_random( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_generate_random", ret ); - return( ret ); + return ( ret ); } memcpy( p, ssl->handshake->randbytes, 32 ); @@ -778,12 +744,11 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) */ n = ssl->session_negotiate->id_len; - if( n < 16 || n > 32 || + if ( n < 16 || n > 32 || #if defined(MBEDTLS_SSL_RENEGOTIATION) - ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || + ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || #endif - ssl->handshake->resume == 0 ) - { + ssl->handshake->resume == 0 ) { n = 0; } @@ -793,16 +758,15 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * generate and include a Session ID in the TLS ClientHello." */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { - if( ssl->session_negotiate->ticket != NULL && - ssl->session_negotiate->ticket_len != 0 ) - { + if ( ssl->session_negotiate->ticket != NULL && + ssl->session_negotiate->ticket_len != 0 ) { ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id, 32 ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); ssl->session_negotiate->id_len = n = 32; } @@ -811,7 +775,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) *p++ = (unsigned char) n; - for( i = 0; i < n; i++ ) + for ( i = 0; i < n; i++ ) *p++ = ssl->session_negotiate->id[i]; MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, session id len.: %d", n ) ); @@ -821,22 +785,18 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * DTLS cookie */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( ssl->handshake->verify_cookie == NULL ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( ssl->handshake->verify_cookie == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "no verify cookie to send" ) ); *p++ = 0; - } - else - { + } else { MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, cookie", - ssl->handshake->verify_cookie, - ssl->handshake->verify_cookie_len ); + ssl->handshake->verify_cookie, + ssl->handshake->verify_cookie_len ); *p++ = ssl->handshake->verify_cookie_len; memcpy( p, ssl->handshake->verify_cookie, - ssl->handshake->verify_cookie_len ); + ssl->handshake->verify_cookie_len ); p += ssl->handshake->verify_cookie_len; } } @@ -852,32 +812,31 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) q = p; p += 2; - for( i = 0; ciphersuites[i] != 0; i++ ) - { + for ( i = 0; ciphersuites[i] != 0; i++ ) { ciphersuite_info = mbedtls_ssl_ciphersuite_from_id( ciphersuites[i] ); - if( ciphersuite_info == NULL ) + if ( ciphersuite_info == NULL ) continue; - if( ciphersuite_info->min_minor_ver > ssl->conf->max_minor_ver || - ciphersuite_info->max_minor_ver < ssl->conf->min_minor_ver ) + if ( ciphersuite_info->min_minor_ver > ssl->conf->max_minor_ver || + ciphersuite_info->max_minor_ver < ssl->conf->min_minor_ver ) continue; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ( ciphersuite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ( ciphersuite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) continue; #endif #if defined(MBEDTLS_ARC4_C) - if( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && - ciphersuite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) + if ( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && + ciphersuite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) continue; #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && - mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && + mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) continue; #endif @@ -893,7 +852,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * Add TLS_EMPTY_RENEGOTIATION_INFO_SCSV */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { *p++ = (unsigned char)( MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO >> 8 ); @@ -903,8 +862,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) /* Some versions of OpenSSL don't handle it correctly if not at end */ #if defined(MBEDTLS_SSL_FALLBACK_SCSV) - if( ssl->conf->fallback == MBEDTLS_SSL_IS_FALLBACK ) - { + if ( ssl->conf->fallback == MBEDTLS_SSL_IS_FALLBACK ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "adding FALLBACK_SCSV" ) ); *p++ = (unsigned char)( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ); *p++ = (unsigned char)( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ); @@ -930,25 +888,22 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) * an actual need for it. */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) offer_compress = 0; #endif - if( offer_compress ) - { + if ( offer_compress ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 2 ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d %d", - MBEDTLS_SSL_COMPRESS_DEFLATE, MBEDTLS_SSL_COMPRESS_NULL ) ); + MBEDTLS_SSL_COMPRESS_DEFLATE, MBEDTLS_SSL_COMPRESS_NULL ) ); *p++ = 2; *p++ = MBEDTLS_SSL_COMPRESS_DEFLATE; *p++ = MBEDTLS_SSL_COMPRESS_NULL; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress len.: %d", 1 ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, compress alg.: %d", - MBEDTLS_SSL_COMPRESS_NULL ) ); + MBEDTLS_SSL_COMPRESS_NULL ) ); *p++ = 1; *p++ = MBEDTLS_SSL_COMPRESS_NULL; @@ -1020,10 +975,9 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) ((void) olen); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello, total extension length: %d", - ext_len ) ); + ext_len ) ); - if( ext_len > 0 ) - { + if ( ext_len > 0 ) { *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( ext_len ) & 0xFF ); p += ext_len; @@ -1036,193 +990,180 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write client hello" ) ); - return( 0 ); + return ( 0 ); } static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { int ret; #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { /* Check verify-data in constant-time. The length OTOH is no secret */ - if( len != 1 + ssl->verify_data_len * 2 || - buf[0] != ssl->verify_data_len * 2 || - mbedtls_ssl_safer_memcmp( buf + 1, - ssl->own_verify_data, ssl->verify_data_len ) != 0 || - mbedtls_ssl_safer_memcmp( buf + 1 + ssl->verify_data_len, - ssl->peer_verify_data, ssl->verify_data_len ) != 0 ) - { + if ( len != 1 + ssl->verify_data_len * 2 || + buf[0] != ssl->verify_data_len * 2 || + mbedtls_ssl_safer_memcmp( buf + 1, + ssl->own_verify_data, ssl->verify_data_len ) != 0 || + mbedtls_ssl_safer_memcmp( buf + 1 + ssl->verify_data_len, + ssl->peer_verify_data, ssl->verify_data_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-matching renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - } - else + } else #endif /* MBEDTLS_SSL_RENEGOTIATION */ { - if( len != 1 || buf[0] != 0x00 ) - { + if ( len != 1 || buf[0] != 0x00 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-zero length renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static int ssl_parse_max_fragment_length_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { /* * server should use the extension only if we did, * and if so the server's value should match ours (and len is always 1) */ - if( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE || - len != 1 || - buf[0] != ssl->conf->mfl_code ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE || + len != 1 || + buf[0] != ssl->conf->mfl_code ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->session_negotiate->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) static int ssl_parse_extended_ms_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->handshake->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED || - len != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->session_tickets == MBEDTLS_SSL_SESSION_TICKETS_DISABLED || + len != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ((void) buf); ssl->handshake->new_session_ticket = 1; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static int ssl_parse_supported_point_formats_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t list_size; const unsigned char *p; list_size = buf[0]; - if( list_size + 1 != len ) - { + if ( list_size + 1 != len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } p = buf + 1; - while( list_size > 0 ) - { - if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || - p[0] == MBEDTLS_ECP_PF_COMPRESSED ) - { + while ( list_size > 0 ) { + if ( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || + p[0] == MBEDTLS_ECP_PF_COMPRESSED ) { #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) ssl->handshake->ecdh_ctx.point_format = p[0]; -#endif +#endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) ssl->handshake->ecjpake_ctx.point_format = p[0]; #endif MBEDTLS_SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) ); - return( 0 ); + return ( 0 ); } list_size--; @@ -1230,7 +1171,7 @@ static int ssl_parse_supported_point_formats_ext( mbedtls_ssl_context *ssl, } MBEDTLS_SSL_DEBUG_MSG( 1, ( "no point format in common" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -1242,11 +1183,10 @@ static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl, { int ret; - if( ssl->transform_negotiate->ciphersuite_info->key_exchange != - MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ssl->transform_negotiate->ciphersuite_info->key_exchange != + MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip ecjpake kkpp extension" ) ); - return( 0 ); + return ( 0 ); } /* If we got here, we no longer need our cached extension */ @@ -1254,14 +1194,13 @@ static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl, ssl->handshake->ecjpake_cache = NULL; ssl->handshake->ecjpake_cache_len = 0; - if( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, - buf, len ) ) != 0 ) - { + if ( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, + buf, len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_one", ret ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -1273,8 +1212,8 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, const char **p; /* If we didn't send it, the server shouldn't send it */ - if( ssl->conf->alpn_list == NULL ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( ssl->conf->alpn_list == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); /* * opaque ProtocolName<1..2^8-1>; @@ -1287,29 +1226,27 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, */ /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */ - if( len < 4 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( len < 4 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); list_len = ( buf[0] << 8 ) | buf[1]; - if( list_len != len - 2 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( list_len != len - 2 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); name_len = buf[2]; - if( name_len != list_len - 1 ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + if ( name_len != list_len - 1 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); /* Check that the server chosen protocol was in our list and save it */ - for( p = ssl->conf->alpn_list; *p != NULL; p++ ) - { - if( name_len == strlen( *p ) && - memcmp( buf + 3, *p, name_len ) == 0 ) - { + for ( p = ssl->conf->alpn_list; *p != NULL; p++ ) { + if ( name_len == strlen( *p ) && + memcmp( buf + 3, *p, name_len ) == 0 ) { ssl->alpn_chosen = *p; - return( 0 ); + return ( 0 ); } } - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } #endif /* MBEDTLS_SSL_ALPN */ @@ -1339,38 +1276,35 @@ static int ssl_parse_hello_verify_request( mbedtls_ssl_context *ssl ) * Since the RFC is not clear on this point, accept DTLS 1.0 (TLS 1.1) * even is lower than our min version. */ - if( major_ver < MBEDTLS_SSL_MAJOR_VERSION_3 || - minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 || - major_ver > ssl->conf->max_major_ver || - minor_ver > ssl->conf->max_minor_ver ) - { + if ( major_ver < MBEDTLS_SSL_MAJOR_VERSION_3 || + minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 || + major_ver > ssl->conf->max_major_ver || + minor_ver > ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server version" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } cookie_len = *p++; MBEDTLS_SSL_DEBUG_BUF( 3, "cookie", p, cookie_len ); - if( ( ssl->in_msg + ssl->in_msglen ) - p < cookie_len ) - { + if ( ( ssl->in_msg + ssl->in_msglen ) - p < cookie_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, - ( "cookie length does not match incoming message size" ) ); + ( "cookie length does not match incoming message size" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } mbedtls_free( ssl->handshake->verify_cookie ); ssl->handshake->verify_cookie = mbedtls_calloc( 1, cookie_len ); - if( ssl->handshake->verify_cookie == NULL ) - { + if ( ssl->handshake->verify_cookie == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc failed (%d bytes)", cookie_len ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } memcpy( ssl->handshake->verify_cookie, p, cookie_len ); @@ -1384,7 +1318,7 @@ static int ssl_parse_hello_verify_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse hello verify request" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -1411,47 +1345,39 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) buf = ssl->in_msg; - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { ssl->renego_records_seen++; - if( ssl->conf->renego_max_records >= 0 && - ssl->renego_records_seen > ssl->conf->renego_max_records ) - { + if ( ssl->conf->renego_max_records >= 0 && + ssl->renego_records_seen > ssl->conf->renego_max_records ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation requested, " - "but not honored by server" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + "but not honored by server" ) ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-handshake message during renego" ) ); - return( MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ); + return ( MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( buf[0] == MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( buf[0] == MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received hello verify request" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello" ) ); - return( ssl_parse_hello_verify_request( ssl ) ); - } - else - { + return ( ssl_parse_hello_verify_request( ssl ) ); + } else { /* We made it through the verification process */ mbedtls_free( ssl->handshake->verify_cookie ); ssl->handshake->verify_cookie = NULL; @@ -1460,11 +1386,10 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - if( ssl->in_hslen < 38 + mbedtls_ssl_hs_hdr_len( ssl ) || - buf[0] != MBEDTLS_SSL_HS_SERVER_HELLO ) - { + if ( ssl->in_hslen < 38 + mbedtls_ssl_hs_hdr_len( ssl ) || + buf[0] != MBEDTLS_SSL_HS_SERVER_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } /* @@ -1482,30 +1407,29 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, version", buf + 0, 2 ); mbedtls_ssl_read_version( &ssl->major_ver, &ssl->minor_ver, - ssl->conf->transport, buf + 0 ); + ssl->conf->transport, buf + 0 ); - if( ssl->major_ver < ssl->conf->min_major_ver || - ssl->minor_ver < ssl->conf->min_minor_ver || - ssl->major_ver > ssl->conf->max_major_ver || - ssl->minor_ver > ssl->conf->max_minor_ver ) - { + if ( ssl->major_ver < ssl->conf->min_major_ver || + ssl->minor_ver < ssl->conf->min_minor_ver || + ssl->major_ver > ssl->conf->max_major_ver || + ssl->minor_ver > ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server version out of bounds - " - " min: [%d:%d], server: [%d:%d], max: [%d:%d]", - ssl->conf->min_major_ver, ssl->conf->min_minor_ver, - ssl->major_ver, ssl->minor_ver, - ssl->conf->max_major_ver, ssl->conf->max_minor_ver ) ); + " min: [%d:%d], server: [%d:%d], max: [%d:%d]", + ssl->conf->min_major_ver, ssl->conf->min_minor_ver, + ssl->major_ver, ssl->minor_ver, + ssl->conf->max_major_ver, ssl->conf->max_minor_ver ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } #if defined(MBEDTLS_DEBUG_C) t = ( (uint32_t) buf[2] << 24 ) - | ( (uint32_t) buf[3] << 16 ) - | ( (uint32_t) buf[4] << 8 ) - | ( (uint32_t) buf[5] ); + | ( (uint32_t) buf[3] << 16 ) + | ( (uint32_t) buf[4] << 8 ) + | ( (uint32_t) buf[5] ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) ); #endif @@ -1515,32 +1439,25 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, random bytes", buf + 2, 32 ); - if( n > 32 ) - { + if ( n > 32 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - if( ssl->in_hslen > mbedtls_ssl_hs_hdr_len( ssl ) + 39 + n ) - { + if ( ssl->in_hslen > mbedtls_ssl_hs_hdr_len( ssl ) + 39 + n ) { ext_len = ( ( buf[38 + n] << 8 ) - | ( buf[39 + n] ) ); + | ( buf[39 + n] ) ); - if( ( ext_len > 0 && ext_len < 4 ) || - ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 40 + n + ext_len ) - { + if ( ( ext_len > 0 && ext_len < 4 ) || + ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 40 + n + ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - } - else if( ssl->in_hslen == mbedtls_ssl_hs_hdr_len( ssl ) + 38 + n ) - { + } else if ( ssl->in_hslen == mbedtls_ssl_hs_hdr_len( ssl ) + 38 + n ) { ext_len = 0; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } /* ciphersuite (used later) */ @@ -1554,20 +1471,20 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_ZLIB_SUPPORT) /* See comments in ssl_write_client_hello() */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) accept_comp = 0; else #endif accept_comp = 1; - if( comp != MBEDTLS_SSL_COMPRESS_NULL && - ( comp != MBEDTLS_SSL_COMPRESS_DEFLATE || accept_comp == 0 ) ) + if ( comp != MBEDTLS_SSL_COMPRESS_NULL && + ( comp != MBEDTLS_SSL_COMPRESS_DEFLATE || accept_comp == 0 ) ) #else /* MBEDTLS_ZLIB_SUPPORT */ - if( comp != MBEDTLS_SSL_COMPRESS_NULL ) + if ( comp != MBEDTLS_SSL_COMPRESS_NULL ) #endif/* MBEDTLS_ZLIB_SUPPORT */ { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server hello, bad compression: %d", comp ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } /* @@ -1575,10 +1492,9 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) */ ssl->transform_negotiate->ciphersuite_info = mbedtls_ssl_ciphersuite_from_id( i ); - if( ssl->transform_negotiate->ciphersuite_info == NULL ) - { + if ( ssl->transform_negotiate->ciphersuite_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ciphersuite info for %04x not found", i ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } mbedtls_ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); @@ -1589,15 +1505,14 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) /* * Check if the session can be resumed */ - if( ssl->handshake->resume == 0 || n == 0 || + if ( ssl->handshake->resume == 0 || n == 0 || #if defined(MBEDTLS_SSL_RENEGOTIATION) - ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || + ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE || #endif - ssl->session_negotiate->ciphersuite != i || - ssl->session_negotiate->compression != comp || - ssl->session_negotiate->id_len != n || - memcmp( ssl->session_negotiate->id, buf + 35, n ) != 0 ) - { + ssl->session_negotiate->ciphersuite != i || + ssl->session_negotiate->compression != comp || + ssl->session_negotiate->id_len != n || + memcmp( ssl->session_negotiate->id, buf + 35, n ) != 0 ) { ssl->state++; ssl->handshake->resume = 0; #if defined(MBEDTLS_HAVE_TIME) @@ -1607,62 +1522,54 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) ssl->session_negotiate->compression = comp; ssl->session_negotiate->id_len = n; memcpy( ssl->session_negotiate->id, buf + 35, n ); - } - else - { + } else { ssl->state = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC; - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } } MBEDTLS_SSL_DEBUG_MSG( 3, ( "%s session has been resumed", - ssl->handshake->resume ? "a" : "no" ) ); + ssl->handshake->resume ? "a" : "no" ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %04x", i ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: %d", buf[37 + n] ) ); suite_info = mbedtls_ssl_ciphersuite_from_id( ssl->session_negotiate->ciphersuite ); - if( suite_info == NULL + if ( suite_info == NULL #if defined(MBEDTLS_ARC4_C) - || ( ssl->conf->arc4_disabled && - suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) + || ( ssl->conf->arc4_disabled && + suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) #endif - ) - { + ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %s", suite_info->name ) ); i = 0; - while( 1 ) - { - if( ssl->conf->ciphersuite_list[ssl->minor_ver][i] == 0 ) - { + while ( 1 ) { + if ( ssl->conf->ciphersuite_list[ssl->minor_ver][i] == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - if( ssl->conf->ciphersuite_list[ssl->minor_ver][i++] == - ssl->session_negotiate->ciphersuite ) - { + if ( ssl->conf->ciphersuite_list[ssl->minor_ver][i++] == + ssl->session_negotiate->ciphersuite ) { break; } } - if( comp != MBEDTLS_SSL_COMPRESS_NULL + if ( comp != MBEDTLS_SSL_COMPRESS_NULL #if defined(MBEDTLS_ZLIB_SUPPORT) - && comp != MBEDTLS_SSL_COMPRESS_DEFLATE + && comp != MBEDTLS_SSL_COMPRESS_DEFLATE #endif - ) - { + ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } ssl->session_negotiate->compression = comp; @@ -1670,195 +1577,177 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "server hello, total extension length: %d", ext_len ) ); - while( ext_len ) - { + while ( ext_len ) { unsigned int ext_id = ( ( ext[0] << 8 ) - | ( ext[1] ) ); + | ( ext[1] ) ); unsigned int ext_size = ( ( ext[2] << 8 ) - | ( ext[3] ) ); + | ( ext[3] ) ); - if( ext_size + 4 > ext_len ) - { + if ( ext_size + 4 > ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } - switch( ext_id ) - { - case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); + switch ( ext_id ) { + case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - renegotiation_info_seen = 1; + renegotiation_info_seen = 1; #endif - if( ( ret = ssl_parse_renegotiation_info( ssl, ext + 4, - ext_size ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_parse_renegotiation_info( ssl, ext + 4, + ext_size ) ) != 0 ) + return ( ret ); - break; + break; #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max_fragment_length extension" ) ); + case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max_fragment_length extension" ) ); - if( ( ret = ssl_parse_max_fragment_length_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_max_fragment_length_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated_hmac extension" ) ); + case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated_hmac extension" ) ); - if( ( ret = ssl_parse_truncated_hmac_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_truncated_hmac_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt_then_mac extension" ) ); + case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt_then_mac extension" ) ); - if( ( ret = ssl_parse_encrypt_then_mac_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_encrypt_then_mac_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended_master_secret extension" ) ); + case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended_master_secret extension" ) ); - if( ( ret = ssl_parse_extended_ms_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_extended_ms_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - case MBEDTLS_TLS_EXT_SESSION_TICKET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session_ticket extension" ) ); + case MBEDTLS_TLS_EXT_SESSION_TICKET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session_ticket extension" ) ); - if( ( ret = ssl_parse_session_ticket_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_session_ticket_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported_point_formats extension" ) ); + case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported_point_formats extension" ) ); - if( ( ret = ssl_parse_supported_point_formats_ext( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_supported_point_formats_ext( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake_kkpp extension" ) ); + case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake_kkpp extension" ) ); - if( ( ret = ssl_parse_ecjpake_kkpp( ssl, - ext + 4, ext_size ) ) != 0 ) - { - return( ret ); - } + if ( ( ret = ssl_parse_ecjpake_kkpp( ssl, + ext + 4, ext_size ) ) != 0 ) { + return ( ret ); + } - break; + break; #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_SSL_ALPN) - case MBEDTLS_TLS_EXT_ALPN: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); + case MBEDTLS_TLS_EXT_ALPN: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); - if( ( ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ) ) != 0 ) + return ( ret ); - break; + break; #endif /* MBEDTLS_SSL_ALPN */ - default: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", - ext_id ) ); + default: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", + ext_id ) ); } ext_len -= 4 + ext_size; ext += 4 + ext_size; - if( ext_len > 0 && ext_len < 4 ) - { + if ( ext_len > 0 && ext_len < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } } /* * Renegotiation security checks */ - if( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) - { + if ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); handshake_failure = 1; } #if defined(MBEDTLS_SSL_RENEGOTIATION) - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && - renegotiation_info_seen == 0 ) - { + else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && + renegotiation_info_seen == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - renegotiation_info_seen == 1 ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + renegotiation_info_seen == 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) ); handshake_failure = 1; } #endif /* MBEDTLS_SSL_RENEGOTIATION */ - if( handshake_failure == 1 ) - { - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( handshake_failure == 1 ) { + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ @@ -1877,25 +1766,23 @@ static int ssl_parse_server_dh_params( mbedtls_ssl_context *ssl, unsigned char * * opaque dh_Ys<1..2^16-1>; * } ServerDHParams; */ - if( ( ret = mbedtls_dhm_read_params( &ssl->handshake->dhm_ctx, p, end ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_read_params( &ssl->handshake->dhm_ctx, p, end ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 2, ( "mbedtls_dhm_read_params" ), ret ); - return( ret ); + return ( ret ); } - if( ssl->handshake->dhm_ctx.len * 8 < ssl->conf->dhm_min_bitlen ) - { + if ( ssl->handshake->dhm_ctx.len * 8 < ssl->conf->dhm_min_bitlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "DHM prime too short: %d < %d", ssl->handshake->dhm_ctx.len * 8, ssl->conf->dhm_min_bitlen ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: P ", &ssl->handshake->dhm_ctx.P ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: G ", &ssl->handshake->dhm_ctx.G ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ @@ -1910,25 +1797,24 @@ static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl ) const mbedtls_ecp_curve_info *curve_info; curve_info = mbedtls_ecp_curve_info_from_grp_id( ssl->handshake->ecdh_ctx.grp.id ); - if( curve_info == NULL ) - { + if ( curve_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDH curve: %s", curve_info->name ) ); #if defined(MBEDTLS_ECP_C) - if( mbedtls_ssl_check_curve( ssl, ssl->handshake->ecdh_ctx.grp.id ) != 0 ) + if ( mbedtls_ssl_check_curve( ssl, ssl->handshake->ecdh_ctx.grp.id ) != 0 ) #else - if( ssl->handshake->ecdh_ctx.grp.nbits < 163 || - ssl->handshake->ecdh_ctx.grp.nbits > 521 ) + if ( ssl->handshake->ecdh_ctx.grp.nbits < 163 || + ssl->handshake->ecdh_ctx.grp.nbits > 521 ) #endif - return( -1 ); + return ( -1 ); MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp", &ssl->handshake->ecdh_ctx.Qp ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || @@ -1940,8 +1826,8 @@ static int ssl_check_server_ecdh_params( const mbedtls_ssl_context *ssl ) defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl, - unsigned char **p, - unsigned char *end ) + unsigned char **p, + unsigned char *end ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; @@ -1953,20 +1839,18 @@ static int ssl_parse_server_ecdh_params( mbedtls_ssl_context *ssl, * ECPoint public; * } ServerECDHParams; */ - if( ( ret = mbedtls_ecdh_read_params( &ssl->handshake->ecdh_ctx, - (const unsigned char **) p, end ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_read_params( &ssl->handshake->ecdh_ctx, + (const unsigned char **) p, end ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_read_params" ), ret ); - return( ret ); + return ( ret ); } - if( ssl_check_server_ecdh_params( ssl ) != 0 ) - { + if ( ssl_check_server_ecdh_params( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message (ECDHE curve)" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || @@ -1989,10 +1873,9 @@ static int ssl_parse_server_psk_hint( mbedtls_ssl_context *ssl, len = (*p)[0] << 8 | (*p)[1]; *p += 2; - if( (*p) + len > end ) - { + if ( (*p) + len > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message (psk_identity_hint length)" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } /* @@ -2003,7 +1886,7 @@ static int ssl_parse_server_psk_hint( mbedtls_ssl_context *ssl, *p += len; ret = 0; - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ @@ -2020,10 +1903,9 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, size_t len_bytes = ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ? 0 : 2; unsigned char *p = ssl->handshake->premaster + pms_offset; - if( offset + len_bytes > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( offset + len_bytes > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small for encrypted pms" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } /* @@ -2034,53 +1916,48 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, * } PreMasterSecret; */ mbedtls_ssl_write_version( ssl->conf->max_major_ver, ssl->conf->max_minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p + 2, 46 ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p + 2, 46 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "f_rng", ret ); - return( ret ); + return ( ret ); } ssl->handshake->pmslen = 48; - if( ssl->session_negotiate->peer_cert == NULL ) - { + if ( ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "certificate required" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* * Now write it out, encrypted */ - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, - MBEDTLS_PK_RSA ) ) - { + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, + MBEDTLS_PK_RSA ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "certificate key type mismatch" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_pk_encrypt( &ssl->session_negotiate->peer_cert->pk, - p, ssl->handshake->pmslen, - ssl->out_msg + offset + len_bytes, olen, - MBEDTLS_SSL_MAX_CONTENT_LEN - offset - len_bytes, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_encrypt( &ssl->session_negotiate->peer_cert->pk, + p, ssl->handshake->pmslen, + ssl->out_msg + offset + len_bytes, olen, + MBEDTLS_SSL_MAX_CONTENT_LEN - offset - len_bytes, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_rsa_pkcs1_encrypt", ret ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( len_bytes == 2 ) - { - ssl->out_msg[offset+0] = (unsigned char)( *olen >> 8 ); - ssl->out_msg[offset+1] = (unsigned char)( *olen ); + if ( len_bytes == 2 ) { + ssl->out_msg[offset + 0] = (unsigned char)( *olen >> 8 ); + ssl->out_msg[offset + 1] = (unsigned char)( *olen ); *olen += 2; } #endif - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ @@ -2090,59 +1967,55 @@ static int ssl_write_encrypted_pms( mbedtls_ssl_context *ssl, defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) static int ssl_parse_signature_algorithm( mbedtls_ssl_context *ssl, - unsigned char **p, - unsigned char *end, - mbedtls_md_type_t *md_alg, - mbedtls_pk_type_t *pk_alg ) + unsigned char **p, + unsigned char *end, + mbedtls_md_type_t *md_alg, + mbedtls_pk_type_t *pk_alg ) { ((void) ssl); *md_alg = MBEDTLS_MD_NONE; *pk_alg = MBEDTLS_PK_NONE; /* Only in TLS 1.2 */ - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) - { - return( 0 ); + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { + return ( 0 ); } - if( (*p) + 2 > end ) - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + if ( (*p) + 2 > end ) + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); /* * Get hash algorithm */ - if( ( *md_alg = mbedtls_ssl_md_alg_from_hash( (*p)[0] ) ) == MBEDTLS_MD_NONE ) - { + if ( ( *md_alg = mbedtls_ssl_md_alg_from_hash( (*p)[0] ) ) == MBEDTLS_MD_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Server used unsupported " - "HashAlgorithm %d", *(p)[0] ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + "HashAlgorithm %d", *(p)[0] ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } /* * Get signature algorithm */ - if( ( *pk_alg = mbedtls_ssl_pk_alg_from_sig( (*p)[1] ) ) == MBEDTLS_PK_NONE ) - { + if ( ( *pk_alg = mbedtls_ssl_pk_alg_from_sig( (*p)[1] ) ) == MBEDTLS_PK_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server used unsupported " - "SignatureAlgorithm %d", (*p)[1] ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + "SignatureAlgorithm %d", (*p)[1] ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } /* * Check if the hash is acceptable */ - if( mbedtls_ssl_check_sig_hash( ssl, *md_alg ) != 0 ) - { + if ( mbedtls_ssl_check_sig_hash( ssl, *md_alg ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server used HashAlgorithm " "that was not offered" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "Server used SignatureAlgorithm %d", (*p)[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "Server used HashAlgorithm %d", (*p)[0] ) ); *p += 2; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || @@ -2156,35 +2029,31 @@ static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl ) int ret; const mbedtls_ecp_keypair *peer_key; - if( ssl->session_negotiate->peer_cert == NULL ) - { + if ( ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "certificate required" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, - MBEDTLS_PK_ECKEY ) ) - { + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, + MBEDTLS_PK_ECKEY ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } peer_key = mbedtls_pk_ec( ssl->session_negotiate->peer_cert->pk ); - if( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, peer_key, - MBEDTLS_ECDH_THEIRS ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, peer_key, + MBEDTLS_ECDH_THEIRS ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_get_params" ), ret ); - return( ret ); + return ( ret ); } - if( ssl_check_server_ecdh_params( ssl ) != 0 ) - { + if ( ssl_check_server_ecdh_params( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server certificate (ECDH curve)" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ @@ -2198,11 +2067,10 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse server key exchange" ) ); #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } ((void) p); ((void) end); @@ -2210,51 +2078,45 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { - if( ( ret = ssl_get_ecdh_params_from_cert( ssl ) ) != 0 ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { + if ( ( ret = ssl_get_ecdh_params_from_cert( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_get_ecdh_params_from_cert", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } ((void) p); ((void) end); #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* * ServerKeyExchange may be skipped with PSK and RSA-PSK when the server * doesn't use a psk_identity_hint */ - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE ) - { - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_KEY_EXCHANGE ) { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { ssl->record_read = 1; goto exit; } MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); @@ -2262,83 +2124,71 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "server key exchange", p, end - p ); #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - if( ssl_parse_server_psk_hint( ssl, &p, end ) != 0 ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + if ( ssl_parse_server_psk_hint( ssl, &p, end ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } } /* FALLTROUGH */ #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) ; /* nothing more to do */ else #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED || MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - if( ssl_parse_server_dh_params( ssl, &p, end ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + if ( ssl_parse_server_dh_params( ssl, &p, end ) != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { - if( ssl_parse_server_ecdh_params( ssl, &p, end ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { + if ( ssl_parse_server_ecdh_params( ssl, &p, end ) != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { - ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, - p, end - p ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { + ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, + p, end - p ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { size_t sig_len, hashlen; unsigned char hash[64]; mbedtls_md_type_t md_alg = MBEDTLS_MD_NONE; @@ -2350,39 +2200,33 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) * Handle the digitally-signed structure */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - if( ssl_parse_signature_algorithm( ssl, &p, end, - &md_alg, &pk_alg ) != 0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + if ( ssl_parse_signature_algorithm( ssl, &p, end, + &md_alg, &pk_alg ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - if( pk_alg != mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ) ) - { + if ( pk_alg != mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) - { - pk_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) { + pk_alg = mbedtls_ssl_get_ciphersuite_sig_pk_alg( ciphersuite_info ); - /* Default hash for ECDSA is SHA-1 */ - if( pk_alg == MBEDTLS_PK_ECDSA && md_alg == MBEDTLS_MD_NONE ) - md_alg = MBEDTLS_MD_SHA1; - } - else + /* Default hash for ECDSA is SHA-1 */ + if ( pk_alg == MBEDTLS_PK_ECDSA && md_alg == MBEDTLS_MD_NONE ) + md_alg = MBEDTLS_MD_SHA1; + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* * Read signature @@ -2390,10 +2234,9 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) sig_len = ( p[0] << 8 ) | p[1]; p += 2; - if( end != p + sig_len ) - { + if ( end != p + sig_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); } MBEDTLS_SSL_DEBUG_BUF( 3, "signature", p, sig_len ); @@ -2403,8 +2246,7 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { mbedtls_md5_context mbedtls_md5; mbedtls_sha1_context mbedtls_sha1; @@ -2438,72 +2280,65 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) mbedtls_md5_free( &mbedtls_md5 ); mbedtls_sha1_free( &mbedtls_sha1 ); - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( md_alg != MBEDTLS_MD_NONE ) - { - mbedtls_md_context_t ctx; - - mbedtls_md_init( &ctx ); - - /* Info from md_alg will be used instead */ - hashlen = 0; - - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = mbedtls_md_setup( &ctx, - mbedtls_md_info_from_type( md_alg ), 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - return( ret ); - } - - mbedtls_md_starts( &ctx ); - mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); - mbedtls_md_update( &ctx, params, params_len ); - mbedtls_md_finish( &ctx, hash ); - mbedtls_md_free( &ctx ); - } - else + if ( md_alg != MBEDTLS_MD_NONE ) { + mbedtls_md_context_t ctx; + + mbedtls_md_init( &ctx ); + + /* Info from md_alg will be used instead */ + hashlen = 0; + + /* + * digitally-signed struct { + * opaque client_random[32]; + * opaque server_random[32]; + * ServerDHParams params; + * }; + */ + if ( ( ret = mbedtls_md_setup( &ctx, + mbedtls_md_info_from_type( md_alg ), 0 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); + return ( ret ); + } + + mbedtls_md_starts( &ctx ); + mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); + mbedtls_md_update( &ctx, params, params_len ); + mbedtls_md_finish( &ctx, hash ); + mbedtls_md_free( &ctx ); + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen : - (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); + (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); - if( ssl->session_negotiate->peer_cert == NULL ) - { + if ( ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "certificate required" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* * Verify signature */ - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) - { + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server key exchange message" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, - md_alg, hash, hashlen, p, sig_len ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, + md_alg, hash, hashlen, p, sig_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_verify", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || @@ -2515,7 +2350,7 @@ static int ssl_parse_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server key exchange" ) ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -2530,19 +2365,18 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) @@ -2555,29 +2389,25 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate request" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate request" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } - if( ssl->record_read == 0 ) - { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ssl->record_read == 0 ) { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } ssl->record_read = 1; @@ -2586,13 +2416,13 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) ssl->client_auth = 0; ssl->state++; - if( ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE_REQUEST ) + if ( ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE_REQUEST ) ssl->client_auth++; MBEDTLS_SSL_DEBUG_MSG( 3, ( "got %s certificate request", - ssl->client_auth ? "a" : "no" ) ); + ssl->client_auth ? "a" : "no" ) ); - if( ssl->client_auth == 0 ) + if ( ssl->client_auth == 0 ) goto exit; ssl->record_read = 0; @@ -2627,53 +2457,48 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) cert_type_len = buf[mbedtls_ssl_hs_hdr_len( ssl )]; n = cert_type_len; - if( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) - { + if ( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } /* supported_signature_algorithms */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { size_t sig_alg_len = ( ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 1 + n] << 8 ) - | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); + | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); #if defined(MBEDTLS_DEBUG_C) unsigned char* sig_alg = buf + mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n; size_t i; - for( i = 0; i < sig_alg_len; i += 2 ) - { + for ( i = 0; i < sig_alg_len; i += 2 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "Supported Signature Algorithm found: %d,%d", sig_alg[i], sig_alg[i + 1] ) ); } #endif n += 2 + sig_alg_len; - if( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) - { + if ( ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ /* certificate_authorities */ dn_len = ( ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 1 + n] << 8 ) - | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); + | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); n += dn_len; - if( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n ) - { + if ( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate request message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_REQUEST ); } exit: MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate request" ) ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -2688,39 +2513,35 @@ static int ssl_parse_server_hello_done( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse server hello done" ) ); - if( ssl->record_read == 0 ) - { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ssl->record_read == 0 ) { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } } ssl->record_read = 0; - if( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) || - ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_HELLO_DONE ) - { + if ( ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) || + ssl->in_msg[0] != MBEDTLS_SSL_HS_SERVER_HELLO_DONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello done message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO_DONE ); } ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse server hello done" ) ); - return( 0 ); + return ( 0 ); } static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) @@ -2732,8 +2553,7 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write client key exchange" ) ); #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) { /* * DHM key exchange -- send G^X mod P */ @@ -2744,223 +2564,194 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) i = 6; ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, - (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), - &ssl->out_msg[i], n, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { + (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), + &ssl->out_msg[i], n, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: X ", &ssl->handshake->dhm_ctx.X ); MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GX", &ssl->handshake->dhm_ctx.GX ); - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, - ssl->handshake->premaster, - MBEDTLS_PREMASTER_SIZE, - &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, + ssl->handshake->premaster, + MBEDTLS_PREMASTER_SIZE, + &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { - /* - * ECDH key exchange -- send client public value - */ - i = 4; + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { + /* + * ECDH key exchange -- send client public value + */ + i = 4; - ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, - &n, - &ssl->out_msg[i], 1000, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); - return( ret ); - } + ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, + &n, + &ssl->out_msg[i], 1000, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); + return ( ret ); + } - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, - &ssl->handshake->pmslen, - ssl->handshake->premaster, - MBEDTLS_MPI_MAX_SIZE, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); - return( ret ); - } + if ( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, + &ssl->handshake->pmslen, + ssl->handshake->premaster, + MBEDTLS_MPI_MAX_SIZE, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); + return ( ret ); + } - MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * opaque psk_identity<0..2^16-1>; - */ - if( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for PSK" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); - } - - i = 4; - n = ssl->conf->psk_identity_len; - - if( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity too long or " - "SSL buffer too short" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - } - - ssl->out_msg[i++] = (unsigned char)( n >> 8 ); - ssl->out_msg[i++] = (unsigned char)( n ); - - memcpy( ssl->out_msg + i, ssl->conf->psk_identity, ssl->conf->psk_identity_len ); - i += ssl->conf->psk_identity_len; + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + /* + * opaque psk_identity<0..2^16-1>; + */ + if ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for PSK" ) ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + } + + i = 4; + n = ssl->conf->psk_identity_len; + + if ( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity too long or " + "SSL buffer too short" ) ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + } + + ssl->out_msg[i++] = (unsigned char)( n >> 8 ); + ssl->out_msg[i++] = (unsigned char)( n ); + + memcpy( ssl->out_msg + i, ssl->conf->psk_identity, ssl->conf->psk_identity_len ); + i += ssl->conf->psk_identity_len; #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) - { - n = 0; - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) { + n = 0; + } else #endif #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { - if( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 2 ) ) != 0 ) - return( ret ); - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { + if ( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 2 ) ) != 0 ) + return ( ret ); + } else #endif #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - /* - * ClientDiffieHellmanPublic public (DHM send G^X mod P) - */ - n = ssl->handshake->dhm_ctx.len; - - if( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity or DHM size too long" - " or SSL buffer too short" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - } - - ssl->out_msg[i++] = (unsigned char)( n >> 8 ); - ssl->out_msg[i++] = (unsigned char)( n ); - - ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, - (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), - &ssl->out_msg[i], n, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + /* + * ClientDiffieHellmanPublic public (DHM send G^X mod P) + */ + n = ssl->handshake->dhm_ctx.len; + + if ( i + 2 + n > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "psk identity or DHM size too long" + " or SSL buffer too short" ) ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + } + + ssl->out_msg[i++] = (unsigned char)( n >> 8 ); + ssl->out_msg[i++] = (unsigned char)( n ); + + ret = mbedtls_dhm_make_public( &ssl->handshake->dhm_ctx, + (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), + &ssl->out_msg[i], n, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_public", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - /* - * ClientECDiffieHellmanPublic public; - */ - ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, &n, - &ssl->out_msg[i], MBEDTLS_SSL_MAX_CONTENT_LEN - i, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); - return( ret ); - } - - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + /* + * ClientECDiffieHellmanPublic public; + */ + ret = mbedtls_ecdh_make_public( &ssl->handshake->ecdh_ctx, &n, + &ssl->out_msg[i], MBEDTLS_SSL_MAX_CONTENT_LEN - i, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_public", ret ); + return ( ret ); + } + + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Q", &ssl->handshake->ecdh_ctx.Q ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) - { - i = 4; - if( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 0 ) ) != 0 ) - return( ret ); - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { + i = 4; + if ( ( ret = ssl_write_encrypted_pms( ssl, i, &n, 0 ) ) != 0 ) + return ( ret ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { - i = 4; - - ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, - ssl->out_msg + i, MBEDTLS_SSL_MAX_CONTENT_LEN - i, &n, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); - return( ret ); - } - - ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, - ssl->handshake->premaster, 32, &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { + i = 4; + + ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, + ssl->out_msg + i, MBEDTLS_SSL_MAX_CONTENT_LEN - i, &n, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); + return ( ret ); + } + + ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, + ssl->handshake->premaster, 32, &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ - { - ((void) ciphersuite_info); - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + ((void) ciphersuite_info); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } ssl->out_msglen = i + n; ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; @@ -2968,15 +2759,14 @@ static int ssl_write_client_key_exchange( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write client key exchange" ) ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -2992,25 +2782,23 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) @@ -3025,34 +2813,30 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate verify" ) ); - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } - if( ssl->client_auth == 0 || mbedtls_ssl_own_cert( ssl ) == NULL ) - { + if ( ssl->client_auth == 0 || mbedtls_ssl_own_cert( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } - if( mbedtls_ssl_own_key( ssl ) == NULL ) - { + if ( mbedtls_ssl_own_key( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key for certificate" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } /* @@ -3062,8 +2846,7 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { /* * digitally-signed struct { * opaque md5_hash[16]; @@ -3082,64 +2865,56 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) /* * For ECDSA, default hash is SHA-1 only */ - if( mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECDSA ) ) - { + if ( mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECDSA ) ) { hash_start += 16; hashlen -= 16; md_alg = MBEDTLS_MD_SHA1; } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - /* - * digitally-signed struct { - * opaque handshake_messages[handshake_messages_length]; - * }; - * - * Taking shortcut here. We assume that the server always allows the - * PRF Hash function and has sent it in the allowed signature - * algorithms list received in the Certificate Request message. - * - * Until we encounter a server that does not, we will take this - * shortcut. - * - * Reason: Otherwise we should have running hashes for SHA512 and SHA224 - * in order to satisfy 'weird' needs from the server side. - */ - if( ssl->transform_negotiate->ciphersuite_info->mac == - MBEDTLS_MD_SHA384 ) - { - md_alg = MBEDTLS_MD_SHA384; - ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA384; - } - else - { - md_alg = MBEDTLS_MD_SHA256; - ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA256; - } - ssl->out_msg[5] = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + /* + * digitally-signed struct { + * opaque handshake_messages[handshake_messages_length]; + * }; + * + * Taking shortcut here. We assume that the server always allows the + * PRF Hash function and has sent it in the allowed signature + * algorithms list received in the Certificate Request message. + * + * Until we encounter a server that does not, we will take this + * shortcut. + * + * Reason: Otherwise we should have running hashes for SHA512 and SHA224 + * in order to satisfy 'weird' needs from the server side. + */ + if ( ssl->transform_negotiate->ciphersuite_info->mac == + MBEDTLS_MD_SHA384 ) { + md_alg = MBEDTLS_MD_SHA384; + ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA384; + } else { + md_alg = MBEDTLS_MD_SHA256; + ssl->out_msg[4] = MBEDTLS_SSL_HASH_SHA256; + } + ssl->out_msg[5] = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); - /* Info from md_alg will be used instead */ - hashlen = 0; - offset = 2; - } - else + /* Info from md_alg will be used instead */ + hashlen = 0; + offset = 2; + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash_start, hashlen, - ssl->out_msg + 6 + offset, &n, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash_start, hashlen, + ssl->out_msg + 6 + offset, &n, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_sign", ret ); - return( ret ); + return ( ret ); } ssl->out_msg[4 + offset] = (unsigned char)( n >> 8 ); @@ -3151,15 +2926,14 @@ static int ssl_write_certificate_verify( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate verify" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -3179,16 +2953,14 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse new session ticket" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* @@ -3201,11 +2973,10 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) * 4 . 5 ticket_len (n) * 6 . 5+n ticket content */ - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_NEW_SESSION_TICKET || - ssl->in_hslen < 6 + mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_NEW_SESSION_TICKET || + ssl->in_hslen < 6 + mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); + return ( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); } msg = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); @@ -3215,10 +2986,9 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) ticket_len = ( msg[4] << 8 ) | ( msg[5] ); - if( ticket_len + 6 + mbedtls_ssl_hs_hdr_len( ssl ) != ssl->in_hslen ) - { + if ( ticket_len + 6 + mbedtls_ssl_hs_hdr_len( ssl ) != ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad new session ticket message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); + return ( MBEDTLS_ERR_SSL_BAD_HS_NEW_SESSION_TICKET ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket length: %d", ticket_len ) ); @@ -3231,19 +3001,18 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) * Zero-length ticket means the server changed his mind and doesn't want * to send a ticket after all, so just forget it */ - if( ticket_len == 0 ) - return( 0 ); + if ( ticket_len == 0 ) + return ( 0 ); mbedtls_zeroize( ssl->session_negotiate->ticket, - ssl->session_negotiate->ticket_len ); + ssl->session_negotiate->ticket_len ); mbedtls_free( ssl->session_negotiate->ticket ); ssl->session_negotiate->ticket = NULL; ssl->session_negotiate->ticket_len = 0; - if( ( ticket = mbedtls_calloc( 1, ticket_len ) ) == NULL ) - { + if ( ( ticket = mbedtls_calloc( 1, ticket_len ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ticket alloc failed" ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } memcpy( ticket, msg + 6, ticket_len ); @@ -3262,7 +3031,7 @@ static int ssl_parse_new_session_ticket( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse new session ticket" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ @@ -3273,133 +3042,130 @@ int mbedtls_ssl_handshake_client_step( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "client state: %d", ssl->state ) ); - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - return( ret ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) + return ( ret ); } #endif /* Change state now, so that it is right in mbedtls_ssl_read_record(), used * by DTLS for dropping out-of-sequence ChangeCipherSpec records */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - if( ssl->state == MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC && - ssl->handshake->new_session_ticket != 0 ) - { + if ( ssl->state == MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC && + ssl->handshake->new_session_ticket != 0 ) { ssl->state = MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET; } #endif - switch( ssl->state ) - { + switch ( ssl->state ) { case MBEDTLS_SSL_HELLO_REQUEST: ssl->state = MBEDTLS_SSL_CLIENT_HELLO; break; - /* - * ==> ClientHello - */ - case MBEDTLS_SSL_CLIENT_HELLO: - ret = ssl_write_client_hello( ssl ); - break; - - /* - * <== ServerHello - * Certificate - * ( ServerKeyExchange ) - * ( CertificateRequest ) - * ServerHelloDone - */ - case MBEDTLS_SSL_SERVER_HELLO: - ret = ssl_parse_server_hello( ssl ); - break; - - case MBEDTLS_SSL_SERVER_CERTIFICATE: - ret = mbedtls_ssl_parse_certificate( ssl ); - break; - - case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: - ret = ssl_parse_server_key_exchange( ssl ); - break; - - case MBEDTLS_SSL_CERTIFICATE_REQUEST: - ret = ssl_parse_certificate_request( ssl ); - break; - - case MBEDTLS_SSL_SERVER_HELLO_DONE: - ret = ssl_parse_server_hello_done( ssl ); - break; - - /* - * ==> ( Certificate/Alert ) - * ClientKeyExchange - * ( CertificateVerify ) - * ChangeCipherSpec - * Finished - */ - case MBEDTLS_SSL_CLIENT_CERTIFICATE: - ret = mbedtls_ssl_write_certificate( ssl ); - break; - - case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: - ret = ssl_write_client_key_exchange( ssl ); - break; - - case MBEDTLS_SSL_CERTIFICATE_VERIFY: - ret = ssl_write_certificate_verify( ssl ); - break; - - case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: - ret = mbedtls_ssl_write_change_cipher_spec( ssl ); - break; - - case MBEDTLS_SSL_CLIENT_FINISHED: - ret = mbedtls_ssl_write_finished( ssl ); - break; - - /* - * <== ( NewSessionTicket ) - * ChangeCipherSpec - * Finished - */ + /* + * ==> ClientHello + */ + case MBEDTLS_SSL_CLIENT_HELLO: + ret = ssl_write_client_hello( ssl ); + break; + + /* + * <== ServerHello + * Certificate + * ( ServerKeyExchange ) + * ( CertificateRequest ) + * ServerHelloDone + */ + case MBEDTLS_SSL_SERVER_HELLO: + ret = ssl_parse_server_hello( ssl ); + break; + + case MBEDTLS_SSL_SERVER_CERTIFICATE: + ret = mbedtls_ssl_parse_certificate( ssl ); + break; + + case MBEDTLS_SSL_SERVER_KEY_EXCHANGE: + ret = ssl_parse_server_key_exchange( ssl ); + break; + + case MBEDTLS_SSL_CERTIFICATE_REQUEST: + ret = ssl_parse_certificate_request( ssl ); + break; + + case MBEDTLS_SSL_SERVER_HELLO_DONE: + ret = ssl_parse_server_hello_done( ssl ); + break; + + /* + * ==> ( Certificate/Alert ) + * ClientKeyExchange + * ( CertificateVerify ) + * ChangeCipherSpec + * Finished + */ + case MBEDTLS_SSL_CLIENT_CERTIFICATE: + ret = mbedtls_ssl_write_certificate( ssl ); + break; + + case MBEDTLS_SSL_CLIENT_KEY_EXCHANGE: + ret = ssl_write_client_key_exchange( ssl ); + break; + + case MBEDTLS_SSL_CERTIFICATE_VERIFY: + ret = ssl_write_certificate_verify( ssl ); + break; + + case MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC: + ret = mbedtls_ssl_write_change_cipher_spec( ssl ); + break; + + case MBEDTLS_SSL_CLIENT_FINISHED: + ret = mbedtls_ssl_write_finished( ssl ); + break; + + /* + * <== ( NewSessionTicket ) + * ChangeCipherSpec + * Finished + */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - case MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET: - ret = ssl_parse_new_session_ticket( ssl ); - break; + case MBEDTLS_SSL_SERVER_NEW_SESSION_TICKET: + ret = ssl_parse_new_session_ticket( ssl ); + break; #endif - case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: - ret = mbedtls_ssl_parse_change_cipher_spec( ssl ); - break; + case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: + ret = mbedtls_ssl_parse_change_cipher_spec( ssl ); + break; - case MBEDTLS_SSL_SERVER_FINISHED: - ret = mbedtls_ssl_parse_finished( ssl ); - break; + case MBEDTLS_SSL_SERVER_FINISHED: + ret = mbedtls_ssl_parse_finished( ssl ); + break; - case MBEDTLS_SSL_FLUSH_BUFFERS: - MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); - ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; - break; + case MBEDTLS_SSL_FLUSH_BUFFERS: + MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake: done" ) ); + ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; + break; - case MBEDTLS_SSL_HANDSHAKE_WRAPUP: - mbedtls_ssl_handshake_wrapup( ssl ); - break; + case MBEDTLS_SSL_HANDSHAKE_WRAPUP: + mbedtls_ssl_handshake_wrapup( ssl ); + break; - default: - MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - } + default: + MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SSL_CLI_C */ diff --git a/external_libs/mbedtls/library/ssl_cookie.c b/external_libs/mbedtls/library/ssl_cookie.c index 9fb32de..5db3d94 100644 --- a/external_libs/mbedtls/library/ssl_cookie.c +++ b/external_libs/mbedtls/library/ssl_cookie.c @@ -44,8 +44,10 @@ #include /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -105,26 +107,26 @@ void mbedtls_ssl_cookie_free( mbedtls_ssl_cookie_ctx *ctx ) } int mbedtls_ssl_cookie_setup( mbedtls_ssl_cookie_ctx *ctx, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char key[COOKIE_MD_OUTLEN]; - if( ( ret = f_rng( p_rng, key, sizeof( key ) ) ) != 0 ) - return( ret ); + if ( ( ret = f_rng( p_rng, key, sizeof( key ) ) ) != 0 ) + return ( ret ); ret = mbedtls_md_setup( &ctx->hmac_ctx, mbedtls_md_info_from_type( COOKIE_MD ), 1 ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); ret = mbedtls_md_hmac_starts( &ctx->hmac_ctx, key, sizeof( key ) ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); mbedtls_zeroize( key, sizeof( key ) ); - return( 0 ); + return ( 0 ); } /* @@ -137,39 +139,38 @@ static int ssl_cookie_hmac( mbedtls_md_context_t *hmac_ctx, { unsigned char hmac_out[COOKIE_MD_OUTLEN]; - if( (size_t)( end - *p ) < COOKIE_HMAC_LEN ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( (size_t)( end - *p ) < COOKIE_HMAC_LEN ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); - if( mbedtls_md_hmac_reset( hmac_ctx ) != 0 || - mbedtls_md_hmac_update( hmac_ctx, time, 4 ) != 0 || - mbedtls_md_hmac_update( hmac_ctx, cli_id, cli_id_len ) != 0 || - mbedtls_md_hmac_finish( hmac_ctx, hmac_out ) != 0 ) - { - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( mbedtls_md_hmac_reset( hmac_ctx ) != 0 || + mbedtls_md_hmac_update( hmac_ctx, time, 4 ) != 0 || + mbedtls_md_hmac_update( hmac_ctx, cli_id, cli_id_len ) != 0 || + mbedtls_md_hmac_finish( hmac_ctx, hmac_out ) != 0 ) { + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } memcpy( *p, hmac_out, COOKIE_HMAC_LEN ); *p += COOKIE_HMAC_LEN; - return( 0 ); + return ( 0 ); } /* * Generate cookie for DTLS ClientHello verification */ int mbedtls_ssl_cookie_write( void *p_ctx, - unsigned char **p, unsigned char *end, - const unsigned char *cli_id, size_t cli_id_len ) + unsigned char **p, unsigned char *end, + const unsigned char *cli_id, size_t cli_id_len ) { int ret; mbedtls_ssl_cookie_ctx *ctx = (mbedtls_ssl_cookie_ctx *) p_ctx; unsigned long t; - if( ctx == NULL || cli_id == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || cli_id == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( (size_t)( end - *p ) < COOKIE_LEN ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( (size_t)( end - *p ) < COOKIE_LEN ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); #if defined(MBEDTLS_HAVE_TIME) t = (unsigned long) mbedtls_time( NULL ); @@ -184,28 +185,28 @@ int mbedtls_ssl_cookie_write( void *p_ctx, *p += 4; #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); #endif ret = ssl_cookie_hmac( &ctx->hmac_ctx, *p - 4, p, end, cli_id, cli_id_len ); #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + - MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + + MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* * Check a cookie */ int mbedtls_ssl_cookie_check( void *p_ctx, - const unsigned char *cookie, size_t cookie_len, - const unsigned char *cli_id, size_t cli_id_len ) + const unsigned char *cookie, size_t cookie_len, + const unsigned char *cli_id, size_t cli_id_len ) { unsigned char ref_hmac[COOKIE_HMAC_LEN]; int ret = 0; @@ -213,33 +214,33 @@ int mbedtls_ssl_cookie_check( void *p_ctx, mbedtls_ssl_cookie_ctx *ctx = (mbedtls_ssl_cookie_ctx *) p_ctx; unsigned long cur_time, cookie_time; - if( ctx == NULL || cli_id == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || cli_id == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( cookie_len != COOKIE_LEN ) - return( -1 ); + if ( cookie_len != COOKIE_LEN ) + return ( -1 ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + ret ); #endif - if( ssl_cookie_hmac( &ctx->hmac_ctx, cookie, - &p, p + sizeof( ref_hmac ), - cli_id, cli_id_len ) != 0 ) + if ( ssl_cookie_hmac( &ctx->hmac_ctx, cookie, + &p, p + sizeof( ref_hmac ), + cli_id, cli_id_len ) != 0 ) ret = -1; #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR + - MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR + + MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); - if( mbedtls_ssl_safer_memcmp( cookie + 4, ref_hmac, sizeof( ref_hmac ) ) != 0 ) - return( -1 ); + if ( mbedtls_ssl_safer_memcmp( cookie + 4, ref_hmac, sizeof( ref_hmac ) ) != 0 ) + return ( -1 ); #if defined(MBEDTLS_HAVE_TIME) cur_time = (unsigned long) mbedtls_time( NULL ); @@ -252,9 +253,9 @@ int mbedtls_ssl_cookie_check( void *p_ctx, ( (unsigned long) cookie[2] << 8 ) | ( (unsigned long) cookie[3] ); - if( ctx->timeout != 0 && cur_time - cookie_time > ctx->timeout ) - return( -1 ); + if ( ctx->timeout != 0 && cur_time - cookie_time > ctx->timeout ) + return ( -1 ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_COOKIE_C */ diff --git a/external_libs/mbedtls/library/ssl_srv.c b/external_libs/mbedtls/library/ssl_srv.c index fc0d2d7..470854c 100644 --- a/external_libs/mbedtls/library/ssl_srv.c +++ b/external_libs/mbedtls/library/ssl_srv.c @@ -51,34 +51,36 @@ #if defined(MBEDTLS_SSL_SESSION_TICKETS) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } #endif #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) int mbedtls_ssl_set_client_transport_id( mbedtls_ssl_context *ssl, - const unsigned char *info, - size_t ilen ) + const unsigned char *info, + size_t ilen ) { - if( ssl->conf->endpoint != MBEDTLS_SSL_IS_SERVER ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->conf->endpoint != MBEDTLS_SSL_IS_SERVER ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); mbedtls_free( ssl->cli_id ); - if( ( ssl->cli_id = mbedtls_calloc( 1, ilen ) ) == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ( ssl->cli_id = mbedtls_calloc( 1, ilen ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( ssl->cli_id, info, ilen ); ssl->cli_id_len = ilen; - return( 0 ); + return ( 0 ); } void mbedtls_ssl_conf_dtls_cookies( mbedtls_ssl_config *conf, - mbedtls_ssl_cookie_write_t *f_cookie_write, - mbedtls_ssl_cookie_check_t *f_cookie_check, - void *p_cookie ) + mbedtls_ssl_cookie_write_t *f_cookie_write, + mbedtls_ssl_cookie_check_t *f_cookie_check, + void *p_cookie ) { conf->f_cookie_write = f_cookie_write; conf->f_cookie_check = f_cookie_check; @@ -98,97 +100,87 @@ static int ssl_parse_servername_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "parse ServerName extension" ) ); servername_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( servername_list_size + 2 != len ) - { + if ( servername_list_size + 2 != len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } p = buf + 2; - while( servername_list_size > 0 ) - { + while ( servername_list_size > 0 ) { hostname_len = ( ( p[1] << 8 ) | p[2] ); - if( hostname_len + 3 > servername_list_size ) - { + if ( hostname_len + 3 > servername_list_size ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( p[0] == MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME ) - { + if ( p[0] == MBEDTLS_TLS_EXT_SERVERNAME_HOSTNAME ) { ret = ssl->conf->f_sni( ssl->conf->p_sni, ssl, p + 3, hostname_len ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_sni_wrapper", ret ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + MBEDTLS_SSL_ALERT_MSG_UNRECOGNIZED_NAME ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - return( 0 ); + return ( 0 ); } servername_list_size -= hostname_len + 3; p += hostname_len + 3; } - if( servername_list_size != 0 ) - { + if ( servername_list_size != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ static int ssl_parse_renegotiation_info( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { int ret; #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { /* Check verify-data in constant-time. The length OTOH is no secret */ - if( len != 1 + ssl->verify_data_len || - buf[0] != ssl->verify_data_len || - mbedtls_ssl_safer_memcmp( buf + 1, ssl->peer_verify_data, - ssl->verify_data_len ) != 0 ) - { + if ( len != 1 + ssl->verify_data_len || + buf[0] != ssl->verify_data_len || + mbedtls_ssl_safer_memcmp( buf + 1, ssl->peer_verify_data, + ssl->verify_data_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-matching renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - } - else + } else #endif /* MBEDTLS_SSL_RENEGOTIATION */ { - if( len != 1 || buf[0] != 0x0 ) - { + if ( len != 1 || buf[0] != 0x0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "non-zero length renegotiation info" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t sig_alg_list_size; const unsigned char *p; @@ -197,11 +189,10 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, sig_alg_list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( sig_alg_list_size + 2 != len || - sig_alg_list_size % 2 != 0 ) - { + if ( sig_alg_list_size + 2 != len || + sig_alg_list_size % 2 != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* @@ -210,9 +201,9 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, * * So, just look at the HashAlgorithm part. */ - for( md_cur = ssl->conf->sig_hashes; *md_cur != MBEDTLS_MD_NONE; md_cur++ ) { - for( p = buf + 2; p < end; p += 2 ) { - if( *md_cur == (int) mbedtls_ssl_md_alg_from_hash( p[0] ) ) { + for ( md_cur = ssl->conf->sig_hashes; *md_cur != MBEDTLS_MD_NONE; md_cur++ ) { + for ( p = buf + 2; p < end; p += 2 ) { + if ( *md_cur == (int) mbedtls_ssl_md_alg_from_hash( p[0] ) ) { ssl->handshake->sig_alg = p[0]; goto have_sig_alg; } @@ -221,13 +212,13 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, /* Some key echanges do not need signatures at all */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "no signature_algorithm in common" ) ); - return( 0 ); + return ( 0 ); have_sig_alg: MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, signature_algorithm ext: %d", - ssl->handshake->sig_alg ) ); + ssl->handshake->sig_alg ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 && MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ @@ -235,46 +226,42 @@ static int ssl_parse_signature_algorithms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static int ssl_parse_supported_elliptic_curves( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t list_size, our_size; const unsigned char *p; const mbedtls_ecp_curve_info *curve_info, **curves; list_size = ( ( buf[0] << 8 ) | ( buf[1] ) ); - if( list_size + 2 != len || - list_size % 2 != 0 ) - { + if ( list_size + 2 != len || + list_size % 2 != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* Should never happen unless client duplicates the extension */ - if( ssl->handshake->curves != NULL ) - { + if ( ssl->handshake->curves != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* Don't allow our peer to make us allocate too much memory, * and leave room for a final 0 */ our_size = list_size / 2 + 1; - if( our_size > MBEDTLS_ECP_DP_MAX ) + if ( our_size > MBEDTLS_ECP_DP_MAX ) our_size = MBEDTLS_ECP_DP_MAX; - if( ( curves = mbedtls_calloc( our_size, sizeof( *curves ) ) ) == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ( curves = mbedtls_calloc( our_size, sizeof( *curves ) ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); ssl->handshake->curves = curves; p = buf + 2; - while( list_size > 0 && our_size > 1 ) - { + while ( list_size > 0 && our_size > 1 ) { curve_info = mbedtls_ecp_curve_info_from_tls_id( ( p[0] << 8 ) | p[1] ); - if( curve_info != NULL ) - { + if ( curve_info != NULL ) { *curves++ = curve_info; our_size--; } @@ -283,29 +270,26 @@ static int ssl_parse_supported_elliptic_curves( mbedtls_ssl_context *ssl, p += 2; } - return( 0 ); + return ( 0 ); } static int ssl_parse_supported_point_formats( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { size_t list_size; const unsigned char *p; list_size = buf[0]; - if( list_size + 1 != len ) - { + if ( list_size + 1 != len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } p = buf + 1; - while( list_size > 0 ) - { - if( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || - p[0] == MBEDTLS_ECP_PF_COMPRESSED ) - { + while ( list_size > 0 ) { + if ( p[0] == MBEDTLS_ECP_PF_UNCOMPRESSED || + p[0] == MBEDTLS_ECP_PF_COMPRESSED ) { #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) ssl->handshake->ecdh_ctx.point_format = p[0]; #endif @@ -313,14 +297,14 @@ static int ssl_parse_supported_point_formats( mbedtls_ssl_context *ssl, ssl->handshake->ecjpake_ctx.point_format = p[0]; #endif MBEDTLS_SSL_DEBUG_MSG( 4, ( "point format selected: %d", p[0] ) ); - return( 0 ); + return ( 0 ); } list_size--; p++; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ @@ -332,83 +316,77 @@ static int ssl_parse_ecjpake_kkpp( mbedtls_ssl_context *ssl, { int ret; - if( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) - { + if ( mbedtls_ecjpake_check( &ssl->handshake->ecjpake_ctx ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip ecjpake kkpp extension" ) ); - return( 0 ); + return ( 0 ); } - if( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, - buf, len ) ) != 0 ) - { + if ( ( ret = mbedtls_ecjpake_read_round_one( &ssl->handshake->ecjpake_ctx, + buf, len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_one", ret ); - return( ret ); + return ( ret ); } /* Only mark the extension as OK when we're sure it is */ ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static int ssl_parse_max_fragment_length_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( len != 1 || buf[0] >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID ) - { + if ( len != 1 || buf[0] >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->session_negotiate->mfl_code = buf[0]; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static int ssl_parse_truncated_hmac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( len != 0 ) - { + if ( len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ((void) buf); - if( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) + if ( ssl->conf->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) ssl->session_negotiate->trunc_hmac = MBEDTLS_SSL_TRUNC_HMAC_ENABLED; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static int ssl_parse_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - const unsigned char *buf, - size_t len ) + const unsigned char *buf, + size_t len ) { - if( len != 0 ) - { + if ( len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ((void) buf); - if( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED && - ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED && + ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->session_negotiate->encrypt_then_mac = MBEDTLS_SSL_ETM_ENABLED; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ @@ -417,38 +395,35 @@ static int ssl_parse_extended_ms_ext( mbedtls_ssl_context *ssl, const unsigned char *buf, size_t len ) { - if( len != 0 ) - { + if ( len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ((void) buf); - if( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED && - ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->conf->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED && + ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->handshake->extended_ms = MBEDTLS_SSL_EXTENDED_MS_ENABLED; } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t len ) + unsigned char *buf, + size_t len ) { int ret; mbedtls_ssl_session session; mbedtls_ssl_session_init( &session ); - if( ssl->conf->f_ticket_parse == NULL || - ssl->conf->f_ticket_write == NULL ) - { - return( 0 ); + if ( ssl->conf->f_ticket_parse == NULL || + ssl->conf->f_ticket_write == NULL ) { + return ( 0 ); } /* Remember the client asked us to send a new ticket */ @@ -456,33 +431,31 @@ static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket length: %d", len ) ); - if( len == 0 ) - return( 0 ); + if ( len == 0 ) + return ( 0 ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket rejected: renegotiating" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ /* * Failures are ok: just ignore the ticket and proceed. */ - if( ( ret = ssl->conf->f_ticket_parse( ssl->conf->p_ticket, &session, - buf, len ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_ticket_parse( ssl->conf->p_ticket, &session, + buf, len ) ) != 0 ) { mbedtls_ssl_session_free( &session ); - if( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) + if ( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket is not authentic" ) ); - else if( ret == MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED ) + else if ( ret == MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "ticket is expired" ) ); else MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_parse", ret ); - return( 0 ); + return ( 0 ); } /* @@ -505,7 +478,7 @@ static int ssl_parse_session_ticket_ext( mbedtls_ssl_context *ssl, /* Don't send a new ticket after all, this one is OK */ ssl->handshake->new_session_ticket = 0; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ @@ -518,8 +491,8 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, const char **ours; /* If ALPN not configured, just ignore the extension */ - if( ssl->conf->alpn_list == NULL ) - return( 0 ); + if ( ssl->conf->alpn_list == NULL ) + return ( 0 ); /* * opaque ProtocolName<1..2^8-1>; @@ -530,46 +503,43 @@ static int ssl_parse_alpn_ext( mbedtls_ssl_context *ssl, */ /* Min length is 2 (list_len) + 1 (name_len) + 1 (name) */ - if( len < 4 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( len < 4 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); list_len = ( buf[0] << 8 ) | buf[1]; - if( list_len != len - 2 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( list_len != len - 2 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); /* * Use our order of preference */ start = buf + 2; end = buf + len; - for( ours = ssl->conf->alpn_list; *ours != NULL; ours++ ) - { + for ( ours = ssl->conf->alpn_list; *ours != NULL; ours++ ) { ours_len = strlen( *ours ); - for( theirs = start; theirs != end; theirs += cur_len ) - { + for ( theirs = start; theirs != end; theirs += cur_len ) { /* If the list is well formed, we should get equality first */ - if( theirs > end ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( theirs > end ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); cur_len = *theirs++; /* Empty strings MUST NOT be included */ - if( cur_len == 0 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( cur_len == 0 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); - if( cur_len == ours_len && - memcmp( theirs, *ours, cur_len ) == 0 ) - { + if ( cur_len == ours_len && + memcmp( theirs, *ours, cur_len ) == 0 ) { ssl->alpn_chosen = *ours; - return( 0 ); + return ( 0 ); } } } /* If we get there, no match was found */ mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + MBEDTLS_SSL_ALERT_MSG_NO_APPLICATION_PROTOCOL ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif /* MBEDTLS_SSL_ALPN */ @@ -588,14 +558,13 @@ static int ssl_check_key_curve( mbedtls_pk_context *pk, const mbedtls_ecp_curve_info **crv = curves; mbedtls_ecp_group_id grp_id = mbedtls_pk_ec( *pk )->grp.id; - while( *crv != NULL ) - { - if( (*crv)->grp_id == grp_id ) - return( 0 ); + while ( *crv != NULL ) { + if ( (*crv)->grp_id == grp_id ) + return ( 0 ); crv++; } - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_ECDSA_C */ @@ -611,30 +580,27 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, uint32_t flags; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_key_cert != NULL ) + if ( ssl->handshake->sni_key_cert != NULL ) list = ssl->handshake->sni_key_cert; else #endif list = ssl->conf->key_cert; - if( pk_alg == MBEDTLS_PK_NONE ) - return( 0 ); + if ( pk_alg == MBEDTLS_PK_NONE ) + return ( 0 ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite requires certificate" ) ); - if( list == NULL ) - { + if ( list == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "server has no certificate" ) ); - return( -1 ); + return ( -1 ); } - for( cur = list; cur != NULL; cur = cur->next ) - { + for ( cur = list; cur != NULL; cur = cur->next ) { MBEDTLS_SSL_DEBUG_CRT( 3, "candidate certificate chain, certificate", - cur->cert ); + cur->cert ); - if( ! mbedtls_pk_can_do( cur->key, pk_alg ) ) - { + if ( ! mbedtls_pk_can_do( cur->key, pk_alg ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: key type" ) ); continue; } @@ -647,18 +613,16 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, * different uses based on keyUsage, eg if they want to avoid signing * and decrypting with the same RSA key. */ - if( mbedtls_ssl_check_cert_usage( cur->cert, ciphersuite_info, - MBEDTLS_SSL_IS_SERVER, &flags ) != 0 ) - { + if ( mbedtls_ssl_check_cert_usage( cur->cert, ciphersuite_info, + MBEDTLS_SSL_IS_SERVER, &flags ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: " - "(extended) key usage extension" ) ); + "(extended) key usage extension" ) ); continue; } #if defined(MBEDTLS_ECDSA_C) - if( pk_alg == MBEDTLS_PK_ECDSA && - ssl_check_key_curve( cur->key, ssl->handshake->curves ) != 0 ) - { + if ( pk_alg == MBEDTLS_PK_ECDSA && + ssl_check_key_curve( cur->key, ssl->handshake->curves ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate mismatch: elliptic curve" ) ); continue; } @@ -669,15 +633,14 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, * present them a SHA-higher cert rather than failing if it's the only * one we got that satisfies the other conditions. */ - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 && - cur->cert->sig_md != MBEDTLS_MD_SHA1 ) - { - if( fallback == NULL ) + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 && + cur->cert->sig_md != MBEDTLS_MD_SHA1 ) { + if ( fallback == NULL ) fallback = cur; { MBEDTLS_SSL_DEBUG_MSG( 3, ( "certificate not preferred: " - "sha-2 with pre-TLS 1.2 client" ) ); - continue; + "sha-2 with pre-TLS 1.2 client" ) ); + continue; } } @@ -685,19 +648,18 @@ static int ssl_pick_cert( mbedtls_ssl_context *ssl, break; } - if( cur == NULL ) + if ( cur == NULL ) cur = fallback; /* Do not update ssl->handshake->key_cert unless there is a match */ - if( cur != NULL ) - { + if ( cur != NULL ) { ssl->handshake->key_cert = cur; MBEDTLS_SSL_DEBUG_CRT( 3, "selected certificate chain, certificate", - ssl->handshake->key_cert->cert ); - return( 0 ); + ssl->handshake->key_cert->cert ); + return ( 0 ); } - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ @@ -711,68 +673,62 @@ static int ssl_ciphersuite_match( mbedtls_ssl_context *ssl, int suite_id, const mbedtls_ssl_ciphersuite_t *suite_info; suite_info = mbedtls_ssl_ciphersuite_from_id( suite_id ); - if( suite_info == NULL ) - { + if ( suite_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "trying ciphersuite: %s", suite_info->name ) ); - if( suite_info->min_minor_ver > ssl->minor_ver || - suite_info->max_minor_ver < ssl->minor_ver ) - { + if ( suite_info->min_minor_ver > ssl->minor_ver || + suite_info->max_minor_ver < ssl->minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: version" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ( suite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) - return( 0 ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ( suite_info->flags & MBEDTLS_CIPHERSUITE_NODTLS ) ) + return ( 0 ); #endif #if defined(MBEDTLS_ARC4_C) - if( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && - suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) - { + if ( ssl->conf->arc4_disabled == MBEDTLS_SSL_ARC4_DISABLED && + suite_info->cipher == MBEDTLS_CIPHER_ARC4_128 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: rc4" ) ); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( suite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && - ( ssl->handshake->cli_exts & MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK ) == 0 ) - { + if ( suite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE && + ( ssl->handshake->cli_exts & MBEDTLS_TLS_EXT_ECJPAKE_KKPP_OK ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: ecjpake " "not configured or ext missing" ) ); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) - if( mbedtls_ssl_ciphersuite_uses_ec( suite_info ) && - ( ssl->handshake->curves == NULL || - ssl->handshake->curves[0] == NULL ) ) - { + if ( mbedtls_ssl_ciphersuite_uses_ec( suite_info ) && + ( ssl->handshake->curves == NULL || + ssl->handshake->curves[0] == NULL ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: " - "no common elliptic curve" ) ); - return( 0 ); + "no common elliptic curve" ) ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) /* If the ciphersuite requires a pre-shared key and we don't * have one, skip it now rather than failing later */ - if( mbedtls_ssl_ciphersuite_uses_psk( suite_info ) && - ssl->conf->f_psk == NULL && - ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || - ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) - { + if ( mbedtls_ssl_ciphersuite_uses_psk( suite_info ) && + ssl->conf->f_psk == NULL && + ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || + ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: no pre-shared key" ) ); - return( 0 ); + return ( 0 ); } #endif @@ -784,16 +740,15 @@ static int ssl_ciphersuite_match( mbedtls_ssl_context *ssl, int suite_id, * - try the next ciphersuite if we don't * This must be done last since we modify the key_cert list. */ - if( ssl_pick_cert( ssl, suite_info ) != 0 ) - { + if ( ssl_pick_cert( ssl, suite_info ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite mismatch: " - "no suitable certificate" ) ); - return( 0 ); + "no suitable certificate" ) ); + return ( 0 ); } #endif *ciphersuite_info = suite_info; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) @@ -810,14 +765,13 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client hello v2" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "client hello v2 illegal for renegotiation" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ @@ -826,11 +780,11 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 4, "record header", buf, 5 ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, message type: %d", - buf[2] ) ); + buf[2] ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, message len.: %d", - ( ( buf[0] & 0x7F ) << 8 ) | buf[1] ) ); + ( ( buf[0] & 0x7F ) << 8 ) | buf[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v2, max. version: [%d:%d]", - buf[3], buf[4] ) ); + buf[3], buf[4] ) ); /* * SSLv2 Client Hello @@ -842,44 +796,40 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) * 2 . 2 message type * 3 . 4 protocol version */ - if( buf[2] != MBEDTLS_SSL_HS_CLIENT_HELLO || - buf[3] != MBEDTLS_SSL_MAJOR_VERSION_3 ) - { + if ( buf[2] != MBEDTLS_SSL_HS_CLIENT_HELLO || + buf[3] != MBEDTLS_SSL_MAJOR_VERSION_3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } n = ( ( buf[0] << 8 ) | buf[1] ) & 0x7FFF; - if( n < 17 || n > 512 ) - { + if ( n < 17 || n > 512 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->major_ver = MBEDTLS_SSL_MAJOR_VERSION_3; ssl->minor_ver = ( buf[4] <= ssl->conf->max_minor_ver ) ? buf[4] : ssl->conf->max_minor_ver; - if( ssl->minor_ver < ssl->conf->min_minor_ver ) - { + if ( ssl->minor_ver < ssl->conf->min_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", - ssl->major_ver, ssl->minor_ver, - ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); + " [%d:%d] < [%d:%d]", + ssl->major_ver, ssl->minor_ver, + ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } ssl->handshake->max_major_ver = buf[3]; ssl->handshake->max_minor_ver = buf[4]; - if( ( ret = mbedtls_ssl_fetch_input( ssl, 2 + n ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, 2 + n ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } ssl->handshake->update_checksum( ssl, buf + 2, n ); @@ -902,41 +852,37 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) chal_len = ( buf[4] << 8 ) | buf[5]; MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciph_len: %d, sess_len: %d, chal_len: %d", - ciph_len, sess_len, chal_len ) ); + ciph_len, sess_len, chal_len ) ); /* * Make sure each parameter length is valid */ - if( ciph_len < 3 || ( ciph_len % 3 ) != 0 ) - { + if ( ciph_len < 3 || ( ciph_len % 3 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( sess_len > 32 ) - { + if ( sess_len > 32 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( chal_len < 8 || chal_len > 32 ) - { + if ( chal_len < 8 || chal_len > 32 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( n != 6 + ciph_len + sess_len + chal_len ) - { + if ( n != 6 + ciph_len + sess_len + chal_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist", - buf + 6, ciph_len ); + buf + 6, ciph_len ); MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, session id", - buf + 6 + ciph_len, sess_len ); + buf + 6 + ciph_len, sess_len ); MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, challenge", - buf + 6 + ciph_len + sess_len, chal_len ); + buf + 6 + ciph_len + sess_len, chal_len ); p = buf + 6 + ciph_len; ssl->session_negotiate->id_len = sess_len; @@ -951,21 +897,18 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) /* * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */ - for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) - { - if( p[0] == 0 && p[1] == 0 && p[2] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) - { + for ( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) { + if ( p[0] == 0 && p[1] == 0 && p[2] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV " - "during renegotiation" ) ); + "during renegotiation" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; @@ -974,22 +917,19 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) } #if defined(MBEDTLS_SSL_FALLBACK_SCSV) - for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) - { - if( p[0] == 0 && - p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && - p[2] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) - { + for ( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 ) { + if ( p[0] == 0 && + p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && + p[2] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "received FALLBACK_SCSV" ) ); - if( ssl->minor_ver < ssl->conf->max_minor_ver ) - { + if ( ssl->minor_ver < ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); + MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } break; @@ -1001,41 +941,36 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver]; ciphersuite_info = NULL; #if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) - { - for( i = 0; ciphersuites[i] != 0; i++ ) + for ( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) { + for ( i = 0; ciphersuites[i] != 0; i++ ) #else - for( i = 0; ciphersuites[i] != 0; i++ ) - { - for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) + for ( i = 0; ciphersuites[i] != 0; i++ ) { + for ( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 ) #endif { - if( p[0] != 0 || - p[1] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || - p[2] != ( ( ciphersuites[i] ) & 0xFF ) ) + if ( p[0] != 0 || + p[1] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || + p[2] != ( ( ciphersuites[i] ) & 0xFF ) ) continue; got_common_suite = 1; - if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], - &ciphersuite_info ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], + &ciphersuite_info ) ) != 0 ) + return ( ret ); - if( ciphersuite_info != NULL ) + if ( ciphersuite_info != NULL ) goto have_ciphersuite_v2; } } - if( got_common_suite ) - { + if ( got_common_suite ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got ciphersuites in common, " - "but none of them usable" ) ); - return( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); - } - else - { + "but none of them usable" ) ); + return ( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); + } else { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) ); - return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); + return ( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } have_ciphersuite_v2: @@ -1047,15 +982,14 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) /* * SSLv2 Client Hello relevant renegotiation security checks */ - if( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) - { + if ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->in_left = 0; @@ -1063,7 +997,7 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client hello v2" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO */ @@ -1096,13 +1030,12 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * ClientHello, which doesn't use the same record layer format. */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) + if ( ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE ) #endif { - if( ( ret = mbedtls_ssl_fetch_input( ssl, 5 ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, 5 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } } @@ -1110,9 +1043,9 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO) #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_STREAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_STREAM ) #endif - if( ( buf[0] & 0x80 ) != 0 ) + if ( ( buf[0] & 0x80 ) != 0 ) return ssl_parse_client_hello_v2( ssl ); #endif @@ -1128,19 +1061,18 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * 3 . 4 message length */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, message type: %d", - buf[0] ) ); + buf[0] ) ); - if( buf[0] != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( buf[0] != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, message len.: %d", - ( ssl->in_len[0] << 8 ) | ssl->in_len[1] ) ); + ( ssl->in_len[0] << 8 ) | ssl->in_len[1] ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, protocol version: [%d:%d]", - buf[1], buf[2] ) ); + buf[1], buf[2] ) ); mbedtls_ssl_read_version( &major, &minor, ssl->conf->transport, buf + 1 ); @@ -1148,33 +1080,29 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * "{03,00}, the lowest version number supported by the client, [or] the * value of ClientHello.client_version", so the only meaningful check here * is the major version shouldn't be less than 3 */ - if( major < MBEDTLS_SSL_MAJOR_VERSION_3 ) - { + if ( major < MBEDTLS_SSL_MAJOR_VERSION_3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* For DTLS if this is the initial handshake, remember the client sequence * number to use it in our next message (RFC 6347 4.2.1) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM #if defined(MBEDTLS_SSL_RENEGOTIATION) - && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE + && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE #endif - ) - { + ) { /* Epoch should be 0 for initial handshakes */ - if( ssl->in_ctr[0] != 0 || ssl->in_ctr[1] != 0 ) - { + if ( ssl->in_ctr[0] != 0 || ssl->in_ctr[1] != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } memcpy( ssl->out_ctr + 2, ssl->in_ctr + 2, 6 ); #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) - if( mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) - { + if ( mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "replayed record, discarding" ) ); ssl->next_record_offset = 0; ssl->in_left = 0; @@ -1190,29 +1118,25 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) msg_len = ( ssl->in_len[0] << 8 ) | ssl->in_len[1]; #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { /* Set by mbedtls_ssl_read_record() */ msg_len = ssl->in_hslen; - } - else + } else #endif { - if( msg_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( msg_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - if( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) + msg_len ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) + msg_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } - /* Done reading this record, get ready for the next one */ + /* Done reading this record, get ready for the next one */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) ssl->next_record_offset = msg_len + mbedtls_ssl_hdr_len( ssl ); else #endif @@ -1233,60 +1157,53 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * 6 . 8 DTLS only: fragment offset * 9 . 11 DTLS only: fragment length */ - if( msg_len < mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( msg_len < mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, handshake type: %d", buf[0] ) ); - if( buf[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) - { + if ( buf[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "client hello v3, handshake len.: %d", - ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3] ) ); + ( buf[1] << 16 ) | ( buf[2] << 8 ) | buf[3] ) ); /* We don't support fragmentation of ClientHello (yet?) */ - if( buf[1] != 0 || - msg_len != mbedtls_ssl_hs_hdr_len( ssl ) + ( ( buf[2] << 8 ) | buf[3] ) ) - { + if ( buf[1] != 0 || + msg_len != mbedtls_ssl_hs_hdr_len( ssl ) + ( ( buf[2] << 8 ) | buf[3] ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { /* * Copy the client's handshake message_seq on initial handshakes, * check sequence number on renego. */ #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { /* This couldn't be done in ssl_prepare_handshake_record() */ unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) | - ssl->in_msg[5]; + ssl->in_msg[5]; - if( cli_msg_seq != ssl->handshake->in_msg_seq ) - { + if ( cli_msg_seq != ssl->handshake->in_msg_seq ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message_seq: " - "%d (expected %d)", cli_msg_seq, - ssl->handshake->in_msg_seq ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + "%d (expected %d)", cli_msg_seq, + ssl->handshake->in_msg_seq ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ssl->handshake->in_msg_seq++; - } - else + } else #endif { unsigned int cli_msg_seq = ( ssl->in_msg[4] << 8 ) | - ssl->in_msg[5]; + ssl->in_msg[5]; ssl->handshake->out_msg_seq = cli_msg_seq; ssl->handshake->in_msg_seq = cli_msg_seq + 1; } @@ -1295,11 +1212,10 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * For now we don't support fragmentation, so make sure * fragment_offset == 0 and fragment_length == length */ - if( ssl->in_msg[6] != 0 || ssl->in_msg[7] != 0 || ssl->in_msg[8] != 0 || - memcmp( ssl->in_msg + 1, ssl->in_msg + 9, 3 ) != 0 ) - { + if ( ssl->in_msg[6] != 0 || ssl->in_msg[7] != 0 || ssl->in_msg[8] != 0 || + memcmp( ssl->in_msg + 1, ssl->in_msg + 9, 3 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "ClientHello fragmentation not supported" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -1328,10 +1244,9 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * 2 + 32 + 1 + 2 + 1 = 38 bytes. Check that first, so that we can * read at least up to session id length without worrying. */ - if( msg_len < 38 ) - { + if ( msg_len < 38 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* @@ -1340,31 +1255,28 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, version", buf, 2 ); mbedtls_ssl_read_version( &ssl->major_ver, &ssl->minor_ver, - ssl->conf->transport, buf ); + ssl->conf->transport, buf ); ssl->handshake->max_major_ver = ssl->major_ver; ssl->handshake->max_minor_ver = ssl->minor_ver; - if( ssl->major_ver < ssl->conf->min_major_ver || - ssl->minor_ver < ssl->conf->min_minor_ver ) - { + if ( ssl->major_ver < ssl->conf->min_major_ver || + ssl->minor_ver < ssl->conf->min_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "client only supports ssl smaller than minimum" - " [%d:%d] < [%d:%d]", - ssl->major_ver, ssl->minor_ver, - ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); + " [%d:%d] < [%d:%d]", + ssl->major_ver, ssl->minor_ver, + ssl->conf->min_major_ver, ssl->conf->min_minor_ver ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); + MBEDTLS_SSL_ALERT_MSG_PROTOCOL_VERSION ); - return( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); + return ( MBEDTLS_ERR_SSL_BAD_HS_PROTOCOL_VERSION ); } - if( ssl->major_ver > ssl->conf->max_major_ver ) - { + if ( ssl->major_ver > ssl->conf->max_major_ver ) { ssl->major_ver = ssl->conf->max_major_ver; ssl->minor_ver = ssl->conf->max_minor_ver; - } - else if( ssl->minor_ver > ssl->conf->max_minor_ver ) + } else if ( ssl->minor_ver > ssl->conf->max_minor_ver ) ssl->minor_ver = ssl->conf->max_minor_ver; /* @@ -1379,11 +1291,10 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) */ sess_len = buf[34]; - if( sess_len > sizeof( ssl->session_negotiate->id ) || - sess_len + 34 + 2 > msg_len ) /* 2 for cipherlist length field */ - { + if ( sess_len > sizeof( ssl->session_negotiate->id ) || + sess_len + 34 + 2 > msg_len ) { /* 2 for cipherlist length field */ MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, session id", buf + 35, sess_len ); @@ -1398,75 +1309,65 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) * Check the cookie length and content */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { cookie_offset = 35 + sess_len; cookie_len = buf[cookie_offset]; - if( cookie_offset + 1 + cookie_len + 2 > msg_len ) - { + if ( cookie_offset + 1 + cookie_len + 2 > msg_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, cookie", - buf + cookie_offset + 1, cookie_len ); + buf + cookie_offset + 1, cookie_len ); #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) - if( ssl->conf->f_cookie_check != NULL + if ( ssl->conf->f_cookie_check != NULL #if defined(MBEDTLS_SSL_RENEGOTIATION) - && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE + && ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE #endif - ) - { - if( ssl->conf->f_cookie_check( ssl->conf->p_cookie, - buf + cookie_offset + 1, cookie_len, - ssl->cli_id, ssl->cli_id_len ) != 0 ) - { + ) { + if ( ssl->conf->f_cookie_check( ssl->conf->p_cookie, + buf + cookie_offset + 1, cookie_len, + ssl->cli_id, ssl->cli_id_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification failed" ) ); ssl->handshake->verify_cookie_len = 1; - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification passed" ) ); ssl->handshake->verify_cookie_len = 0; } - } - else + } else #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ { /* We know we didn't send a cookie, so it should be empty */ - if( cookie_len != 0 ) - { + if ( cookie_len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "cookie verification skipped" ) ); } - /* - * Check the ciphersuitelist length (will be parsed later) - */ + /* + * Check the ciphersuitelist length (will be parsed later) + */ ciph_offset = cookie_offset + 1 + cookie_len; - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ ciph_offset = 35 + sess_len; ciph_len = ( buf[ciph_offset + 0] << 8 ) - | ( buf[ciph_offset + 1] ); + | ( buf[ciph_offset + 1] ); - if( ciph_len < 2 || - ciph_len + 2 + ciph_offset + 1 > msg_len || /* 1 for comp. alg. len */ - ( ciph_len % 2 ) != 0 ) - { + if ( ciph_len < 2 || + ciph_len + 2 + ciph_offset + 1 > msg_len || /* 1 for comp. alg. len */ + ( ciph_len % 2 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, ciphersuitelist", - buf + ciph_offset + 2, ciph_len ); + buf + ciph_offset + 2, ciph_len ); /* * Check the compression algorithms length and pick one @@ -1475,23 +1376,20 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) comp_len = buf[comp_offset]; - if( comp_len < 1 || - comp_len > 16 || - comp_len + comp_offset + 1 > msg_len ) - { + if ( comp_len < 1 || + comp_len > 16 || + comp_len + comp_offset + 1 > msg_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } MBEDTLS_SSL_DEBUG_BUF( 3, "client hello, compression", - buf + comp_offset + 1, comp_len ); + buf + comp_offset + 1, comp_len ); ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_NULL; #if defined(MBEDTLS_ZLIB_SUPPORT) - for( i = 0; i < comp_len; ++i ) - { - if( buf[comp_offset + 1 + i] == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { + for ( i = 0; i < comp_len; ++i ) { + if ( buf[comp_offset + 1 + i] == MBEDTLS_SSL_COMPRESS_DEFLATE ) { ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_DEFLATE; break; } @@ -1500,199 +1398,190 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) /* See comments in ssl_write_client_hello() */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) ssl->session_negotiate->compression = MBEDTLS_SSL_COMPRESS_NULL; #endif /* Do not parse the extensions if the protocol is SSLv3 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) - { + if ( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) { #endif /* * Check the extension length */ ext_offset = comp_offset + 1 + comp_len; - if( msg_len > ext_offset ) - { - if( msg_len < ext_offset + 2 ) - { + if ( msg_len > ext_offset ) { + if ( msg_len < ext_offset + 2 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } ext_len = ( buf[ext_offset + 0] << 8 ) - | ( buf[ext_offset + 1] ); + | ( buf[ext_offset + 1] ); - if( ( ext_len > 0 && ext_len < 4 ) || - msg_len != ext_offset + 2 + ext_len ) - { + if ( ( ext_len > 0 && ext_len < 4 ) || + msg_len != ext_offset + 2 + ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - } - else + } else ext_len = 0; ext = buf + ext_offset + 2; MBEDTLS_SSL_DEBUG_BUF( 3, "client hello extensions", ext, ext_len ); - while( ext_len != 0 ) - { + while ( ext_len != 0 ) { unsigned int ext_id = ( ( ext[0] << 8 ) - | ( ext[1] ) ); + | ( ext[1] ) ); unsigned int ext_size = ( ( ext[2] << 8 ) - | ( ext[3] ) ); + | ( ext[3] ) ); - if( ext_size + 4 > ext_len ) - { + if ( ext_size + 4 > ext_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } - switch( ext_id ) - { + switch ( ext_id ) { #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - case MBEDTLS_TLS_EXT_SERVERNAME: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ServerName extension" ) ); - if( ssl->conf->f_sni == NULL ) + case MBEDTLS_TLS_EXT_SERVERNAME: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ServerName extension" ) ); + if ( ssl->conf->f_sni == NULL ) + break; + + ret = ssl_parse_servername_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); break; - - ret = ssl_parse_servername_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; #endif /* MBEDTLS_SSL_SERVER_NAME_INDICATION */ - case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); + case MBEDTLS_TLS_EXT_RENEGOTIATION_INFO: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found renegotiation extension" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - renegotiation_info_seen = 1; + renegotiation_info_seen = 1; #endif - ret = ssl_parse_renegotiation_info( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_renegotiation_info( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #if defined(MBEDTLS_SSL_PROTO_TLS1_2) && \ defined(MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED) - case MBEDTLS_TLS_EXT_SIG_ALG: + case MBEDTLS_TLS_EXT_SIG_ALG: MBEDTLS_SSL_DEBUG_MSG( 3, ( "found signature_algorithms extension" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - break; + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) + break; #endif - ret = ssl_parse_signature_algorithms_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_signature_algorithms_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_PROTO_TLS1_2 && MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported elliptic curves extension" ) ); - - ret = ssl_parse_supported_elliptic_curves( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; - - case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported point formats extension" ) ); - ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT; - - ret = ssl_parse_supported_point_formats( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + case MBEDTLS_TLS_EXT_SUPPORTED_ELLIPTIC_CURVES: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported elliptic curves extension" ) ); + + ret = ssl_parse_supported_elliptic_curves( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; + + case MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found supported point formats extension" ) ); + ssl->handshake->cli_exts |= MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT; + + ret = ssl_parse_supported_point_formats( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_ECDH_C || MBEDTLS_ECDSA_C || MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake kkpp extension" ) ); + case MBEDTLS_TLS_EXT_ECJPAKE_KKPP: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found ecjpake kkpp extension" ) ); - ret = ssl_parse_ecjpake_kkpp( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_ecjpake_kkpp( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max fragment length extension" ) ); + case MBEDTLS_TLS_EXT_MAX_FRAGMENT_LENGTH: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found max fragment length extension" ) ); - ret = ssl_parse_max_fragment_length_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_max_fragment_length_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) ); + case MBEDTLS_TLS_EXT_TRUNCATED_HMAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found truncated hmac extension" ) ); - ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_truncated_hmac_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt then mac extension" ) ); + case MBEDTLS_TLS_EXT_ENCRYPT_THEN_MAC: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found encrypt then mac extension" ) ); - ret = ssl_parse_encrypt_then_mac_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_encrypt_then_mac_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended master secret extension" ) ); + case MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found extended master secret extension" ) ); - ret = ssl_parse_extended_ms_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_extended_ms_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_EXTENDED_MASTER_SECRET */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) - case MBEDTLS_TLS_EXT_SESSION_TICKET: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session ticket extension" ) ); + case MBEDTLS_TLS_EXT_SESSION_TICKET: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found session ticket extension" ) ); - ret = ssl_parse_session_ticket_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_session_ticket_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_SESSION_TICKETS */ #if defined(MBEDTLS_SSL_ALPN) - case MBEDTLS_TLS_EXT_ALPN: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); + case MBEDTLS_TLS_EXT_ALPN: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "found alpn extension" ) ); - ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ); - if( ret != 0 ) - return( ret ); - break; + ret = ssl_parse_alpn_ext( ssl, ext + 4, ext_size ); + if ( ret != 0 ) + return ( ret ); + break; #endif /* MBEDTLS_SSL_SESSION_TICKETS */ - default: - MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", - ext_id ) ); + default: + MBEDTLS_SSL_DEBUG_MSG( 3, ( "unknown extension found: %d (ignoring)", + ext_id ) ); } ext_len -= 4 + ext_size; ext += 4 + ext_size; - if( ext_len > 0 && ext_len < 4 ) - { + if ( ext_len > 0 && ext_len < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client hello message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -1700,21 +1589,18 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) #endif #if defined(MBEDTLS_SSL_FALLBACK_SCSV) - for( i = 0, p = buf + 41 + sess_len; i < ciph_len; i += 2, p += 2 ) - { - if( p[0] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && - p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) - { + for ( i = 0, p = buf + 41 + sess_len; i < ciph_len; i += 2, p += 2 ) { + if ( p[0] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) && + p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE ) & 0xff ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received FALLBACK_SCSV" ) ); - if( ssl->minor_ver < ssl->conf->max_minor_ver ) - { + if ( ssl->minor_ver < ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "inapropriate fallback" ) ); mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); + MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } break; @@ -1725,20 +1611,17 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) /* * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */ - for( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 ) - { - if( p[0] == 0 && p[1] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) - { + for ( i = 0, p = buf + ciph_offset + 2; i < ciph_len; i += 2, p += 2 ) { + if ( p[0] == 0 && p[1] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "received TLS_EMPTY_RENEGOTIATION_INFO " ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received RENEGOTIATION SCSV during renegotiation" ) ); - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } #endif ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION; @@ -1749,42 +1632,35 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) /* * Renegotiation security checks */ - if( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) - { + if ( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_BREAK_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation, breaking off handshake" ) ); handshake_failure = 1; } #if defined(MBEDTLS_SSL_RENEGOTIATION) - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && - renegotiation_info_seen == 0 ) - { + else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_SECURE_RENEGOTIATION && + renegotiation_info_seen == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension missing (secure)" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "legacy renegotiation not allowed" ) ); handshake_failure = 1; - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - renegotiation_info_seen == 1 ) - { + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + renegotiation_info_seen == 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation_info extension present (legacy)" ) ); handshake_failure = 1; } #endif /* MBEDTLS_SSL_RENEGOTIATION */ - if( handshake_failure == 1 ) - { - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); + if ( handshake_failure == 1 ) { + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } /* @@ -1796,42 +1672,37 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver]; ciphersuite_info = NULL; #if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE) - for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) - { - for( i = 0; ciphersuites[i] != 0; i++ ) + for ( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) { + for ( i = 0; ciphersuites[i] != 0; i++ ) #else - for( i = 0; ciphersuites[i] != 0; i++ ) - { - for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) + for ( i = 0; ciphersuites[i] != 0; i++ ) { + for ( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 ) #endif { - if( p[0] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || - p[1] != ( ( ciphersuites[i] ) & 0xFF ) ) + if ( p[0] != ( ( ciphersuites[i] >> 8 ) & 0xFF ) || + p[1] != ( ( ciphersuites[i] ) & 0xFF ) ) continue; got_common_suite = 1; - if( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], - &ciphersuite_info ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_ciphersuite_match( ssl, ciphersuites[i], + &ciphersuite_info ) ) != 0 ) + return ( ret ); - if( ciphersuite_info != NULL ) + if ( ciphersuite_info != NULL ) goto have_ciphersuite; } } - if( got_common_suite ) - { + if ( got_common_suite ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got ciphersuites in common, " - "but none of them usable" ) ); + "but none of them usable" ) ); mbedtls_ssl_send_fatal_handshake_failure( ssl ); - return( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); - } - else - { + return ( MBEDTLS_ERR_SSL_NO_USABLE_CIPHERSUITE ); + } else { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no ciphersuites in common" ) ); mbedtls_ssl_send_fatal_handshake_failure( ssl ); - return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); + return ( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } have_ciphersuite: @@ -1843,24 +1714,23 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client hello" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->session_negotiate->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) - { + if ( ssl->session_negotiate->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_DISABLED ) { *olen = 0; return; } @@ -1879,16 +1749,15 @@ static void ssl_write_truncated_hmac_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; const mbedtls_ssl_ciphersuite_t *suite = NULL; const mbedtls_cipher_info_t *cipher = NULL; - if( ssl->session_negotiate->encrypt_then_mac == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->session_negotiate->encrypt_then_mac == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { *olen = 0; return; } @@ -1899,11 +1768,10 @@ static void ssl_write_encrypt_then_mac_ext( mbedtls_ssl_context *ssl, * with Associated Data (AEAD) ciphersuite, it MUST NOT send an * encrypt-then-MAC response extension back to the client." */ - if( ( suite = mbedtls_ssl_ciphersuite_from_id( - ssl->session_negotiate->ciphersuite ) ) == NULL || - ( cipher = mbedtls_cipher_info_from_type( suite->cipher ) ) == NULL || - cipher->mode != MBEDTLS_MODE_CBC ) - { + if ( ( suite = mbedtls_ssl_ciphersuite_from_id( + ssl->session_negotiate->ciphersuite ) ) == NULL || + ( cipher = mbedtls_cipher_info_from_type( suite->cipher ) ) == NULL || + cipher->mode != MBEDTLS_MODE_CBC ) { *olen = 0; return; } @@ -1927,15 +1795,14 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, { unsigned char *p = buf; - if( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_DISABLED || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { *olen = 0; return; } MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, adding extended master secret " - "extension" ) ); + "extension" ) ); *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET >> 8 ) & 0xFF ); *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_EXTENDED_MASTER_SECRET ) & 0xFF ); @@ -1949,13 +1816,12 @@ static void ssl_write_extended_ms_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_SESSION_TICKETS) static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->handshake->new_session_ticket == 0 ) - { + if ( ssl->handshake->new_session_ticket == 0 ) { *olen = 0; return; } @@ -1973,13 +1839,12 @@ static void ssl_write_session_ticket_ext( mbedtls_ssl_context *ssl, #endif /* MBEDTLS_SSL_SESSION_TICKETS */ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION ) - { + if ( ssl->secure_renegotiation != MBEDTLS_SSL_SECURE_RENEGOTIATION ) { *olen = 0; return; } @@ -1990,8 +1855,7 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_RENEGOTIATION_INFO ) & 0xFF ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) - { + if ( ssl->renego_status != MBEDTLS_SSL_INITIAL_HANDSHAKE ) { *p++ = 0x00; *p++ = ( ssl->verify_data_len * 2 + 1 ) & 0xFF; *p++ = ssl->verify_data_len * 2 & 0xFF; @@ -2000,8 +1864,7 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, p += ssl->verify_data_len; memcpy( p, ssl->own_verify_data, ssl->verify_data_len ); p += ssl->verify_data_len; - } - else + } else #endif /* MBEDTLS_SSL_RENEGOTIATION */ { *p++ = 0x00; @@ -2014,13 +1877,12 @@ static void ssl_write_renegotiation_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; - if( ssl->session_negotiate->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) - { + if ( ssl->session_negotiate->mfl_code == MBEDTLS_SSL_MAX_FRAG_LEN_NONE ) { *olen = 0; return; } @@ -2042,15 +1904,14 @@ static void ssl_write_max_fragment_length_ext( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) static void ssl_write_supported_point_formats_ext( mbedtls_ssl_context *ssl, - unsigned char *buf, - size_t *olen ) + unsigned char *buf, + size_t *olen ) { unsigned char *p = buf; ((void) ssl); - if( ( ssl->handshake->cli_exts & - MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT ) == 0 ) - { + if ( ( ssl->handshake->cli_exts & + MBEDTLS_TLS_EXT_SUPPORTED_POINT_FORMATS_PRESENT ) == 0 ) { *olen = 0; return; } @@ -2083,14 +1944,13 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, *olen = 0; /* Skip costly computation if not needed */ - if( ssl->transform_negotiate->ciphersuite_info->key_exchange != - MBEDTLS_KEY_EXCHANGE_ECJPAKE ) + if ( ssl->transform_negotiate->ciphersuite_info->key_exchange != + MBEDTLS_KEY_EXCHANGE_ECJPAKE ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, ecjpake kkpp extension" ) ); - if( end - p < 4 ) - { + if ( end - p < 4 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "buffer too small" ) ); return; } @@ -2099,11 +1959,10 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, *p++ = (unsigned char)( ( MBEDTLS_TLS_EXT_ECJPAKE_KKPP ) & 0xFF ); ret = mbedtls_ecjpake_write_round_one( &ssl->handshake->ecjpake_ctx, - p + 2, end - p - 2, &kkpp_len, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1 , "mbedtls_ecjpake_write_round_one", ret ); + p + 2, end - p - 2, &kkpp_len, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_one", ret ); return; } @@ -2118,8 +1977,7 @@ static void ssl_write_ecjpake_kkpp_ext( mbedtls_ssl_context *ssl, static void ssl_write_alpn_ext( mbedtls_ssl_context *ssl, unsigned char *buf, size_t *olen ) { - if( ssl->alpn_chosen == NULL ) - { + if ( ssl->alpn_chosen == NULL ) { *olen = 0; return; } @@ -2169,26 +2027,24 @@ static int ssl_write_hello_verify_request( mbedtls_ssl_context *ssl ) /* The RFC is not clear on this point, but sending the actual negotiated * version looks like the most interoperable thing to do. */ mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); MBEDTLS_SSL_DEBUG_BUF( 3, "server version", p, 2 ); p += 2; /* If we get here, f_cookie_check is not null */ - if( ssl->conf->f_cookie_write == NULL ) - { + if ( ssl->conf->f_cookie_write == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "inconsistent cookie callbacks" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } /* Skip length byte until we know the length */ cookie_len_byte = p++; - if( ( ret = ssl->conf->f_cookie_write( ssl->conf->p_cookie, - &p, ssl->out_buf + MBEDTLS_SSL_BUFFER_LEN, - ssl->cli_id, ssl->cli_id_len ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_cookie_write( ssl->conf->p_cookie, + &p, ssl->out_buf + MBEDTLS_SSL_BUFFER_LEN, + ssl->cli_id, ssl->cli_id_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "f_cookie_write", ret ); - return( ret ); + return ( ret ); } *cookie_len_byte = (unsigned char)( p - ( cookie_len_byte + 1 ) ); @@ -2201,15 +2057,14 @@ static int ssl_write_hello_verify_request( mbedtls_ssl_context *ssl ) ssl->state = MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write hello verify request" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ @@ -2225,20 +2080,18 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write server hello" ) ); #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->verify_cookie_len != 0 ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->verify_cookie_len != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "client hello was not authenticated" ) ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) ); - return( ssl_write_hello_verify_request( ssl ) ); + return ( ssl_write_hello_verify_request( ssl ) ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY */ - if( ssl->conf->f_rng == NULL ) - { + if ( ssl->conf->f_rng == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no RNG provided") ); - return( MBEDTLS_ERR_SSL_NO_RNG ); + return ( MBEDTLS_ERR_SSL_NO_RNG ); } /* @@ -2252,11 +2105,11 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) p = buf + 4; mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, p ); + ssl->conf->transport, p ); p += 2; MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen version: [%d:%d]", - buf[4], buf[5] ) ); + buf[4], buf[5] ) ); #if defined(MBEDTLS_HAVE_TIME) t = mbedtls_time( NULL ); @@ -2267,14 +2120,14 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, current time: %lu", t ) ); #else - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 4 ) ) != 0 ) + return ( ret ); p += 4; #endif /* MBEDTLS_HAVE_TIME */ - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, p, 28 ) ) != 0 ) + return ( ret ); p += 28; @@ -2287,20 +2140,18 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) * It may be already set to 1 by ssl_parse_session_ticket_ext(). * If not, try looking up session ID in our cache. */ - if( ssl->handshake->resume == 0 && + if ( ssl->handshake->resume == 0 && #if defined(MBEDTLS_SSL_RENEGOTIATION) - ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE && + ssl->renego_status == MBEDTLS_SSL_INITIAL_HANDSHAKE && #endif - ssl->session_negotiate->id_len != 0 && - ssl->conf->f_get_cache != NULL && - ssl->conf->f_get_cache( ssl->conf->p_cache, ssl->session_negotiate ) == 0 ) - { + ssl->session_negotiate->id_len != 0 && + ssl->conf->f_get_cache != NULL && + ssl->conf->f_get_cache( ssl->conf->p_cache, ssl->session_negotiate ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "session successfully restored from cache" ) ); ssl->handshake->resume = 1; } - if( ssl->handshake->resume == 0 ) - { + if ( ssl->handshake->resume == 0 ) { /* * New session, create a new session id, * unless we're about to issue a session ticket @@ -2312,32 +2163,27 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) #endif #if defined(MBEDTLS_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) - { + if ( ssl->handshake->new_session_ticket != 0 ) { ssl->session_negotiate->id_len = n = 0; memset( ssl->session_negotiate->id, 0, 32 ); - } - else + } else #endif /* MBEDTLS_SSL_SESSION_TICKETS */ { ssl->session_negotiate->id_len = n = 32; - if( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id, - n ) ) != 0 ) - return( ret ); + if ( ( ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->session_negotiate->id, + n ) ) != 0 ) + return ( ret ); } - } - else - { + } else { /* * Resuming a session */ n = ssl->session_negotiate->id_len; ssl->state = MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC; - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } } @@ -2356,78 +2202,76 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, session id len.: %d", n ) ); MBEDTLS_SSL_DEBUG_BUF( 3, "server hello, session id", buf + 39, n ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "%s session has been resumed", - ssl->handshake->resume ? "a" : "no" ) ); + ssl->handshake->resume ? "a" : "no" ) ); *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite >> 8 ); *p++ = (unsigned char)( ssl->session_negotiate->ciphersuite ); *p++ = (unsigned char)( ssl->session_negotiate->compression ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, chosen ciphersuite: %s", - mbedtls_ssl_get_ciphersuite_name( ssl->session_negotiate->ciphersuite ) ) ); + mbedtls_ssl_get_ciphersuite_name( ssl->session_negotiate->ciphersuite ) ) ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, compress alg.: 0x%02X", - ssl->session_negotiate->compression ) ); + ssl->session_negotiate->compression ) ); /* Do not write the extensions if the protocol is SSLv3 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) - { + if ( ( ssl->major_ver != 3 ) || ( ssl->minor_ver != 0 ) ) { #endif - /* - * First write extensions, then the total length - */ - ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + /* + * First write extensions, then the total length + */ + ssl_write_renegotiation_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) - ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_max_fragment_length_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_TRUNCATED_HMAC) - ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_truncated_hmac_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - ssl_write_encrypt_then_mac_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_encrypt_then_mac_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - ssl_write_extended_ms_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_extended_ms_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_SESSION_TICKETS) - ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_session_ticket_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_ECDH_C) || defined(MBEDTLS_ECDSA_C) || \ defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_supported_point_formats_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - ssl_write_ecjpake_kkpp_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_ecjpake_kkpp_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif #if defined(MBEDTLS_SSL_ALPN) - ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen ); - ext_len += olen; + ssl_write_alpn_ext( ssl, p + 2 + ext_len, &olen ); + ext_len += olen; #endif - MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, total extension length: %d", ext_len ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "server hello, total extension length: %d", ext_len ) ); - if( ext_len > 0 ) - { - *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); - *p++ = (unsigned char)( ( ext_len ) & 0xFF ); - p += ext_len; - } + if ( ext_len > 0 ) { + *p++ = (unsigned char)( ( ext_len >> 8 ) & 0xFF ); + *p++ = (unsigned char)( ( ext_len ) & 0xFF ); + p += ext_len; + } #if defined(MBEDTLS_SSL_PROTO_SSL3) } @@ -2441,7 +2285,7 @@ static int ssl_write_server_hello( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) ); - return( ret ); + return ( ret ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -2456,19 +2300,18 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate request" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) @@ -2487,21 +2330,20 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) + if ( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) authmode = ssl->handshake->sni_authmode; else #endif authmode = ssl->conf->authmode; - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || - authmode == MBEDTLS_SSL_VERIFY_NONE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || + authmode == MBEDTLS_SSL_VERIFY_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate request" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2552,18 +2394,16 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) * enum { (255) } HashAlgorithm; * enum { (255) } SignatureAlgorithm; */ - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { const int *cur; /* * Supported signature algorithms */ - for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) - { + for ( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) { unsigned char hash = mbedtls_ssl_hash_from_md_alg( *cur ); - if( MBEDTLS_SSL_HASH_NONE == hash || mbedtls_ssl_set_calc_verify_md( ssl, hash ) ) + if ( MBEDTLS_SSL_HASH_NONE == hash || mbedtls_ssl_set_calc_verify_md( ssl, hash ) ) continue; #if defined(MBEDTLS_RSA_C) @@ -2589,21 +2429,19 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) */ p += 2; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_ca_chain != NULL ) + if ( ssl->handshake->sni_ca_chain != NULL ) crt = ssl->handshake->sni_ca_chain; else #endif crt = ssl->conf->ca_chain; total_dn_size = 0; - while( crt != NULL && crt->version != 0 ) - { + while ( crt != NULL && crt->version != 0 ) { dn_size = crt->subject_raw.len; - if( end < p || - (size_t)( end - p ) < dn_size || - (size_t)( end - p ) < 2 + dn_size ) - { + if ( end < p || + (size_t)( end - p ) < dn_size || + (size_t)( end - p ) < 2 + dn_size ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "skipping CAs: buffer too short" ) ); break; } @@ -2629,7 +2467,7 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate request" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -2644,21 +2482,19 @@ static int ssl_get_ecdh_params_from_cert( mbedtls_ssl_context *ssl ) { int ret; - if( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECKEY ) ) - { + if ( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_ECKEY ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server key not ECDH capable" ) ); - return( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); + return ( MBEDTLS_ERR_SSL_PK_TYPE_MISMATCH ); } - if( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, - mbedtls_pk_ec( *mbedtls_ssl_own_key( ssl ) ), - MBEDTLS_ECDH_OURS ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_get_params( &ssl->handshake->ecdh_ctx, + mbedtls_pk_ec( *mbedtls_ssl_own_key( ssl ) ), + MBEDTLS_ECDH_OURS ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ecdh_get_params" ), ret ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ @@ -2668,7 +2504,7 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) int ret; size_t n = 0; const mbedtls_ssl_ciphersuite_t *ciphersuite_info = - ssl->transform_negotiate->ciphersuite_info; + ssl->transform_negotiate->ciphersuite_info; #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ @@ -2689,41 +2525,37 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { ssl_get_ecdh_params_from_cert( ssl ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write server key exchange" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { size_t jlen; const unsigned char *end = ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN; ret = mbedtls_ecjpake_write_round_two( &ssl->handshake->ecjpake_ctx, - p, end - p, &jlen, ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { + p, end - p, &jlen, ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_write_round_two", ret ); - return( ret ); + return ( ret ); } p += jlen; @@ -2733,9 +2565,8 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { /* Note: we don't support identity hints, until someone asks * for them. */ *(p++) = 0x00; @@ -2748,13 +2579,11 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - if( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + if ( ssl->conf->dhm_P.p == NULL || ssl->conf->dhm_G.p == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no DH parameters set" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* @@ -2766,19 +2595,17 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) * opaque dh_Ys<1..2^16-1>; * } ServerDHParams; */ - if( ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.P, &ssl->conf->dhm_P ) ) != 0 || - ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.G, &ssl->conf->dhm_G ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.P, &ssl->conf->dhm_P ) ) != 0 || + ( ret = mbedtls_mpi_copy( &ssl->handshake->dhm_ctx.G, &ssl->conf->dhm_G ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_mpi_copy", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_dhm_make_params( &ssl->handshake->dhm_ctx, - (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), - p, &len, ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_make_params( &ssl->handshake->dhm_ctx, + (int) mbedtls_mpi_size( &ssl->handshake->dhm_ctx.P ), + p, &len, ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_make_params", ret ); - return( ret ); + return ( ret ); } dig_signed = p; @@ -2796,10 +2623,9 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__ECDHE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { /* * Ephemeral ECDH parameters: * @@ -2812,33 +2638,30 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) const mbedtls_ecp_group_id *gid; /* Match our preference list against the offered curves */ - for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) - for( curve = ssl->handshake->curves; *curve != NULL; curve++ ) - if( (*curve)->grp_id == *gid ) + for ( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) + for ( curve = ssl->handshake->curves; *curve != NULL; curve++ ) + if ( (*curve)->grp_id == *gid ) goto curve_matching_done; -curve_matching_done: - if( curve == NULL || *curve == NULL ) - { + curve_matching_done: + if ( curve == NULL || *curve == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "no matching curve for ECDHE" ) ); - return( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); + return ( MBEDTLS_ERR_SSL_NO_CIPHER_CHOSEN ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "ECDHE curve: %s", (*curve)->name ) ); - if( ( ret = mbedtls_ecp_group_load( &ssl->handshake->ecdh_ctx.grp, - (*curve)->grp_id ) ) != 0 ) - { + if ( ( ret = mbedtls_ecp_group_load( &ssl->handshake->ecdh_ctx.grp, + (*curve)->grp_id ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecp_group_load", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_ecdh_make_params( &ssl->handshake->ecdh_ctx, &len, - p, MBEDTLS_SSL_MAX_CONTENT_LEN - n, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_ecdh_make_params( &ssl->handshake->ecdh_ctx, &len, + p, MBEDTLS_SSL_MAX_CONTENT_LEN - n, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_make_params", ret ); - return( ret ); + return ( ret ); } dig_signed = p; @@ -2854,10 +2677,9 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { size_t signature_len = 0; unsigned int hashlen = 0; unsigned char hash[64]; @@ -2867,38 +2689,32 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) * Choose hash algorithm. NONE means MD5 + SHA1 here. */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { md_alg = mbedtls_ssl_md_alg_from_hash( ssl->handshake->sig_alg ); - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ciphersuite_info->key_exchange == - MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) - { - md_alg = MBEDTLS_MD_SHA1; - } - else + if ( ciphersuite_info->key_exchange == + MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA ) { + md_alg = MBEDTLS_MD_SHA1; + } else #endif - { - md_alg = MBEDTLS_MD_NONE; - } + { + md_alg = MBEDTLS_MD_NONE; + } /* * Compute the hash to be signed */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( md_alg == MBEDTLS_MD_NONE ) - { + if ( md_alg == MBEDTLS_MD_NONE ) { mbedtls_md5_context mbedtls_md5; mbedtls_sha1_context mbedtls_sha1; @@ -2932,64 +2748,58 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) mbedtls_md5_free( &mbedtls_md5 ); mbedtls_sha1_free( &mbedtls_sha1 ); - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || \ MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( md_alg != MBEDTLS_MD_NONE ) - { - mbedtls_md_context_t ctx; - const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); - - mbedtls_md_init( &ctx ); - - /* Info from md_alg will be used instead */ - hashlen = 0; - - /* - * digitally-signed struct { - * opaque client_random[32]; - * opaque server_random[32]; - * ServerDHParams params; - * }; - */ - if( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - return( ret ); - } - - mbedtls_md_starts( &ctx ); - mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); - mbedtls_md_update( &ctx, dig_signed, dig_signed_len ); - mbedtls_md_finish( &ctx, hash ); - mbedtls_md_free( &ctx ); - } - else + if ( md_alg != MBEDTLS_MD_NONE ) { + mbedtls_md_context_t ctx; + const mbedtls_md_info_t *md_info = mbedtls_md_info_from_type( md_alg ); + + mbedtls_md_init( &ctx ); + + /* Info from md_alg will be used instead */ + hashlen = 0; + + /* + * digitally-signed struct { + * opaque client_random[32]; + * opaque server_random[32]; + * ServerDHParams params; + * }; + */ + if ( ( ret = mbedtls_md_setup( &ctx, md_info, 0 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); + return ( ret ); + } + + mbedtls_md_starts( &ctx ); + mbedtls_md_update( &ctx, ssl->handshake->randbytes, 64 ); + mbedtls_md_update( &ctx, dig_signed, dig_signed_len ); + mbedtls_md_finish( &ctx, hash ); + mbedtls_md_free( &ctx ); + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 3, "parameters hash", hash, hashlen != 0 ? hashlen : - (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); + (unsigned int) ( mbedtls_md_get_size( mbedtls_md_info_from_type( md_alg ) ) ) ); /* * Make the signature */ - if( mbedtls_ssl_own_key( ssl ) == NULL ) - { + if ( mbedtls_ssl_own_key( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no private key" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { *(p++) = ssl->handshake->sig_alg; *(p++) = mbedtls_ssl_sig_from_pk( mbedtls_ssl_own_key( ssl ) ); @@ -2997,12 +2807,11 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) } #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - if( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash, hashlen, - p + 2 , &signature_len, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_sign( mbedtls_ssl_own_key( ssl ), md_alg, hash, hashlen, + p + 2, &signature_len, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_sign", ret ); - return( ret ); + return ( ret ); } *(p++) = (unsigned char)( signature_len >> 8 ); @@ -3023,15 +2832,14 @@ static int ssl_write_server_key_exchange( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server key exchange" ) ); - return( 0 ); + return ( 0 ); } static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl ) @@ -3047,19 +2855,18 @@ static int ssl_write_server_hello_done( mbedtls_ssl_context *ssl ) ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello done" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) || \ @@ -3073,32 +2880,29 @@ static int ssl_parse_client_dh_public( mbedtls_ssl_context *ssl, unsigned char * /* * Receive G^Y mod P, premaster = (G^Y)^X mod P */ - if( *p + 2 > end ) - { + if ( *p + 2 > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } n = ( (*p)[0] << 8 ) | (*p)[1]; *p += 2; - if( *p + n > end ) - { + if ( *p + n > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_read_public( &ssl->handshake->dhm_ctx, *p, n ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_read_public", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); } *p += n; MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: GY", &ssl->handshake->dhm_ctx.GY ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ @@ -3119,10 +2923,9 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, size_t i, peer_pmslen; unsigned int diff; - if( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_RSA ) ) - { + if ( ! mbedtls_pk_can_do( mbedtls_ssl_own_key( ssl ), MBEDTLS_PK_RSA ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no RSA private key" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } /* @@ -3130,26 +2933,23 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( *p++ != ( ( len >> 8 ) & 0xFF ) || - *p++ != ( ( len ) & 0xFF ) ) - { + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( *p++ != ( ( len >> 8 ) & 0xFF ) || + *p++ != ( ( len ) & 0xFF ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } } #endif - if( p + len != end ) - { + if ( p + len != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } mbedtls_ssl_write_version( ssl->handshake->max_major_ver, - ssl->handshake->max_minor_ver, - ssl->conf->transport, ver ); + ssl->handshake->max_minor_ver, + ssl->conf->transport, ver ); /* * Protection against Bleichenbacher's attack: invalid PKCS#1 v1.5 padding @@ -3159,13 +2959,13 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, * timing-based variants. */ ret = ssl->conf->f_rng( ssl->conf->p_rng, fake_pms, sizeof( fake_pms ) ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); ret = mbedtls_pk_decrypt( mbedtls_ssl_own_key( ssl ), p, len, - peer_pms, &peer_pmslen, - sizeof( peer_pms ), - ssl->conf->f_rng, ssl->conf->p_rng ); + peer_pms, &peer_pmslen, + sizeof( peer_pms ), + ssl->conf->f_rng, ssl->conf->p_rng ); diff = (unsigned int) ret; diff |= peer_pmslen ^ 48; @@ -3173,15 +2973,14 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, diff |= peer_pms[1] ^ ver[1]; #if defined(MBEDTLS_SSL_DEBUG_ALL) - if( diff != 0 ) + if ( diff != 0 ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); #endif - if( sizeof( ssl->handshake->premaster ) < pms_offset || - sizeof( ssl->handshake->premaster ) - pms_offset < 48 ) - { + if ( sizeof( ssl->handshake->premaster ) < pms_offset || + sizeof( ssl->handshake->premaster ) - pms_offset < 48 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } ssl->handshake->pmslen = 48; @@ -3197,79 +2996,70 @@ static int ssl_parse_encrypted_pms( mbedtls_ssl_context *ssl, #pragma warning( pop ) #endif - for( i = 0; i < ssl->handshake->pmslen; i++ ) + for ( i = 0; i < ssl->handshake->pmslen; i++ ) pms[i] = ( mask & fake_pms[i] ) | ( (~mask) & peer_pms[i] ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) static int ssl_parse_client_psk_identity( mbedtls_ssl_context *ssl, unsigned char **p, - const unsigned char *end ) + const unsigned char *end ) { int ret = 0; size_t n; - if( ssl->conf->f_psk == NULL && - ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || - ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) - { + if ( ssl->conf->f_psk == NULL && + ( ssl->conf->psk == NULL || ssl->conf->psk_identity == NULL || + ssl->conf->psk_identity_len == 0 || ssl->conf->psk_len == 0 ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no pre-shared key" ) ); - return( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_PRIVATE_KEY_REQUIRED ); } /* * Receive client pre-shared key identity name */ - if( *p + 2 > end ) - { + if ( *p + 2 > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } n = ( (*p)[0] << 8 ) | (*p)[1]; *p += 2; - if( n < 1 || n > 65535 || *p + n > end ) - { + if ( n < 1 || n > 65535 || *p + n > end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ssl->conf->f_psk != NULL ) - { - if( ssl->conf->f_psk( ssl->conf->p_psk, ssl, *p, n ) != 0 ) + if ( ssl->conf->f_psk != NULL ) { + if ( ssl->conf->f_psk( ssl->conf->p_psk, ssl, *p, n ) != 0 ) ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY; - } - else - { + } else { /* Identity is not a big secret since clients send it in the clear, * but treat it carefully anyway, just in case */ - if( n != ssl->conf->psk_identity_len || - mbedtls_ssl_safer_memcmp( ssl->conf->psk_identity, *p, n ) != 0 ) - { + if ( n != ssl->conf->psk_identity_len || + mbedtls_ssl_safer_memcmp( ssl->conf->psk_identity, *p, n ) != 0 ) { ret = MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY; } } - if( ret == MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ) - { + if ( ret == MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ) { MBEDTLS_SSL_DEBUG_BUF( 3, "Unknown PSK identity", *p, n ); - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_UNKNOWN_PSK_IDENTITY ) ) != 0 ) { + return ( ret ); } - return( MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ); + return ( MBEDTLS_ERR_SSL_UNKNOWN_IDENTITY ); } *p += n; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ @@ -3283,244 +3073,203 @@ static int ssl_parse_client_key_exchange( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse client key exchange" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } p = ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ); end = ssl->in_msg + ssl->in_hslen; - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_KEY_EXCHANGE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } #if defined(MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) - { - if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_RSA ) { + if ( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); } - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, - ssl->handshake->premaster, - MBEDTLS_PREMASTER_SIZE, - &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { + if ( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, + ssl->handshake->premaster, + MBEDTLS_PREMASTER_SIZE, + &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); } MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED) || \ defined(MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) - { - if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, - p, end - p) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_RSA || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA ) { + if ( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, + p, end - p) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); + } - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, - &ssl->handshake->pmslen, - ssl->handshake->premaster, - MBEDTLS_MPI_MAX_SIZE, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); - } + if ( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, + &ssl->handshake->pmslen, + ssl->handshake->premaster, + MBEDTLS_MPI_MAX_SIZE, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_CS ); + } - MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z ", &ssl->handshake->ecdh_ctx.z ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z ", &ssl->handshake->ecdh_ctx.z ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED || MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - - if( p != end ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } + + if ( p != end ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + } + + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - - if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret ); - return( ret ); - } - - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } + + if ( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 2 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_encrypted_pms" ), ret ); + return ( ret ); + } + + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - if( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); - return( ret ); - } - - if( p != end ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); - } - - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } + if ( ( ret = ssl_parse_client_dh_public( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_dh_public" ), ret ); + return ( ret ); + } + + if ( p != end ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad client key exchange" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE ); + } + + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - if( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); - return( ret ); - } - - if( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, - p, end - p ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); - } - - MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); - - if( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, - ciphersuite_info->key_exchange ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + if ( ( ret = ssl_parse_client_psk_identity( ssl, &p, end ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_client_psk_identity" ), ret ); + return ( ret ); + } + + if ( ( ret = mbedtls_ecdh_read_public( &ssl->handshake->ecdh_ctx, + p, end - p ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_read_public", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_KEY_EXCHANGE_RP ); + } + + MBEDTLS_SSL_DEBUG_ECP( 3, "ECDH: Qp ", &ssl->handshake->ecdh_ctx.Qp ); + + if ( ( ret = mbedtls_ssl_psk_derive_premaster( ssl, + ciphersuite_info->key_exchange ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_psk_derive_premaster", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) - { - if( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 0 ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_parse_encrypted_pms_secret" ), ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA ) { + if ( ( ret = ssl_parse_encrypted_pms( ssl, p, end, 0 ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, ( "ssl_parse_parse_encrypted_pms_secret" ), ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED) - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { - ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, - p, end - p ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); - return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); - } - - ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, - ssl->handshake->premaster, 32, &ssl->handshake->pmslen, - ssl->conf->f_rng, ssl->conf->p_rng ); - if( ret != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); - return( ret ); - } - } - else + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { + ret = mbedtls_ecjpake_read_round_two( &ssl->handshake->ecjpake_ctx, + p, end - p ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_read_round_two", ret ); + return ( MBEDTLS_ERR_SSL_BAD_HS_SERVER_KEY_EXCHANGE ); + } + + ret = mbedtls_ecjpake_derive_secret( &ssl->handshake->ecjpake_ctx, + ssl->handshake->premaster, 32, &ssl->handshake->pmslen, + ssl->conf->f_rng, ssl->conf->p_rng ); + if ( ret != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecjpake_derive_secret", ret ); + return ( ret ); + } + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_derive_keys( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_derive_keys", ret ); - return( ret ); + return ( ret ); } ssl->state++; MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse client key exchange" ) ); - return( 0 ); + return ( 0 ); } #if !defined(MBEDTLS_KEY_EXCHANGE_RSA_ENABLED) && \ @@ -3535,19 +3284,18 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) @@ -3565,45 +3313,41 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate verify" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || - ssl->session_negotiate->peer_cert == NULL ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE || + ssl->session_negotiate->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate verify" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } /* Read the message without adding it to the checksum */ do { - if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret ); - return( ret ); + return ( ret ); } ret = mbedtls_ssl_handle_message_type( ssl ); - } while( MBEDTLS_ERR_SSL_NON_FATAL == ret ); + } while ( MBEDTLS_ERR_SSL_NON_FATAL == ret ); - if( 0 != ret ) - { + if ( 0 != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret ); - return( ret ); + return ( ret ); } ssl->state++; /* Process the message contents */ - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE || - ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE || + ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } i = mbedtls_ssl_hs_hdr_len( ssl ); @@ -3616,114 +3360,102 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) */ #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) { md_alg = MBEDTLS_MD_NONE; hashlen = 36; /* For ECDSA, use SHA-1, not MD-5 + SHA-1 */ - if( mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, - MBEDTLS_PK_ECDSA ) ) - { + if ( mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, + MBEDTLS_PK_ECDSA ) ) { hash_start += 16; hashlen -= 16; md_alg = MBEDTLS_MD_SHA1; } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 || MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */ #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - if( i + 2 > ssl->in_hslen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + if ( i + 2 > ssl->in_hslen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } - /* - * Hash - */ - md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] ); + /* + * Hash + */ + md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] ); - if( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" - " for verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + if ( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" + " for verify message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } #if !defined(MBEDTLS_MD_SHA1) - if( MBEDTLS_MD_SHA1 == md_alg ) - hash_start += 16; + if ( MBEDTLS_MD_SHA1 == md_alg ) + hash_start += 16; #endif - /* Info from md_alg will be used instead */ - hashlen = 0; + /* Info from md_alg will be used instead */ + hashlen = 0; - i++; + i++; - /* - * Signature - */ - if( ( pk_alg = mbedtls_ssl_pk_alg_from_sig( ssl->in_msg[i] ) ) - == MBEDTLS_PK_NONE ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" - " for verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + /* + * Signature + */ + if ( ( pk_alg = mbedtls_ssl_pk_alg_from_sig( ssl->in_msg[i] ) ) + == MBEDTLS_PK_NONE ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" + " for verify message" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } - /* - * Check the certificate's key type matches the signature alg - */ - if( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); - } + /* + * Check the certificate's key type matches the signature alg + */ + if ( ! mbedtls_pk_can_do( &ssl->session_negotiate->peer_cert->pk, pk_alg ) ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "sig_alg doesn't match cert key" ) ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + } - i++; - } - else + i++; + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - if( i + 2 > ssl->in_hslen ) - { + if ( i + 2 > ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - sig_len = ( ssl->in_msg[i] << 8 ) | ssl->in_msg[i+1]; + sig_len = ( ssl->in_msg[i] << 8 ) | ssl->in_msg[i + 1]; i += 2; - if( i + sig_len != ssl->in_hslen ) - { + if ( i + sig_len != ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate verify message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } /* Calculate hash and verify signature */ ssl->handshake->calc_verify( ssl, hash ); - if( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, - md_alg, hash_start, hashlen, - ssl->in_msg + i, sig_len ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, + md_alg, hash_start, hashlen, + ssl->in_msg + i, sig_len ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_pk_verify", ret ); - return( ret ); + return ( ret ); } mbedtls_ssl_update_handshake_status( ssl ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED && !MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED && @@ -3755,12 +3487,11 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) * 10 . 9+n ticket content */ - if( ( ret = ssl->conf->f_ticket_write( ssl->conf->p_ticket, - ssl->session_negotiate, - ssl->out_msg + 10, - ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN, - &tlen, &lifetime ) ) != 0 ) - { + if ( ( ret = ssl->conf->f_ticket_write( ssl->conf->p_ticket, + ssl->session_negotiate, + ssl->out_msg + 10, + ssl->out_msg + MBEDTLS_SSL_MAX_CONTENT_LEN, + &tlen, &lifetime ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_ticket_write", ret ); tlen = 0; } @@ -3781,15 +3512,14 @@ static int ssl_write_new_session_ticket( mbedtls_ssl_context *ssl ) */ ssl->handshake->new_session_ticket = 0; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write new session ticket" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS */ @@ -3800,25 +3530,23 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER || ssl->handshake == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "server state: %d", ssl->state ) ); - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) + return ( ret ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - return( ret ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) + return ( ret ); } #endif - switch( ssl->state ) - { + switch ( ssl->state ) { case MBEDTLS_SSL_HELLO_REQUEST: ssl->state = MBEDTLS_SSL_CLIENT_HELLO; break; @@ -3832,7 +3560,7 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_SSL_PROTO_DTLS) case MBEDTLS_SSL_SERVER_HELLO_VERIFY_REQUEST_SENT: - return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); #endif /* @@ -3896,7 +3624,7 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) */ case MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC: #if defined(MBEDTLS_SSL_SESSION_TICKETS) - if( ssl->handshake->new_session_ticket != 0 ) + if ( ssl->handshake->new_session_ticket != 0 ) ret = ssl_write_new_session_ticket( ssl ); else #endif @@ -3918,9 +3646,9 @@ int mbedtls_ssl_handshake_server_step( mbedtls_ssl_context *ssl ) default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid state %d", ssl->state ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SSL_SRV_C */ diff --git a/external_libs/mbedtls/library/ssl_ticket.c b/external_libs/mbedtls/library/ssl_ticket.c index 4d9116d..76bb1e4 100644 --- a/external_libs/mbedtls/library/ssl_ticket.c +++ b/external_libs/mbedtls/library/ssl_ticket.c @@ -40,8 +40,10 @@ #include /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -72,11 +74,11 @@ static int ssl_ticket_gen_key( mbedtls_ssl_ticket_context *ctx, key->generation_time = (uint32_t) mbedtls_time( NULL ); #endif - if( ( ret = ctx->f_rng( ctx->p_rng, key->name, sizeof( key->name ) ) ) != 0 ) - return( ret ); + if ( ( ret = ctx->f_rng( ctx->p_rng, key->name, sizeof( key->name ) ) ) != 0 ) + return ( ret ); - if( ( ret = ctx->f_rng( ctx->p_rng, buf, sizeof( buf ) ) ) != 0 ) - return( ret ); + if ( ( ret = ctx->f_rng( ctx->p_rng, buf, sizeof( buf ) ) ) != 0 ) + return ( ret ); /* With GCM and CCM, same context can encrypt & decrypt */ ret = mbedtls_cipher_setkey( &key->ctx, buf, @@ -85,7 +87,7 @@ static int ssl_ticket_gen_key( mbedtls_ssl_ticket_context *ctx, mbedtls_zeroize( buf, sizeof( buf ) ); - return( ret ); + return ( ret ); } /* @@ -96,33 +98,30 @@ static int ssl_ticket_update_keys( mbedtls_ssl_ticket_context *ctx ) #if !defined(MBEDTLS_HAVE_TIME) ((void) ctx); #else - if( ctx->ticket_lifetime != 0 ) - { + if ( ctx->ticket_lifetime != 0 ) { uint32_t current_time = (uint32_t) mbedtls_time( NULL ); uint32_t key_time = ctx->keys[ctx->active].generation_time; - if( current_time > key_time && - current_time - key_time < ctx->ticket_lifetime ) - { - return( 0 ); + if ( current_time > key_time && + current_time - key_time < ctx->ticket_lifetime ) { + return ( 0 ); } ctx->active = 1 - ctx->active; - return( ssl_ticket_gen_key( ctx, ctx->active ) ); - } - else + return ( ssl_ticket_gen_key( ctx, ctx->active ) ); + } else #endif /* MBEDTLS_HAVE_TIME */ - return( 0 ); + return ( 0 ); } /* * Setup context for actual use */ int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx, - int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, - mbedtls_cipher_type_t cipher, - uint32_t lifetime ) + int (*f_rng)(void *, unsigned char *, size_t), void *p_rng, + mbedtls_cipher_type_t cipher, + uint32_t lifetime ) { int ret; const mbedtls_cipher_info_t *cipher_info; @@ -133,31 +132,28 @@ int mbedtls_ssl_ticket_setup( mbedtls_ssl_ticket_context *ctx, ctx->ticket_lifetime = lifetime; cipher_info = mbedtls_cipher_info_from_type( cipher); - if( cipher_info == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cipher_info == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( cipher_info->mode != MBEDTLS_MODE_GCM && - cipher_info->mode != MBEDTLS_MODE_CCM ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cipher_info->mode != MBEDTLS_MODE_GCM && + cipher_info->mode != MBEDTLS_MODE_CCM ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( cipher_info->key_bitlen > 8 * MAX_KEY_BYTES ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cipher_info->key_bitlen > 8 * MAX_KEY_BYTES ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ( ret = mbedtls_cipher_setup( &ctx->keys[0].ctx, cipher_info ) ) != 0 || - ( ret = mbedtls_cipher_setup( &ctx->keys[1].ctx, cipher_info ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_cipher_setup( &ctx->keys[0].ctx, cipher_info ) ) != 0 || + ( ret = mbedtls_cipher_setup( &ctx->keys[1].ctx, cipher_info ) ) != 0 ) { + return ( ret ); } - if( ( ret = ssl_ticket_gen_key( ctx, 0 ) ) != 0 || - ( ret = ssl_ticket_gen_key( ctx, 1 ) ) != 0 ) - { - return( ret ); + if ( ( ret = ssl_ticket_gen_key( ctx, 0 ) ) != 0 || + ( ret = ssl_ticket_gen_key( ctx, 1 ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -176,27 +172,27 @@ static int ssl_save_session( const mbedtls_ssl_session *session, size_t cert_len; #endif /* MBEDTLS_X509_CRT_PARSE_C */ - if( left < sizeof( mbedtls_ssl_session ) ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( left < sizeof( mbedtls_ssl_session ) ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); memcpy( p, session, sizeof( mbedtls_ssl_session ) ); p += sizeof( mbedtls_ssl_session ); left -= sizeof( mbedtls_ssl_session ); #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( session->peer_cert == NULL ) + if ( session->peer_cert == NULL ) cert_len = 0; else cert_len = session->peer_cert->raw.len; - if( left < 3 + cert_len ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( left < 3 + cert_len ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); *p++ = (unsigned char)( cert_len >> 16 & 0xFF ); *p++ = (unsigned char)( cert_len >> 8 & 0xFF ); *p++ = (unsigned char)( cert_len & 0xFF ); - if( session->peer_cert != NULL ) + if ( session->peer_cert != NULL ) memcpy( p, session->peer_cert->raw.p, cert_len ); p += cert_len; @@ -204,7 +200,7 @@ static int ssl_save_session( const mbedtls_ssl_session *session, *olen = p - buf; - return( 0 ); + return ( 0 ); } /* @@ -219,54 +215,50 @@ static int ssl_load_session( mbedtls_ssl_session *session, size_t cert_len; #endif /* MBEDTLS_X509_CRT_PARSE_C */ - if( p + sizeof( mbedtls_ssl_session ) > end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p + sizeof( mbedtls_ssl_session ) > end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); memcpy( session, p, sizeof( mbedtls_ssl_session ) ); p += sizeof( mbedtls_ssl_session ); #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( p + 3 > end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p + 3 > end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); cert_len = ( p[0] << 16 ) | ( p[1] << 8 ) | p[2]; p += 3; - if( cert_len == 0 ) - { + if ( cert_len == 0 ) { session->peer_cert = NULL; - } - else - { + } else { int ret; - if( p + cert_len > end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p + cert_len > end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); session->peer_cert = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); - if( session->peer_cert == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( session->peer_cert == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); mbedtls_x509_crt_init( session->peer_cert ); - if( ( ret = mbedtls_x509_crt_parse_der( session->peer_cert, - p, cert_len ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_crt_parse_der( session->peer_cert, + p, cert_len ) ) != 0 ) { mbedtls_x509_crt_free( session->peer_cert ); mbedtls_free( session->peer_cert ); session->peer_cert = NULL; - return( ret ); + return ( ret ); } p += cert_len; } #endif /* MBEDTLS_X509_CRT_PARSE_C */ - if( p != end ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( p != end ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - return( 0 ); + return ( 0 ); } /* @@ -301,20 +293,20 @@ int mbedtls_ssl_ticket_write( void *p_ticket, *tlen = 0; - if( ctx == NULL || ctx->f_rng == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->f_rng == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* We need at least 4 bytes for key_name, 12 for IV, 2 for len 16 for tag, * in addition to session itself, that will be checked when writing it. */ - if( end - start < 4 + 12 + 2 + 16 ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( end - start < 4 + 12 + 2 + 16 ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif - if( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) + if ( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) goto cleanup; key = &ctx->keys[ctx->active]; @@ -323,29 +315,26 @@ int mbedtls_ssl_ticket_write( void *p_ticket, memcpy( key_name, key->name, 4 ); - if( ( ret = ctx->f_rng( ctx->p_rng, iv, 12 ) ) != 0 ) + if ( ( ret = ctx->f_rng( ctx->p_rng, iv, 12 ) ) != 0 ) goto cleanup; /* Dump session state */ - if( ( ret = ssl_save_session( session, - state, end - state, &clear_len ) ) != 0 || - (unsigned long) clear_len > 65535 ) - { - goto cleanup; + if ( ( ret = ssl_save_session( session, + state, end - state, &clear_len ) ) != 0 || + (unsigned long) clear_len > 65535 ) { + goto cleanup; } state_len_bytes[0] = ( clear_len >> 8 ) & 0xff; state_len_bytes[1] = ( clear_len ) & 0xff; /* Encrypt and authenticate */ tag = state + clear_len; - if( ( ret = mbedtls_cipher_auth_encrypt( &key->ctx, - iv, 12, key_name, 4 + 12 + 2, - state, clear_len, state, &ciph_len, tag, 16 ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_auth_encrypt( &key->ctx, + iv, 12, key_name, 4 + 12 + 2, + state, clear_len, state, &ciph_len, tag, 16 ) ) != 0 ) { goto cleanup; } - if( ciph_len != clear_len ) - { + if ( ciph_len != clear_len ) { ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR; goto cleanup; } @@ -354,27 +343,27 @@ int mbedtls_ssl_ticket_write( void *p_ticket, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* * Select key based on name */ static mbedtls_ssl_ticket_key *ssl_ticket_select_key( - mbedtls_ssl_ticket_context *ctx, - const unsigned char name[4] ) + mbedtls_ssl_ticket_context *ctx, + const unsigned char name[4] ) { unsigned char i; - for( i = 0; i < sizeof( ctx->keys ) / sizeof( *ctx->keys ); i++ ) - if( memcmp( name, ctx->keys[i].name, 4 ) == 0 ) - return( &ctx->keys[i] ); + for ( i = 0; i < sizeof( ctx->keys ) / sizeof( *ctx->keys ); i++ ) + if ( memcmp( name, ctx->keys[i].name, 4 ) == 0 ) + return ( &ctx->keys[i] ); - return( NULL ); + return ( NULL ); } /* @@ -395,33 +384,31 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, unsigned char *tag; size_t enc_len, clear_len; - if( ctx == NULL || ctx->f_rng == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ctx == NULL || ctx->f_rng == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* See mbedtls_ssl_ticket_write() */ - if( len < 4 + 12 + 2 + 16 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( len < 4 + 12 + 2 + 16 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_THREADING_C) - if( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mutex_lock( &ctx->mutex ) ) != 0 ) + return ( ret ); #endif - if( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) + if ( ( ret = ssl_ticket_update_keys( ctx ) ) != 0 ) goto cleanup; enc_len = ( enc_len_p[0] << 8 ) | enc_len_p[1]; tag = ticket + enc_len; - if( len != 4 + 12 + 2 + enc_len + 16 ) - { + if ( len != 4 + 12 + 2 + enc_len + 16 ) { ret = MBEDTLS_ERR_SSL_BAD_INPUT_DATA; goto cleanup; } /* Select key */ - if( ( key = ssl_ticket_select_key( ctx, key_name ) ) == NULL ) - { + if ( ( key = ssl_ticket_select_key( ctx, key_name ) ) == NULL ) { /* We can't know for sure but this is a likely option unless we're * under attack - this is only informative anyway */ ret = MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED; @@ -429,23 +416,21 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, } /* Decrypt and authenticate */ - if( ( ret = mbedtls_cipher_auth_decrypt( &key->ctx, iv, 12, - key_name, 4 + 12 + 2, ticket, enc_len, - ticket, &clear_len, tag, 16 ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) + if ( ( ret = mbedtls_cipher_auth_decrypt( &key->ctx, iv, 12, + key_name, 4 + 12 + 2, ticket, enc_len, + ticket, &clear_len, tag, 16 ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) ret = MBEDTLS_ERR_SSL_INVALID_MAC; goto cleanup; } - if( clear_len != enc_len ) - { + if ( clear_len != enc_len ) { ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR; goto cleanup; } /* Actually load session */ - if( ( ret = ssl_load_session( session, ticket, clear_len ) ) != 0 ) + if ( ( ret = ssl_load_session( session, ticket, clear_len ) ) != 0 ) goto cleanup; #if defined(MBEDTLS_HAVE_TIME) @@ -453,9 +438,8 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, /* Check for expiration */ mbedtls_time_t current_time = mbedtls_time( NULL ); - if( current_time < session->start || - (uint32_t)( current_time - session->start ) > ctx->ticket_lifetime ) - { + if ( current_time < session->start || + (uint32_t)( current_time - session->start ) > ctx->ticket_lifetime ) { ret = MBEDTLS_ERR_SSL_SESSION_TICKET_EXPIRED; goto cleanup; } @@ -464,11 +448,11 @@ int mbedtls_ssl_ticket_parse( void *p_ticket, cleanup: #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &ctx->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } /* diff --git a/external_libs/mbedtls/library/ssl_tls.c b/external_libs/mbedtls/library/ssl_tls.c index 84a04ae..bfd54cd 100644 --- a/external_libs/mbedtls/library/ssl_tls.c +++ b/external_libs/mbedtls/library/ssl_tls.c @@ -54,20 +54,22 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* Length of the "epoch" field in the record header */ static inline size_t ssl_ep_len( const mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - return( 2 ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return ( 2 ); #else ((void) ssl); #endif - return( 0 ); + return ( 0 ); } /* @@ -76,7 +78,7 @@ static inline size_t ssl_ep_len( const mbedtls_ssl_context *ssl ) */ static void ssl_set_timer( mbedtls_ssl_context *ssl, uint32_t millisecs ) { - if( ssl->f_set_timer == NULL ) + if ( ssl->f_set_timer == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 3, ( "set_timer to %d ms", (int) millisecs ) ); @@ -88,16 +90,15 @@ static void ssl_set_timer( mbedtls_ssl_context *ssl, uint32_t millisecs ) */ static int ssl_check_timer( mbedtls_ssl_context *ssl ) { - if( ssl->f_get_timer == NULL ) - return( 0 ); + if ( ssl->f_get_timer == NULL ) + return ( 0 ); - if( ssl->f_get_timer( ssl->p_timer ) == 2 ) - { + if ( ssl->f_get_timer( ssl->p_timer ) == 2 ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "timer expired" ) ); - return( -1 ); + return ( -1 ); } - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -109,30 +110,29 @@ static int ssl_double_retransmit_timeout( mbedtls_ssl_context *ssl ) { uint32_t new_timeout; - if( ssl->handshake->retransmit_timeout >= ssl->conf->hs_timeout_max ) - return( -1 ); + if ( ssl->handshake->retransmit_timeout >= ssl->conf->hs_timeout_max ) + return ( -1 ); new_timeout = 2 * ssl->handshake->retransmit_timeout; /* Avoid arithmetic overflow and range overflow */ - if( new_timeout < ssl->handshake->retransmit_timeout || - new_timeout > ssl->conf->hs_timeout_max ) - { + if ( new_timeout < ssl->handshake->retransmit_timeout || + new_timeout > ssl->conf->hs_timeout_max ) { new_timeout = ssl->conf->hs_timeout_max; } ssl->handshake->retransmit_timeout = new_timeout; MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", - ssl->handshake->retransmit_timeout ) ); + ssl->handshake->retransmit_timeout ) ); - return( 0 ); + return ( 0 ); } static void ssl_reset_retransmit_timeout( mbedtls_ssl_context *ssl ) { ssl->handshake->retransmit_timeout = ssl->conf->hs_timeout_min; MBEDTLS_SSL_DEBUG_MSG( 3, ( "update timeout value to %d millisecs", - ssl->handshake->retransmit_timeout ) ); + ssl->handshake->retransmit_timeout ) ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -145,8 +145,7 @@ static void ssl_reset_retransmit_timeout( mbedtls_ssl_context *ssl ) * } MaxFragmentLength; * and we add 0 -> extension unused */ -static unsigned int mfl_code_to_length[MBEDTLS_SSL_MAX_FRAG_LEN_INVALID] = -{ +static unsigned int mfl_code_to_length[MBEDTLS_SSL_MAX_FRAG_LEN_INVALID] = { MBEDTLS_SSL_MAX_CONTENT_LEN, /* MBEDTLS_SSL_MAX_FRAG_LEN_NONE */ 512, /* MBEDTLS_SSL_MAX_FRAG_LEN_512 */ 1024, /* MBEDTLS_SSL_MAX_FRAG_LEN_1024 */ @@ -162,49 +161,46 @@ static int ssl_session_copy( mbedtls_ssl_session *dst, const mbedtls_ssl_session memcpy( dst, src, sizeof( mbedtls_ssl_session ) ); #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( src->peer_cert != NULL ) - { + if ( src->peer_cert != NULL ) { int ret; dst->peer_cert = mbedtls_calloc( 1, sizeof(mbedtls_x509_crt) ); - if( dst->peer_cert == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( dst->peer_cert == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); mbedtls_x509_crt_init( dst->peer_cert ); - if( ( ret = mbedtls_x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, - src->peer_cert->raw.len ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_crt_parse_der( dst->peer_cert, src->peer_cert->raw.p, + src->peer_cert->raw.len ) ) != 0 ) { mbedtls_free( dst->peer_cert ); dst->peer_cert = NULL; - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_SESSION_TICKETS) && defined(MBEDTLS_SSL_CLI_C) - if( src->ticket != NULL ) - { + if ( src->ticket != NULL ) { dst->ticket = mbedtls_calloc( 1, src->ticket_len ); - if( dst->ticket == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( dst->ticket == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( dst->ticket, src->ticket, src->ticket_len ); } #endif /* MBEDTLS_SSL_SESSION_TICKETS && MBEDTLS_SSL_CLI_C */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) int (*mbedtls_ssl_hw_record_init)( mbedtls_ssl_context *ssl, - const unsigned char *key_enc, const unsigned char *key_dec, - size_t keylen, - const unsigned char *iv_enc, const unsigned char *iv_dec, - size_t ivlen, - const unsigned char *mac_enc, const unsigned char *mac_dec, - size_t maclen ) = NULL; + const unsigned char *key_enc, const unsigned char *key_dec, + size_t keylen, + const unsigned char *iv_enc, const unsigned char *iv_dec, + size_t ivlen, + const unsigned char *mac_enc, const unsigned char *mac_dec, + size_t maclen ) = NULL; int (*mbedtls_ssl_hw_record_activate)( mbedtls_ssl_context *ssl, int direction) = NULL; int (*mbedtls_ssl_hw_record_reset)( mbedtls_ssl_context *ssl ) = NULL; int (*mbedtls_ssl_hw_record_write)( mbedtls_ssl_context *ssl ) = NULL; @@ -239,8 +235,7 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, * MD5( secret + SHA1( 'CCC' + secret + random ) ) + * ... */ - for( i = 0; i < dlen / 16; i++ ) - { + for ( i = 0; i < dlen / 16; i++ ) { memset( padding, (unsigned char) ('A' + i), 1 + i ); mbedtls_sha1_starts( &sha1 ); @@ -261,7 +256,7 @@ static int ssl3_prf( const unsigned char *secret, size_t slen, mbedtls_zeroize( padding, sizeof( padding ) ); mbedtls_zeroize( sha1sum, sizeof( sha1sum ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_SSL3 */ @@ -282,8 +277,8 @@ static int tls1_prf( const unsigned char *secret, size_t slen, mbedtls_md_init( &md_ctx ); - if( sizeof( tmp ) < 20 + strlen( label ) + rlen ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( sizeof( tmp ) < 20 + strlen( label ) + rlen ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); hs = ( slen + 1 ) / 2; S1 = secret; @@ -297,18 +292,17 @@ static int tls1_prf( const unsigned char *secret, size_t slen, /* * First compute P_md5(secret,label+random)[0..dlen] */ - if( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ) ) == NULL ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_MD5 ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); mbedtls_md_hmac_starts( &md_ctx, S1, hs ); mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb ); mbedtls_md_hmac_finish( &md_ctx, 4 + tmp ); - for( i = 0; i < dlen; i += 16 ) - { + for ( i = 0; i < dlen; i += 16 ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, 4 + tmp, 16 + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); @@ -319,7 +313,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, k = ( i + 16 > dlen ) ? dlen % 16 : 16; - for( j = 0; j < k; j++ ) + for ( j = 0; j < k; j++ ) dstbuf[i + j] = h_i[j]; } @@ -328,18 +322,17 @@ static int tls1_prf( const unsigned char *secret, size_t slen, /* * XOR out with P_sha1(secret,label+random)[0..dlen] */ - if( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ) ) == NULL ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( ( md_info = mbedtls_md_info_from_type( MBEDTLS_MD_SHA1 ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - if( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) + return ( ret ); mbedtls_md_hmac_starts( &md_ctx, S2, hs ); mbedtls_md_hmac_update( &md_ctx, tmp + 20, nb ); mbedtls_md_hmac_finish( &md_ctx, tmp ); - for( i = 0; i < dlen; i += 20 ) - { + for ( i = 0; i < dlen; i += 20 ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, tmp, 20 + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); @@ -350,7 +343,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, k = ( i + 20 > dlen ) ? dlen % 20 : 20; - for( j = 0; j < k; j++ ) + for ( j = 0; j < k; j++ ) dstbuf[i + j] = (unsigned char)( dstbuf[i + j] ^ h_i[j] ); } @@ -359,7 +352,7 @@ static int tls1_prf( const unsigned char *secret, size_t slen, mbedtls_zeroize( tmp, sizeof( tmp ) ); mbedtls_zeroize( h_i, sizeof( h_i ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_TLS1) || MBEDTLS_SSL_PROTO_TLS1_1 */ @@ -380,13 +373,13 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, mbedtls_md_init( &md_ctx ); - if( ( md_info = mbedtls_md_info_from_type( md_type ) ) == NULL ) - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( ( md_info = mbedtls_md_info_from_type( md_type ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); md_len = mbedtls_md_get_size( md_info ); - if( sizeof( tmp ) < md_len + strlen( label ) + rlen ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( sizeof( tmp ) < md_len + strlen( label ) + rlen ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); nb = strlen( label ); memcpy( tmp + md_len, label, nb ); @@ -397,14 +390,13 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, * Compute P_(secret, label + random)[0..dlen] */ if ( ( ret = mbedtls_md_setup( &md_ctx, md_info, 1 ) ) != 0 ) - return( ret ); + return ( ret ); mbedtls_md_hmac_starts( &md_ctx, secret, slen ); mbedtls_md_hmac_update( &md_ctx, tmp + md_len, nb ); mbedtls_md_hmac_finish( &md_ctx, tmp ); - for( i = 0; i < dlen; i += md_len ) - { + for ( i = 0; i < dlen; i += md_len ) { mbedtls_md_hmac_reset ( &md_ctx ); mbedtls_md_hmac_update( &md_ctx, tmp, md_len + nb ); mbedtls_md_hmac_finish( &md_ctx, h_i ); @@ -415,7 +407,7 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, k = ( i + md_len > dlen ) ? dlen % md_len : md_len; - for( j = 0; j < k; j++ ) + for ( j = 0; j < k; j++ ) dstbuf[i + j] = h_i[j]; } @@ -424,7 +416,7 @@ static int tls_prf_generic( mbedtls_md_type_t md_type, mbedtls_zeroize( tmp, sizeof( tmp ) ); mbedtls_zeroize( h_i, sizeof( h_i ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SHA256_C) @@ -433,8 +425,8 @@ static int tls_prf_sha256( const unsigned char *secret, size_t slen, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen ) { - return( tls_prf_generic( MBEDTLS_MD_SHA256, secret, slen, - label, random, rlen, dstbuf, dlen ) ); + return ( tls_prf_generic( MBEDTLS_MD_SHA256, secret, slen, + label, random, rlen, dstbuf, dlen ) ); } #endif /* MBEDTLS_SHA256_C */ @@ -444,8 +436,8 @@ static int tls_prf_sha384( const unsigned char *secret, size_t slen, const unsigned char *random, size_t rlen, unsigned char *dstbuf, size_t dlen ) { - return( tls_prf_generic( MBEDTLS_MD_SHA384, secret, slen, - label, random, rlen, dstbuf, dlen ) ); + return ( tls_prf_generic( MBEDTLS_MD_SHA384, secret, slen, + label, random, rlen, dstbuf, dlen ) ); } #endif /* MBEDTLS_SHA512_C */ #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ @@ -470,8 +462,8 @@ static void ssl_calc_finished_tls( mbedtls_ssl_context *, unsigned char *, int ) #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) static void ssl_update_checksum_sha256( mbedtls_ssl_context *, const unsigned char *, size_t ); -static void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *,unsigned char * ); -static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *,unsigned char *, int ); +static void ssl_calc_verify_tls_sha256( mbedtls_ssl_context *, unsigned char * ); +static void ssl_calc_finished_tls_sha256( mbedtls_ssl_context *, unsigned char *, int ); #endif #if defined(MBEDTLS_SHA512_C) @@ -501,67 +493,57 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> derive keys" ) ); cipher_info = mbedtls_cipher_info_from_type( transform->ciphersuite_info->cipher ); - if( cipher_info == NULL ) - { + if ( cipher_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "cipher info for %d not found", - transform->ciphersuite_info->cipher ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + transform->ciphersuite_info->cipher ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } md_info = mbedtls_md_info_from_type( transform->ciphersuite_info->mac ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "mbedtls_md info for %d not found", - transform->ciphersuite_info->mac ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + transform->ciphersuite_info->mac ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* * Set appropriate PRF function and other SSL / TLS / TLS1.2 functions */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { handshake->tls_prf = ssl3_prf; handshake->calc_verify = ssl_calc_verify_ssl; handshake->calc_finished = ssl_calc_finished_ssl; - } - else + } else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) - { - handshake->tls_prf = tls1_prf; - handshake->calc_verify = ssl_calc_verify_tls; - handshake->calc_finished = ssl_calc_finished_tls; - } - else + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) { + handshake->tls_prf = tls1_prf; + handshake->calc_verify = ssl_calc_verify_tls; + handshake->calc_finished = ssl_calc_finished_tls; + } else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA512_C) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 && - transform->ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) - { - handshake->tls_prf = tls_prf_sha384; - handshake->calc_verify = ssl_calc_verify_tls_sha384; - handshake->calc_finished = ssl_calc_finished_tls_sha384; - } - else + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 && + transform->ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) { + handshake->tls_prf = tls_prf_sha384; + handshake->calc_verify = ssl_calc_verify_tls_sha384; + handshake->calc_finished = ssl_calc_finished_tls_sha384; + } else #endif #if defined(MBEDTLS_SHA256_C) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - handshake->tls_prf = tls_prf_sha256; - handshake->calc_verify = ssl_calc_verify_tls_sha256; - handshake->calc_finished = ssl_calc_finished_tls_sha256; - } - else + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + handshake->tls_prf = tls_prf_sha256; + handshake->calc_verify = ssl_calc_verify_tls_sha256; + handshake->calc_finished = ssl_calc_finished_tls_sha256; + } else #endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* * SSLv3: @@ -573,14 +555,12 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * TLSv1+: * master = PRF( premaster, "master secret", randbytes )[0..47] */ - if( handshake->resume == 0 ) - { + if ( handshake->resume == 0 ) { MBEDTLS_SSL_DEBUG_BUF( 3, "premaster secret", handshake->premaster, - handshake->pmslen ); + handshake->pmslen ); #if defined(MBEDTLS_SSL_EXTENDED_MASTER_SECRET) - if( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED ) - { + if ( ssl->handshake->extended_ms == MBEDTLS_SSL_EXTENDED_MS_ENABLED ) { unsigned char session_hash[48]; size_t hash_len; @@ -589,19 +569,15 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) ssl->handshake->calc_verify( ssl, session_hash ); #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { #if defined(MBEDTLS_SHA512_C) - if( ssl->transform_negotiate->ciphersuite_info->mac == - MBEDTLS_MD_SHA384 ) - { + if ( ssl->transform_negotiate->ciphersuite_info->mac == + MBEDTLS_MD_SHA384 ) { hash_len = 48; - } - else + } else #endif hash_len = 32; - } - else + } else #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ hash_len = 36; @@ -611,28 +587,24 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) "extended master secret", session_hash, hash_len, session->master, 48 ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); + return ( ret ); } - } - else + } else #endif - ret = handshake->tls_prf( handshake->premaster, handshake->pmslen, - "master secret", - handshake->randbytes, 64, - session->master, 48 ); - if( ret != 0 ) - { + ret = handshake->tls_prf( handshake->premaster, handshake->pmslen, + "master secret", + handshake->randbytes, 64, + session->master, 48 ); + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); + return ( ret ); } mbedtls_zeroize( handshake->premaster, sizeof(handshake->premaster) ); - } - else + } else MBEDTLS_SSL_DEBUG_MSG( 3, ( "no premaster (session resumed)" ) ); /* @@ -657,14 +629,13 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) */ ret = handshake->tls_prf( session->master, 48, "key expansion", handshake->randbytes, 64, keyblk, 256 ); - if( ret != 0 ) - { + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "prf", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 3, ( "ciphersuite = %s", - mbedtls_ssl_get_ciphersuite_name( session->ciphersuite ) ) ); + mbedtls_ssl_get_ciphersuite_name( session->ciphersuite ) ) ); MBEDTLS_SSL_DEBUG_BUF( 3, "master secret", session->master, 48 ); MBEDTLS_SSL_DEBUG_BUF( 4, "random bytes", handshake->randbytes, 64 ); MBEDTLS_SSL_DEBUG_BUF( 4, "key block", keyblk, 256 ); @@ -677,9 +648,8 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) transform->keylen = cipher_info->key_bitlen / 8; - if( cipher_info->mode == MBEDTLS_MODE_GCM || - cipher_info->mode == MBEDTLS_MODE_CCM ) - { + if ( cipher_info->mode == MBEDTLS_MODE_GCM || + cipher_info->mode == MBEDTLS_MODE_CCM ) { transform->maclen = 0; transform->ivlen = 12; @@ -689,15 +659,12 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) transform->minlen = transform->ivlen - transform->fixed_ivlen + ( transform->ciphersuite_info->flags & MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16 ); - } - else - { + } else { /* Initialize HMAC contexts */ - if( ( ret = mbedtls_md_setup( &transform->md_ctx_enc, md_info, 1 ) ) != 0 || - ( ret = mbedtls_md_setup( &transform->md_ctx_dec, md_info, 1 ) ) != 0 ) - { + if ( ( ret = mbedtls_md_setup( &transform->md_ctx_enc, md_info, 1 ) ) != 0 || + ( ret = mbedtls_md_setup( &transform->md_ctx_dec, md_info, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_md_setup", ret ); - return( ret ); + return ( ret ); } /* Get MAC length */ @@ -709,7 +676,7 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * (rfc 6066 page 13 or rfc 2104 section 4), * so we only need to adjust the length here. */ - if( session->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) + if ( session->trunc_hmac == MBEDTLS_SSL_TRUNC_HMAC_ENABLED ) transform->maclen = MBEDTLS_SSL_TRUNCATED_HMAC_LEN; #endif /* MBEDTLS_SSL_TRUNCATED_HMAC */ @@ -717,10 +684,9 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) transform->ivlen = cipher_info->iv_size; /* Minimum length */ - if( cipher_info->mode == MBEDTLS_MODE_STREAM ) + if ( cipher_info->mode == MBEDTLS_MODE_STREAM ) transform->minlen = transform->maclen; - else - { + else { /* * GenericBlockCipher: * 1. if EtM is in use: one block plus MAC @@ -728,50 +694,45 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * 2. IV except for SSL3 and TLS 1.0 */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - if( session->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) - { + if ( session->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) { transform->minlen = transform->maclen - + cipher_info->block_size; - } - else + + cipher_info->block_size; + } else #endif { transform->minlen = transform->maclen - + cipher_info->block_size - - transform->maclen % cipher_info->block_size; + + cipher_info->block_size + - transform->maclen % cipher_info->block_size; } #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_1 ) + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_1 ) ; /* No need to adjust minlen */ else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_2 || - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) - { - transform->minlen += transform->ivlen; - } - else + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_2 || + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { + transform->minlen += transform->ivlen; + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } } } MBEDTLS_SSL_DEBUG_MSG( 3, ( "keylen: %d, minlen: %d, ivlen: %d, maclen: %d", - transform->keylen, transform->minlen, transform->ivlen, - transform->maclen ) ); + transform->keylen, transform->minlen, transform->ivlen, + transform->maclen ) ); /* * Finally setup the cipher contexts, IVs and MAC secrets. */ #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { key1 = keyblk + transform->maclen * 2; key2 = keyblk + transform->maclen * 2 + transform->keylen; @@ -782,88 +743,77 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) * This is not used in TLS v1.1. */ iv_copy_len = ( transform->fixed_ivlen ) ? - transform->fixed_ivlen : transform->ivlen; + transform->fixed_ivlen : transform->ivlen; memcpy( transform->iv_enc, key2 + transform->keylen, iv_copy_len ); memcpy( transform->iv_dec, key2 + transform->keylen + iv_copy_len, iv_copy_len ); - } - else + } else #endif /* MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - { - key1 = keyblk + transform->maclen * 2 + transform->keylen; - key2 = keyblk + transform->maclen * 2; + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) { + key1 = keyblk + transform->maclen * 2 + transform->keylen; + key2 = keyblk + transform->maclen * 2; - mac_enc = keyblk + transform->maclen; - mac_dec = keyblk; + mac_enc = keyblk + transform->maclen; + mac_dec = keyblk; - /* - * This is not used in TLS v1.1. - */ - iv_copy_len = ( transform->fixed_ivlen ) ? - transform->fixed_ivlen : transform->ivlen; - memcpy( transform->iv_dec, key1 + transform->keylen, iv_copy_len ); - memcpy( transform->iv_enc, key1 + transform->keylen + iv_copy_len, - iv_copy_len ); - } - else + /* + * This is not used in TLS v1.1. + */ + iv_copy_len = ( transform->fixed_ivlen ) ? + transform->fixed_ivlen : transform->ivlen; + memcpy( transform->iv_dec, key1 + transform->keylen, iv_copy_len ); + memcpy( transform->iv_enc, key1 + transform->keylen + iv_copy_len, + iv_copy_len ); + } else #endif /* MBEDTLS_SSL_SRV_C */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( transform->maclen > sizeof transform->mac_enc ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( transform->maclen > sizeof transform->mac_enc ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } memcpy( transform->mac_enc, mac_enc, transform->maclen ); memcpy( transform->mac_dec, mac_dec, transform->maclen ); - } - else + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) - { - mbedtls_md_hmac_starts( &transform->md_ctx_enc, mac_enc, transform->maclen ); - mbedtls_md_hmac_starts( &transform->md_ctx_dec, mac_dec, transform->maclen ); - } - else + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) { + mbedtls_md_hmac_starts( &transform->md_ctx_enc, mac_enc, transform->maclen ); + mbedtls_md_hmac_starts( &transform->md_ctx_dec, mac_dec, transform->maclen ); + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_init != NULL ) - { + if ( mbedtls_ssl_hw_record_init != NULL ) { int ret = 0; MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_init()" ) ); - if( ( ret = mbedtls_ssl_hw_record_init( ssl, key1, key2, transform->keylen, - transform->iv_enc, transform->iv_dec, - iv_copy_len, - mac_enc, mac_dec, - transform->maclen ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_hw_record_init( ssl, key1, key2, transform->keylen, + transform->iv_enc, transform->iv_dec, + iv_copy_len, + mac_enc, mac_dec, + transform->maclen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_init", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ #if defined(MBEDTLS_SSL_EXPORT_KEYS) - if( ssl->conf->f_export_keys != NULL ) - { + if ( ssl->conf->f_export_keys != NULL ) { ssl->conf->f_export_keys( ssl->conf->p_export_keys, session->master, keyblk, transform->maclen, transform->keylen, @@ -871,51 +821,44 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) } #endif - if( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_enc, - cipher_info ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_enc, + cipher_info ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_dec, - cipher_info ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setup( &transform->cipher_ctx_dec, + cipher_info ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setup", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_enc, key1, - cipher_info->key_bitlen, - MBEDTLS_ENCRYPT ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_enc, key1, + cipher_info->key_bitlen, + MBEDTLS_ENCRYPT ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setkey", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_dec, key2, - cipher_info->key_bitlen, - MBEDTLS_DECRYPT ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_setkey( &transform->cipher_ctx_dec, key2, + cipher_info->key_bitlen, + MBEDTLS_DECRYPT ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_setkey", ret ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) - if( cipher_info->mode == MBEDTLS_MODE_CBC ) - { - if( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_enc, - MBEDTLS_PADDING_NONE ) ) != 0 ) - { + if ( cipher_info->mode == MBEDTLS_MODE_CBC ) { + if ( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_enc, + MBEDTLS_PADDING_NONE ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_set_padding_mode", ret ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_dec, - MBEDTLS_PADDING_NONE ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_set_padding_mode( &transform->cipher_ctx_dec, + MBEDTLS_PADDING_NONE ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_set_padding_mode", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_CIPHER_MODE_CBC */ @@ -925,17 +868,14 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_ZLIB_SUPPORT) // Initialize compression // - if( session->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { - if( ssl->compress_buf == NULL ) - { + if ( session->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) { + if ( ssl->compress_buf == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "Allocating compression buffer" ) ); ssl->compress_buf = mbedtls_calloc( 1, MBEDTLS_SSL_BUFFER_LEN ); - if( ssl->compress_buf == NULL ) - { + if ( ssl->compress_buf == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", - MBEDTLS_SSL_BUFFER_LEN ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + MBEDTLS_SSL_BUFFER_LEN ) ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } } @@ -944,19 +884,18 @@ int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ) memset( &transform->ctx_deflate, 0, sizeof( transform->ctx_deflate ) ); memset( &transform->ctx_inflate, 0, sizeof( transform->ctx_inflate ) ); - if( deflateInit( &transform->ctx_deflate, - Z_DEFAULT_COMPRESSION ) != Z_OK || - inflateInit( &transform->ctx_inflate ) != Z_OK ) - { + if ( deflateInit( &transform->ctx_deflate, + Z_DEFAULT_COMPRESSION ) != Z_OK || + inflateInit( &transform->ctx_inflate ) != Z_OK ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Failed to initialize compression" ) ); - return( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); + return ( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); } } #endif /* MBEDTLS_ZLIB_SUPPORT */ MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= derive keys" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -1022,7 +961,7 @@ void ssl_calc_verify_tls( mbedtls_ssl_context *ssl, unsigned char hash[36] ) mbedtls_md5_clone( &md5, &ssl->handshake->fin_md5 ); mbedtls_sha1_clone( &sha1, &ssl->handshake->fin_sha1 ); - mbedtls_md5_finish( &md5, hash ); + mbedtls_md5_finish( &md5, hash ); mbedtls_sha1_finish( &sha1, hash + 16 ); MBEDTLS_SSL_DEBUG_BUF( 3, "calculated verify result", hash, 36 ); @@ -1088,8 +1027,7 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch size_t psk_len = ssl->conf->psk_len; /* If the psk callback was called, use its result */ - if( ssl->handshake->psk != NULL ) - { + if ( ssl->handshake->psk != NULL ) { psk = ssl->handshake->psk; psk_len = ssl->handshake->psk_len; } @@ -1102,100 +1040,90 @@ int mbedtls_ssl_psk_derive_premaster( mbedtls_ssl_context *ssl, mbedtls_key_exch * with "other_secret" depending on the particular key exchange */ #if defined(MBEDTLS_KEY_EXCHANGE_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_PSK ) - { - if( end - p < 2 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( key_ex == MBEDTLS_KEY_EXCHANGE_PSK ) { + if ( end - p < 2 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); *(p++) = (unsigned char)( psk_len >> 8 ); *(p++) = (unsigned char)( psk_len ); - if( end < p || (size_t)( end - p ) < psk_len ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( end < p || (size_t)( end - p ) < psk_len ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); memset( p, 0, psk_len ); p += psk_len; - } - else + } else #endif /* MBEDTLS_KEY_EXCHANGE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { - /* - * other_secret already set by the ClientKeyExchange message, - * and is 48 bytes long - */ - *p++ = 0; - *p++ = 48; - p += 48; - } - else + if ( key_ex == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { + /* + * other_secret already set by the ClientKeyExchange message, + * and is 48 bytes long + */ + *p++ = 0; + *p++ = 48; + p += 48; + } else #endif /* MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) - { - int ret; - size_t len; - - /* Write length only when we know the actual value */ - if( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, - p + 2, end - ( p + 2 ), &len, - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); - return( ret ); - } - *(p++) = (unsigned char)( len >> 8 ); - *(p++) = (unsigned char)( len ); - p += len; + if ( key_ex == MBEDTLS_KEY_EXCHANGE_DHE_PSK ) { + int ret; + size_t len; + + /* Write length only when we know the actual value */ + if ( ( ret = mbedtls_dhm_calc_secret( &ssl->handshake->dhm_ctx, + p + 2, end - ( p + 2 ), &len, + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_dhm_calc_secret", ret ); + return ( ret ); + } + *(p++) = (unsigned char)( len >> 8 ); + *(p++) = (unsigned char)( len ); + p += len; - MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "DHM: K ", &ssl->handshake->dhm_ctx.K ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED) - if( key_ex == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) - { - int ret; - size_t zlen; - - if( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, &zlen, - p + 2, end - ( p + 2 ), - ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); - return( ret ); - } + if ( key_ex == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK ) { + int ret; + size_t zlen; + + if ( ( ret = mbedtls_ecdh_calc_secret( &ssl->handshake->ecdh_ctx, &zlen, + p + 2, end - ( p + 2 ), + ssl->conf->f_rng, ssl->conf->p_rng ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ecdh_calc_secret", ret ); + return ( ret ); + } - *(p++) = (unsigned char)( zlen >> 8 ); - *(p++) = (unsigned char)( zlen ); - p += zlen; + *(p++) = (unsigned char)( zlen >> 8 ); + *(p++) = (unsigned char)( zlen ); + p += zlen; - MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); - } - else + MBEDTLS_SSL_DEBUG_MPI( 3, "ECDH: z", &ssl->handshake->ecdh_ctx.z ); + } else #endif /* MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* opaque psk<0..2^16-1>; */ - if( end - p < 2 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( end - p < 2 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); *(p++) = (unsigned char)( psk_len >> 8 ); *(p++) = (unsigned char)( psk_len ); - if( end < p || (size_t)( end - p ) < psk_len ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( end < p || (size_t)( end - p ) < psk_len ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); memcpy( p, psk, psk_len ); p += psk_len; ssl->handshake->pmslen = p - ssl->handshake->premaster; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED */ @@ -1214,7 +1142,7 @@ static void ssl_mac( mbedtls_md_context_t *md_ctx, unsigned char *secret, int md_type = mbedtls_md_get_type( md_ctx->md_info ); /* Only MD5 and SHA-1 supported */ - if( md_type == MBEDTLS_MD_MD5 ) + if ( md_type == MBEDTLS_MD_MD5 ) padlen = 48; else padlen = 40; @@ -1257,61 +1185,55 @@ static int ssl_encrypt_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> encrypt buf" ) ); - if( ssl->session_out == NULL || ssl->transform_out == NULL ) - { + if ( ssl->session_out == NULL || ssl->transform_out == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } mode = mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc ); MBEDTLS_SSL_DEBUG_BUF( 4, "before encrypt: output payload", - ssl->out_msg, ssl->out_msglen ); + ssl->out_msg, ssl->out_msglen ); /* * Add MAC before if needed */ #if defined(SSL_SOME_MODES_USE_MAC) - if( mode == MBEDTLS_MODE_STREAM || - ( mode == MBEDTLS_MODE_CBC + if ( mode == MBEDTLS_MODE_STREAM || + ( mode == MBEDTLS_MODE_CBC #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - && ssl->session_out->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED + && ssl->session_out->encrypt_then_mac == MBEDTLS_SSL_ETM_DISABLED #endif - ) ) - { + ) ) { #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl_mac( &ssl->transform_out->md_ctx_enc, - ssl->transform_out->mac_enc, - ssl->out_msg, ssl->out_msglen, - ssl->out_ctr, ssl->out_msgtype ); - } - else + ssl->transform_out->mac_enc, + ssl->out_msg, ssl->out_msglen, + ssl->out_ctr, ssl->out_msgtype ); + } else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) - { - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_ctr, 8 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_hdr, 3 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_len, 2 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, - ssl->out_msg, ssl->out_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, - ssl->out_msg + ssl->out_msglen ); - mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); - } - else + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) { + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_ctr, 8 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_hdr, 3 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, ssl->out_len, 2 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, + ssl->out_msg, ssl->out_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, + ssl->out_msg + ssl->out_msglen ); + mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); + } else #endif - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", - ssl->out_msg + ssl->out_msglen, - ssl->transform_out->maclen ); + ssl->out_msg + ssl->out_msglen, + ssl->transform_out->maclen ); ssl->out_msglen += ssl->transform_out->maclen; auth_done++; @@ -1322,244 +1244,227 @@ static int ssl_encrypt_buf( mbedtls_ssl_context *ssl ) * Encrypt */ #if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) - if( mode == MBEDTLS_MODE_STREAM ) - { + if ( mode == MBEDTLS_MODE_STREAM ) { int ret; size_t olen = 0; MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of padding", - ssl->out_msglen, 0 ) ); - - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - ssl->out_msg, ssl->out_msglen, - ssl->out_msg, &olen ) ) != 0 ) - { + "including %d bytes of padding", + ssl->out_msglen, 0 ) ); + + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, + ssl->transform_out->iv_enc, + ssl->transform_out->ivlen, + ssl->out_msg, ssl->out_msglen, + ssl->out_msg, &olen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); + return ( ret ); } - if( ssl->out_msglen != olen ) - { + if ( ssl->out_msglen != olen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - } - else + } else #endif /* MBEDTLS_ARC4_C || MBEDTLS_CIPHER_NULL_CIPHER */ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) - if( mode == MBEDTLS_MODE_GCM || - mode == MBEDTLS_MODE_CCM ) - { - int ret; - size_t enc_msglen, olen; - unsigned char *enc_msg; - unsigned char add_data[13]; - unsigned char taglen = ssl->transform_out->ciphersuite_info->flags & - MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; - - memcpy( add_data, ssl->out_ctr, 8 ); - add_data[8] = ssl->out_msgtype; - mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, add_data + 9 ); - add_data[11] = ( ssl->out_msglen >> 8 ) & 0xFF; - add_data[12] = ssl->out_msglen & 0xFF; - - MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", - add_data, 13 ); + if ( mode == MBEDTLS_MODE_GCM || + mode == MBEDTLS_MODE_CCM ) { + int ret; + size_t enc_msglen, olen; + unsigned char *enc_msg; + unsigned char add_data[13]; + unsigned char taglen = ssl->transform_out->ciphersuite_info->flags & + MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; + + memcpy( add_data, ssl->out_ctr, 8 ); + add_data[8] = ssl->out_msgtype; + mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, + ssl->conf->transport, add_data + 9 ); + add_data[11] = ( ssl->out_msglen >> 8 ) & 0xFF; + add_data[12] = ssl->out_msglen & 0xFF; + + MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", + add_data, 13 ); - /* - * Generate IV - */ - if( ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen != 8 ) - { - /* Reminder if we ever add an AEAD mode with a different size */ - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + /* + * Generate IV + */ + if ( ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen != 8 ) { + /* Reminder if we ever add an AEAD mode with a different size */ + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - memcpy( ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, - ssl->out_ctr, 8 ); - memcpy( ssl->out_iv, ssl->out_ctr, 8 ); + memcpy( ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, + ssl->out_ctr, 8 ); + memcpy( ssl->out_iv, ssl->out_ctr, 8 ); - MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->out_iv, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->out_iv, + ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); - /* - * Fix pointer positions and message length with added IV - */ - enc_msg = ssl->out_msg; - enc_msglen = ssl->out_msglen; - ssl->out_msglen += ssl->transform_out->ivlen - - ssl->transform_out->fixed_ivlen; + /* + * Fix pointer positions and message length with added IV + */ + enc_msg = ssl->out_msg; + enc_msglen = ssl->out_msglen; + ssl->out_msglen += ssl->transform_out->ivlen - + ssl->transform_out->fixed_ivlen; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of padding", - ssl->out_msglen, 0 ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " + "including %d bytes of padding", + ssl->out_msglen, 0 ) ); - /* - * Encrypt and authenticate - */ - if( ( ret = mbedtls_cipher_auth_encrypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - add_data, 13, - enc_msg, enc_msglen, - enc_msg, &olen, - enc_msg + enc_msglen, taglen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_encrypt", ret ); - return( ret ); - } + /* + * Encrypt and authenticate + */ + if ( ( ret = mbedtls_cipher_auth_encrypt( &ssl->transform_out->cipher_ctx_enc, + ssl->transform_out->iv_enc, + ssl->transform_out->ivlen, + add_data, 13, + enc_msg, enc_msglen, + enc_msg, &olen, + enc_msg + enc_msglen, taglen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_encrypt", ret ); + return ( ret ); + } - if( olen != enc_msglen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( olen != enc_msglen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - ssl->out_msglen += taglen; - auth_done++; + ssl->out_msglen += taglen; + auth_done++; - MBEDTLS_SSL_DEBUG_BUF( 4, "after encrypt: tag", enc_msg + enc_msglen, taglen ); - } - else + MBEDTLS_SSL_DEBUG_BUF( 4, "after encrypt: tag", enc_msg + enc_msglen, taglen ); + } else #endif /* MBEDTLS_GCM_C || MBEDTLS_CCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_CAMELLIA_C) ) - if( mode == MBEDTLS_MODE_CBC ) - { - int ret; - unsigned char *enc_msg; - size_t enc_msglen, padlen, olen = 0, i; + if ( mode == MBEDTLS_MODE_CBC ) { + int ret; + unsigned char *enc_msg; + size_t enc_msglen, padlen, olen = 0, i; - padlen = ssl->transform_out->ivlen - ( ssl->out_msglen + 1 ) % - ssl->transform_out->ivlen; - if( padlen == ssl->transform_out->ivlen ) - padlen = 0; + padlen = ssl->transform_out->ivlen - ( ssl->out_msglen + 1 ) % + ssl->transform_out->ivlen; + if ( padlen == ssl->transform_out->ivlen ) + padlen = 0; - for( i = 0; i <= padlen; i++ ) - ssl->out_msg[ssl->out_msglen + i] = (unsigned char) padlen; + for ( i = 0; i <= padlen; i++ ) + ssl->out_msg[ssl->out_msglen + i] = (unsigned char) padlen; - ssl->out_msglen += padlen + 1; + ssl->out_msglen += padlen + 1; - enc_msglen = ssl->out_msglen; - enc_msg = ssl->out_msg; + enc_msglen = ssl->out_msglen; + enc_msg = ssl->out_msg; #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - /* - * Prepend per-record IV for block cipher in TLS v1.1 and up as per - * Method 1 (6.2.3.2. in RFC4346 and RFC5246) - */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { - /* - * Generate IV - */ - ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->transform_out->iv_enc, - ssl->transform_out->ivlen ); - if( ret != 0 ) - return( ret ); + /* + * Prepend per-record IV for block cipher in TLS v1.1 and up as per + * Method 1 (6.2.3.2. in RFC4346 and RFC5246) + */ + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { + /* + * Generate IV + */ + ret = ssl->conf->f_rng( ssl->conf->p_rng, ssl->transform_out->iv_enc, + ssl->transform_out->ivlen ); + if ( ret != 0 ) + return ( ret ); - memcpy( ssl->out_iv, ssl->transform_out->iv_enc, - ssl->transform_out->ivlen ); + memcpy( ssl->out_iv, ssl->transform_out->iv_enc, + ssl->transform_out->ivlen ); - /* - * Fix pointer positions and message length with added IV - */ - enc_msg = ssl->out_msg; - enc_msglen = ssl->out_msglen; - ssl->out_msglen += ssl->transform_out->ivlen; - } + /* + * Fix pointer positions and message length with added IV + */ + enc_msg = ssl->out_msg; + enc_msglen = ssl->out_msglen; + ssl->out_msglen += ssl->transform_out->ivlen; + } #endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " - "including %d bytes of IV and %d bytes of padding", - ssl->out_msglen, ssl->transform_out->ivlen, - padlen + 1 ) ); - - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, - ssl->transform_out->iv_enc, - ssl->transform_out->ivlen, - enc_msg, enc_msglen, - enc_msg, &olen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); - } + MBEDTLS_SSL_DEBUG_MSG( 3, ( "before encrypt: msglen = %d, " + "including %d bytes of IV and %d bytes of padding", + ssl->out_msglen, ssl->transform_out->ivlen, + padlen + 1 ) ); + + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_out->cipher_ctx_enc, + ssl->transform_out->iv_enc, + ssl->transform_out->ivlen, + enc_msg, enc_msglen, + enc_msg, &olen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); + return ( ret ); + } - if( enc_msglen != olen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( enc_msglen != olen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) - { - /* - * Save IV in SSL3 and TLS1 - */ - memcpy( ssl->transform_out->iv_enc, - ssl->transform_out->cipher_ctx_enc.iv, - ssl->transform_out->ivlen ); - } + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) { + /* + * Save IV in SSL3 and TLS1 + */ + memcpy( ssl->transform_out->iv_enc, + ssl->transform_out->cipher_ctx_enc.iv, + ssl->transform_out->ivlen ); + } #endif #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - if( auth_done == 0 ) - { - /* - * MAC(MAC_write_key, seq_num + - * TLSCipherText.type + - * TLSCipherText.version + - * length_of( (IV +) ENC(...) ) + - * IV + // except for TLS 1.0 - * ENC(content + padding + padding_length)); - */ - unsigned char pseudo_hdr[13]; + if ( auth_done == 0 ) { + /* + * MAC(MAC_write_key, seq_num + + * TLSCipherText.type + + * TLSCipherText.version + + * length_of( (IV +) ENC(...) ) + + * IV + // except for TLS 1.0 + * ENC(content + padding + padding_length)); + */ + unsigned char pseudo_hdr[13]; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); - memcpy( pseudo_hdr + 0, ssl->out_ctr, 8 ); - memcpy( pseudo_hdr + 8, ssl->out_hdr, 3 ); - pseudo_hdr[11] = (unsigned char)( ( ssl->out_msglen >> 8 ) & 0xFF ); - pseudo_hdr[12] = (unsigned char)( ( ssl->out_msglen ) & 0xFF ); + memcpy( pseudo_hdr + 0, ssl->out_ctr, 8 ); + memcpy( pseudo_hdr + 8, ssl->out_hdr, 3 ); + pseudo_hdr[11] = (unsigned char)( ( ssl->out_msglen >> 8 ) & 0xFF ); + pseudo_hdr[12] = (unsigned char)( ( ssl->out_msglen ) & 0xFF ); - MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); + MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, - ssl->out_iv, ssl->out_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, - ssl->out_iv + ssl->out_msglen ); - mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, pseudo_hdr, 13 ); + mbedtls_md_hmac_update( &ssl->transform_out->md_ctx_enc, + ssl->out_iv, ssl->out_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_out->md_ctx_enc, + ssl->out_iv + ssl->out_msglen ); + mbedtls_md_hmac_reset( &ssl->transform_out->md_ctx_enc ); - ssl->out_msglen += ssl->transform_out->maclen; - auth_done++; - } + ssl->out_msglen += ssl->transform_out->maclen; + auth_done++; + } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ - } - else + } else #endif /* MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_CAMELLIA_C ) */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } /* Make extra sure authentication was performed, exactly once */ - if( auth_done != 1 ) - { + if ( auth_done != 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= encrypt buf" ) ); - return( 0 ); + return ( 0 ); } #define SSL_MAX_MAC_SIZE 48 @@ -1575,349 +1480,320 @@ static int ssl_decrypt_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> decrypt buf" ) ); - if( ssl->session_in == NULL || ssl->transform_in == NULL ) - { + if ( ssl->session_in == NULL || ssl->transform_in == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } mode = mbedtls_cipher_get_cipher_mode( &ssl->transform_in->cipher_ctx_dec ); - if( ssl->in_msglen < ssl->transform_in->minlen ) - { + if ( ssl->in_msglen < ssl->transform_in->minlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "in_msglen (%d) < minlen (%d)", - ssl->in_msglen, ssl->transform_in->minlen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + ssl->in_msglen, ssl->transform_in->minlen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } #if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER) - if( mode == MBEDTLS_MODE_STREAM ) - { + if ( mode == MBEDTLS_MODE_STREAM ) { int ret; size_t olen = 0; padlen = 0; - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - ssl->in_msg, ssl->in_msglen, - ssl->in_msg, &olen ) ) != 0 ) - { + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, + ssl->transform_in->iv_dec, + ssl->transform_in->ivlen, + ssl->in_msg, ssl->in_msglen, + ssl->in_msg, &olen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msglen != olen ) - { + if ( ssl->in_msglen != olen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - } - else + } else #endif /* MBEDTLS_ARC4_C || MBEDTLS_CIPHER_NULL_CIPHER */ #if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CCM_C) - if( mode == MBEDTLS_MODE_GCM || - mode == MBEDTLS_MODE_CCM ) - { - int ret; - size_t dec_msglen, olen; - unsigned char *dec_msg; - unsigned char *dec_msg_result; - unsigned char add_data[13]; - unsigned char taglen = ssl->transform_in->ciphersuite_info->flags & - MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; - size_t explicit_iv_len = ssl->transform_in->ivlen - - ssl->transform_in->fixed_ivlen; - - if( ssl->in_msglen < explicit_iv_len + taglen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < explicit_iv_len (%d) " - "+ taglen (%d)", ssl->in_msglen, - explicit_iv_len, taglen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } - dec_msglen = ssl->in_msglen - explicit_iv_len - taglen; - - dec_msg = ssl->in_msg; - dec_msg_result = ssl->in_msg; - ssl->in_msglen = dec_msglen; - - memcpy( add_data, ssl->in_ctr, 8 ); - add_data[8] = ssl->in_msgtype; - mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, add_data + 9 ); - add_data[11] = ( ssl->in_msglen >> 8 ) & 0xFF; - add_data[12] = ssl->in_msglen & 0xFF; + if ( mode == MBEDTLS_MODE_GCM || + mode == MBEDTLS_MODE_CCM ) { + int ret; + size_t dec_msglen, olen; + unsigned char *dec_msg; + unsigned char *dec_msg_result; + unsigned char add_data[13]; + unsigned char taglen = ssl->transform_in->ciphersuite_info->flags & + MBEDTLS_CIPHERSUITE_SHORT_TAG ? 8 : 16; + size_t explicit_iv_len = ssl->transform_in->ivlen - + ssl->transform_in->fixed_ivlen; + + if ( ssl->in_msglen < explicit_iv_len + taglen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < explicit_iv_len (%d) " + "+ taglen (%d)", ssl->in_msglen, + explicit_iv_len, taglen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } + dec_msglen = ssl->in_msglen - explicit_iv_len - taglen; - MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", - add_data, 13 ); + dec_msg = ssl->in_msg; + dec_msg_result = ssl->in_msg; + ssl->in_msglen = dec_msglen; - memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen, - ssl->in_iv, - ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen ); + memcpy( add_data, ssl->in_ctr, 8 ); + add_data[8] = ssl->in_msgtype; + mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, + ssl->conf->transport, add_data + 9 ); + add_data[11] = ( ssl->in_msglen >> 8 ) & 0xFF; + add_data[12] = ssl->in_msglen & 0xFF; - MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->transform_in->iv_dec, - ssl->transform_in->ivlen ); - MBEDTLS_SSL_DEBUG_BUF( 4, "TAG used", dec_msg + dec_msglen, taglen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "additional data used for AEAD", + add_data, 13 ); - /* - * Decrypt and authenticate - */ - if( ( ret = mbedtls_cipher_auth_decrypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - add_data, 13, - dec_msg, dec_msglen, - dec_msg_result, &olen, - dec_msg + dec_msglen, taglen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_decrypt", ret ); + memcpy( ssl->transform_in->iv_dec + ssl->transform_in->fixed_ivlen, + ssl->in_iv, + ssl->transform_in->ivlen - ssl->transform_in->fixed_ivlen ); - if( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->transform_in->iv_dec, + ssl->transform_in->ivlen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "TAG used", dec_msg + dec_msglen, taglen ); - return( ret ); - } - auth_done++; + /* + * Decrypt and authenticate + */ + if ( ( ret = mbedtls_cipher_auth_decrypt( &ssl->transform_in->cipher_ctx_dec, + ssl->transform_in->iv_dec, + ssl->transform_in->ivlen, + add_data, 13, + dec_msg, dec_msglen, + dec_msg_result, &olen, + dec_msg + dec_msglen, taglen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_auth_decrypt", ret ); + + if ( ret == MBEDTLS_ERR_CIPHER_AUTH_FAILED ) + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + + return ( ret ); + } + auth_done++; - if( olen != dec_msglen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - } - else + if ( olen != dec_msglen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + } else #endif /* MBEDTLS_GCM_C || MBEDTLS_CCM_C */ #if defined(MBEDTLS_CIPHER_MODE_CBC) && \ ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_CAMELLIA_C) ) - if( mode == MBEDTLS_MODE_CBC ) - { - /* - * Decrypt and check the padding - */ - int ret; - unsigned char *dec_msg; - unsigned char *dec_msg_result; - size_t dec_msglen; - size_t minlen = 0; - size_t olen = 0; - - /* - * Check immediate ciphertext sanity - */ + if ( mode == MBEDTLS_MODE_CBC ) { + /* + * Decrypt and check the padding + */ + int ret; + unsigned char *dec_msg; + unsigned char *dec_msg_result; + size_t dec_msglen; + size_t minlen = 0; + size_t olen = 0; + + /* + * Check immediate ciphertext sanity + */ #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - minlen += ssl->transform_in->ivlen; + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) + minlen += ssl->transform_in->ivlen; #endif - if( ssl->in_msglen < minlen + ssl->transform_in->ivlen || - ssl->in_msglen < minlen + ssl->transform_in->maclen + 1 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < max( ivlen(%d), maclen (%d) " - "+ 1 ) ( + expl IV )", ssl->in_msglen, - ssl->transform_in->ivlen, - ssl->transform_in->maclen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } + if ( ssl->in_msglen < minlen + ssl->transform_in->ivlen || + ssl->in_msglen < minlen + ssl->transform_in->maclen + 1 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < max( ivlen(%d), maclen (%d) " + "+ 1 ) ( + expl IV )", ssl->in_msglen, + ssl->transform_in->ivlen, + ssl->transform_in->maclen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } - dec_msglen = ssl->in_msglen; - dec_msg = ssl->in_msg; - dec_msg_result = ssl->in_msg; + dec_msglen = ssl->in_msglen; + dec_msg = ssl->in_msg; + dec_msg_result = ssl->in_msg; - /* - * Authenticate before decrypt if enabled - */ + /* + * Authenticate before decrypt if enabled + */ #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) - if( ssl->session_in->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) - { - unsigned char computed_mac[SSL_MAX_MAC_SIZE]; - unsigned char pseudo_hdr[13]; + if ( ssl->session_in->encrypt_then_mac == MBEDTLS_SSL_ETM_ENABLED ) { + unsigned char computed_mac[SSL_MAX_MAC_SIZE]; + unsigned char pseudo_hdr[13]; - MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); + MBEDTLS_SSL_DEBUG_MSG( 3, ( "using encrypt then mac" ) ); - dec_msglen -= ssl->transform_in->maclen; - ssl->in_msglen -= ssl->transform_in->maclen; + dec_msglen -= ssl->transform_in->maclen; + ssl->in_msglen -= ssl->transform_in->maclen; - memcpy( pseudo_hdr + 0, ssl->in_ctr, 8 ); - memcpy( pseudo_hdr + 8, ssl->in_hdr, 3 ); - pseudo_hdr[11] = (unsigned char)( ( ssl->in_msglen >> 8 ) & 0xFF ); - pseudo_hdr[12] = (unsigned char)( ( ssl->in_msglen ) & 0xFF ); + memcpy( pseudo_hdr + 0, ssl->in_ctr, 8 ); + memcpy( pseudo_hdr + 8, ssl->in_hdr, 3 ); + pseudo_hdr[11] = (unsigned char)( ( ssl->in_msglen >> 8 ) & 0xFF ); + pseudo_hdr[12] = (unsigned char)( ( ssl->in_msglen ) & 0xFF ); - MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); + MBEDTLS_SSL_DEBUG_BUF( 4, "MAC'd meta-data", pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, pseudo_hdr, 13 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, - ssl->in_iv, ssl->in_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, computed_mac ); - mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, pseudo_hdr, 13 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, + ssl->in_iv, ssl->in_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, computed_mac ); + mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); - MBEDTLS_SSL_DEBUG_BUF( 4, "message mac", ssl->in_iv + ssl->in_msglen, - ssl->transform_in->maclen ); - MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", computed_mac, - ssl->transform_in->maclen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "message mac", ssl->in_iv + ssl->in_msglen, + ssl->transform_in->maclen ); + MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", computed_mac, + ssl->transform_in->maclen ); - if( mbedtls_ssl_safer_memcmp( ssl->in_iv + ssl->in_msglen, computed_mac, - ssl->transform_in->maclen ) != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); + if ( mbedtls_ssl_safer_memcmp( ssl->in_iv + ssl->in_msglen, computed_mac, + ssl->transform_in->maclen ) != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } - auth_done++; - } + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } + auth_done++; + } #endif /* MBEDTLS_SSL_ENCRYPT_THEN_MAC */ - /* - * Check length sanity - */ - if( ssl->in_msglen % ssl->transform_in->ivlen != 0 ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) %% ivlen (%d) != 0", - ssl->in_msglen, ssl->transform_in->ivlen ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); - } + /* + * Check length sanity + */ + if ( ssl->in_msglen % ssl->transform_in->ivlen != 0 ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) %% ivlen (%d) != 0", + ssl->in_msglen, ssl->transform_in->ivlen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); + } #if defined(MBEDTLS_SSL_PROTO_TLS1_1) || defined(MBEDTLS_SSL_PROTO_TLS1_2) - /* - * Initialize for prepended IV for block cipher in TLS v1.1 and up - */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { - dec_msglen -= ssl->transform_in->ivlen; - ssl->in_msglen -= ssl->transform_in->ivlen; - - for( i = 0; i < ssl->transform_in->ivlen; i++ ) - ssl->transform_in->iv_dec[i] = ssl->in_iv[i]; - } + /* + * Initialize for prepended IV for block cipher in TLS v1.1 and up + */ + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { + dec_msglen -= ssl->transform_in->ivlen; + ssl->in_msglen -= ssl->transform_in->ivlen; + + for ( i = 0; i < ssl->transform_in->ivlen; i++ ) + ssl->transform_in->iv_dec[i] = ssl->in_iv[i]; + } #endif /* MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - if( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, - ssl->transform_in->iv_dec, - ssl->transform_in->ivlen, - dec_msg, dec_msglen, - dec_msg_result, &olen ) ) != 0 ) - { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); - return( ret ); - } - - if( dec_msglen != olen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( ( ret = mbedtls_cipher_crypt( &ssl->transform_in->cipher_ctx_dec, + ssl->transform_in->iv_dec, + ssl->transform_in->ivlen, + dec_msg, dec_msglen, + dec_msg_result, &olen ) ) != 0 ) { + MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_cipher_crypt", ret ); + return ( ret ); + } -#if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) - { - /* - * Save IV in SSL3 and TLS1 - */ - memcpy( ssl->transform_in->iv_dec, - ssl->transform_in->cipher_ctx_dec.iv, - ssl->transform_in->ivlen ); - } + if ( dec_msglen != olen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + +#if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_2 ) { + /* + * Save IV in SSL3 and TLS1 + */ + memcpy( ssl->transform_in->iv_dec, + ssl->transform_in->cipher_ctx_dec.iv, + ssl->transform_in->ivlen ); + } #endif - padlen = 1 + ssl->in_msg[ssl->in_msglen - 1]; + padlen = 1 + ssl->in_msg[ssl->in_msglen - 1]; - if( ssl->in_msglen < ssl->transform_in->maclen + padlen && - auth_done == 0 ) - { + if ( ssl->in_msglen < ssl->transform_in->maclen + padlen && + auth_done == 0 ) { #if defined(MBEDTLS_SSL_DEBUG_ALL) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)", - ssl->in_msglen, ssl->transform_in->maclen, padlen ) ); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "msglen (%d) < maclen (%d) + padlen (%d)", + ssl->in_msglen, ssl->transform_in->maclen, padlen ) ); #endif - padlen = 0; - correct = 0; - } + padlen = 0; + correct = 0; + } #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( padlen > ssl->transform_in->ivlen ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( padlen > ssl->transform_in->ivlen ) { #if defined(MBEDTLS_SSL_DEBUG_ALL) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding length: is %d, " - "should be no more than %d", - padlen, ssl->transform_in->ivlen ) ); + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding length: is %d, " + "should be no more than %d", + padlen, ssl->transform_in->ivlen ) ); #endif - correct = 0; - } - } - else + correct = 0; + } + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) - { - /* - * TLSv1+: always check the padding up to the first failure - * and fake check up to 256 bytes of padding - */ - size_t pad_count = 0, real_count = 1; - size_t padding_idx = ssl->in_msglen - padlen - 1; - - /* - * Padding is guaranteed to be incorrect if: - * 1. padlen >= ssl->in_msglen - * - * 2. padding_idx >= MBEDTLS_SSL_MAX_CONTENT_LEN + - * ssl->transform_in->maclen - * - * In both cases we reset padding_idx to a safe value (0) to - * prevent out-of-buffer reads. - */ - correct &= ( ssl->in_msglen >= padlen + 1 ); - correct &= ( padding_idx < MBEDTLS_SSL_MAX_CONTENT_LEN + - ssl->transform_in->maclen ); - - padding_idx *= correct; - - for( i = 1; i <= 256; i++ ) - { - real_count &= ( i <= padlen ); - pad_count += real_count * - ( ssl->in_msg[padding_idx + i] == padlen - 1 ); - } - - correct &= ( pad_count == padlen ); /* Only 1 on correct padding */ + if ( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) { + /* + * TLSv1+: always check the padding up to the first failure + * and fake check up to 256 bytes of padding + */ + size_t pad_count = 0, real_count = 1; + size_t padding_idx = ssl->in_msglen - padlen - 1; + + /* + * Padding is guaranteed to be incorrect if: + * 1. padlen >= ssl->in_msglen + * + * 2. padding_idx >= MBEDTLS_SSL_MAX_CONTENT_LEN + + * ssl->transform_in->maclen + * + * In both cases we reset padding_idx to a safe value (0) to + * prevent out-of-buffer reads. + */ + correct &= ( ssl->in_msglen >= padlen + 1 ); + correct &= ( padding_idx < MBEDTLS_SSL_MAX_CONTENT_LEN + + ssl->transform_in->maclen ); + + padding_idx *= correct; + + for ( i = 1; i <= 256; i++ ) { + real_count &= ( i <= padlen ); + pad_count += real_count * + ( ssl->in_msg[padding_idx + i] == padlen - 1 ); + } + + correct &= ( pad_count == padlen ); /* Only 1 on correct padding */ #if defined(MBEDTLS_SSL_DEBUG_ALL) - if( padlen > 0 && correct == 0 ) - MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding byte detected" ) ); + if ( padlen > 0 && correct == 0 ) + MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad padding byte detected" ) ); #endif - padlen &= correct * 0x1FF; - } - else + padlen &= correct * 0x1FF; + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - ssl->in_msglen -= padlen; - } - else + ssl->in_msglen -= padlen; + } else #endif /* MBEDTLS_CIPHER_MODE_CBC && ( MBEDTLS_AES_C || MBEDTLS_CAMELLIA_C ) */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 4, "raw buffer after decryption", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); /* * Authenticate if not done yet. * Compute the MAC regardless of the padding result (RFC4346, CBCTIME). */ #if defined(SSL_SOME_MODES_USE_MAC) - if( auth_done == 0 ) - { + if ( auth_done == 0 ) { unsigned char tmp[SSL_MAX_MAC_SIZE]; ssl->in_msglen -= ssl->transform_in->maclen; @@ -1928,66 +1804,61 @@ static int ssl_decrypt_buf( mbedtls_ssl_context *ssl ) memcpy( tmp, ssl->in_msg + ssl->in_msglen, ssl->transform_in->maclen ); #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl_mac( &ssl->transform_in->md_ctx_dec, - ssl->transform_in->mac_dec, - ssl->in_msg, ssl->in_msglen, - ssl->in_ctr, ssl->in_msgtype ); - } - else + ssl->transform_in->mac_dec, + ssl->in_msg, ssl->in_msglen, + ssl->in_ctr, ssl->in_msgtype ); + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) - { - /* - * Process MAC and always update for padlen afterwards to make - * total time independent of padlen - * - * extra_run compensates MAC check for padlen - * - * Known timing attacks: - * - Lucky Thirteen (http://www.isg.rhul.ac.uk/tls/TLStiming.pdf) - * - * We use ( ( Lx + 8 ) / 64 ) to handle 'negative Lx' values - * correctly. (We round down instead of up, so -56 is the correct - * value for our calculations instead of -55) - */ - size_t j, extra_run = 0; - extra_run = ( 13 + ssl->in_msglen + padlen + 8 ) / 64 - - ( 13 + ssl->in_msglen + 8 ) / 64; - - extra_run &= correct * 0xFF; - - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_ctr, 8 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_hdr, 3 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_len, 2 ); - mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_msg, - ssl->in_msglen ); - mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, - ssl->in_msg + ssl->in_msglen ); - /* Call mbedtls_md_process at least once due to cache attacks */ - for( j = 0; j < extra_run + 1; j++ ) - mbedtls_md_process( &ssl->transform_in->md_ctx_dec, ssl->in_msg ); - - mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); - } - else + if ( ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_0 ) { + /* + * Process MAC and always update for padlen afterwards to make + * total time independent of padlen + * + * extra_run compensates MAC check for padlen + * + * Known timing attacks: + * - Lucky Thirteen (http://www.isg.rhul.ac.uk/tls/TLStiming.pdf) + * + * We use ( ( Lx + 8 ) / 64 ) to handle 'negative Lx' values + * correctly. (We round down instead of up, so -56 is the correct + * value for our calculations instead of -55) + */ + size_t j, extra_run = 0; + extra_run = ( 13 + ssl->in_msglen + padlen + 8 ) / 64 - + ( 13 + ssl->in_msglen + 8 ) / 64; + + extra_run &= correct * 0xFF; + + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_ctr, 8 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_hdr, 3 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_len, 2 ); + mbedtls_md_hmac_update( &ssl->transform_in->md_ctx_dec, ssl->in_msg, + ssl->in_msglen ); + mbedtls_md_hmac_finish( &ssl->transform_in->md_ctx_dec, + ssl->in_msg + ssl->in_msglen ); + /* Call mbedtls_md_process at least once due to cache attacks */ + for ( j = 0; j < extra_run + 1; j++ ) + mbedtls_md_process( &ssl->transform_in->md_ctx_dec, ssl->in_msg ); + + mbedtls_md_hmac_reset( &ssl->transform_in->md_ctx_dec ); + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } MBEDTLS_SSL_DEBUG_BUF( 4, "message mac", tmp, ssl->transform_in->maclen ); MBEDTLS_SSL_DEBUG_BUF( 4, "computed mac", ssl->in_msg + ssl->in_msglen, - ssl->transform_in->maclen ); + ssl->transform_in->maclen ); - if( mbedtls_ssl_safer_memcmp( tmp, ssl->in_msg + ssl->in_msglen, - ssl->transform_in->maclen ) != 0 ) - { + if ( mbedtls_ssl_safer_memcmp( tmp, ssl->in_msg + ssl->in_msglen, + ssl->transform_in->maclen ) != 0 ) { #if defined(MBEDTLS_SSL_DEBUG_ALL) MBEDTLS_SSL_DEBUG_MSG( 1, ( "message mac does not match" ) ); #endif @@ -1998,59 +1869,52 @@ static int ssl_decrypt_buf( mbedtls_ssl_context *ssl ) /* * Finally check the correct flag */ - if( correct == 0 ) - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + if ( correct == 0 ) + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } #endif /* SSL_SOME_MODES_USE_MAC */ /* Make extra sure authentication was performed, exactly once */ - if( auth_done != 1 ) - { + if ( auth_done != 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - if( ssl->in_msglen == 0 ) - { + if ( ssl->in_msglen == 0 ) { ssl->nb_zero++; /* * Three or more empty messages may be a DoS attack * (excessive CPU consumption). */ - if( ssl->nb_zero > 3 ) - { + if ( ssl->nb_zero > 3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received four consecutive empty " - "messages, possible DoS attack" ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + "messages, possible DoS attack" ) ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } - } - else + } else ssl->nb_zero = 0; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ; /* in_ctr read from peer, not maintained internally */ - } - else + } else #endif { - for( i = 8; i > ssl_ep_len( ssl ); i-- ) - if( ++ssl->in_ctr[i - 1] != 0 ) + for ( i = 8; i > ssl_ep_len( ssl ); i-- ) + if ( ++ssl->in_ctr[i - 1] != 0 ) break; /* The loop goes to its end iff the counter is wrapping */ - if( i == ssl_ep_len( ssl ) ) - { + if ( i == ssl_ep_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "incoming message counter would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= decrypt buf" ) ); - return( 0 ); + return ( 0 ); } #undef MAC_NONE @@ -2070,16 +1934,16 @@ static int ssl_compress_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> compress buf" ) ); - if( len_pre == 0 ) - return( 0 ); + if ( len_pre == 0 ) + return ( 0 ); memcpy( msg_pre, ssl->out_msg, len_pre ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "before compression: msglen = %d, ", - ssl->out_msglen ) ); + ssl->out_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "before compression: output payload", - ssl->out_msg, ssl->out_msglen ); + ssl->out_msg, ssl->out_msglen ); ssl->transform_out->ctx_deflate.next_in = msg_pre; ssl->transform_out->ctx_deflate.avail_in = len_pre; @@ -2087,24 +1951,23 @@ static int ssl_compress_buf( mbedtls_ssl_context *ssl ) ssl->transform_out->ctx_deflate.avail_out = MBEDTLS_SSL_BUFFER_LEN; ret = deflate( &ssl->transform_out->ctx_deflate, Z_SYNC_FLUSH ); - if( ret != Z_OK ) - { + if ( ret != Z_OK ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "failed to perform compression (%d)", ret ) ); - return( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); + return ( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); } ssl->out_msglen = MBEDTLS_SSL_BUFFER_LEN - ssl->transform_out->ctx_deflate.avail_out; MBEDTLS_SSL_DEBUG_MSG( 3, ( "after compression: msglen = %d, ", - ssl->out_msglen ) ); + ssl->out_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "after compression: output payload", - ssl->out_msg, ssl->out_msglen ); + ssl->out_msg, ssl->out_msglen ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= compress buf" ) ); - return( 0 ); + return ( 0 ); } static int ssl_decompress_buf( mbedtls_ssl_context *ssl ) @@ -2116,16 +1979,16 @@ static int ssl_decompress_buf( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> decompress buf" ) ); - if( len_pre == 0 ) - return( 0 ); + if ( len_pre == 0 ) + return ( 0 ); memcpy( msg_pre, ssl->in_msg, len_pre ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "before decompression: msglen = %d, ", - ssl->in_msglen ) ); + ssl->in_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "before decompression: input payload", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); ssl->transform_in->ctx_inflate.next_in = msg_pre; ssl->transform_in->ctx_inflate.avail_in = len_pre; @@ -2133,24 +1996,23 @@ static int ssl_decompress_buf( mbedtls_ssl_context *ssl ) ssl->transform_in->ctx_inflate.avail_out = MBEDTLS_SSL_MAX_CONTENT_LEN; ret = inflate( &ssl->transform_in->ctx_inflate, Z_SYNC_FLUSH ); - if( ret != Z_OK ) - { + if ( ret != Z_OK ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "failed to perform decompression (%d)", ret ) ); - return( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); + return ( MBEDTLS_ERR_SSL_COMPRESSION_FAILED ); } ssl->in_msglen = MBEDTLS_SSL_MAX_CONTENT_LEN - ssl->transform_in->ctx_inflate.avail_out; MBEDTLS_SSL_DEBUG_MSG( 3, ( "after decompression: msglen = %d, ", - ssl->in_msglen ) ); + ssl->in_msglen ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "after decompression: input payload", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= decompress buf" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_ZLIB_SUPPORT */ @@ -2162,25 +2024,22 @@ static int ssl_resend_hello_request( mbedtls_ssl_context *ssl ) { /* If renegotiation is not enforced, retransmit until we would reach max * timeout if we were using the usual handshake doubling scheme */ - if( ssl->conf->renego_max_records < 0 ) - { + if ( ssl->conf->renego_max_records < 0 ) { uint32_t ratio = ssl->conf->hs_timeout_max / ssl->conf->hs_timeout_min + 1; unsigned char doublings = 1; - while( ratio != 0 ) - { + while ( ratio != 0 ) { ++doublings; ratio >>= 1; } - if( ++ssl->renego_records_seen > doublings ) - { + if ( ++ssl->renego_records_seen > doublings ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "no longer retransmitting hello request" ) ); - return( 0 ); + return ( 0 ); } } - return( ssl_write_hello_request( ssl ) ); + return ( ssl_write_hello_request( ssl ) ); } #endif #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ @@ -2207,30 +2066,26 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> fetch input" ) ); - if( ssl->f_recv == NULL && ssl->f_recv_timeout == NULL ) - { + if ( ssl->f_recv == NULL && ssl->f_recv_timeout == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Bad usage of mbedtls_ssl_set_bio() " - "or mbedtls_ssl_set_bio()" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "or mbedtls_ssl_set_bio()" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( nb_want > MBEDTLS_SSL_BUFFER_LEN - (size_t)( ssl->in_hdr - ssl->in_buf ) ) - { + if ( nb_want > MBEDTLS_SSL_BUFFER_LEN - (size_t)( ssl->in_hdr - ssl->in_buf ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "requesting more data than fits" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { uint32_t timeout; /* Just to be sure */ - if( ssl->f_set_timer == NULL || ssl->f_get_timer == NULL ) - { + if ( ssl->f_set_timer == NULL || ssl->f_get_timer == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "You must use " - "mbedtls_ssl_set_timer_cb() for DTLS" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "mbedtls_ssl_set_timer_cb() for DTLS" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* @@ -2243,20 +2098,17 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) /* * Move to the next record in the already read datagram if applicable */ - if( ssl->next_record_offset != 0 ) - { - if( ssl->in_left < ssl->next_record_offset ) - { + if ( ssl->next_record_offset != 0 ) { + if ( ssl->in_left < ssl->next_record_offset ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } ssl->in_left -= ssl->next_record_offset; - if( ssl->in_left != 0 ) - { + if ( ssl->in_left != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "next record in same datagram, offset: %d", - ssl->next_record_offset ) ); + ssl->next_record_offset ) ); memmove( ssl->in_hdr, ssl->in_hdr + ssl->next_record_offset, ssl->in_left ); @@ -2266,15 +2118,14 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) } MBEDTLS_SSL_DEBUG_MSG( 2, ( "in_left: %d, nb_want: %d", - ssl->in_left, nb_want ) ); + ssl->in_left, nb_want ) ); /* * Done if we already have enough data. */ - if( nb_want <= ssl->in_left) - { + if ( nb_want <= ssl->in_left) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= fetch input" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2282,10 +2133,9 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) * are not at the beginning of a new record, the caller did something * wrong. */ - if( ssl->in_left != 0 ) - { + if ( ssl->in_left != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } /* @@ -2293,94 +2143,81 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) * This avoids by-passing the timer when repeatedly receiving messages * that will end up being dropped. */ - if( ssl_check_timer( ssl ) != 0 ) + if ( ssl_check_timer( ssl ) != 0 ) ret = MBEDTLS_ERR_SSL_TIMEOUT; - else - { + else { len = MBEDTLS_SSL_BUFFER_LEN - ( ssl->in_hdr - ssl->in_buf ); - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) timeout = ssl->handshake->retransmit_timeout; else timeout = ssl->conf->read_timeout; MBEDTLS_SSL_DEBUG_MSG( 3, ( "f_recv_timeout: %u ms", timeout ) ); - if( ssl->f_recv_timeout != NULL ) + if ( ssl->f_recv_timeout != NULL ) ret = ssl->f_recv_timeout( ssl->p_bio, ssl->in_hdr, len, - timeout ); + timeout ); else ret = ssl->f_recv( ssl->p_bio, ssl->in_hdr, len ); MBEDTLS_SSL_DEBUG_RET( 2, "ssl->f_recv(_timeout)", ret ); - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_CONN_EOF ); + if ( ret == 0 ) + return ( MBEDTLS_ERR_SSL_CONN_EOF ); } - if( ret == MBEDTLS_ERR_SSL_TIMEOUT ) - { + if ( ret == MBEDTLS_ERR_SSL_TIMEOUT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "timeout" ) ); ssl_set_timer( ssl, 0 ); - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ssl_double_retransmit_timeout( ssl ) != 0 ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ssl_double_retransmit_timeout( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake timeout" ) ); - return( MBEDTLS_ERR_SSL_TIMEOUT ); + return ( MBEDTLS_ERR_SSL_TIMEOUT ); } - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_resend", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } #if defined(MBEDTLS_SSL_SRV_C) && defined(MBEDTLS_SSL_RENEGOTIATION) - else if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { - if( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) - { + else if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { + if ( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_resend_hello_request", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ } - if( ret < 0 ) - return( ret ); + if ( ret < 0 ) + return ( ret ); ssl->in_left = ret; - } - else + } else #endif { MBEDTLS_SSL_DEBUG_MSG( 2, ( "in_left: %d, nb_want: %d", - ssl->in_left, nb_want ) ); + ssl->in_left, nb_want ) ); - while( ssl->in_left < nb_want ) - { + while ( ssl->in_left < nb_want ) { len = nb_want - ssl->in_left; - if( ssl_check_timer( ssl ) != 0 ) + if ( ssl_check_timer( ssl ) != 0 ) ret = MBEDTLS_ERR_SSL_TIMEOUT; - else - { - if( ssl->f_recv_timeout != NULL ) - { + else { + if ( ssl->f_recv_timeout != NULL ) { ret = ssl->f_recv_timeout( ssl->p_bio, ssl->in_hdr + ssl->in_left, len, ssl->conf->read_timeout ); - } - else - { + } else { ret = ssl->f_recv( ssl->p_bio, ssl->in_hdr + ssl->in_left, len ); } @@ -2390,11 +2227,11 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) ssl->in_left, nb_want ) ); MBEDTLS_SSL_DEBUG_RET( 2, "ssl->f_recv(_timeout)", ret ); - if( ret == 0 ) - return( MBEDTLS_ERR_SSL_CONN_EOF ); + if ( ret == 0 ) + return ( MBEDTLS_ERR_SSL_CONN_EOF ); - if( ret < 0 ) - return( ret ); + if ( ret < 0 ) + return ( ret ); ssl->in_left += ret; } @@ -2402,7 +2239,7 @@ int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= fetch input" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2415,24 +2252,21 @@ int mbedtls_ssl_flush_output( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> flush output" ) ); - if( ssl->f_send == NULL ) - { + if ( ssl->f_send == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "Bad usage of mbedtls_ssl_set_bio() " - "or mbedtls_ssl_set_bio()" ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + "or mbedtls_ssl_set_bio()" ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } /* Avoid incrementing counter if data is flushed */ - if( ssl->out_left == 0 ) - { + if ( ssl->out_left == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= flush output" ) ); - return( 0 ); + return ( 0 ); } - while( ssl->out_left > 0 ) - { + while ( ssl->out_left > 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "message length: %d, out_left: %d", - mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen, ssl->out_left ) ); + mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen, ssl->out_left ) ); buf = ssl->out_hdr + mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen - ssl->out_left; @@ -2440,26 +2274,25 @@ int mbedtls_ssl_flush_output( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_RET( 2, "ssl->f_send", ret ); - if( ret <= 0 ) - return( ret ); + if ( ret <= 0 ) + return ( ret ); ssl->out_left -= ret; } - for( i = 8; i > ssl_ep_len( ssl ); i-- ) - if( ++ssl->out_ctr[i - 1] != 0 ) + for ( i = 8; i > ssl_ep_len( ssl ); i-- ) + if ( ++ssl->out_ctr[i - 1] != 0 ) break; /* The loop goes to its end iff the counter is wrapping */ - if( i == ssl_ep_len( ssl ) ) - { + if ( i == ssl_ep_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "outgoing message counter would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= flush output" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2474,18 +2307,16 @@ static int ssl_flight_append( mbedtls_ssl_context *ssl ) mbedtls_ssl_flight_item *msg; /* Allocate space for current message */ - if( ( msg = mbedtls_calloc( 1, sizeof( mbedtls_ssl_flight_item ) ) ) == NULL ) - { + if ( ( msg = mbedtls_calloc( 1, sizeof( mbedtls_ssl_flight_item ) ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc %d bytes failed", - sizeof( mbedtls_ssl_flight_item ) ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + sizeof( mbedtls_ssl_flight_item ) ) ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } - if( ( msg->p = mbedtls_calloc( 1, ssl->out_msglen ) ) == NULL ) - { + if ( ( msg->p = mbedtls_calloc( 1, ssl->out_msglen ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc %d bytes failed", ssl->out_msglen ) ); mbedtls_free( msg ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } /* Copy current handshake message with headers */ @@ -2495,17 +2326,16 @@ static int ssl_flight_append( mbedtls_ssl_context *ssl ) msg->next = NULL; /* Append to the current flight */ - if( ssl->handshake->flight == NULL ) + if ( ssl->handshake->flight == NULL ) ssl->handshake->flight = msg; - else - { + else { mbedtls_ssl_flight_item *cur = ssl->handshake->flight; - while( cur->next != NULL ) + while ( cur->next != NULL ) cur = cur->next; cur->next = msg; } - return( 0 ); + return ( 0 ); } /* @@ -2516,8 +2346,7 @@ static void ssl_flight_free( mbedtls_ssl_flight_item *flight ) mbedtls_ssl_flight_item *cur = flight; mbedtls_ssl_flight_item *next; - while( cur != NULL ) - { + while ( cur != NULL ) { next = cur->next; mbedtls_free( cur->p ); @@ -2539,8 +2368,7 @@ static void ssl_swap_epochs( mbedtls_ssl_context *ssl ) mbedtls_ssl_transform *tmp_transform; unsigned char tmp_out_ctr[8]; - if( ssl->transform_out == ssl->handshake->alt_transform_out ) - { + if ( ssl->transform_out == ssl->handshake->alt_transform_out ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip swap epochs" ) ); return; } @@ -2558,22 +2386,18 @@ static void ssl_swap_epochs( mbedtls_ssl_context *ssl ) memcpy( ssl->handshake->alt_out_ctr, tmp_out_ctr, 8 ); /* Adjust to the newly activated transform */ - if( ssl->transform_out != NULL && - ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { + if ( ssl->transform_out != NULL && + ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { ssl->out_msg = ssl->out_iv + ssl->transform_out->ivlen - - ssl->transform_out->fixed_ivlen; - } - else + ssl->transform_out->fixed_ivlen; + } else ssl->out_msg = ssl->out_iv; #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_activate != NULL ) - { - if( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) - { + if ( mbedtls_ssl_hw_record_activate != NULL ) { + if ( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_activate", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif @@ -2590,8 +2414,7 @@ int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> mbedtls_ssl_resend" ) ); - if( ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING ) - { + if ( ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "initialise resending" ) ); ssl->handshake->cur_msg = ssl->handshake->flight; @@ -2600,17 +2423,15 @@ int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_SENDING; } - while( ssl->handshake->cur_msg != NULL ) - { + while ( ssl->handshake->cur_msg != NULL ) { int ret; mbedtls_ssl_flight_item *cur = ssl->handshake->cur_msg; /* Swap epochs before sending Finished: we can't do it after * sending ChangeCipherSpec, in case write returns WANT_READ. * Must be done before copying, may change out_msg pointer */ - if( cur->type == MBEDTLS_SSL_MSG_HANDSHAKE && - cur->p[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( cur->type == MBEDTLS_SSL_MSG_HANDSHAKE && + cur->p[0] == MBEDTLS_SSL_HS_FINISHED ) { ssl_swap_epochs( ssl ); } @@ -2622,24 +2443,22 @@ int mbedtls_ssl_resend( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 3, "resent handshake message header", ssl->out_msg, 12 ); - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } } - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_FINISHED; - else - { + else { ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; ssl_set_timer( ssl, ssl->handshake->retransmit_timeout ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= mbedtls_ssl_resend" ) ); - return( 0 ); + return ( 0 ); } /* @@ -2658,12 +2477,10 @@ void mbedtls_ssl_recv_flight_completed( mbedtls_ssl_context *ssl ) /* Cancel timer */ ssl_set_timer( ssl, 0 ); - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) { ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_FINISHED; - } - else + } else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_PREPARING; } @@ -2675,12 +2492,10 @@ void mbedtls_ssl_send_flight_completed( mbedtls_ssl_context *ssl ) ssl_reset_retransmit_timeout( ssl ); ssl_set_timer( ssl, ssl->handshake->retransmit_timeout ); - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) { ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_FINISHED; - } - else + } else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; } #endif /* MBEDTLS_SSL_PROTO_DTLS */ @@ -2701,91 +2516,79 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write record" ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { ; /* Skip special handshake treatment when resending */ - } - else + } else #endif - if( ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { - out_msg_type = ssl->out_msg[0]; + if ( ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { + out_msg_type = ssl->out_msg[0]; - if( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST && - ssl->handshake == NULL ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } + if ( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST && + ssl->handshake == NULL ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } - ssl->out_msg[1] = (unsigned char)( ( len - 4 ) >> 16 ); - ssl->out_msg[2] = (unsigned char)( ( len - 4 ) >> 8 ); - ssl->out_msg[3] = (unsigned char)( ( len - 4 ) ); + ssl->out_msg[1] = (unsigned char)( ( len - 4 ) >> 16 ); + ssl->out_msg[2] = (unsigned char)( ( len - 4 ) >> 8 ); + ssl->out_msg[3] = (unsigned char)( ( len - 4 ) ); - /* - * DTLS has additional fields in the Handshake layer, - * between the length field and the actual payload: - * uint16 message_seq; - * uint24 fragment_offset; - * uint24 fragment_length; - */ + /* + * DTLS has additional fields in the Handshake layer, + * between the length field and the actual payload: + * uint16 message_seq; + * uint24 fragment_offset; + * uint24 fragment_length; + */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - /* Make room for the additional DTLS fields */ - memmove( ssl->out_msg + 12, ssl->out_msg + 4, len - 4 ); - ssl->out_msglen += 8; - len += 8; + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + /* Make room for the additional DTLS fields */ + memmove( ssl->out_msg + 12, ssl->out_msg + 4, len - 4 ); + ssl->out_msglen += 8; + len += 8; + + /* Write message_seq and update it, except for HelloRequest */ + if ( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) { + ssl->out_msg[4] = ( ssl->handshake->out_msg_seq >> 8 ) & 0xFF; + ssl->out_msg[5] = ( ssl->handshake->out_msg_seq ) & 0xFF; + ++( ssl->handshake->out_msg_seq ); + } else { + ssl->out_msg[4] = 0; + ssl->out_msg[5] = 0; + } - /* Write message_seq and update it, except for HelloRequest */ - if( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) - { - ssl->out_msg[4] = ( ssl->handshake->out_msg_seq >> 8 ) & 0xFF; - ssl->out_msg[5] = ( ssl->handshake->out_msg_seq ) & 0xFF; - ++( ssl->handshake->out_msg_seq ); - } - else - { - ssl->out_msg[4] = 0; - ssl->out_msg[5] = 0; + /* We don't fragment, so frag_offset = 0 and frag_len = len */ + memset( ssl->out_msg + 6, 0x00, 3 ); + memcpy( ssl->out_msg + 9, ssl->out_msg + 1, 3 ); } - - /* We don't fragment, so frag_offset = 0 and frag_len = len */ - memset( ssl->out_msg + 6, 0x00, 3 ); - memcpy( ssl->out_msg + 9, ssl->out_msg + 1, 3 ); - } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - if( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) - ssl->handshake->update_checksum( ssl, ssl->out_msg, len ); - } + if ( out_msg_type != MBEDTLS_SSL_HS_HELLO_REQUEST ) + ssl->handshake->update_checksum( ssl, ssl->out_msg, len ); + } /* Save handshake and CCS messages for resending */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL && - ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING && - ( ssl->out_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC || - ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) ) - { - if( ( ret = ssl_flight_append( ssl ) ) != 0 ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL && + ssl->handshake->retransmit_state != MBEDTLS_SSL_RETRANS_SENDING && + ( ssl->out_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC || + ssl->out_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) ) { + if ( ( ret = ssl_flight_append( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_flight_append", ret ); - return( ret ); + return ( ret ); } } #endif #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->transform_out != NULL && - ssl->session_out->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { - if( ( ret = ssl_compress_buf( ssl ) ) != 0 ) - { + if ( ssl->transform_out != NULL && + ssl->session_out->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) { + if ( ( ret = ssl_compress_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_compress_buf", ret ); - return( ret ); + return ( ret ); } len = ssl->out_msglen; @@ -2793,36 +2596,31 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ) #endif /*MBEDTLS_ZLIB_SUPPORT */ #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_write != NULL ) - { + if ( mbedtls_ssl_hw_record_write != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_write()" ) ); ret = mbedtls_ssl_hw_record_write( ssl ); - if( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) - { + if ( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_write", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } - if( ret == 0 ) + if ( ret == 0 ) done = 1; } #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ - if( !done ) - { + if ( !done ) { ssl->out_hdr[0] = (unsigned char) ssl->out_msgtype; mbedtls_ssl_write_version( ssl->major_ver, ssl->minor_ver, - ssl->conf->transport, ssl->out_hdr + 1 ); + ssl->conf->transport, ssl->out_hdr + 1 ); ssl->out_len[0] = (unsigned char)( len >> 8 ); ssl->out_len[1] = (unsigned char)( len ); - if( ssl->transform_out != NULL ) - { - if( ( ret = ssl_encrypt_buf( ssl ) ) != 0 ) - { + if ( ssl->transform_out != NULL ) { + if ( ( ret = ssl_encrypt_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_encrypt_buf", ret ); - return( ret ); + return ( ret ); } len = ssl->out_msglen; @@ -2833,23 +2631,22 @@ int mbedtls_ssl_write_record( mbedtls_ssl_context *ssl ) ssl->out_left = mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen; MBEDTLS_SSL_DEBUG_MSG( 3, ( "output record: msgtype = %d, " - "version = [%d:%d], msglen = %d", - ssl->out_hdr[0], ssl->out_hdr[1], ssl->out_hdr[2], - ( ssl->out_len[0] << 8 ) | ssl->out_len[1] ) ); + "version = [%d:%d], msglen = %d", + ssl->out_hdr[0], ssl->out_hdr[1], ssl->out_hdr[2], + ( ssl->out_len[0] << 8 ) | ssl->out_len[1] ) ); MBEDTLS_SSL_DEBUG_BUF( 4, "output record sent to network", - ssl->out_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen ); + ssl->out_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->out_msglen ); } - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_flush_output", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write record" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -2861,14 +2658,12 @@ static void ssl_bitmask_set( unsigned char *mask, size_t offset, size_t len ) unsigned int start_bits, end_bits; start_bits = 8 - ( offset % 8 ); - if( start_bits != 8 ) - { + if ( start_bits != 8 ) { size_t first_byte_idx = offset / 8; /* Special case */ - if( len <= start_bits ) - { - for( ; len != 0; len-- ) + if ( len <= start_bits ) { + for ( ; len != 0; len-- ) mask[first_byte_idx] |= 1 << ( start_bits - len ); /* Avoid potential issues with offset or len becoming invalid */ @@ -2878,18 +2673,17 @@ static void ssl_bitmask_set( unsigned char *mask, size_t offset, size_t len ) offset += start_bits; /* Now offset % 8 == 0 */ len -= start_bits; - for( ; start_bits != 0; start_bits-- ) + for ( ; start_bits != 0; start_bits-- ) mask[first_byte_idx] |= 1 << ( start_bits - 1 ); } end_bits = len % 8; - if( end_bits != 0 ) - { + if ( end_bits != 0 ) { size_t last_byte_idx = ( offset + len ) / 8; len -= end_bits; /* Now len % 8 == 0 */ - for( ; end_bits != 0; end_bits-- ) + for ( ; end_bits != 0; end_bits-- ) mask[last_byte_idx] |= 1 << ( 8 - end_bits ); } @@ -2903,15 +2697,15 @@ static int ssl_bitmask_check( unsigned char *mask, size_t len ) { size_t i; - for( i = 0; i < len / 8; i++ ) - if( mask[i] != 0xFF ) - return( -1 ); + for ( i = 0; i < len / 8; i++ ) + if ( mask[i] != 0xFF ) + return ( -1 ); - for( i = 0; i < len % 8; i++ ) - if( ( mask[len / 8] & ( 1 << ( 7 - i ) ) ) == 0 ) - return( -1 ); + for ( i = 0; i < len % 8; i++ ) + if ( ( mask[len / 8] & ( 1 << ( 7 - i ) ) ) == 0 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } /* @@ -2928,36 +2722,32 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) size_t frag_len, frag_off; size_t msg_len = ssl->in_hslen - 12; /* Without headers */ - if( ssl->handshake == NULL ) - { + if ( ssl->handshake == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "not supported outside handshake (for now)" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } /* * For first fragment, check size and allocate buffer */ - if( ssl->handshake->hs_msg == NULL ) - { + if ( ssl->handshake->hs_msg == NULL ) { size_t alloc_len; MBEDTLS_SSL_DEBUG_MSG( 2, ( "initialize reassembly, total length = %d", - msg_len ) ); + msg_len ) ); - if( ssl->in_hslen > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->in_hslen > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake message too large" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } /* The bitmask needs one bit per byte of message excluding header */ alloc_len = 12 + msg_len + msg_len / 8 + ( msg_len % 8 != 0 ); ssl->handshake->hs_msg = mbedtls_calloc( 1, alloc_len ); - if( ssl->handshake->hs_msg == NULL ) - { + if ( ssl->handshake->hs_msg == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc failed (%d bytes)", alloc_len ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } /* Prepare final header: copy msg_type, length and message_seq, @@ -2966,14 +2756,11 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) memset( ssl->handshake->hs_msg + 6, 0, 3 ); memcpy( ssl->handshake->hs_msg + 9, ssl->handshake->hs_msg + 1, 3 ); - } - else - { + } else { /* Make sure msg_type and length are consistent */ - if( memcmp( ssl->handshake->hs_msg, ssl->in_msg, 4 ) != 0 ) - { + if ( memcmp( ssl->handshake->hs_msg, ssl->in_msg, 4 ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "fragment header mismatch" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } } @@ -2985,27 +2772,25 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) */ frag_off = ( ssl->in_msg[6] << 16 ) | ( ssl->in_msg[7] << 8 ) | - ssl->in_msg[8]; + ssl->in_msg[8]; frag_len = ( ssl->in_msg[9] << 16 ) | ( ssl->in_msg[10] << 8 ) | - ssl->in_msg[11]; + ssl->in_msg[11]; - if( frag_off + frag_len > msg_len ) - { + if ( frag_off + frag_len > msg_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid fragment offset/len: %d + %d > %d", - frag_off, frag_len, msg_len ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + frag_off, frag_len, msg_len ) ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - if( frag_len + 12 > ssl->in_msglen ) - { + if ( frag_len + 12 > ssl->in_msglen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "invalid fragment length: %d + 12 > %d", - frag_len, ssl->in_msglen ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + frag_len, ssl->in_msglen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "adding fragment, offset = %d, length = %d", - frag_off, frag_len ) ); + frag_off, frag_len ) ); memcpy( msg + frag_off, ssl->in_msg + 12, frag_len ); ssl_bitmask_set( bitmask, frag_off, frag_len ); @@ -3014,27 +2799,24 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) * Do we have the complete message by now? * If yes, finalize it, else ask to read the next record. */ - if( ssl_bitmask_check( bitmask, msg_len ) != 0 ) - { + if ( ssl_bitmask_check( bitmask, msg_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "message is not complete yet" ) ); - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "handshake message completed" ) ); - if( frag_len + 12 < ssl->in_msglen ) - { + if ( frag_len + 12 < ssl->in_msglen ) { /* * We'got more handshake messages in the same record. * This case is not handled now because no know implementation does * that and it's hard to test, so we prefer to fail cleanly for now. */ MBEDTLS_SSL_DEBUG_MSG( 1, ( "last fragment not alone in its record" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } - if( ssl->in_left > ssl->next_record_offset ) - { + if ( ssl->in_left > ssl->next_record_offset ) { /* * We've got more data in the buffer after the current record, * that we don't want to overwrite. Move it before writing the @@ -3048,11 +2830,10 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) ssl->next_record_offset = new_remain - ssl->in_hdr; ssl->in_left = ssl->next_record_offset + remain_len; - if( ssl->in_left > MBEDTLS_SSL_BUFFER_LEN - - (size_t)( ssl->in_hdr - ssl->in_buf ) ) - { + if ( ssl->in_left > MBEDTLS_SSL_BUFFER_LEN - + (size_t)( ssl->in_hdr - ssl->in_buf ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "reassembled message too large for buffer" ) ); - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); } memmove( new_remain, cur_remain, remain_len ); @@ -3064,111 +2845,98 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) ssl->handshake->hs_msg = NULL; MBEDTLS_SSL_DEBUG_BUF( 3, "reassembled handshake message", - ssl->in_msg, ssl->in_hslen ); + ssl->in_msg, ssl->in_hslen ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_DTLS */ int mbedtls_ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ) { - if( ssl->in_msglen < mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( ssl->in_msglen < mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake message too short: %d", - ssl->in_msglen ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + ssl->in_msglen ) ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } ssl->in_hslen = mbedtls_ssl_hs_hdr_len( ssl ) + ( - ( ssl->in_msg[1] << 16 ) | - ( ssl->in_msg[2] << 8 ) | - ssl->in_msg[3] ); + ( ssl->in_msg[1] << 16 ) | + ( ssl->in_msg[2] << 8 ) | + ssl->in_msg[3] ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "handshake message: msglen =" - " %d, type = %d, hslen = %d", - ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) ); + " %d, type = %d, hslen = %d", + ssl->in_msglen, ssl->in_msg[0], ssl->in_hslen ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { int ret; unsigned int recv_msg_seq = ( ssl->in_msg[4] << 8 ) | ssl->in_msg[5]; /* ssl->handshake is NULL when receiving ClientHello for renego */ - if( ssl->handshake != NULL && - recv_msg_seq != ssl->handshake->in_msg_seq ) - { + if ( ssl->handshake != NULL && + recv_msg_seq != ssl->handshake->in_msg_seq ) { /* Retransmit only on last message from previous flight, to avoid * too many retransmissions. * Besides, No sane server ever retransmits HelloVerifyRequest */ - if( recv_msg_seq == ssl->handshake->in_flight_start_seq - 1 && - ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) - { + if ( recv_msg_seq == ssl->handshake->in_flight_start_seq - 1 && + ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_VERIFY_REQUEST ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received message from last flight, " - "message_seq = %d, start_of_flight = %d", - recv_msg_seq, - ssl->handshake->in_flight_start_seq ) ); + "message_seq = %d, start_of_flight = %d", + recv_msg_seq, + ssl->handshake->in_flight_start_seq ) ); - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_resend", ret ); - return( ret ); + return ( ret ); } - } - else - { + } else { MBEDTLS_SSL_DEBUG_MSG( 2, ( "dropping out-of-sequence message: " - "message_seq = %d, expected = %d", - recv_msg_seq, - ssl->handshake->in_msg_seq ) ); + "message_seq = %d, expected = %d", + recv_msg_seq, + ssl->handshake->in_msg_seq ) ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } /* Wait until message completion to increment in_msg_seq */ /* Reassemble if current message is fragmented or reassembly is * already in progress */ - if( ssl->in_msglen < ssl->in_hslen || - memcmp( ssl->in_msg + 6, "\0\0\0", 3 ) != 0 || - memcmp( ssl->in_msg + 9, ssl->in_msg + 1, 3 ) != 0 || - ( ssl->handshake != NULL && ssl->handshake->hs_msg != NULL ) ) - { + if ( ssl->in_msglen < ssl->in_hslen || + memcmp( ssl->in_msg + 6, "\0\0\0", 3 ) != 0 || + memcmp( ssl->in_msg + 9, ssl->in_msg + 1, 3 ) != 0 || + ( ssl->handshake != NULL && ssl->handshake->hs_msg != NULL ) ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "found fragmented DTLS handshake message" ) ); - if( ( ret = ssl_reassemble_dtls_handshake( ssl ) ) != 0 ) - { + if ( ( ret = ssl_reassemble_dtls_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_reassemble_dtls_handshake", ret ); - return( ret ); + return ( ret ); } } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ - /* With TLS we don't handle fragmentation (for now) */ - if( ssl->in_msglen < ssl->in_hslen ) - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "TLS handshake fragmentation not supported" ) ); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); - } + /* With TLS we don't handle fragmentation (for now) */ + if ( ssl->in_msglen < ssl->in_hslen ) { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "TLS handshake fragmentation not supported" ) ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + } - return( 0 ); + return ( 0 ); } void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl ) { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER && - ssl->handshake != NULL ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER && + ssl->handshake != NULL ) { ssl->handshake->update_checksum( ssl, ssl->in_msg, ssl->in_hslen ); } /* Handshake message is complete, increment counter */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL ) { ssl->handshake->in_msg_seq++; } #endif @@ -3193,12 +2961,12 @@ static void ssl_dtls_replay_reset( mbedtls_ssl_context *ssl ) static inline uint64_t ssl_load_six_bytes( unsigned char *buf ) { - return( ( (uint64_t) buf[0] << 40 ) | - ( (uint64_t) buf[1] << 32 ) | - ( (uint64_t) buf[2] << 24 ) | - ( (uint64_t) buf[3] << 16 ) | - ( (uint64_t) buf[4] << 8 ) | - ( (uint64_t) buf[5] ) ); + return ( ( (uint64_t) buf[0] << 40 ) | + ( (uint64_t) buf[1] << 32 ) | + ( (uint64_t) buf[2] << 24 ) | + ( (uint64_t) buf[3] << 16 ) | + ( (uint64_t) buf[4] << 8 ) | + ( (uint64_t) buf[5] ) ); } /* @@ -3209,21 +2977,21 @@ int mbedtls_ssl_dtls_replay_check( mbedtls_ssl_context *ssl ) uint64_t rec_seqnum = ssl_load_six_bytes( ssl->in_ctr + 2 ); uint64_t bit; - if( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) - return( 0 ); + if ( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) + return ( 0 ); - if( rec_seqnum > ssl->in_window_top ) - return( 0 ); + if ( rec_seqnum > ssl->in_window_top ) + return ( 0 ); bit = ssl->in_window_top - rec_seqnum; - if( bit >= 64 ) - return( -1 ); + if ( bit >= 64 ) + return ( -1 ); - if( ( ssl->in_window & ( (uint64_t) 1 << bit ) ) != 0 ) - return( -1 ); + if ( ( ssl->in_window & ( (uint64_t) 1 << bit ) ) != 0 ) + return ( -1 ); - return( 0 ); + return ( 0 ); } /* @@ -3233,30 +3001,26 @@ void mbedtls_ssl_dtls_replay_update( mbedtls_ssl_context *ssl ) { uint64_t rec_seqnum = ssl_load_six_bytes( ssl->in_ctr + 2 ); - if( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) + if ( ssl->conf->anti_replay == MBEDTLS_SSL_ANTI_REPLAY_DISABLED ) return; - if( rec_seqnum > ssl->in_window_top ) - { + if ( rec_seqnum > ssl->in_window_top ) { /* Update window_top and the contents of the window */ uint64_t shift = rec_seqnum - ssl->in_window_top; - if( shift >= 64 ) + if ( shift >= 64 ) ssl->in_window = 1; - else - { + else { ssl->in_window <<= shift; ssl->in_window |= 1; } ssl->in_window_top = rec_seqnum; - } - else - { + } else { /* Mark that number as seen in the current window */ uint64_t bit = ssl->in_window_top - rec_seqnum; - if( bit < 64 ) /* Always true, but be extra sure */ + if ( bit < 64 ) /* Always true, but be extra sure */ ssl->in_window |= (uint64_t) 1 << bit; } } @@ -3278,18 +3042,18 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ); * - otherwise return a specific error code */ static int ssl_check_dtls_clihlo_cookie( - mbedtls_ssl_cookie_write_t *f_cookie_write, - mbedtls_ssl_cookie_check_t *f_cookie_check, - void *p_cookie, - const unsigned char *cli_id, size_t cli_id_len, - const unsigned char *in, size_t in_len, - unsigned char *obuf, size_t buf_len, size_t *olen ) + mbedtls_ssl_cookie_write_t *f_cookie_write, + mbedtls_ssl_cookie_check_t *f_cookie_check, + void *p_cookie, + const unsigned char *cli_id, size_t cli_id_len, + const unsigned char *in, size_t in_len, + unsigned char *obuf, size_t buf_len, size_t *olen ) { size_t sid_len, cookie_len; unsigned char *p; - if( f_cookie_write == NULL || f_cookie_check == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( f_cookie_write == NULL || f_cookie_check == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* * Structure of ClientHello with record and handshake headers, @@ -3317,27 +3081,25 @@ static int ssl_check_dtls_clihlo_cookie( * * Minimum length is 61 bytes. */ - if( in_len < 61 || - in[0] != MBEDTLS_SSL_MSG_HANDSHAKE || - in[3] != 0 || in[4] != 0 || - in[19] != 0 || in[20] != 0 || in[21] != 0 ) - { - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( in_len < 61 || + in[0] != MBEDTLS_SSL_MSG_HANDSHAKE || + in[3] != 0 || in[4] != 0 || + in[19] != 0 || in[20] != 0 || in[21] != 0 ) { + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); } sid_len = in[59]; - if( sid_len > in_len - 61 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( sid_len > in_len - 61 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); cookie_len = in[60 + sid_len]; - if( cookie_len > in_len - 60 ) - return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); + if ( cookie_len > in_len - 60 ) + return ( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO ); - if( f_cookie_check( p_cookie, in + sid_len + 61, cookie_len, - cli_id, cli_id_len ) == 0 ) - { + if ( f_cookie_check( p_cookie, in + sid_len + 61, cookie_len, + cli_id, cli_id_len ) == 0 ) { /* Valid cookie */ - return( 0 ); + return ( 0 ); } /* @@ -3360,8 +3122,8 @@ static int ssl_check_dtls_clihlo_cookie( * * Minimum length is 28. */ - if( buf_len < 28 ) - return( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); + if ( buf_len < 28 ) + return ( MBEDTLS_ERR_SSL_BUFFER_TOO_SMALL ); /* Copy most fields and adapt others */ memcpy( obuf, in, 25 ); @@ -3371,10 +3133,9 @@ static int ssl_check_dtls_clihlo_cookie( /* Generate and write actual cookie */ p = obuf + 28; - if( f_cookie_write( p_cookie, - &p, obuf + buf_len, cli_id, cli_id_len ) != 0 ) - { - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + if ( f_cookie_write( p_cookie, + &p, obuf + buf_len, cli_id, cli_id_len ) != 0 ) { + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } *olen = p - obuf; @@ -3389,7 +3150,7 @@ static int ssl_check_dtls_clihlo_cookie( obuf[11] = (unsigned char)( ( *olen - 13 ) >> 8 ); obuf[12] = (unsigned char)( ( *olen - 13 ) ); - return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); } /* @@ -3417,38 +3178,35 @@ static int ssl_handle_possible_reconnect( mbedtls_ssl_context *ssl ) size_t len; ret = ssl_check_dtls_clihlo_cookie( - ssl->conf->f_cookie_write, - ssl->conf->f_cookie_check, - ssl->conf->p_cookie, - ssl->cli_id, ssl->cli_id_len, - ssl->in_buf, ssl->in_left, - ssl->out_buf, MBEDTLS_SSL_MAX_CONTENT_LEN, &len ); + ssl->conf->f_cookie_write, + ssl->conf->f_cookie_check, + ssl->conf->p_cookie, + ssl->cli_id, ssl->cli_id_len, + ssl->in_buf, ssl->in_left, + ssl->out_buf, MBEDTLS_SSL_MAX_CONTENT_LEN, &len ); MBEDTLS_SSL_DEBUG_RET( 2, "ssl_check_dtls_clihlo_cookie", ret ); - if( ret == MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ) - { + if ( ret == MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ) { /* Dont check write errors as we can't do anything here. * If the error is permanent we'll catch it later, * if it's not, then hopefully it'll work next time. */ (void) ssl->f_send( ssl->p_bio, ssl->out_buf, len ); - return( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); + return ( MBEDTLS_ERR_SSL_HELLO_VERIFY_REQUIRED ); } - if( ret == 0 ) - { + if ( ret == 0 ) { /* Got a valid cookie, partially reset context */ - if( ( ret = ssl_session_reset_int( ssl, 1 ) ) != 0 ) - { + if ( ( ret = ssl_session_reset_int( ssl, 1 ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "reset", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_CLIENT_RECONNECT ); + return ( MBEDTLS_ERR_SSL_CLIENT_RECONNECT ); } - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE && MBEDTLS_SSL_SRV_C */ @@ -3483,73 +3241,62 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) mbedtls_ssl_read_version( &major_ver, &minor_ver, ssl->conf->transport, ssl->in_hdr + 1 ); MBEDTLS_SSL_DEBUG_MSG( 3, ( "input record: msgtype = %d, " - "version = [%d:%d], msglen = %d", - ssl->in_msgtype, - major_ver, minor_ver, ssl->in_msglen ) ); + "version = [%d:%d], msglen = %d", + ssl->in_msgtype, + major_ver, minor_ver, ssl->in_msglen ) ); /* Check record type */ - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msgtype != MBEDTLS_SSL_MSG_ALERT && - ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && - ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msgtype != MBEDTLS_SSL_MSG_ALERT && + ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && + ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "unknown record type" ) ); - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_UNEXPECTED_MESSAGE ) ) != 0 ) { + return ( ret ); } - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } /* Check version */ - if( major_ver != ssl->major_ver ) - { + if ( major_ver != ssl->major_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "major version mismatch" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - if( minor_ver > ssl->conf->max_minor_ver ) - { + if ( minor_ver > ssl->conf->max_minor_ver ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "minor version mismatch" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } /* Check length against the size of our buffer */ - if( ssl->in_msglen > MBEDTLS_SSL_BUFFER_LEN - - (size_t)( ssl->in_msg - ssl->in_buf ) ) - { + if ( ssl->in_msglen > MBEDTLS_SSL_BUFFER_LEN + - (size_t)( ssl->in_msg - ssl->in_buf ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } /* Check length against bounds of the current transform and version */ - if( ssl->transform_in == NULL ) - { - if( ssl->in_msglen < 1 || - ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->transform_in == NULL ) { + if ( ssl->in_msglen < 1 || + ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } - } - else - { - if( ssl->in_msglen < ssl->transform_in->minlen ) - { + } else { + if ( ssl->in_msglen < ssl->transform_in->minlen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && - ssl->in_msglen > ssl->transform_in->minlen + MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && + ssl->in_msglen > ssl->transform_in->minlen + MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } #endif #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ @@ -3557,12 +3304,11 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) /* * TLS encrypted messages can have up to 256 bytes of padding */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 && - ssl->in_msglen > ssl->transform_in->minlen + - MBEDTLS_SSL_MAX_CONTENT_LEN + 256 ) - { + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 && + ssl->in_msglen > ssl->transform_in->minlen + + MBEDTLS_SSL_MAX_CONTENT_LEN + 256 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } #endif } @@ -3574,36 +3320,32 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) * version, length) are sane. */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { unsigned int rec_epoch = ( ssl->in_ctr[0] << 8 ) | ssl->in_ctr[1]; /* Drop unexpected ChangeCipherSpec messages */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && - ssl->state != MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC && - ssl->state != MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC && + ssl->state != MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC && + ssl->state != MBEDTLS_SSL_SERVER_CHANGE_CIPHER_SPEC ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "dropping unexpected ChangeCipherSpec" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } /* Drop unexpected ApplicationData records, * except at the beginning of renegotiations */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA && - ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA && + ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER #if defined(MBEDTLS_SSL_RENEGOTIATION) - && ! ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && - ssl->state == MBEDTLS_SSL_SERVER_HELLO ) + && ! ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS && + ssl->state == MBEDTLS_SSL_SERVER_HELLO ) #endif - ) - { + ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "dropping unexpected ApplicationData" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } /* Check epoch (and sequence number) with DTLS */ - if( rec_epoch != ssl->in_epoch ) - { + if ( rec_epoch != ssl->in_epoch ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "record from another epoch: " "expected %d, received %d", ssl->in_epoch, rec_epoch ) ); @@ -3615,35 +3357,32 @@ static int ssl_parse_record_header( mbedtls_ssl_context *ssl ) * have an active transform (possibly iv_len != 0), so use the * fact that the record header len is 13 instead. */ - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER && - rec_epoch == 0 && - ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_left > 13 && - ssl->in_buf[13] == MBEDTLS_SSL_HS_CLIENT_HELLO ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER && + rec_epoch == 0 && + ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_left > 13 && + ssl->in_buf[13] == MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "possible client reconnect " "from the same port" ) ); - return( ssl_handle_possible_reconnect( ssl ) ); - } - else + return ( ssl_handle_possible_reconnect( ssl ) ); + } else #endif /* MBEDTLS_SSL_DTLS_CLIENT_PORT_REUSE && MBEDTLS_SSL_SRV_C */ - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) /* Replay detection only works for the current epoch */ - if( rec_epoch == ssl->in_epoch && - mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) - { + if ( rec_epoch == ssl->in_epoch && + mbedtls_ssl_dtls_replay_check( ssl ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "replayed record" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ); } #endif } #endif /* MBEDTLS_SSL_PROTO_DTLS */ - return( 0 ); + return ( 0 ); } /* @@ -3654,62 +3393,54 @@ static int ssl_prepare_record_content( mbedtls_ssl_context *ssl ) int ret, done = 0; MBEDTLS_SSL_DEBUG_BUF( 4, "input record from network", - ssl->in_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ); + ssl->in_hdr, mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ); #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_read != NULL ) - { + if ( mbedtls_ssl_hw_record_read != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_read()" ) ); ret = mbedtls_ssl_hw_record_read( ssl ); - if( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) - { + if ( ret != 0 && ret != MBEDTLS_ERR_SSL_HW_ACCEL_FALLTHROUGH ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_read", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } - if( ret == 0 ) + if ( ret == 0 ) done = 1; } #endif /* MBEDTLS_SSL_HW_RECORD_ACCEL */ - if( !done && ssl->transform_in != NULL ) - { - if( ( ret = ssl_decrypt_buf( ssl ) ) != 0 ) - { + if ( !done && ssl->transform_in != NULL ) { + if ( ( ret = ssl_decrypt_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_decrypt_buf", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_BUF( 4, "input payload after decrypt", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); - if( ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { + if ( ssl->in_msglen > MBEDTLS_SSL_MAX_CONTENT_LEN ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad message length" ) ); - return( MBEDTLS_ERR_SSL_INVALID_RECORD ); + return ( MBEDTLS_ERR_SSL_INVALID_RECORD ); } } #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->transform_in != NULL && - ssl->session_in->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) - { - if( ( ret = ssl_decompress_buf( ssl ) ) != 0 ) - { + if ( ssl->transform_in != NULL && + ssl->session_in->compression == MBEDTLS_SSL_COMPRESS_DEFLATE ) { + if ( ( ret = ssl_decompress_buf( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_decompress_buf", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_ZLIB_SUPPORT */ #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { mbedtls_ssl_dtls_replay_update( ssl ); } #endif - return( 0 ); + return ( 0 ); } static void ssl_handshake_wrapup_free_hs_transform( mbedtls_ssl_context *ssl ); @@ -3729,38 +3460,34 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) do { - if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret ); - return( ret ); + return ( ret ); } ret = mbedtls_ssl_handle_message_type( ssl ); - } while( MBEDTLS_ERR_SSL_NON_FATAL == ret ); + } while ( MBEDTLS_ERR_SSL_NON_FATAL == ret ); - if( 0 != ret ) - { + if ( 0 != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { mbedtls_ssl_update_handshake_status( ssl ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read record" ) ); - return( 0 ); + return ( 0 ); } int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) { int ret; - if( ssl->in_hslen != 0 && ssl->in_hslen < ssl->in_msglen ) - { + if ( ssl->in_hslen != 0 && ssl->in_hslen < ssl->in_msglen ) { /* * Get next Handshake message in the current record */ @@ -3770,9 +3497,9 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) ssl->in_msglen ); MBEDTLS_SSL_DEBUG_BUF( 4, "remaining content in record", - ssl->in_msg, ssl->in_msglen ); + ssl->in_msg, ssl->in_msglen ); - return( 0 ); + return ( 0 ); } ssl->in_hslen = 0; @@ -3784,29 +3511,23 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) read_record_header: #endif - if( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } - if( ( ret = ssl_parse_record_header( ssl ) ) != 0 ) - { + if ( ( ret = ssl_parse_record_header( ssl ) ) != 0 ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ret != MBEDTLS_ERR_SSL_CLIENT_RECONNECT ) - { - if( ret == MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ret != MBEDTLS_ERR_SSL_CLIENT_RECONNECT ) { + if ( ret == MBEDTLS_ERR_SSL_UNEXPECTED_RECORD ) { /* Skip unexpected record (but not whole datagram) */ ssl->next_record_offset = ssl->in_msglen - + mbedtls_ssl_hdr_len( ssl ); + + mbedtls_ssl_hdr_len( ssl ); MBEDTLS_SSL_DEBUG_MSG( 1, ( "discarding unexpected record " "(header)" ) ); - } - else - { + } else { /* Skip invalid record and the rest of the datagram */ ssl->next_record_offset = 0; ssl->in_left = 0; @@ -3819,59 +3540,52 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) goto read_record_header; } #endif - return( ret ); + return ( ret ); } /* * Read and optionally decrypt the message contents */ - if( ( ret = mbedtls_ssl_fetch_input( ssl, - mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_fetch_input( ssl, + mbedtls_ssl_hdr_len( ssl ) + ssl->in_msglen ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); - return( ret ); + return ( ret ); } /* Done reading this record, get ready for the next one */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) ssl->next_record_offset = ssl->in_msglen + mbedtls_ssl_hdr_len( ssl ); else #endif ssl->in_left = 0; - if( ( ret = ssl_prepare_record_content( ssl ) ) != 0 ) - { + if ( ( ret = ssl_prepare_record_content( ssl ) ) != 0 ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { /* Silently discard invalid records */ - if( ret == MBEDTLS_ERR_SSL_INVALID_RECORD || - ret == MBEDTLS_ERR_SSL_INVALID_MAC ) - { + if ( ret == MBEDTLS_ERR_SSL_INVALID_RECORD || + ret == MBEDTLS_ERR_SSL_INVALID_MAC ) { /* Except when waiting for Finished as a bad mac here * probably means something went wrong in the handshake * (eg wrong psk used, mitm downgrade attempt, etc.) */ - if( ssl->state == MBEDTLS_SSL_CLIENT_FINISHED || - ssl->state == MBEDTLS_SSL_SERVER_FINISHED ) - { + if ( ssl->state == MBEDTLS_SSL_CLIENT_FINISHED || + ssl->state == MBEDTLS_SSL_SERVER_FINISHED ) { #if defined(MBEDTLS_SSL_ALL_ALERT_MESSAGES) - if( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) - { + if ( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) { mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); } #endif - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SSL_DTLS_BADMAC_LIMIT) - if( ssl->conf->badmac_limit != 0 && - ++ssl->badmac_seen >= ssl->conf->badmac_limit ) - { + if ( ssl->conf->badmac_limit != 0 && + ++ssl->badmac_seen >= ssl->conf->badmac_limit ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "too many records with bad MAC" ) ); - return( MBEDTLS_ERR_SSL_INVALID_MAC ); + return ( MBEDTLS_ERR_SSL_INVALID_MAC ); } #endif @@ -3879,21 +3593,19 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) goto read_record_header; } - return( ret ); - } - else + return ( ret ); + } else #endif { /* Error out (and send alert) on invalid records */ #if defined(MBEDTLS_SSL_ALL_ALERT_MESSAGES) - if( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) - { + if ( ret == MBEDTLS_ERR_SSL_INVALID_MAC ) { mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_BAD_RECORD_MAC ); } #endif - return( ret ); + return ( ret ); } } @@ -3913,31 +3625,26 @@ int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) * being mistaken for an ancient message in the current handshake. */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake != NULL && - ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake != NULL && + ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_FINISHED ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "received retransmit of last flight" ) ); - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_resend", ret ); - return( ret ); + return ( ret ); } - return( MBEDTLS_ERR_SSL_WANT_READ ); - } - else - { + return ( MBEDTLS_ERR_SSL_WANT_READ ); + } else { ssl_handshake_wrapup_free_hs_transform( ssl ); } } #endif - return( 0 ); + return ( 0 ); } int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) @@ -3947,55 +3654,48 @@ int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) /* * Handle particular types of records */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { - if( ( ret = mbedtls_ssl_prepare_handshake_record( ssl ) ) != 0 ) - { - return( ret ); + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { + if ( ( ret = mbedtls_ssl_prepare_handshake_record( ssl ) ) != 0 ) { + return ( ret ); } } - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "got an alert message, type: [%d:%d]", - ssl->in_msg[0], ssl->in_msg[1] ) ); + ssl->in_msg[0], ssl->in_msg[1] ) ); /* * Ignore non-fatal alerts, except close_notify and no_renegotiation */ - if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_FATAL ) - { + if ( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_FATAL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "is a fatal alert message (msg %d)", - ssl->in_msg[1] ) ); - return( MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE ); + ssl->in_msg[1] ) ); + return ( MBEDTLS_ERR_SSL_FATAL_ALERT_MESSAGE ); } - if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) - { + if ( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "is a close notify message" ) ); - return( MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ); + return ( MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY ); } #if defined(MBEDTLS_SSL_RENEGOTIATION_ENABLED) - if( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) - { + if ( ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "is a SSLv3 no_cert" ) ); /* Will be handled when trying to parse ServerHello */ - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_SSL_PROTO_SSL3) && defined(MBEDTLS_SSL_SRV_C) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && - ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 && + ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "is a SSLv3 no_cert" ) ); /* Will be handled in mbedtls_ssl_parse_certificate() */ - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_PROTO_SSL3 && MBEDTLS_SSL_SRV_C */ @@ -4003,31 +3703,30 @@ int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) return MBEDTLS_ERR_SSL_NON_FATAL; } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ) { int ret; - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_FATAL, - MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, - unsigned char level, - unsigned char message ) + unsigned char level, + unsigned char message ) { int ret; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> send alert message" ) ); @@ -4036,15 +3735,14 @@ int mbedtls_ssl_send_alert_message( mbedtls_ssl_context *ssl, ssl->out_msg[0] = level; ssl->out_msg[1] = message; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= send alert message" ) ); - return( 0 ); + return ( 0 ); } /* @@ -4063,18 +3761,17 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) @@ -4083,18 +3780,17 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } #else int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) @@ -4106,24 +3802,21 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - { - if( ssl->client_auth == 0 ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { + if ( ssl->client_auth == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip write certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -4131,9 +3824,8 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) * If using SSLv3 and got no cert, send an Alert message * (otherwise an empty Certificate message will be sent). */ - if( mbedtls_ssl_own_cert( ssl ) == NULL && - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( mbedtls_ssl_own_cert( ssl ) == NULL && + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { ssl->out_msglen = 2; ssl->out_msgtype = MBEDTLS_SSL_MSG_ALERT; ssl->out_msg[0] = MBEDTLS_SSL_ALERT_LEVEL_WARNING; @@ -4146,12 +3838,10 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) } #endif /* MBEDTLS_SSL_CLI_C */ #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - { - if( mbedtls_ssl_own_cert( ssl ) == NULL ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) { + if ( mbedtls_ssl_own_cert( ssl ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no certificate to send" ) ); - return( MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED ); + return ( MBEDTLS_ERR_SSL_CERTIFICATE_REQUIRED ); } } #endif @@ -4170,22 +3860,22 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) i = 7; crt = mbedtls_ssl_own_cert( ssl ); - while( crt != NULL ) - { + while ( crt != NULL ) { n = crt->raw.len; - if( n > MBEDTLS_SSL_MAX_CONTENT_LEN - 3 - i ) - { + if ( n > MBEDTLS_SSL_MAX_CONTENT_LEN - 3 - i ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "certificate too large, %d > %d", - i + 3 + n, MBEDTLS_SSL_MAX_CONTENT_LEN ) ); - return( MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE ); + i + 3 + n, MBEDTLS_SSL_MAX_CONTENT_LEN ) ); + return ( MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE ); } ssl->out_msg[i ] = (unsigned char)( n >> 16 ); ssl->out_msg[i + 1] = (unsigned char)( n >> 8 ); ssl->out_msg[i + 2] = (unsigned char)( n ); - i += 3; memcpy( ssl->out_msg + i, crt->raw.p, n ); - i += n; crt = crt->next; + i += 3; + memcpy( ssl->out_msg + i, crt->raw.p, n ); + i += n; + crt = crt->next; } ssl->out_msg[4] = (unsigned char)( ( i - 7 ) >> 16 ); @@ -4202,15 +3892,14 @@ int mbedtls_ssl_write_certificate( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write certificate" ) ); - return( ret ); + return ( ret ); } int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) @@ -4222,44 +3911,40 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse certificate" ) ); - if( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) - { + if ( ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_DHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECDHE_PSK || + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_ECJPAKE ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ciphersuite_info->key_exchange == MBEDTLS_KEY_EXCHANGE_RSA_PSK ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) + if ( ssl->handshake->sni_authmode != MBEDTLS_SSL_VERIFY_UNSET ) authmode = ssl->handshake->sni_authmode; #endif - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - authmode == MBEDTLS_SSL_VERIFY_NONE ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + authmode == MBEDTLS_SSL_VERIFY_NONE ) { ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_SKIP_VERIFY; MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= skip parse certificate" ) ); ssl->state++; - return( 0 ); + return ( 0 ); } #endif - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } ssl->state++; @@ -4269,59 +3954,53 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) /* * Check if the client sent an empty certificate */ - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( ssl->in_msglen == 2 && - ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT && - ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && - ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( ssl->in_msglen == 2 && + ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT && + ssl->in_msg[0] == MBEDTLS_SSL_ALERT_LEVEL_WARNING && + ssl->in_msg[1] == MBEDTLS_SSL_ALERT_MSG_NO_CERT ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "SSLv3 client has no certificate" ) ); ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_MISSING; - if( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) - return( 0 ); + if ( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) + return ( 0 ); else - return( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); } } #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) - { - if( ssl->in_hslen == 3 + mbedtls_ssl_hs_hdr_len( ssl ) && - ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && - ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE && - memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), "\0\0\0", 3 ) == 0 ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_0 ) { + if ( ssl->in_hslen == 3 + mbedtls_ssl_hs_hdr_len( ssl ) && + ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE && + ssl->in_msg[0] == MBEDTLS_SSL_HS_CERTIFICATE && + memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), "\0\0\0", 3 ) == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "TLSv1 client has no certificate" ) ); ssl->session_negotiate->verify_result = MBEDTLS_X509_BADCERT_MISSING; - if( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) - return( 0 ); + if ( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) + return ( 0 ); else - return( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_NO_CLIENT_CERTIFICATE ); } } #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || \ MBEDTLS_SSL_PROTO_TLS1_2 */ #endif /* MBEDTLS_SSL_SRV_C */ - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE || - ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 3 + 3 ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE || + ssl->in_hslen < mbedtls_ssl_hs_hdr_len( ssl ) + 3 + 3 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } i = mbedtls_ssl_hs_hdr_len( ssl ); @@ -4329,58 +4008,51 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) /* * Same message structure as in mbedtls_ssl_write_certificate() */ - n = ( ssl->in_msg[i+1] << 8 ) | ssl->in_msg[i+2]; + n = ( ssl->in_msg[i + 1] << 8 ) | ssl->in_msg[i + 2]; - if( ssl->in_msg[i] != 0 || - ssl->in_hslen != n + 3 + mbedtls_ssl_hs_hdr_len( ssl ) ) - { + if ( ssl->in_msg[i] != 0 || + ssl->in_hslen != n + 3 + mbedtls_ssl_hs_hdr_len( ssl ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } /* In case we tried to reuse a session but it failed */ - if( ssl->session_negotiate->peer_cert != NULL ) - { + if ( ssl->session_negotiate->peer_cert != NULL ) { mbedtls_x509_crt_free( ssl->session_negotiate->peer_cert ); mbedtls_free( ssl->session_negotiate->peer_cert ); } - if( ( ssl->session_negotiate->peer_cert = mbedtls_calloc( 1, - sizeof( mbedtls_x509_crt ) ) ) == NULL ) - { + if ( ( ssl->session_negotiate->peer_cert = mbedtls_calloc( 1, + sizeof( mbedtls_x509_crt ) ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", - sizeof( mbedtls_x509_crt ) ) ); - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + sizeof( mbedtls_x509_crt ) ) ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } mbedtls_x509_crt_init( ssl->session_negotiate->peer_cert ); i += 3; - while( i < ssl->in_hslen ) - { - if( ssl->in_msg[i] != 0 ) - { + while ( i < ssl->in_hslen ) { + if ( ssl->in_msg[i] != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } n = ( (unsigned int) ssl->in_msg[i + 1] << 8 ) | (unsigned int) ssl->in_msg[i + 2]; i += 3; - if( n < 128 || i + n > ssl->in_hslen ) - { + if ( n < 128 || i + n > ssl->in_hslen ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } ret = mbedtls_x509_crt_parse_der( ssl->session_negotiate->peer_cert, - ssl->in_msg + i, n ); - if( 0 != ret && ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + MBEDTLS_ERR_OID_NOT_FOUND ) != ret ) - { + ssl->in_msg + i, n ); + if ( 0 != ret && ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + MBEDTLS_ERR_OID_NOT_FOUND ) != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, " mbedtls_x509_crt_parse_der", ret ); - return( ret ); + return ( ret ); } i += n; @@ -4393,64 +4065,56 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) * avoid "triple handshake" attack: https://secure-resumption.com/ */ #if defined(MBEDTLS_SSL_RENEGOTIATION) && defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { - if( ssl->session->peer_cert == NULL ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { + if ( ssl->session->peer_cert == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "new server cert during renegotiation" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } - if( ssl->session->peer_cert->raw.len != - ssl->session_negotiate->peer_cert->raw.len || - memcmp( ssl->session->peer_cert->raw.p, - ssl->session_negotiate->peer_cert->raw.p, - ssl->session->peer_cert->raw.len ) != 0 ) - { + if ( ssl->session->peer_cert->raw.len != + ssl->session_negotiate->peer_cert->raw.len || + memcmp( ssl->session->peer_cert->raw.p, + ssl->session_negotiate->peer_cert->raw.p, + ssl->session->peer_cert->raw.len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "server cert changed during renegotiation" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE ); } } #endif /* MBEDTLS_SSL_RENEGOTIATION && MBEDTLS_SSL_CLI_C */ - if( authmode != MBEDTLS_SSL_VERIFY_NONE ) - { + if ( authmode != MBEDTLS_SSL_VERIFY_NONE ) { mbedtls_x509_crt *ca_chain; mbedtls_x509_crl *ca_crl; #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) - if( ssl->handshake->sni_ca_chain != NULL ) - { + if ( ssl->handshake->sni_ca_chain != NULL ) { ca_chain = ssl->handshake->sni_ca_chain; ca_crl = ssl->handshake->sni_ca_crl; - } - else + } else #endif { ca_chain = ssl->conf->ca_chain; ca_crl = ssl->conf->ca_crl; } - if( ca_chain == NULL ) - { + if ( ca_chain == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "got no CA chain" ) ); - return( MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED ); + return ( MBEDTLS_ERR_SSL_CA_CHAIN_REQUIRED ); } /* * Main check: verify certificate */ ret = mbedtls_x509_crt_verify_with_profile( - ssl->session_negotiate->peer_cert, - ca_chain, ca_crl, - ssl->conf->cert_profile, - ssl->hostname, - &ssl->session_negotiate->verify_result, - ssl->conf->f_vrfy, ssl->conf->p_vrfy ); - - if( ret != 0 ) - { + ssl->session_negotiate->peer_cert, + ca_chain, ca_crl, + ssl->conf->cert_profile, + ssl->hostname, + &ssl->session_negotiate->verify_result, + ssl->conf->f_vrfy, ssl->conf->p_vrfy ); + + if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "x509_verify_cert", ret ); } @@ -4463,33 +4127,31 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) const mbedtls_pk_context *pk = &ssl->session_negotiate->peer_cert->pk; /* If certificate uses an EC key, make sure the curve is OK */ - if( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECKEY ) && - mbedtls_ssl_check_curve( ssl, mbedtls_pk_ec( *pk )->grp.id ) != 0 ) - { + if ( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECKEY ) && + mbedtls_ssl_check_curve( ssl, mbedtls_pk_ec( *pk )->grp.id ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate (EC key curve)" ) ); - if( ret == 0 ) + if ( ret == 0 ) ret = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE; } } #endif /* MBEDTLS_ECP_C */ - if( mbedtls_ssl_check_cert_usage( ssl->session_negotiate->peer_cert, - ciphersuite_info, - ! ssl->conf->endpoint, - &ssl->session_negotiate->verify_result ) != 0 ) - { + if ( mbedtls_ssl_check_cert_usage( ssl->session_negotiate->peer_cert, + ciphersuite_info, + ! ssl->conf->endpoint, + &ssl->session_negotiate->verify_result ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad certificate (usage extensions)" ) ); - if( ret == 0 ) + if ( ret == 0 ) ret = MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE; } - if( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) + if ( authmode == MBEDTLS_SSL_VERIFY_OPTIONAL ) ret = 0; } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate" ) ); - return( ret ); + return ( ret ); } #endif /* !MBEDTLS_KEY_EXCHANGE_RSA_ENABLED !MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED @@ -4511,15 +4173,14 @@ int mbedtls_ssl_write_change_cipher_spec( mbedtls_ssl_context *ssl ) ssl->state++; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write change cipher spec" ) ); - return( 0 ); + return ( 0 ); } int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) @@ -4528,22 +4189,19 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> parse change cipher spec" ) ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_CHANGE_CIPHER_SPEC ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->in_msglen != 1 || ssl->in_msg[0] != 1 ) - { + if ( ssl->in_msglen != 1 || ssl->in_msg[0] != 1 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad change cipher spec message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC ); + return ( MBEDTLS_ERR_SSL_BAD_HS_CHANGE_CIPHER_SPEC ); } /* @@ -4555,41 +4213,34 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) ssl->session_in = ssl->session_negotiate; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { #if defined(MBEDTLS_SSL_DTLS_ANTI_REPLAY) ssl_dtls_replay_reset( ssl ); #endif /* Increment epoch */ - if( ++ssl->in_epoch == 0 ) - { + if ( ++ssl->in_epoch == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "DTLS epoch would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ - memset( ssl->in_ctr, 0, 8 ); + memset( ssl->in_ctr, 0, 8 ); /* * Set the in_msg pointer to the correct location based on IV length */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { ssl->in_msg = ssl->in_iv + ssl->transform_negotiate->ivlen - ssl->transform_negotiate->fixed_ivlen; - } - else + } else ssl->in_msg = ssl->in_iv; #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_activate != NULL ) - { - if( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_INBOUND ) ) != 0 ) - { + if ( mbedtls_ssl_hw_record_activate != NULL ) { + if ( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_INBOUND ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_activate", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif @@ -4598,43 +4249,43 @@ int mbedtls_ssl_parse_change_cipher_spec( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse change cipher spec" ) ); - return( 0 ); + return ( 0 ); } void mbedtls_ssl_optimize_checksum( mbedtls_ssl_context *ssl, - const mbedtls_ssl_ciphersuite_t *ciphersuite_info ) + const mbedtls_ssl_ciphersuite_t *ciphersuite_info ) { ((void) ciphersuite_info); #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - if( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( ssl->minor_ver < MBEDTLS_SSL_MINOR_VERSION_3 ) ssl->handshake->update_checksum = ssl_update_checksum_md5sha1; else #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA512_C) - if( ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) - ssl->handshake->update_checksum = ssl_update_checksum_sha384; - else + if ( ciphersuite_info->mac == MBEDTLS_MD_SHA384 ) + ssl->handshake->update_checksum = ssl_update_checksum_sha384; + else #endif #if defined(MBEDTLS_SHA256_C) - if( ciphersuite_info->mac != MBEDTLS_MD_SHA384 ) - ssl->handshake->update_checksum = ssl_update_checksum_sha256; - else + if ( ciphersuite_info->mac != MBEDTLS_MD_SHA384 ) + ssl->handshake->update_checksum = ssl_update_checksum_sha256; + else #endif #endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return; - } + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return; + } } void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - mbedtls_md5_starts( &ssl->handshake->fin_md5 ); + mbedtls_md5_starts( &ssl->handshake->fin_md5 ); mbedtls_sha1_starts( &ssl->handshake->fin_sha1 ); #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) @@ -4652,7 +4303,7 @@ static void ssl_update_checksum_start( mbedtls_ssl_context *ssl, { #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - mbedtls_md5_update( &ssl->handshake->fin_md5 , buf, len ); + mbedtls_md5_update( &ssl->handshake->fin_md5, buf, len ); mbedtls_sha1_update( &ssl->handshake->fin_sha1, buf, len ); #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) @@ -4668,9 +4319,9 @@ static void ssl_update_checksum_start( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) static void ssl_update_checksum_md5sha1( mbedtls_ssl_context *ssl, - const unsigned char *buf, size_t len ) + const unsigned char *buf, size_t len ) { - mbedtls_md5_update( &ssl->handshake->fin_md5 , buf, len ); + mbedtls_md5_update( &ssl->handshake->fin_md5, buf, len ); mbedtls_sha1_update( &ssl->handshake->fin_sha1, buf, len ); } #endif @@ -4695,7 +4346,7 @@ static void ssl_update_checksum_sha384( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_PROTO_SSL3) static void ssl_calc_finished_ssl( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { const char *sender; mbedtls_md5_context md5; @@ -4706,7 +4357,7 @@ static void ssl_calc_finished_ssl( unsigned char sha1sum[20]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished ssl" ) ); @@ -4728,16 +4379,16 @@ static void ssl_calc_finished_ssl( #if !defined(MBEDTLS_MD5_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); + md5.state, sizeof( md5.state ) ); #endif #if !defined(MBEDTLS_SHA1_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); + sha1.state, sizeof( sha1.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) ? "CLNT" - : "SRVR"; + : "SRVR"; memset( padbuf, 0x36, 48 ); @@ -4761,7 +4412,7 @@ static void ssl_calc_finished_ssl( mbedtls_sha1_starts( &sha1 ); mbedtls_sha1_update( &sha1, session->master, 48 ); - mbedtls_sha1_update( &sha1, padbuf , 40 ); + mbedtls_sha1_update( &sha1, padbuf, 40 ); mbedtls_sha1_update( &sha1, sha1sum, 20 ); mbedtls_sha1_finish( &sha1, buf + 16 ); @@ -4780,7 +4431,7 @@ static void ssl_calc_finished_ssl( #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) static void ssl_calc_finished_tls( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { int len = 12; const char *sender; @@ -4789,7 +4440,7 @@ static void ssl_calc_finished_tls( unsigned char padbuf[36]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> calc finished tls" ) ); @@ -4808,12 +4459,12 @@ static void ssl_calc_finished_tls( #if !defined(MBEDTLS_MD5_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished md5 state", (unsigned char *) - md5.state, sizeof( md5.state ) ); + md5.state, sizeof( md5.state ) ); #endif #if !defined(MBEDTLS_SHA1_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha1 state", (unsigned char *) - sha1.state, sizeof( sha1.state ) ); + sha1.state, sizeof( sha1.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) @@ -4840,7 +4491,7 @@ static void ssl_calc_finished_tls( #if defined(MBEDTLS_SSL_PROTO_TLS1_2) #if defined(MBEDTLS_SHA256_C) static void ssl_calc_finished_tls_sha256( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { int len = 12; const char *sender; @@ -4848,7 +4499,7 @@ static void ssl_calc_finished_tls_sha256( unsigned char padbuf[32]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; mbedtls_sha256_init( &sha256 ); @@ -4865,7 +4516,7 @@ static void ssl_calc_finished_tls_sha256( #if !defined(MBEDTLS_SHA256_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha2 state", (unsigned char *) - sha256.state, sizeof( sha256.state ) ); + sha256.state, sizeof( sha256.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) @@ -4889,7 +4540,7 @@ static void ssl_calc_finished_tls_sha256( #if defined(MBEDTLS_SHA512_C) static void ssl_calc_finished_tls_sha384( - mbedtls_ssl_context *ssl, unsigned char *buf, int from ) + mbedtls_ssl_context *ssl, unsigned char *buf, int from ) { int len = 12; const char *sender; @@ -4897,7 +4548,7 @@ static void ssl_calc_finished_tls_sha384( unsigned char padbuf[48]; mbedtls_ssl_session *session = ssl->session_negotiate; - if( !session ) + if ( !session ) session = ssl->session; mbedtls_sha512_init( &sha512 ); @@ -4914,7 +4565,7 @@ static void ssl_calc_finished_tls_sha384( #if !defined(MBEDTLS_SHA512_ALT) MBEDTLS_SSL_DEBUG_BUF( 4, "finished sha512 state", (unsigned char *) - sha512.state, sizeof( sha512.state ) ); + sha512.state, sizeof( sha512.state ) ); #endif sender = ( from == MBEDTLS_SSL_IS_CLIENT ) @@ -4951,8 +4602,7 @@ static void ssl_handshake_wrapup_free_hs_transform( mbedtls_ssl_context *ssl ) /* * Free the previous transform and swith in the current one */ - if( ssl->transform ) - { + if ( ssl->transform ) { mbedtls_ssl_transform_free( ssl->transform ); mbedtls_free( ssl->transform ); } @@ -4969,8 +4619,7 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "=> handshake wrapup" ) ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { + if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_DONE; ssl->renego_records_seen = 0; } @@ -4979,12 +4628,11 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) /* * Free the previous session and switch in the current one */ - if( ssl->session ) - { + if ( ssl->session ) { #if defined(MBEDTLS_SSL_ENCRYPT_THEN_MAC) /* RFC 7366 3.1: keep the EtM state */ ssl->session_negotiate->encrypt_then_mac = - ssl->session->encrypt_then_mac; + ssl->session->encrypt_then_mac; #endif mbedtls_ssl_session_free( ssl->session ); @@ -4996,26 +4644,23 @@ void mbedtls_ssl_handshake_wrapup( mbedtls_ssl_context *ssl ) /* * Add cache entry */ - if( ssl->conf->f_set_cache != NULL && - ssl->session->id_len != 0 && - resume == 0 ) - { - if( ssl->conf->f_set_cache( ssl->conf->p_cache, ssl->session ) != 0 ) + if ( ssl->conf->f_set_cache != NULL && + ssl->session->id_len != 0 && + resume == 0 ) { + if ( ssl->conf->f_set_cache( ssl->conf->p_cache, ssl->session ) != 0 ) MBEDTLS_SSL_DEBUG_MSG( 1, ( "cache did not store session" ) ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->handshake->flight != NULL ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->handshake->flight != NULL ) { /* Cancel handshake timer */ ssl_set_timer( ssl, 0 ); /* Keep last flight around in case we need to resend it: * we need the handshake and transform structures for that */ MBEDTLS_SSL_DEBUG_MSG( 3, ( "skip freeing handshake and transform" ) ); - } - else + } else #endif ssl_handshake_wrapup_free_hs_transform( ssl ); @@ -5033,12 +4678,10 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) /* * Set the out_msg pointer to the correct location based on IV length */ - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) - { + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_2 ) { ssl->out_msg = ssl->out_iv + ssl->transform_negotiate->ivlen - ssl->transform_negotiate->fixed_ivlen; - } - else + } else ssl->out_msg = ssl->out_iv; ssl->handshake->calc_finished( ssl, ssl->out_msg + 4, ssl->conf->endpoint ); @@ -5064,18 +4707,16 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) * In case of session resuming, invert the client and server * ChangeCipherSpec messages order. */ - if( ssl->handshake->resume != 0 ) - { + if ( ssl->handshake->resume != 0 ) { #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; #endif #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ssl->state = MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC; #endif - } - else + } else ssl->state++; /* @@ -5085,8 +4726,7 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 3, ( "switching to new transform spec for outbound data" ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { unsigned char i; /* Remember current epoch settings for resending */ @@ -5097,49 +4737,44 @@ int mbedtls_ssl_write_finished( mbedtls_ssl_context *ssl ) memset( ssl->out_ctr + 2, 0, 6 ); /* Increment epoch */ - for( i = 2; i > 0; i-- ) - if( ++ssl->out_ctr[i - 1] != 0 ) + for ( i = 2; i > 0; i-- ) + if ( ++ssl->out_ctr[i - 1] != 0 ) break; /* The loop goes to its end iff the counter is wrapping */ - if( i == 0 ) - { + if ( i == 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "DTLS epoch would wrap" ) ); - return( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); + return ( MBEDTLS_ERR_SSL_COUNTER_WRAPPING ); } - } - else + } else #endif /* MBEDTLS_SSL_PROTO_DTLS */ - memset( ssl->out_ctr, 0, 8 ); + memset( ssl->out_ctr, 0, 8 ); ssl->transform_out = ssl->transform_negotiate; ssl->session_out = ssl->session_negotiate; #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_activate != NULL ) - { - if( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) - { + if ( mbedtls_ssl_hw_record_activate != NULL ) { + if ( ( ret = mbedtls_ssl_hw_record_activate( ssl, MBEDTLS_SSL_CHANNEL_OUTBOUND ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_activate", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_send_flight_completed( ssl ); #endif - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write finished" ) ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_PROTO_SSL3) @@ -5158,38 +4793,34 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) ssl->handshake->calc_finished( ssl, buf, ssl->conf->endpoint ^ 1 ); - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } /* There is currently no ciphersuite using another length with TLS 1.2 */ #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) hash_len = 36; else #endif hash_len = 12; - if( ssl->in_msg[0] != MBEDTLS_SSL_HS_FINISHED || - ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + hash_len ) - { + if ( ssl->in_msg[0] != MBEDTLS_SSL_HS_FINISHED || + ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) + hash_len ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); + return ( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); } - if( mbedtls_ssl_safer_memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), - buf, hash_len ) != 0 ) - { + if ( mbedtls_ssl_safer_memcmp( ssl->in_msg + mbedtls_ssl_hs_hdr_len( ssl ), + buf, hash_len ) != 0 ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad finished message" ) ); - return( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); + return ( MBEDTLS_ERR_SSL_BAD_HS_FINISHED ); } #if defined(MBEDTLS_SSL_RENEGOTIATION) @@ -5197,28 +4828,26 @@ int mbedtls_ssl_parse_finished( mbedtls_ssl_context *ssl ) memcpy( ssl->peer_verify_data, buf, hash_len ); #endif - if( ssl->handshake->resume != 0 ) - { + if ( ssl->handshake->resume != 0 ) { #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->state = MBEDTLS_SSL_CLIENT_CHANGE_CIPHER_SPEC; #endif #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ssl->state = MBEDTLS_SSL_HANDSHAKE_WRAPUP; #endif - } - else + } else ssl->state++; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) mbedtls_ssl_recv_flight_completed( ssl ); #endif MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse finished" ) ); - return( 0 ); + return ( 0 ); } static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) @@ -5227,9 +4856,9 @@ static void ssl_handshake_params_init( mbedtls_ssl_handshake_params *handshake ) #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_1) - mbedtls_md5_init( &handshake->fin_md5 ); + mbedtls_md5_init( &handshake->fin_md5 ); mbedtls_sha1_init( &handshake->fin_sha1 ); - mbedtls_md5_starts( &handshake->fin_md5 ); + mbedtls_md5_starts( &handshake->fin_md5 ); mbedtls_sha1_starts( &handshake->fin_sha1 ); #endif #if defined(MBEDTLS_SSL_PROTO_TLS1_2) @@ -5284,37 +4913,33 @@ void mbedtls_ssl_session_init( mbedtls_ssl_session *session ) static int ssl_handshake_init( mbedtls_ssl_context *ssl ) { /* Clear old handshake information if present */ - if( ssl->transform_negotiate ) + if ( ssl->transform_negotiate ) mbedtls_ssl_transform_free( ssl->transform_negotiate ); - if( ssl->session_negotiate ) + if ( ssl->session_negotiate ) mbedtls_ssl_session_free( ssl->session_negotiate ); - if( ssl->handshake ) + if ( ssl->handshake ) mbedtls_ssl_handshake_free( ssl->handshake ); /* * Either the pointers are now NULL or cleared properly and can be freed. * Now allocate missing structures. */ - if( ssl->transform_negotiate == NULL ) - { + if ( ssl->transform_negotiate == NULL ) { ssl->transform_negotiate = mbedtls_calloc( 1, sizeof(mbedtls_ssl_transform) ); } - if( ssl->session_negotiate == NULL ) - { + if ( ssl->session_negotiate == NULL ) { ssl->session_negotiate = mbedtls_calloc( 1, sizeof(mbedtls_ssl_session) ); } - if( ssl->handshake == NULL ) - { + if ( ssl->handshake == NULL ) { ssl->handshake = mbedtls_calloc( 1, sizeof(mbedtls_ssl_handshake_params) ); } /* All pointers should exist and can be directly freed without issue */ - if( ssl->handshake == NULL || - ssl->transform_negotiate == NULL || - ssl->session_negotiate == NULL ) - { + if ( ssl->handshake == NULL || + ssl->transform_negotiate == NULL || + ssl->session_negotiate == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc() of ssl sub-contexts failed" ) ); mbedtls_free( ssl->handshake ); @@ -5325,7 +4950,7 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) ssl->transform_negotiate = NULL; ssl->session_negotiate = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } /* Initialize structures */ @@ -5334,11 +4959,10 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) ssl_handshake_params_init( ssl->handshake ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ssl->handshake->alt_transform_out = ssl->transform_out; - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_PREPARING; else ssl->handshake->retransmit_state = MBEDTLS_SSL_RETRANS_WAITING; @@ -5347,14 +4971,14 @@ static int ssl_handshake_init( mbedtls_ssl_context *ssl ) } #endif - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) /* Dummy cookie callbacks for defaults */ static int ssl_cookie_write_dummy( void *ctx, - unsigned char **p, unsigned char *end, - const unsigned char *cli_id, size_t cli_id_len ) + unsigned char **p, unsigned char *end, + const unsigned char *cli_id, size_t cli_id_len ) { ((void) ctx); ((void) p); @@ -5362,12 +4986,12 @@ static int ssl_cookie_write_dummy( void *ctx, ((void) cli_id); ((void) cli_id_len); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } static int ssl_cookie_check_dummy( void *ctx, - const unsigned char *cookie, size_t cookie_len, - const unsigned char *cli_id, size_t cli_id_len ) + const unsigned char *cookie, size_t cookie_len, + const unsigned char *cli_id, size_t cli_id_len ) { ((void) ctx); ((void) cookie); @@ -5375,7 +4999,7 @@ static int ssl_cookie_check_dummy( void *ctx, ((void) cli_id); ((void) cli_id_len); - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } #endif /* MBEDTLS_SSL_DTLS_HELLO_VERIFY && MBEDTLS_SSL_SRV_C */ @@ -5401,18 +5025,16 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, /* * Prepare base structures */ - if( ( ssl-> in_buf = mbedtls_calloc( 1, len ) ) == NULL || - ( ssl->out_buf = mbedtls_calloc( 1, len ) ) == NULL ) - { + if ( ( ssl-> in_buf = mbedtls_calloc( 1, len ) ) == NULL || + ( ssl->out_buf = mbedtls_calloc( 1, len ) ) == NULL ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "alloc(%d bytes) failed", len ) ); mbedtls_free( ssl->in_buf ); ssl->in_buf = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { ssl->out_hdr = ssl->out_buf; ssl->out_ctr = ssl->out_buf + 3; ssl->out_len = ssl->out_buf + 11; @@ -5424,8 +5046,7 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, ssl->in_len = ssl->in_buf + 11; ssl->in_iv = ssl->in_buf + 13; ssl->in_msg = ssl->in_buf + 13; - } - else + } else #endif { ssl->out_ctr = ssl->out_buf; @@ -5441,10 +5062,10 @@ int mbedtls_ssl_setup( mbedtls_ssl_context *ssl, ssl->in_msg = ssl->in_buf + 13; } - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_handshake_init( ssl ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -5478,7 +5099,7 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) ssl->in_msg = ssl->in_buf + 13; ssl->in_msgtype = 0; ssl->in_msglen = 0; - if( partial == 0 ) + if ( partial == 0 ) ssl->in_left = 0; #if defined(MBEDTLS_SSL_PROTO_DTLS) ssl->next_record_offset = 0; @@ -5497,7 +5118,7 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) ssl->out_msglen = 0; ssl->out_left = 0; #if defined(MBEDTLS_SSL_CBC_RECORD_SPLITTING) - if( ssl->split_done != MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED ) + if ( ssl->split_done != MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED ) ssl->split_done = 0; #endif @@ -5505,30 +5126,26 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) ssl->transform_out = NULL; memset( ssl->out_buf, 0, MBEDTLS_SSL_BUFFER_LEN ); - if( partial == 0 ) + if ( partial == 0 ) memset( ssl->in_buf, 0, MBEDTLS_SSL_BUFFER_LEN ); #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_reset != NULL ) - { + if ( mbedtls_ssl_hw_record_reset != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_reset()" ) ); - if( ( ret = mbedtls_ssl_hw_record_reset( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_hw_record_reset( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_hw_record_reset", ret ); - return( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); + return ( MBEDTLS_ERR_SSL_HW_ACCEL_FAILED ); } } #endif - if( ssl->transform ) - { + if ( ssl->transform ) { mbedtls_ssl_transform_free( ssl->transform ); mbedtls_free( ssl->transform ); ssl->transform = NULL; } - if( ssl->session ) - { + if ( ssl->session ) { mbedtls_ssl_session_free( ssl->session ); mbedtls_free( ssl->session ); ssl->session = NULL; @@ -5539,18 +5156,17 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) #endif #if defined(MBEDTLS_SSL_DTLS_HELLO_VERIFY) && defined(MBEDTLS_SSL_SRV_C) - if( partial == 0 ) - { + if ( partial == 0 ) { mbedtls_free( ssl->cli_id ); ssl->cli_id = NULL; ssl->cli_id_len = 0; } #endif - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_handshake_init( ssl ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } /* @@ -5559,7 +5175,7 @@ static int ssl_session_reset_int( mbedtls_ssl_context *ssl, int partial ) */ int mbedtls_ssl_session_reset( mbedtls_ssl_context *ssl ) { - return( ssl_session_reset_int( ssl, 0 ) ); + return ( ssl_session_reset_int( ssl, 0 ) ); } /* @@ -5604,8 +5220,8 @@ void mbedtls_ssl_conf_authmode( mbedtls_ssl_config *conf, int authmode ) #if defined(MBEDTLS_X509_CRT_PARSE_C) void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { conf->f_vrfy = f_vrfy; conf->p_vrfy = p_vrfy; @@ -5613,26 +5229,26 @@ void mbedtls_ssl_conf_verify( mbedtls_ssl_config *conf, #endif /* MBEDTLS_X509_CRT_PARSE_C */ void mbedtls_ssl_conf_rng( mbedtls_ssl_config *conf, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { conf->f_rng = f_rng; conf->p_rng = p_rng; } void mbedtls_ssl_conf_dbg( mbedtls_ssl_config *conf, - void (*f_dbg)(void *, int, const char *, int, const char *), - void *p_dbg ) + void (*f_dbg)(void *, int, const char *, int, const char *), + void *p_dbg ) { conf->f_dbg = f_dbg; conf->p_dbg = p_dbg; } void mbedtls_ssl_set_bio( mbedtls_ssl_context *ssl, - void *p_bio, - mbedtls_ssl_send_t *f_send, - mbedtls_ssl_recv_t *f_recv, - mbedtls_ssl_recv_timeout_t *f_recv_timeout ) + void *p_bio, + mbedtls_ssl_send_t *f_send, + mbedtls_ssl_recv_t *f_recv, + mbedtls_ssl_recv_timeout_t *f_recv_timeout ) { ssl->p_bio = p_bio; ssl->f_send = f_send; @@ -5660,9 +5276,9 @@ void mbedtls_ssl_set_timer_cb( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_SRV_C) void mbedtls_ssl_conf_session_cache( mbedtls_ssl_config *conf, - void *p_cache, - int (*f_get_cache)(void *, mbedtls_ssl_session *), - int (*f_set_cache)(void *, const mbedtls_ssl_session *) ) + void *p_cache, + int (*f_get_cache)(void *, mbedtls_ssl_session *), + int (*f_set_cache)(void *, const mbedtls_ssl_session *) ) { conf->p_cache = p_cache; conf->f_get_cache = f_get_cache; @@ -5675,25 +5291,24 @@ int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session { int ret; - if( ssl == NULL || - session == NULL || - ssl->session_negotiate == NULL || - ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || + session == NULL || + ssl->session_negotiate == NULL || + ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( ( ret = ssl_session_copy( ssl->session_negotiate, session ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_session_copy( ssl->session_negotiate, session ) ) != 0 ) + return ( ret ); ssl->handshake->resume = 1; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_CLI_C */ void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, - const int *ciphersuites ) + const int *ciphersuites ) { conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = ciphersuites; conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = ciphersuites; @@ -5702,13 +5317,13 @@ void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf, } void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf, - const int *ciphersuites, - int major, int minor ) + const int *ciphersuites, + int major, int minor ) { - if( major != MBEDTLS_SSL_MAJOR_VERSION_3 ) + if ( major != MBEDTLS_SSL_MAJOR_VERSION_3 ) return; - if( minor < MBEDTLS_SSL_MINOR_VERSION_0 || minor > MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( minor < MBEDTLS_SSL_MINOR_VERSION_0 || minor > MBEDTLS_SSL_MINOR_VERSION_3 ) return; conf->ciphersuite_list[minor] = ciphersuites; @@ -5729,39 +5344,36 @@ static int ssl_append_key_cert( mbedtls_ssl_key_cert **head, mbedtls_ssl_key_cert *new; new = mbedtls_calloc( 1, sizeof( mbedtls_ssl_key_cert ) ); - if( new == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( new == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); new->cert = cert; new->key = key; new->next = NULL; /* Update head is the list was null, else add to the end */ - if( *head == NULL ) - { + if ( *head == NULL ) { *head = new; - } - else - { + } else { mbedtls_ssl_key_cert *cur = *head; - while( cur->next != NULL ) + while ( cur->next != NULL ) cur = cur->next; cur->next = new; } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_conf_own_cert( mbedtls_ssl_config *conf, - mbedtls_x509_crt *own_cert, - mbedtls_pk_context *pk_key ) + mbedtls_x509_crt *own_cert, + mbedtls_pk_context *pk_key ) { - return( ssl_append_key_cert( &conf->key_cert, own_cert, pk_key ) ); + return ( ssl_append_key_cert( &conf->key_cert, own_cert, pk_key ) ); } void mbedtls_ssl_conf_ca_chain( mbedtls_ssl_config *conf, - mbedtls_x509_crt *ca_chain, - mbedtls_x509_crl *ca_crl ) + mbedtls_x509_crt *ca_chain, + mbedtls_x509_crl *ca_crl ) { conf->ca_chain = ca_chain; conf->ca_crl = ca_crl; @@ -5773,8 +5385,8 @@ int mbedtls_ssl_set_hs_own_cert( mbedtls_ssl_context *ssl, mbedtls_x509_crt *own_cert, mbedtls_pk_context *pk_key ) { - return( ssl_append_key_cert( &ssl->handshake->sni_key_cert, - own_cert, pk_key ) ); + return ( ssl_append_key_cert( &ssl->handshake->sni_key_cert, + own_cert, pk_key ) ); } void mbedtls_ssl_set_hs_ca_chain( mbedtls_ssl_context *ssl, @@ -5797,61 +5409,58 @@ void mbedtls_ssl_set_hs_authmode( mbedtls_ssl_context *ssl, * Set EC J-PAKE password for current handshake */ int mbedtls_ssl_set_hs_ecjpake_password( mbedtls_ssl_context *ssl, - const unsigned char *pw, - size_t pw_len ) + const unsigned char *pw, + size_t pw_len ) { mbedtls_ecjpake_role role; - if( ssl->handshake == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->handshake == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) role = MBEDTLS_ECJPAKE_SERVER; else role = MBEDTLS_ECJPAKE_CLIENT; - return( mbedtls_ecjpake_setup( &ssl->handshake->ecjpake_ctx, - role, - MBEDTLS_MD_SHA256, - MBEDTLS_ECP_DP_SECP256R1, - pw, pw_len ) ); + return ( mbedtls_ecjpake_setup( &ssl->handshake->ecjpake_ctx, + role, + MBEDTLS_MD_SHA256, + MBEDTLS_ECP_DP_SECP256R1, + pw, pw_len ) ); } #endif /* MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED */ #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, - const unsigned char *psk, size_t psk_len, - const unsigned char *psk_identity, size_t psk_identity_len ) + const unsigned char *psk, size_t psk_len, + const unsigned char *psk_identity, size_t psk_identity_len ) { - if( psk == NULL || psk_identity == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk == NULL || psk_identity == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( psk_len > MBEDTLS_PSK_MAX_LEN ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk_len > MBEDTLS_PSK_MAX_LEN ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); /* Identity len will be encoded on two bytes */ - if( ( psk_identity_len >> 16 ) != 0 || - psk_identity_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ( psk_identity_len >> 16 ) != 0 || + psk_identity_len > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - if( conf->psk != NULL || conf->psk_identity != NULL ) - { + if ( conf->psk != NULL || conf->psk_identity != NULL ) { mbedtls_free( conf->psk ); mbedtls_free( conf->psk_identity ); conf->psk = NULL; conf->psk_identity = NULL; } - if( ( conf->psk = mbedtls_calloc( 1, psk_len ) ) == NULL || - ( conf->psk_identity = mbedtls_calloc( 1, psk_identity_len ) ) == NULL ) - { + if ( ( conf->psk = mbedtls_calloc( 1, psk_len ) ) == NULL || + ( conf->psk_identity = mbedtls_calloc( 1, psk_identity_len ) ) == NULL ) { mbedtls_free( conf->psk ); mbedtls_free( conf->psk_identity ); conf->psk = NULL; conf->psk_identity = NULL; - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); } conf->psk_len = psk_len; @@ -5860,34 +5469,34 @@ int mbedtls_ssl_conf_psk( mbedtls_ssl_config *conf, memcpy( conf->psk, psk, conf->psk_len ); memcpy( conf->psk_identity, psk_identity, conf->psk_identity_len ); - return( 0 ); + return ( 0 ); } int mbedtls_ssl_set_hs_psk( mbedtls_ssl_context *ssl, const unsigned char *psk, size_t psk_len ) { - if( psk == NULL || ssl->handshake == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk == NULL || ssl->handshake == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( psk_len > MBEDTLS_PSK_MAX_LEN ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( psk_len > MBEDTLS_PSK_MAX_LEN ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ssl->handshake->psk != NULL ) + if ( ssl->handshake->psk != NULL ) mbedtls_free( ssl->handshake->psk ); - if( ( ssl->handshake->psk = mbedtls_calloc( 1, psk_len ) ) == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ( ssl->handshake->psk = mbedtls_calloc( 1, psk_len ) ) == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); ssl->handshake->psk_len = psk_len; memcpy( ssl->handshake->psk, psk, ssl->handshake->psk_len ); - return( 0 ); + return ( 0 ); } void mbedtls_ssl_conf_psk_cb( mbedtls_ssl_config *conf, - int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, - size_t), - void *p_psk ) + int (*f_psk)(void *, mbedtls_ssl_context *, const unsigned char *, + size_t), + void *p_psk ) { conf->f_psk = f_psk; conf->p_psk = p_psk; @@ -5899,30 +5508,28 @@ int mbedtls_ssl_conf_dh_param( mbedtls_ssl_config *conf, const char *dhm_P, cons { int ret; - if( ( ret = mbedtls_mpi_read_string( &conf->dhm_P, 16, dhm_P ) ) != 0 || - ( ret = mbedtls_mpi_read_string( &conf->dhm_G, 16, dhm_G ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_read_string( &conf->dhm_P, 16, dhm_P ) ) != 0 || + ( ret = mbedtls_mpi_read_string( &conf->dhm_G, 16, dhm_G ) ) != 0 ) { mbedtls_mpi_free( &conf->dhm_P ); mbedtls_mpi_free( &conf->dhm_G ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } int mbedtls_ssl_conf_dh_param_ctx( mbedtls_ssl_config *conf, mbedtls_dhm_context *dhm_ctx ) { int ret; - if( ( ret = mbedtls_mpi_copy( &conf->dhm_P, &dhm_ctx->P ) ) != 0 || - ( ret = mbedtls_mpi_copy( &conf->dhm_G, &dhm_ctx->G ) ) != 0 ) - { + if ( ( ret = mbedtls_mpi_copy( &conf->dhm_P, &dhm_ctx->P ) ) != 0 || + ( ret = mbedtls_mpi_copy( &conf->dhm_G, &dhm_ctx->G ) ) != 0 ) { mbedtls_mpi_free( &conf->dhm_P ); mbedtls_mpi_free( &conf->dhm_G ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_DHM_C && MBEDTLS_SSL_SRV_C */ @@ -5953,7 +5560,7 @@ void mbedtls_ssl_conf_sig_hashes( mbedtls_ssl_config *conf, * Set the allowed elliptic curves */ void mbedtls_ssl_conf_curves( mbedtls_ssl_config *conf, - const mbedtls_ecp_group_id *curve_list ) + const mbedtls_ecp_group_id *curve_list ) { conf->curve_list = curve_list; } @@ -5964,35 +5571,35 @@ int mbedtls_ssl_set_hostname( mbedtls_ssl_context *ssl, const char *hostname ) { size_t hostname_len; - if( hostname == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( hostname == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); hostname_len = strlen( hostname ); - if( hostname_len + 1 == 0 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( hostname_len + 1 == 0 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( hostname_len > MBEDTLS_SSL_MAX_HOST_NAME_LEN ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( hostname_len > MBEDTLS_SSL_MAX_HOST_NAME_LEN ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); ssl->hostname = mbedtls_calloc( 1, hostname_len + 1 ); - if( ssl->hostname == NULL ) - return( MBEDTLS_ERR_SSL_ALLOC_FAILED ); + if ( ssl->hostname == NULL ) + return ( MBEDTLS_ERR_SSL_ALLOC_FAILED ); memcpy( ssl->hostname, hostname, hostname_len ); ssl->hostname[hostname_len] = '\0'; - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_SSL_SERVER_NAME_INDICATION) void mbedtls_ssl_conf_sni( mbedtls_ssl_config *conf, - int (*f_sni)(void *, mbedtls_ssl_context *, - const unsigned char *, size_t), - void *p_sni ) + int (*f_sni)(void *, mbedtls_ssl_context *, + const unsigned char *, size_t), + void *p_sni ) { conf->f_sni = f_sni; conf->p_sni = p_sni; @@ -6010,23 +5617,22 @@ int mbedtls_ssl_conf_alpn_protocols( mbedtls_ssl_config *conf, const char **prot * truncated". Check lengths now rather than later. */ tot_len = 0; - for( p = protos; *p != NULL; p++ ) - { + for ( p = protos; *p != NULL; p++ ) { cur_len = strlen( *p ); tot_len += cur_len; - if( cur_len == 0 || cur_len > 255 || tot_len > 65535 ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( cur_len == 0 || cur_len > 255 || tot_len > 65535 ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } conf->alpn_list = protos; - return( 0 ); + return ( 0 ); } const char *mbedtls_ssl_get_alpn_protocol( const mbedtls_ssl_context *ssl ) { - return( ssl->alpn_chosen ); + return ( ssl->alpn_chosen ); } #endif /* MBEDTLS_SSL_ALPN */ @@ -6073,15 +5679,14 @@ void mbedtls_ssl_conf_arc4_support( mbedtls_ssl_config *conf, char arc4 ) #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) int mbedtls_ssl_conf_max_frag_len( mbedtls_ssl_config *conf, unsigned char mfl_code ) { - if( mfl_code >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID || - mfl_code_to_length[mfl_code] > MBEDTLS_SSL_MAX_CONTENT_LEN ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( mfl_code >= MBEDTLS_SSL_MAX_FRAG_LEN_INVALID || + mfl_code_to_length[mfl_code] > MBEDTLS_SSL_MAX_CONTENT_LEN ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } conf->mfl_code = mfl_code; - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ @@ -6116,7 +5721,7 @@ void mbedtls_ssl_conf_renegotiation_enforced( mbedtls_ssl_config *conf, int max_ } void mbedtls_ssl_conf_renegotiation_period( mbedtls_ssl_config *conf, - const unsigned char period[8] ) + const unsigned char period[8] ) { memcpy( conf->renego_period, period, 8 ); } @@ -6145,8 +5750,8 @@ void mbedtls_ssl_conf_session_tickets_cb( mbedtls_ssl_config *conf, #if defined(MBEDTLS_SSL_EXPORT_KEYS) void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, - mbedtls_ssl_export_keys_t *f_export_keys, - void *p_export_keys ) + mbedtls_ssl_export_keys_t *f_export_keys, + void *p_export_keys ) { conf->f_export_keys = f_export_keys; conf->p_export_keys = p_export_keys; @@ -6158,24 +5763,24 @@ void mbedtls_ssl_conf_export_keys_cb( mbedtls_ssl_config *conf, */ size_t mbedtls_ssl_get_bytes_avail( const mbedtls_ssl_context *ssl ) { - return( ssl->in_offt == NULL ? 0 : ssl->in_msglen ); + return ( ssl->in_offt == NULL ? 0 : ssl->in_msglen ); } uint32_t mbedtls_ssl_get_verify_result( const mbedtls_ssl_context *ssl ) { - if( ssl->session != NULL ) - return( ssl->session->verify_result ); + if ( ssl->session != NULL ) + return ( ssl->session->verify_result ); - if( ssl->session_negotiate != NULL ) - return( ssl->session_negotiate->verify_result ); + if ( ssl->session_negotiate != NULL ) + return ( ssl->session_negotiate->verify_result ); - return( 0xFFFFFFFF ); + return ( 0xFFFFFFFF ); } const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ) { - if( ssl == NULL || ssl->session == NULL ) - return( NULL ); + if ( ssl == NULL || ssl->session == NULL ) + return ( NULL ); return mbedtls_ssl_get_ciphersuite_name( ssl->session->ciphersuite ); } @@ -6183,38 +5788,35 @@ const char *mbedtls_ssl_get_ciphersuite( const mbedtls_ssl_context *ssl ) const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - switch( ssl->minor_ver ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + switch ( ssl->minor_ver ) { case MBEDTLS_SSL_MINOR_VERSION_2: - return( "DTLSv1.0" ); + return ( "DTLSv1.0" ); case MBEDTLS_SSL_MINOR_VERSION_3: - return( "DTLSv1.2" ); + return ( "DTLSv1.2" ); default: - return( "unknown (DTLS)" ); + return ( "unknown (DTLS)" ); } } #endif - switch( ssl->minor_ver ) - { + switch ( ssl->minor_ver ) { case MBEDTLS_SSL_MINOR_VERSION_0: - return( "SSLv3.0" ); + return ( "SSLv3.0" ); case MBEDTLS_SSL_MINOR_VERSION_1: - return( "TLSv1.0" ); + return ( "TLSv1.0" ); case MBEDTLS_SSL_MINOR_VERSION_2: - return( "TLSv1.1" ); + return ( "TLSv1.1" ); case MBEDTLS_SSL_MINOR_VERSION_3: - return( "TLSv1.2" ); + return ( "TLSv1.2" ); default: - return( "unknown" ); + return ( "unknown" ); } } @@ -6224,15 +5826,14 @@ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ) const mbedtls_ssl_transform *transform = ssl->transform_out; #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->session_out->compression != MBEDTLS_SSL_COMPRESS_NULL ) - return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); + if ( ssl->session_out->compression != MBEDTLS_SSL_COMPRESS_NULL ) + return ( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); #endif - if( transform == NULL ) - return( (int) mbedtls_ssl_hdr_len( ssl ) ); + if ( transform == NULL ) + return ( (int) mbedtls_ssl_hdr_len( ssl ) ); - switch( mbedtls_cipher_get_cipher_mode( &transform->cipher_ctx_enc ) ) - { + switch ( mbedtls_cipher_get_cipher_mode( &transform->cipher_ctx_enc ) ) { case MBEDTLS_MODE_GCM: case MBEDTLS_MODE_CCM: case MBEDTLS_MODE_STREAM: @@ -6241,15 +5842,15 @@ int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl ) case MBEDTLS_MODE_CBC: transform_expansion = transform->maclen - + mbedtls_cipher_get_block_size( &transform->cipher_ctx_enc ); + + mbedtls_cipher_get_block_size( &transform->cipher_ctx_enc ); break; default: MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); } - return( (int)( mbedtls_ssl_hdr_len( ssl ) + transform_expansion ) ); + return ( (int)( mbedtls_ssl_hdr_len( ssl ) + transform_expansion ) ); } #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) @@ -6265,9 +5866,8 @@ size_t mbedtls_ssl_get_max_frag_len( const mbedtls_ssl_context *ssl ) /* * Check if a smaller max length was negotiated */ - if( ssl->session_out != NULL && - mfl_code_to_length[ssl->session_out->mfl_code] < max_len ) - { + if ( ssl->session_out != NULL && + mfl_code_to_length[ssl->session_out->mfl_code] < max_len ) { max_len = mfl_code_to_length[ssl->session_out->mfl_code]; } @@ -6278,25 +5878,24 @@ size_t mbedtls_ssl_get_max_frag_len( const mbedtls_ssl_context *ssl ) #if defined(MBEDTLS_X509_CRT_PARSE_C) const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl ) { - if( ssl == NULL || ssl->session == NULL ) - return( NULL ); + if ( ssl == NULL || ssl->session == NULL ) + return ( NULL ); - return( ssl->session->peer_cert ); + return ( ssl->session->peer_cert ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ #if defined(MBEDTLS_SSL_CLI_C) int mbedtls_ssl_get_session( const mbedtls_ssl_context *ssl, mbedtls_ssl_session *dst ) { - if( ssl == NULL || - dst == NULL || - ssl->session == NULL || - ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) - { - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || + dst == NULL || + ssl->session == NULL || + ssl->conf->endpoint != MBEDTLS_SSL_IS_CLIENT ) { + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); } - return( ssl_session_copy( dst, ssl->session ) ); + return ( ssl_session_copy( dst, ssl->session ) ); } #endif /* MBEDTLS_SSL_CLI_C */ @@ -6307,19 +5906,19 @@ int mbedtls_ssl_handshake_step( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) ret = mbedtls_ssl_handshake_client_step( ssl ); #endif #if defined(MBEDTLS_SSL_SRV_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ret = mbedtls_ssl_handshake_server_step( ssl ); #endif - return( ret ); + return ( ret ); } /* @@ -6329,22 +5928,21 @@ int mbedtls_ssl_handshake( mbedtls_ssl_context *ssl ) { int ret = 0; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> handshake" ) ); - while( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { + while ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { ret = mbedtls_ssl_handshake_step( ssl ); - if( ret != 0 ) + if ( ret != 0 ) break; } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= handshake" ) ); - return( ret ); + return ( ret ); } #if defined(MBEDTLS_SSL_RENEGOTIATION) @@ -6362,15 +5960,14 @@ static int ssl_write_hello_request( mbedtls_ssl_context *ssl ) ssl->out_msgtype = MBEDTLS_SSL_MSG_HANDSHAKE; ssl->out_msg[0] = MBEDTLS_SSL_HS_HELLO_REQUEST; - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write hello request" ) ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SSL_SRV_C */ @@ -6389,16 +5986,15 @@ static int ssl_start_renegotiation( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> renegotiate" ) ); - if( ( ret = ssl_handshake_init( ssl ) ) != 0 ) - return( ret ); + if ( ( ret = ssl_handshake_init( ssl ) ) != 0 ) + return ( ret ); /* RFC 6347 4.2.2: "[...] the HelloRequest will have message_seq = 0 and * the ServerHello will have message_seq = 1" */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) ssl->handshake->out_msg_seq = 1; else ssl->handshake->in_msg_seq = 1; @@ -6408,15 +6004,14 @@ static int ssl_start_renegotiation( mbedtls_ssl_context *ssl ) ssl->state = MBEDTLS_SSL_HELLO_REQUEST; ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS; - if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= renegotiate" ) ); - return( 0 ); + return ( 0 ); } /* @@ -6427,23 +6022,22 @@ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) { int ret = MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_SRV_C) /* On server, just send the request */ - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) - { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER ) { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_PENDING; /* Did we already try/start sending HelloRequest? */ - if( ssl->out_left != 0 ) - return( mbedtls_ssl_flush_output( ssl ) ); + if ( ssl->out_left != 0 ) + return ( mbedtls_ssl_flush_output( ssl ) ); - return( ssl_write_hello_request( ssl ) ); + return ( ssl_write_hello_request( ssl ) ); } #endif /* MBEDTLS_SSL_SRV_C */ @@ -6452,28 +6046,23 @@ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) * On client, either start the renegotiation process or, * if already in progress, continue the handshake */ - if( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) - { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl->renego_status != MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS ) { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - if( ( ret = ssl_start_renegotiation( ssl ) ) != 0 ) - { + if ( ( ret = ssl_start_renegotiation( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_start_renegotiation", ret ); - return( ret ); + return ( ret ); } - } - else - { - if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) - { + } else { + if ( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_SSL_CLI_C */ - return( ret ); + return ( ret ); } /* @@ -6481,21 +6070,19 @@ int mbedtls_ssl_renegotiate( mbedtls_ssl_context *ssl ) */ static int ssl_check_ctr_renegotiate( mbedtls_ssl_context *ssl ) { - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER || - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING || - ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED ) - { - return( 0 ); + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER || + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING || + ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED ) { + return ( 0 ); } - if( memcmp( ssl->in_ctr, ssl->conf->renego_period, 8 ) <= 0 && - memcmp( ssl->out_ctr, ssl->conf->renego_period, 8 ) <= 0 ) - { - return( 0 ); + if ( memcmp( ssl->in_ctr, ssl->conf->renego_period, 8 ) <= 0 && + memcmp( ssl->out_ctr, ssl->conf->renego_period, 8 ) <= 0 ) { + return ( 0 ); } MBEDTLS_SSL_DEBUG_MSG( 1, ( "record counter limit reached: renegotiate" ) ); - return( mbedtls_ssl_renegotiate( ssl ) ); + return ( mbedtls_ssl_renegotiate( ssl ) ); } #endif /* MBEDTLS_SSL_RENEGOTIATION */ @@ -6507,216 +6094,182 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) int ret, record_read = 0; size_t n; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> read" ) ); #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - return( ret ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) + return ( ret ); - if( ssl->handshake != NULL && - ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) - { - if( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) - return( ret ); + if ( ssl->handshake != NULL && + ssl->handshake->retransmit_state == MBEDTLS_SSL_RETRANS_SENDING ) { + if ( ( ret = mbedtls_ssl_resend( ssl ) ) != 0 ) + return ( ret ); } } #endif #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) - { + if ( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_check_ctr_renegotiate", ret ); - return( ret ); + return ( ret ); } #endif - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { ret = mbedtls_ssl_handshake( ssl ); - if( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) - { + if ( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) { record_read = 1; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } } - if( ssl->in_offt == NULL ) - { + if ( ssl->in_offt == NULL ) { /* Start timer if not already running */ - if( ssl->f_get_timer != NULL && - ssl->f_get_timer( ssl->p_timer ) == -1 ) - { + if ( ssl->f_get_timer != NULL && + ssl->f_get_timer( ssl->p_timer ) == -1 ) { ssl_set_timer( ssl, ssl->conf->read_timeout ); } - if( ! record_read ) - { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_SSL_CONN_EOF ) - return( 0 ); + if ( ! record_read ) { + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_SSL_CONN_EOF ) + return ( 0 ); MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } } - if( ssl->in_msglen == 0 && - ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA ) - { + if ( ssl->in_msglen == 0 && + ssl->in_msgtype == MBEDTLS_SSL_MSG_APPLICATION_DATA ) { /* * OpenSSL sends empty messages to randomize the IV */ - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_SSL_CONN_EOF ) - return( 0 ); + if ( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_SSL_CONN_EOF ) + return ( 0 ); MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); - return( ret ); + return ( ret ); } } #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "received handshake message" ) ); #if defined(MBEDTLS_SSL_CLI_C) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && - ( ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_REQUEST || - ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) ) ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT && + ( ssl->in_msg[0] != MBEDTLS_SSL_HS_HELLO_REQUEST || + ssl->in_hslen != mbedtls_ssl_hs_hdr_len( ssl ) ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake received (not HelloRequest)" ) ); /* With DTLS, drop the packet (probably from last handshake) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->in_msg[0] != MBEDTLS_SSL_HS_CLIENT_HELLO ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "handshake received (not ClientHello)" ) ); /* With DTLS, drop the packet (probably from last handshake) */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - return( MBEDTLS_ERR_SSL_WANT_READ ); + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); #endif - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } #endif - if( ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED || - ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && - ssl->conf->allow_legacy_renegotiation == - MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) ) - { + if ( ssl->conf->disable_renegotiation == MBEDTLS_SSL_RENEGOTIATION_DISABLED || + ( ssl->secure_renegotiation == MBEDTLS_SSL_LEGACY_RENEGOTIATION && + ssl->conf->allow_legacy_renegotiation == + MBEDTLS_SSL_LEGACY_NO_RENEGOTIATION ) ) { MBEDTLS_SSL_DEBUG_MSG( 3, ( "refusing renegotiation, sending alert" ) ); #if defined(MBEDTLS_SSL_PROTO_SSL3) - if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) - { + if ( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_0 ) { /* * SSLv3 does not have a "no_renegotiation" alert */ - if( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) - return( ret ); - } - else + if ( ( ret = mbedtls_ssl_send_fatal_handshake_failure( ssl ) ) != 0 ) + return ( ret ); + } else #endif /* MBEDTLS_SSL_PROTO_SSL3 */ #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) || \ defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) - { - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_WARNING, - MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) ) != 0 ) - { - return( ret ); - } - } - else + if ( ssl->minor_ver >= MBEDTLS_SSL_MINOR_VERSION_1 ) { + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_WARNING, + MBEDTLS_SSL_ALERT_MSG_NO_RENEGOTIATION ) ) != 0 ) { + return ( ret ); + } + } else #endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 || MBEDTLS_SSL_PROTO_TLS1_2 */ - { - MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); - return( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); - } - } - else - { + { + MBEDTLS_SSL_DEBUG_MSG( 1, ( "should never happen" ) ); + return ( MBEDTLS_ERR_SSL_INTERNAL_ERROR ); + } + } else { /* DTLS clients need to know renego is server-initiated */ #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && - ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM && + ssl->conf->endpoint == MBEDTLS_SSL_IS_CLIENT ) { ssl->renego_status = MBEDTLS_SSL_RENEGOTIATION_PENDING; } #endif ret = ssl_start_renegotiation( ssl ); - if( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) - { + if ( ret == MBEDTLS_ERR_SSL_WAITING_SERVER_HELLO_RENEGO ) { record_read = 1; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_start_renegotiation", ret ); - return( ret ); + return ( ret ); } } /* If a non-handshake record was read during renego, fallthrough, * else tell the user they should call mbedtls_ssl_read() again */ - if( ! record_read ) - return( MBEDTLS_ERR_SSL_WANT_READ ); - } - else if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { + if ( ! record_read ) + return ( MBEDTLS_ERR_SSL_WANT_READ ); + } else if ( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { - if( ssl->conf->renego_max_records >= 0 ) - { - if( ++ssl->renego_records_seen > ssl->conf->renego_max_records ) - { + if ( ssl->conf->renego_max_records >= 0 ) { + if ( ++ssl->renego_records_seen > ssl->conf->renego_max_records ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "renegotiation requested, " - "but not honored by client" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + "but not honored by client" ) ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } } } #endif /* MBEDTLS_SSL_RENEGOTIATION */ /* Fatal and closure alerts handled by mbedtls_ssl_read_record() */ - if( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) - { + if ( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "ignoring non-fatal non-closure alert" ) ); - return( MBEDTLS_ERR_SSL_WANT_READ ); + return ( MBEDTLS_ERR_SSL_WANT_READ ); } - if( ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) - { + if ( ssl->in_msgtype != MBEDTLS_SSL_MSG_APPLICATION_DATA ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad application data message" ) ); - return( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); + return ( MBEDTLS_ERR_SSL_UNEXPECTED_MESSAGE ); } ssl->in_offt = ssl->in_msg; /* We're going to return something now, cancel timer, * except if handshake (renegotiation) is in progress */ - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) ssl_set_timer( ssl, 0 ); #if defined(MBEDTLS_SSL_PROTO_DTLS) @@ -6724,13 +6277,11 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) * Do it now, after setting in_offt, to avoid taking this branch * again if ssl_write_hello_request() returns WANT_WRITE */ #if defined(MBEDTLS_SSL_SRV_C) && defined(MBEDTLS_SSL_RENEGOTIATION) - if( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && - ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) - { - if( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) - { + if ( ssl->conf->endpoint == MBEDTLS_SSL_IS_SERVER && + ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_PENDING ) { + if ( ( ret = ssl_resend_hello_request( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_resend_hello_request", ret ); - return( ret ); + return ( ret ); } } #endif /* MBEDTLS_SSL_SRV_C && MBEDTLS_SSL_RENEGOTIATION */ @@ -6743,7 +6294,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) memcpy( buf, ssl->in_offt, n ); ssl->in_msglen -= n; - if( ssl->in_msglen == 0 ) + if ( ssl->in_msglen == 0 ) /* all bytes consumed */ ssl->in_offt = NULL; else @@ -6752,7 +6303,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read" ) ); - return( (int) n ); + return ( (int) n ); } /* @@ -6766,44 +6317,36 @@ static int ssl_write_real( mbedtls_ssl_context *ssl, #if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH) size_t max_len = mbedtls_ssl_get_max_frag_len( ssl ); - if( len > max_len ) - { + if ( len > max_len ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "fragment larger than the (negotiated) " - "maximum fragment length: %d > %d", - len, max_len ) ); - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); - } - else + "maximum fragment length: %d > %d", + len, max_len ) ); + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + } else #endif len = max_len; } #endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */ - if( ssl->out_left != 0 ) - { - if( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) - { + if ( ssl->out_left != 0 ) { + if ( ( ret = mbedtls_ssl_flush_output( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_flush_output", ret ); - return( ret ); + return ( ret ); } - } - else - { + } else { ssl->out_msglen = len; ssl->out_msgtype = MBEDTLS_SSL_MSG_APPLICATION_DATA; memcpy( ssl->out_msg, buf, len ); - if( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) - { + if ( ( ret = mbedtls_ssl_write_record( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_write_record", ret ); - return( ret ); + return ( ret ); } } - return( (int) len ); + return ( (int) len ); } /* @@ -6819,28 +6362,26 @@ static int ssl_write_split( mbedtls_ssl_context *ssl, { int ret; - if( ssl->conf->cbc_record_splitting == - MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED || - len <= 1 || - ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_1 || - mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc ) - != MBEDTLS_MODE_CBC ) - { - return( ssl_write_real( ssl, buf, len ) ); + if ( ssl->conf->cbc_record_splitting == + MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED || + len <= 1 || + ssl->minor_ver > MBEDTLS_SSL_MINOR_VERSION_1 || + mbedtls_cipher_get_cipher_mode( &ssl->transform_out->cipher_ctx_enc ) + != MBEDTLS_MODE_CBC ) { + return ( ssl_write_real( ssl, buf, len ) ); } - if( ssl->split_done == 0 ) - { - if( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 ) - return( ret ); + if ( ssl->split_done == 0 ) { + if ( ( ret = ssl_write_real( ssl, buf, 1 ) ) <= 0 ) + return ( ret ); ssl->split_done = 1; } - if( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 ) - return( ret ); + if ( ( ret = ssl_write_real( ssl, buf + 1, len - 1 ) ) <= 0 ) + return ( ret ); ssl->split_done = 0; - return( ret + 1 ); + return ( ret + 1 ); } #endif /* MBEDTLS_SSL_CBC_RECORD_SPLITTING */ @@ -6853,23 +6394,20 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_ MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write" ) ); - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); #if defined(MBEDTLS_SSL_RENEGOTIATION) - if( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) - { + if ( ( ret = ssl_check_ctr_renegotiate( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "ssl_check_ctr_renegotiate", ret ); - return( ret ); + return ( ret ); } #endif - if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) - { + if ( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ( ret = mbedtls_ssl_handshake( ssl ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_handshake", ret ); - return( ret ); + return ( ret ); } } @@ -6881,7 +6419,7 @@ int mbedtls_ssl_write( mbedtls_ssl_context *ssl, const unsigned char *buf, size_ MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write" ) ); - return( ret ); + return ( ret ); } /* @@ -6891,33 +6429,31 @@ int mbedtls_ssl_close_notify( mbedtls_ssl_context *ssl ) { int ret; - if( ssl == NULL || ssl->conf == NULL ) - return( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); + if ( ssl == NULL || ssl->conf == NULL ) + return ( MBEDTLS_ERR_SSL_BAD_INPUT_DATA ); MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> write close notify" ) ); - if( ssl->out_left != 0 ) - return( mbedtls_ssl_flush_output( ssl ) ); + if ( ssl->out_left != 0 ) + return ( mbedtls_ssl_flush_output( ssl ) ); - if( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) - { - if( ( ret = mbedtls_ssl_send_alert_message( ssl, - MBEDTLS_SSL_ALERT_LEVEL_WARNING, - MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) ) != 0 ) - { + if ( ssl->state == MBEDTLS_SSL_HANDSHAKE_OVER ) { + if ( ( ret = mbedtls_ssl_send_alert_message( ssl, + MBEDTLS_SSL_ALERT_LEVEL_WARNING, + MBEDTLS_SSL_ALERT_MSG_CLOSE_NOTIFY ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_send_alert_message", ret ); - return( ret ); + return ( ret ); } } MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write close notify" ) ); - return( 0 ); + return ( 0 ); } void mbedtls_ssl_transform_free( mbedtls_ssl_transform *transform ) { - if( transform == NULL ) + if ( transform == NULL ) return; #if defined(MBEDTLS_ZLIB_SUPPORT) @@ -6939,8 +6475,7 @@ static void ssl_key_cert_free( mbedtls_ssl_key_cert *key_cert ) { mbedtls_ssl_key_cert *cur = key_cert, *next; - while( cur != NULL ) - { + while ( cur != NULL ) { next = cur->next; mbedtls_free( cur ); cur = next; @@ -6950,7 +6485,7 @@ static void ssl_key_cert_free( mbedtls_ssl_key_cert *key_cert ) void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) { - if( handshake == NULL ) + if ( handshake == NULL ) return; #if defined(MBEDTLS_SSL_PROTO_SSL3) || defined(MBEDTLS_SSL_PROTO_TLS1) || \ @@ -6989,8 +6524,7 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) #endif #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( handshake->psk != NULL ) - { + if ( handshake->psk != NULL ) { mbedtls_zeroize( handshake->psk, handshake->psk_len ); mbedtls_free( handshake->psk ); } @@ -7002,12 +6536,10 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) * Free only the linked list wrapper, not the keys themselves * since the belong to the SNI callback */ - if( handshake->sni_key_cert != NULL ) - { + if ( handshake->sni_key_cert != NULL ) { mbedtls_ssl_key_cert *cur = handshake->sni_key_cert, *next; - while( cur != NULL ) - { + while ( cur != NULL ) { next = cur->next; mbedtls_free( cur ); cur = next; @@ -7026,12 +6558,11 @@ void mbedtls_ssl_handshake_free( mbedtls_ssl_handshake_params *handshake ) void mbedtls_ssl_session_free( mbedtls_ssl_session *session ) { - if( session == NULL ) + if ( session == NULL ) return; #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( session->peer_cert != NULL ) - { + if ( session->peer_cert != NULL ) { mbedtls_x509_crt_free( session->peer_cert ); mbedtls_free( session->peer_cert ); } @@ -7049,39 +6580,34 @@ void mbedtls_ssl_session_free( mbedtls_ssl_session *session ) */ void mbedtls_ssl_free( mbedtls_ssl_context *ssl ) { - if( ssl == NULL ) + if ( ssl == NULL ) return; MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> free" ) ); - if( ssl->out_buf != NULL ) - { + if ( ssl->out_buf != NULL ) { mbedtls_zeroize( ssl->out_buf, MBEDTLS_SSL_BUFFER_LEN ); mbedtls_free( ssl->out_buf ); } - if( ssl->in_buf != NULL ) - { + if ( ssl->in_buf != NULL ) { mbedtls_zeroize( ssl->in_buf, MBEDTLS_SSL_BUFFER_LEN ); mbedtls_free( ssl->in_buf ); } #if defined(MBEDTLS_ZLIB_SUPPORT) - if( ssl->compress_buf != NULL ) - { + if ( ssl->compress_buf != NULL ) { mbedtls_zeroize( ssl->compress_buf, MBEDTLS_SSL_BUFFER_LEN ); mbedtls_free( ssl->compress_buf ); } #endif - if( ssl->transform ) - { + if ( ssl->transform ) { mbedtls_ssl_transform_free( ssl->transform ); mbedtls_free( ssl->transform ); } - if( ssl->handshake ) - { + if ( ssl->handshake ) { mbedtls_ssl_handshake_free( ssl->handshake ); mbedtls_ssl_transform_free( ssl->transform_negotiate ); mbedtls_ssl_session_free( ssl->session_negotiate ); @@ -7091,23 +6617,20 @@ void mbedtls_ssl_free( mbedtls_ssl_context *ssl ) mbedtls_free( ssl->session_negotiate ); } - if( ssl->session ) - { + if ( ssl->session ) { mbedtls_ssl_session_free( ssl->session ); mbedtls_free( ssl->session ); } #if defined(MBEDTLS_X509_CRT_PARSE_C) - if( ssl->hostname != NULL ) - { + if ( ssl->hostname != NULL ) { mbedtls_zeroize( ssl->hostname, strlen( ssl->hostname ) ); mbedtls_free( ssl->hostname ); } #endif #if defined(MBEDTLS_SSL_HW_RECORD_ACCEL) - if( mbedtls_ssl_hw_record_finish != NULL ) - { + if ( mbedtls_ssl_hw_record_finish != NULL ) { MBEDTLS_SSL_DEBUG_MSG( 2, ( "going for mbedtls_ssl_hw_record_finish()" ) ); mbedtls_ssl_hw_record_finish( ssl ); } @@ -7189,8 +6712,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, * Things that are common to all presets */ #if defined(MBEDTLS_SSL_CLI_C) - if( endpoint == MBEDTLS_SSL_IS_CLIENT ) - { + if ( endpoint == MBEDTLS_SSL_IS_CLIENT ) { conf->authmode = MBEDTLS_SSL_VERIFY_REQUIRED; #if defined(MBEDTLS_SSL_SESSION_TICKETS) conf->session_tickets = MBEDTLS_SSL_SESSION_TICKETS_ENABLED; @@ -7235,22 +6757,19 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, #endif #if defined(MBEDTLS_DHM_C) && defined(MBEDTLS_SSL_SRV_C) - if( endpoint == MBEDTLS_SSL_IS_SERVER ) - { - if( ( ret = mbedtls_ssl_conf_dh_param( conf, - MBEDTLS_DHM_RFC5114_MODP_2048_P, - MBEDTLS_DHM_RFC5114_MODP_2048_G ) ) != 0 ) - { - return( ret ); - } - } + if ( endpoint == MBEDTLS_SSL_IS_SERVER ) { + if ( ( ret = mbedtls_ssl_conf_dh_param( conf, + MBEDTLS_DHM_RFC5114_MODP_2048_P, + MBEDTLS_DHM_RFC5114_MODP_2048_G ) ) != 0 ) { + return ( ret ); + } + } #endif /* * Preset-specific defaults */ - switch( preset ) - { + switch ( preset ) { /* * NSA Suite B */ @@ -7261,10 +6780,10 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION; conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = - ssl_preset_suiteb_ciphersuites; + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = + ssl_preset_suiteb_ciphersuites; #if defined(MBEDTLS_X509_CRT_PARSE_C) conf->cert_profile = &mbedtls_x509_crt_profile_suiteb; @@ -7289,15 +6808,15 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION; #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) + if ( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_2; #endif conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_0] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = - conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = - mbedtls_ssl_list_ciphersuites(); + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_1] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_2] = + conf->ciphersuite_list[MBEDTLS_SSL_MINOR_VERSION_3] = + mbedtls_ssl_list_ciphersuites(); #if defined(MBEDTLS_X509_CRT_PARSE_C) conf->cert_profile = &mbedtls_x509_crt_profile_default; @@ -7316,7 +6835,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf, #endif } - return( 0 ); + return ( 0 ); } /* @@ -7330,8 +6849,7 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) #endif #if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED) - if( conf->psk != NULL ) - { + if ( conf->psk != NULL ) { mbedtls_zeroize( conf->psk, conf->psk_len ); mbedtls_zeroize( conf->psk_identity, conf->psk_identity_len ); mbedtls_free( conf->psk ); @@ -7356,30 +6874,29 @@ void mbedtls_ssl_config_free( mbedtls_ssl_config *conf ) unsigned char mbedtls_ssl_sig_from_pk( mbedtls_pk_context *pk ) { #if defined(MBEDTLS_RSA_C) - if( mbedtls_pk_can_do( pk, MBEDTLS_PK_RSA ) ) - return( MBEDTLS_SSL_SIG_RSA ); + if ( mbedtls_pk_can_do( pk, MBEDTLS_PK_RSA ) ) + return ( MBEDTLS_SSL_SIG_RSA ); #endif #if defined(MBEDTLS_ECDSA_C) - if( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECDSA ) ) - return( MBEDTLS_SSL_SIG_ECDSA ); + if ( mbedtls_pk_can_do( pk, MBEDTLS_PK_ECDSA ) ) + return ( MBEDTLS_SSL_SIG_ECDSA ); #endif - return( MBEDTLS_SSL_SIG_ANON ); + return ( MBEDTLS_SSL_SIG_ANON ); } mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ) { - switch( sig ) - { + switch ( sig ) { #if defined(MBEDTLS_RSA_C) case MBEDTLS_SSL_SIG_RSA: - return( MBEDTLS_PK_RSA ); + return ( MBEDTLS_PK_RSA ); #endif #if defined(MBEDTLS_ECDSA_C) case MBEDTLS_SSL_SIG_ECDSA: - return( MBEDTLS_PK_ECDSA ); + return ( MBEDTLS_PK_ECDSA ); #endif default: - return( MBEDTLS_PK_NONE ); + return ( MBEDTLS_PK_NONE ); } } #endif /* MBEDTLS_PK_C && ( MBEDTLS_RSA_C || MBEDTLS_ECDSA_C ) */ @@ -7389,30 +6906,29 @@ mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ) */ mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ) { - switch( hash ) - { + switch ( hash ) { #if defined(MBEDTLS_MD5_C) case MBEDTLS_SSL_HASH_MD5: - return( MBEDTLS_MD_MD5 ); + return ( MBEDTLS_MD_MD5 ); #endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_SSL_HASH_SHA1: - return( MBEDTLS_MD_SHA1 ); + return ( MBEDTLS_MD_SHA1 ); #endif #if defined(MBEDTLS_SHA256_C) case MBEDTLS_SSL_HASH_SHA224: - return( MBEDTLS_MD_SHA224 ); + return ( MBEDTLS_MD_SHA224 ); case MBEDTLS_SSL_HASH_SHA256: - return( MBEDTLS_MD_SHA256 ); + return ( MBEDTLS_MD_SHA256 ); #endif #if defined(MBEDTLS_SHA512_C) case MBEDTLS_SSL_HASH_SHA384: - return( MBEDTLS_MD_SHA384 ); + return ( MBEDTLS_MD_SHA384 ); case MBEDTLS_SSL_HASH_SHA512: - return( MBEDTLS_MD_SHA512 ); + return ( MBEDTLS_MD_SHA512 ); #endif default: - return( MBEDTLS_MD_NONE ); + return ( MBEDTLS_MD_NONE ); } } @@ -7421,30 +6937,29 @@ mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ) */ unsigned char mbedtls_ssl_hash_from_md_alg( int md ) { - switch( md ) - { + switch ( md ) { #if defined(MBEDTLS_MD5_C) case MBEDTLS_MD_MD5: - return( MBEDTLS_SSL_HASH_MD5 ); + return ( MBEDTLS_SSL_HASH_MD5 ); #endif #if defined(MBEDTLS_SHA1_C) case MBEDTLS_MD_SHA1: - return( MBEDTLS_SSL_HASH_SHA1 ); + return ( MBEDTLS_SSL_HASH_SHA1 ); #endif #if defined(MBEDTLS_SHA256_C) case MBEDTLS_MD_SHA224: - return( MBEDTLS_SSL_HASH_SHA224 ); + return ( MBEDTLS_SSL_HASH_SHA224 ); case MBEDTLS_MD_SHA256: - return( MBEDTLS_SSL_HASH_SHA256 ); + return ( MBEDTLS_SSL_HASH_SHA256 ); #endif #if defined(MBEDTLS_SHA512_C) case MBEDTLS_MD_SHA384: - return( MBEDTLS_SSL_HASH_SHA384 ); + return ( MBEDTLS_SSL_HASH_SHA384 ); case MBEDTLS_MD_SHA512: - return( MBEDTLS_SSL_HASH_SHA512 ); + return ( MBEDTLS_SSL_HASH_SHA512 ); #endif default: - return( MBEDTLS_SSL_HASH_NONE ); + return ( MBEDTLS_SSL_HASH_NONE ); } } @@ -7457,14 +6972,14 @@ int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_i { const mbedtls_ecp_group_id *gid; - if( ssl->conf->curve_list == NULL ) - return( -1 ); + if ( ssl->conf->curve_list == NULL ) + return ( -1 ); - for( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) - if( *gid == grp_id ) - return( 0 ); + for ( gid = ssl->conf->curve_list; *gid != MBEDTLS_ECP_DP_NONE; gid++ ) + if ( *gid == grp_id ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_ECP_C */ @@ -7478,22 +6993,22 @@ int mbedtls_ssl_check_sig_hash( const mbedtls_ssl_context *ssl, { const int *cur; - if( ssl->conf->sig_hashes == NULL ) - return( -1 ); + if ( ssl->conf->sig_hashes == NULL ) + return ( -1 ); - for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) - if( *cur == (int) md ) - return( 0 ); + for ( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) + if ( *cur == (int) md ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_KEY_EXCHANGE__WITH_CERT__ENABLED */ #if defined(MBEDTLS_X509_CRT_PARSE_C) int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, - const mbedtls_ssl_ciphersuite_t *ciphersuite, - int cert_endpoint, - uint32_t *flags ) + const mbedtls_ssl_ciphersuite_t *ciphersuite, + int cert_endpoint, + uint32_t *flags ) { int ret = 0; #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) @@ -7512,11 +7027,9 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, #endif #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - if( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) - { + if ( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) { /* Server part of the key exchange */ - switch( ciphersuite->key_exchange ) - { + switch ( ciphersuite->key_exchange ) { case MBEDTLS_KEY_EXCHANGE_RSA: case MBEDTLS_KEY_EXCHANGE_RSA_PSK: usage = MBEDTLS_X509_KU_KEY_ENCIPHERMENT; @@ -7541,15 +7054,12 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, case MBEDTLS_KEY_EXCHANGE_ECJPAKE: usage = 0; } - } - else - { + } else { /* Client auth: we only implement rsa_sign and mbedtls_ecdsa_sign for now */ usage = MBEDTLS_X509_KU_DIGITAL_SIGNATURE; } - if( mbedtls_x509_crt_check_key_usage( cert, usage ) != 0 ) - { + if ( mbedtls_x509_crt_check_key_usage( cert, usage ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_KEY_USAGE; ret = -1; } @@ -7558,25 +7068,21 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, #endif /* MBEDTLS_X509_CHECK_KEY_USAGE */ #if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) - if( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) - { + if ( cert_endpoint == MBEDTLS_SSL_IS_SERVER ) { ext_oid = MBEDTLS_OID_SERVER_AUTH; ext_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_SERVER_AUTH ); - } - else - { + } else { ext_oid = MBEDTLS_OID_CLIENT_AUTH; ext_len = MBEDTLS_OID_SIZE( MBEDTLS_OID_CLIENT_AUTH ); } - if( mbedtls_x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) - { + if ( mbedtls_x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_EXT_KEY_USAGE; ret = -1; } #endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ - return( ret ); + return ( ret ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ @@ -7590,18 +7096,16 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert, * 1.x <-> 3.x+1 for x != 0 (DTLS 1.2 based on TLS 1.2) */ void mbedtls_ssl_write_version( int major, int minor, int transport, - unsigned char ver[2] ) + unsigned char ver[2] ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { - if( minor == MBEDTLS_SSL_MINOR_VERSION_2 ) + if ( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { + if ( minor == MBEDTLS_SSL_MINOR_VERSION_2 ) --minor; /* DTLS 1.0 stored as TLS 1.1 internally */ ver[0] = (unsigned char)( 255 - ( major - 2 ) ); ver[1] = (unsigned char)( 255 - ( minor - 1 ) ); - } - else + } else #else ((void) transport); #endif @@ -7612,18 +7116,16 @@ void mbedtls_ssl_write_version( int major, int minor, int transport, } void mbedtls_ssl_read_version( int *major, int *minor, int transport, - const unsigned char ver[2] ) + const unsigned char ver[2] ) { #if defined(MBEDTLS_SSL_PROTO_DTLS) - if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) - { + if ( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM ) { *major = 255 - ver[0] + 2; *minor = 255 - ver[1] + 1; - if( *minor == MBEDTLS_SSL_MINOR_VERSION_1 ) + if ( *minor == MBEDTLS_SSL_MINOR_VERSION_1 ) ++*minor; /* DTLS 1.0 stored as TLS 1.1 internally */ - } - else + } else #else ((void) transport); #endif @@ -7636,11 +7138,10 @@ void mbedtls_ssl_read_version( int *major, int *minor, int transport, int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ) { #if defined(MBEDTLS_SSL_PROTO_TLS1_2) - if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) + if ( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; - switch( md ) - { + switch ( md ) { #if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) #if defined(MBEDTLS_MD5_C) case MBEDTLS_SSL_HASH_MD5: diff --git a/external_libs/mbedtls/library/threading.c b/external_libs/mbedtls/library/threading.c index 83ec01a..69abbf7 100644 --- a/external_libs/mbedtls/library/threading.c +++ b/external_libs/mbedtls/library/threading.c @@ -32,7 +32,7 @@ #if defined(MBEDTLS_THREADING_PTHREAD) static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || mutex->is_valid ) + if ( mutex == NULL || mutex->is_valid ) return; mutex->is_valid = pthread_mutex_init( &mutex->mutex, NULL ) == 0; @@ -40,7 +40,7 @@ static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || !mutex->is_valid ) + if ( mutex == NULL || !mutex->is_valid ) return; (void) pthread_mutex_destroy( &mutex->mutex ); @@ -49,24 +49,24 @@ static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex ) static int threading_mutex_lock_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || ! mutex->is_valid ) - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); + if ( mutex == NULL || ! mutex->is_valid ) + return ( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); - if( pthread_mutex_lock( &mutex->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( pthread_mutex_lock( &mutex->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); - return( 0 ); + return ( 0 ); } static int threading_mutex_unlock_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL || ! mutex->is_valid ) - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); + if ( mutex == NULL || ! mutex->is_valid ) + return ( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); - if( pthread_mutex_unlock( &mutex->mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( pthread_mutex_unlock( &mutex->mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); - return( 0 ); + return ( 0 ); } void (*mbedtls_mutex_init)( mbedtls_threading_mutex_t * ) = threading_mutex_init_pthread; @@ -85,7 +85,7 @@ int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_unl static int threading_mutex_fail( mbedtls_threading_mutex_t *mutex ) { ((void) mutex ); - return( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_THREADING_BAD_INPUT_DATA ); } static void threading_mutex_dummy( mbedtls_threading_mutex_t *mutex ) { @@ -102,9 +102,9 @@ int (*mbedtls_mutex_unlock)( mbedtls_threading_mutex_t * ) = threading_mutex_fai * Set functions pointers and initialize global mutexes */ void mbedtls_threading_set_alt( void (*mutex_init)( mbedtls_threading_mutex_t * ), - void (*mutex_free)( mbedtls_threading_mutex_t * ), - int (*mutex_lock)( mbedtls_threading_mutex_t * ), - int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ) + void (*mutex_free)( mbedtls_threading_mutex_t * ), + int (*mutex_lock)( mbedtls_threading_mutex_t * ), + int (*mutex_unlock)( mbedtls_threading_mutex_t * ) ) { mbedtls_mutex_init = mutex_init; mbedtls_mutex_free = mutex_free; diff --git a/external_libs/mbedtls/library/timing.c b/external_libs/mbedtls/library/timing.c index a7c7ff0..69e84d5 100644 --- a/external_libs/mbedtls/library/timing.c +++ b/external_libs/mbedtls/library/timing.c @@ -52,8 +52,7 @@ #include #include -struct _hr_time -{ +struct _hr_time { LARGE_INTEGER start; }; @@ -65,8 +64,7 @@ struct _hr_time #include #include -struct _hr_time -{ +struct _hr_time { struct timeval start; }; @@ -82,7 +80,7 @@ unsigned long mbedtls_timing_hardclock( void ) unsigned long tsc; __asm rdtsc __asm mov [tsc], eax - return( tsc ); + return ( tsc ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && ( _MSC_VER && _M_IX86 ) || __WATCOMC__ */ @@ -98,7 +96,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long lo, hi; asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo ); + return ( lo ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __i386__ */ @@ -112,7 +110,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long lo, hi; asm volatile( "rdtsc" : "=a" (lo), "=d" (hi) ); - return( lo | ( hi << 32 ) ); + return ( lo | ( hi << 32 ) ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && ( __amd64__ || __x86_64__ ) */ @@ -126,15 +124,13 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long tbl, tbu0, tbu1; - do - { + do { asm volatile( "mftbu %0" : "=r" (tbu0) ); asm volatile( "mftb %0" : "=r" (tbl ) ); asm volatile( "mftbu %0" : "=r" (tbu1) ); - } - while( tbu0 != tbu1 ); + } while ( tbu0 != tbu1 ); - return( tbl ); + return ( tbl ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && ( __powerpc__ || __ppc__ ) */ @@ -151,7 +147,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long tick; asm volatile( "rdpr %%tick, %0;" : "=&r" (tick) ); - return( tick ); + return ( tick ); } #endif /* __OpenBSD__ */ #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && @@ -167,7 +163,7 @@ unsigned long mbedtls_timing_hardclock( void ) unsigned long tick; asm volatile( ".byte 0x83, 0x41, 0x00, 0x00" ); asm volatile( "mov %%g1, %0" : "=r" (tick) ); - return( tick ); + return ( tick ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __sparc__ && !__sparc64__ */ @@ -181,7 +177,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long cc; asm volatile( "rpcc %0" : "=r" (cc) ); - return( cc & 0xFFFFFFFF ); + return ( cc & 0xFFFFFFFF ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __alpha__ */ @@ -195,7 +191,7 @@ unsigned long mbedtls_timing_hardclock( void ) { unsigned long itc; asm volatile( "mov %0 = ar.itc" : "=r" (itc) ); - return( itc ); + return ( itc ); } #endif /* !HAVE_HARDCLOCK && MBEDTLS_HAVE_ASM && __GNUC__ && __ia64__ */ @@ -211,7 +207,7 @@ unsigned long mbedtls_timing_hardclock( void ) QueryPerformanceCounter( &offset ); - return( (unsigned long)( offset.QuadPart ) ); + return ( (unsigned long)( offset.QuadPart ) ); } #endif /* !HAVE_HARDCLOCK && _MSC_VER && !EFIX64 && !EFI32 */ @@ -226,15 +222,14 @@ unsigned long mbedtls_timing_hardclock( void ) { struct timeval tv_cur; - if( hardclock_init == 0 ) - { + if ( hardclock_init == 0 ) { gettimeofday( &tv_init, NULL ); hardclock_init = 1; } gettimeofday( &tv_cur, NULL ); - return( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 - + ( tv_cur.tv_usec - tv_init.tv_usec ) ); + return ( ( tv_cur.tv_sec - tv_init.tv_sec ) * 1000000 + + ( tv_cur.tv_usec - tv_init.tv_usec ) ); } #endif /* !HAVE_HARDCLOCK */ @@ -252,13 +247,13 @@ unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int QueryPerformanceFrequency( &hfreq ); delta = (unsigned long)( ( 1000 * - ( offset.QuadPart - t->start.QuadPart ) ) / - hfreq.QuadPart ); + ( offset.QuadPart - t->start.QuadPart ) ) / + hfreq.QuadPart ); - if( reset ) + if ( reset ) QueryPerformanceCounter( &t->start ); - return( delta ); + return ( delta ); } /* It's OK to use a global because alarm() is supposed to be global anyway */ @@ -269,7 +264,7 @@ static DWORD WINAPI TimerProc( LPVOID TimerContext ) ((void) TimerContext); Sleep( alarmMs ); mbedtls_timing_alarmed = 1; - return( TRUE ); + return ( TRUE ); } void mbedtls_set_alarm( int seconds ) @@ -291,17 +286,16 @@ unsigned long mbedtls_timing_get_timer( struct mbedtls_timing_hr_time *val, int gettimeofday( &offset, NULL ); - if( reset ) - { + if ( reset ) { t->start.tv_sec = offset.tv_sec; t->start.tv_usec = offset.tv_usec; - return( 0 ); + return ( 0 ); } delta = ( offset.tv_sec - t->start.tv_sec ) * 1000 - + ( offset.tv_usec - t->start.tv_usec ) / 1000; + + ( offset.tv_usec - t->start.tv_usec ) / 1000; - return( delta ); + return ( delta ); } static void sighandler( int signum ) @@ -329,7 +323,7 @@ void mbedtls_timing_set_delay( void *data, uint32_t int_ms, uint32_t fin_ms ) ctx->int_ms = int_ms; ctx->fin_ms = fin_ms; - if( fin_ms != 0 ) + if ( fin_ms != 0 ) (void) mbedtls_timing_get_timer( &ctx->timer, 1 ); } @@ -341,18 +335,18 @@ int mbedtls_timing_get_delay( void *data ) mbedtls_timing_delay_context *ctx = (mbedtls_timing_delay_context *) data; unsigned long elapsed_ms; - if( ctx->fin_ms == 0 ) - return( -1 ); + if ( ctx->fin_ms == 0 ) + return ( -1 ); elapsed_ms = mbedtls_timing_get_timer( &ctx->timer, 0 ); - if( elapsed_ms >= ctx->fin_ms ) - return( 2 ); + if ( elapsed_ms >= ctx->fin_ms ) + return ( 2 ); - if( elapsed_ms >= ctx->int_ms ) - return( 1 ); + if ( elapsed_ms >= ctx->int_ms ) + return ( 1 ); - return( 0 ); + return ( 0 ); } #endif /* !MBEDTLS_TIMING_ALT */ @@ -371,7 +365,7 @@ static void busy_msleep( unsigned long msec ) (void) mbedtls_timing_get_timer( &hires, 1 ); - while( mbedtls_timing_get_timer( &hires, 0 ) < msec ) + while ( mbedtls_timing_get_timer( &hires, 0 ) < msec ) i++; j = i; @@ -401,73 +395,69 @@ int mbedtls_timing_self_test( int verbose ) uint32_t a, b; mbedtls_timing_delay_context ctx; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING tests note: will take some time!\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING test #1 (set_alarm / get_timer): " ); - for( secs = 1; secs <= 3; secs++ ) - { + for ( secs = 1; secs <= 3; secs++ ) { (void) mbedtls_timing_get_timer( &hires, 1 ); mbedtls_set_alarm( (int) secs ); - while( !mbedtls_timing_alarmed ) + while ( !mbedtls_timing_alarmed ) ; millisecs = mbedtls_timing_get_timer( &hires, 0 ); /* For some reason on Windows it looks like alarm has an extra delay * (maybe related to creating a new thread). Allow some room here. */ - if( millisecs < 800 * secs || millisecs > 1200 * secs + 300 ) - { - if( verbose != 0 ) + if ( millisecs < 800 * secs || millisecs > 1200 * secs + 300 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( 1 ); + return ( 1 ); } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING test #2 (set/get_delay ): " ); - for( a = 200; a <= 400; a += 200 ) - { - for( b = 200; b <= 400; b += 200 ) - { + for ( a = 200; a <= 400; a += 200 ) { + for ( b = 200; b <= 400; b += 200 ) { mbedtls_timing_set_delay( &ctx, a, a + b ); busy_msleep( a - a / 8 ); - if( mbedtls_timing_get_delay( &ctx ) != 0 ) + if ( mbedtls_timing_get_delay( &ctx ) != 0 ) FAIL; busy_msleep( a / 4 ); - if( mbedtls_timing_get_delay( &ctx ) != 1 ) + if ( mbedtls_timing_get_delay( &ctx ) != 1 ) FAIL; busy_msleep( b - a / 8 - b / 8 ); - if( mbedtls_timing_get_delay( &ctx ) != 1 ) + if ( mbedtls_timing_get_delay( &ctx ) != 1 ) FAIL; busy_msleep( b / 4 ); - if( mbedtls_timing_get_delay( &ctx ) != 2 ) + if ( mbedtls_timing_get_delay( &ctx ) != 2 ) FAIL; } } mbedtls_timing_set_delay( &ctx, 0, 0 ); busy_msleep( 200 ); - if( mbedtls_timing_get_delay( &ctx ) != -1 ) + if ( mbedtls_timing_get_delay( &ctx ) != -1 ) FAIL; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " TIMING test #3 (hardclock / get_timer): " ); /* @@ -478,9 +468,8 @@ int mbedtls_timing_self_test( int verbose ) hardfail = 0; hard_test: - if( hardfail > 1 ) - { - if( verbose != 0 ) + if ( hardfail > 1 ) { + if ( verbose != 0 ) mbedtls_printf( "failed (ignored)\n" ); goto hard_test_done; @@ -494,30 +483,28 @@ int mbedtls_timing_self_test( int verbose ) ratio = cycles / millisecs; /* Check that the ratio is mostly constant */ - for( millisecs = 2; millisecs <= 4; millisecs++ ) - { + for ( millisecs = 2; millisecs <= 4; millisecs++ ) { cycles = mbedtls_timing_hardclock(); busy_msleep( millisecs ); cycles = mbedtls_timing_hardclock() - cycles; /* Allow variation up to 20% */ - if( cycles / millisecs < ratio - ratio / 5 || - cycles / millisecs > ratio + ratio / 5 ) - { + if ( cycles / millisecs < ratio - ratio / 5 || + cycles / millisecs > ratio + ratio / 5 ) { hardfail++; goto hard_test; } } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); hard_test_done: - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/external_libs/mbedtls/library/version.c b/external_libs/mbedtls/library/version.c index 6ca80d4..1a74f68 100644 --- a/external_libs/mbedtls/library/version.c +++ b/external_libs/mbedtls/library/version.c @@ -32,7 +32,7 @@ unsigned int mbedtls_version_get_number() { - return( MBEDTLS_VERSION_NUMBER ); + return ( MBEDTLS_VERSION_NUMBER ); } void mbedtls_version_get_string( char *string ) diff --git a/external_libs/mbedtls/library/version_features.c b/external_libs/mbedtls/library/version_features.c index e866e67..1cdf9f5 100644 --- a/external_libs/mbedtls/library/version_features.c +++ b/external_libs/mbedtls/library/version_features.c @@ -629,19 +629,18 @@ int mbedtls_version_check_feature( const char *feature ) { const char **idx = features; - if( *idx == NULL ) - return( -2 ); + if ( *idx == NULL ) + return ( -2 ); - if( feature == NULL ) - return( -1 ); + if ( feature == NULL ) + return ( -1 ); - while( *idx != NULL ) - { - if( !strcmp( *idx, feature ) ) - return( 0 ); + while ( *idx != NULL ) { + if ( !strcmp( *idx, feature ) ) + return ( 0 ); idx++; } - return( -1 ); + return ( -1 ); } #endif /* MBEDTLS_VERSION_C */ diff --git a/external_libs/mbedtls/library/x509.c b/external_libs/mbedtls/library/x509.c index fad390d..0ee1c8f 100644 --- a/external_libs/mbedtls/library/x509.c +++ b/external_libs/mbedtls/library/x509.c @@ -86,28 +86,28 @@ * CertificateSerialNumber ::= INTEGER */ int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *serial ) + mbedtls_x509_buf *serial ) { int ret; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_SERIAL + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_SERIAL + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( **p != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_PRIMITIVE | 2 ) && - **p != MBEDTLS_ASN1_INTEGER ) - return( MBEDTLS_ERR_X509_INVALID_SERIAL + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( **p != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_PRIMITIVE | 2 ) && + **p != MBEDTLS_ASN1_INTEGER ) + return ( MBEDTLS_ERR_X509_INVALID_SERIAL + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); serial->tag = *(*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &serial->len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_SERIAL + ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, &serial->len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_SERIAL + ret ); serial->p = *p; *p += serial->len; - return( 0 ); + return ( 0 ); } /* Get an algorithm identifier without parameters (eg for signatures) @@ -117,28 +117,28 @@ int mbedtls_x509_get_serial( unsigned char **p, const unsigned char *end, * parameters ANY DEFINED BY algorithm OPTIONAL } */ int mbedtls_x509_get_alg_null( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *alg ) + mbedtls_x509_buf *alg ) { int ret; - if( ( ret = mbedtls_asn1_get_alg_null( p, end, alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_alg_null( p, end, alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - return( 0 ); + return ( 0 ); } /* * Parse an algorithm identifier with (optional) paramaters */ int mbedtls_x509_get_alg( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *alg, mbedtls_x509_buf *params ) + mbedtls_x509_buf *alg, mbedtls_x509_buf *params ) { int ret; - if( ( ret = mbedtls_asn1_get_alg( p, end, alg, params ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_alg( p, end, alg, params ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) @@ -160,42 +160,42 @@ static int x509_get_hash_alg( const mbedtls_x509_buf *alg, mbedtls_md_type_t *md size_t len; /* Make sure we got a SEQUENCE and setup bounds */ - if( alg->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( alg->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); p = (unsigned char *) alg->p; end = p + alg->len; - if( p >= end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( p >= end ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); /* Parse md_oid */ md_oid.tag = *p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &md_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &md_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); md_oid.p = p; p += md_oid.len; /* Get md_alg from md_oid */ - if( ( ret = mbedtls_oid_get_md_alg( &md_oid, md_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_oid_get_md_alg( &md_oid, md_alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); /* Make sure params is absent of NULL */ - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_NULL ) ) != 0 || len != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, MBEDTLS_ASN1_NULL ) ) != 0 || len != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -211,8 +211,8 @@ static int x509_get_hash_alg( const mbedtls_x509_buf *alg, mbedtls_md_type_t *md * option. Enfore this at parsing time. */ int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, - mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, - int *salt_len ) + mbedtls_md_type_t *md_alg, mbedtls_md_type_t *mgf_md, + int *salt_len ) { int ret; unsigned char *p; @@ -226,121 +226,113 @@ int mbedtls_x509_get_rsassa_pss_params( const mbedtls_x509_buf *params, *salt_len = 20; /* Make sure params is a SEQUENCE and setup bounds */ - if( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( params->tag != ( MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); p = (unsigned char *) params->p; end = p + params->len; - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * HashAlgorithm */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) == 0 ) { end2 = p + len; /* HashAlgorithm ::= AlgorithmIdentifier (without parameters) */ - if( ( ret = mbedtls_x509_get_alg_null( &p, end2, &alg_id ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_alg_null( &p, end2, &alg_id ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_oid_get_md_alg( &alg_id, md_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_oid_get_md_alg( &alg_id, md_alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * MaskGenAlgorithm */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 1 ) ) == 0 ) { end2 = p + len; /* MaskGenAlgorithm ::= AlgorithmIdentifier (params = HashAlgorithm) */ - if( ( ret = mbedtls_x509_get_alg( &p, end2, &alg_id, &alg_params ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_alg( &p, end2, &alg_id, &alg_params ) ) != 0 ) + return ( ret ); /* Only MFG1 is recognised for now */ - if( MBEDTLS_OID_CMP( MBEDTLS_OID_MGF1, &alg_id ) != 0 ) - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE + - MBEDTLS_ERR_OID_NOT_FOUND ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_MGF1, &alg_id ) != 0 ) + return ( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE + + MBEDTLS_ERR_OID_NOT_FOUND ); /* Parse HashAlgorithm */ - if( ( ret = x509_get_hash_alg( &alg_params, mgf_md ) ) != 0 ) - return( ret ); + if ( ( ret = x509_get_hash_alg( &alg_params, mgf_md ) ) != 0 ) + return ( ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * salt_len */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 2 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 2 ) ) == 0 ) { end2 = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end2, salt_len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end2, salt_len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p == end ) - return( 0 ); + if ( p == end ) + return ( 0 ); /* * trailer_field (if present, must be 1) */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 3 ) ) == 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 3 ) ) == 0 ) { int trailer_field; end2 = p + len; - if( ( ret = mbedtls_asn1_get_int( &p, end2, &trailer_field ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( ( ret = mbedtls_asn1_get_int( &p, end2, &trailer_field ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end2 ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end2 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - if( trailer_field != 1 ) - return( MBEDTLS_ERR_X509_INVALID_ALG ); - } - else if( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( MBEDTLS_ERR_X509_INVALID_ALG + ret ); + if ( trailer_field != 1 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG ); + } else if ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + ret ); - if( p != end ) - return( MBEDTLS_ERR_X509_INVALID_ALG + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( p != end ) + return ( MBEDTLS_ERR_X509_INVALID_ALG + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ @@ -362,46 +354,46 @@ static int x509_get_attr_type_value( unsigned char **p, mbedtls_x509_buf *oid; mbedtls_x509_buf *val; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); oid = &cur->oid; oid->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &oid->len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &oid->len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); oid->p = *p; *p += oid->len; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - if( **p != MBEDTLS_ASN1_BMP_STRING && **p != MBEDTLS_ASN1_UTF8_STRING && - **p != MBEDTLS_ASN1_T61_STRING && **p != MBEDTLS_ASN1_PRINTABLE_STRING && - **p != MBEDTLS_ASN1_IA5_STRING && **p != MBEDTLS_ASN1_UNIVERSAL_STRING && - **p != MBEDTLS_ASN1_BIT_STRING ) - return( MBEDTLS_ERR_X509_INVALID_NAME + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( **p != MBEDTLS_ASN1_BMP_STRING && **p != MBEDTLS_ASN1_UTF8_STRING && + **p != MBEDTLS_ASN1_T61_STRING && **p != MBEDTLS_ASN1_PRINTABLE_STRING && + **p != MBEDTLS_ASN1_IA5_STRING && **p != MBEDTLS_ASN1_UNIVERSAL_STRING && + **p != MBEDTLS_ASN1_BIT_STRING ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); val = &cur->val; val->tag = *(*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &val->len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, &val->len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); val->p = *p; *p += val->len; cur->next = NULL; - return( 0 ); + return ( 0 ); } /* @@ -428,30 +420,28 @@ static int x509_get_attr_type_value( unsigned char **p, * this list, eg mbedtls_x509_dn_gets(). */ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, - mbedtls_x509_name *cur ) + mbedtls_x509_name *cur ) { int ret; size_t set_len; const unsigned char *end_set; /* don't use recursion, we'd risk stack overflow if not optimized */ - while( 1 ) - { + while ( 1 ) { /* * parse SET */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &set_len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SET ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_NAME + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &set_len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SET ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_NAME + ret ); end_set = *p + set_len; - while( 1 ) - { - if( ( ret = x509_get_attr_type_value( p, end_set, cur ) ) != 0 ) - return( ret ); + while ( 1 ) { + if ( ( ret = x509_get_attr_type_value( p, end_set, cur ) ) != 0 ) + return ( ret ); - if( *p == end_set ) + if ( *p == end_set ) break; /* Mark this item as being no the only one in a set */ @@ -459,8 +449,8 @@ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, cur->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_name ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); cur = cur->next; } @@ -468,22 +458,23 @@ int mbedtls_x509_get_name( unsigned char **p, const unsigned char *end, /* * continue until end of SEQUENCE is reached */ - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); cur->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_name ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); cur = cur->next; } } -static int x509_parse_int(unsigned char **p, unsigned n, int *res){ +static int x509_parse_int(unsigned char **p, unsigned n, int *res) +{ *res = 0; - for( ; n > 0; --n ){ - if( ( **p < '0') || ( **p > '9' ) ) return MBEDTLS_ERR_X509_INVALID_DATE; + for ( ; n > 0; --n ) { + if ( ( **p < '0') || ( **p > '9' ) ) return MBEDTLS_ERR_X509_INVALID_DATE; *res *= 10; *res += (*(*p)++ - '0'); } @@ -499,22 +490,30 @@ static int x509_date_is_valid(const mbedtls_x509_time *time) CHECK_RANGE( 0, 59, time->min ); CHECK_RANGE( 0, 59, time->sec ); - switch( time->mon ) - { - case 1: case 3: case 5: case 7: case 8: case 10: case 12: + switch ( time->mon ) { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: CHECK_RANGE( 1, 31, time->day ); break; - case 4: case 6: case 9: case 11: + case 4: + case 6: + case 9: + case 11: CHECK_RANGE( 1, 30, time->day ); break; case 2: CHECK_RANGE( 1, 28 + (time->year % 4 == 0), time->day ); break; default: - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -523,68 +522,64 @@ static int x509_date_is_valid(const mbedtls_x509_time *time) * generalTime GeneralizedTime } */ int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, - mbedtls_x509_time *time ) + mbedtls_x509_time *time ) { int ret; size_t len; unsigned char tag; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); tag = **p; - if( tag == MBEDTLS_ASN1_UTC_TIME ) - { + if ( tag == MBEDTLS_ASN1_UTC_TIME ) { (*p)++; ret = mbedtls_asn1_get_len( p, end, &len ); - if( ret != 0 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + ret ); CHECK( x509_parse_int( p, 2, &time->year ) ); CHECK( x509_parse_int( p, 2, &time->mon ) ); CHECK( x509_parse_int( p, 2, &time->day ) ); CHECK( x509_parse_int( p, 2, &time->hour ) ); CHECK( x509_parse_int( p, 2, &time->min ) ); - if( len > 10 ) + if ( len > 10 ) CHECK( x509_parse_int( p, 2, &time->sec ) ); - if( len > 12 && *(*p)++ != 'Z' ) - return( MBEDTLS_ERR_X509_INVALID_DATE ); + if ( len > 12 && *(*p)++ != 'Z' ) + return ( MBEDTLS_ERR_X509_INVALID_DATE ); time->year += 100 * ( time->year < 50 ); time->year += 1900; CHECK( x509_date_is_valid( time ) ); - return( 0 ); - } - else if( tag == MBEDTLS_ASN1_GENERALIZED_TIME ) - { + return ( 0 ); + } else if ( tag == MBEDTLS_ASN1_GENERALIZED_TIME ) { (*p)++; ret = mbedtls_asn1_get_len( p, end, &len ); - if( ret != 0 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + ret ); CHECK( x509_parse_int( p, 4, &time->year ) ); CHECK( x509_parse_int( p, 2, &time->mon ) ); CHECK( x509_parse_int( p, 2, &time->day ) ); CHECK( x509_parse_int( p, 2, &time->hour ) ); CHECK( x509_parse_int( p, 2, &time->min ) ); - if( len > 12 ) + if ( len > 12 ) CHECK( x509_parse_int( p, 2, &time->sec ) ); - if( len > 14 && *(*p)++ != 'Z' ) - return( MBEDTLS_ERR_X509_INVALID_DATE ); + if ( len > 14 && *(*p)++ != 'Z' ) + return ( MBEDTLS_ERR_X509_INVALID_DATE ); CHECK( x509_date_is_valid( time ) ); - return( 0 ); - } - else - return( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + return ( 0 ); + } else + return ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x509_buf *sig ) @@ -593,14 +588,14 @@ int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x size_t len; int tag_type; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_SIGNATURE + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_SIGNATURE + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); tag_type = **p; - if( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_SIGNATURE + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_SIGNATURE + ret ); sig->tag = tag_type; sig->len = len; @@ -608,55 +603,52 @@ int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x *p += len; - return( 0 ); + return ( 0 ); } /* * Get signature algorithm from alg OID and optional parameters */ int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x509_buf *sig_params, - mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, - void **sig_opts ) + mbedtls_md_type_t *md_alg, mbedtls_pk_type_t *pk_alg, + void **sig_opts ) { int ret; - if( *sig_opts != NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( *sig_opts != NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - if( ( ret = mbedtls_oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 ) - return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + ret ); + if ( ( ret = mbedtls_oid_get_sig_alg( sig_oid, md_alg, pk_alg ) ) != 0 ) + return ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + ret ); #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - if( *pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { + if ( *pk_alg == MBEDTLS_PK_RSASSA_PSS ) { mbedtls_pk_rsassa_pss_options *pss_opts; pss_opts = mbedtls_calloc( 1, sizeof( mbedtls_pk_rsassa_pss_options ) ); - if( pss_opts == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( pss_opts == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); ret = mbedtls_x509_get_rsassa_pss_params( sig_params, - md_alg, - &pss_opts->mgf1_hash_id, - &pss_opts->expected_salt_len ); - if( ret != 0 ) - { + md_alg, + &pss_opts->mgf1_hash_id, + &pss_opts->expected_salt_len ); + if ( ret != 0 ) { mbedtls_free( pss_opts ); - return( ret ); + return ( ret ); } *sig_opts = (void *) pss_opts; - } - else + } else #endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ { /* Make sure parameters are absent or NULL */ - if( ( sig_params->tag != MBEDTLS_ASN1_NULL && sig_params->tag != 0 ) || - sig_params->len != 0 ) - return( MBEDTLS_ERR_X509_INVALID_ALG ); + if ( ( sig_params->tag != MBEDTLS_ASN1_NULL && sig_params->tag != 0 ) || + sig_params->len != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_ALG ); } - return( 0 ); + return ( 0 ); } /* @@ -664,19 +656,19 @@ int mbedtls_x509_get_sig_alg( const mbedtls_x509_buf *sig_oid, const mbedtls_x50 * be either manually updated or extensions should be parsed! */ int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, - mbedtls_x509_buf *ext, int tag ) + mbedtls_x509_buf *ext, int tag ) { int ret; size_t len; - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); ext->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | tag ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | tag ) ) != 0 ) + return ( ret ); ext->p = *p; end = *p + ext->len; @@ -689,15 +681,15 @@ int mbedtls_x509_get_ext( unsigned char **p, const unsigned char *end, * critical BOOLEAN DEFAULT FALSE, * extnValue OCTET STRING } */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( end != *p + len ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( end != *p + len ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -719,36 +711,32 @@ int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ) p = buf; n = size; - while( name != NULL ) - { - if( !name->oid.p ) - { + while ( name != NULL ) { + if ( !name->oid.p ) { name = name->next; continue; } - if( name != dn ) - { + if ( name != dn ) { ret = mbedtls_snprintf( p, n, merge ? " + " : ", " ); MBEDTLS_X509_SAFE_SNPRINTF; } ret = mbedtls_oid_get_attr_short_name( &name->oid, &short_name ); - if( ret == 0 ) + if ( ret == 0 ) ret = mbedtls_snprintf( p, n, "%s=", short_name ); else ret = mbedtls_snprintf( p, n, "\?\?=" ); MBEDTLS_X509_SAFE_SNPRINTF; - for( i = 0; i < name->val.len; i++ ) - { - if( i >= sizeof( s ) - 1 ) + for ( i = 0; i < name->val.len; i++ ) { + if ( i >= sizeof( s ) - 1 ) break; c = name->val.p[i]; - if( c < 32 || c == 127 || ( c > 128 && c < 160 ) ) - s[i] = '?'; + if ( c < 32 || c == 127 || ( c > 128 && c < 160 ) ) + s[i] = '?'; else s[i] = c; } s[i] = '\0'; @@ -759,7 +747,7 @@ int mbedtls_x509_dn_gets( char *buf, size_t size, const mbedtls_x509_name *dn ) name = name->next; } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* @@ -776,33 +764,31 @@ int mbedtls_x509_serial_gets( char *buf, size_t size, const mbedtls_x509_buf *se n = size; nr = ( serial->len <= 32 ) - ? serial->len : 28; + ? serial->len : 28; - for( i = 0; i < nr; i++ ) - { - if( i == 0 && nr > 1 && serial->p[i] == 0x0 ) + for ( i = 0; i < nr; i++ ) { + if ( i == 0 && nr > 1 && serial->p[i] == 0x0 ) continue; ret = mbedtls_snprintf( p, n, "%02X%s", - serial->p[i], ( i < nr - 1 ) ? ":" : "" ); + serial->p[i], ( i < nr - 1 ) ? ":" : "" ); MBEDTLS_X509_SAFE_SNPRINTF; } - if( nr != serial->len ) - { + if ( nr != serial->len ) { ret = mbedtls_snprintf( p, n, "...." ); MBEDTLS_X509_SAFE_SNPRINTF; } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* * Helper for writing signature algorithms */ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *sig_oid, - mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, - const void *sig_opts ) + mbedtls_pk_type_t pk_alg, mbedtls_md_type_t md_alg, + const void *sig_opts ) { int ret; char *p = buf; @@ -810,15 +796,14 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s const char *desc = NULL; ret = mbedtls_oid_get_sig_alg_desc( sig_oid, &desc ); - if( ret != 0 ) + if ( ret != 0 ) ret = mbedtls_snprintf( p, n, "???" ); else ret = mbedtls_snprintf( p, n, "%s", desc ); MBEDTLS_X509_SAFE_SNPRINTF; #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) - if( pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { + if ( pk_alg == MBEDTLS_PK_RSASSA_PSS ) { const mbedtls_pk_rsassa_pss_options *pss_opts; const mbedtls_md_info_t *md_info, *mgf_md_info; @@ -828,9 +813,9 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s mgf_md_info = mbedtls_md_info_from_type( pss_opts->mgf1_hash_id ); ret = mbedtls_snprintf( p, n, " (%s, MGF1-%s, 0x%02X)", - md_info ? mbedtls_md_get_name( md_info ) : "???", - mgf_md_info ? mbedtls_md_get_name( mgf_md_info ) : "???", - pss_opts->expected_salt_len ); + md_info ? mbedtls_md_get_name( md_info ) : "???", + mgf_md_info ? mbedtls_md_get_name( mgf_md_info ) : "???", + pss_opts->expected_salt_len ); MBEDTLS_X509_SAFE_SNPRINTF; } #else @@ -839,7 +824,7 @@ int mbedtls_x509_sig_alg_gets( char *buf, size_t size, const mbedtls_x509_buf *s ((void) sig_opts); #endif /* MBEDTLS_X509_RSASSA_PSS_SUPPORT */ - return( (int)( size - n ) ); + return ( (int)( size - n ) ); } /* @@ -854,7 +839,7 @@ int mbedtls_x509_key_size_helper( char *buf, size_t buf_size, const char *name ) ret = mbedtls_snprintf( p, n, "%s key size", name ); MBEDTLS_X509_SAFE_SNPRINTF; - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_HAVE_TIME_DATE) @@ -876,7 +861,7 @@ static int x509_get_current_time( mbedtls_x509_time *now ) now->min = st.wMinute; now->sec = st.wSecond; - return( 0 ); + return ( 0 ); } #else static int x509_get_current_time( mbedtls_x509_time *now ) @@ -886,17 +871,16 @@ static int x509_get_current_time( mbedtls_x509_time *now ) int ret = 0; #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_lock( &mbedtls_threading_gmtime_mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_lock( &mbedtls_threading_gmtime_mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif tt = mbedtls_time( NULL ); lt = gmtime( &tt ); - if( lt == NULL ) + if ( lt == NULL ) ret = -1; - else - { + else { now->year = lt->tm_year + 1900; now->mon = lt->tm_mon + 1; now->day = lt->tm_mday; @@ -906,11 +890,11 @@ static int x509_get_current_time( mbedtls_x509_time *now ) } #if defined(MBEDTLS_THREADING_C) - if( mbedtls_mutex_unlock( &mbedtls_threading_gmtime_mutex ) != 0 ) - return( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); + if ( mbedtls_mutex_unlock( &mbedtls_threading_gmtime_mutex ) != 0 ) + return ( MBEDTLS_ERR_THREADING_MUTEX_ERROR ); #endif - return( ret ); + return ( ret ); } #endif /* _WIN32 && !EFIX64 && !EFI32 */ @@ -919,60 +903,60 @@ static int x509_get_current_time( mbedtls_x509_time *now ) */ static int x509_check_time( const mbedtls_x509_time *before, const mbedtls_x509_time *after ) { - if( before->year > after->year ) - return( 1 ); - - if( before->year == after->year && - before->mon > after->mon ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day > after->day ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour > after->hour ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour == after->hour && - before->min > after->min ) - return( 1 ); - - if( before->year == after->year && - before->mon == after->mon && - before->day == after->day && - before->hour == after->hour && - before->min == after->min && - before->sec > after->sec ) - return( 1 ); - - return( 0 ); + if ( before->year > after->year ) + return ( 1 ); + + if ( before->year == after->year && + before->mon > after->mon ) + return ( 1 ); + + if ( before->year == after->year && + before->mon == after->mon && + before->day > after->day ) + return ( 1 ); + + if ( before->year == after->year && + before->mon == after->mon && + before->day == after->day && + before->hour > after->hour ) + return ( 1 ); + + if ( before->year == after->year && + before->mon == after->mon && + before->day == after->day && + before->hour == after->hour && + before->min > after->min ) + return ( 1 ); + + if ( before->year == after->year && + before->mon == after->mon && + before->day == after->day && + before->hour == after->hour && + before->min == after->min && + before->sec > after->sec ) + return ( 1 ); + + return ( 0 ); } int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) { mbedtls_x509_time now; - if( x509_get_current_time( &now ) != 0 ) - return( 1 ); + if ( x509_get_current_time( &now ) != 0 ) + return ( 1 ); - return( x509_check_time( &now, to ) ); + return ( x509_check_time( &now, to ) ); } int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) { mbedtls_x509_time now; - if( x509_get_current_time( &now ) != 0 ) - return( 1 ); + if ( x509_get_current_time( &now ) != 0 ) + return ( 1 ); - return( x509_check_time( from, &now ) ); + return ( x509_check_time( from, &now ) ); } #else /* MBEDTLS_HAVE_TIME_DATE */ @@ -980,13 +964,13 @@ int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) int mbedtls_x509_time_is_past( const mbedtls_x509_time *to ) { ((void) to); - return( 0 ); + return ( 0 ); } int mbedtls_x509_time_is_future( const mbedtls_x509_time *from ) { ((void) from); - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_HAVE_TIME_DATE */ @@ -1006,55 +990,52 @@ int mbedtls_x509_self_test( int verbose ) mbedtls_x509_crt cacert; mbedtls_x509_crt clicert; - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( " X.509 certificate load: " ); mbedtls_x509_crt_init( &clicert ); ret = mbedtls_x509_crt_parse( &clicert, (const unsigned char *) mbedtls_test_cli_crt, - mbedtls_test_cli_crt_len ); - if( ret != 0 ) - { - if( verbose != 0 ) + mbedtls_test_cli_crt_len ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); + return ( ret ); } mbedtls_x509_crt_init( &cacert ); ret = mbedtls_x509_crt_parse( &cacert, (const unsigned char *) mbedtls_test_ca_crt, - mbedtls_test_ca_crt_len ); - if( ret != 0 ) - { - if( verbose != 0 ) + mbedtls_test_ca_crt_len ); + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); + return ( ret ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n X.509 signature verify: "); ret = mbedtls_x509_crt_verify( &clicert, &cacert, NULL, NULL, &flags, NULL, NULL ); - if( ret != 0 ) - { - if( verbose != 0 ) + if ( ret != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); - return( ret ); + return ( ret ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n\n"); mbedtls_x509_crt_free( &cacert ); mbedtls_x509_crt_free( &clicert ); - return( 0 ); + return ( 0 ); #else ((void) verbose); - return( 0 ); + return ( 0 ); #endif /* MBEDTLS_CERTS_C && MBEDTLS_SHA1_C */ } diff --git a/external_libs/mbedtls/library/x509_create.c b/external_libs/mbedtls/library/x509_create.c index df20ec8..b131206 100644 --- a/external_libs/mbedtls/library/x509_create.c +++ b/external_libs/mbedtls/library/x509_create.c @@ -41,8 +41,7 @@ typedef struct { #define ADD_STRLEN( s ) s, sizeof( s ) - 1 -static const x509_attr_descriptor_t x509_attrs[] = -{ +static const x509_attr_descriptor_t x509_attrs[] = { { ADD_STRLEN( "CN" ), MBEDTLS_OID_AT_CN }, { ADD_STRLEN( "commonName" ), MBEDTLS_OID_AT_CN }, { ADD_STRLEN( "C" ), MBEDTLS_OID_AT_COUNTRY }, @@ -78,12 +77,12 @@ static const char *x509_at_oid_from_name( const char *name, size_t name_len ) { const x509_attr_descriptor_t *cur; - for( cur = x509_attrs; cur->name != NULL; cur++ ) - if( cur->name_len == name_len && - strncmp( cur->name, name, name_len ) == 0 ) + for ( cur = x509_attrs; cur->name != NULL; cur++ ) + if ( cur->name_len == name_len && + strncmp( cur->name, name, name_len ) == 0 ) break; - return( cur->oid ); + return ( cur->oid ); } int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *name ) @@ -99,12 +98,9 @@ int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *na /* Clear existing chain if present */ mbedtls_asn1_free_named_data_list( head ); - while( c <= end ) - { - if( in_tag && *c == '=' ) - { - if( ( oid = x509_at_oid_from_name( s, c - s ) ) == NULL ) - { + while ( c <= end ) { + if ( in_tag && *c == '=' ) { + if ( ( oid = x509_at_oid_from_name( s, c - s ) ) == NULL ) { ret = MBEDTLS_ERR_X509_UNKNOWN_OID; goto exit; } @@ -114,39 +110,32 @@ int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *na d = data; } - if( !in_tag && *c == '\\' && c != end ) - { + if ( !in_tag && *c == '\\' && c != end ) { c++; /* Check for valid escaped characters */ - if( c == end || *c != ',' ) - { + if ( c == end || *c != ',' ) { ret = MBEDTLS_ERR_X509_INVALID_NAME; goto exit; } - } - else if( !in_tag && ( *c == ',' || c == end ) ) - { - if( mbedtls_asn1_store_named_data( head, oid, strlen( oid ), - (unsigned char *) data, - d - data ) == NULL ) - { - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + } else if ( !in_tag && ( *c == ',' || c == end ) ) { + if ( mbedtls_asn1_store_named_data( head, oid, strlen( oid ), + (unsigned char *) data, + d - data ) == NULL ) { + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); } - while( c < end && *(c + 1) == ' ' ) + while ( c < end && *(c + 1) == ' ' ) c++; s = c + 1; in_tag = 1; } - if( !in_tag && s != c + 1 ) - { + if ( !in_tag && s != c + 1 ) { *(d++) = *c; - if( d - data == MBEDTLS_X509_MAX_DN_NAME_SIZE ) - { + if ( d - data == MBEDTLS_X509_MAX_DN_NAME_SIZE ) { ret = MBEDTLS_ERR_X509_INVALID_NAME; goto exit; } @@ -157,27 +146,26 @@ int mbedtls_x509_string_to_names( mbedtls_asn1_named_data **head, const char *na exit: - return( ret ); + return ( ret ); } /* The first byte of the value in the mbedtls_asn1_named_data structure is reserved * to store the critical boolean for us */ int mbedtls_x509_set_extension( mbedtls_asn1_named_data **head, const char *oid, size_t oid_len, - int critical, const unsigned char *val, size_t val_len ) + int critical, const unsigned char *val, size_t val_len ) { mbedtls_asn1_named_data *cur; - if( ( cur = mbedtls_asn1_store_named_data( head, oid, oid_len, - NULL, val_len + 1 ) ) == NULL ) - { - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( ( cur = mbedtls_asn1_store_named_data( head, oid, oid_len, + NULL, val_len + 1 ) ) == NULL ) { + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); } cur->val.p[0] = critical; memcpy( cur->val.p + 1, val, val_len ); - return( 0 ); + return ( 0 ); } /* @@ -201,18 +189,15 @@ static int x509_write_name( unsigned char **p, unsigned char *start, // Write PrintableString for all except MBEDTLS_OID_PKCS9_EMAIL // - if( MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_EMAIL ) == oid_len && - memcmp( oid, MBEDTLS_OID_PKCS9_EMAIL, oid_len ) == 0 ) - { + if ( MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_EMAIL ) == oid_len && + memcmp( oid, MBEDTLS_OID_PKCS9_EMAIL, oid_len ) == 0 ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_ia5_string( p, start, - (const char *) name, - name_len ) ); - } - else - { + (const char *) name, + name_len ) ); + } else { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_printable_string( p, start, - (const char *) name, - name_len ) ); + (const char *) name, + name_len ) ); } // Write OID @@ -221,53 +206,52 @@ static int x509_write_name( unsigned char **p, unsigned char *start, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SET ) ); + MBEDTLS_ASN1_SET ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_x509_write_names( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ) + mbedtls_asn1_named_data *first ) { int ret; size_t len = 0; mbedtls_asn1_named_data *cur = first; - while( cur != NULL ) - { + while ( cur != NULL ) { MBEDTLS_ASN1_CHK_ADD( len, x509_write_name( p, start, (char *) cur->oid.p, - cur->oid.len, - cur->val.p, cur->val.len ) ); + cur->oid.len, + cur->val.p, cur->val.len ) ); cur = cur->next; } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } int mbedtls_x509_write_sig( unsigned char **p, unsigned char *start, - const char *oid, size_t oid_len, - unsigned char *sig, size_t size ) + const char *oid, size_t oid_len, + unsigned char *sig, size_t size ) { int ret; size_t len = 0; - if( *p < start || (size_t)( *p - start ) < size ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p < start || (size_t)( *p - start ) < size ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); len = size; (*p) -= len; memcpy( *p, sig, len ); - if( *p - start < 1 ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( *p - start < 1 ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); *--(*p) = 0; len += 1; @@ -278,9 +262,9 @@ int mbedtls_x509_write_sig( unsigned char **p, unsigned char *start, // Write OID // MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( p, start, oid, - oid_len, 0 ) ); + oid_len, 0 ) ); - return( (int) len ); + return ( (int) len ); } static int x509_write_extension( unsigned char **p, unsigned char *start, @@ -290,25 +274,24 @@ static int x509_write_extension( unsigned char **p, unsigned char *start, size_t len = 0; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, ext->val.p + 1, - ext->val.len - 1 ) ); + ext->val.len - 1 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, ext->val.len - 1 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OCTET_STRING ) ); - if( ext->val.p[0] != 0 ) - { + if ( ext->val.p[0] != 0 ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_bool( p, start, 1 ) ); } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, ext->oid.p, - ext->oid.len ) ); + ext->oid.len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, ext->oid.len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_OID ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } /* @@ -322,19 +305,18 @@ static int x509_write_extension( unsigned char **p, unsigned char *start, * } */ int mbedtls_x509_write_extensions( unsigned char **p, unsigned char *start, - mbedtls_asn1_named_data *first ) + mbedtls_asn1_named_data *first ) { int ret; size_t len = 0; mbedtls_asn1_named_data *cur_ext = first; - while( cur_ext != NULL ) - { + while ( cur_ext != NULL ) { MBEDTLS_ASN1_CHK_ADD( len, x509_write_extension( p, start, cur_ext ) ); cur_ext = cur_ext->next; } - return( (int) len ); + return ( (int) len ); } #endif /* MBEDTLS_X509_CREATE_C */ diff --git a/external_libs/mbedtls/library/x509_crl.c b/external_libs/mbedtls/library/x509_crl.c index 7b2b473..843c469 100644 --- a/external_libs/mbedtls/library/x509_crl.c +++ b/external_libs/mbedtls/library/x509_crl.c @@ -67,31 +67,31 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* * Version ::= INTEGER { v1(0), v2(1) } */ static int x509_crl_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) + const unsigned char *end, + int *ver ) { int ret; - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return ( 0 ); } - return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); + return ( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); } - return( 0 ); + return ( 0 ); } /* @@ -105,43 +105,41 @@ static int x509_get_crl_ext( unsigned char **p, size_t len = 0; /* Get explicit tag */ - if( ( ret = mbedtls_x509_get_ext( p, end, ext, 0) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_x509_get_ext( p, end, ext, 0) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } - while( *p < end ) - { - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + while ( *p < end ) { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); *p += len; } - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* * X.509 CRL v2 entry extensions (no extensions parsed yet.) */ static int x509_get_crl_entry_ext( unsigned char **p, - const unsigned char *end, - mbedtls_x509_buf *ext ) + const unsigned char *end, + mbedtls_x509_buf *ext ) { int ret; size_t len = 0; /* OPTIONAL */ - if( end <= *p ) - return( 0 ); + if ( end <= *p ) + return ( 0 ); ext->tag = **p; ext->p = *p; @@ -150,37 +148,34 @@ static int x509_get_crl_entry_ext( unsigned char **p, * Get CRL-entry extension sequence header * crlEntryExtensions Extensions OPTIONAL -- if present, MUST be v2 */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &ext->len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { ext->p = NULL; - return( 0 ); + return ( 0 ); } - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); } end = *p + ext->len; - if( end != *p + ext->len ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( end != *p + ext->len ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) - { - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + while ( *p < end ) { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); *p += len; } - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -194,29 +189,26 @@ static int x509_get_entries( unsigned char **p, size_t entry_len; mbedtls_x509_crl_entry *cur_entry = entry; - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_tag( p, end, &entry_len, - MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &entry_len, + MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } end = *p + entry_len; - while( *p < end ) - { + while ( *p < end ) { size_t len2; const unsigned char *end2; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len2, - MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len2, + MBEDTLS_ASN1_SEQUENCE | MBEDTLS_ASN1_CONSTRUCTED ) ) != 0 ) { + return ( ret ); } cur_entry->raw.tag = **p; @@ -224,36 +216,35 @@ static int x509_get_entries( unsigned char **p, cur_entry->raw.len = len2; end2 = *p + len2; - if( ( ret = mbedtls_x509_get_serial( p, end2, &cur_entry->serial ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_serial( p, end2, &cur_entry->serial ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_x509_get_time( p, end2, - &cur_entry->revocation_date ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_time( p, end2, + &cur_entry->revocation_date ) ) != 0 ) + return ( ret ); - if( ( ret = x509_get_crl_entry_ext( p, end2, - &cur_entry->entry_ext ) ) != 0 ) - return( ret ); + if ( ( ret = x509_get_crl_entry_ext( p, end2, + &cur_entry->entry_ext ) ) != 0 ) + return ( ret ); - if( *p < end ) - { + if ( *p < end ) { cur_entry->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crl_entry ) ); - if( cur_entry->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( cur_entry->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); cur_entry = cur_entry->next; } } - return( 0 ); + return ( 0 ); } /* * Parse one CRLs in DER format and append it to the chained list */ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, - const unsigned char *buf, size_t buflen ) + const unsigned char *buf, size_t buflen ) { int ret; size_t len; @@ -264,8 +255,8 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, /* * Check for valid input */ - if( crl == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( crl == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); memset( &sig_params1, 0, sizeof( mbedtls_x509_buf ) ); memset( &sig_params2, 0, sizeof( mbedtls_x509_buf ) ); @@ -274,17 +265,15 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, /* * Add new CRL on the end of the chain if needed. */ - while( crl->version != 0 && crl->next != NULL ) + while ( crl->version != 0 && crl->next != NULL ) crl = crl->next; - if( crl->version != 0 && crl->next == NULL ) - { + if ( crl->version != 0 && crl->next == NULL ) { crl->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crl ) ); - if( crl->next == NULL ) - { + if ( crl->next == NULL ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); } mbedtls_x509_crl_init( crl->next ); @@ -294,8 +283,8 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, /* * Copy raw DER-encoded CRL */ - if( ( p = mbedtls_calloc( 1, buflen ) ) == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( ( p = mbedtls_calloc( 1, buflen ) ) == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); memcpy( p, buf, buflen ); @@ -310,18 +299,16 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - if( len != (size_t) ( end - p ) ) - { + if ( len != (size_t) ( end - p ) ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } /* @@ -329,11 +316,10 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, */ crl->tbs.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } end = p + len; @@ -345,27 +331,24 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * * signature AlgorithmIdentifier */ - if( ( ret = x509_crl_get_version( &p, end, &crl->version ) ) != 0 || - ( ret = mbedtls_x509_get_alg( &p, end, &crl->sig_oid, &sig_params1 ) ) != 0 ) - { + if ( ( ret = x509_crl_get_version( &p, end, &crl->version ) ) != 0 || + ( ret = mbedtls_x509_get_alg( &p, end, &crl->sig_oid, &sig_params1 ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } crl->version++; - if( crl->version > 2 ) - { + if ( crl->version > 2 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); + return ( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } - if( ( ret = mbedtls_x509_get_sig_alg( &crl->sig_oid, &sig_params1, - &crl->sig_md, &crl->sig_pk, - &crl->sig_opts ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig_alg( &crl->sig_oid, &sig_params1, + &crl->sig_md, &crl->sig_pk, + &crl->sig_opts ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); + return ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); } /* @@ -373,17 +356,15 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, */ crl->issuer_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_x509_get_name( &p, p + len, &crl->issuer ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_name( &p, p + len, &crl->issuer ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } crl->issuer_raw.len = p - crl->issuer_raw.p; @@ -392,21 +373,18 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * thisUpdate Time * nextUpdate Time OPTIONAL */ - if( ( ret = mbedtls_x509_get_time( &p, end, &crl->this_update ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_time( &p, end, &crl->this_update ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_x509_get_time( &p, end, &crl->next_update ) ) != 0 ) - { - if( ret != ( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) && - ret != ( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ) ) - { + if ( ( ret = mbedtls_x509_get_time( &p, end, &crl->next_update ) ) != 0 ) { + if ( ret != ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) && + ret != ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ) ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } } @@ -418,32 +396,28 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * -- if present, MUST be v2 * } OPTIONAL */ - if( ( ret = x509_get_entries( &p, end, &crl->entry ) ) != 0 ) - { + if ( ( ret = x509_get_entries( &p, end, &crl->entry ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } /* * crlExtensions EXPLICIT Extensions OPTIONAL * -- if present, MUST be v2 */ - if( crl->version == 2 ) - { + if ( crl->version == 2 ) { ret = x509_get_crl_ext( &p, end, &crl->crl_ext ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } end = crl->raw.p + crl->raw.len; @@ -452,36 +426,32 @@ int mbedtls_x509_crl_parse_der( mbedtls_x509_crl *chain, * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } - if( crl->sig_oid.len != sig_oid2.len || - memcmp( crl->sig_oid.p, sig_oid2.p, crl->sig_oid.len ) != 0 || - sig_params1.len != sig_params2.len || - ( sig_params1.len != 0 && - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) - { + if ( crl->sig_oid.len != sig_oid2.len || + memcmp( crl->sig_oid.p, sig_oid2.p, crl->sig_oid.len ) != 0 || + sig_params1.len != sig_params2.len || + ( sig_params1.len != 0 && + memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_SIG_MISMATCH ); + return ( MBEDTLS_ERR_X509_SIG_MISMATCH ); } - if( ( ret = mbedtls_x509_get_sig( &p, end, &crl->sig ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig( &p, end, &crl->sig ) ) != 0 ) { mbedtls_x509_crl_free( crl ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crl_free( crl ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return ( 0 ); } /* @@ -495,25 +465,23 @@ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, s mbedtls_pem_context pem; int is_pem = 0; - if( chain == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( chain == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - do - { + do { mbedtls_pem_init( &pem ); // Avoid calling mbedtls_pem_read_buffer() on non-null-terminated // string - if( buflen == 0 || buf[buflen - 1] != '\0' ) + if ( buflen == 0 || buf[buflen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, "-----BEGIN X509 CRL-----", "-----END X509 CRL-----", - buf, NULL, 0, &use_len ); + buf, NULL, 0, &use_len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ @@ -522,29 +490,26 @@ int mbedtls_x509_crl_parse( mbedtls_x509_crl *chain, const unsigned char *buf, s buflen -= use_len; buf += use_len; - if( ( ret = mbedtls_x509_crl_parse_der( chain, - pem.buf, pem.buflen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509_crl_parse_der( chain, + pem.buf, pem.buflen ) ) != 0 ) { + return ( ret ); } mbedtls_pem_free( &pem ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - return( ret ); + return ( ret ); } } /* In the PEM case, buflen is 1 at the end, for the terminated NULL byte. * And a valid CRL cannot be less than 1 byte anyway. */ - while( is_pem && buflen > 1 ); + while ( is_pem && buflen > 1 ); - if( is_pem ) - return( 0 ); + if ( is_pem ) + return ( 0 ); else #endif /* MBEDTLS_PEM_PARSE_C */ - return( mbedtls_x509_crl_parse_der( chain, buf, buflen ) ); + return ( mbedtls_x509_crl_parse_der( chain, buf, buflen ) ); } #if defined(MBEDTLS_FS_IO) @@ -557,15 +522,15 @@ int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_x509_crl_parse( chain, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -578,7 +543,7 @@ int mbedtls_x509_crl_parse_file( mbedtls_x509_crl *chain, const char *path ) * Return an informational string about the CRL. */ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_crl *crl ) + const mbedtls_x509_crl *crl ) { int ret; size_t n; @@ -589,7 +554,7 @@ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, n = size; ret = mbedtls_snprintf( p, n, "%sCRL version : %d", - prefix, crl->version ); + prefix, crl->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sissuer name : ", prefix ); @@ -598,39 +563,38 @@ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sthis update : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crl->this_update.year, crl->this_update.mon, - crl->this_update.day, crl->this_update.hour, - crl->this_update.min, crl->this_update.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crl->this_update.year, crl->this_update.mon, + crl->this_update.day, crl->this_update.hour, + crl->this_update.min, crl->this_update.sec ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%snext update : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crl->next_update.year, crl->next_update.mon, - crl->next_update.day, crl->next_update.hour, - crl->next_update.min, crl->next_update.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crl->next_update.year, crl->next_update.mon, + crl->next_update.day, crl->next_update.hour, + crl->next_update.min, crl->next_update.sec ); MBEDTLS_X509_SAFE_SNPRINTF; entry = &crl->entry; ret = mbedtls_snprintf( p, n, "\n%sRevoked certificates:", - prefix ); + prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - while( entry != NULL && entry->raw.len != 0 ) - { + while ( entry != NULL && entry->raw.len != 0 ) { ret = mbedtls_snprintf( p, n, "\n%sserial number: ", - prefix ); + prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_serial_gets( p, n, &entry->serial ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, " revocation date: " \ - "%04d-%02d-%02d %02d:%02d:%02d", - entry->revocation_date.year, entry->revocation_date.mon, - entry->revocation_date.day, entry->revocation_date.hour, - entry->revocation_date.min, entry->revocation_date.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", + entry->revocation_date.year, entry->revocation_date.mon, + entry->revocation_date.day, entry->revocation_date.hour, + entry->revocation_date.min, entry->revocation_date.sec ); MBEDTLS_X509_SAFE_SNPRINTF; entry = entry->next; @@ -640,13 +604,13 @@ int mbedtls_x509_crl_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_sig_alg_gets( p, n, &crl->sig_oid, crl->sig_pk, crl->sig_md, - crl->sig_opts ); + crl->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* @@ -669,18 +633,16 @@ void mbedtls_x509_crl_free( mbedtls_x509_crl *crl ) mbedtls_x509_crl_entry *entry_cur; mbedtls_x509_crl_entry *entry_prv; - if( crl == NULL ) + if ( crl == NULL ) return; - do - { + do { #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) mbedtls_free( crl_cur->sig_opts ); #endif name_cur = crl_cur->issuer.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); @@ -688,35 +650,30 @@ void mbedtls_x509_crl_free( mbedtls_x509_crl *crl ) } entry_cur = crl_cur->entry.next; - while( entry_cur != NULL ) - { + while ( entry_cur != NULL ) { entry_prv = entry_cur; entry_cur = entry_cur->next; mbedtls_zeroize( entry_prv, sizeof( mbedtls_x509_crl_entry ) ); mbedtls_free( entry_prv ); } - if( crl_cur->raw.p != NULL ) - { + if ( crl_cur->raw.p != NULL ) { mbedtls_zeroize( crl_cur->raw.p, crl_cur->raw.len ); mbedtls_free( crl_cur->raw.p ); } crl_cur = crl_cur->next; - } - while( crl_cur != NULL ); + } while ( crl_cur != NULL ); crl_cur = crl; - do - { + do { crl_prv = crl_cur; crl_cur = crl_cur->next; mbedtls_zeroize( crl_prv, sizeof( mbedtls_x509_crl ) ); - if( crl_prv != crl ) + if ( crl_prv != crl ) mbedtls_free( crl_prv ); - } - while( crl_cur != NULL ); + } while ( crl_cur != NULL ); } #endif /* MBEDTLS_X509_CRL_PARSE_C */ diff --git a/external_libs/mbedtls/library/x509_crt.c b/external_libs/mbedtls/library/x509_crt.c index 60e14f9..8d45507 100644 --- a/external_libs/mbedtls/library/x509_crt.c +++ b/external_libs/mbedtls/library/x509_crt.c @@ -76,15 +76,16 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* * Default profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = { /* Hashes from SHA-1 and above */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA1 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_RIPEMD160 ) | @@ -100,8 +101,7 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_default = /* * Next-default profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = { /* Hashes from SHA-256 and above */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ) | @@ -125,8 +125,7 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_next = /* * NSA Suite B Profile */ -const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = -{ +const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = { /* Only SHA-256 and 384 */ MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA256 ) | MBEDTLS_X509_ID_FLAG( MBEDTLS_MD_SHA384 ), @@ -149,10 +148,10 @@ const mbedtls_x509_crt_profile mbedtls_x509_crt_profile_suiteb = static int x509_profile_check_md_alg( const mbedtls_x509_crt_profile *profile, mbedtls_md_type_t md_alg ) { - if( ( profile->allowed_mds & MBEDTLS_X509_ID_FLAG( md_alg ) ) != 0 ) - return( 0 ); + if ( ( profile->allowed_mds & MBEDTLS_X509_ID_FLAG( md_alg ) ) != 0 ) + return ( 0 ); - return( -1 ); + return ( -1 ); } /* @@ -162,10 +161,10 @@ static int x509_profile_check_md_alg( const mbedtls_x509_crt_profile *profile, static int x509_profile_check_pk_alg( const mbedtls_x509_crt_profile *profile, mbedtls_pk_type_t pk_alg ) { - if( ( profile->allowed_pks & MBEDTLS_X509_ID_FLAG( pk_alg ) ) != 0 ) - return( 0 ); + if ( ( profile->allowed_pks & MBEDTLS_X509_ID_FLAG( pk_alg ) ) != 0 ) + return ( 0 ); - return( -1 ); + return ( -1 ); } /* @@ -177,30 +176,28 @@ static int x509_profile_check_key( const mbedtls_x509_crt_profile *profile, const mbedtls_pk_context *pk ) { #if defined(MBEDTLS_RSA_C) - if( pk_alg == MBEDTLS_PK_RSA || pk_alg == MBEDTLS_PK_RSASSA_PSS ) - { - if( mbedtls_pk_get_bitlen( pk ) >= profile->rsa_min_bitlen ) - return( 0 ); + if ( pk_alg == MBEDTLS_PK_RSA || pk_alg == MBEDTLS_PK_RSASSA_PSS ) { + if ( mbedtls_pk_get_bitlen( pk ) >= profile->rsa_min_bitlen ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif #if defined(MBEDTLS_ECP_C) - if( pk_alg == MBEDTLS_PK_ECDSA || - pk_alg == MBEDTLS_PK_ECKEY || - pk_alg == MBEDTLS_PK_ECKEY_DH ) - { + if ( pk_alg == MBEDTLS_PK_ECDSA || + pk_alg == MBEDTLS_PK_ECKEY || + pk_alg == MBEDTLS_PK_ECKEY_DH ) { mbedtls_ecp_group_id gid = mbedtls_pk_ec( *pk )->grp.id; - if( ( profile->allowed_curves & MBEDTLS_X509_ID_FLAG( gid ) ) != 0 ) - return( 0 ); + if ( ( profile->allowed_curves & MBEDTLS_X509_ID_FLAG( gid ) ) != 0 ) + return ( 0 ); - return( -1 ); + return ( -1 ); } #endif - return( -1 ); + return ( -1 ); } /* @@ -213,28 +210,26 @@ static int x509_get_version( unsigned char **p, int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | 0 ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return ( 0 ); } - return( ret ); + return ( ret ); } end = *p + len; - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); + if ( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_VERSION + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_VERSION + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -250,23 +245,23 @@ static int x509_get_dates( unsigned char **p, int ret; size_t len; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_DATE + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + ret ); end = *p + len; - if( ( ret = mbedtls_x509_get_time( p, end, from ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_time( p, end, from ) ) != 0 ) + return ( ret ); - if( ( ret = mbedtls_x509_get_time( p, end, to ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_get_time( p, end, to ) ) != 0 ) + return ( ret ); - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_DATE + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_DATE + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -278,24 +273,23 @@ static int x509_get_uid( unsigned char **p, { int ret; - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); uid->tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &uid->len, - MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | n ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &uid->len, + MBEDTLS_ASN1_CONTEXT_SPECIFIC | MBEDTLS_ASN1_CONSTRUCTED | n ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } uid->p = *p; *p += uid->len; - return( 0 ); + return ( 0 ); } static int x509_get_basic_constraints( unsigned char **p, @@ -314,57 +308,56 @@ static int x509_get_basic_constraints( unsigned char **p, *ca_istrue = 0; /* DEFAULT FALSE */ *max_pathlen = 0; /* endless */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_bool( p, end, ca_istrue ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + if ( ( ret = mbedtls_asn1_get_bool( p, end, ca_istrue ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ret = mbedtls_asn1_get_int( p, end, ca_istrue ); - if( ret != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ret != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *ca_istrue != 0 ) + if ( *ca_istrue != 0 ) *ca_istrue = 1; } - if( *p == end ) - return( 0 ); + if ( *p == end ) + return ( 0 ); - if( ( ret = mbedtls_asn1_get_int( p, end, max_pathlen ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_int( p, end, max_pathlen ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); (*max_pathlen)++; - return( 0 ); + return ( 0 ); } static int x509_get_ns_cert_type( unsigned char **p, - const unsigned char *end, - unsigned char *ns_cert_type) + const unsigned char *end, + unsigned char *ns_cert_type) { int ret; mbedtls_x509_bitstring bs = { 0, 0, NULL }; - if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( bs.len != 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( bs.len != 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); /* Get actual bitstring */ *ns_cert_type = *bs.p; - return( 0 ); + return ( 0 ); } static int x509_get_key_usage( unsigned char **p, @@ -375,21 +368,20 @@ static int x509_get_key_usage( unsigned char **p, size_t i; mbedtls_x509_bitstring bs = { 0, 0, NULL }; - if( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_bitstring( p, end, &bs ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( bs.len < 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( bs.len < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); /* Get actual bitstring */ *key_usage = 0; - for( i = 0; i < bs.len && i < sizeof( unsigned int ); i++ ) - { - *key_usage |= (unsigned int) bs.p[i] << (8*i); + for ( i = 0; i < bs.len && i < sizeof( unsigned int ); i++ ) { + *key_usage |= (unsigned int) bs.p[i] << (8 * i); } - return( 0 ); + return ( 0 ); } /* @@ -398,20 +390,20 @@ static int x509_get_key_usage( unsigned char **p, * KeyPurposeId ::= OBJECT IDENTIFIER */ static int x509_get_ext_key_usage( unsigned char **p, - const unsigned char *end, - mbedtls_x509_sequence *ext_key_usage) + const unsigned char *end, + mbedtls_x509_sequence *ext_key_usage) { int ret; - if( ( ret = mbedtls_asn1_get_sequence_of( p, end, ext_key_usage, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_sequence_of( p, end, ext_key_usage, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); /* Sequence length must be >= 1 */ - if( ext_key_usage->buf.p == NULL ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_INVALID_LENGTH ); + if ( ext_key_usage->buf.p == NULL ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_INVALID_LENGTH ); - return( 0 ); + return ( 0 ); } /* @@ -451,47 +443,44 @@ static int x509_get_subject_alt_name( unsigned char **p, mbedtls_asn1_sequence *cur = subject_alt_name; /* Get main sequence tag */ - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( *p + len != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p + len != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - while( *p < end ) - { - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + while ( *p < end ) { + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); tag = **p; (*p)++; - if( ( ret = mbedtls_asn1_get_len( p, end, &tag_len ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_len( p, end, &tag_len ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); - if( ( tag & MBEDTLS_ASN1_CONTEXT_SPECIFIC ) != MBEDTLS_ASN1_CONTEXT_SPECIFIC ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + if ( ( tag & MBEDTLS_ASN1_CONTEXT_SPECIFIC ) != MBEDTLS_ASN1_CONTEXT_SPECIFIC ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); /* Skip everything but DNS name */ - if( tag != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | 2 ) ) - { + if ( tag != ( MBEDTLS_ASN1_CONTEXT_SPECIFIC | 2 ) ) { *p += tag_len; continue; } /* Allocate and assign next pointer */ - if( cur->buf.p != NULL ) - { - if( cur->next != NULL ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); + if ( cur->buf.p != NULL ) { + if ( cur->next != NULL ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); cur->next = mbedtls_calloc( 1, sizeof( mbedtls_asn1_sequence ) ); - if( cur->next == NULL ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_ALLOC_FAILED ); + if ( cur->next == NULL ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_ALLOC_FAILED ); cur = cur->next; } @@ -506,11 +495,11 @@ static int x509_get_subject_alt_name( unsigned char **p, /* Set final sequence entry's next pointer to NULL */ cur->next = NULL; - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -525,16 +514,14 @@ static int x509_get_crt_ext( unsigned char **p, size_t len; unsigned char *end_ext_data, *end_ext_octet; - if( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - return( 0 ); + if ( ( ret = mbedtls_x509_get_ext( p, end, &crt->v3_ext, 3 ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) + return ( 0 ); - return( ret ); + return ( ret ); } - while( *p < end ) - { + while ( *p < end ) { /* * Extension ::= SEQUENCE { * extnID OBJECT IDENTIFIER, @@ -545,115 +532,112 @@ static int x509_get_crt_ext( unsigned char **p, int is_critical = 0; /* DEFAULT FALSE */ int ext_type = 0; - if( ( ret = mbedtls_asn1_get_tag( p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); end_ext_data = *p + len; /* Get extension ID */ extn_oid.tag = **p; - if( ( ret = mbedtls_asn1_get_tag( p, end, &extn_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end, &extn_oid.len, MBEDTLS_ASN1_OID ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); extn_oid.p = *p; *p += extn_oid.len; - if( ( end - *p ) < 1 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_OUT_OF_DATA ); + if ( ( end - *p ) < 1 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); /* Get optional critical */ - if( ( ret = mbedtls_asn1_get_bool( p, end_ext_data, &is_critical ) ) != 0 && - ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_bool( p, end_ext_data, &is_critical ) ) != 0 && + ( ret != MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); /* Data should be octet string type */ - if( ( ret = mbedtls_asn1_get_tag( p, end_ext_data, &len, - MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); + if ( ( ret = mbedtls_asn1_get_tag( p, end_ext_data, &len, + MBEDTLS_ASN1_OCTET_STRING ) ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + ret ); end_ext_octet = *p + len; - if( end_ext_octet != end_ext_data ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( end_ext_octet != end_ext_data ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); /* * Detect supported extensions */ ret = mbedtls_oid_get_x509_ext_type( &extn_oid, &ext_type ); - if( ret != 0 ) - { + if ( ret != 0 ) { /* No parser found, skip extension */ *p = end_ext_octet; #if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION) - if( is_critical ) - { + if ( is_critical ) { /* Data is marked as critical: fail */ - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ); } #endif continue; } /* Forbid repeated extensions */ - if( ( crt->ext_types & ext_type ) != 0 ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); + if ( ( crt->ext_types & ext_type ) != 0 ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS ); crt->ext_types |= ext_type; - switch( ext_type ) - { - case MBEDTLS_X509_EXT_BASIC_CONSTRAINTS: - /* Parse basic constraints */ - if( ( ret = x509_get_basic_constraints( p, end_ext_octet, - &crt->ca_istrue, &crt->max_pathlen ) ) != 0 ) - return( ret ); - break; + switch ( ext_type ) { + case MBEDTLS_X509_EXT_BASIC_CONSTRAINTS: + /* Parse basic constraints */ + if ( ( ret = x509_get_basic_constraints( p, end_ext_octet, + &crt->ca_istrue, &crt->max_pathlen ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_KEY_USAGE: - /* Parse key usage */ - if( ( ret = x509_get_key_usage( p, end_ext_octet, - &crt->key_usage ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_KEY_USAGE: + /* Parse key usage */ + if ( ( ret = x509_get_key_usage( p, end_ext_octet, + &crt->key_usage ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE: - /* Parse extended key usage */ - if( ( ret = x509_get_ext_key_usage( p, end_ext_octet, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE: + /* Parse extended key usage */ + if ( ( ret = x509_get_ext_key_usage( p, end_ext_octet, + &crt->ext_key_usage ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME: - /* Parse subject alt name */ - if( ( ret = x509_get_subject_alt_name( p, end_ext_octet, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_SUBJECT_ALT_NAME: + /* Parse subject alt name */ + if ( ( ret = x509_get_subject_alt_name( p, end_ext_octet, + &crt->subject_alt_names ) ) != 0 ) + return ( ret ); + break; - case MBEDTLS_X509_EXT_NS_CERT_TYPE: - /* Parse netscape certificate type */ - if( ( ret = x509_get_ns_cert_type( p, end_ext_octet, - &crt->ns_cert_type ) ) != 0 ) - return( ret ); - break; + case MBEDTLS_X509_EXT_NS_CERT_TYPE: + /* Parse netscape certificate type */ + if ( ( ret = x509_get_ns_cert_type( p, end_ext_octet, + &crt->ns_cert_type ) ) != 0 ) + return ( ret ); + break; - default: - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + default: + return ( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); } } - if( *p != end ) - return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + if ( *p != end ) + return ( MBEDTLS_ERR_X509_INVALID_EXTENSIONS + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); - return( 0 ); + return ( 0 ); } /* @@ -674,8 +658,8 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * /* * Check for valid input */ - if( crt == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( crt == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); // Use the original buffer until we figure out actual length p = (unsigned char*) buf; @@ -688,30 +672,28 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - if( len > (size_t) ( end - p ) ) - { + if ( len > (size_t) ( end - p ) ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } crt_end = p + len; // Create and populate a new buffer for the raw field crt->raw.len = crt_end - buf; crt->raw.p = p = mbedtls_calloc( 1, crt->raw.len ); - if( p == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( p == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); memcpy( p, buf, crt->raw.len ); - // Direct pointers to the new buffer + // Direct pointers to the new buffer p += crt->raw.len - len; end = crt_end = p + len; @@ -720,11 +702,10 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * */ crt->tbs.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } end = p + len; @@ -737,29 +718,26 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * * signature AlgorithmIdentifier */ - if( ( ret = x509_get_version( &p, end, &crt->version ) ) != 0 || - ( ret = mbedtls_x509_get_serial( &p, end, &crt->serial ) ) != 0 || - ( ret = mbedtls_x509_get_alg( &p, end, &crt->sig_oid, - &sig_params1 ) ) != 0 ) - { + if ( ( ret = x509_get_version( &p, end, &crt->version ) ) != 0 || + ( ret = mbedtls_x509_get_serial( &p, end, &crt->serial ) ) != 0 || + ( ret = mbedtls_x509_get_alg( &p, end, &crt->sig_oid, + &sig_params1 ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } crt->version++; - if( crt->version > 3 ) - { + if ( crt->version > 3 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); + return ( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } - if( ( ret = mbedtls_x509_get_sig_alg( &crt->sig_oid, &sig_params1, - &crt->sig_md, &crt->sig_pk, - &crt->sig_opts ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig_alg( &crt->sig_oid, &sig_params1, + &crt->sig_md, &crt->sig_pk, + &crt->sig_opts ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } /* @@ -767,17 +745,15 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * */ crt->issuer_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_x509_get_name( &p, p + len, &crt->issuer ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_name( &p, p + len, &crt->issuer ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } crt->issuer_raw.len = p - crt->issuer_raw.p; @@ -788,11 +764,10 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * notAfter Time } * */ - if( ( ret = x509_get_dates( &p, end, &crt->valid_from, - &crt->valid_to ) ) != 0 ) - { + if ( ( ret = x509_get_dates( &p, end, &crt->valid_from, + &crt->valid_to ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } /* @@ -800,17 +775,15 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * */ crt->subject_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( len && ( ret = mbedtls_x509_get_name( &p, p + len, &crt->subject ) ) != 0 ) - { + if ( len && ( ret = mbedtls_x509_get_name( &p, p + len, &crt->subject ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } crt->subject_raw.len = p - crt->subject_raw.p; @@ -818,10 +791,9 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * /* * SubjectPublicKeyInfo */ - if( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &crt->pk ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &crt->pk ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } /* @@ -832,43 +804,37 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * extensions [3] EXPLICIT Extensions OPTIONAL * -- If present, version shall be v3 */ - if( crt->version == 2 || crt->version == 3 ) - { + if ( crt->version == 2 || crt->version == 3 ) { ret = x509_get_uid( &p, end, &crt->issuer_id, 1 ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } } - if( crt->version == 2 || crt->version == 3 ) - { + if ( crt->version == 2 || crt->version == 3 ) { ret = x509_get_uid( &p, end, &crt->subject_id, 2 ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } } #if !defined(MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3) - if( crt->version == 3 ) + if ( crt->version == 3 ) #endif { ret = x509_get_crt_ext( &p, end, crt ); - if( ret != 0 ) - { + if ( ret != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } end = crt_end; @@ -880,36 +846,32 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * signatureAlgorithm AlgorithmIdentifier, * signatureValue BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_alg( &p, end, &sig_oid2, &sig_params2 ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } - if( crt->sig_oid.len != sig_oid2.len || - memcmp( crt->sig_oid.p, sig_oid2.p, crt->sig_oid.len ) != 0 || - sig_params1.len != sig_params2.len || - ( sig_params1.len != 0 && - memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) - { + if ( crt->sig_oid.len != sig_oid2.len || + memcmp( crt->sig_oid.p, sig_oid2.p, crt->sig_oid.len ) != 0 || + sig_params1.len != sig_params2.len || + ( sig_params1.len != 0 && + memcmp( sig_params1.p, sig_params2.p, sig_params1.len ) != 0 ) ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_SIG_MISMATCH ); + return ( MBEDTLS_ERR_X509_SIG_MISMATCH ); } - if( ( ret = mbedtls_x509_get_sig( &p, end, &crt->sig ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig( &p, end, &crt->sig ) ) != 0 ) { mbedtls_x509_crt_free( crt ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_crt_free( crt ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return ( 0 ); } /* @@ -917,7 +879,7 @@ static int x509_crt_parse_der_core( mbedtls_x509_crt *crt, const unsigned char * * chained list */ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *buf, - size_t buflen ) + size_t buflen ) { int ret; mbedtls_x509_crt *crt = chain, *prev = NULL; @@ -925,11 +887,10 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *bu /* * Check for valid input */ - if( crt == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( crt == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - while( crt->version != 0 && crt->next != NULL ) - { + while ( crt->version != 0 && crt->next != NULL ) { prev = crt; crt = crt->next; } @@ -937,30 +898,28 @@ int mbedtls_x509_crt_parse_der( mbedtls_x509_crt *chain, const unsigned char *bu /* * Add new certificate on the end of the chain if needed. */ - if( crt->version != 0 && crt->next == NULL ) - { + if ( crt->version != 0 && crt->next == NULL ) { crt->next = mbedtls_calloc( 1, sizeof( mbedtls_x509_crt ) ); - if( crt->next == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( crt->next == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); prev = crt; mbedtls_x509_crt_init( crt->next ); crt = crt->next; } - if( ( ret = x509_crt_parse_der_core( crt, buf, buflen ) ) != 0 ) - { - if( prev ) + if ( ( ret = x509_crt_parse_der_core( crt, buf, buflen ) ) != 0 ) { + if ( prev ) prev->next = NULL; - if( crt != chain ) + if ( crt != chain ) mbedtls_free( crt ); - return( ret ); + return ( ret ); } - return( 0 ); + return ( 0 ); } /* @@ -977,58 +936,50 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, s /* * Check for valid input */ - if( chain == NULL || buf == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( chain == NULL || buf == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); /* * Determine buffer content. Buffer contains either one DER certificate or * one or more PEM certificates. */ #if defined(MBEDTLS_PEM_PARSE_C) - if( buflen != 0 && buf[buflen - 1] == '\0' && - strstr( (const char *) buf, "-----BEGIN CERTIFICATE-----" ) != NULL ) - { + if ( buflen != 0 && buf[buflen - 1] == '\0' && + strstr( (const char *) buf, "-----BEGIN CERTIFICATE-----" ) != NULL ) { buf_format = MBEDTLS_X509_FORMAT_PEM; } - if( buf_format == MBEDTLS_X509_FORMAT_DER ) + if ( buf_format == MBEDTLS_X509_FORMAT_DER ) return mbedtls_x509_crt_parse_der( chain, buf, buflen ); #else return mbedtls_x509_crt_parse_der( chain, buf, buflen ); #endif #if defined(MBEDTLS_PEM_PARSE_C) - if( buf_format == MBEDTLS_X509_FORMAT_PEM ) - { + if ( buf_format == MBEDTLS_X509_FORMAT_PEM ) { int ret; mbedtls_pem_context pem; /* 1 rather than 0 since the terminating NULL byte is counted in */ - while( buflen > 1 ) - { + while ( buflen > 1 ) { size_t use_len; mbedtls_pem_init( &pem ); /* If we get there, we know the string is null-terminated */ ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN CERTIFICATE-----", - "-----END CERTIFICATE-----", - buf, NULL, 0, &use_len ); + "-----BEGIN CERTIFICATE-----", + "-----END CERTIFICATE-----", + buf, NULL, 0, &use_len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded */ buflen -= use_len; buf += use_len; - } - else if( ret == MBEDTLS_ERR_PEM_BAD_INPUT_DATA ) - { - return( ret ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + } else if ( ret == MBEDTLS_ERR_PEM_BAD_INPUT_DATA ) { + return ( ret ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); /* @@ -1037,28 +988,26 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, s buflen -= use_len; buf += use_len; - if( first_error == 0 ) + if ( first_error == 0 ) first_error = ret; total_failed++; continue; - } - else + } else break; ret = mbedtls_x509_crt_parse_der( chain, pem.buf, pem.buflen ); mbedtls_pem_free( &pem ); - if( ret != 0 ) - { + if ( ret != 0 ) { /* * Quit parsing on a memory error */ - if( ret == MBEDTLS_ERR_X509_ALLOC_FAILED ) - return( ret ); + if ( ret == MBEDTLS_ERR_X509_ALLOC_FAILED ) + return ( ret ); - if( first_error == 0 ) + if ( first_error == 0 ) first_error = ret; total_failed++; @@ -1069,12 +1018,12 @@ int mbedtls_x509_crt_parse( mbedtls_x509_crt *chain, const unsigned char *buf, s } } - if( success ) - return( total_failed ); - else if( first_error ) - return( first_error ); + if ( success ) + return ( total_failed ); + else if ( first_error ) + return ( first_error ); else - return( MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT ); + return ( MBEDTLS_ERR_X509_CERT_UNKNOWN_FORMAT ); #endif /* MBEDTLS_PEM_PARSE_C */ } @@ -1088,15 +1037,15 @@ int mbedtls_x509_crt_parse_file( mbedtls_x509_crt *chain, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_x509_crt_parse( chain, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) @@ -1112,8 +1061,8 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) WIN32_FIND_DATAW file_data; HANDLE hFind; - if( len > MAX_PATH - 3 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( len > MAX_PATH - 3 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); memset( szDir, 0, sizeof(szDir) ); memset( filename, 0, MAX_PATH ); @@ -1124,37 +1073,35 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) w_ret = MultiByteToWideChar( CP_ACP, 0, filename, len, szDir, MAX_PATH - 3 ); - if( w_ret == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( w_ret == 0 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); hFind = FindFirstFileW( szDir, &file_data ); - if( hFind == INVALID_HANDLE_VALUE ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); + if ( hFind == INVALID_HANDLE_VALUE ) + return ( MBEDTLS_ERR_X509_FILE_IO_ERROR ); len = MAX_PATH - len; - do - { + do { memset( p, 0, len ); - if( file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) + if ( file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) continue; w_ret = WideCharToMultiByte( CP_ACP, 0, file_data.cFileName, lstrlenW( file_data.cFileName ), p, (int) len - 1, NULL, NULL ); - if( w_ret == 0 ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); + if ( w_ret == 0 ) + return ( MBEDTLS_ERR_X509_FILE_IO_ERROR ); w_ret = mbedtls_x509_crt_parse_file( chain, filename ); - if( w_ret < 0 ) + if ( w_ret < 0 ) ret++; else ret += w_ret; - } - while( FindNextFileW( hFind, &file_data ) != 0 ); + } while ( FindNextFileW( hFind, &file_data ) != 0 ); - if( GetLastError() != ERROR_NO_MORE_FILES ) + if ( GetLastError() != ERROR_NO_MORE_FILES ) ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; FindClose( hFind ); @@ -1166,40 +1113,35 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) char entry_name[MBEDTLS_X509_MAX_FILE_PATH_LEN]; DIR *dir = opendir( path ); - if( dir == NULL ) - return( MBEDTLS_ERR_X509_FILE_IO_ERROR ); + if ( dir == NULL ) + return ( MBEDTLS_ERR_X509_FILE_IO_ERROR ); #if defined(MBEDTLS_THREADING_PTHREAD) - if( ( ret = mbedtls_mutex_lock( &mbedtls_threading_readdir_mutex ) ) != 0 ) - { + if ( ( ret = mbedtls_mutex_lock( &mbedtls_threading_readdir_mutex ) ) != 0 ) { closedir( dir ); - return( ret ); + return ( ret ); } #endif - while( ( entry = readdir( dir ) ) != NULL ) - { + while ( ( entry = readdir( dir ) ) != NULL ) { snp_ret = mbedtls_snprintf( entry_name, sizeof entry_name, "%s/%s", path, entry->d_name ); - if( snp_ret < 0 || (size_t)snp_ret >= sizeof entry_name ) - { + if ( snp_ret < 0 || (size_t)snp_ret >= sizeof entry_name ) { ret = MBEDTLS_ERR_X509_BUFFER_TOO_SMALL; goto cleanup; - } - else if( stat( entry_name, &sb ) == -1 ) - { + } else if ( stat( entry_name, &sb ) == -1 ) { ret = MBEDTLS_ERR_X509_FILE_IO_ERROR; goto cleanup; } - if( !S_ISREG( sb.st_mode ) ) + if ( !S_ISREG( sb.st_mode ) ) continue; // Ignore parse errors // t_ret = mbedtls_x509_crt_parse_file( chain, entry_name ); - if( t_ret < 0 ) + if ( t_ret < 0 ) ret++; else ret += t_ret; @@ -1209,13 +1151,13 @@ int mbedtls_x509_crt_parse_path( mbedtls_x509_crt *chain, const char *path ) closedir( dir ); #if defined(MBEDTLS_THREADING_PTHREAD) - if( mbedtls_mutex_unlock( &mbedtls_threading_readdir_mutex ) != 0 ) + if ( mbedtls_mutex_unlock( &mbedtls_threading_readdir_mutex ) != 0 ) ret = MBEDTLS_ERR_THREADING_MUTEX_ERROR; #endif #endif /* _WIN32 */ - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -1229,18 +1171,16 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, const char *sep = ""; size_t sep_len = 0; - while( cur != NULL ) - { - if( cur->buf.len + sep_len >= n ) - { + while ( cur != NULL ) { + if ( cur->buf.len + sep_len >= n ) { *p = '\0'; - return( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); + return ( MBEDTLS_ERR_X509_BUFFER_TOO_SMALL ); } n -= cur->buf.len + sep_len; - for( i = 0; i < sep_len; i++ ) + for ( i = 0; i < sep_len; i++ ) *p++ = sep[i]; - for( i = 0; i < cur->buf.len; i++ ) + for ( i = 0; i < cur->buf.len; i++ ) *p++ = cur->buf.p[i]; sep = ", "; @@ -1254,7 +1194,7 @@ static int x509_info_subject_alt_name( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } #define PRINT_ITEM(i) \ @@ -1288,7 +1228,7 @@ static int x509_info_cert_type( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } #define KEY_USAGE(code,name) \ @@ -1316,7 +1256,7 @@ static int x509_info_key_usage( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } static int x509_info_ext_key_usage( char **buf, size_t *size, @@ -1329,9 +1269,8 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, const mbedtls_x509_sequence *cur = extended_key_usage; const char *sep = ""; - while( cur != NULL ) - { - if( mbedtls_oid_get_extended_key_usage( &cur->buf, &desc ) != 0 ) + while ( cur != NULL ) { + if ( mbedtls_oid_get_extended_key_usage( &cur->buf, &desc ) != 0 ) desc = "???"; ret = mbedtls_snprintf( p, n, "%s%s", sep, desc ); @@ -1345,7 +1284,7 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, *size = n; *buf = p; - return( 0 ); + return ( 0 ); } /* @@ -1354,7 +1293,7 @@ static int x509_info_ext_key_usage( char **buf, size_t *size, #define BEFORE_COLON 18 #define BC "18" int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_crt *crt ) + const mbedtls_x509_crt *crt ) { int ret; size_t n; @@ -1364,19 +1303,18 @@ int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, p = buf; n = size; - if( NULL == crt ) - { + if ( NULL == crt ) { ret = mbedtls_snprintf( p, n, "\nCertificate is uninitialised!\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } ret = mbedtls_snprintf( p, n, "%scert. version : %d\n", - prefix, crt->version ); + prefix, crt->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "%sserial number : ", - prefix ); + prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_serial_gets( p, n, &crt->serial ); @@ -1393,96 +1331,89 @@ int mbedtls_x509_crt_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sissued on : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crt->valid_from.year, crt->valid_from.mon, - crt->valid_from.day, crt->valid_from.hour, - crt->valid_from.min, crt->valid_from.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crt->valid_from.year, crt->valid_from.mon, + crt->valid_from.day, crt->valid_from.hour, + crt->valid_from.min, crt->valid_from.sec ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%sexpires on : " \ - "%04d-%02d-%02d %02d:%02d:%02d", prefix, - crt->valid_to.year, crt->valid_to.mon, - crt->valid_to.day, crt->valid_to.hour, - crt->valid_to.min, crt->valid_to.sec ); + "%04d-%02d-%02d %02d:%02d:%02d", prefix, + crt->valid_to.year, crt->valid_to.mon, + crt->valid_to.day, crt->valid_to.hour, + crt->valid_to.min, crt->valid_to.sec ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%ssigned using : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_sig_alg_gets( p, n, &crt->sig_oid, crt->sig_pk, - crt->sig_md, crt->sig_opts ); + crt->sig_md, crt->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; /* Key size */ - if( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, - mbedtls_pk_get_name( &crt->pk ) ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, + mbedtls_pk_get_name( &crt->pk ) ) ) != 0 ) { + return ( ret ); } ret = mbedtls_snprintf( p, n, "\n%s%-" BC "s: %d bits", prefix, key_size_str, - (int) mbedtls_pk_get_bitlen( &crt->pk ) ); + (int) mbedtls_pk_get_bitlen( &crt->pk ) ); MBEDTLS_X509_SAFE_SNPRINTF; /* * Optional extensions */ - if( crt->ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_BASIC_CONSTRAINTS ) { ret = mbedtls_snprintf( p, n, "\n%sbasic constraints : CA=%s", prefix, - crt->ca_istrue ? "true" : "false" ); + crt->ca_istrue ? "true" : "false" ); MBEDTLS_X509_SAFE_SNPRINTF; - if( crt->max_pathlen > 0 ) - { + if ( crt->max_pathlen > 0 ) { ret = mbedtls_snprintf( p, n, ", max_pathlen=%d", crt->max_pathlen - 1 ); MBEDTLS_X509_SAFE_SNPRINTF; } } - if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) { ret = mbedtls_snprintf( p, n, "\n%ssubject alt name : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_subject_alt_name( &p, &n, - &crt->subject_alt_names ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_subject_alt_name( &p, &n, + &crt->subject_alt_names ) ) != 0 ) + return ( ret ); } - if( crt->ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_NS_CERT_TYPE ) { ret = mbedtls_snprintf( p, n, "\n%scert. type : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_cert_type( &p, &n, crt->ns_cert_type ) ) != 0 ) + return ( ret ); } - if( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) { ret = mbedtls_snprintf( p, n, "\n%skey usage : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_key_usage( &p, &n, crt->key_usage ) ) != 0 ) + return ( ret ); } - if( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) { ret = mbedtls_snprintf( p, n, "\n%sext key usage : ", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = x509_info_ext_key_usage( &p, &n, - &crt->ext_key_usage ) ) != 0 ) - return( ret ); + if ( ( ret = x509_info_ext_key_usage( &p, &n, + &crt->ext_key_usage ) ) != 0 ) + return ( ret ); } ret = mbedtls_snprintf( p, n, "\n" ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } struct x509_crt_verify_string { @@ -1515,16 +1446,15 @@ static const struct x509_crt_verify_string x509_crt_verify_strings[] = { }; int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, - uint32_t flags ) + uint32_t flags ) { int ret; const struct x509_crt_verify_string *cur; char *p = buf; size_t n = size; - for( cur = x509_crt_verify_strings; cur->string != NULL ; cur++ ) - { - if( ( flags & cur->code ) == 0 ) + for ( cur = x509_crt_verify_strings; cur->string != NULL ; cur++ ) { + if ( ( flags & cur->code ) == 0 ) continue; ret = mbedtls_snprintf( p, n, "%s%s\n", prefix, cur->string ); @@ -1532,14 +1462,13 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix, flags ^= cur->code; } - if( flags != 0 ) - { + if ( flags != 0 ) { ret = mbedtls_snprintf( p, n, "%sUnknown reason " - "(this should not happen)\n", prefix ); + "(this should not happen)\n", prefix ); MBEDTLS_X509_SAFE_SNPRINTF; } - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) @@ -1548,54 +1477,52 @@ int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt, { unsigned int usage_must, usage_may; unsigned int may_mask = MBEDTLS_X509_KU_ENCIPHER_ONLY - | MBEDTLS_X509_KU_DECIPHER_ONLY; + | MBEDTLS_X509_KU_DECIPHER_ONLY; - if( ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) == 0 ) - return( 0 ); + if ( ( crt->ext_types & MBEDTLS_X509_EXT_KEY_USAGE ) == 0 ) + return ( 0 ); usage_must = usage & ~may_mask; - if( ( ( crt->key_usage & ~may_mask ) & usage_must ) != usage_must ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( ( ( crt->key_usage & ~may_mask ) & usage_must ) != usage_must ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); usage_may = usage & may_mask; - if( ( ( crt->key_usage & may_mask ) | usage_may ) != usage_may ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( ( ( crt->key_usage & may_mask ) | usage_may ) != usage_may ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - return( 0 ); + return ( 0 ); } #endif #if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt, - const char *usage_oid, - size_t usage_len ) + const char *usage_oid, + size_t usage_len ) { const mbedtls_x509_sequence *cur; /* Extension is not mandatory, absent means no restriction */ - if( ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) == 0 ) - return( 0 ); + if ( ( crt->ext_types & MBEDTLS_X509_EXT_EXTENDED_KEY_USAGE ) == 0 ) + return ( 0 ); /* * Look for the requested usage (or wildcard ANY) in our list */ - for( cur = &crt->ext_key_usage; cur != NULL; cur = cur->next ) - { + for ( cur = &crt->ext_key_usage; cur != NULL; cur = cur->next ) { const mbedtls_x509_buf *cur_oid = &cur->buf; - if( cur_oid->len == usage_len && - memcmp( cur_oid->p, usage_oid, usage_len ) == 0 ) - { - return( 0 ); + if ( cur_oid->len == usage_len && + memcmp( cur_oid->p, usage_oid, usage_len ) == 0 ) { + return ( 0 ); } - if( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE, cur_oid ) == 0 ) - return( 0 ); + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_ANY_EXTENDED_KEY_USAGE, cur_oid ) == 0 ) + return ( 0 ); } - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); } #endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */ @@ -1607,19 +1534,17 @@ int mbedtls_x509_crt_is_revoked( const mbedtls_x509_crt *crt, const mbedtls_x509 { const mbedtls_x509_crl_entry *cur = &crl->entry; - while( cur != NULL && cur->serial.len != 0 ) - { - if( crt->serial.len == cur->serial.len && - memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 ) - { - if( mbedtls_x509_time_is_past( &cur->revocation_date ) ) - return( 1 ); + while ( cur != NULL && cur->serial.len != 0 ) { + if ( crt->serial.len == cur->serial.len && + memcmp( crt->serial.p, cur->serial.p, crt->serial.len ) == 0 ) { + if ( mbedtls_x509_time_is_past( &cur->revocation_date ) ) + return ( 1 ); } cur = cur->next; } - return( 0 ); + return ( 0 ); } /* @@ -1634,16 +1559,14 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, unsigned char hash[MBEDTLS_MD_MAX_SIZE]; const mbedtls_md_info_t *md_info; - if( ca == NULL ) - return( flags ); + if ( ca == NULL ) + return ( flags ); - while( crl_list != NULL ) - { - if( crl_list->version == 0 || - crl_list->issuer_raw.len != ca->subject_raw.len || - memcmp( crl_list->issuer_raw.p, ca->subject_raw.p, - crl_list->issuer_raw.len ) != 0 ) - { + while ( crl_list != NULL ) { + if ( crl_list->version == 0 || + crl_list->issuer_raw.len != ca->subject_raw.len || + memcmp( crl_list->issuer_raw.p, ca->subject_raw.p, + crl_list->issuer_raw.len ) != 0 ) { crl_list = crl_list->next; continue; } @@ -1652,8 +1575,7 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, * Check if the CA is configured to sign CRLs */ #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - if( mbedtls_x509_crt_check_key_usage( ca, MBEDTLS_X509_KU_CRL_SIGN ) != 0 ) - { + if ( mbedtls_x509_crt_check_key_usage( ca, MBEDTLS_X509_KU_CRL_SIGN ) != 0 ) { flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } @@ -1662,15 +1584,14 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, /* * Check if CRL is correctly signed by the trusted CA */ - if( x509_profile_check_md_alg( profile, crl_list->sig_md ) != 0 ) + if ( x509_profile_check_md_alg( profile, crl_list->sig_md ) != 0 ) flags |= MBEDTLS_X509_BADCRL_BAD_MD; - if( x509_profile_check_pk_alg( profile, crl_list->sig_pk ) != 0 ) + if ( x509_profile_check_pk_alg( profile, crl_list->sig_pk ) != 0 ) flags |= MBEDTLS_X509_BADCRL_BAD_PK; md_info = mbedtls_md_info_from_type( crl_list->sig_md ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { /* * Cannot check 'unknown' hash */ @@ -1680,13 +1601,12 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, mbedtls_md( md_info, crl_list->tbs.p, crl_list->tbs.len, hash ); - if( x509_profile_check_key( profile, crl_list->sig_pk, &ca->pk ) != 0 ) + if ( x509_profile_check_key( profile, crl_list->sig_pk, &ca->pk ) != 0 ) flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - if( mbedtls_pk_verify_ext( crl_list->sig_pk, crl_list->sig_opts, &ca->pk, - crl_list->sig_md, hash, mbedtls_md_get_size( md_info ), - crl_list->sig.p, crl_list->sig.len ) != 0 ) - { + if ( mbedtls_pk_verify_ext( crl_list->sig_pk, crl_list->sig_opts, &ca->pk, + crl_list->sig_md, hash, mbedtls_md_get_size( md_info ), + crl_list->sig.p, crl_list->sig.len ) != 0 ) { flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED; break; } @@ -1694,17 +1614,16 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, /* * Check for validity of CRL (Do not drop out) */ - if( mbedtls_x509_time_is_past( &crl_list->next_update ) ) + if ( mbedtls_x509_time_is_past( &crl_list->next_update ) ) flags |= MBEDTLS_X509_BADCRL_EXPIRED; - if( mbedtls_x509_time_is_future( &crl_list->this_update ) ) + if ( mbedtls_x509_time_is_future( &crl_list->this_update ) ) flags |= MBEDTLS_X509_BADCRL_FUTURE; /* * Check if certificate is revoked */ - if( mbedtls_x509_crt_is_revoked( crt, crl_list ) ) - { + if ( mbedtls_x509_crt_is_revoked( crt, crl_list ) ) { flags |= MBEDTLS_X509_BADCERT_REVOKED; break; } @@ -1712,7 +1631,7 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca, crl_list = crl_list->next; } - return( flags ); + return ( flags ); } #endif /* MBEDTLS_X509_CRL_PARSE_C */ @@ -1725,24 +1644,22 @@ static int x509_memcasecmp( const void *s1, const void *s2, size_t len ) unsigned char diff; const unsigned char *n1 = s1, *n2 = s2; - for( i = 0; i < len; i++ ) - { + for ( i = 0; i < len; i++ ) { diff = n1[i] ^ n2[i]; - if( diff == 0 ) + if ( diff == 0 ) continue; - if( diff == 32 && - ( ( n1[i] >= 'a' && n1[i] <= 'z' ) || - ( n1[i] >= 'A' && n1[i] <= 'Z' ) ) ) - { + if ( diff == 32 && + ( ( n1[i] >= 'a' && n1[i] <= 'z' ) || + ( n1[i] >= 'A' && n1[i] <= 'Z' ) ) ) { continue; } - return( -1 ); + return ( -1 ); } - return( 0 ); + return ( 0 ); } /* @@ -1753,28 +1670,25 @@ static int x509_check_wildcard( const char *cn, mbedtls_x509_buf *name ) size_t i; size_t cn_idx = 0, cn_len = strlen( cn ); - if( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' ) - return( 0 ); + if ( name->len < 3 || name->p[0] != '*' || name->p[1] != '.' ) + return ( 0 ); - for( i = 0; i < cn_len; ++i ) - { - if( cn[i] == '.' ) - { + for ( i = 0; i < cn_len; ++i ) { + if ( cn[i] == '.' ) { cn_idx = i; break; } } - if( cn_idx == 0 ) - return( -1 ); + if ( cn_idx == 0 ) + return ( -1 ); - if( cn_len - cn_idx == name->len - 1 && - x509_memcasecmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 ) - { - return( 0 ); + if ( cn_len - cn_idx == name->len - 1 && + x509_memcasecmp( name->p + 1, cn + cn_idx, name->len - 1 ) == 0 ) { + return ( 0 ); } - return( -1 ); + return ( -1 ); } /* @@ -1785,22 +1699,20 @@ static int x509_check_wildcard( const char *cn, mbedtls_x509_buf *name ) */ static int x509_string_cmp( const mbedtls_x509_buf *a, const mbedtls_x509_buf *b ) { - if( a->tag == b->tag && - a->len == b->len && - memcmp( a->p, b->p, b->len ) == 0 ) - { - return( 0 ); + if ( a->tag == b->tag && + a->len == b->len && + memcmp( a->p, b->p, b->len ) == 0 ) { + return ( 0 ); } - if( ( a->tag == MBEDTLS_ASN1_UTF8_STRING || a->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && - ( b->tag == MBEDTLS_ASN1_UTF8_STRING || b->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && - a->len == b->len && - x509_memcasecmp( a->p, b->p, b->len ) == 0 ) - { - return( 0 ); + if ( ( a->tag == MBEDTLS_ASN1_UTF8_STRING || a->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && + ( b->tag == MBEDTLS_ASN1_UTF8_STRING || b->tag == MBEDTLS_ASN1_PRINTABLE_STRING ) && + a->len == b->len && + x509_memcasecmp( a->p, b->p, b->len ) == 0 ) { + return ( 0 ); } - return( -1 ); + return ( -1 ); } /* @@ -1816,33 +1728,31 @@ static int x509_string_cmp( const mbedtls_x509_buf *a, const mbedtls_x509_buf *b static int x509_name_cmp( const mbedtls_x509_name *a, const mbedtls_x509_name *b ) { /* Avoid recursion, it might not be optimised by the compiler */ - while( a != NULL || b != NULL ) - { - if( a == NULL || b == NULL ) - return( -1 ); + while ( a != NULL || b != NULL ) { + if ( a == NULL || b == NULL ) + return ( -1 ); /* type */ - if( a->oid.tag != b->oid.tag || - a->oid.len != b->oid.len || - memcmp( a->oid.p, b->oid.p, b->oid.len ) != 0 ) - { - return( -1 ); + if ( a->oid.tag != b->oid.tag || + a->oid.len != b->oid.len || + memcmp( a->oid.p, b->oid.p, b->oid.len ) != 0 ) { + return ( -1 ); } /* value */ - if( x509_string_cmp( &a->val, &b->val ) != 0 ) - return( -1 ); + if ( x509_string_cmp( &a->val, &b->val ) != 0 ) + return ( -1 ); /* structure of the list of sets */ - if( a->next_merged != b->next_merged ) - return( -1 ); + if ( a->next_merged != b->next_merged ) + return ( -1 ); a = a->next; b = b->next; } /* a == NULL == b */ - return( 0 ); + return ( 0 ); } /* @@ -1859,45 +1769,43 @@ static int x509_crt_check_parent( const mbedtls_x509_crt *child, int need_ca_bit; /* Parent must be the issuer */ - if( x509_name_cmp( &child->issuer, &parent->subject ) != 0 ) - return( -1 ); + if ( x509_name_cmp( &child->issuer, &parent->subject ) != 0 ) + return ( -1 ); /* Parent must have the basicConstraints CA bit set as a general rule */ need_ca_bit = 1; /* Exception: v1/v2 certificates that are locally trusted. */ - if( top && parent->version < 3 ) + if ( top && parent->version < 3 ) need_ca_bit = 0; /* Exception: self-signed end-entity certs that are locally trusted. */ - if( top && bottom && - child->raw.len == parent->raw.len && - memcmp( child->raw.p, parent->raw.p, child->raw.len ) == 0 ) - { + if ( top && bottom && + child->raw.len == parent->raw.len && + memcmp( child->raw.p, parent->raw.p, child->raw.len ) == 0 ) { need_ca_bit = 0; } - if( need_ca_bit && ! parent->ca_istrue ) - return( -1 ); + if ( need_ca_bit && ! parent->ca_istrue ) + return ( -1 ); #if defined(MBEDTLS_X509_CHECK_KEY_USAGE) - if( need_ca_bit && - mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 ) - { - return( -1 ); + if ( need_ca_bit && + mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 ) { + return ( -1 ); } #endif - return( 0 ); + return ( 0 ); } static int x509_crt_verify_top( - mbedtls_x509_crt *child, mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - int path_cnt, int self_cnt, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *child, mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + int path_cnt, int self_cnt, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { int ret; uint32_t ca_flags = 0; @@ -1905,16 +1813,16 @@ static int x509_crt_verify_top( unsigned char hash[MBEDTLS_MD_MAX_SIZE]; const mbedtls_md_info_t *md_info; - if( mbedtls_x509_time_is_past( &child->valid_to ) ) + if ( mbedtls_x509_time_is_past( &child->valid_to ) ) *flags |= MBEDTLS_X509_BADCERT_EXPIRED; - if( mbedtls_x509_time_is_future( &child->valid_from ) ) + if ( mbedtls_x509_time_is_future( &child->valid_from ) ) *flags |= MBEDTLS_X509_BADCERT_FUTURE; - if( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) + if ( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_MD; - if( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) + if ( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; /* @@ -1923,19 +1831,16 @@ static int x509_crt_verify_top( *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; md_info = mbedtls_md_info_from_type( child->sig_md ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { /* * Cannot check 'unknown', no need to try any CA */ trust_ca = NULL; - } - else + } else mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ); - for( /* trust_ca */ ; trust_ca != NULL; trust_ca = trust_ca->next ) - { - if( x509_crt_check_parent( child, trust_ca, 1, path_cnt == 0 ) != 0 ) + for ( /* trust_ca */ ; trust_ca != NULL; trust_ca = trust_ca->next ) { + if ( x509_crt_check_parent( child, trust_ca, 1, path_cnt == 0 ) != 0 ) continue; check_path_cnt = path_cnt + 1; @@ -1944,34 +1849,29 @@ static int x509_crt_verify_top( * Reduce check_path_cnt to check against if top of the chain is * the same as the trusted CA */ - if( child->subject_raw.len == trust_ca->subject_raw.len && - memcmp( child->subject_raw.p, trust_ca->subject_raw.p, - child->issuer_raw.len ) == 0 ) - { + if ( child->subject_raw.len == trust_ca->subject_raw.len && + memcmp( child->subject_raw.p, trust_ca->subject_raw.p, + child->issuer_raw.len ) == 0 ) { check_path_cnt--; } /* Self signed certificates do not count towards the limit */ - if( trust_ca->max_pathlen > 0 && - trust_ca->max_pathlen < check_path_cnt - self_cnt ) - { + if ( trust_ca->max_pathlen > 0 && + trust_ca->max_pathlen < check_path_cnt - self_cnt ) { continue; } - if( mbedtls_x509_time_is_past( &trust_ca->valid_to ) ) - { + if ( mbedtls_x509_time_is_past( &trust_ca->valid_to ) ) { continue; } - if( mbedtls_x509_time_is_future( &trust_ca->valid_from ) ) - { + if ( mbedtls_x509_time_is_future( &trust_ca->valid_from ) ) { continue; } - if( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &trust_ca->pk, - child->sig_md, hash, mbedtls_md_get_size( md_info ), - child->sig.p, child->sig.len ) != 0 ) - { + if ( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &trust_ca->pk, + child->sig_md, hash, mbedtls_md_get_size( md_info ), + child->sig.p, child->sig.len ) != 0 ) { continue; } @@ -1980,7 +1880,7 @@ static int x509_crt_verify_top( */ *flags &= ~MBEDTLS_X509_BADCERT_NOT_TRUSTED; - if( x509_profile_check_key( profile, child->sig_pk, &trust_ca->pk ) != 0 ) + if ( x509_profile_check_key( profile, child->sig_pk, &trust_ca->pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; break; @@ -1991,11 +1891,10 @@ static int x509_crt_verify_top( * to the callback for any issues with validity and CRL presence for the * trusted CA certificate. */ - if( trust_ca != NULL && - ( child->subject_raw.len != trust_ca->subject_raw.len || - memcmp( child->subject_raw.p, trust_ca->subject_raw.p, - child->issuer_raw.len ) != 0 ) ) - { + if ( trust_ca != NULL && + ( child->subject_raw.len != trust_ca->subject_raw.len || + memcmp( child->subject_raw.p, trust_ca->subject_raw.p, + child->issuer_raw.len ) != 0 ) ) { #if defined(MBEDTLS_X509_CRL_PARSE_C) /* Check trusted CA's CRL for the chain's top crt */ *flags |= x509_crt_verifycrl( child, trust_ca, ca_crl, profile ); @@ -2003,35 +1902,32 @@ static int x509_crt_verify_top( ((void) ca_crl); #endif - if( NULL != f_vrfy ) - { - if( ( ret = f_vrfy( p_vrfy, trust_ca, path_cnt + 1, - &ca_flags ) ) != 0 ) - { - return( ret ); + if ( NULL != f_vrfy ) { + if ( ( ret = f_vrfy( p_vrfy, trust_ca, path_cnt + 1, + &ca_flags ) ) != 0 ) { + return ( ret ); } } } /* Call callback on top cert */ - if( NULL != f_vrfy ) - { - if( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) - return( ret ); + if ( NULL != f_vrfy ) { + if ( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) + return ( ret ); } *flags |= ca_flags; - return( 0 ); + return ( 0 ); } static int x509_crt_verify_child( - mbedtls_x509_crt *child, mbedtls_x509_crt *parent, - mbedtls_x509_crt *trust_ca, mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - int path_cnt, int self_cnt, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *child, mbedtls_x509_crt *parent, + mbedtls_x509_crt *trust_ca, mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + int path_cnt, int self_cnt, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { int ret; uint32_t parent_flags = 0; @@ -2040,47 +1936,42 @@ static int x509_crt_verify_child( const mbedtls_md_info_t *md_info; /* Counting intermediate self signed certificates */ - if( ( path_cnt != 0 ) && x509_name_cmp( &child->issuer, &child->subject ) == 0 ) + if ( ( path_cnt != 0 ) && x509_name_cmp( &child->issuer, &child->subject ) == 0 ) self_cnt++; /* path_cnt is 0 for the first intermediate CA */ - if( 1 + path_cnt > MBEDTLS_X509_MAX_INTERMEDIATE_CA ) - { + if ( 1 + path_cnt > MBEDTLS_X509_MAX_INTERMEDIATE_CA ) { *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; - return( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); + return ( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); } - if( mbedtls_x509_time_is_past( &child->valid_to ) ) + if ( mbedtls_x509_time_is_past( &child->valid_to ) ) *flags |= MBEDTLS_X509_BADCERT_EXPIRED; - if( mbedtls_x509_time_is_future( &child->valid_from ) ) + if ( mbedtls_x509_time_is_future( &child->valid_from ) ) *flags |= MBEDTLS_X509_BADCERT_FUTURE; - if( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) + if ( x509_profile_check_md_alg( profile, child->sig_md ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_MD; - if( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) + if ( x509_profile_check_pk_alg( profile, child->sig_pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; md_info = mbedtls_md_info_from_type( child->sig_md ); - if( md_info == NULL ) - { + if ( md_info == NULL ) { /* * Cannot check 'unknown' hash */ *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; - } - else - { + } else { mbedtls_md( md_info, child->tbs.p, child->tbs.len, hash ); - if( x509_profile_check_key( profile, child->sig_pk, &parent->pk ) != 0 ) + if ( x509_profile_check_key( profile, child->sig_pk, &parent->pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; - if( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &parent->pk, - child->sig_md, hash, mbedtls_md_get_size( md_info ), - child->sig.p, child->sig.len ) != 0 ) - { + if ( mbedtls_pk_verify_ext( child->sig_pk, child->sig_opts, &parent->pk, + child->sig_md, hash, mbedtls_md_get_size( md_info ), + child->sig.p, child->sig.len ) != 0 ) { *flags |= MBEDTLS_X509_BADCERT_NOT_TRUSTED; } } @@ -2091,84 +1982,75 @@ static int x509_crt_verify_child( #endif /* Look for a grandparent in trusted CAs */ - for( grandparent = trust_ca; - grandparent != NULL; - grandparent = grandparent->next ) - { - if( x509_crt_check_parent( parent, grandparent, - 0, path_cnt == 0 ) == 0 ) + for ( grandparent = trust_ca; + grandparent != NULL; + grandparent = grandparent->next ) { + if ( x509_crt_check_parent( parent, grandparent, + 0, path_cnt == 0 ) == 0 ) break; } - if( grandparent != NULL ) - { + if ( grandparent != NULL ) { ret = x509_crt_verify_top( parent, grandparent, ca_crl, profile, - path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); + if ( ret != 0 ) + return ( ret ); + } else { /* Look for a grandparent upwards the chain */ - for( grandparent = parent->next; - grandparent != NULL; - grandparent = grandparent->next ) - { + for ( grandparent = parent->next; + grandparent != NULL; + grandparent = grandparent->next ) { /* +2 because the current step is not yet accounted for * and because max_pathlen is one higher than it should be. * Also self signed certificates do not count to the limit. */ - if( grandparent->max_pathlen > 0 && - grandparent->max_pathlen < 2 + path_cnt - self_cnt ) - { + if ( grandparent->max_pathlen > 0 && + grandparent->max_pathlen < 2 + path_cnt - self_cnt ) { continue; } - if( x509_crt_check_parent( parent, grandparent, - 0, path_cnt == 0 ) == 0 ) + if ( x509_crt_check_parent( parent, grandparent, + 0, path_cnt == 0 ) == 0 ) break; } /* Is our parent part of the chain or at the top? */ - if( grandparent != NULL ) - { + if ( grandparent != NULL ) { ret = x509_crt_verify_child( parent, grandparent, trust_ca, ca_crl, profile, path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + if ( ret != 0 ) + return ( ret ); + } else { ret = x509_crt_verify_top( parent, trust_ca, ca_crl, profile, path_cnt + 1, self_cnt, &parent_flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); } } /* child is verified to be a child of the parent, call verify callback */ - if( NULL != f_vrfy ) - if( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) - return( ret ); + if ( NULL != f_vrfy ) + if ( ( ret = f_vrfy( p_vrfy, child, path_cnt, flags ) ) != 0 ) + return ( ret ); *flags |= parent_flags; - return( 0 ); + return ( 0 ); } /* * Verify the certificate validity */ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { - return( mbedtls_x509_crt_verify_with_profile( crt, trust_ca, ca_crl, - &mbedtls_x509_crt_profile_default, cn, flags, f_vrfy, p_vrfy ) ); + return ( mbedtls_x509_crt_verify_with_profile( crt, trust_ca, ca_crl, + &mbedtls_x509_crt_profile_default, cn, flags, f_vrfy, p_vrfy ) ); } @@ -2176,12 +2058,12 @@ int mbedtls_x509_crt_verify( mbedtls_x509_crt *crt, * Verify the certificate validity, with profile */ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, - mbedtls_x509_crt *trust_ca, - mbedtls_x509_crl *ca_crl, - const mbedtls_x509_crt_profile *profile, - const char *cn, uint32_t *flags, - int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), - void *p_vrfy ) + mbedtls_x509_crt *trust_ca, + mbedtls_x509_crl *ca_crl, + const mbedtls_x509_crt_profile *profile, + const char *cn, uint32_t *flags, + int (*f_vrfy)(void *, mbedtls_x509_crt *, int, uint32_t *), + void *p_vrfy ) { size_t cn_len; int ret; @@ -2191,59 +2073,51 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, mbedtls_x509_sequence *cur = NULL; mbedtls_pk_type_t pk_type; - if( profile == NULL ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( profile == NULL ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); *flags = 0; - if( cn != NULL ) - { + if ( cn != NULL ) { name = &crt->subject; cn_len = strlen( cn ); - if( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) - { + if ( crt->ext_types & MBEDTLS_X509_EXT_SUBJECT_ALT_NAME ) { cur = &crt->subject_alt_names; - while( cur != NULL ) - { - if( cur->buf.len == cn_len && - x509_memcasecmp( cn, cur->buf.p, cn_len ) == 0 ) + while ( cur != NULL ) { + if ( cur->buf.len == cn_len && + x509_memcasecmp( cn, cur->buf.p, cn_len ) == 0 ) break; - if( cur->buf.len > 2 && - memcmp( cur->buf.p, "*.", 2 ) == 0 && - x509_check_wildcard( cn, &cur->buf ) == 0 ) - { + if ( cur->buf.len > 2 && + memcmp( cur->buf.p, "*.", 2 ) == 0 && + x509_check_wildcard( cn, &cur->buf ) == 0 ) { break; } cur = cur->next; } - if( cur == NULL ) + if ( cur == NULL ) *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH; - } - else - { - while( name != NULL ) - { - if( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 ) - { - if( name->val.len == cn_len && - x509_memcasecmp( name->val.p, cn, cn_len ) == 0 ) + } else { + while ( name != NULL ) { + if ( MBEDTLS_OID_CMP( MBEDTLS_OID_AT_CN, &name->oid ) == 0 ) { + if ( name->val.len == cn_len && + x509_memcasecmp( name->val.p, cn, cn_len ) == 0 ) break; - if( name->val.len > 2 && - memcmp( name->val.p, "*.", 2 ) == 0 && - x509_check_wildcard( cn, &name->val ) == 0 ) + if ( name->val.len > 2 && + memcmp( name->val.p, "*.", 2 ) == 0 && + x509_check_wildcard( cn, &name->val ) == 0 ) break; } name = name->next; } - if( name == NULL ) + if ( name == NULL ) *flags |= MBEDTLS_X509_BADCERT_CN_MISMATCH; } } @@ -2251,54 +2125,47 @@ int mbedtls_x509_crt_verify_with_profile( mbedtls_x509_crt *crt, /* Check the type and size of the key */ pk_type = mbedtls_pk_get_type( &crt->pk ); - if( x509_profile_check_pk_alg( profile, pk_type ) != 0 ) + if ( x509_profile_check_pk_alg( profile, pk_type ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_PK; - if( x509_profile_check_key( profile, pk_type, &crt->pk ) != 0 ) + if ( x509_profile_check_key( profile, pk_type, &crt->pk ) != 0 ) *flags |= MBEDTLS_X509_BADCERT_BAD_KEY; /* Look for a parent in trusted CAs */ - for( parent = trust_ca; parent != NULL; parent = parent->next ) - { - if( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) + for ( parent = trust_ca; parent != NULL; parent = parent->next ) { + if ( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) break; } - if( parent != NULL ) - { + if ( parent != NULL ) { ret = x509_crt_verify_top( crt, parent, ca_crl, profile, pathlen, selfsigned, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + if ( ret != 0 ) + return ( ret ); + } else { /* Look for a parent upwards the chain */ - for( parent = crt->next; parent != NULL; parent = parent->next ) - if( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) + for ( parent = crt->next; parent != NULL; parent = parent->next ) + if ( x509_crt_check_parent( crt, parent, 0, pathlen == 0 ) == 0 ) break; /* Are we part of the chain or at the top? */ - if( parent != NULL ) - { + if ( parent != NULL ) { ret = x509_crt_verify_child( crt, parent, trust_ca, ca_crl, profile, pathlen, selfsigned, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); - } - else - { + if ( ret != 0 ) + return ( ret ); + } else { ret = x509_crt_verify_top( crt, trust_ca, ca_crl, profile, pathlen, selfsigned, flags, f_vrfy, p_vrfy ); - if( ret != 0 ) - return( ret ); + if ( ret != 0 ) + return ( ret ); } } - if( *flags != 0 ) - return( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); + if ( *flags != 0 ) + return ( MBEDTLS_ERR_X509_CERT_VERIFY_FAILED ); - return( 0 ); + return ( 0 ); } /* @@ -2321,11 +2188,10 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) mbedtls_x509_sequence *seq_cur; mbedtls_x509_sequence *seq_prv; - if( crt == NULL ) + if ( crt == NULL ) return; - do - { + do { mbedtls_pk_free( &cert_cur->pk ); #if defined(MBEDTLS_X509_RSASSA_PSS_SUPPORT) @@ -2333,8 +2199,7 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) #endif name_cur = cert_cur->issuer.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); @@ -2342,8 +2207,7 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) } name_cur = cert_cur->subject.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); @@ -2351,8 +2215,7 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) } seq_cur = cert_cur->ext_key_usage.next; - while( seq_cur != NULL ) - { + while ( seq_cur != NULL ) { seq_prv = seq_cur; seq_cur = seq_cur->next; mbedtls_zeroize( seq_prv, sizeof( mbedtls_x509_sequence ) ); @@ -2360,35 +2223,30 @@ void mbedtls_x509_crt_free( mbedtls_x509_crt *crt ) } seq_cur = cert_cur->subject_alt_names.next; - while( seq_cur != NULL ) - { + while ( seq_cur != NULL ) { seq_prv = seq_cur; seq_cur = seq_cur->next; mbedtls_zeroize( seq_prv, sizeof( mbedtls_x509_sequence ) ); mbedtls_free( seq_prv ); } - if( cert_cur->raw.p != NULL ) - { + if ( cert_cur->raw.p != NULL ) { mbedtls_zeroize( cert_cur->raw.p, cert_cur->raw.len ); mbedtls_free( cert_cur->raw.p ); } cert_cur = cert_cur->next; - } - while( cert_cur != NULL ); + } while ( cert_cur != NULL ); cert_cur = crt; - do - { + do { cert_prv = cert_cur; cert_cur = cert_cur->next; mbedtls_zeroize( cert_prv, sizeof( mbedtls_x509_crt ) ); - if( cert_prv != crt ) + if ( cert_prv != crt ) mbedtls_free( cert_prv ); - } - while( cert_cur != NULL ); + } while ( cert_cur != NULL ); } #endif /* MBEDTLS_X509_CRT_PARSE_C */ diff --git a/external_libs/mbedtls/library/x509_csr.c b/external_libs/mbedtls/library/x509_csr.c index 603d06b..c44c98d 100644 --- a/external_libs/mbedtls/library/x509_csr.c +++ b/external_libs/mbedtls/library/x509_csr.c @@ -61,38 +61,38 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* * Version ::= INTEGER { v1(0) } */ static int x509_csr_get_version( unsigned char **p, - const unsigned char *end, - int *ver ) + const unsigned char *end, + int *ver ) { int ret; - if( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) - { - if( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) - { + if ( ( ret = mbedtls_asn1_get_int( p, end, ver ) ) != 0 ) { + if ( ret == MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) { *ver = 0; - return( 0 ); + return ( 0 ); } - return( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); + return ( MBEDTLS_ERR_X509_INVALID_VERSION + ret ); } - return( 0 ); + return ( 0 ); } /* * Parse a CSR in DER format */ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, - const unsigned char *buf, size_t buflen ) + const unsigned char *buf, size_t buflen ) { int ret; size_t len; @@ -104,8 +104,8 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, /* * Check for valid input */ - if( csr == NULL || buf == NULL || buflen == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( csr == NULL || buf == NULL || buflen == 0 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); mbedtls_x509_csr_init( csr ); @@ -114,8 +114,8 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, */ p = mbedtls_calloc( 1, len = buflen ); - if( p == NULL ) - return( MBEDTLS_ERR_X509_ALLOC_FAILED ); + if ( p == NULL ) + return ( MBEDTLS_ERR_X509_ALLOC_FAILED ); memcpy( p, buf, buflen ); @@ -130,18 +130,16 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, * signature BIT STRING * } */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT ); } - if( len != (size_t) ( end - p ) ) - { + if ( len != (size_t) ( end - p ) ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } /* @@ -149,11 +147,10 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, */ csr->cri.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } end = p + len; @@ -162,18 +159,16 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, /* * Version ::= INTEGER { v1(0) } */ - if( ( ret = x509_csr_get_version( &p, end, &csr->version ) ) != 0 ) - { + if ( ( ret = x509_csr_get_version( &p, end, &csr->version ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } csr->version++; - if( csr->version != 1 ) - { + if ( csr->version != 1 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); + return ( MBEDTLS_ERR_X509_UNKNOWN_VERSION ); } /* @@ -181,17 +176,15 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, */ csr->subject_raw.p = p; - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_SEQUENCE ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } - if( ( ret = mbedtls_x509_get_name( &p, p + len, &csr->subject ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_name( &p, p + len, &csr->subject ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } csr->subject_raw.len = p - csr->subject_raw.p; @@ -199,10 +192,9 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, /* * subjectPKInfo SubjectPublicKeyInfo */ - if( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &csr->pk ) ) != 0 ) - { + if ( ( ret = mbedtls_pk_parse_subpubkey( &p, end, &csr->pk ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } /* @@ -215,11 +207,10 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, * the requester's expectations - this cannot cause a violation of our * signature policies. */ - if( ( ret = mbedtls_asn1_get_tag( &p, end, &len, - MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 ) - { + if ( ( ret = mbedtls_asn1_get_tag( &p, end, &len, + MBEDTLS_ASN1_CONSTRUCTED | MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + ret ); } p += len; @@ -230,34 +221,30 @@ int mbedtls_x509_csr_parse_der( mbedtls_x509_csr *csr, * signatureAlgorithm AlgorithmIdentifier, * signature BIT STRING */ - if( ( ret = mbedtls_x509_get_alg( &p, end, &csr->sig_oid, &sig_params ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_alg( &p, end, &csr->sig_oid, &sig_params ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } - if( ( ret = mbedtls_x509_get_sig_alg( &csr->sig_oid, &sig_params, - &csr->sig_md, &csr->sig_pk, - &csr->sig_opts ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig_alg( &csr->sig_oid, &sig_params, + &csr->sig_md, &csr->sig_pk, + &csr->sig_opts ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); + return ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG ); } - if( ( ret = mbedtls_x509_get_sig( &p, end, &csr->sig ) ) != 0 ) - { + if ( ( ret = mbedtls_x509_get_sig( &p, end, &csr->sig ) ) != 0 ) { mbedtls_x509_csr_free( csr ); - return( ret ); + return ( ret ); } - if( p != end ) - { + if ( p != end ) { mbedtls_x509_csr_free( csr ); - return( MBEDTLS_ERR_X509_INVALID_FORMAT + - MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); + return ( MBEDTLS_ERR_X509_INVALID_FORMAT + + MBEDTLS_ERR_ASN1_LENGTH_MISMATCH ); } - return( 0 ); + return ( 0 ); } /* @@ -274,40 +261,36 @@ int mbedtls_x509_csr_parse( mbedtls_x509_csr *csr, const unsigned char *buf, siz /* * Check for valid input */ - if( csr == NULL || buf == NULL || buflen == 0 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( csr == NULL || buf == NULL || buflen == 0 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); #if defined(MBEDTLS_PEM_PARSE_C) mbedtls_pem_init( &pem ); /* Avoid calling mbedtls_pem_read_buffer() on non-null-terminated string */ - if( buf[buflen - 1] != '\0' ) + if ( buf[buflen - 1] != '\0' ) ret = MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT; else ret = mbedtls_pem_read_buffer( &pem, - "-----BEGIN CERTIFICATE REQUEST-----", - "-----END CERTIFICATE REQUEST-----", - buf, NULL, 0, &use_len ); + "-----BEGIN CERTIFICATE REQUEST-----", + "-----END CERTIFICATE REQUEST-----", + buf, NULL, 0, &use_len ); - if( ret == 0 ) - { + if ( ret == 0 ) { /* * Was PEM encoded, parse the result */ - if( ( ret = mbedtls_x509_csr_parse_der( csr, pem.buf, pem.buflen ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_x509_csr_parse_der( csr, pem.buf, pem.buflen ) ) != 0 ) + return ( ret ); mbedtls_pem_free( &pem ); - return( 0 ); - } - else if( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) - { + return ( 0 ); + } else if ( ret != MBEDTLS_ERR_PEM_NO_HEADER_FOOTER_PRESENT ) { mbedtls_pem_free( &pem ); - return( ret ); - } - else + return ( ret ); + } else #endif /* MBEDTLS_PEM_PARSE_C */ - return( mbedtls_x509_csr_parse_der( csr, buf, buflen ) ); + return ( mbedtls_x509_csr_parse_der( csr, buf, buflen ) ); } #if defined(MBEDTLS_FS_IO) @@ -320,15 +303,15 @@ int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ) size_t n; unsigned char *buf; - if( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_pk_load_file( path, &buf, &n ) ) != 0 ) + return ( ret ); ret = mbedtls_x509_csr_parse( csr, buf, n ); mbedtls_zeroize( buf, n ); mbedtls_free( buf ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_FS_IO */ @@ -338,7 +321,7 @@ int mbedtls_x509_csr_parse_file( mbedtls_x509_csr *csr, const char *path ) * Return an informational string about the CSR. */ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, - const mbedtls_x509_csr *csr ) + const mbedtls_x509_csr *csr ) { int ret; size_t n; @@ -349,7 +332,7 @@ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, n = size; ret = mbedtls_snprintf( p, n, "%sCSR version : %d", - prefix, csr->version ); + prefix, csr->version ); MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_snprintf( p, n, "\n%ssubject name : ", prefix ); @@ -361,20 +344,19 @@ int mbedtls_x509_csr_info( char *buf, size_t size, const char *prefix, MBEDTLS_X509_SAFE_SNPRINTF; ret = mbedtls_x509_sig_alg_gets( p, n, &csr->sig_oid, csr->sig_pk, csr->sig_md, - csr->sig_opts ); + csr->sig_opts ); MBEDTLS_X509_SAFE_SNPRINTF; - if( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, - mbedtls_pk_get_name( &csr->pk ) ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509_key_size_helper( key_size_str, BEFORE_COLON, + mbedtls_pk_get_name( &csr->pk ) ) ) != 0 ) { + return ( ret ); } ret = mbedtls_snprintf( p, n, "\n%s%-" BC "s: %d bits\n", prefix, key_size_str, - (int) mbedtls_pk_get_bitlen( &csr->pk ) ); + (int) mbedtls_pk_get_bitlen( &csr->pk ) ); MBEDTLS_X509_SAFE_SNPRINTF; - return( (int) ( size - n ) ); + return ( (int) ( size - n ) ); } /* @@ -393,7 +375,7 @@ void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ) mbedtls_x509_name *name_cur; mbedtls_x509_name *name_prv; - if( csr == NULL ) + if ( csr == NULL ) return; mbedtls_pk_free( &csr->pk ); @@ -403,16 +385,14 @@ void mbedtls_x509_csr_free( mbedtls_x509_csr *csr ) #endif name_cur = csr->subject.next; - while( name_cur != NULL ) - { + while ( name_cur != NULL ) { name_prv = name_cur; name_cur = name_cur->next; mbedtls_zeroize( name_prv, sizeof( mbedtls_x509_name ) ); mbedtls_free( name_prv ); } - if( csr->raw.p != NULL ) - { + if ( csr->raw.p != NULL ) { mbedtls_zeroize( csr->raw.p, csr->raw.len ); mbedtls_free( csr->raw.p ); } diff --git a/external_libs/mbedtls/library/x509write_crt.c b/external_libs/mbedtls/library/x509write_crt.c index d1d9a22..b2c19ba 100644 --- a/external_libs/mbedtls/library/x509write_crt.c +++ b/external_libs/mbedtls/library/x509write_crt.c @@ -45,8 +45,10 @@ #endif /* MBEDTLS_PEM_WRITE_C */ /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } void mbedtls_x509write_crt_init( mbedtls_x509write_cert *ctx ) @@ -89,13 +91,13 @@ void mbedtls_x509write_crt_set_issuer_key( mbedtls_x509write_cert *ctx, mbedtls_ } int mbedtls_x509write_crt_set_subject_name( mbedtls_x509write_cert *ctx, - const char *subject_name ) + const char *subject_name ) { return mbedtls_x509_string_to_names( &ctx->subject, subject_name ); } int mbedtls_x509write_crt_set_issuer_name( mbedtls_x509write_cert *ctx, - const char *issuer_name ) + const char *issuer_name ) { return mbedtls_x509_string_to_names( &ctx->issuer, issuer_name ); } @@ -104,39 +106,38 @@ int mbedtls_x509write_crt_set_serial( mbedtls_x509write_cert *ctx, const mbedtls { int ret; - if( ( ret = mbedtls_mpi_copy( &ctx->serial, serial ) ) != 0 ) - return( ret ); + if ( ( ret = mbedtls_mpi_copy( &ctx->serial, serial ) ) != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_crt_set_validity( mbedtls_x509write_cert *ctx, const char *not_before, - const char *not_after ) + const char *not_after ) { - if( strlen( not_before ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 || - strlen( not_after ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 ) - { - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( strlen( not_before ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 || + strlen( not_after ) != MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1 ) { + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); } strncpy( ctx->not_before, not_before, MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); - strncpy( ctx->not_after , not_after , MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); + strncpy( ctx->not_after, not_after, MBEDTLS_X509_RFC5280_UTC_TIME_LEN ); ctx->not_before[MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; ctx->not_after[MBEDTLS_X509_RFC5280_UTC_TIME_LEN - 1] = 'Z'; - return( 0 ); + return ( 0 ); } int mbedtls_x509write_crt_set_extension( mbedtls_x509write_cert *ctx, - const char *oid, size_t oid_len, - int critical, - const unsigned char *val, size_t val_len ) + const char *oid, size_t oid_len, + int critical, + const unsigned char *val, size_t val_len ) { return mbedtls_x509_set_extension( &ctx->extensions, oid, oid_len, - critical, val, val_len ); + critical, val, val_len ); } int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, - int is_ca, int max_pathlen ) + int is_ca, int max_pathlen ) { int ret; unsigned char buf[9]; @@ -145,13 +146,11 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, memset( buf, 0, sizeof(buf) ); - if( is_ca && max_pathlen > 127 ) - return( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); + if ( is_ca && max_pathlen > 127 ) + return ( MBEDTLS_ERR_X509_BAD_INPUT_DATA ); - if( is_ca ) - { - if( max_pathlen >= 0 ) - { + if ( is_ca ) { + if ( max_pathlen >= 0 ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_int( &c, buf, max_pathlen ) ); } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_bool( &c, buf, 1 ) ); @@ -159,11 +158,11 @@ int mbedtls_x509write_crt_set_basic_constraints( mbedtls_x509write_cert *ctx, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_BASIC_CONSTRAINTS, - MBEDTLS_OID_SIZE( MBEDTLS_OID_BASIC_CONSTRAINTS ), - 0, buf + sizeof(buf) - len, len ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_BASIC_CONSTRAINTS ), + 0, buf + sizeof(buf) - len, len ); } #if defined(MBEDTLS_SHA1_C) @@ -185,8 +184,8 @@ int mbedtls_x509write_crt_set_subject_key_identifier( mbedtls_x509write_cert *ct MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_OCTET_STRING ) ); return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER, - MBEDTLS_OID_SIZE( MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER ), - 0, buf + sizeof(buf) - len, len ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_SUBJECT_KEY_IDENTIFIER ), + 0, buf + sizeof(buf) - len, len ); } int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert *ctx ) @@ -208,42 +207,42 @@ int mbedtls_x509write_crt_set_authority_key_identifier( mbedtls_x509write_cert * MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); return mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER, - MBEDTLS_OID_SIZE( MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER ), - 0, buf + sizeof(buf) - len, len ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_AUTHORITY_KEY_IDENTIFIER ), + 0, buf + sizeof(buf) - len, len ); } #endif /* MBEDTLS_SHA1_C */ int mbedtls_x509write_crt_set_key_usage( mbedtls_x509write_cert *ctx, - unsigned int key_usage ) + unsigned int key_usage ) { unsigned char buf[4], ku; unsigned char *c; int ret; /* We currently only support 7 bits, from 0x80 to 0x02 */ - if( ( key_usage & ~0xfe ) != 0 ) - return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); + if ( ( key_usage & ~0xfe ) != 0 ) + return ( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE ); c = buf + 4; ku = (unsigned char) key_usage; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ku, 7 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ku, 7 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_KEY_USAGE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), - 1, buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), + 1, buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, - unsigned char ns_cert_type ) + unsigned char ns_cert_type ) { unsigned char buf[4]; unsigned char *c; @@ -251,16 +250,16 @@ int mbedtls_x509write_crt_set_ns_cert_type( mbedtls_x509write_cert *ctx, c = buf + 4; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_crt_set_extension( ctx, MBEDTLS_OID_NS_CERT_TYPE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), - 0, buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), + 0, buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } static int x509_write_time( unsigned char **p, unsigned char *start, @@ -272,29 +271,26 @@ static int x509_write_time( unsigned char **p, unsigned char *start, /* * write MBEDTLS_ASN1_UTC_TIME if year < 2050 (2 bytes shorter) */ - if( time[0] == '2' && time[1] == '0' && time [2] < '5' ) - { + if ( time[0] == '2' && time[1] == '0' && time [2] < '5' ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) time + 2, - size - 2 ) ); + (const unsigned char *) time + 2, + size - 2 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_UTC_TIME ) ); - } - else - { + } else { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_raw_buffer( p, start, - (const unsigned char *) time, - size ) ); + (const unsigned char *) time, + size ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( p, start, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( p, start, MBEDTLS_ASN1_GENERALIZED_TIME ) ); } - return( (int) len ); + return ( (int) len ); } int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; const char *sig_oid; @@ -314,13 +310,12 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, /* Signature algorithm needed in TBS, and later for actual signature */ pk_alg = mbedtls_pk_get_type( ctx->issuer_key ); - if( pk_alg == MBEDTLS_PK_ECKEY ) + if ( pk_alg == MBEDTLS_PK_ECKEY ) pk_alg = MBEDTLS_PK_ECDSA; - if( ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, - &sig_oid, &sig_oid_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, + &sig_oid, &sig_oid_len ) ) != 0 ) { + return ( ret ); } /* @@ -329,16 +324,16 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_extensions( &c, tmp_buf, ctx->extensions ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONTEXT_SPECIFIC | - MBEDTLS_ASN1_CONSTRUCTED | 3 ) ); + MBEDTLS_ASN1_CONSTRUCTED | 3 ) ); /* * SubjectPublicKeyInfo */ MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_pk_write_pubkey_der( ctx->subject_key, - tmp_buf, c - tmp_buf ) ); + tmp_buf, c - tmp_buf ) ); c -= pub_len; len += pub_len; @@ -355,15 +350,15 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, sub_len = 0; MBEDTLS_ASN1_CHK_ADD( sub_len, x509_write_time( &c, tmp_buf, ctx->not_after, - MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); + MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); MBEDTLS_ASN1_CHK_ADD( sub_len, x509_write_time( &c, tmp_buf, ctx->not_before, - MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); + MBEDTLS_X509_RFC5280_UTC_TIME_LEN ) ); len += sub_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, sub_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); /* * Issuer ::= Name @@ -374,7 +369,7 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, * Signature ::= AlgorithmIdentifier */ MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_algorithm_identifier( &c, tmp_buf, - sig_oid, strlen( sig_oid ), 0 ) ); + sig_oid, strlen( sig_oid ), 0 ) ); /* * Serial ::= INTEGER @@ -389,21 +384,20 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, len += sub_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, sub_len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONTEXT_SPECIFIC | - MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); + MBEDTLS_ASN1_CONSTRUCTED | 0 ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); /* * Make signature */ mbedtls_md( mbedtls_md_info_from_type( ctx->md_alg ), c, len, hash ); - if( ( ret = mbedtls_pk_sign( ctx->issuer_key, ctx->md_alg, hash, 0, sig, &sig_len, - f_rng, p_rng ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pk_sign( ctx->issuer_key, ctx->md_alg, hash, 0, sig, &sig_len, + f_rng, p_rng ) ) != 0 ) { + return ( ret ); } /* @@ -411,10 +405,10 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, */ c2 = buf + size; MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf, - sig_oid, sig_oid_len, sig, sig_len ) ); + sig_oid, sig_oid_len, sig, sig_len ) ); - if( len > (size_t)( c2 - buf ) ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len > (size_t)( c2 - buf ) ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); c2 -= len; memcpy( c2, c, len ); @@ -422,9 +416,9 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, len += sig_and_oid_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c2, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c2, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } #define PEM_BEGIN_CRT "-----BEGIN CERTIFICATE-----\n" @@ -432,27 +426,25 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, #if defined(MBEDTLS_PEM_WRITE_C) int mbedtls_x509write_crt_pem( mbedtls_x509write_cert *crt, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char output_buf[4096]; size_t olen = 0; - if( ( ret = mbedtls_x509write_crt_der( crt, output_buf, sizeof(output_buf), - f_rng, p_rng ) ) < 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509write_crt_der( crt, output_buf, sizeof(output_buf), + f_rng, p_rng ) ) < 0 ) { + return ( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CRT, PEM_END_CRT, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CRT, PEM_END_CRT, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ diff --git a/external_libs/mbedtls/library/x509write_csr.c b/external_libs/mbedtls/library/x509write_csr.c index 8fd856b..8db6935 100644 --- a/external_libs/mbedtls/library/x509write_csr.c +++ b/external_libs/mbedtls/library/x509write_csr.c @@ -44,8 +44,10 @@ #endif /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } void mbedtls_x509write_csr_init( mbedtls_x509write_csr *ctx ) @@ -72,17 +74,17 @@ void mbedtls_x509write_csr_set_key( mbedtls_x509write_csr *ctx, mbedtls_pk_conte } int mbedtls_x509write_csr_set_subject_name( mbedtls_x509write_csr *ctx, - const char *subject_name ) + const char *subject_name ) { return mbedtls_x509_string_to_names( &ctx->subject, subject_name ); } int mbedtls_x509write_csr_set_extension( mbedtls_x509write_csr *ctx, - const char *oid, size_t oid_len, - const unsigned char *val, size_t val_len ) + const char *oid, size_t oid_len, + const unsigned char *val, size_t val_len ) { return mbedtls_x509_set_extension( &ctx->extensions, oid, oid_len, - 0, val, val_len ); + 0, val, val_len ); } int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned char key_usage ) @@ -93,20 +95,20 @@ int mbedtls_x509write_csr_set_key_usage( mbedtls_x509write_csr *ctx, unsigned ch c = buf + 4; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &key_usage, 7 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &key_usage, 7 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_csr_set_extension( ctx, MBEDTLS_OID_KEY_USAGE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), - buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_KEY_USAGE ), + buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, - unsigned char ns_cert_type ) + unsigned char ns_cert_type ) { unsigned char buf[4]; unsigned char *c; @@ -114,21 +116,21 @@ int mbedtls_x509write_csr_set_ns_cert_type( mbedtls_x509write_csr *ctx, c = buf + 4; - if( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) - return( ret ); + if ( ( ret = mbedtls_asn1_write_bitstring( &c, buf, &ns_cert_type, 8 ) ) != 4 ) + return ( ret ); ret = mbedtls_x509write_csr_set_extension( ctx, MBEDTLS_OID_NS_CERT_TYPE, - MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), - buf, 4 ); - if( ret != 0 ) - return( ret ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_NS_CERT_TYPE ), + buf, 4 ); + if ( ret != 0 ) + return ( ret ); - return( 0 ); + return ( 0 ); } int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; const char *sig_oid; @@ -148,30 +150,29 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s MBEDTLS_ASN1_CHK_ADD( len, mbedtls_x509_write_extensions( &c, tmp_buf, ctx->extensions ) ); - if( len ) - { + if ( len ) { MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SET ) ); + MBEDTLS_ASN1_SET ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_oid( &c, tmp_buf, MBEDTLS_OID_PKCS9_CSR_EXT_REQ, - MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_CSR_EXT_REQ ) ) ); + MBEDTLS_OID_SIZE( MBEDTLS_OID_PKCS9_CSR_EXT_REQ ) ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); } MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ); + MBEDTLS_ASN1_CONTEXT_SPECIFIC ) ); MBEDTLS_ASN1_CHK_ADD( pub_len, mbedtls_pk_write_pubkey_der( ctx->key, - tmp_buf, c - tmp_buf ) ); + tmp_buf, c - tmp_buf ) ); c -= pub_len; len += pub_len; @@ -187,7 +188,7 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c, tmp_buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c, tmp_buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); /* * Prepare signature @@ -195,15 +196,14 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s mbedtls_md( mbedtls_md_info_from_type( ctx->md_alg ), c, len, hash ); pk_alg = mbedtls_pk_get_type( ctx->key ); - if( pk_alg == MBEDTLS_PK_ECKEY ) + if ( pk_alg == MBEDTLS_PK_ECKEY ) pk_alg = MBEDTLS_PK_ECDSA; - if( ( ret = mbedtls_pk_sign( ctx->key, ctx->md_alg, hash, 0, sig, &sig_len, - f_rng, p_rng ) ) != 0 || - ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, - &sig_oid, &sig_oid_len ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pk_sign( ctx->key, ctx->md_alg, hash, 0, sig, &sig_len, + f_rng, p_rng ) ) != 0 || + ( ret = mbedtls_oid_get_oid_by_sig_alg( pk_alg, ctx->md_alg, + &sig_oid, &sig_oid_len ) ) != 0 ) { + return ( ret ); } /* @@ -211,10 +211,10 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s */ c2 = buf + size; MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf, - sig_oid, sig_oid_len, sig, sig_len ) ); + sig_oid, sig_oid_len, sig, sig_len ) ); - if( len > (size_t)( c2 - buf ) ) - return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + if ( len > (size_t)( c2 - buf ) ) + return ( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); c2 -= len; memcpy( c2, c, len ); @@ -222,9 +222,9 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s len += sig_and_oid_len; MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_len( &c2, buf, len ) ); MBEDTLS_ASN1_CHK_ADD( len, mbedtls_asn1_write_tag( &c2, buf, MBEDTLS_ASN1_CONSTRUCTED | - MBEDTLS_ASN1_SEQUENCE ) ); + MBEDTLS_ASN1_SEQUENCE ) ); - return( (int) len ); + return ( (int) len ); } #define PEM_BEGIN_CSR "-----BEGIN CERTIFICATE REQUEST-----\n" @@ -232,27 +232,25 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s #if defined(MBEDTLS_PEM_WRITE_C) int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, - int (*f_rng)(void *, unsigned char *, size_t), - void *p_rng ) + int (*f_rng)(void *, unsigned char *, size_t), + void *p_rng ) { int ret; unsigned char output_buf[4096]; size_t olen = 0; - if( ( ret = mbedtls_x509write_csr_der( ctx, output_buf, sizeof(output_buf), - f_rng, p_rng ) ) < 0 ) - { - return( ret ); + if ( ( ret = mbedtls_x509write_csr_der( ctx, output_buf, sizeof(output_buf), + f_rng, p_rng ) ) < 0 ) { + return ( ret ); } - if( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CSR, PEM_END_CSR, - output_buf + sizeof(output_buf) - ret, - ret, buf, size, &olen ) ) != 0 ) - { - return( ret ); + if ( ( ret = mbedtls_pem_write_buffer( PEM_BEGIN_CSR, PEM_END_CSR, + output_buf + sizeof(output_buf) - ret, + ret, buf, size, &olen ) ) != 0 ) { + return ( ret ); } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_PEM_WRITE_C */ diff --git a/external_libs/mbedtls/library/xtea.c b/external_libs/mbedtls/library/xtea.c index fe0a350..0079497 100644 --- a/external_libs/mbedtls/library/xtea.c +++ b/external_libs/mbedtls/library/xtea.c @@ -43,8 +43,10 @@ #if !defined(MBEDTLS_XTEA_ALT) /* Implementation that should never be optimized out by the compiler */ -static void mbedtls_zeroize( void *v, size_t n ) { - volatile unsigned char *p = v; while( n-- ) *p++ = 0; +static void mbedtls_zeroize( void *v, size_t n ) +{ + volatile unsigned char *p = v; + while ( n-- ) *p++ = 0; } /* @@ -77,7 +79,7 @@ void mbedtls_xtea_init( mbedtls_xtea_context *ctx ) void mbedtls_xtea_free( mbedtls_xtea_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; mbedtls_zeroize( ctx, sizeof( mbedtls_xtea_context ) ); @@ -92,8 +94,7 @@ void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] memset( ctx, 0, sizeof(mbedtls_xtea_context) ); - for( i = 0; i < 4; i++ ) - { + for ( i = 0; i < 4; i++ ) { GET_UINT32_BE( ctx->k[i], key, i << 2 ); } } @@ -102,7 +103,7 @@ void mbedtls_xtea_setup( mbedtls_xtea_context *ctx, const unsigned char key[16] * XTEA encrypt function */ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, - const unsigned char input[8], unsigned char output[8]) + const unsigned char input[8], unsigned char output[8]) { uint32_t *k, v0, v1, i; @@ -111,24 +112,19 @@ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, GET_UINT32_BE( v0, input, 0 ); GET_UINT32_BE( v1, input, 4 ); - if( mode == MBEDTLS_XTEA_ENCRYPT ) - { + if ( mode == MBEDTLS_XTEA_ENCRYPT ) { uint32_t sum = 0, delta = 0x9E3779B9; - for( i = 0; i < 32; i++ ) - { + for ( i = 0; i < 32; i++ ) { v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); sum += delta; - v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); + v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]); } - } - else /* MBEDTLS_XTEA_DECRYPT */ - { + } else { /* MBEDTLS_XTEA_DECRYPT */ uint32_t delta = 0x9E3779B9, sum = delta * 32; - for( i = 0; i < 32; i++ ) - { - v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]); + for ( i = 0; i < 32; i++ ) { + v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum >> 11) & 3]); sum -= delta; v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]); } @@ -137,7 +133,7 @@ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, PUT_UINT32_BE( v0, output, 0 ); PUT_UINT32_BE( v1, output, 4 ); - return( 0 ); + return ( 0 ); } #if defined(MBEDTLS_CIPHER_MODE_CBC) @@ -145,23 +141,21 @@ int mbedtls_xtea_crypt_ecb( mbedtls_xtea_context *ctx, int mode, * XTEA-CBC buffer encryption/decryption */ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, - unsigned char iv[8], const unsigned char *input, - unsigned char *output) + unsigned char iv[8], const unsigned char *input, + unsigned char *output) { int i; unsigned char temp[8]; - if( length % 8 ) - return( MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH ); + if ( length % 8 ) + return ( MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH ); - if( mode == MBEDTLS_XTEA_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == MBEDTLS_XTEA_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 8 ); mbedtls_xtea_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 8; i++ ) + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 8 ); @@ -170,12 +164,9 @@ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, output += 8; length -= 8; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 8; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 8; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); mbedtls_xtea_crypt_ecb( ctx, mode, output, output ); @@ -187,7 +178,7 @@ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, } } - return( 0 ); + return ( 0 ); } #endif /* MBEDTLS_CIPHER_MODE_CBC */ #endif /* !MBEDTLS_XTEA_ALT */ @@ -198,24 +189,34 @@ int mbedtls_xtea_crypt_cbc( mbedtls_xtea_context *ctx, int mode, size_t length, * XTEA tests vectors (non-official) */ -static const unsigned char xtea_test_key[6][16] = -{ - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, - 0x0c, 0x0d, 0x0e, 0x0f }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 }, - { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 } +static const unsigned char xtea_test_key[6][16] = { + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f + }, + { + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }, + { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + } }; -static const unsigned char xtea_test_pt[6][8] = -{ +static const unsigned char xtea_test_pt[6][8] = { { 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 }, { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, { 0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f }, @@ -224,8 +225,7 @@ static const unsigned char xtea_test_pt[6][8] = { 0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55 } }; -static const unsigned char xtea_test_ct[6][8] = -{ +static const unsigned char xtea_test_ct[6][8] = { { 0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5 }, { 0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8 }, { 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }, @@ -244,9 +244,8 @@ int mbedtls_xtea_self_test( int verbose ) mbedtls_xtea_context ctx; mbedtls_xtea_init( &ctx ); - for( i = 0; i < 6; i++ ) - { - if( verbose != 0 ) + for ( i = 0; i < 6; i++ ) { + if ( verbose != 0 ) mbedtls_printf( " XTEA test #%d: ", i + 1 ); memcpy( buf, xtea_test_pt[i], 8 ); @@ -254,26 +253,25 @@ int mbedtls_xtea_self_test( int verbose ) mbedtls_xtea_setup( &ctx, xtea_test_key[i] ); mbedtls_xtea_crypt_ecb( &ctx, MBEDTLS_XTEA_ENCRYPT, buf, buf ); - if( memcmp( buf, xtea_test_ct[i], 8 ) != 0 ) - { - if( verbose != 0 ) + if ( memcmp( buf, xtea_test_ct[i], 8 ) != 0 ) { + if ( verbose != 0 ) mbedtls_printf( "failed\n" ); ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) mbedtls_printf( "\n" ); exit: mbedtls_xtea_free( &ctx ); - return( ret ); + return ( ret ); } #endif /* MBEDTLS_SELF_TEST */ diff --git a/include/config.h b/include/config.h index ee54920..6b678e2 100644 --- a/include/config.h +++ b/include/config.h @@ -1,17 +1,20 @@ /* #undef AUTH_MODE_CERT */ #define AUTH_MODE_KEY /* #undef AUTH_WITH_NOTLS */ -/* #undef GATEWAY_ENABLED */ +#define GATEWAY_ENABLED /* #undef COAP_COMM_ENABLED */ #define OTA_MQTT_CHANNEL /* #undef SYSTEM_COMM */ -#define EVENT_POST_ENABLED +/* #undef EVENT_POST_ENABLED */ #define ACTION_ENABLED /* #undef DEV_DYN_REG_ENABLED */ /* #undef LOG_UPLOAD */ /* #undef IOT_DEBUG */ /* #undef DEBUG_DEV_INFO_USED */ -/* #undef AT_TCP_ENABLED */ -/* #undef AT_UART_RECV_IRQ */ +#define AT_TCP_ENABLED +#define AT_UART_RECV_IRQ /* #undef AT_OS_USED */ /* #undef AT_DEBUG */ +/* #undef OTA_USE_HTTPS */ +#define GATEWAY_ENABLED +/* #undef MULTITHREAD_ENABLED */ diff --git a/include/exports/qcloud_iot_export_data_template.h b/include/exports/qcloud_iot_export_data_template.h index ddc339a..227c98a 100644 --- a/include/exports/qcloud_iot_export_data_template.h +++ b/include/exports/qcloud_iot_export_data_template.h @@ -153,9 +153,11 @@ typedef struct { * * @param pParams data_template init parameters * + * @param pMqttClient data_template mqtt_client,construct mqtt_client if input NULL + * * @return a valid data_template client handle when success, or NULL otherwise */ -void* IOT_Template_Construct(TemplateInitParams *pParams); +void* IOT_Template_Construct(TemplateInitParams *pParams, void *pMqttClient); /** * @brief Publish MQTT message @@ -216,7 +218,29 @@ int IOT_Template_Destroy(void *handle); * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ int IOT_Template_Yield(void *handle, uint32_t timeout_ms); - + +#ifdef MULTITHREAD_ENABLED +/** + * @brief Check connection and keep alive state, read/handle MQTT message in synchronized way + * + * @param pClient handle to data_template client + * @param timeout_ms timeout value (unit: ms) for this operation + * + * @return QCLOUD_RET_SUCCESS when success, or err code for failure + */ +int IOT_Template_Yield_Without_MQTT_Yield(void *handle, uint32_t timeout_ms); + + +/** + * @brief Only release Data_Template Client resource, retain mqtt client for multi-thread case + * + * @param pClient pointer of handle to data_template client + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Template_Destroy_Except_MQTT(void *handle); +#endif + /** * @brief Register device property * diff --git a/include/exports/qcloud_iot_export_gateway.h b/include/exports/qcloud_iot_export_gateway.h new file mode 100644 index 0000000..e565e8f --- /dev/null +++ b/include/exports/qcloud_iot_export_gateway.h @@ -0,0 +1,158 @@ + +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#ifndef QCLOUD_IOT_EXPORT_GATEWAY_H_ +#define QCLOUD_IOT_EXPORT_GATEWAY_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "qcloud_iot_export_mqtt.h" + +/* Gateway and sub-device parameter */ +typedef struct { + /*gateway device info */ + char *product_id; + char *device_name; + /*sub-device device info */ + char *subdev_product_id; + char *subdev_device_name; + +} GatewayParam; + +#define DEFAULT_GATEWAY_PARAMS {NULL, NULL, NULL, NULL} + +/** + * @brief Define a callback to be invoked when gatway event happen + * + * @param context, the program context + * @param client, the gateway client + * @param msg, the event message. + * + * @return none + */ +typedef void (*GatewayEventHandleFun)(void *client, void *context, void *msg); + + +/* The structure of gateway init param */ +typedef struct { + MQTTInitParams init_param; /* MQTT params */ + void *event_context; /* the user context */ + GatewayEventHandleFun event_handler; /* event handler for gateway user*/ +} GatewayInitParam; + +#define DEFAULT_GATEWAY_INIT_PARAMS { DEFAULT_MQTTINIT_PARAMS, NULL, NULL} + + +/** + * @brief Create gateway client and connect to MQTT server + * + * @param init_param Gateway MQTT init parameters + * + * @return a valid gateway client handle when success, or NULL otherwise + */ +void *IOT_Gateway_Construct(GatewayInitParam* init_param); + +/** + * @brief Close connection and destroy gateway client + * + * @param client handle to gateway client + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Gateway_Destroy(void *client); + +/** + * @brief Make sub-device online + * + * @param client handle to gateway client + * @param param sub-device parameters + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Gateway_Subdev_Online(void *client, GatewayParam* param); + +/** + * @brief Make sub-device offline + * + * @param client handle to gateway client + * @param param sub-device parameters + * + * @return QCLOUD_RET_SUCCESS for success, or err code for failure + */ +int IOT_Gateway_Subdev_Offline(void *client, GatewayParam* param); + + +/** + * @brief Publish gateway MQTT message + * + * @param client handle to gateway client + * @param topic_name MQTT topic name + * @param params publish parameters + * + * @return packet id (>=0) when success, or err code (<0) for failure + */ +int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params); + + +/** + * @brief Subscribe gateway MQTT topic + * + * @param client handle to gateway client + * @param topic_filter MQTT topic filter + * @param params subscribe parameters + * + * @return packet id (>=0) when success, or err code (<0) for failure + */ +int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params); + + +/** + * @brief unsubscribe gateway MQTT topic + * + * @param client handle to gateway client + * @param topic_filter MQTT topic filter + * + * @return packet id (>=0) when success, or err code (<0) for failure + */ +int IOT_Gateway_Unsubscribe(void *client, char *topic_filter); + + +/** + * @brief Check connection and keep alive state, read/handle MQTT message in synchronized way + * + * @param client handle to gateway client + * @param timeout_ms timeout value (unit: ms) for this operation + * + * @return QCLOUD_RET_SUCCESS when success, or err code for failure + */ +int IOT_Gateway_Yield(void *client, uint32_t timeout_ms); + +/** + * @brief Get mqtt_client of GateWay + * + * @param client handle to gateway client + * + * @return mqtt_client of GateWay + */ +void *IOT_Gateway_Get_MQTT_Client(void *client); + +#ifdef __cplusplus +} +#endif + +#endif /* QCLOUD_IOT_EXPORT_GATEWAY_H_ */ diff --git a/include/lite-utils.h b/include/lite-utils.h index 5c992fe..fcf7775 100644 --- a/include/lite-utils.h +++ b/include/lite-utils.h @@ -65,6 +65,8 @@ char *LITE_format_nstring(const int len, const char *fmt, ...); void LITE_hexbuf_convert(unsigned char *digest, char *out, int buflen, int uppercase); void LITE_hexstr_convert(char *hexstr, uint8_t *out_buf, int len); void LITE_replace_substr(char orig[], char key[], char swap[]); +void LITE_str_strip_char(char *src, char destCh); + char *LITE_json_value_of(char *key, char *src); list_head_t *LITE_json_keys_of(char *src, char *prefix); diff --git a/include/qcloud_iot_export.h b/include/qcloud_iot_export.h index 52a67d4..c6c4768 100644 --- a/include/qcloud_iot_export.h +++ b/include/qcloud_iot_export.h @@ -25,7 +25,7 @@ extern "C" { /* IoT C-SDK version info */ -#define QCLOUD_IOT_DEVICE_SDK_VERSION "3.1.0" +#define QCLOUD_IOT_DEVICE_SDK_VERSION "3.1.1" /**************** QCloud IoT C-SDK constants begin ************************/ @@ -36,22 +36,22 @@ extern "C" { #define MAX_SIZE_OF_PRODUCT_ID (10) /* MAX size of product secret */ -#define MAX_SIZE_OF_PRODUCT_SECRET (32) +#define MAX_SIZE_OF_PRODUCT_SECRET (32) /* MAX size of device name */ #define MAX_SIZE_OF_DEVICE_NAME (48) /* MAX size of device secret */ -#define MAX_SIZE_OF_DEVICE_SECRET (64) +#define MAX_SIZE_OF_DEVICE_SECRET (64) /* MAX size of device cert file name */ #define MAX_SIZE_OF_DEVICE_CERT_FILE_NAME (128) /* MAX size of device key file name */ -#define MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME (128) +#define MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME (128) /* MAX num of subdevice */ -#define MAX_NUM_SUB_DEV (5) +#define MAX_NUM_SUB_DEV (50) /**************** QCloud IoT C-SDK constants end *************************/ @@ -76,7 +76,7 @@ typedef struct { typedef struct { DeviceInfo gw_info; DeviceInfo sub_dev_info[MAX_NUM_SUB_DEV]; - unsigned int sub_dev_num; + int sub_dev_num; } GatewayDeviceInfo; #endif @@ -85,8 +85,10 @@ typedef struct { #include "qcloud_iot_export_error.h" #include "qcloud_iot_export_log.h" #include "qcloud_iot_export_mqtt.h" -#include "qcloud_iot_export_ota.h" #include "qcloud_iot_export_data_template.h" +#include "qcloud_iot_export_ota.h" +#include "qcloud_iot_export_gateway.h" + #ifdef __cplusplus diff --git a/make.settings b/make.settings index c45ad21..543250f 100644 --- a/make.settings +++ b/make.settings @@ -19,6 +19,12 @@ PLATFORM_AT_DEV = esp8266 # 是否打开MQTT通道的总开关 FEATURE_MQTT_COMM_ENABLED = y +# 是否打开网关功能 +FEATURE_GATEWAY_ENABLED = n + +# 是否使能多线程 +FEATURE_MULTITHREAD_ENABLED = n + # 是否打开OTA固件升级总开关 FEATURE_OTA_COMM_ENABLED = y @@ -51,3 +57,7 @@ FEATURE_AT_OS_USED = y # 是否打开AT模组调试功能 FEATURE_AT_DEBUG = y + +# 是否使用HTTPS下载固件 +FEATURE_OTA_USE_HTTPS = y + diff --git a/platform/at_device/esp8266/at_device_esp8266.c b/platform/at_device/esp8266/at_device_esp8266.c index 5845ec6..ca23952 100644 --- a/platform/at_device/esp8266/at_device_esp8266.c +++ b/platform/at_device/esp8266/at_device_esp8266.c @@ -26,57 +26,57 @@ #include "at_socket_inf.h" #include "at_device_esp8266.h" -#define WIFI_CONN_FLAG (1<<0) -#define SEND_OK_FLAG (1<<1) -#define SEND_FAIL_FLAG (1<<2) +#define WIFI_CONN_FLAG (1<<0) +#define SEND_OK_FLAG (1<<1) +#define SEND_FAIL_FLAG (1<<2) static uint8_t sg_SocketBitMap = 0; static at_evt_cb_t at_evt_cb_table[] = { - [AT_SOCKET_EVT_RECV] = NULL, - [AT_SOCKET_EVT_CLOSED] = NULL, + [AT_SOCKET_EVT_RECV] = NULL, + [AT_SOCKET_EVT_CLOSED] = NULL, }; - + static int alloc_fd(void) { - uint8_t i; - int fd; + uint8_t i; + int fd; - for(i = 0; i < ESP8266_MAX_SOCKET_NUM; i++){ - if(0 == ((sg_SocketBitMap>>i) & 0x01)){ - sg_SocketBitMap |= (1<> i) & 0x01)) { + sg_SocketBitMap |= (1 << i) & 0xff; + break; + } + } - return (i < ESP8266_MAX_SOCKET_NUM)?(fd = i):(fd = UNUSED_SOCKET); + return (i < ESP8266_MAX_SOCKET_NUM) ? (fd = i) : (fd = UNUSED_SOCKET); } static void free_fd(int fd) { - uint8_t i = fd; + uint8_t i = fd; - if((fd != UNUSED_SOCKET) && fd < ESP8266_MAX_SOCKET_NUM){ - sg_SocketBitMap &= ~((1< sizeof(temp)){ + while (temp_size < bfsz) { + if (bfsz - temp_size > sizeof(temp)) { at_client_recv(temp, sizeof(temp), timeout); - }else{ + } else { at_client_recv(temp, bfsz - temp_size, timeout); } temp_size += sizeof(temp); @@ -133,15 +131,14 @@ static void urc_recv_func(const char *data, size_t size) } /* sync receive data */ - if (at_client_recv(recv_buf, bfsz, timeout) != bfsz) - { + if (at_client_recv(recv_buf, bfsz, timeout) != bfsz) { Log_e("receive size(%d) data failed!", bfsz); HAL_Free(recv_buf); return; } /* notice the receive buffer and buffer size */ - if (at_evt_cb_table[AT_SOCKET_EVT_RECV]){ + if (at_evt_cb_table[AT_SOCKET_EVT_RECV]) { at_evt_cb_table[AT_SOCKET_EVT_RECV](fd, AT_SOCKET_EVT_RECV, recv_buf, bfsz); } } @@ -149,7 +146,7 @@ static void urc_recv_func(const char *data, size_t size) static void urc_busy_p_func(const char *data, size_t size) { POINTER_SANITY_CHECK_RTN(data); - + Log_d("system is processing a commands and it cannot respond to the current commands."); } @@ -162,348 +159,344 @@ static void urc_busy_s_func(const char *data, size_t size) static void urc_func(const char *data, size_t size) { - POINTER_SANITY_CHECK_RTN(data); - int i; - - if (strstr(data, "WIFI CONNECTED")){ + POINTER_SANITY_CHECK_RTN(data); + int i; + + if (strstr(data, "WIFI CONNECTED")) { at_setFlag(WIFI_CONN_FLAG); - }else if (strstr(data, "WIFI DISCONNECT")){ - /* notice the socket is disconnect by remote */ - if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]){ - for(i = 0; i < ESP8266_MAX_SOCKET_NUM; i++){ - at_evt_cb_table[AT_SOCKET_EVT_CLOSED](i, AT_SOCKET_EVT_CLOSED, NULL, 0); - free_fd(i); - } - } + } else if (strstr(data, "WIFI DISCONNECT")) { + /* notice the socket is disconnect by remote */ + if (at_evt_cb_table[AT_SOCKET_EVT_CLOSED]) { + for (i = 0; i < ESP8266_MAX_SOCKET_NUM; i++) { + at_evt_cb_table[AT_SOCKET_EVT_CLOSED](i, AT_SOCKET_EVT_CLOSED, NULL, 0); + free_fd(i); + } + } } } static at_urc urc_table[] = { - {"SEND OK", "\r\n", urc_send_func}, - {"SEND FAIL", "\r\n", urc_send_func}, - {"Recv", "bytes\r\n", urc_send_bfsz_func}, - {"", ",CLOSED\r\n", urc_close_func}, - {"+IPD", ":", urc_recv_func}, - {"busy p", "\r\n", urc_busy_p_func}, - {"busy s", "\r\n", urc_busy_s_func}, - {"WIFI CONNECTED", "\r\n", urc_func}, - {"WIFI DISCONNECT", "\r\n", urc_func}, + {"SEND OK", "\r\n", urc_send_func}, + {"SEND FAIL", "\r\n", urc_send_func}, + {"Recv", "bytes\r\n", urc_send_bfsz_func}, + {"", ",CLOSED\r\n", urc_close_func}, + {"+IPD", ":", urc_recv_func}, + {"busy p", "\r\n", urc_busy_p_func}, + {"busy s", "\r\n", urc_busy_s_func}, + {"WIFI CONNECTED", "\r\n", urc_func}, + {"WIFI DISCONNECT", "\r\n", urc_func}, }; static void esp8266_set_event_cb(at_socket_evt_t event, at_evt_cb_t cb) { - if (event < sizeof(at_evt_cb_table) / sizeof(at_evt_cb_table[0])){ + if (event < sizeof(at_evt_cb_table) / sizeof(at_evt_cb_table[0])) { at_evt_cb_table[event] = cb; } } static int esp8266_init(void) { - at_response_t resp = NULL; - int ret; - int i; - - resp = at_create_resp(512, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - /* reset module */ - at_exec_cmd(resp, "AT+RST"); - - /* reset waiting delay */ - at_delayms(2000); - - /* disable echo */ - - ret = at_exec_cmd(resp, "ATE0"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd ATE0 exec err"); - //goto exit; - } - - at_delayms(100); - /* set current mode to Wi-Fi station */ - ret = at_exec_cmd(resp, "AT+CWMODE=1"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CWMODE=1 exec err"); - //goto exit; - } - - at_delayms(100); - /* get module version */ - ret = at_exec_cmd(resp, "AT+GMR"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CWMODE=1 exec err"); - //goto exit; - } - - /* show module version */ - for (i = 0; i < resp->line_counts - 1; i++){ - Log_d("%s", at_resp_get_line(resp, i + 1)); - } - - at_delayms(100); - at_clearFlag(WIFI_CONN_FLAG); - /* connect to WiFi AP */ - ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); - - if(!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)){ - Log_e("wifi connect timeout"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - ret = at_exec_cmd(resp, "AT+CIPMUX=1"); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CIPMUX=1 exec err"); - } + at_response_t resp = NULL; + int ret; + int i; + + resp = at_create_resp(512, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + /* reset module */ + at_exec_cmd(resp, "AT+RST"); + + /* reset waiting delay */ + at_delayms(2000); + + /* disable echo */ + + ret = at_exec_cmd(resp, "ATE0"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd ATE0 exec err"); + //goto exit; + } + + at_delayms(100); + /* set current mode to Wi-Fi station */ + ret = at_exec_cmd(resp, "AT+CWMODE=1"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CWMODE=1 exec err"); + //goto exit; + } + + at_delayms(100); + /* get module version */ + ret = at_exec_cmd(resp, "AT+GMR"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CWMODE=1 exec err"); + //goto exit; + } + + /* show module version */ + for (i = 0; i < resp->line_counts - 1; i++) { + Log_d("%s", at_resp_get_line(resp, i + 1)); + } + + at_delayms(100); + at_clearFlag(WIFI_CONN_FLAG); + /* connect to WiFi AP */ + ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); + + if (!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)) { + Log_e("wifi connect timeout"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + ret = at_exec_cmd(resp, "AT+CIPMUX=1"); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CIPMUX=1 exec err"); + } __exit: - if (resp){ - at_delete_resp(resp); - } - - return ret; + if (resp) { + at_delete_resp(resp); + } + + return ret; } static int esp8266_close(int fd) { - at_response_t resp; - int ret; + at_response_t resp; + int ret; - resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } + resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } - ret = at_exec_cmd(resp, "AT+CIPCLOSE=%d", fd); + ret = at_exec_cmd(resp, "AT+CIPCLOSE=%d", fd); - if (QCLOUD_RET_SUCCESS != ret) { //fancyxu - Log_e("close socket(%d) fail",fd); - } + if (QCLOUD_RET_SUCCESS != ret) { //fancyxu + Log_e("close socket(%d) fail", fd); + } - if (resp){ - at_delete_resp(resp); - } + if (resp) { + at_delete_resp(resp); + } - return ret; + return ret; } static int esp8266_connect(const char *ip, uint16_t port, eNetProto proto) { - at_response_t resp; - bool retryed = false; - int fd, ret; - - POINTER_SANITY_CHECK(ip, QCLOUD_ERR_INVAL); - resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - fd = alloc_fd(); - if(fd < 0){ - Log_e("esp8226 support max %d chain", ESP8266_MAX_SOCKET_NUM); - return QCLOUD_ERR_FAILURE; - } - -__retry: - - switch (proto) - { - case eNET_TCP: - /* send AT commands to connect TCP server */ - ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d,60", fd, ip, port); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("start tcp connect failed, fd=%d,ip(%s),port(%d)",fd, ip, port); - } - break; - - case eNET_UDP: - ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d", fd, ip, port); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("start udp connect failed, fd=%d,ip(%s),port(%d)",fd, ip, port); - } - break; - - default: - Log_e("Not supported connect type : %d", proto); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - - if ((QCLOUD_RET_SUCCESS != ret) && !retryed){ - Log_e("socket(%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", fd); - if (QCLOUD_RET_SUCCESS != esp8266_close(fd)){ - goto __exit; - } - retryed = true; - at_delayms(100); - goto __retry; - } + at_response_t resp; + bool retryed = false; + int fd, ret; + + POINTER_SANITY_CHECK(ip, QCLOUD_ERR_INVAL); + resp = at_create_resp(128, 0, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + fd = alloc_fd(); + if (fd < 0) { + Log_e("esp8226 support max %d chain", ESP8266_MAX_SOCKET_NUM); + return QCLOUD_ERR_FAILURE; + } + +__retry: + + switch (proto) { + case eNET_TCP: + /* send AT commands to connect TCP server */ + ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"TCP\",\"%s\",%d,60", fd, ip, port); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("start tcp connect failed, fd=%d,ip(%s),port(%d)", fd, ip, port); + } + break; + + case eNET_UDP: + ret = at_exec_cmd(resp, "AT+CIPSTART=%d,\"UDP\",\"%s\",%d", fd, ip, port); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("start udp connect failed, fd=%d,ip(%s),port(%d)", fd, ip, port); + } + break; + + default: + Log_e("Not supported connect type : %d", proto); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + + if ((QCLOUD_RET_SUCCESS != ret) && !retryed) { + Log_e("socket(%d) connect failed, maybe the socket was not be closed at the last time and now will retry.", fd); + if (QCLOUD_RET_SUCCESS != esp8266_close(fd)) { + goto __exit; + } + retryed = true; + at_delayms(100); + goto __retry; + } __exit: - if (resp){ - at_delete_resp(resp); - } + if (resp) { + at_delete_resp(resp); + } - if(QCLOUD_RET_SUCCESS != ret){ - free_fd(fd); - fd = UNUSED_SOCKET; - } + if (QCLOUD_RET_SUCCESS != ret) { + free_fd(fd); + fd = UNUSED_SOCKET; + } - at_delayms(200); - return fd; + at_delayms(200); + return fd; } static int esp8266_send(int fd, const void *buff, size_t len) { - int ret; - at_response_t resp ; - size_t cur_pkt_size = 0; - size_t sent_size = 0; - size_t temp_size = 0; - - POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); - resp = at_create_resp(512, 2, AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - /* set AT client end sign to deal with '>' sign.*/ - at_set_end_sign('>'); - - while (sent_size < len) - { - if (len - sent_size < ESP8266_SEND_MAX_LEN_ONCE){ - cur_pkt_size = len - sent_size; - }else{ - cur_pkt_size = ESP8266_SEND_MAX_LEN_ONCE; - } - - at_clearFlag(SEND_OK_FLAG); - at_clearFlag(SEND_FAIL_FLAG); - /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line. */ - ret = at_exec_cmd(resp, "AT+CIPSEND=%d,%d", fd, cur_pkt_size); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("cmd AT+CIPSEND exec err"); - goto __exit; - } - at_set_end_sign(0); - /* send the real data to server or client */ - temp_size = at_client_send(at_client_get(), (char *)buff + sent_size, cur_pkt_size, AT_RESP_TIMEOUT_MS); - - if(cur_pkt_size != temp_size){ - Log_e("at send real data failed"); - goto __exit; - } + int ret; + at_response_t resp ; + size_t cur_pkt_size = 0; + size_t sent_size = 0; + size_t temp_size = 0; + + POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); + resp = at_create_resp(512, 2, AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + /* set AT client end sign to deal with '>' sign.*/ + at_set_end_sign('>'); + + while (sent_size < len) { + if (len - sent_size < ESP8266_SEND_MAX_LEN_ONCE) { + cur_pkt_size = len - sent_size; + } else { + cur_pkt_size = ESP8266_SEND_MAX_LEN_ONCE; + } + + at_clearFlag(SEND_OK_FLAG); + at_clearFlag(SEND_FAIL_FLAG); + /* send the "AT+CIPSEND" commands to AT server than receive the '>' response on the first line. */ + ret = at_exec_cmd(resp, "AT+CIPSEND=%d,%d", fd, cur_pkt_size); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("cmd AT+CIPSEND exec err"); + goto __exit; + } + at_set_end_sign(0); + /* send the real data to server or client */ + temp_size = at_client_send(at_client_get(), (char *)buff + sent_size, cur_pkt_size, AT_RESP_TIMEOUT_MS); + + if (cur_pkt_size != temp_size) { + Log_e("at send real data failed"); + goto __exit; + } #ifndef AT_OS_USED - at_urc urc_send = {.cmd_prefix = "SEND OK",.cmd_suffix = "\r\n", NULL}; - at_client_yeild(&urc_send, resp->timeout); - if (at_client_get()->resp_status != AT_RESP_OK) - { - Log_e("send fail"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } + at_urc urc_send = {.cmd_prefix = "SEND OK", .cmd_suffix = "\r\n", NULL}; + at_client_yeild(&urc_send, resp->timeout); + if (at_client_get()->resp_status != AT_RESP_OK) { + Log_e("send fail"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } #else - if(at_waitFlag(SEND_OK_FLAG|SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)){ - if(at_waitFlag(SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)){ - Log_e("send fail"); - ret = QCLOUD_ERR_FAILURE; - goto __exit; - } - } + if (at_waitFlag(SEND_OK_FLAG | SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)) { + if (at_waitFlag(SEND_FAIL_FLAG, AT_RESP_TIMEOUT_MS)) { + Log_e("send fail"); + ret = QCLOUD_ERR_FAILURE; + goto __exit; + } + } #endif - sent_size += cur_pkt_size; - } + sent_size += cur_pkt_size; + } - ret = QCLOUD_RET_SUCCESS; + ret = QCLOUD_RET_SUCCESS; __exit: - /* reset the end sign for data */ - if (resp){ - at_delete_resp(resp); - } + /* reset the end sign for data */ + if (resp) { + at_delete_resp(resp); + } - return sent_size; //fancyxu + return sent_size; //fancyxu } static int esp8266_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) { #ifndef AT_OS_USED - at_client_yeild(NULL, timeout); + at_client_yeild(NULL, timeout); #endif - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } static int esp8266_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) { #define RESOLVE_RETRY 5 - char recv_ip[16] = { 0 }; - at_response_t resp; - int ret,i; - - POINTER_SANITY_CHECK(host_name, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(host_ip, QCLOUD_ERR_INVAL); - - - if(host_ip_len < 16){ - Log_e("host ip buff too short"); - return QCLOUD_ERR_FAILURE; - } - - resp = at_create_resp(128, 0, 4*AT_RESP_TIMEOUT_MS); - if (NULL == resp){ - Log_e("No memory for response structure!"); - return QCLOUD_ERR_FAILURE; - } - - for (i = 0; i < RESOLVE_RETRY; i++){ - ret = at_exec_cmd(resp, "AT+CIPDOMAIN=\"%s\"", host_name); - if (QCLOUD_RET_SUCCESS != ret){ - Log_e("exec AT+CIPDOMAIN=\"%s\" fail", host_name); - goto __exit; - } - - /* parse the third line of response data, get the IP address */ - if (at_resp_parse_line_args_by_kw(resp, "+CIPDOMAIN:", "+CIPDOMAIN:%s", recv_ip) < 0){ - at_delayms(100); - /* resolve failed, maybe receive an URC CRLF */ - continue; - } - - if (strlen(recv_ip) < 8){ - at_delayms(100); - /* resolve failed, maybe receive an URC CRLF */ - continue; - } - else{ - strncpy(host_ip, recv_ip, 15); - host_ip[15] = '\0'; - break; - } - } + char recv_ip[16] = { 0 }; + at_response_t resp; + int ret, i; + + POINTER_SANITY_CHECK(host_name, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(host_ip, QCLOUD_ERR_INVAL); + + + if (host_ip_len < 16) { + Log_e("host ip buff too short"); + return QCLOUD_ERR_FAILURE; + } + + resp = at_create_resp(128, 0, 4 * AT_RESP_TIMEOUT_MS); + if (NULL == resp) { + Log_e("No memory for response structure!"); + return QCLOUD_ERR_FAILURE; + } + + for (i = 0; i < RESOLVE_RETRY; i++) { + ret = at_exec_cmd(resp, "AT+CIPDOMAIN=\"%s\"", host_name); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("exec AT+CIPDOMAIN=\"%s\" fail", host_name); + goto __exit; + } + + /* parse the third line of response data, get the IP address */ + if (at_resp_parse_line_args_by_kw(resp, "+CIPDOMAIN:", "+CIPDOMAIN:%s", recv_ip) < 0) { + at_delayms(100); + /* resolve failed, maybe receive an URC CRLF */ + continue; + } + + if (strlen(recv_ip) < 8) { + at_delayms(100); + /* resolve failed, maybe receive an URC CRLF */ + continue; + } else { + strncpy(host_ip, recv_ip, 15); + host_ip[15] = '\0'; + break; + } + } __exit: - if (resp){ - at_delete_resp(resp); - } - -#undef RESOLVE_RETRY + if (resp) { + at_delete_resp(resp); + } + +#undef RESOLVE_RETRY - return ret; + return ret; } at_device_op_t at_ops_esp8266 = { @@ -514,62 +507,58 @@ at_device_op_t at_ops_esp8266 = { .close = esp8266_close, .parse_domain = esp8266_parse_domain, .set_event_cb = esp8266_set_event_cb, - .deviceName = "esp8266", + .deviceName = "esp8266", }; int at_device_esp8266_init(void) -{ - int i; - int ret; - at_client_t p_client; - - ret = HAL_AT_Uart_Init(); +{ + int i; + int ret; + at_client_t p_client; + + ret = HAL_AT_Uart_Init(); if (QCLOUD_RET_SUCCESS != ret) { Log_e("at uart init fail!"); } else { - Log_d("at uart init success!"); - } + Log_d("at uart init success!"); + } /* initialize AT client */ ret = at_client_init(&p_client); - if(QCLOUD_RET_SUCCESS != ret) - { - Log_e("at client init fail,ret:%d", ret); - goto exit; - } - else - { - Log_d("at client init success"); - } - + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at client init fail,ret:%d", ret); + goto exit; + } else { + Log_d("at client init success"); + } + /* register URC data execution function */ at_set_urc_table(p_client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); - Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); - for(i=0; i < p_client->urc_table_size; i++) - { - Log_d("%s",p_client->urc_table[i].cmd_prefix); - } + Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); + for (i = 0; i < p_client->urc_table_size; i++) { + Log_d("%s", p_client->urc_table[i].cmd_prefix); + } - ret = at_device_op_register(&at_ops_esp8266); - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("at device driver register fail"); - goto exit; - } + ret = at_device_op_register(&at_ops_esp8266); + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("at device driver register fail"); + goto exit; + } exit: - if(QCLOUD_RET_SUCCESS != ret){ - if(NULL != p_client){ - at_client_deinit(p_client); - } - } - + if (QCLOUD_RET_SUCCESS != ret) { + if (NULL != p_client) { + at_client_deinit(p_client); + } + } + return ret; } /*at device driver must realize this api which called by HAL_AT_TCP_Init*/ int at_device_init(void) { - return at_device_esp8266_init(); + return at_device_esp8266_init(); } diff --git a/platform/os/freertos/HAL_AT_UART_freertos.c b/platform/os/freertos/HAL_AT_UART_freertos.c index 70180de..bcfb309 100644 --- a/platform/os/freertos/HAL_AT_UART_freertos.c +++ b/platform/os/freertos/HAL_AT_UART_freertos.c @@ -32,7 +32,7 @@ #include "stm32l4xx_hal.h" #define HAL_AT_UART_IRQHandler USART1_IRQHandler -extern UART_HandleTypeDef huart1; +extern UART_HandleTypeDef huart1; static UART_HandleTypeDef *pAtUart = &huart1; extern void AT_Uart_Init(void); @@ -44,16 +44,15 @@ extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); * @brief This function handles AT UART global interrupt,push recv char to ringbuff. */ void HAL_AT_UART_IRQHandler(void) -{ - uint8_t ch; - if(__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) - { - ch = (uint8_t) READ_REG(pAtUart->Instance->RDR)&0xFF; - /*this callback for at_client*/ - at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); - } - __HAL_UART_CLEAR_PEFLAG(pAtUart); +{ + uint8_t ch; + if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { + ch = (uint8_t) READ_REG(pAtUart->Instance->RDR) & 0xFF; + /*this callback for at_client*/ + at_client_uart_rx_isr_cb(&ch, 1); + HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + } + __HAL_UART_CLEAR_PEFLAG(pAtUart); } @@ -65,24 +64,21 @@ void HAL_AT_UART_IRQHandler(void) */ int HAL_AT_Uart_Send(void *data, uint32_t size) { - if(HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) - { - return size; - } - else - { - return 0; - } + if (HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) { + return size; + } else { + return 0; + } } int HAL_AT_Uart_Init(void) { - AT_Uart_Init(); - return QCLOUD_RET_SUCCESS; + AT_Uart_Init(); + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif diff --git a/platform/os/freertos/HAL_Device_freertos.c b/platform/os/freertos/HAL_Device_freertos.c index 0b42a64..23a0541 100644 --- a/platform/os/freertos/HAL_Device_freertos.c +++ b/platform/os/freertos/HAL_Device_freertos.c @@ -28,7 +28,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -50,111 +50,111 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); #else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo from json not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/platform/os/freertos/HAL_OS_freertos.c b/platform/os/freertos/HAL_OS_freertos.c index 8312794..955b3a1 100644 --- a/platform/os/freertos/HAL_OS_freertos.c +++ b/platform/os/freertos/HAL_OS_freertos.c @@ -31,14 +31,14 @@ //TODO platform dependant void HAL_SleepMs(_IN_ uint32_t ms) { - TickType_t ticks = ms / portTICK_PERIOD_MS; + TickType_t ticks = ms / portTICK_PERIOD_MS; - vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ + vTaskDelay(ticks ? ticks : 1); /* Minimum delay = 1 tick */ - return ; + return ; } - + void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; @@ -70,12 +70,12 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void *HAL_Malloc(_IN_ uint32_t size) { - return pvPortMalloc( size); + return pvPortMalloc( size); } void HAL_Free(_IN_ void *ptr) { - vPortFree(ptr); + vPortFree(ptr); } @@ -106,7 +106,7 @@ void HAL_MutexLock(_IN_ void *mutex) HAL_Printf("%s: invalid mutex\n", __FUNCTION__); return ; } - + if (xSemaphoreTake(mutex, portMAX_DELAY) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); return ; @@ -119,12 +119,12 @@ int HAL_MutexTryLock(_IN_ void *mutex) HAL_Printf("%s: invalid mutex\n", __FUNCTION__); return -1; } - + if (xSemaphoreTake(mutex, 0) != pdTRUE) { HAL_Printf("%s: xSemaphoreTake failed\n", __FUNCTION__); return -1; } - + return 0; } @@ -147,55 +147,53 @@ void HAL_MutexUnlock(_IN_ void *mutex) /* * return void* threadId */ -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - osThreadId thread_t = (osThreadId)HAL_Malloc(sizeof(osThreadId)); + osThreadId thread_t = (osThreadId)HAL_Malloc(sizeof(osThreadId)); - osThreadDef(taskname, (os_pthread)fn, (osPriority)priority, 0, stack_size); - thread_t = osThreadCreate(osThread(taskname), arg); - if(NULL == thread_t){ - HAL_Printf("create thread fail\n\r"); - } + osThreadDef(taskname, (os_pthread)fn, (osPriority)priority, 0, stack_size); + thread_t = osThreadCreate(osThread(taskname), arg); + if (NULL == thread_t) { + HAL_Printf("create thread fail\n\r"); + } - return (void *)thread_t; + return (void *)thread_t; } int HAL_ThreadDestroy(void* threadId) { - return osThreadTerminate(threadId); + return osThreadTerminate(threadId); } void *HAL_SemaphoreCreate(void) { - return (void *)osSemaphoreCreate(NULL, 1); + return (void *)osSemaphoreCreate(NULL, 1); } void HAL_SemaphoreDestroy(void *sem) { - osStatus ret; - - ret = osSemaphoreDelete ((osSemaphoreId)sem); - if(osOK != ret) - { - HAL_Printf("HAL_SemaphoreDestroy err, err:%d\n\r",ret); - } + osStatus ret; + + ret = osSemaphoreDelete ((osSemaphoreId)sem); + if (osOK != ret) { + HAL_Printf("HAL_SemaphoreDestroy err, err:%d\n\r", ret); + } } void HAL_SemaphorePost(void *sem) { - osStatus ret; - - ret = osSemaphoreRelease ((osSemaphoreId) sem); + osStatus ret; - if(osOK != ret) - { - HAL_Printf("HAL_SemaphorePost err, err:%d\n\r",ret); - } + ret = osSemaphoreRelease ((osSemaphoreId) sem); + + if (osOK != ret) { + HAL_Printf("HAL_SemaphorePost err, err:%d\n\r", ret); + } } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { - return osSemaphoreWait ((osSemaphoreId)sem, timeout_ms); + return osSemaphoreWait ((osSemaphoreId)sem, timeout_ms); } #endif diff --git a/platform/os/freertos/HAL_TCP_lwip.c b/platform/os/freertos/HAL_TCP_lwip.c index 8d5bb48..bfb91c3 100644 --- a/platform/os/freertos/HAL_TCP_lwip.c +++ b/platform/os/freertos/HAL_TCP_lwip.c @@ -45,8 +45,8 @@ static uint32_t _time_left(uint32_t t_end, uint32_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; + int ret; + struct addrinfo hints, *addr_list, *cur; int fd = 0; char port_str[6]; @@ -55,7 +55,7 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) memset(&hints, 0x00, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + hints.ai_protocol = IPPROTO_TCP; ret = getaddrinfo(host, port_str, &hints, &addr_list); if (ret) { @@ -64,21 +64,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } - - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd + LWIP_SOCKET_FD_SHIFT; - break; - } - - close( fd ); - ret = 0; + fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); + if ( fd < 0 ) { + ret = 0; + continue; + } + + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd + LWIP_SOCKET_FD_SHIFT; + break; + } + + close( fd ); + ret = 0; } if (ret == 0) { @@ -105,14 +103,14 @@ int HAL_TCP_Disconnect(uintptr_t fd) /* Shutdown both send and receive operations. */ rc = shutdown((int) fd, 2); - if (0 != rc) { - Log_e("shutdown error: %s", strerror(errno)); + if (0 != rc) { + Log_e("shutdown error: %s", strerror(errno)); return -1; } rc = close((int) fd); if (0 != rc) { - Log_e("closesocket error: %s", strerror(errno)); + Log_e("closesocket error: %s", strerror(errno)); return -1; } @@ -163,13 +161,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -184,8 +181,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -205,7 +202,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou fd_set sets; struct timeval timeout; - + fd -= LWIP_SOCKET_FD_SHIFT; t_end = HAL_GetTimeMs() + timeout_ms; len_recv = 0; @@ -214,7 +211,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou do { t_left = _time_left(t_end, HAL_GetTimeMs()); if (0 == t_left) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } @@ -238,18 +235,18 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou /* reduce log print due to frequent log server connect/disconnect */ if (peer_port == LOG_UPLOAD_SERVER_PORT) - UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); + UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } - Log_e("recv error: %s", strerror(errno)); + } + Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } @@ -257,7 +254,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } else { - Log_e("select-recv error: %s", strerror(errno)); + Log_e("select-recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } diff --git a/platform/os/freertos/HAL_Timer_freertos.c b/platform/os/freertos/HAL_Timer_freertos.c index c5a93bd..13cb3dc 100644 --- a/platform/os/freertos/HAL_Timer_freertos.c +++ b/platform/os/freertos/HAL_Timer_freertos.c @@ -20,7 +20,7 @@ extern "C" { #include #include #include -#include +#include #include "qcloud_iot_import.h" #define PLATFORM_HAS_TIME_FUNCS @@ -43,72 +43,72 @@ static char now_time_str[20] = {0}; uint32_t HAL_GetTimeMs(void) { #if defined PLATFORM_HAS_TIME_FUNCS - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec*1000 + tv.tv_usec/1000; - + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec * 1000 + tv.tv_usec / 1000; + #elif defined PLATFORM_HAS_CMSIS return HAL_GetTick(); -#endif +#endif } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - return HAL_GetTimeMs()/1000; + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) -{ +char* HAL_Timer_current(void) +{ #if defined PLATFORM_HAS_TIME_FUNCS struct timeval tv; - gettimeofday(&tv, NULL); - time_t now_time = tv.tv_sec; - struct tm tm_tmp = *localtime(&now_time); - strftime(now_time_str, 20, "%F %T", &tm_tmp); - return now_time_str; -#else - long time_sec; - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%ld", time_sec); - return now_time_str; + gettimeofday(&tv, NULL); + time_t now_time = tv.tv_sec; + struct tm tm_tmp = *localtime(&now_time); + strftime(now_time_str, 20, "%F %T", &tm_tmp); + return now_time_str; +#else + long time_sec; + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%ld", time_sec); + return now_time_str; #endif } -bool HAL_Timer_expired(Timer *timer) +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout_ms; } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout * 1000; } -int HAL_Timer_remain(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - return (int)(timer->end_time - HAL_GetTimeMs()); + return (int)(timer->end_time - HAL_GetTimeMs()); } -void HAL_Timer_init(Timer *timer) +void HAL_Timer_init(Timer *timer) { - timer->end_time = 0; + timer->end_time = 0; } - + #ifdef __cplusplus } #endif diff --git a/platform/os/freertos/HAL_UDP_lwip.c b/platform/os/freertos/HAL_UDP_lwip.c index e56de9e..526c10b 100644 --- a/platform/os/freertos/HAL_UDP_lwip.c +++ b/platform/os/freertos/HAL_UDP_lwip.c @@ -49,25 +49,25 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } - - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd + LWIP_SOCKET_FD_SHIFT; - break; - } - - close(fd); - ret = 0; + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } + + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd + LWIP_SOCKET_FD_SHIFT; + break; + } + + close(fd); + ret = 0; } if (0 == ret) { @@ -87,7 +87,7 @@ void HAL_UDP_Disconnect(uintptr_t fd) { long socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; close(socket_id); } @@ -97,7 +97,7 @@ int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datale int rc = -1; long socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; rc = send(socket_id, (char *)p_data, (int)datalen, 0); if (-1 == rc) { @@ -112,7 +112,7 @@ int HAL_UDP_Read(uintptr_t fd, unsigned char *p_data, unsigned int datalen) long socket_id = -1; int count = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; count = (int)read(socket_id, p_data, datalen); @@ -126,7 +126,7 @@ int HAL_UDP_ReadTimeout(uintptr_t fd, unsigned char *p_data, unsigned int datale fd_set read_fds; int socket_id = -1; fd -= LWIP_SOCKET_FD_SHIFT; - + socket_id = (int)fd; if (socket_id < 0) { diff --git a/platform/os/linux/HAL_AT_UART_linux.c b/platform/os/linux/HAL_AT_UART_linux.c index b2300bc..9c3d8f0 100644 --- a/platform/os/linux/HAL_AT_UART_linux.c +++ b/platform/os/linux/HAL_AT_UART_linux.c @@ -45,176 +45,173 @@ static void *at_uart_irq_recv(void *userContex); #define AT_UART_LINUX_DEV "/dev/ttyUSB0" static uart_dev_t sg_at_uart = { - .fd = -1, - .state = eUNUSED, - .config = {BAUDRATE_115200, DATA_WIDTH_8BIT, NO_PARITY, STOP_BITS_1, FLOW_CONTROL_DISABLED, MODE_TX_RX} + .fd = -1, + .state = eUNUSED, + .config = {BAUDRATE_115200, DATA_WIDTH_8BIT, NO_PARITY, STOP_BITS_1, FLOW_CONTROL_DISABLED, MODE_TX_RX} }; int HAL_AT_Uart_Init(void) { - struct termios t_opt; - speed_t baud; - - if (sg_at_uart.state == eOPENED) { - Log_w("%s already opened", AT_UART_LINUX_DEV); - return QCLOUD_ERR_FAILURE; - } - - if ((sg_at_uart.fd = open(AT_UART_LINUX_DEV, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { - Log_e("open at uart failed\r\n"); - return QCLOUD_ERR_FAILURE; - } - - switch (sg_at_uart.config.baud_rate) { - case BAUDRATE_9600: - baud = B9600; - break; - case BAUDRATE_115200: - baud = B115200; - break; - case BAUDRATE_921600: - baud = B921600; - break; - default: - baud = B115200; - break; - } - - /* set the serial port parameters */ - fcntl(sg_at_uart.fd, F_SETFL, 0); - - if (0 != tcgetattr(sg_at_uart.fd, &t_opt)) { - return QCLOUD_ERR_FAILURE; - } - - /* set the input and output baudrate*/ - if (0 != cfsetispeed(&t_opt, baud)) { - return QCLOUD_ERR_FAILURE; - } - - if (0 != cfsetospeed(&t_opt, baud)) { - return QCLOUD_ERR_FAILURE; - } - - /* 8N1, flow control, etc. */ - t_opt.c_cflag |= (CLOCAL | CREAD); - if (sg_at_uart.config.parity == NO_PARITY) { - t_opt.c_cflag &= ~PARENB; - } - if (sg_at_uart.config.stop_bits == STOP_BITS_1) { - t_opt.c_cflag &= ~CSTOPB; - } - else { - t_opt.c_cflag |= CSTOPB; - } - t_opt.c_cflag &= ~CSIZE; - switch (sg_at_uart.config.data_width) { - case DATA_WIDTH_5BIT: - t_opt.c_cflag |= CS5; - break; - case DATA_WIDTH_6BIT: - t_opt.c_cflag |= CS6; - break; - case DATA_WIDTH_7BIT: - t_opt.c_cflag |= CS7; - break; - case DATA_WIDTH_8BIT: - t_opt.c_cflag |= CS8; - break; - default: - t_opt.c_cflag |= CS8; - break; - } - t_opt.c_lflag &= ~(ECHO | ECHOE | ISIG | ICANON); - - /** - * AT is going to use a binary protocol, so make sure to - * turn off any CR/LF translation and the like. - */ - t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); - - t_opt.c_oflag &= ~OPOST; - t_opt.c_cc[VMIN] = 0; - t_opt.c_cc[VTIME] = 5; - if (0 != tcsetattr(sg_at_uart.fd, TCSANOW, &t_opt)) { - return QCLOUD_ERR_FAILURE; - } - - sg_at_uart.state = eOPENED; - - /* clear uart buffer */ - //Log_e("open at uart 1\r\n"); - //read_and_discard_all_data(sg_at_uart.fd); - //Log_e("open at uart 2\r\n"); + struct termios t_opt; + speed_t baud; + + if (sg_at_uart.state == eOPENED) { + Log_w("%s already opened", AT_UART_LINUX_DEV); + return QCLOUD_ERR_FAILURE; + } + + if ((sg_at_uart.fd = open(AT_UART_LINUX_DEV, O_RDWR | O_NOCTTY | O_NDELAY)) == -1) { + Log_e("open at uart failed\r\n"); + return QCLOUD_ERR_FAILURE; + } + + switch (sg_at_uart.config.baud_rate) { + case BAUDRATE_9600: + baud = B9600; + break; + case BAUDRATE_115200: + baud = B115200; + break; + case BAUDRATE_921600: + baud = B921600; + break; + default: + baud = B115200; + break; + } + + /* set the serial port parameters */ + fcntl(sg_at_uart.fd, F_SETFL, 0); + + if (0 != tcgetattr(sg_at_uart.fd, &t_opt)) { + return QCLOUD_ERR_FAILURE; + } + + /* set the input and output baudrate*/ + if (0 != cfsetispeed(&t_opt, baud)) { + return QCLOUD_ERR_FAILURE; + } + + if (0 != cfsetospeed(&t_opt, baud)) { + return QCLOUD_ERR_FAILURE; + } + + /* 8N1, flow control, etc. */ + t_opt.c_cflag |= (CLOCAL | CREAD); + if (sg_at_uart.config.parity == NO_PARITY) { + t_opt.c_cflag &= ~PARENB; + } + if (sg_at_uart.config.stop_bits == STOP_BITS_1) { + t_opt.c_cflag &= ~CSTOPB; + } else { + t_opt.c_cflag |= CSTOPB; + } + t_opt.c_cflag &= ~CSIZE; + switch (sg_at_uart.config.data_width) { + case DATA_WIDTH_5BIT: + t_opt.c_cflag |= CS5; + break; + case DATA_WIDTH_6BIT: + t_opt.c_cflag |= CS6; + break; + case DATA_WIDTH_7BIT: + t_opt.c_cflag |= CS7; + break; + case DATA_WIDTH_8BIT: + t_opt.c_cflag |= CS8; + break; + default: + t_opt.c_cflag |= CS8; + break; + } + t_opt.c_lflag &= ~(ECHO | ECHOE | ISIG | ICANON); + + /** + * AT is going to use a binary protocol, so make sure to + * turn off any CR/LF translation and the like. + */ + t_opt.c_iflag &= ~(IXON | IXOFF | IXANY | INLCR | ICRNL); + + t_opt.c_oflag &= ~OPOST; + t_opt.c_cc[VMIN] = 0; + t_opt.c_cc[VTIME] = 5; + if (0 != tcsetattr(sg_at_uart.fd, TCSANOW, &t_opt)) { + return QCLOUD_ERR_FAILURE; + } + + sg_at_uart.state = eOPENED; + + /* clear uart buffer */ + //Log_e("open at uart 1\r\n"); + //read_and_discard_all_data(sg_at_uart.fd); + //Log_e("open at uart 2\r\n"); #ifdef AT_UART_RECV_IRQ - //START THERAD - //int result; - volatile void *recv_thread; - recv_thread = HAL_ThreadCreate(6144, 0, "at_uart_isr_thread", at_uart_irq_recv, NULL); - if(!recv_thread) Log_e("Init uart_irq_recv failed\r\n"); + //START THERAD + //int result; + volatile void *recv_thread; + recv_thread = HAL_ThreadCreate(6144, 0, "at_uart_isr_thread", at_uart_irq_recv, NULL); + if (!recv_thread) Log_e("Init uart_irq_recv failed\r\n"); #endif - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - if (sg_at_uart.state == eOPENED) { - close(sg_at_uart.fd); - sg_at_uart.state = eCLOSED; - } + if (sg_at_uart.state == eOPENED) { + close(sg_at_uart.fd); + sg_at_uart.state = eCLOSED; + } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Send(void *data, uint32_t size) { - uint32_t leftlen = size; - int ret = QCLOUD_RET_SUCCESS; - - if (sg_at_uart.state == eOPENED) { - while (leftlen > 0) { - ret = write(sg_at_uart.fd, data + size - leftlen, leftlen); - if (ret == -1) { - Log_e("write uart fd failed on error: %d.\r\n", errno); - ret = QCLOUD_ERR_FAILURE; - break; - } - leftlen -= ret; - } - } - else { - Log_e("AT Uart uninitialized"); - ret = QCLOUD_ERR_FAILURE; - } - - return (ret == QCLOUD_ERR_FAILURE) ? QCLOUD_ERR_FAILURE : size; + uint32_t leftlen = size; + int ret = QCLOUD_RET_SUCCESS; + + if (sg_at_uart.state == eOPENED) { + while (leftlen > 0) { + ret = write(sg_at_uart.fd, data + size - leftlen, leftlen); + if (ret == -1) { + Log_e("write uart fd failed on error: %d.\r\n", errno); + ret = QCLOUD_ERR_FAILURE; + break; + } + leftlen -= ret; + } + } else { + Log_e("AT Uart uninitialized"); + ret = QCLOUD_ERR_FAILURE; + } + + return (ret == QCLOUD_ERR_FAILURE) ? QCLOUD_ERR_FAILURE : size; } int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) { - int readlen; - int ret; + int readlen; + int ret; - if (sg_at_uart.state == eOPENED) { + if (sg_at_uart.state == eOPENED) { - if ((readlen = read(sg_at_uart.fd, data, expect_size)) == -1) { - ret = QCLOUD_ERR_FAILURE; - } + if ((readlen = read(sg_at_uart.fd, data, expect_size)) == -1) { + ret = QCLOUD_ERR_FAILURE; + } - if (recv_size) { - *recv_size = readlen; - } + if (recv_size) { + *recv_size = readlen; + } - } - else { - Log_e("AT Uart uninitialized"); - ret = QCLOUD_ERR_FAILURE; - } + } else { + Log_e("AT Uart uninitialized"); + ret = QCLOUD_ERR_FAILURE; + } - return ret; + return ret; } //simulate IRQ @@ -222,16 +219,15 @@ int HAL_AT_Uart_Recv(void *data, uint32_t expect_size, uint32_t *recv_size, uint extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); static void *at_uart_irq_recv(void *userContex) { - uint8_t data[64]; - int readlen; - while (1) - { - if ((readlen = read(sg_at_uart.fd, data, sizeof(data))) == -1) { - continue; - } - at_client_uart_rx_isr_cb(data, readlen); //push - } - return NULL; + uint8_t data[64]; + int readlen; + while (1) { + if ((readlen = read(sg_at_uart.fd, data, sizeof(data))) == -1) { + continue; + } + at_client_uart_rx_isr_cb(data, readlen); //push + } + return NULL; } #endif diff --git a/platform/os/linux/HAL_Device_linux.c b/platform/os/linux/HAL_Device_linux.c index 5656fb5..3663946 100644 --- a/platform/os/linux/HAL_Device_linux.c +++ b/platform/os/linux/HAL_Device_linux.c @@ -29,7 +29,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -51,56 +51,77 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +//static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; +//static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; + +#ifdef DEBUG_DEV_INFO_USED +static const DeviceInfo sg_subdevList[] = { + {.product_id = "WPDA0S6S08", .device_name = "dev001"}, + {.product_id = "WPDA0S6S08", .device_name = "dev002"}, + {.product_id = "WPDA0S6S08", .device_name = "dev003"}, + + {.product_id = "Y8T6NB8DM0", .device_name = "test001"}, + {.product_id = "Y8T6NB8DM0", .device_name = "test002"}, + {.product_id = "Y8T6NB8DM0", .device_name = "test003"} +}; +#endif + #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } int HAL_SetDevInfoFile(const char *file_name) -{ +{ Log_w("device info is not stored in file!!"); - + return QCLOUD_RET_SUCCESS; } -#else +#else /*device info manage example method*/ #include "lite-utils.h" -#define MAX_DEV_INFO_FILE_LEN 1024 -#define MAX_CONFIG_FILE_NAME 256 - - -#define KEY_AUTH_MODE "auth_mode" -#define KEY_PRODUCT_ID "productId" -#define KEY_PRODUCT_SECRET "productSecret" -#define KEY_DEV_NAME "deviceName" -#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" -#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" -#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" -#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" -#define KEY_SUBDEV_NAME "subDev.sub_devName" - -#define STR_DEV_INFO "key_deviceinfo" -#define STR_DEV_SECRET "deviceSecret" -#define STR_DEV_CERT "cert_deviceinfo" -#define STR_DEV_CERT_FILE "devCertFile" -#define STR_DEV_KEY_FILE "devPrivateKeyFile" +#ifdef GATEWAY_ENABLED +#define MAX_DEV_INFO_FILE_LEN 10*1024 +#else +#define MAX_DEV_INFO_FILE_LEN 1024 +#endif +#define MAX_CONFIG_FILE_NAME 256 + + +#define KEY_AUTH_MODE "auth_mode" +#define KEY_PRODUCT_ID "productId" +#define KEY_PRODUCT_SECRET "productSecret" +#define KEY_DEV_NAME "deviceName" +#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" +#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" +#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" + +#define KEY_SUBDEV_PRODUCT_ID "sub_productId" +#define KEY_SUBDEV_NAME "sub_devName" +#define KEY_SUBDEV_NUM "subDev.subdev_num" +#define KEY_SUBDEV_LIST "subDev.subdev_list" + + +#define STR_DEV_INFO "key_deviceinfo" +#define STR_DEV_SECRET "deviceSecret" +#define STR_DEV_CERT "cert_deviceinfo" +#define STR_DEV_CERT_FILE "devCertFile" +#define STR_DEV_KEY_FILE "devPrivateKeyFile" #define MAX_SIZE_OF_DEVICE_INFO_FILE 128 -static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE+1] = {"./device_info.json"}; +static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE + 1] = {"./device_info.json"}; int HAL_SetDevInfoFile(const char *file_name) { @@ -114,7 +135,7 @@ int HAL_SetDevInfoFile(const char *file_name) Log_e("device info file \"%s\" not existed", file_name); return QCLOUD_ERR_FAILURE; } - + memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); return QCLOUD_RET_SUCCESS; @@ -122,435 +143,497 @@ int HAL_SetDevInfoFile(const char *file_name) static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; + FILE *fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - /*Get device info*/ - char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); - if(NULL == authMode) { - HAL_Free(JsonDoc); - Log_e("read authcode from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - -#ifdef DEV_DYN_REG_ENABLED - char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); - if(NULL == productSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - Log_e("read product secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); -#endif - -#ifdef AUTH_MODE_CERT - char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); - if(NULL == devCrtFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); -#endif - Log_e("read device crt file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); - if(NULL == devKeyFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - HAL_Free(devCrtFileName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char *JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*Get device info*/ + char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); + if (NULL == authMode) { + HAL_Free(JsonDoc); + Log_e("read authcode from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); + if (NULL == productId) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + Log_e("read product id from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); + if (NULL == devName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + Log_e("read device name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + +#ifdef DEV_DYN_REG_ENABLED + char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); + if (NULL == productSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + Log_e("read product secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); #endif - Log_e("read device private key file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); + +#ifdef AUTH_MODE_CERT + char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); + if (NULL == devCrtFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif + Log_e("read device crt file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); + if (NULL == devKeyFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + HAL_Free(devCrtFileName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif + Log_e("read device private key file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); #else - char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); - if(NULL == devSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); + char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); + if (NULL == devSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); #endif - Log_e("read device secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); - //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); + Log_e("read device secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); + //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); #endif - if(authMode){ - HAL_Free(authMode); - } - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -#ifdef DEV_DYN_REG_ENABLED - if(productSecret){ - HAL_Free(productSecret); - } + if (authMode) { + HAL_Free(authMode); + } + + if (productId) { + HAL_Free(productId); + } + + if (devName) { + HAL_Free(devName); + } + +#ifdef DEV_DYN_REG_ENABLED + if (productSecret) { + HAL_Free(productSecret); + } #endif -#ifdef AUTH_MODE_CERT - if(devCrtFileName){ - HAL_Free(devCrtFileName); - } +#ifdef AUTH_MODE_CERT + if (devCrtFileName) { + HAL_Free(devCrtFileName); + } - if(devKeyFileName){ - HAL_Free(devKeyFileName); - } + if (devKeyFileName) { + HAL_Free(devKeyFileName); + } #else - if(devSecret){ - HAL_Free(devSecret); - } + if (devSecret) { + HAL_Free(devSecret); + } #endif - if(NULL != JsonDoc){ - HAL_Free(JsonDoc); - } + if (NULL != JsonDoc) { + HAL_Free(JsonDoc); + } -exit: - if(NULL != fp){ - fclose(fp); - } - return ret; +exit: + if (NULL != fp) { + fclose(fp); + } + return ret; } #ifdef GATEWAY_ENABLED -static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) + +static int iot_get_subdev_from_list(char* devList, DeviceInfo *pDevInfo, int *pDevNum) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; +#define MAX_LEN_DEV_INFO (MAX_SIZE_OF_PRODUCT_ID + MAX_SIZE_OF_DEVICE_NAME + 128) + int devNum = *pDevNum; + int count = 0; + int ret = QCLOUD_RET_SUCCESS; + char *pNext; + char TempBuff[MAX_LEN_DEV_INFO]; + + if (devList == NULL || pDevInfo == NULL || devNum == 0) { + return QCLOUD_ERR_INVAL; + } + + pNext = (char *)strtok(devList, "}"); + while (pNext != NULL) { + memset(TempBuff, '\0', MAX_LEN_DEV_INFO); + HAL_Snprintf(TempBuff, MAX_LEN_DEV_INFO, "%s}", pNext); + char *pos = strchr(TempBuff, '{'); + if(NULL == pos){ + *pDevNum = count; + break; + } + + char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, pos); + if (productId) { + strncpy(pDevInfo[count].product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + HAL_Free(productId); + productId = NULL; + } else { + ret = QCLOUD_ERR_INVAL; + break; + } + + char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, pos); + if (devName) { + strncpy(pDevInfo[count].device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + HAL_Free(devName); + devName = NULL; + } else { + ret = QCLOUD_ERR_INVAL; + break; + } + + count++; + pNext = (char *)strtok(NULL, "}"); + + if (count > (devNum - 1)) { + break; + } + } - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + return ret; +#undef MAX_LEN_DEV_INFO +} + +static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo, int *subDevNum) +{ + FILE *fp; + uint32_t len; + uint32_t rlen; + char *JsonDoc = NULL; + int ret = QCLOUD_RET_SUCCESS; + + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } - - /*Get sub device info*/ - char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - //Log_d("pid:%s, devName:%s", productId, devName); - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - - if(JsonDoc){ - HAL_Free(JsonDoc); - } - + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } + + /*Get sub device num*/ + char* devNum = LITE_json_value_of(KEY_SUBDEV_NUM, JsonDoc); + if (devNum) { + *subDevNum = atoi(devNum); + *subDevNum = (*subDevNum > MAX_NUM_SUB_DEV) ? MAX_NUM_SUB_DEV : (*subDevNum); + HAL_Free(devNum); + } else { + Log_e("fail to parse dev num"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*Get sub info*/ + char* devList = LITE_json_value_of(KEY_SUBDEV_LIST, JsonDoc); + if (devList) { //json utils not support array parse currently, we will update json utils + ret = iot_get_subdev_from_list(devList, pDevInfo, subDevNum); + HAL_Free(devList); + } else { + Log_e("fail to parse devList"); + ret = QCLOUD_ERR_FAILURE; + } + exit: - - if(NULL != fp){ - fclose(fp); - } - return ret; + if (JsonDoc) { + HAL_Free(JsonDoc); + } + + if (NULL != fp) { + fclose(fp); + } + + return ret; } #endif static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) { - char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; - int32_t remain_size = MAX_DEV_INFO_FILE_LEN; + char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; + int32_t remain_size = MAX_DEV_INFO_FILE_LEN; int32_t rc_of_snprintf = 0; - int32_t wlen; - FILE *fp; - - rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); - remain_size -= rc_of_snprintf; - - //auth_mode -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "CERT" - ); - remain_size -= rc_of_snprintf; + int32_t wlen; + FILE *fp; + + rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); + remain_size -= rc_of_snprintf; + + //auth_mode +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "CERT" + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "KEY" - ); - remain_size -= rc_of_snprintf; -#endif - - //product id, device name - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ - KEY_PRODUCT_ID, pDevInfo->product_id, \ - KEY_DEV_NAME, pDevInfo->device_name); - remain_size -= rc_of_snprintf; - - //product secret + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "KEY" + ); + remain_size -= rc_of_snprintf; +#endif + + //product id, device name + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ + KEY_PRODUCT_ID, pDevInfo->product_id, \ + KEY_DEV_NAME, pDevInfo->device_name); + remain_size -= rc_of_snprintf; + + //product secret #ifdef DEV_DYN_REG_ENABLED - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n", - KEY_PRODUCT_SECRET, pDevInfo->product_secret); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n", + KEY_PRODUCT_SECRET, pDevInfo->product_secret); + remain_size -= rc_of_snprintf; #endif - - // key device info or cert device info -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ - STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name,\ - STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ - ); - remain_size -= rc_of_snprintf; + + // key device info or cert device info +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ + STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name, \ + STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\"\n}",\ - STR_DEV_SECRET, pDevInfo->device_secret); - remain_size -= rc_of_snprintf; -#endif + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\"\n}", \ + STR_DEV_SECRET, pDevInfo->device_secret); + remain_size -= rc_of_snprintf; +#endif - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); + remain_size -= rc_of_snprintf; - Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); + Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); - fp = fopen(sg_device_info_file, "w"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "w"); + if (NULL == fp) { Log_e("open file %s failed", sg_device_info_file); return QCLOUD_ERR_FAILURE; } - wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); - if(wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { - Log_e("write len less than needed"); - } - fclose(fp); - return QCLOUD_RET_SUCCESS; + wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); + if (wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { + Log_e("write len less than needed"); + } + fclose(fp); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - ret = iot_save_devinfo_to_json_file(devInfo); + ret = iot_save_devinfo_to_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - ret = iot_parse_devinfo_from_json_file(devInfo); + ret = iot_parse_devinfo_from_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + int i; + + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + if (sizeof(sg_subdevList[]) / sizeof(sg_subdevList[0]) > MAX_NUM_SUB_DEV) { + gwDevInfo->sub_dev_num = MAX_NUM_SUB_DEV; + } else { + gwDevInfo->sub_dev_num = sizeof(sg_subdevList[]) / sizeof(sg_subdevList[0]); + } + + for (i = 0; i < gwDevInfo->sub_dev_num; i++) { + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[i].product_id, sg_subdevList[i].product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[i].device_name, sg_subdevList[i].device_name, MAX_SIZE_OF_DEVICE_NAME); + } #else - ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); - if(ret != QCLOUD_RET_SUCCESS) { - return QCLOUD_ERR_FAILURE; - } - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); + ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); + if (ret != QCLOUD_RET_SUCCESS) { + return QCLOUD_ERR_FAILURE; + } + + //copy sub dev info + memset((char *)gwDevInfo->sub_dev_info, '\0', MAX_NUM_SUB_DEV * sizeof(DeviceInfo)); + ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info, &(gwDevInfo->sub_dev_num)); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } else { + Log_d("sub device num:%d", gwDevInfo->sub_dev_num); + for (i = 0; i < gwDevInfo->sub_dev_num; i++) { + Log_d("%dth subDevPid:%s subDevName:%s", i, gwDevInfo->sub_dev_info[i].product_id, gwDevInfo->sub_dev_info[i].device_name); + } + } + return ret; } -#endif +#endif diff --git a/platform/os/linux/HAL_Log_linux.c b/platform/os/linux/HAL_Log_linux.c index ef9a0d0..5a57f9b 100644 --- a/platform/os/linux/HAL_Log_linux.c +++ b/platform/os/linux/HAL_Log_linux.c @@ -27,16 +27,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + len = fwrite((void *)log, 1, wLen, fp); Log_d("write %d of %d to log file", len, wLen); - + fclose(fp); return len; @@ -46,16 +46,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) size_t HAL_Log_Read (char *buff, size_t rLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; } len = fread((void *)buff, 1, rLen, fp); Log_d("read %d of %d from log file", len, rLen); - + fclose(fp); return len; @@ -76,12 +76,12 @@ size_t HAL_Log_Get_Size(void) /* check if file exists */ if (access(LOG_SAVE_FILE_PATH, 0)) return 0; - - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + fseek(fp, 0L, SEEK_END); length = ftell(fp); fclose(fp); diff --git a/platform/os/linux/HAL_OS_linux.c b/platform/os/linux/HAL_OS_linux.c index abe8293..c5060ca 100644 --- a/platform/os/linux/HAL_OS_linux.c +++ b/platform/os/linux/HAL_OS_linux.c @@ -39,7 +39,7 @@ void *HAL_MutexCreate(void) } if (0 != (err_num = pthread_mutex_init(mutex, NULL))) { - HAL_Printf("%s: create mutex failed\n", __FUNCTION__); + HAL_Printf("%s: create mutex failed\n", __FUNCTION__); HAL_Free(mutex); return NULL; } @@ -51,7 +51,7 @@ void HAL_MutexDestroy(_IN_ void *mutex) { int err_num; if (0 != (err_num = pthread_mutex_destroy((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: destroy mutex failed\n", __FUNCTION__); + HAL_Printf("%s: destroy mutex failed\n", __FUNCTION__); } HAL_Free(mutex); @@ -60,8 +60,8 @@ void HAL_MutexDestroy(_IN_ void *mutex) void HAL_MutexLock(_IN_ void *mutex) { int err_num; - if (0 != (err_num = pthread_mutex_lock((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: lock mutex failed\n", __FUNCTION__); + if (0 != (err_num = pthread_mutex_lock((pthread_mutex_t *)mutex))) { + HAL_Printf("%s: lock mutex failed\n", __FUNCTION__); } } @@ -74,8 +74,8 @@ int HAL_MutexTryLock(_IN_ void *mutex) void HAL_MutexUnlock(_IN_ void *mutex) { int err_num; - if (0 != (err_num = pthread_mutex_unlock((pthread_mutex_t *)mutex))) { - HAL_Printf("%s: unlock mutex failed\n", __FUNCTION__); + if (0 != (err_num = pthread_mutex_unlock((pthread_mutex_t *)mutex))) { + HAL_Printf("%s: unlock mutex failed\n", __FUNCTION__); } } @@ -118,7 +118,7 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v } uint32_t HAL_GetTimeMs(void) -{ +{ struct timeval time_val = {0}; uint32_t time_ms; @@ -133,90 +133,91 @@ void HAL_SleepMs(_IN_ uint32_t ms) usleep(1000 * ms); } -#ifdef AT_TCP_ENABLED - -void HAL_DelayMs(_IN_ uint32_t ms) +#if ((defined(MULTITHREAD_ENABLED)) || (defined AT_TCP_ENABLED)) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - usleep(1000 * ms); -} - -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) -{ - pthread_t *thread_t = (pthread_t *)HAL_Malloc(sizeof(unsigned long int)); - return pthread_create(thread_t, NULL, fn, arg) ? NULL : (void*)thread_t; + pthread_t *thread_t = (pthread_t *)HAL_Malloc(sizeof(unsigned long int)); + return pthread_create(thread_t, NULL, fn, arg) ? NULL : (void*)thread_t; } int HAL_ThreadDestroy(void* threadId) { - int ret; + int ret; - if(0 == pthread_cancel(*((pthread_t*)threadId))){ - ret = QCLOUD_RET_SUCCESS; - }else{ - ret = QCLOUD_ERR_FAILURE; - } + if (0 == pthread_cancel(*((pthread_t*)threadId))) { + ret = QCLOUD_RET_SUCCESS; + } else { + ret = QCLOUD_ERR_FAILURE; + } - HAL_Free(threadId); - return ret; + HAL_Free(threadId); + return ret; +} +#endif + +#ifdef AT_TCP_ENABLED + +void HAL_DelayMs(_IN_ uint32_t ms) +{ + usleep(1000 * ms); } void *HAL_SemaphoreCreate(void) { - sem_t *sem = (sem_t *)malloc(sizeof(sem_t)); - if (NULL == sem) { - return NULL; - } + sem_t *sem = (sem_t *)malloc(sizeof(sem_t)); + if (NULL == sem) { + return NULL; + } - if (0 != sem_init(sem, 0, 0)) { - free(sem); - return NULL; - } + if (0 != sem_init(sem, 0, 0)) { + free(sem); + return NULL; + } - return sem; + return sem; } void HAL_SemaphoreDestroy(void *sem) { - sem_destroy((sem_t *)sem); - free(sem); + sem_destroy((sem_t *)sem); + free(sem); } void HAL_SemaphorePost(void *sem) { - sem_post((sem_t *)sem); + sem_post((sem_t *)sem); } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { #define PLATFORM_WAIT_INFINITE (~0) - if (PLATFORM_WAIT_INFINITE == timeout_ms) { - sem_wait(sem); - return QCLOUD_RET_SUCCESS; - } - else { - struct timespec ts; - int s; - /* Restart if interrupted by handler */ - do { - if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { - return QCLOUD_ERR_FAILURE; - } - - s = 0; - ts.tv_nsec += (timeout_ms % 1000) * 1000000; - if (ts.tv_nsec >= 1000000000) { - ts.tv_nsec -= 1000000000; - s = 1; - } - - ts.tv_sec += timeout_ms / 1000 + s; - - } while (((s = sem_timedwait(sem, &ts)) != 0) && errno == EINTR); - - return s ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; - } -#undef PLATFORM_WAIT_INFINITE + if (PLATFORM_WAIT_INFINITE == timeout_ms) { + sem_wait(sem); + return QCLOUD_RET_SUCCESS; + } else { + struct timespec ts; + int s; + /* Restart if interrupted by handler */ + do { + if (clock_gettime(CLOCK_REALTIME, &ts) == -1) { + return QCLOUD_ERR_FAILURE; + } + + s = 0; + ts.tv_nsec += (timeout_ms % 1000) * 1000000; + if (ts.tv_nsec >= 1000000000) { + ts.tv_nsec -= 1000000000; + s = 1; + } + + ts.tv_sec += timeout_ms / 1000 + s; + + } while (((s = sem_timedwait(sem, &ts)) != 0) && errno == EINTR); + + return s ? QCLOUD_ERR_FAILURE : QCLOUD_RET_SUCCESS; + } +#undef PLATFORM_WAIT_INFINITE } #endif diff --git a/platform/os/linux/HAL_TCP_linux.c b/platform/os/linux/HAL_TCP_linux.c index 74528f7..f159e79 100644 --- a/platform/os/linux/HAL_TCP_linux.c +++ b/platform/os/linux/HAL_TCP_linux.c @@ -58,8 +58,8 @@ static uint64_t _linux_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; + int ret; + struct addrinfo hints, *addr_list, *cur; int fd = 0; char port_str[6]; @@ -68,10 +68,10 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) memset(&hints, 0x00, sizeof(hints)); hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; + hints.ai_protocol = IPPROTO_TCP; ret = getaddrinfo(host, port_str, &hints, &addr_list); - if (ret) { + if (ret) { if (ret == EAI_SYSTEM) Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); else @@ -80,21 +80,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } - - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } - - close( fd ); - ret = 0; + fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); + if ( fd < 0 ) { + ret = 0; + continue; + } + + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } + + close( fd ); + ret = 0; } if (0 == ret) { @@ -118,14 +116,14 @@ int HAL_TCP_Disconnect(uintptr_t fd) /* Shutdown both send and receive operations. */ rc = shutdown((int) fd, 2); - if (0 != rc) { - Log_e("shutdown error: %s", strerror(errno)); + if (0 != rc) { + Log_e("shutdown error: %s", strerror(errno)); return -1; } rc = close((int) fd); if (0 != rc) { - Log_e("closesocket error: %s", strerror(errno)); + Log_e("closesocket error: %s", strerror(errno)); return -1; } @@ -173,13 +171,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -194,8 +191,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -248,14 +245,14 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } + } Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; diff --git a/platform/os/linux/HAL_Timer_linux.c b/platform/os/linux/HAL_Timer_linux.c index b07481e..9c2343d 100644 --- a/platform/os/linux/HAL_Timer_linux.c +++ b/platform/os/linux/HAL_Timer_linux.c @@ -16,64 +16,73 @@ #ifdef __cplusplus extern "C" { #endif - + #include #include - + #include "qcloud_iot_import.h" static char now_time_str[20] = {0}; - -bool HAL_Timer_expired(Timer *timer) { + +bool HAL_Timer_expired(Timer *timer) +{ struct timeval now, res; gettimeofday(&now, NULL); timersub(&timer->end_time, &now, &res); return res.tv_sec < 0 || (res.tv_sec == 0 && res.tv_usec <= 0); } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ struct timeval now; gettimeofday(&now, NULL); struct timeval interval = {timeout_ms / 1000, (timeout_ms % 1000) * 1000}; timeradd(&now, &interval, &timer->end_time); } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ struct timeval now; gettimeofday(&now, NULL); struct timeval interval = {timeout, 0}; timeradd(&now, &interval, &timer->end_time); } -int HAL_Timer_remain(Timer *timer) { +int HAL_Timer_remain(Timer *timer) +{ struct timeval now, res; gettimeofday(&now, NULL); timersub(&timer->end_time, &now, &res); return (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000; } -void HAL_Timer_init(Timer *timer) { - timer->end_time = (struct timeval) {0, 0}; +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = (struct timeval) { + 0, 0 + }; } -char* HAL_Timer_current(void) { - struct timeval tv; - gettimeofday(&tv, NULL); - time_t now_time = tv.tv_sec; +char* HAL_Timer_current(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); + time_t now_time = tv.tv_sec; - struct tm tm_tmp = *localtime(&now_time); - strftime(now_time_str, 20, "%F %T", &tm_tmp); + struct tm tm_tmp = *localtime(&now_time); + strftime(now_time_str, 20, "%F %T", &tm_tmp); - return now_time_str; + return now_time_str; } -long HAL_Timer_current_sec(void) { - struct timeval tv; - gettimeofday(&tv, NULL); +long HAL_Timer_current_sec(void) +{ + struct timeval tv; + gettimeofday(&tv, NULL); - return tv.tv_sec; + return tv.tv_sec; } - + #ifdef __cplusplus } #endif diff --git a/platform/os/linux/HAL_UDP_linux.c b/platform/os/linux/HAL_UDP_linux.c index 82a6b5a..c8f66b3 100644 --- a/platform/os/linux/HAL_UDP_linux.c +++ b/platform/os/linux/HAL_UDP_linux.c @@ -49,25 +49,25 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } - - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd; - break; - } - - close(fd); - ret = 0; + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } + + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd; + break; + } + + close(fd); + ret = 0; } if (0 == ret) { diff --git a/platform/os/nonos/HAL_AT_UART_nonos.c b/platform/os/nonos/HAL_AT_UART_nonos.c index 9176f4d..afc52b3 100644 --- a/platform/os/nonos/HAL_AT_UART_nonos.c +++ b/platform/os/nonos/HAL_AT_UART_nonos.c @@ -30,7 +30,7 @@ #include "stm32l4xx_hal.h" #define HAL_AT_UART_IRQHandler USART1_IRQHandler -extern UART_HandleTypeDef huart1; +extern UART_HandleTypeDef huart1; static UART_HandleTypeDef *pAtUart = &huart1; extern void AT_Uart_Init(void); @@ -42,16 +42,15 @@ extern void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len); * @brief This function handles AT UART global interrupt,push recv char to ringbuff. */ void HAL_AT_UART_IRQHandler(void) -{ - uint8_t ch; - if(__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) - { - ch = (uint8_t) READ_REG(pAtUart->Instance->RDR)&0xFF; - /*this callback for at_client*/ - at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); - } - __HAL_UART_CLEAR_PEFLAG(pAtUart); +{ + uint8_t ch; + if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { + ch = (uint8_t) READ_REG(pAtUart->Instance->RDR) & 0xFF; + /*this callback for at_client*/ + at_client_uart_rx_isr_cb(&ch, 1); + HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); + } + __HAL_UART_CLEAR_PEFLAG(pAtUart); } @@ -63,23 +62,20 @@ void HAL_AT_UART_IRQHandler(void) */ int HAL_AT_Uart_Send(void *data, uint32_t size) { - if(HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) - { - return size; - } - else - { - return 0; - } + if (HAL_OK == HAL_UART_Transmit(pAtUart, data, size, 0xFFFF)) { + return size; + } else { + return 0; + } } int HAL_AT_Uart_Init(void) { - AT_Uart_Init(); - return QCLOUD_RET_SUCCESS; + AT_Uart_Init(); + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } diff --git a/platform/os/nonos/HAL_Device_nonos.c b/platform/os/nonos/HAL_Device_nonos.c index 6c2f247..5236b95 100644 --- a/platform/os/nonos/HAL_Device_nonos.c +++ b/platform/os/nonos/HAL_Device_nonos.c @@ -29,7 +29,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -51,111 +51,111 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); - + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + #else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo from json not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/platform/os/nonos/HAL_OS_nonos.c b/platform/os/nonos/HAL_OS_nonos.c index e8c3709..2e28601 100644 --- a/platform/os/nonos/HAL_OS_nonos.c +++ b/platform/os/nonos/HAL_OS_nonos.c @@ -19,7 +19,7 @@ #include "qcloud_iot_import.h" #include "stm32l4xx_hal.h" - + void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; @@ -50,12 +50,12 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void HAL_SleepMs(_IN_ uint32_t ms) { - (void)HAL_Delay(ms); + (void)HAL_Delay(ms); } void HAL_DelayMs(_IN_ uint32_t ms) { - (void)HAL_Delay(ms); + (void)HAL_Delay(ms); } void HAL_Free(void *ptr) diff --git a/platform/os/nonos/HAL_Timer_nonos.c b/platform/os/nonos/HAL_Timer_nonos.c index 47fe2ed..1795cae 100644 --- a/platform/os/nonos/HAL_Timer_nonos.c +++ b/platform/os/nonos/HAL_Timer_nonos.c @@ -20,7 +20,7 @@ extern "C" { #include #include #include -#include +#include #include "qcloud_iot_import.h" #include "stm32l4xx_hal.h" @@ -29,64 +29,64 @@ static char now_time_str[20] = {0}; uint32_t HAL_GetTimeMs(void) -{ +{ return HAL_GetTick(); } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - //return GetTimeStampByAt(NULL); - - return HAL_GetTimeMs()/1000; + //return GetTimeStampByAt(NULL); + + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) +char* HAL_Timer_current(void) { - long time_sec; - - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%d",time_sec); - - return now_time_str; + long time_sec; + + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%d", time_sec); + + return now_time_str; } - -bool HAL_Timer_expired(Timer *timer) + +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout_ms; } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout * 1000; } -int HAL_Timer_remain(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - return (int)(timer->end_time - HAL_GetTimeMs()); + return (int)(timer->end_time - HAL_GetTimeMs()); } -void HAL_Timer_init(Timer *timer) +void HAL_Timer_init(Timer *timer) { - timer->end_time = 0; + timer->end_time = 0; } - + #ifdef __cplusplus } #endif diff --git a/platform/os/rtthread/HAL_Device_rtthread.c b/platform/os/rtthread/HAL_Device_rtthread.c index 0b42a64..23a0541 100644 --- a/platform/os/rtthread/HAL_Device_rtthread.c +++ b/platform/os/rtthread/HAL_Device_rtthread.c @@ -28,7 +28,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -50,111 +50,111 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - Log_e("HAL_SetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_SetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - Log_e("HAL_GetDevInfo not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); #else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + Log_e("HAL_GetDevInfo from json not implement yet"); + ret = QCLOUD_ERR_DEV_INFO; #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/platform/os/rtthread/HAL_OS_rtthread.c b/platform/os/rtthread/HAL_OS_rtthread.c index 4333f30..c72cff6 100644 --- a/platform/os/rtthread/HAL_OS_rtthread.c +++ b/platform/os/rtthread/HAL_OS_rtthread.c @@ -28,8 +28,8 @@ static uint16_t g_mutex_count = 0; void HAL_Printf(_IN_ const char *fmt, ...) { va_list args; - char log_buf[HAL_OS_LOG_MAXLEN]; - + char log_buf[HAL_OS_LOG_MAXLEN]; + va_start(args, fmt); rt_vsnprintf(log_buf, HAL_OS_LOG_MAXLEN, fmt, args); va_end(args); @@ -58,14 +58,14 @@ int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, v void *HAL_MutexCreate(void) { - rt_mutex_t mutex; - char mutexName[RT_NAME_MAX]; + rt_mutex_t mutex; + char mutexName[RT_NAME_MAX]; - memset(mutexName, 0, RT_NAME_MAX); - HAL_Snprintf(mutexName, RT_NAME_MAX, "tmutex_%d", g_mutex_count++); - mutex = rt_mutex_create(mutexName, RT_IPC_FLAG_FIFO); + memset(mutexName, 0, RT_NAME_MAX); + HAL_Snprintf(mutexName, RT_NAME_MAX, "tmutex_%d", g_mutex_count++); + mutex = rt_mutex_create(mutexName, RT_IPC_FLAG_FIFO); if (NULL == mutex) { - HAL_Printf("create mutex failed"); + HAL_Printf("create mutex failed"); } @@ -76,24 +76,22 @@ void *HAL_MutexCreate(void) void HAL_MutexDestroy(_IN_ void *mutex) { - int err_num; + int err_num; - err_num = rt_mutex_delete((rt_mutex_t)mutex); + err_num = rt_mutex_delete((rt_mutex_t)mutex); - if (0 != err_num) - { + if (0 != err_num) { HAL_Printf("destroy mutex failed"); } } void HAL_MutexLock(_IN_ void *mutex) { - int err_num; - - err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_FOREVER); + int err_num; + + err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_FOREVER); - if (0 != err_num) - { + if (0 != err_num) { HAL_Printf("lock mutex failed"); } } @@ -102,10 +100,9 @@ void HAL_MutexUnlock(_IN_ void *mutex) { int err_num; - err_num = rt_mutex_release((rt_mutex_t)mutex); - - if (0 != err_num) - { + err_num = rt_mutex_release((rt_mutex_t)mutex); + + if (0 != err_num) { HAL_Printf("unlock mutex failed"); } @@ -113,12 +110,11 @@ void HAL_MutexUnlock(_IN_ void *mutex) int HAL_MutexTryLock(_IN_ void *mutex) { - int err_num; - - err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_NO); + int err_num; + + err_num = rt_mutex_take((rt_mutex_t)mutex, RT_WAITING_NO); - if (0 != err_num) - { + if (0 != err_num) { HAL_Printf("trylock mutex failed"); } return err_num; @@ -127,7 +123,7 @@ int HAL_MutexTryLock(_IN_ void *mutex) void *HAL_Malloc(_IN_ uint32_t size) { - return rt_malloc(size); + return rt_malloc(size); } void HAL_Free(_IN_ void *ptr) diff --git a/platform/os/rtthread/HAL_TCP_rtthread.c b/platform/os/rtthread/HAL_TCP_rtthread.c index 2b5d2f1..250af64 100644 --- a/platform/os/rtthread/HAL_TCP_rtthread.c +++ b/platform/os/rtthread/HAL_TCP_rtthread.c @@ -53,8 +53,8 @@ static uint64_t rtthread_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) { - int ret; - struct addrinfo hints, *addr_list, *cur; + int ret; + struct addrinfo hints, *addr_list, *cur; int fd = 0; char port_str[6]; @@ -78,21 +78,19 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) ret = -1; continue; } - fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); - if( fd < 0 ) - { - ret = 0; - continue; - } - - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } - - close( fd ); - ret = 0; + fd = (int) socket( cur->ai_family, cur->ai_socktype, cur->ai_protocol ); + if ( fd < 0 ) { + ret = 0; + continue; + } + + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } + + close( fd ); + ret = 0; } if (0 == ret) { @@ -104,7 +102,7 @@ uintptr_t HAL_TCP_Connect(const char *host, uint16_t port) freeaddrinfo(addr_list); return (uintptr_t)ret; -} +} int HAL_TCP_Disconnect(uintptr_t fd) @@ -133,59 +131,58 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t ret = 1; /* send one time if timeout_ms is value 0 */ do { - t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); - if (0 != t_left) { - struct timeval timeout; - - FD_ZERO(&sets); - FD_SET(fd, &sets); - - timeout.tv_sec = t_left / 1000; - timeout.tv_usec = (t_left % 1000) * 1000; - - ret = select(fd + 1, NULL, &sets, NULL, &timeout); - if (ret > 0) { - if (0 == FD_ISSET(fd, &sets)) { - Log_e("Should NOT arrive"); - /* If timeout in next loop, it will not sent any data */ - ret = 0; - continue; - } - } else if (0 == ret) { - Log_e("select-write timeout %d", (int)fd); - break; - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } + t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); + if (0 != t_left) { + struct timeval timeout; + + FD_ZERO(&sets); + FD_SET(fd, &sets); + + timeout.tv_sec = t_left / 1000; + timeout.tv_usec = (t_left % 1000) * 1000; + + ret = select(fd + 1, NULL, &sets, NULL, &timeout); + if (ret > 0) { + if (0 == FD_ISSET(fd, &sets)) { + Log_e("Should NOT arrive"); + /* If timeout in next loop, it will not sent any data */ + ret = 0; + continue; + } + } else if (0 == ret) { + Log_e("select-write timeout %d", (int)fd); + break; + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } perror("select-write fail"); break; } - } - else { - ret = QCLOUD_ERR_SSL_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_SSL_WRITE_TIMEOUT; } - if (ret > 0) { - ret = send(fd, buf + len_sent, len - len_sent, 0); - if (ret > 0) { - len_sent += ret; - } else if (0 == ret) { - Log_e("No data be sent"); - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } - - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - perror("send fail"); - break; - } - } - } while ((len_sent < len) && (rtthread_time_left(t_end, rtthread_get_time_ms()) > 0)); + if (ret > 0) { + ret = send(fd, buf + len_sent, len - len_sent, 0); + if (ret > 0) { + len_sent += ret; + } else if (0 == ret) { + Log_e("No data be sent"); + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } + + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + perror("send fail"); + break; + } + } + } while ((len_sent < len) && (rtthread_time_left(t_end, rtthread_get_time_ms()) > 0)); *written_len = (size_t)len_sent; @@ -202,8 +199,8 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou struct timeval timeout; - //Log_d("readTimeout %dms,readlen %d", timeout_ms, *read_len); - HAL_SleepMs(1); //wihout delay,read seems to be blocked + //Log_d("readTimeout %dms,readlen %d", timeout_ms, *read_len); + HAL_SleepMs(1); //wihout delay,read seems to be blocked t_end = rtthread_get_time_ms() + timeout_ms; len_recv = 0; @@ -211,44 +208,44 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou do { - t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); - if (0 == t_left) { - err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; - break; - } - FD_ZERO(&sets); - FD_SET(fd, &sets); - - timeout.tv_sec = t_left / 1000; - timeout.tv_usec = (t_left % 1000) * 1000; - - ret = select(fd + 1, &sets, NULL, NULL, &timeout); - if (ret > 0) { - ret = recv(fd, buf + len_recv, len - len_recv, 0); - if (ret > 0) { - len_recv += ret; - } else if (0 == ret) { - perror("connection is closed"); - err_code = -1; - break; - } else { - if (EINTR == errno) { - Log_e("EINTR be caught"); - continue; - } - perror("recv fail"); - err_code = -2; - break; - } - } else if (0 == ret) { - err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; - break; - } else { - perror("select-recv fail"); - err_code = -2; - break; - } - }while ((len_recv < len)); + t_left = rtthread_time_left(t_end, rtthread_get_time_ms()); + if (0 == t_left) { + err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; + break; + } + FD_ZERO(&sets); + FD_SET(fd, &sets); + + timeout.tv_sec = t_left / 1000; + timeout.tv_usec = (t_left % 1000) * 1000; + + ret = select(fd + 1, &sets, NULL, NULL, &timeout); + if (ret > 0) { + ret = recv(fd, buf + len_recv, len - len_recv, 0); + if (ret > 0) { + len_recv += ret; + } else if (0 == ret) { + perror("connection is closed"); + err_code = -1; + break; + } else { + if (EINTR == errno) { + Log_e("EINTR be caught"); + continue; + } + perror("recv fail"); + err_code = -2; + break; + } + } else if (0 == ret) { + err_code = QCLOUD_ERR_MQTT_NOTHING_TO_READ; + break; + } else { + perror("select-recv fail"); + err_code = -2; + break; + } + } while ((len_recv < len)); *read_len = (size_t)len_recv; diff --git a/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c b/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c index 60dc46e..8d8f59b 100644 --- a/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c +++ b/platform/os/rtthread/HAL_TLS_mbedtls_rtthread.c @@ -19,7 +19,7 @@ extern "C" { #include "qcloud_iot_import.h" -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS #include #include @@ -40,7 +40,7 @@ extern "C" { #ifndef AUTH_MODE_CERT static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; #endif - + /** * @brief data structure for mbedtls SSL connection */ @@ -56,7 +56,7 @@ typedef struct { #endif mbedtls_pk_context private_key; } TLSDataParams; - + /** * @brief free memory/resources allocated by mbedtls */ @@ -67,12 +67,12 @@ static void _free_mebedtls(TLSDataParams *pParams) mbedtls_x509_crt_free(&(pParams->client_cert)); mbedtls_x509_crt_free(&(pParams->ca_cert)); mbedtls_pk_free(&(pParams->private_key)); -#endif +#endif mbedtls_ssl_free(&(pParams->ssl)); mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free(pParams); } @@ -87,65 +87,65 @@ static void _free_mebedtls(TLSDataParams *pParams) * @param pConnectParams device info for TLS connection * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) { +static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) +{ int ret = QCLOUD_RET_SUCCESS; mbedtls_net_init(&(pDataParams->socket_fd)); mbedtls_ssl_init(&(pDataParams->ssl)); mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); mbedtls_ctr_drbg_init(&(pDataParams->ctr_drbg)); -#if defined(MBEDTLS_X509_CRT_PARSE_C) +#if defined(MBEDTLS_X509_CRT_PARSE_C) mbedtls_x509_crt_init(&(pDataParams->ca_cert)); mbedtls_x509_crt_init(&(pDataParams->client_cert)); mbedtls_pk_init(&(pDataParams->private_key)); -#endif +#endif mbedtls_entropy_init(&(pDataParams->entropy)); // custom parameter is NULL for now if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, 0)) != 0) { - Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_INIT; } -#if defined(MBEDTLS_X509_CRT_PARSE_C) - if (pConnectParams->ca_crt != NULL) - { +#if defined(MBEDTLS_X509_CRT_PARSE_C) + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { - Log_e("parse ca crt failed returned 0x%04x", ret<0?-ret:ret); + (pConnectParams->ca_crt_len + 1)))) { + Log_e("parse ca crt failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } -#endif +#endif #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { - Log_e("load client cert file failed returned 0x%x", ret<0?-ret:ret); + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + Log_e("load client cert file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { - Log_e("load client key file failed returned 0x%x", ret<0?-ret:ret); + Log_e("load client key file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } else { Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + (const unsigned char *) psk_id, strlen( psk_id )); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret<0?-ret:ret); - return ret; - } + + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret < 0 ? -ret : ret); + return ret; + } #endif return QCLOUD_RET_SUCCESS; @@ -159,13 +159,14 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { +int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_TCP)) != 0) { - Log_e("tcp connect failed returned 0x%04x errno: %d", ret<0?-ret:ret, errno); + Log_e("tcp connect failed returned 0x%04x errno: %d", ret < 0 ? -ret : ret, errno); switch (ret) { case MBEDTLS_ERR_NET_SOCKET_FAILED: @@ -179,7 +180,7 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p } #if 0 if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { - Log_e("set block faliled returned 0x%04x", ret<0?-ret:ret); + Log_e("set block faliled returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_TCP_CONNECT; } #endif @@ -196,7 +197,8 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p #if defined(MBEDTLS_X509_CRT_PARSE_C) -int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { +int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +{ return *flags; } #endif @@ -207,17 +209,17 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in int ret = 0; TLSDataParams * pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); - + if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { goto error; } - + Log_d("Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&(pDataParams->ssl_conf), MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -234,20 +236,20 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { - Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #endif mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), pConnectParams->timeout_ms); if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #ifndef AUTH_MODE_CERT // ciphersuites selection for PSK device - if(pConnectParams->psk != NULL) { + if (pConnectParams->psk != NULL) { mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); } #endif @@ -257,10 +259,10 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in // Set the hostname to check against the received server certificate and sni if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } - + #endif mbedtls_ssl_set_bio(&(pDataParams->ssl), &(pDataParams->socket_fd), mbedtls_net_send, mbedtls_net_recv, @@ -271,29 +273,29 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in if ((ret = _mbedtls_tcp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { goto error; } - + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { Log_e("mbedtls_ssl_handshake failed returned 0x%04x", -ret); - -#if defined(MBEDTLS_X509_CRT_PARSE_C) + +#if defined(MBEDTLS_X509_CRT_PARSE_C) if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { Log_e("Unable to verify the server's certificate"); } -#endif +#endif goto error; } } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { - Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), 100); Log_i("connected with /%s/%d...", host, port); - + return (uintptr_t)pDataParams; error: @@ -301,7 +303,8 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in return 0; } -void HAL_TLS_Disconnect(uintptr_t handle) { +void HAL_TLS_Disconnect(uintptr_t handle) +{ if ((uintptr_t)NULL == handle) { Log_d("handle is NULL"); return; @@ -322,12 +325,12 @@ void HAL_TLS_Disconnect(uintptr_t handle) { mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free((void *)handle); } int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, - size_t *written_len) + size_t *written_len) { Timer timer; @@ -336,15 +339,14 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ size_t written_so_far; bool errorFlag = false; int write_rc = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; for (written_so_far = 0; written_so_far < totalLen && !expired(&timer); written_so_far += write_rc) { - while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) - { + while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) { if (write_rc != MBEDTLS_ERR_SSL_WANT_READ && write_rc != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("HAL_TLS_write failed 0x%04x", write_rc<0?-write_rc:write_rc); + Log_e("HAL_TLS_write failed 0x%04x", write_rc < 0 ? -write_rc : write_rc); errorFlag = true; break; } @@ -366,7 +368,7 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ return QCLOUD_RET_SUCCESS; } -int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) +int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) { //mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even timeout @@ -375,7 +377,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t InitTimer(&timer); countdown_ms(&timer, (unsigned int) timeout_ms); *read_len = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; do { @@ -386,7 +388,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t *read_len += read_rc; } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE && read_rc != MBEDTLS_ERR_SSL_WANT_READ && read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { - Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc<0?-read_rc:read_rc); + Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc < 0 ? -read_rc : read_rc); return QCLOUD_ERR_SSL_READ; } @@ -411,4 +413,4 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t } #endif -#endif +#endif diff --git a/platform/os/rtthread/HAL_Timer_rtthread.c b/platform/os/rtthread/HAL_Timer_rtthread.c index 8ba8b8d..3f8ce04 100644 --- a/platform/os/rtthread/HAL_Timer_rtthread.c +++ b/platform/os/rtthread/HAL_Timer_rtthread.c @@ -16,9 +16,9 @@ #ifdef __cplusplus extern "C" { #endif - -#include + +#include #include #include "qcloud_iot_import.h" @@ -27,68 +27,68 @@ static char now_time_str[20] = {0}; uint32_t HAL_GetTimeMs(void) { #if (RT_TICK_PER_SECOND == 1000) - /* #define RT_TICK_PER_SECOND 1000 */ - return (unsigned long)rt_tick_get(); + /* #define RT_TICK_PER_SECOND 1000 */ + return (unsigned long)rt_tick_get(); #else - unsigned long tick = 0; - - tick = rt_tick_get(); - tick = tick * 1000; - return (unsigned long)((tick + RT_TICK_PER_SECOND - 1)/RT_TICK_PER_SECOND); + unsigned long tick = 0; + + tick = rt_tick_get(); + tick = tick * 1000; + return (unsigned long)((tick + RT_TICK_PER_SECOND - 1) / RT_TICK_PER_SECOND); #endif } /*Get timestamp*/ -long HAL_Timer_current_sec(void) +long HAL_Timer_current_sec(void) { - return HAL_GetTimeMs()/1000; + return HAL_GetTimeMs() / 1000; } -char* HAL_Timer_current(void) +char* HAL_Timer_current(void) { - long time_sec; - - time_sec = HAL_Timer_current_sec(); - memset(now_time_str, 0, 20); - snprintf(now_time_str, 20, "%ld",time_sec); - - return now_time_str; + long time_sec; + + time_sec = HAL_Timer_current_sec(); + memset(now_time_str, 0, 20); + snprintf(now_time_str, 20, "%ld", time_sec); + + return now_time_str; } - -bool HAL_Timer_expired(Timer *timer) + +bool HAL_Timer_expired(Timer *timer) { uint32_t now_ts; - - now_ts = HAL_GetTimeMs(); + + now_ts = HAL_GetTimeMs(); - return (now_ts > timer->end_time)?true:false; + return (now_ts > timer->end_time) ? true : false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { - timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout_ms; + timer->end_time = HAL_GetTimeMs(); + timer->end_time += timeout_ms; } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { timer->end_time = HAL_GetTimeMs(); - timer->end_time += timeout*1000; + timer->end_time += timeout * 1000; } -int HAL_Timer_remain(Timer *timer) +int HAL_Timer_remain(Timer *timer) { - return (int)(timer->end_time - HAL_GetTimeMs()); + return (int)(timer->end_time - HAL_GetTimeMs()); } -void HAL_Timer_init(Timer *timer) +void HAL_Timer_init(Timer *timer) { - timer->end_time = 0; + timer->end_time = 0; } #ifdef __cplusplus diff --git a/platform/os/windows/HAL_AT_UART_win.c b/platform/os/windows/HAL_AT_UART_win.c index fc45aed..c0abf25 100644 --- a/platform/os/windows/HAL_AT_UART_win.c +++ b/platform/os/windows/HAL_AT_UART_win.c @@ -35,7 +35,7 @@ * @brief This function handles AT UART global interrupt,push recv char to ringbuff. */ void HAL_AT_UART_IRQHandler(void) -{ +{ } @@ -48,17 +48,17 @@ void HAL_AT_UART_IRQHandler(void) */ int HAL_AT_Uart_Send(void *data, uint32_t size) { - return 0; + return 0; } int HAL_AT_Uart_Init(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } int HAL_AT_Uart_Deinit(void) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif diff --git a/platform/os/windows/HAL_Device_win.c b/platform/os/windows/HAL_Device_win.c index 235c619..305ded2 100644 --- a/platform/os/windows/HAL_Device_win.c +++ b/platform/os/windows/HAL_Device_win.c @@ -29,7 +29,7 @@ #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* device name */ static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; @@ -51,7 +51,7 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #ifdef GATEWAY_ENABLED /* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; /* sub-device device name */ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #endif @@ -59,48 +59,48 @@ static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAM static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) { - if(strlen(psrc) > max_len){ - return QCLOUD_ERR_FAILURE; - } - memset(pdst, '\0', max_len); - strncpy(pdst, psrc, max_len); - return QCLOUD_RET_SUCCESS; + if (strlen(psrc) > max_len) { + return QCLOUD_ERR_FAILURE; + } + memset(pdst, '\0', max_len); + strncpy(pdst, psrc, max_len); + return QCLOUD_RET_SUCCESS; } int HAL_SetDevInfoFile(const char *file_name) -{ +{ Log_w("device info is not stored in file!!"); - + return QCLOUD_RET_SUCCESS; } -#else +#else /*device info manage example method*/ #include "lite-utils.h" -#define MAX_DEV_INFO_FILE_LEN 1024 -#define MAX_CONFIG_FILE_NAME 256 - - -#define KEY_AUTH_MODE "auth_mode" -#define KEY_PRODUCT_ID "productId" -#define KEY_PRODUCT_SECRET "productSecret" -#define KEY_DEV_NAME "deviceName" -#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" -#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" -#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" -#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" -#define KEY_SUBDEV_NAME "subDev.sub_devName" - -#define STR_DEV_INFO "key_deviceinfo" -#define STR_DEV_SECRET "deviceSecret" -#define STR_DEV_CERT "cert_deviceinfo" -#define STR_DEV_CERT_FILE "devCertFile" -#define STR_DEV_KEY_FILE "devPrivateKeyFile" +#define MAX_DEV_INFO_FILE_LEN 1024 +#define MAX_CONFIG_FILE_NAME 256 + + +#define KEY_AUTH_MODE "auth_mode" +#define KEY_PRODUCT_ID "productId" +#define KEY_PRODUCT_SECRET "productSecret" +#define KEY_DEV_NAME "deviceName" +#define KEY_DEV_SECRET "key_deviceinfo.deviceSecret" +#define KEY_DEV_CERT "cert_deviceinfo.devCertFile" +#define KEY_DEV_PRIVATE_KEY "cert_deviceinfo.devPrivateKeyFile" +#define KEY_SUBDEV_PRODUCT_ID "subDev.sub_productId" +#define KEY_SUBDEV_NAME "subDev.sub_devName" + +#define STR_DEV_INFO "key_deviceinfo" +#define STR_DEV_SECRET "deviceSecret" +#define STR_DEV_CERT "cert_deviceinfo" +#define STR_DEV_CERT_FILE "devCertFile" +#define STR_DEV_KEY_FILE "devPrivateKeyFile" #define MAX_SIZE_OF_DEVICE_INFO_FILE 128 -static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE+1] = {".\\device_info.json"}; +static char sg_device_info_file[MAX_SIZE_OF_DEVICE_INFO_FILE + 1] = {".\\device_info.json"}; int HAL_SetDevInfoFile(const char *file_name) { @@ -114,7 +114,7 @@ int HAL_SetDevInfoFile(const char *file_name) Log_e("device info file \"%s\" not existed", file_name); return QCLOUD_ERR_FAILURE; } - + memset(sg_device_info_file, 0, sizeof(sg_device_info_file)); strncpy(sg_device_info_file, file_name, MAX_SIZE_OF_DEVICE_INFO_FILE); return QCLOUD_RET_SUCCESS; @@ -122,433 +122,433 @@ int HAL_SetDevInfoFile(const char *file_name) static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; + FILE *fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - /*Get device info*/ - char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); - if(NULL == authMode) { - HAL_Free(JsonDoc); - Log_e("read authcode from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - -#ifdef DEV_DYN_REG_ENABLED - char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); - if(NULL == productSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - Log_e("read product secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); -#endif - -#ifdef AUTH_MODE_CERT - char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); - if(NULL == devCrtFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); -#endif - Log_e("read device crt file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); - if(NULL == devKeyFileName) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); - HAL_Free(productSecret); - HAL_Free(devCrtFileName); - Log_e("read device private key file name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); - strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); - //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char *JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*Get device info*/ + char* authMode = LITE_json_value_of(KEY_AUTH_MODE, JsonDoc); + if (NULL == authMode) { + HAL_Free(JsonDoc); + Log_e("read authcode from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char* productId = LITE_json_value_of(KEY_PRODUCT_ID, JsonDoc); + if (NULL == productId) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + Log_e("read product id from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char* devName = LITE_json_value_of(KEY_DEV_NAME, JsonDoc); + if (NULL == devName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + Log_e("read device name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + +#ifdef DEV_DYN_REG_ENABLED + char* productSecret = LITE_json_value_of(KEY_PRODUCT_SECRET, JsonDoc); + if (NULL == productSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + Log_e("read product secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->product_secret, productSecret, MAX_SIZE_OF_PRODUCT_SECRET); +#endif + +#ifdef AUTH_MODE_CERT + char* devCrtFileName = LITE_json_value_of(KEY_DEV_CERT, JsonDoc); + if (NULL == devCrtFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); +#endif + Log_e("read device crt file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + char* devKeyFileName = LITE_json_value_of(KEY_DEV_PRIVATE_KEY, JsonDoc); + if (NULL == devKeyFileName) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); + HAL_Free(productSecret); + HAL_Free(devCrtFileName); + Log_e("read device private key file name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->dev_cert_file_name, devCrtFileName, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME); + strncpy(pDevInfo->dev_key_file_name, devKeyFileName, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME); + //Log_d("mode:%s, pid:%s, devName:%s, devCrtFileName:%s, devKeyFileName:%s", authMode, productId, devName, devCrtFileName, devKeyFileName); #else - char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); - if(NULL == devSecret) { - HAL_Free(JsonDoc); - HAL_Free(authMode); - HAL_Free(productId); - HAL_Free(devName); -#ifdef DEV_DYN_REG_ENABLED - HAL_Free(productSecret); + char* devSecret = LITE_json_value_of(KEY_DEV_SECRET, JsonDoc); + if (NULL == devSecret) { + HAL_Free(JsonDoc); + HAL_Free(authMode); + HAL_Free(productId); + HAL_Free(devName); +#ifdef DEV_DYN_REG_ENABLED + HAL_Free(productSecret); #endif - Log_e("read device secret key from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); - //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); + Log_e("read device secret key from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + strncpy(pDevInfo->device_secret, devSecret, MAX_SIZE_OF_DEVICE_SECRET); + //Log_d("mode:%s, pid:%s, devName:%s, devSerect:%s", authMode, productId, devName, devSecret); #endif - if(authMode){ - HAL_Free(authMode); - } - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - -#ifdef DEV_DYN_REG_ENABLED - if(productSecret){ - HAL_Free(productSecret); - } + if (authMode) { + HAL_Free(authMode); + } + + if (productId) { + HAL_Free(productId); + } + + if (devName) { + HAL_Free(devName); + } + +#ifdef DEV_DYN_REG_ENABLED + if (productSecret) { + HAL_Free(productSecret); + } #endif -#ifdef AUTH_MODE_CERT - if(devCrtFileName){ - HAL_Free(devCrtFileName); - } +#ifdef AUTH_MODE_CERT + if (devCrtFileName) { + HAL_Free(devCrtFileName); + } - if(devKeyFileName){ - HAL_Free(devKeyFileName); - } + if (devKeyFileName) { + HAL_Free(devKeyFileName); + } #else - if(devSecret){ - HAL_Free(devSecret); - } + if (devSecret) { + HAL_Free(devSecret); + } #endif - if(NULL != JsonDoc){ - HAL_Free(JsonDoc); - } + if (NULL != JsonDoc) { + HAL_Free(JsonDoc); + } -exit: - if(NULL != fp){ - fclose(fp); - } - return ret; +exit: + if (NULL != fp) { + fclose(fp); + } + return ret; } #ifdef GATEWAY_ENABLED static int iot_parse_subdevinfo_from_json_file(DeviceInfo *pDevInfo) { - FILE *fp; - uint32_t len; - uint32_t rlen; - int ret = QCLOUD_RET_SUCCESS; + FILE *fp; + uint32_t len; + uint32_t rlen; + int ret = QCLOUD_RET_SUCCESS; - fp = fopen(sg_device_info_file, "r"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "r"); + if (NULL == fp) { Log_e("open device info file \"%s\" failed", sg_device_info_file); ret = QCLOUD_ERR_FAILURE; - goto exit; + goto exit; } - + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > MAX_DEV_INFO_FILE_LEN){ - Log_e("device info file \"%s\" is too big!", sg_device_info_file); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - memset(JsonDoc, 0, len+10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } - - /*Get sub device info*/ - char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); - if(NULL == productId) { - HAL_Free(JsonDoc); - Log_e("read product id from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); - if(NULL == devName) { - HAL_Free(JsonDoc); - HAL_Free(productId); - Log_e("read device name from json file failed!"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); - strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); - //Log_d("pid:%s, devName:%s", productId, devName); - - if(productId){ - HAL_Free(productId); - } - - if(devName){ - HAL_Free(devName); - } - - if(JsonDoc){ - HAL_Free(JsonDoc); - } - + if (len > MAX_DEV_INFO_FILE_LEN) { + Log_e("device info file \"%s\" is too big!", sg_device_info_file); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char *JsonDoc = (char *)HAL_Malloc(len + 10); + memset(JsonDoc, 0, len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } + + /*Get sub device info*/ + char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, JsonDoc); + if (NULL == productId) { + HAL_Free(JsonDoc); + Log_e("read product id from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + char* devName = LITE_json_value_of(KEY_SUBDEV_NAME, JsonDoc); + if (NULL == devName) { + HAL_Free(JsonDoc); + HAL_Free(productId); + Log_e("read device name from json file failed!"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + strncpy(pDevInfo->product_id, productId, MAX_SIZE_OF_PRODUCT_ID); + strncpy(pDevInfo->device_name, devName, MAX_SIZE_OF_DEVICE_NAME); + //Log_d("pid:%s, devName:%s", productId, devName); + + if (productId) { + HAL_Free(productId); + } + + if (devName) { + HAL_Free(devName); + } + + if (JsonDoc) { + HAL_Free(JsonDoc); + } + exit: - - if(NULL != fp){ - fclose(fp); - } - return ret; + if (NULL != fp) { + fclose(fp); + } + + return ret; } #endif static int iot_save_devinfo_to_json_file(DeviceInfo *pDevInfo) { - char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; - int32_t remain_size = MAX_DEV_INFO_FILE_LEN; + char JsonDoc[MAX_DEV_INFO_FILE_LEN] = {0}; + int32_t remain_size = MAX_DEV_INFO_FILE_LEN; int32_t rc_of_snprintf = 0; - int32_t wlen; - FILE *fp; - - rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); - remain_size -= rc_of_snprintf; - - //auth_mode -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "CERT" - ); - remain_size -= rc_of_snprintf; + int32_t wlen; + FILE *fp; + + rc_of_snprintf = HAL_Snprintf(JsonDoc, remain_size, "{\n"); + remain_size -= rc_of_snprintf; + + //auth_mode +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "CERT" + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n",\ - KEY_AUTH_MODE, "KEY" - ); - remain_size -= rc_of_snprintf; -#endif - - //product id, device name - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ - KEY_PRODUCT_ID, pDevInfo->product_id, \ - KEY_DEV_NAME, pDevInfo->device_name); - remain_size -= rc_of_snprintf; - - //product secret + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n", \ + KEY_AUTH_MODE, "KEY" + ); + remain_size -= rc_of_snprintf; +#endif + + //product id, device name + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n\"%s\":\"%s\",\n", \ + KEY_PRODUCT_ID, pDevInfo->product_id, \ + KEY_DEV_NAME, pDevInfo->device_name); + remain_size -= rc_of_snprintf; + + //product secret #ifdef DEV_DYN_REG_ENABLED - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, - "\"%s\":\"%s\",\n", - KEY_PRODUCT_SECRET, pDevInfo->product_secret); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, + "\"%s\":\"%s\",\n", + KEY_PRODUCT_SECRET, pDevInfo->product_secret); + remain_size -= rc_of_snprintf; #endif - - // key device info or cert device info -#ifdef AUTH_MODE_CERT - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ - STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name,\ - STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ - ); - remain_size -= rc_of_snprintf; + + // key device info or cert device info +#ifdef AUTH_MODE_CERT + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_CERT); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\",\n\"%s\":\"%s\"\n}", \ + STR_DEV_CERT_FILE, pDevInfo->dev_cert_file_name, \ + STR_DEV_KEY_FILE, pDevInfo->dev_key_file_name \ + ); + remain_size -= rc_of_snprintf; #else - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); - remain_size -= rc_of_snprintf; - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ - "\"%s\":\"%s\"\n}",\ - STR_DEV_SECRET, pDevInfo->device_secret); - remain_size -= rc_of_snprintf; -#endif + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\"%s\":{\n", STR_DEV_INFO); + remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, \ + "\"%s\":\"%s\"\n}", \ + STR_DEV_SECRET, pDevInfo->device_secret); + remain_size -= rc_of_snprintf; +#endif - rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); - remain_size -= rc_of_snprintf; + rc_of_snprintf = HAL_Snprintf(JsonDoc + strlen(JsonDoc), remain_size, "\n}"); + remain_size -= rc_of_snprintf; - Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); + Log_d("JsonDoc(%d):%s", MAX_DEV_INFO_FILE_LEN - remain_size, JsonDoc); - fp = fopen(sg_device_info_file, "w"); - if(NULL == fp) { + fp = fopen(sg_device_info_file, "w"); + if (NULL == fp) { Log_e("open file %s failed", sg_device_info_file); return QCLOUD_ERR_FAILURE; } - wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); - if(wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { - Log_e("write len less than needed"); - } - fclose(fp); - return QCLOUD_RET_SUCCESS; + wlen = fwrite(JsonDoc, 1, strlen(JsonDoc), fp); + if (wlen < (MAX_DEV_INFO_FILE_LEN - remain_size)) { + Log_e("write len less than needed"); + } + fclose(fp); + return QCLOUD_RET_SUCCESS; } #endif int HAL_SetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID - ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name + ret = device_info_copy(sg_product_id, devInfo->product_id, MAX_SIZE_OF_PRODUCT_ID);//set product ID + ret |= device_info_copy(sg_device_name, devInfo->device_name, MAX_SIZE_OF_DEVICE_NAME);//set dev name -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name - ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(sg_device_cert_file_name, devInfo->dev_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//set dev cert file name + ret |= device_info_copy(sg_device_privatekey_file_name, devInfo->dev_key_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//set dev key file name #else - ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret + ret |= device_info_copy(sg_device_secret, devInfo->device_secret, MAX_SIZE_OF_DEVICE_SECRET);//set dev secret #endif #else - ret = iot_save_devinfo_to_json_file(devInfo); + ret = iot_save_devinfo_to_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Set device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Set device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } int HAL_GetDevInfo(void *pdevInfo) { - POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); - int ret; - DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; - memset((char *)devInfo, '\0', sizeof(DeviceInfo)); + POINTER_SANITY_CHECK(pdevInfo, QCLOUD_ERR_DEV_INFO); + int ret; + DeviceInfo *devInfo = (DeviceInfo *)pdevInfo; + memset((char *)devInfo, '\0', sizeof(DeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID - ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name + ret = device_info_copy(devInfo->product_id, sg_product_id, MAX_SIZE_OF_PRODUCT_ID);//get product ID + ret |= device_info_copy(devInfo->device_name, sg_device_name, MAX_SIZE_OF_DEVICE_NAME);//get dev name #ifdef DEV_DYN_REG_ENABLED - ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID -#endif + ret |= device_info_copy(devInfo->product_secret, sg_product_secret, MAX_SIZE_OF_PRODUCT_SECRET );//get product ID +#endif -#ifdef AUTH_MODE_CERT - ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name - ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name +#ifdef AUTH_MODE_CERT + ret |= device_info_copy(devInfo->dev_cert_file_name, sg_device_cert_file_name, MAX_SIZE_OF_DEVICE_CERT_FILE_NAME);//get dev cert file name + ret |= device_info_copy(devInfo->dev_key_file_name, sg_device_privatekey_file_name, MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME);//get dev key file name #else - ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret + ret |= device_info_copy(devInfo->device_secret, sg_device_secret, MAX_SIZE_OF_DEVICE_SECRET);//get dev secret #endif #else - ret = iot_parse_devinfo_from_json_file(devInfo); + ret = iot_parse_devinfo_from_json_file(devInfo); #endif - if(QCLOUD_RET_SUCCESS != ret){ - Log_e("Get device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } #ifdef GATEWAY_ENABLED int HAL_GetGwDevInfo(void *pgwDeviceInfo) { - POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); - int ret; - GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; - memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); + POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); + int ret; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; + memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED - ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0]->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0]->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[0]->product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[0]->device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); #else - ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); - if(ret != QCLOUD_RET_SUCCESS) { - return QCLOUD_ERR_FAILURE; - } - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); + ret = iot_parse_devinfo_from_json_file(&(gwDevInfo->gw_info)); + if (ret != QCLOUD_RET_SUCCESS) { + return QCLOUD_ERR_FAILURE; + } + //only one sub-device is supported now + gwDevInfo->sub_dev_num = 1; + //copy sub dev info + ret = iot_parse_subdevinfo_from_json_file(gwDevInfo->sub_dev_info); #endif - if(QCLOUD_RET_SUCCESS != ret) { - Log_e("Get gateway device info err"); - ret = QCLOUD_ERR_DEV_INFO; - } - return ret; + if (QCLOUD_RET_SUCCESS != ret) { + Log_e("Get gateway device info err"); + ret = QCLOUD_ERR_DEV_INFO; + } + return ret; } -#endif +#endif diff --git a/platform/os/windows/HAL_Log_win.c b/platform/os/windows/HAL_Log_win.c index ef9a0d0..5a57f9b 100644 --- a/platform/os/windows/HAL_Log_win.c +++ b/platform/os/windows/HAL_Log_win.c @@ -27,16 +27,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "a+" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + len = fwrite((void *)log, 1, wLen, fp); Log_d("write %d of %d to log file", len, wLen); - + fclose(fp); return len; @@ -46,16 +46,16 @@ size_t HAL_Log_Save(const char *log, size_t wLen) size_t HAL_Log_Read (char *buff, size_t rLen) { FILE *fp; - size_t len; + size_t len; - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; } len = fread((void *)buff, 1, rLen, fp); Log_d("read %d of %d from log file", len, rLen); - + fclose(fp); return len; @@ -76,12 +76,12 @@ size_t HAL_Log_Get_Size(void) /* check if file exists */ if (access(LOG_SAVE_FILE_PATH, 0)) return 0; - - if( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { + + if ( ( fp = fopen(LOG_SAVE_FILE_PATH, "r" ) ) == NULL ) { Log_e("fail to open file %s", LOG_SAVE_FILE_PATH); return 0; - } - + } + fseek(fp, 0L, SEEK_END); length = ftell(fp); fclose(fp); diff --git a/platform/os/windows/HAL_OS_win.c b/platform/os/windows/HAL_OS_win.c index f2456b5..e13bada 100644 --- a/platform/os/windows/HAL_OS_win.c +++ b/platform/os/windows/HAL_OS_win.c @@ -24,117 +24,117 @@ void *HAL_MutexCreate(void) { - HANDLE mutex = CreateMutex( - NULL, - FALSE, - NULL - ); + HANDLE mutex = CreateMutex( + NULL, + FALSE, + NULL + ); - if (mutex == NULL) { - HAL_Printf("%s: create mutex failed\n", __FUNCTION__); - } + if (mutex == NULL) { + HAL_Printf("%s: create mutex failed\n", __FUNCTION__); + } - return (void *)mutex; + return (void *)mutex; } void HAL_MutexDestroy(_IN_ void *mutex) { - CloseHandle((HANDLE)mutex); + CloseHandle((HANDLE)mutex); } void HAL_MutexLock(_IN_ void *mutex) { - WaitForSingleObject((HANDLE)mutex, INFINITE); + WaitForSingleObject((HANDLE)mutex, INFINITE); } int HAL_MutexTryLock(_IN_ void *mutex) { - return WaitForSingleObject((HANDLE)mutex, 0) == WAIT_OBJECT_0 ? 0 : -1; + return WaitForSingleObject((HANDLE)mutex, 0) == WAIT_OBJECT_0 ? 0 : -1; } void HAL_MutexUnlock(_IN_ void *mutex) { - ReleaseMutex((HANDLE)mutex); + ReleaseMutex((HANDLE)mutex); } void *HAL_Malloc(_IN_ uint32_t size) { - return malloc(size); + return malloc(size); } void HAL_Free(_IN_ void *ptr) { - free(ptr); + free(ptr); } void HAL_Printf(_IN_ const char *fmt, ...) { - va_list args; + va_list args; - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); + va_start(args, fmt); + vprintf(fmt, args); + va_end(args); - fflush(stdout); + fflush(stdout); } int HAL_Snprintf(_IN_ char *str, const int len, const char *fmt, ...) { - va_list args; - int rc; + va_list args; + int rc; - va_start(args, fmt); - rc = vsnprintf(str, len, fmt, args); - va_end(args); + va_start(args, fmt); + rc = vsnprintf(str, len, fmt, args); + va_end(args); - return rc; + return rc; } int HAL_Vsnprintf(_IN_ char *str, _IN_ const int len, _IN_ const char *format, va_list ap) { - return vsnprintf(str, len, format, ap); + return vsnprintf(str, len, format, ap); } uint32_t HAL_GetTimeMs(void) -{ +{ return (uint32_t)GetTickCount64(); } void HAL_SleepMs(_IN_ uint32_t ms) { - Sleep(ms); + Sleep(ms); } #ifdef AT_TCP_ENABLED -void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname,void *(*fn)(void*), void* arg) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - return NULL; + return NULL; } int HAL_ThreadDestroy(void *thread_t) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } void *HAL_SemaphoreCreate(void) { - return NULL; + return NULL; } void HAL_SemaphoreDestroy(void *sem) { - return; + return; } void HAL_SemaphorePost(void *sem) { - return; + return; } int HAL_SemaphoreWait(void *sem, uint32_t timeout_ms) { - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif diff --git a/platform/os/windows/HAL_TCP_win.c b/platform/os/windows/HAL_TCP_win.c index 2f9fa9e..1dd58cf 100644 --- a/platform/os/windows/HAL_TCP_win.c +++ b/platform/os/windows/HAL_TCP_win.c @@ -47,71 +47,67 @@ static uint64_t _win_time_left(uint64_t t_end, uint64_t t_now) uintptr_t HAL_TCP_Connect(const char* host, uint16_t port) { - WORD sockVersion = MAKEWORD(2, 2); - WSADATA data; - - if (WSAStartup(sockVersion, &data) != 0) - { - return 0; - } - int ret; - struct addrinfo hints, * addr_list, * cur; - SOCKET fd; - - char port_str[6]; - HAL_Snprintf(port_str, 6, "%d", port); - - memset(&hints, 0x00, sizeof(hints)); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - - ret = getaddrinfo(host, port_str, &hints, &addr_list); - if (ret) { - Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); - - return 0; - } - - for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd == INVALID_SOCKET) - { - ret = 0; - continue; - } - - if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) - { - ret = fd; - break; - } - - closesocket(fd); - ret = 0; - } - - if (0 == ret) { - Log_e("fail to connect with TCP server: %s:%s", host, port_str); - } - else { - /* reduce log print due to frequent log server connect/disconnect */ - if (0 == strncmp(host, LOG_UPLOAD_SERVER_DOMAIN, HOST_STR_LENGTH)) - UPLOAD_DBG("connected with TCP server: %s:%s", host, port_str); - else - Log_i("connected with TCP server: %s:%s", host, port_str); - } - - freeaddrinfo(addr_list); - - return (uintptr_t)ret; + WORD sockVersion = MAKEWORD(2, 2); + WSADATA data; + + if (WSAStartup(sockVersion, &data) != 0) { + return 0; + } + int ret; + struct addrinfo hints, * addr_list, * cur; + SOCKET fd; + + char port_str[6]; + HAL_Snprintf(port_str, 6, "%d", port); + + memset(&hints, 0x00, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + + ret = getaddrinfo(host, port_str, &hints, &addr_list); + if (ret) { + Log_e("getaddrinfo(%s:%s) error: %s", host, port_str, strerror(errno)); + + return 0; + } + + for (cur = addr_list; cur != NULL; cur = cur->ai_next) { + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd == INVALID_SOCKET) { + ret = 0; + continue; + } + + if (connect(fd, cur->ai_addr, cur->ai_addrlen) == 0) { + ret = fd; + break; + } + + closesocket(fd); + ret = 0; + } + + if (0 == ret) { + Log_e("fail to connect with TCP server: %s:%s", host, port_str); + } else { + /* reduce log print due to frequent log server connect/disconnect */ + if (0 == strncmp(host, LOG_UPLOAD_SERVER_DOMAIN, HOST_STR_LENGTH)) + UPLOAD_DBG("connected with TCP server: %s:%s", host, port_str); + else + Log_i("connected with TCP server: %s:%s", host, port_str); + } + + freeaddrinfo(addr_list); + + return (uintptr_t)ret; } int HAL_TCP_Disconnect(uintptr_t fd) { - closesocket(fd); - WSACleanup(); + closesocket(fd); + WSACleanup(); return 0; } @@ -158,13 +154,12 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("select-write fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("select-write fail: %s", strerror(errno)); break; } - } - else { - ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; + } else { + ret = QCLOUD_ERR_TCP_WRITE_TIMEOUT; } if (ret > 0) { @@ -179,8 +174,8 @@ int HAL_TCP_Write(uintptr_t fd, const unsigned char *buf, uint32_t len, uint32_t continue; } - ret = QCLOUD_ERR_TCP_WRITE_FAIL; - Log_e("send fail: %s", strerror(errno)); + ret = QCLOUD_ERR_TCP_WRITE_FAIL; + Log_e("send fail: %s", strerror(errno)); break; } } @@ -207,7 +202,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou do { t_left = _win_time_left(t_end, _win_get_time_ms()); if (0 == t_left) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } @@ -231,18 +226,18 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou /* reduce log print due to frequent log server connect/disconnect */ if (peer_port == LOG_UPLOAD_SERVER_PORT) - UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); + UPLOAD_DBG("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); else Log_e("connection is closed by server: %s:%d", inet_ntoa(peer.sin_addr), peer_port); - + err_code = QCLOUD_ERR_TCP_PEER_SHUTDOWN; break; } else { if (EINTR == errno) { Log_e("EINTR be caught"); continue; - } - Log_e("recv error: %s", strerror(errno)); + } + Log_e("recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } @@ -250,7 +245,7 @@ int HAL_TCP_Read(uintptr_t fd, unsigned char *buf, uint32_t len, uint32_t timeou err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; break; } else { - Log_e("select-recv error: %s", strerror(errno)); + Log_e("select-recv error: %s", strerror(errno)); err_code = QCLOUD_ERR_TCP_READ_FAIL; break; } diff --git a/platform/os/windows/HAL_Timer_win.c b/platform/os/windows/HAL_Timer_win.c index 046817d..524bd7a 100644 --- a/platform/os/windows/HAL_Timer_win.c +++ b/platform/os/windows/HAL_Timer_win.c @@ -16,60 +16,67 @@ #ifdef __cplusplus extern "C" { #endif - -#include + +#include #include #include "qcloud_iot_import.h" static char now_time_str[20] = {0}; - -bool HAL_Timer_expired(Timer *timer) { - if (GetTickCount64() >= timer->end_time) { - return true; - } - return false; +bool HAL_Timer_expired(Timer *timer) +{ + if (GetTickCount64() >= timer->end_time) { + return true; + } + + return false; } -void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) { - timer->end_time = GetTickCount64() + timeout_ms; +void HAL_Timer_countdown_ms(Timer *timer, unsigned int timeout_ms) +{ + timer->end_time = GetTickCount64() + timeout_ms; } -void HAL_Timer_countdown(Timer *timer, unsigned int timeout) { - timer->end_time = GetTickCount64() + (UINT64)timeout * 1000; +void HAL_Timer_countdown(Timer *timer, unsigned int timeout) +{ + timer->end_time = GetTickCount64() + (UINT64)timeout * 1000; } -int HAL_Timer_remain(Timer* timer) { - UINT64 now = GetTickCount64(); +int HAL_Timer_remain(Timer* timer) +{ + UINT64 now = GetTickCount64(); - if (now >= timer->end_time) { - return 0; - } + if (now >= timer->end_time) { + return 0; + } - return (int)(timer->end_time - now); + return (int)(timer->end_time - now); } -void HAL_Timer_init(Timer *timer) { - timer->end_time = 0; +void HAL_Timer_init(Timer *timer) +{ + timer->end_time = 0; } -char* HAL_Timer_current(void) { - static char time_str[64] = { '\0' }; - time_t now; - struct tm tm_val; +char* HAL_Timer_current(void) +{ + static char time_str[64] = { '\0' }; + time_t now; + struct tm tm_val; - time(&now); - localtime_s(&tm_val, &now); + time(&now); + localtime_s(&tm_val, &now); - snprintf(time_str, sizeof(time_str), "%04d/%02d/%02d %02d:%02d:%02d", tm_val.tm_year + 1900, tm_val.tm_mon + 1, tm_val.tm_mday, tm_val.tm_hour, tm_val.tm_min, tm_val.tm_sec); + snprintf(time_str, sizeof(time_str), "%04d/%02d/%02d %02d:%02d:%02d", tm_val.tm_year + 1900, tm_val.tm_mon + 1, tm_val.tm_mday, tm_val.tm_hour, tm_val.tm_min, tm_val.tm_sec); - return time_str; + return time_str; } -long HAL_Timer_current_sec(void) { - return (long)(GetTickCount64() / 1000); +long HAL_Timer_current_sec(void) +{ + return (long)(GetTickCount64() / 1000); } - + #ifdef __cplusplus } #endif diff --git a/platform/os/windows/HAL_UDP_win.c b/platform/os/windows/HAL_UDP_win.c index 9bc308d..89e41e2 100644 --- a/platform/os/windows/HAL_UDP_win.c +++ b/platform/os/windows/HAL_UDP_win.c @@ -48,25 +48,25 @@ uintptr_t HAL_UDP_Connect(const char *host, unsigned short port) Log_d("establish tcp connection with server(host=%s port=%s)", host, port_str); - if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { - Log_e("getaddrinfo error,errno:%s",strerror(errno)); + if (getaddrinfo(host, port_str, &hints, &addr_list) != 0) { + Log_e("getaddrinfo error,errno:%s", strerror(errno)); return 0; } for (cur = addr_list; cur != NULL; cur = cur->ai_next) { - fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); - if (fd < 0) { - ret = 0; - continue; - } - - if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { - ret = fd; - break; - } - - closesocket(fd); - ret = 0; + fd = socket(cur->ai_family, cur->ai_socktype, cur->ai_protocol); + if (fd < 0) { + ret = 0; + continue; + } + + if (0 == connect(fd, cur->ai_addr, cur->ai_addrlen)) { + ret = fd; + break; + } + + closesocket(fd); + ret = 0; } if (0 == ret) { @@ -87,7 +87,7 @@ void HAL_UDP_Disconnect(uintptr_t fd) long socket_id = -1; socket_id = (int)fd; - closesocket(socket_id); + closesocket(socket_id); } int HAL_UDP_Write(uintptr_t fd, const unsigned char *p_data, unsigned int datalen) diff --git a/platform/tls/mbedtls/HAL_DTLS_mbedtls.c b/platform/tls/mbedtls/HAL_DTLS_mbedtls.c index b695fe6..86b6f3d 100644 --- a/platform/tls/mbedtls/HAL_DTLS_mbedtls.c +++ b/platform/tls/mbedtls/HAL_DTLS_mbedtls.c @@ -20,14 +20,14 @@ extern "C" { #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS #ifdef COAP_COMM_ENABLED #include #include #include - + #include "mbedtls/net_sockets.h" #include "mbedtls/debug.h" #include "mbedtls/ssl.h" @@ -42,7 +42,7 @@ extern "C" { #include "utils_param_check.h" #define DEBUG_LEVEL 0 - + #ifndef AUTH_MODE_CERT static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; #endif @@ -50,8 +50,7 @@ static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTL /** * @brief data structure for mbedtls SSL connection */ -typedef struct -{ +typedef struct { mbedtls_net_context socket_fd; mbedtls_entropy_context entropy; mbedtls_ctr_drbg_context ctr_drbg; @@ -82,22 +81,22 @@ static void _free_mebeddtls(DTLSDataParams *pParams) HAL_Free(pParams); } - + static void _dtls_debug( void *ctx, int level, - const char *file, int line, - const char *str ) + const char *file, int line, + const char *str ) { Log_i("[mbedTLS]:[%s]:[%d]: %s\r\n", file, line, str); } - + static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams *pConnectParams) { - int ret = QCLOUD_RET_SUCCESS; + int ret = QCLOUD_RET_SUCCESS; #if defined(MBEDTLS_DEBUG_C) mbedtls_debug_set_threshold( DEBUG_LEVEL ); #endif - + mbedtls_net_init( &(pDataParams->socket_fd) ); mbedtls_ssl_init( &(pDataParams->ssl) ); mbedtls_ssl_config_init( &(pDataParams->ssl_conf) ); @@ -107,19 +106,17 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * mbedtls_ctr_drbg_init( &(pDataParams->ctr_drbg) ); mbedtls_entropy_init( &(pDataParams->entropy) ); - if((ret = mbedtls_ctr_drbg_seed(&pDataParams->ctr_drbg, mbedtls_entropy_func, - &pDataParams->entropy, NULL,0)) != 0) - { + if ((ret = mbedtls_ctr_drbg_seed(&pDataParams->ctr_drbg, mbedtls_entropy_func, + &pDataParams->entropy, NULL, 0)) != 0) { Log_e("mbedtls_ctr_drbg_seed failed returned -0x%x", -ret); return QCLOUD_ERR_SSL_INIT; } - mbedtls_ssl_conf_authmode(&pDataParams->ssl_conf, MBEDTLS_SSL_VERIFY_NONE ); + mbedtls_ssl_conf_authmode(&pDataParams->ssl_conf, MBEDTLS_SSL_VERIFY_NONE ); - if (pConnectParams->ca_crt != NULL) - { + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { + (pConnectParams->ca_crt_len + 1)))) { Log_e("parse ca crt failed returned -0x%04x", -ret); return QCLOUD_ERR_SSL_CERT; } @@ -127,7 +124,7 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { Log_e("load client cert file failed returned -0x%x", ret); return QCLOUD_ERR_SSL_CERT; } @@ -147,20 +144,20 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * } else { Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); } - + #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + (const unsigned char *) psk_id, strlen( psk_id )); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: -0x%x", -ret); - return ret; - } + + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: -0x%x", -ret); + return ret; + } #endif return ret; @@ -174,7 +171,8 @@ static int _mbedtls_client_init(DTLSDataParams *pDataParams, DTLSConnectParams * * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { +int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); @@ -200,22 +198,22 @@ int _mbedtls_udp_connect(mbedtls_net_context *socket_fd, const char *host, int p uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, int port) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; int ret = QCLOUD_RET_SUCCESS; - + DTLSDataParams * pDataParams = (DTLSDataParams *)HAL_Malloc(sizeof(DTLSDataParams)); if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { - goto error; - } + goto error; + } if ((ret = _mbedtls_udp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { - goto error; - } + goto error; + } if ((ret = mbedtls_ssl_config_defaults(&pDataParams->ssl_conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_DATAGRAM, - MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { + MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { Log_e("mbedtls_ssl_config_defaults result 0x%04x", ret); goto error; } @@ -233,58 +231,57 @@ uintptr_t HAL_DTLS_Connect(DTLSConnectParams *pConnectParams, const char *host, mbedtls_ssl_conf_dtls_cookies(&pDataParams->ssl_conf, mbedtls_ssl_cookie_write, mbedtls_ssl_cookie_check, &pDataParams->cookie_ctx); #ifndef AUTH_MODE_CERT - mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); -#endif - + mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); +#endif + #ifdef MBEDTLS_SSL_PROTO_DTLS - if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) - { + if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) { mbedtls_ssl_conf_min_version(&pDataParams->ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); - + mbedtls_ssl_conf_max_version(&pDataParams->ssl_conf, MBEDTLS_SSL_MAJOR_VERSION_3, MBEDTLS_SSL_MINOR_VERSION_3); - + mbedtls_ssl_conf_handshake_timeout(&pDataParams->ssl_conf, (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2), - (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2 * 4)); + (MBEDTLS_SSL_DTLS_TIMEOUT_DFL_MIN * 2 * 4)); } #endif if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned -0x%x", -ret); - goto error; - } + Log_e("mbedtls_ssl_setup failed returned -0x%x", -ret); + goto error; + } if (pDataParams->ssl_conf.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM) { - mbedtls_ssl_set_timer_cb(&(pDataParams->ssl), (void *)&pDataParams->timer, mbedtls_timing_set_delay, - mbedtls_timing_get_delay); - } + mbedtls_ssl_set_timer_cb(&(pDataParams->ssl), (void *)&pDataParams->timer, mbedtls_timing_set_delay, + mbedtls_timing_get_delay); + } if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned -0x%x", -ret); - goto error; - } - - mbedtls_ssl_set_bio(&(pDataParams->ssl), (void *)&pDataParams->socket_fd, mbedtls_net_send, mbedtls_net_recv, - mbedtls_net_recv_timeout); - - while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { - if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("mbedtls_ssl_handshake failed returned -0x%x", -ret); - if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { - Log_e("Unable to verify the server's certificate"); - } - goto error; - } - } - + Log_e("mbedtls_ssl_set_hostname failed returned -0x%x", -ret); + goto error; + } + + mbedtls_ssl_set_bio(&(pDataParams->ssl), (void *)&pDataParams->socket_fd, mbedtls_net_send, mbedtls_net_recv, + mbedtls_net_recv_timeout); + + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { + if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { + Log_e("mbedtls_ssl_handshake failed returned -0x%x", -ret); + if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { + Log_e("Unable to verify the server's certificate"); + } + goto error; + } + } + if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { Log_e("mbedtls_ssl_get_verify_result failed returned -0x%x", -ret); goto error; } return (uintptr_t)pDataParams; - + error: - _free_mebeddtls(pDataParams); + _free_mebeddtls(pDataParams); return 0; } @@ -313,69 +310,68 @@ void HAL_DTLS_Disconnect(uintptr_t handle) HAL_Free((void *)handle); } - + int HAL_DTLS_Write(uintptr_t handle, const unsigned char *data, size_t datalen, size_t *written_len) { - DTLSDataParams *data_params = (DTLSDataParams *)handle; - POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(written_len, QCLOUD_ERR_INVAL); + DTLSDataParams *data_params = (DTLSDataParams *)handle; + POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(written_len, QCLOUD_ERR_INVAL); int rc = mbedtls_ssl_write(&data_params->ssl, data, datalen); - if( rc < 0 ) { - Log_e("failed! mbedtls_ssl_write returned %d", rc); - rc = QCLOUD_ERR_SSL_WRITE; - } + if ( rc < 0 ) { + Log_e("failed! mbedtls_ssl_write returned %d", rc); + rc = QCLOUD_ERR_SSL_WRITE; + } - *written_len = rc; + *written_len = rc; rc = QCLOUD_RET_SUCCESS; - + IOT_FUNC_EXIT_RC(rc); } int HAL_DTLS_Read(uintptr_t handle, unsigned char *data, size_t datalen, unsigned int timeout_ms, - size_t *read_len) + size_t *read_len) { DTLSDataParams *data_params = (DTLSDataParams *)handle; POINTER_SANITY_CHECK(data_params, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(read_len, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(data, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(read_len, QCLOUD_ERR_INVAL); int rc = QCLOUD_ERR_SSL_READ; - - mbedtls_ssl_conf_read_timeout(&(data_params->ssl_conf), timeout_ms); - - do { - rc = mbedtls_ssl_read(&(data_params->ssl), data, datalen); - } while (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE); - - if( rc <= 0 ) { - *read_len = 0; - switch( rc ) - { - case MBEDTLS_ERR_SSL_TIMEOUT: - rc = QCLOUD_ERR_SSL_READ_TIMEOUT; - break; - - case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: - Log_e("connection was closed gracefully"); - rc = QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY; - break; - - default: - Log_e( " mbedtls_ssl_read returned -0x%x", -rc ); - break; - } - } else { - *read_len = rc; - rc = QCLOUD_RET_SUCCESS; - } - + + mbedtls_ssl_conf_read_timeout(&(data_params->ssl_conf), timeout_ms); + + do { + rc = mbedtls_ssl_read(&(data_params->ssl), data, datalen); + } while (rc == MBEDTLS_ERR_SSL_WANT_READ || rc == MBEDTLS_ERR_SSL_WANT_WRITE); + + if ( rc <= 0 ) { + *read_len = 0; + switch ( rc ) { + case MBEDTLS_ERR_SSL_TIMEOUT: + rc = QCLOUD_ERR_SSL_READ_TIMEOUT; + break; + + case MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY: + Log_e("connection was closed gracefully"); + rc = QCLOUD_ERR_DTLS_PEER_CLOSE_NOTIFY; + break; + + default: + Log_e( " mbedtls_ssl_read returned -0x%x", -rc ); + break; + } + } else { + *read_len = rc; + rc = QCLOUD_RET_SUCCESS; + } + return rc; } #endif - + #ifdef __cplusplus } #endif diff --git a/platform/tls/mbedtls/HAL_TLS_mbedtls.c b/platform/tls/mbedtls/HAL_TLS_mbedtls.c index 35f3bc3..f6edd1c 100644 --- a/platform/tls/mbedtls/HAL_TLS_mbedtls.c +++ b/platform/tls/mbedtls/HAL_TLS_mbedtls.c @@ -19,7 +19,7 @@ extern "C" { #include "qcloud_iot_import.h" -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS #include #include @@ -40,7 +40,7 @@ extern "C" { #ifndef AUTH_MODE_CERT static const int ciphersuites[] = { MBEDTLS_TLS_PSK_WITH_AES_128_CBC_SHA, MBEDTLS_TLS_PSK_WITH_AES_256_CBC_SHA, 0 }; #endif - + /** * @brief data structure for mbedtls SSL connection */ @@ -54,7 +54,7 @@ typedef struct { mbedtls_x509_crt client_cert; mbedtls_pk_context private_key; } TLSDataParams; - + /** * @brief free memory/resources allocated by mbedtls */ @@ -68,7 +68,7 @@ static void _free_mebedtls(TLSDataParams *pParams) mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free(pParams); } @@ -83,7 +83,8 @@ static void _free_mebedtls(TLSDataParams *pParams) * @param pConnectParams device info for TLS connection * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) { +static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pConnectParams) +{ int ret = QCLOUD_RET_SUCCESS; mbedtls_net_init(&(pDataParams->socket_fd)); @@ -98,46 +99,45 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC // custom parameter is NULL for now if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, 0)) != 0) { - Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ctr_drbg_seed failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_INIT; } - - if (pConnectParams->ca_crt != NULL) - { + + if (pConnectParams->ca_crt != NULL) { if ((ret = mbedtls_x509_crt_parse(&(pDataParams->ca_cert), (const unsigned char *)pConnectParams->ca_crt, - (pConnectParams->ca_crt_len + 1)))) { - Log_e("parse ca crt failed returned 0x%04x", ret<0?-ret:ret); + (pConnectParams->ca_crt_len + 1)))) { + Log_e("parse ca crt failed returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } #ifdef AUTH_MODE_CERT if (pConnectParams->cert_file != NULL && pConnectParams->key_file != NULL) { - if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { - Log_e("load client cert file failed returned 0x%x", ret<0?-ret:ret); + if ((ret = mbedtls_x509_crt_parse_file(&(pDataParams->client_cert), pConnectParams->cert_file)) != 0) { + Log_e("load client cert file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } if ((ret = mbedtls_pk_parse_keyfile(&(pDataParams->private_key), pConnectParams->key_file, "")) != 0) { - Log_e("load client key file failed returned 0x%x", ret<0?-ret:ret); + Log_e("load client key file failed returned 0x%x", ret < 0 ? -ret : ret); return QCLOUD_ERR_SSL_CERT; } } else { Log_d("cert_file/key_file is empty!|cert_file=%s|key_file=%s", pConnectParams->cert_file, pConnectParams->key_file); } #else - if (pConnectParams->psk != NULL && pConnectParams->psk_id !=NULL) { + if (pConnectParams->psk != NULL && pConnectParams->psk_id != NULL) { const char *psk_id = pConnectParams->psk_id; ret = mbedtls_ssl_conf_psk(&(pDataParams->ssl_conf), (unsigned char *)pConnectParams->psk, pConnectParams->psk_length, - (const unsigned char *) psk_id, strlen( psk_id )); + (const unsigned char *) psk_id, strlen( psk_id )); } else { Log_d("psk/pskid is empty!|psk=%s|psd_id=%s", pConnectParams->psk, pConnectParams->psk_id); } - - if (0 != ret) { - Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret<0?-ret:ret); - return ret; - } + + if (0 != ret) { + Log_e("mbedtls_ssl_conf_psk fail: 0x%x", ret < 0 ? -ret : ret); + return ret; + } #endif return QCLOUD_RET_SUCCESS; @@ -151,13 +151,14 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC * @param port server port * @return QCLOUD_RET_SUCCESS when success, or err code for failure */ -int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) { +int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int port) +{ int ret = 0; char port_str[6]; HAL_Snprintf(port_str, 6, "%d", port); if ((ret = mbedtls_net_connect(socket_fd, host, port_str, MBEDTLS_NET_PROTO_TCP)) != 0) { - Log_e("tcp connect failed returned 0x%04x errno: %d", ret<0?-ret:ret, errno); + Log_e("tcp connect failed returned 0x%04x errno: %d", ret < 0 ? -ret : ret, errno); switch (ret) { case MBEDTLS_ERR_NET_SOCKET_FAILED: @@ -171,7 +172,7 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p } if ((ret = mbedtls_net_set_block(socket_fd)) != 0) { - Log_e("set block faliled returned 0x%04x", ret<0?-ret:ret); + Log_e("set block faliled returned 0x%04x", ret < 0 ? -ret : ret); return QCLOUD_ERR_TCP_CONNECT; } @@ -185,7 +186,8 @@ int _mbedtls_tcp_connect(mbedtls_net_context *socket_fd, const char *host, int p * * @return */ -int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) { +int _qcloud_server_certificate_verify(void *hostname, mbedtls_x509_crt *crt, int depth, uint32_t *flags) +{ return *flags; } @@ -194,17 +196,17 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in int ret = 0; TLSDataParams * pDataParams = (TLSDataParams *)HAL_Malloc(sizeof(TLSDataParams)); - + if ((ret = _mbedtls_client_init(pDataParams, pConnectParams)) != QCLOUD_RET_SUCCESS) { goto error; } - + Log_d("Setting up the SSL/TLS structure..."); if ((ret = mbedtls_ssl_config_defaults(&(pDataParams->ssl_conf), MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT)) != 0) { - Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_config_defaults failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -217,26 +219,26 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in mbedtls_ssl_conf_ca_chain(&(pDataParams->ssl_conf), &(pDataParams->ca_cert), NULL); if ((ret = mbedtls_ssl_conf_own_cert(&(pDataParams->ssl_conf), &(pDataParams->client_cert), &(pDataParams->private_key))) != 0) { - Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_conf_own_cert failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), pConnectParams->timeout_ms); if ((ret = mbedtls_ssl_setup(&(pDataParams->ssl), &(pDataParams->ssl_conf))) != 0) { - Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_setup failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } #ifndef AUTH_MODE_CERT // ciphersuites selection for PSK device - if(pConnectParams->psk != NULL) { + if (pConnectParams->psk != NULL) { mbedtls_ssl_conf_ciphersuites(&(pDataParams->ssl_conf), ciphersuites); } #endif // Set the hostname to check against the received server certificate and sni if ((ret = mbedtls_ssl_set_hostname(&(pDataParams->ssl), host)) != 0) { - Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_set_hostname failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } @@ -248,10 +250,10 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in if ((ret = _mbedtls_tcp_connect(&(pDataParams->socket_fd), host, port)) != QCLOUD_RET_SUCCESS) { goto error; } - + while ((ret = mbedtls_ssl_handshake(&(pDataParams->ssl))) != 0) { if (ret != MBEDTLS_ERR_SSL_WANT_READ && ret != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("mbedtls_ssl_handshake failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_handshake failed returned 0x%04x", ret < 0 ? -ret : ret); if (ret == MBEDTLS_ERR_X509_CERT_VERIFY_FAILED) { Log_e("Unable to verify the server's certificate"); } @@ -260,14 +262,14 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in } if ((ret = mbedtls_ssl_get_verify_result(&(pDataParams->ssl))) != 0) { - Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret<0?-ret:ret); + Log_e("mbedtls_ssl_get_verify_result failed returned 0x%04x", ret < 0 ? -ret : ret); goto error; } mbedtls_ssl_conf_read_timeout(&(pDataParams->ssl_conf), 100); Log_i("connected with /%s/%d...", host, port); - + return (uintptr_t)pDataParams; error: @@ -275,7 +277,8 @@ uintptr_t HAL_TLS_Connect(TLSConnectParams *pConnectParams, const char *host, in return 0; } -void HAL_TLS_Disconnect(uintptr_t handle) { +void HAL_TLS_Disconnect(uintptr_t handle) +{ if ((uintptr_t)NULL == handle) { Log_d("handle is NULL"); return; @@ -294,12 +297,12 @@ void HAL_TLS_Disconnect(uintptr_t handle) { mbedtls_ssl_config_free(&(pParams->ssl_conf)); mbedtls_ctr_drbg_free(&(pParams->ctr_drbg)); mbedtls_entropy_free(&(pParams->entropy)); - + HAL_Free((void *)handle); } int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, - size_t *written_len) + size_t *written_len) { Timer timer; @@ -308,15 +311,14 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ size_t written_so_far; bool errorFlag = false; int write_rc = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; for (written_so_far = 0; written_so_far < totalLen && !expired(&timer); written_so_far += write_rc) { - while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) - { + while (!expired(&timer) && (write_rc = mbedtls_ssl_write(&(pParams->ssl), msg + written_so_far, totalLen - written_so_far)) <= 0) { if (write_rc != MBEDTLS_ERR_SSL_WANT_READ && write_rc != MBEDTLS_ERR_SSL_WANT_WRITE) { - Log_e("HAL_TLS_write failed 0x%04x", write_rc<0?-write_rc:write_rc); + Log_e("HAL_TLS_write failed 0x%04x", write_rc < 0 ? -write_rc : write_rc); errorFlag = true; break; } @@ -338,7 +340,7 @@ int HAL_TLS_Write(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_ return QCLOUD_RET_SUCCESS; } -int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) +int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t timeout_ms, size_t *read_len) { //mbedtls_ssl_conf_read_timeout(&(pParams->ssl_conf), timeout_ms); TODO:this cause read blocking and no return even timeout @@ -347,7 +349,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t InitTimer(&timer); countdown_ms(&timer, (unsigned int) timeout_ms); *read_len = 0; - + TLSDataParams *pParams = (TLSDataParams *)handle; do { @@ -358,7 +360,7 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t *read_len += read_rc; } else if (read_rc == 0 || (read_rc != MBEDTLS_ERR_SSL_WANT_WRITE && read_rc != MBEDTLS_ERR_SSL_WANT_READ && read_rc != MBEDTLS_ERR_SSL_TIMEOUT)) { - Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc<0?-read_rc:read_rc); + Log_e("cloud_iot_network_tls_read failed: 0x%04x", read_rc < 0 ? -read_rc : read_rc); return QCLOUD_ERR_SSL_READ; } @@ -383,4 +385,4 @@ int HAL_TLS_Read(uintptr_t handle, unsigned char *msg, size_t totalLen, uint32_t } #endif -#endif +#endif diff --git a/samples/CMakeLists.txt b/samples/CMakeLists.txt index 109dd39..1d322e3 100644 --- a/samples/CMakeLists.txt +++ b/samples/CMakeLists.txt @@ -37,6 +37,22 @@ file(GLOB src_light_data_template_sample ${PROJECT_SOURCE_DIR}/samples/scenarize add_executable(light_data_template_sample ${src_light_data_template_sample}) target_link_libraries(light_data_template_sample ${lib}) +# MQTT +file(GLOB src_mqtt_sample ${PROJECT_SOURCE_DIR}/samples/mqtt/mqtt_sample.c) +add_executable(mqtt_sample ${src_mqtt_sample}) +target_link_libraries(mqtt_sample ${lib}) + +# Raw data +file(GLOB src_raw_data ${PROJECT_SOURCE_DIR}/samples/raw_data/raw_data_sample.c) +add_executable(raw_data_mqtt_sample ${src_raw_data}) +target_link_libraries(raw_data_mqtt_sample ${lib}) + +# GATEWAY +if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON") + file(GLOB src_gateway_sample ${PROJECT_SOURCE_DIR}/samples/gateway/*.c) + add_executable(gateway_sample ${src_gateway_sample}) + target_link_libraries(gateway_sample ${lib}) +endif() # OTA MQTT if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") diff --git a/samples/Makefile b/samples/Makefile index 1ad9828..e0c6f4f 100644 --- a/samples/Makefile +++ b/samples/Makefile @@ -39,9 +39,9 @@ ifeq ($(FEATURE_AUTH_MODE),CERT) CFLAGS += -DAUTH_MODE_CERT endif -.PHONY: ota_mqtt_sample data_template_sample +.PHONY: ota_mqtt_sample data_template_sample gateway_sample mqtt_sample -all: ota_mqtt_sample data_template_sample +all: ota_mqtt_sample data_template_sample gateway_sample mqtt_sample ifneq (,$(filter -DOTA_COMM_ENABLED,$(CFLAGS))) @@ -66,6 +66,28 @@ data_template_sample: mv light_$@ $(FINAL_DIR)/bin endif +ifneq (,$(filter -DMQTT_COMM_ENABLED,$(CFLAGS))) +mqtt_sample: + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/mqtt/$@.c $(LDFLAGS) -o $@ + + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/raw_data/*.c $(LDFLAGS) -o raw_data_$@ + + $(TOP_Q) \ + mv raw_data_$@ $(FINAL_DIR)/bin && \ + mv $@ $(FINAL_DIR)/bin +endif + +ifneq (,$(filter -DGATEWAY_ENABLED,$(CFLAGS))) +gateway_sample: + $(TOP_Q) \ + $(PLATFORM_CC) $(CFLAGS) $(SAMPLE_DIR)/gateway/*.c $(LDFLAGS) -o $@ + + $(TOP_Q) \ + mv $@ $(FINAL_DIR)/bin +endif + clean: rm -rf $(FINAL_DIR)/bin/* diff --git a/samples/data_template/action_config.c b/samples/data_template/action_config.c index c62fcd3..71b60ef 100644 --- a/samples/data_template/action_config.c +++ b/samples/data_template/action_config.c @@ -7,26 +7,26 @@ static TYPE_DEF_TEMPLATE_BOOL sg_light_blink_in_color = 0; static TYPE_DEF_TEMPLATE_INT sg_light_blink_in_total_time = 0; static DeviceProperty g_actionInput_light_blink[] = { - {.key = "time", .data = &sg_light_blink_in_time, .type = TYPE_TEMPLATE_INT}, - {.key = "color", .data = &sg_light_blink_in_color, .type = TYPE_TEMPLATE_BOOL}, - {.key = "total_time", .data = &sg_light_blink_in_total_time, .type = TYPE_TEMPLATE_INT}, + {.key = "time", .data = &sg_light_blink_in_time, .type = TYPE_TEMPLATE_INT}, + {.key = "color", .data = &sg_light_blink_in_color, .type = TYPE_TEMPLATE_BOOL}, + {.key = "total_time", .data = &sg_light_blink_in_total_time, .type = TYPE_TEMPLATE_INT}, }; static TYPE_DEF_TEMPLATE_BOOL sg_light_blink_out_err_code = 0; static DeviceProperty g_actionOutput_light_blink[] = { - {.key = "err_code", .data = &sg_light_blink_out_err_code, .type = TYPE_TEMPLATE_BOOL}, + {.key = "err_code", .data = &sg_light_blink_out_err_code, .type = TYPE_TEMPLATE_BOOL}, }; -static DeviceAction g_actions[]={ +static DeviceAction g_actions[] = { { - .pActionId = "light_blink", - .timestamp = 0, - .input_num = sizeof(g_actionInput_light_blink)/sizeof(g_actionInput_light_blink[0]), - .output_num = sizeof(g_actionOutput_light_blink)/sizeof(g_actionOutput_light_blink[0]), - .pInput = g_actionInput_light_blink, - .pOutput = g_actionOutput_light_blink, + .pActionId = "light_blink", + .timestamp = 0, + .input_num = sizeof(g_actionInput_light_blink) / sizeof(g_actionInput_light_blink[0]), + .output_num = sizeof(g_actionOutput_light_blink) / sizeof(g_actionOutput_light_blink[0]), + .pInput = g_actionInput_light_blink, + .pOutput = g_actionOutput_light_blink, }, }; diff --git a/samples/data_template/data_config.c b/samples/data_template/data_config.c index e962652..83e8be5 100644 --- a/samples/data_template/data_config.c +++ b/samples/data_template/data_config.c @@ -1,4 +1,4 @@ -/*-----------------data config start -------------------*/ +/*-----------------data config start -------------------*/ #define TOTAL_PROPERTY_COUNT 4 @@ -8,7 +8,7 @@ typedef struct _ProductDataDefine { TYPE_DEF_TEMPLATE_BOOL m_power_switch; TYPE_DEF_TEMPLATE_ENUM m_color; TYPE_DEF_TEMPLATE_INT m_brightness; - TYPE_DEF_TEMPLATE_STRING m_name[64+1]; + TYPE_DEF_TEMPLATE_STRING m_name[64 + 1]; } ProductDataDefine; static ProductDataDefine sg_ProductData; @@ -32,7 +32,7 @@ static void _init_data_template(void) sg_ProductData.m_name[0] = '\0'; sg_DataTemplate[3].data_property.data = sg_ProductData.m_name; - sg_DataTemplate[3].data_property.data_buff_len = sizeof(sg_ProductData.m_name)/sizeof(sg_ProductData.m_name[3]); + sg_DataTemplate[3].data_property.data_buff_len = sizeof(sg_ProductData.m_name) / sizeof(sg_ProductData.m_name[3]); sg_DataTemplate[3].data_property.key = "name"; sg_DataTemplate[3].data_property.type = TYPE_TEMPLATE_STRING; diff --git a/samples/data_template/data_template_sample.c b/samples/data_template/data_template_sample.c index ed4493b..ff682d6 100644 --- a/samples/data_template/data_template_sample.c +++ b/samples/data_template/data_template_sample.c @@ -12,15 +12,15 @@ * limitations under the License. * */ - + #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" #include "lite-utils.h" #include "data_config.c" #ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file #endif static DeviceInfo sg_devInfo; @@ -34,53 +34,53 @@ size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_dat #include "events_config.c" static void update_events_timestamp(sEvent *pEvents, int count) { - int i; - - for(i = 0; i < count; i++){ - if (NULL == (&pEvents[i])) { - Log_e("null event pointer"); - return; + int i; + + for (i = 0; i < count; i++) { + if (NULL == (&pEvents[i])) { + Log_e("null event pointer"); + return; } -#ifdef EVENT_TIMESTAMP_USED - pEvents[i].timestamp = time(NULL); //should be UTC and accurate +#ifdef EVENT_TIMESTAMP_USED + pEvents[i].timestamp = time(NULL); //should be UTC and accurate #else - pEvents[i].timestamp = 0; + pEvents[i].timestamp = 0; #endif - } + } } static void event_post_cb(void *pClient, MQTTMessage *msg) { - Log_d("Reply:%.*s", msg->payload_len, msg->payload); - IOT_Event_clearFlag(pClient, FLAG_EVENT0|FLAG_EVENT1|FLAG_EVENT2); + Log_d("Reply:%.*s", msg->payload_len, msg->payload); +// IOT_Event_clearFlag(pClient, FLAG_EVENT0 | FLAG_EVENT1 | FLAG_EVENT2); } //event check and post static void eventPostCheck(void *client) { - int i; - int rc; - uint32_t eflag; - uint8_t event_count; - sEvent *pEventList[EVENT_COUNTS]; - - eflag = IOT_Event_getFlag(client); - if((EVENT_COUNTS > 0 )&& (eflag > 0)){ - event_count = 0; - for(i = 0; i < EVENT_COUNTS; i++){ - if((eflag&(1< 0 ) && (eflag > 0)) { + event_count = 0; + for (i = 0; i < EVENT_COUNTS; i++) { + if ((eflag & (1 << i))&ALL_EVENTS_MASK) { + pEventList[event_count++] = &(g_events[i]); + update_events_timestamp(&g_events[i], 1); + IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); + } + } + + rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \ + event_count, pEventList, event_post_cb); + if (rc < 0) { + Log_e("events post failed: %d", rc); + } + } } @@ -90,164 +90,163 @@ static void eventPostCheck(void *client) #include "action_config.c" // action : regist action and set the action handle callback, add your aciton logic here -static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) -{ - int i; - sReplyPara replyPara; - - //do something base on input, just print as an sample - DeviceProperty *pActionInput = pAction->pInput; - for (i = 0; i < pAction->input_num; i++) { - if (JSTRING == pActionInput[i].type) { - Log_d("Input:[%s], data:[%s]", pActionInput[i].key, pActionInput[i].data); - HAL_Free(pActionInput[i].data); - } else { - if(JINT32 == pActionInput[i].type) { - Log_d("Input:[%s], data:[%d]", pActionInput[i].key, *((int*)pActionInput[i].data)); - } else if( JFLOAT == pActionInput[i].type) { - Log_d("Input:[%s], data:[%f]", pActionInput[i].key, *((float*)pActionInput[i].data)); - } else if( JUINT32 == pActionInput[i].type) { - Log_d("Input:[%s], data:[%u]", pActionInput[i].key, *((uint32_t*)pActionInput[i].data)); - } - } - } - - // construct output - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault - - - DeviceProperty *pActionOutnput = pAction->pOutput; - (void)pActionOutnput; //elimate warning - //TO DO: add your aciont logic here and set output properties which will be reported by action_reply - - - IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); +static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) +{ + int i; + sReplyPara replyPara; + + //do something base on input, just print as an sample + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (JSTRING == pActionInput[i].type) { + Log_d("Input:[%s], data:[%s]", pActionInput[i].key, pActionInput[i].data); + HAL_Free(pActionInput[i].data); + } else { + if (JINT32 == pActionInput[i].type) { + Log_d("Input:[%s], data:[%d]", pActionInput[i].key, *((int*)pActionInput[i].data)); + } else if ( JFLOAT == pActionInput[i].type) { + Log_d("Input:[%s], data:[%f]", pActionInput[i].key, *((float*)pActionInput[i].data)); + } else if ( JUINT32 == pActionInput[i].type) { + Log_d("Input:[%s], data:[%u]", pActionInput[i].key, *((uint32_t*)pActionInput[i].data)); + } + } + } + + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + + + DeviceProperty *pActionOutnput = pAction->pOutput; + (void)pActionOutnput; //elimate warning + //TO DO: add your aciont logic here and set output properties which will be reported by action_reply + + + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); } static int _register_data_template_action(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { - rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template action failed, err: %d", rc); - return rc; - } else { - Log_i("data template action=%s registered.", g_actions[i].pActionId); - } + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_SUBCRIBE_SUCCESS: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", packet_id); - break; + Log_i("subscribe success, packet-id=%u", packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_TIMEOUT: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", packet_id); - break; + Log_i("subscribe wait ack timeout, packet-id=%u", packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_SUBCRIBE_NACK: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + Log_i("subscribe nack, packet-id=%u", packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } /*add user init code, like sensor init*/ static void _usr_init(void) { - Log_d("add your init code here"); + Log_d("add your init code here"); } // Setup MQTT construct parameters static int _setup_connect_init_params(TemplateInitParams* initParams) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - /* TLS with certs*/ - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + /* TLS with certs*/ + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } -static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) { int i = 0; for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { sg_DataTemplate[i].state = eCHANGED; Log_i("Property=%s changed", pProperty->key); @@ -259,38 +258,39 @@ static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, ui Log_e("Property=%s changed no match", pProperty->key); } -static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) { - Log_i("recv report reply response, reply ack: %d", replyAck); +static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) +{ + Log_i("recv report reply response, reply ack: %d", replyAck); } // register data template properties static int _register_data_template_property(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template property failed, err: %d", rc); - return rc; - } else { - Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); - } + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } // when control msg received, data_template's properties has been parsed in pData // you should add your logic how to use pData void deal_down_stream_user_logic(void *client, ProductDataDefine * pData) { - Log_d("someting about your own product logic wait to be done"); + Log_d("someting about your own product logic wait to be done"); - -#ifdef EVENT_POST_ENABLED - //IOT_Event_setFlag(client, FLAG_EVENT0); //set the events flag when the evnts your defined occured, see events_config.c + +#ifdef EVENT_POST_ENABLED + //IOT_Event_setFlag(client, FLAG_EVENT0); //set the events flag when the evnts your defined occured, see events_config.c #endif } @@ -298,60 +298,92 @@ void deal_down_stream_user_logic(void *client, ProductDataDefine * pData) /*get local property data, like sensor data*/ static void _refresh_local_property(void) { - //add your local property refresh logic + //add your local property refresh logic } +/*find propery need report*/ +static int find_wait_report_property(DeviceProperty *pReportDataList[]) +{ + int i, j; + + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (eCHANGED == sg_DataTemplate[i].state) { + pReportDataList[j++] = &(sg_DataTemplate[i].data_property); + sg_DataTemplate[i].state = eNOCHANGE; + } + } + + return j; +} -// demo for up-stream +// demo for up-stream // add changed properties to pReportDataList, then the changed properties would be reported // you should add your own logic for how to get the changed properties int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) { - int i, j; + //refresh local property + _refresh_local_property(); - //refresh local property - _refresh_local_property(); - - for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { - if(eCHANGED == sg_DataTemplate[i].state) { - pReportDataList[j++] = &(sg_DataTemplate[i].data_property); - sg_DataTemplate[i].state = eNOCHANGE; - } - } - *pCount = j; + /*find propery need report*/ + *pCount = find_wait_report_property(pReportDataList); - return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; + return (*pCount > 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } /*You should get the real info for your device, here just for example*/ static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) { - /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ DeviceProperty plat_info[] = { - {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, - {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, - {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, - {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, - {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, - {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, + {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, + {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, + {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, + {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, + {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, + {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, {NULL, NULL, 0} //end - }; - - /*self define info*/ - DeviceProperty self_info[] = { + }; + + /*self define info*/ + DeviceProperty self_info[] = { {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, {NULL, NULL, 0} //end - }; + }; - return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); +} + +#ifdef MULTITHREAD_ENABLED +static void *template_yield_thread(void *ptr) +{ +#define THREAD_SLEEP_INTERVAL_MS 1 + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; + + Log_d("template yield thread start ..."); + while (true) { + rc = IOT_Template_Yield(pClient, 200); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("Something goes error: %d", rc); + } + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + } + return NULL; +#undef THREAD_SLEEP_INTERVAL_MS } +#endif -int main(int argc, char **argv) { + +int main(int argc, char **argv) +{ int rc; - sReplyPara replyPara; - DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; - int ReportCont; - + sReplyPara replyPara; + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + int ReportCont; + //init log level IOT_Log_Set_Level(eLOG_DEBUG); @@ -359,128 +391,144 @@ int main(int argc, char **argv) { TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS; rc = _setup_connect_init_params(&init_params); if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + Log_e("init params err,rc=%d", rc); + return rc; + } - void *client = IOT_Template_Construct(&init_params); + void *client = IOT_Template_Construct(&init_params, NULL); if (client != NULL) { Log_i("Cloud Device Construct Success"); } else { Log_e("Cloud Device Construct Failed"); return QCLOUD_ERR_FAILURE; } - //user init - _usr_init(); + +#ifdef MULTITHREAD_ENABLED + pthread_t *yield_thread_t = NULL; + yield_thread_t = HAL_ThreadCreate(0, 0, "template_yield_thread", template_yield_thread, client); + if (yield_thread_t == NULL) { + Log_e("create yield thread fail"); + goto exit; + } +#endif + + //user init + _usr_init(); //init data template _init_data_template(); - //register data template propertys here + //register data template propertys here rc = _register_data_template_property(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template propertys Success"); } else { Log_e("Register data template propertys Failed: %d", rc); - return rc; + goto exit; } - //register data template actions here + //register data template actions here #ifdef ACTION_ENABLED rc = _register_data_template_action(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template actions Success"); } else { Log_e("Register data template actions Failed: %d", rc); - return rc; + goto exit; } #endif - //report device info, then you can manager your product by these info, like position - rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); - if(QCLOUD_RET_SUCCESS == rc){ - rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Report system info fail, err: %d", rc); - goto exit; - } - }else{ - Log_e("Get system info fail, err: %d", rc); - } + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if (QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + } + } else { + Log_e("Get system info fail, err: %d", rc); + } - //get the property changed during offline - rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Get data status fail, err: %d", rc); - //goto exit; - }else{ - Log_d("Get data status success"); - } + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + } else { + Log_d("Get data status success"); + } - while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT - || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { + while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT + || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { +#ifndef MULTITHREAD_ENABLED rc = IOT_Template_Yield(client, 200); - if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { HAL_SleepMs(1000); continue; + } else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } - - /* handle control msg from server */ - if (sg_control_msg_arrived) { - - deal_down_stream_user_logic(client, &sg_ProductData); - - /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - - rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); +#endif + + /* handle control msg from server */ + if (sg_control_msg_arrived) { + + deal_down_stream_user_logic(client, &sg_ProductData); + + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured + + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); if (rc == QCLOUD_RET_SUCCESS) { - Log_d("Contol msg reply success"); - sg_control_msg_arrived = false; + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; } else { Log_e("Contol msg reply failed, err: %d", rc); } - } else{ - Log_d("No control msg received..."); - } - - /*report msg to server*/ - /*report the lastest properties's status*/ - if(QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)){ - rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); - if (rc == QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, - OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc == QCLOUD_RET_SUCCESS) { - Log_i("data template reporte success"); - } else { - Log_e("data template reporte failed, err: %d", rc); - } - } else { - Log_e("construct reporte data failed, err: %d", rc); - } - - }else{ - //Log_d("no data need to be reported or someting goes wrong"); - } - - -#ifdef EVENT_POST_ENABLED - eventPostCheck(client); + } else { + Log_d("No control msg received..."); + } + + /*report msg to server*/ + /*report the lastest properties's status*/ + if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)) { + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + Log_i("data template reporte success"); + } else { + Log_e("data template reporte failed, err: %d", rc); + } + } else { + Log_e("construct reporte data failed, err: %d", rc); + } + + } else { + //Log_d("no data need to be reported or someting goes wrong"); + } + + +#ifdef EVENT_POST_ENABLED + eventPostCheck(client); #endif - - HAL_SleepMs(3000); + + HAL_SleepMs(3000); } + exit: + rc = IOT_Template_Destroy(client); + +#ifdef MULTITHREAD_ENABLED + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } +#endif return rc; } diff --git a/samples/data_template/events_config.c b/samples/data_template/events_config.c index ad8af0e..484ea44 100644 --- a/samples/data_template/events_config.c +++ b/samples/data_template/events_config.c @@ -3,50 +3,50 @@ #define EVENT_COUNTS (3) static TYPE_DEF_TEMPLATE_BOOL sg_status_report_status = 0; -static TYPE_DEF_TEMPLATE_STRING sg_status_report_message[64+1]={0}; +static TYPE_DEF_TEMPLATE_STRING sg_status_report_message[64 + 1] = {0}; static DeviceProperty g_propertyEvent_status_report[] = { - {.key = "status", .data = &sg_status_report_status, .type = TYPE_TEMPLATE_BOOL}, - {.key = "message", .data = sg_status_report_message, .type = TYPE_TEMPLATE_STRING}, + {.key = "status", .data = &sg_status_report_status, .type = TYPE_TEMPLATE_BOOL}, + {.key = "message", .data = sg_status_report_message, .type = TYPE_TEMPLATE_STRING}, }; static TYPE_DEF_TEMPLATE_FLOAT sg_low_voltage_voltage = 1; static DeviceProperty g_propertyEvent_low_voltage[] = { - {.key = "voltage", .data = &sg_low_voltage_voltage, .type = TYPE_TEMPLATE_FLOAT}, + {.key = "voltage", .data = &sg_low_voltage_voltage, .type = TYPE_TEMPLATE_FLOAT}, }; -static TYPE_DEF_TEMPLATE_STRING sg_hardware_fault_name[64+1]={0}; +static TYPE_DEF_TEMPLATE_STRING sg_hardware_fault_name[64 + 1] = {0}; static TYPE_DEF_TEMPLATE_INT sg_hardware_fault_error_code = 1; static DeviceProperty g_propertyEvent_hardware_fault[] = { - {.key = "name", .data = sg_hardware_fault_name, .type = TYPE_TEMPLATE_STRING}, - {.key = "error_code", .data = &sg_hardware_fault_error_code, .type = TYPE_TEMPLATE_INT}, + {.key = "name", .data = sg_hardware_fault_name, .type = TYPE_TEMPLATE_STRING}, + {.key = "error_code", .data = &sg_hardware_fault_error_code, .type = TYPE_TEMPLATE_INT}, }; -static sEvent g_events[]={ +static sEvent g_events[] = { { - .event_name = "status_report", - .type = "info", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_status_report)/sizeof(g_propertyEvent_status_report[0]), - .pEventData = g_propertyEvent_status_report, + .event_name = "status_report", + .type = "info", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_status_report) / sizeof(g_propertyEvent_status_report[0]), + .pEventData = g_propertyEvent_status_report, }, { - .event_name = "low_voltage", - .type = "alert", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_low_voltage)/sizeof(g_propertyEvent_low_voltage[0]), - .pEventData = g_propertyEvent_low_voltage, + .event_name = "low_voltage", + .type = "alert", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_low_voltage) / sizeof(g_propertyEvent_low_voltage[0]), + .pEventData = g_propertyEvent_low_voltage, }, { - .event_name = "hardware_fault", - .type = "fault", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_hardware_fault)/sizeof(g_propertyEvent_hardware_fault[0]), - .pEventData = g_propertyEvent_hardware_fault, + .event_name = "hardware_fault", + .type = "fault", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_hardware_fault) / sizeof(g_propertyEvent_hardware_fault[0]), + .pEventData = g_propertyEvent_hardware_fault, }, }; diff --git a/samples/gateway/gateway_sample.c b/samples/gateway/gateway_sample.c new file mode 100644 index 0000000..3af675b --- /dev/null +++ b/samples/gateway/gateway_sample.c @@ -0,0 +1,412 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "utils_getopt.h" +#include "qcloud_iot_export.h" + +#define MAX_SIZE_OF_TOPIC (128) +#define MAX_SIZE_OF_DATA (128) + +#define SUB_DEV_USE_DATA_TEMPLATE_LIGHT +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT +#define LIGHT_SUB_DEV_PRODUCT_ID "WPDA0S6S08" +#define LIGHT_SUB_DEV_NAME "dev001" +extern void* sub_dev1_thread(void *ptr, char *product_id, char *device_name); +#endif + + +static int sg_sub_packet_id = -1; +static int sg_loop_count = 1; +static bool sg_thread_running = true; + +static GatewayDeviceInfo sg_GWdevInfo; + +#ifdef AUTH_MODE_CERT +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file +#endif + + +void _event_handler(void *client, void *context, MQTTEventMsg *msg) +{ + MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, + mqtt_messge->ptopic, + mqtt_messge->payload_len, + mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +static void _message_handler(void *client, MQTTMessage *message, void *user_data) +{ + if (message == NULL) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", + (int) message->topic_len, message->ptopic, (int) message->payload_len, (char *) message->payload); +} + +static int _setup_connect_init_params(GatewayInitParam* init_params) +{ + int rc; + + rc = HAL_GetGwDevInfo((void *)&sg_GWdevInfo); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("Get gateway dev info err,rc:%d", rc); + return rc; + } + + init_params->init_param.product_id = sg_GWdevInfo.gw_info.product_id; + init_params->init_param.device_name = sg_GWdevInfo.gw_info.device_name; + +#ifdef AUTH_MODE_CERT + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_GWdevInfo.gw_info.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_GWdevInfo.gw_info.dev_key_file_name); + + init_params->init_param.cert_file = sg_cert_file; + init_params->init_param.key_file = sg_key_file; +#else + init_params->init_param.device_secret = sg_GWdevInfo.gw_info.device_secret; +#endif + + init_params->init_param.command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + init_params->init_param.auto_connect_enable = 1; + init_params->init_param.event_handle.h_fp = _event_handler; + init_params->init_param.keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + return QCLOUD_RET_SUCCESS; +} + +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l:")) != EOF) + switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_count = atoi(utils_optarg); + if (sg_loop_count > 10000) + sg_loop_count = 10000; + else if (sg_loop_count < 0) + sg_loop_count = 1; + break; + + default: + HAL_Printf("usage: %s [options]\n" + " [-c ] \n" + " [-l ] \n" + , argv[0]); + return -1; + } + return 0; +} + +/** + * yield thread runner + */ +static void *gateway_yield_thread(void *ptr) +{ + + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; + + Log_d("gateway yield thread start ..."); + while (sg_thread_running) { + rc = IOT_Gateway_Yield(pClient, 200); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("Something goes error: %d", rc); + //break; + } + } + return NULL; +} + +/** + * sub dev thread runner + */ + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT //show subdev with data template. +static void *sub_dev_thread(void *ptr) +{ + return sub_dev1_thread(ptr, LIGHT_SUB_DEV_PRODUCT_ID, LIGHT_SUB_DEV_NAME); +} +#endif + + +/*Gateway should enable multithread*/ +int main(int argc, char **argv) +{ + int rc = QCLOUD_ERR_FAILURE; + int errCount = 0; + int i; + int size; + void* client = NULL; + GatewayDeviceInfo *gw = &sg_GWdevInfo; + GatewayParam param = DEFAULT_GATEWAY_PARAMS; + DeviceInfo *subDevInfo; + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + pthread_t *light_thread_t = NULL; +#endif + + IOT_Log_Set_Level(eLOG_DEBUG); + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + GatewayInitParam init_params = DEFAULT_GATEWAY_INIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } + + client = IOT_Gateway_Construct(&init_params); + if (client == NULL) { + Log_e("client constructed failed."); + return QCLOUD_ERR_FAILURE; + } + + //mqtt_yeild can be called by only one thread when multi-thread run, so do not use sync operation below + pthread_t *yield_thread_t = NULL; + yield_thread_t = HAL_ThreadCreate(0, 0, "yield_thread", gateway_yield_thread, client); + if (yield_thread_t == NULL) { + Log_e("create yield thread fail"); + goto exit; + } + + HAL_SleepMs(1000); /*wait yield_thread start running*/ + + //set GateWay device info + param.product_id = gw->gw_info.product_id; + param.device_name = gw->gw_info.device_name; + + // make sub-device online + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + param.subdev_product_id = subDevInfo->product_id; + param.subdev_device_name = subDevInfo->device_name; + + rc = IOT_Gateway_Subdev_Online(client, ¶m); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("subDev Pid:%s devName:%s online fail.", subDevInfo->product_id, subDevInfo->device_name); + errCount++; + } else { + Log_d("subDev Pid:%s devName:%s online success.", subDevInfo->product_id, subDevInfo->device_name); + } + } + + if (errCount > 0) { + Log_e("%d of %d sub devices online fail", errCount, gw->sub_dev_num); + } + + //subscribe sub-device data_template down stream topic for example + char topic_filter[MAX_SIZE_OF_TOPIC + 1]; + SubscribeParams sub_param = DEFAULT_SUB_PARAMS; + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT //subdev with data template example. + if ((0 == strcmp(subDevInfo->product_id, LIGHT_SUB_DEV_PRODUCT_ID)) + && (0 == strcmp(subDevInfo->device_name, LIGHT_SUB_DEV_NAME))) { + light_thread_t = HAL_ThreadCreate(0, 0, "sub_dev1_thread", sub_dev_thread, client); + if (light_thread_t == NULL) { + Log_e("create sub_dev light thread fail"); + goto exit; + } else { + Log_e("create sub_dev light thread success"); + } + continue; + } +#endif + + memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/down/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); + + if (size < 0 || size > MAX_SIZE_OF_TOPIC) { + Log_e("buf size < topic length!"); + rc = QCLOUD_ERR_FAILURE; + goto exit; + } + + sub_param.on_message_handler = _message_handler; + rc = IOT_Gateway_Subscribe(client, topic_filter, &sub_param); + if (rc < 0) { + Log_e("IOT_Gateway_Subscribe fail."); + return rc; + } + } + + HAL_SleepMs(2000); /*wait subcribe ack*/ + +// publish to sub-device data_template up stream topic for example + PublishParams pub_param = DEFAULT_PUB_PARAMS; + pub_param.qos = QOS0; + +//pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"data\":\"err reply wil received\"}}"; + pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{}}"; + pub_param.payload_len = strlen(pub_param.payload); + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + if ((0 == strcmp(subDevInfo->product_id, LIGHT_SUB_DEV_PRODUCT_ID)) + && (0 == strcmp(subDevInfo->device_name, LIGHT_SUB_DEV_NAME))) { + continue; + } +#endif + memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/up/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); + if (size < 0 || size > MAX_SIZE_OF_TOPIC) { + Log_e("buf size < topic length!"); + return QCLOUD_ERR_FAILURE; + } + + rc = IOT_Gateway_Publish(client, topic_filter, &pub_param); + if (rc < 0) { + Log_e("IOT_Gateway_Publish fail."); + } + } + +exit: + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + if(NULL != light_thread_t){ + pthread_join(*light_thread_t, NULL); + } +#endif + + //set GateWay device info + param.product_id = gw->gw_info.product_id; + param.device_name = gw->gw_info.device_name; + // make sub-device offline + errCount = 0; + for (i = 0; i < gw->sub_dev_num; i++) { + subDevInfo = &gw->sub_dev_info[i]; + param.subdev_product_id = subDevInfo->product_id; + param.subdev_device_name = subDevInfo->device_name; + + rc = IOT_Gateway_Subdev_Offline(client, ¶m); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("subDev Pid:%s devName:%s offline fail.", subDevInfo->product_id, subDevInfo->device_name); + errCount++; + } else { + Log_d("subDev Pid:%s devName:%s offline success.", subDevInfo->product_id, subDevInfo->device_name); + } + } + + if (errCount > 0) { + Log_e("%d of %d sub devices offline fail", errCount, gw->sub_dev_num); + } + + //stop running thread + sg_thread_running = false; + HAL_SleepMs(1000); /*make sure no thread use client before destroy*/ + + rc = IOT_Gateway_Destroy(client); + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } + +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT //show subdev with data template. + if (NULL != light_thread_t) { + HAL_ThreadDestroy((void *)light_thread_t); + } +#endif + + return rc; +} diff --git a/samples/gateway/sub_dev001.c b/samples/gateway/sub_dev001.c new file mode 100644 index 0000000..e9bbba7 --- /dev/null +++ b/samples/gateway/sub_dev001.c @@ -0,0 +1,685 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" +#include "lite-utils.h" +#include "utils_timer.h" + +/* anis color control codes */ +#define ANSI_COLOR_RED "\x1b[31m" +#define ANSI_COLOR_GREEN "\x1b[32m" +#define ANSI_COLOR_YELLOW "\x1b[33m" +#define ANSI_COLOR_BLUE "\x1b[34m" +#define ANSI_COLOR_RESET "\x1b[0m" + + +static DeviceInfo sg_devInfo; +static Timer sg_reportTimer; + +static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; +static bool sg_control_msg_arrived = false; +static char sg_data_report_buffer[2048]; +size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_data_report_buffer[0]); + + +/*data_config.c can be generated by tools/codegen.py -c xx/product.json*/ +/*-----------------data config start -------------------*/ + +#define TOTAL_PROPERTY_COUNT 4 +#define MAX_STR_NAME_LEN (64) + +static sDataPoint sg_DataTemplate[TOTAL_PROPERTY_COUNT]; + +typedef enum { + eCOLOR_RED = 0, + eCOLOR_GREEN = 1, + eCOLOR_BLUE = 2, +} eColor; + +typedef struct _ProductDataDefine { + TYPE_DEF_TEMPLATE_BOOL m_light_switch; + TYPE_DEF_TEMPLATE_ENUM m_color; + TYPE_DEF_TEMPLATE_INT m_brightness; + TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN + 1]; +} ProductDataDefine; + +static ProductDataDefine sg_ProductData; + +static void _init_data_template(void) +{ + memset((void *) & sg_ProductData, 0, sizeof(ProductDataDefine)); + + sg_ProductData.m_light_switch = 0; + sg_DataTemplate[0].data_property.key = "power_switch"; + sg_DataTemplate[0].data_property.data = &sg_ProductData.m_light_switch; + sg_DataTemplate[0].data_property.type = TYPE_TEMPLATE_BOOL; + + sg_ProductData.m_color = eCOLOR_RED; + sg_DataTemplate[1].data_property.key = "color"; + sg_DataTemplate[1].data_property.data = &sg_ProductData.m_color; + sg_DataTemplate[1].data_property.type = TYPE_TEMPLATE_ENUM; + + sg_ProductData.m_brightness = 0; + sg_DataTemplate[2].data_property.key = "brightness"; + sg_DataTemplate[2].data_property.data = &sg_ProductData.m_brightness; + sg_DataTemplate[2].data_property.type = TYPE_TEMPLATE_INT; + + strncpy(sg_ProductData.m_name, sg_devInfo.device_name, MAX_STR_NAME_LEN); + sg_ProductData.m_name[strlen(sg_devInfo.device_name)] = '\0'; + sg_DataTemplate[3].data_property.key = "name"; + sg_DataTemplate[3].data_property.data = sg_ProductData.m_name; + sg_DataTemplate[3].data_property.data_buff_len = MAX_STR_NAME_LEN; + sg_DataTemplate[3].data_property.type = TYPE_TEMPLATE_STRING; + +}; +/*-----------------data config end -------------------*/ + + +/*event_config.c can be generated by tools/codegen.py -c xx/product.json*/ +/*-----------------event config start -------------------*/ +#ifdef EVENT_POST_ENABLED +#define EVENT_COUNTS (3) +#define MAX_EVENT_STR_MESSAGE_LEN (64) +#define MAX_EVENT_STR_NAME_LEN (64) + + +static TYPE_DEF_TEMPLATE_BOOL sg_status; +static TYPE_DEF_TEMPLATE_STRING sg_message[MAX_EVENT_STR_MESSAGE_LEN + 1]; +static DeviceProperty g_propertyEvent_status_report[] = { + + {.key = "status", .data = &sg_status, .type = TYPE_TEMPLATE_BOOL}, + {.key = "message", .data = sg_message, .type = TYPE_TEMPLATE_STRING}, +}; + +static TYPE_DEF_TEMPLATE_FLOAT sg_voltage; +static DeviceProperty g_propertyEvent_low_voltage[] = { + + {.key = "voltage", .data = &sg_voltage, .type = TYPE_TEMPLATE_FLOAT}, +}; + +static TYPE_DEF_TEMPLATE_STRING sg_name[MAX_EVENT_STR_NAME_LEN + 1]; +static TYPE_DEF_TEMPLATE_INT sg_error_code; +static DeviceProperty g_propertyEvent_hardware_fault[] = { + + {.key = "name", .data = sg_name, .type = TYPE_TEMPLATE_STRING}, + {.key = "error_code", .data = &sg_error_code, .type = TYPE_TEMPLATE_INT}, +}; + + +static sEvent g_events[] = { + + { + .event_name = "status_report", + .type = "info", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_status_report) / sizeof(g_propertyEvent_status_report[0]), + .pEventData = g_propertyEvent_status_report, + }, + { + .event_name = "low_voltage", + .type = "alert", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_low_voltage) / sizeof(g_propertyEvent_low_voltage[0]), + .pEventData = g_propertyEvent_low_voltage, + }, + { + .event_name = "hardware_fault", + .type = "fault", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_hardware_fault) / sizeof(g_propertyEvent_hardware_fault[0]), + .pEventData = g_propertyEvent_hardware_fault, + }, +}; + +/*-----------------event config end -------------------*/ + + +static void update_events_timestamp(sEvent *pEvents, int count) +{ + int i; + + for (i = 0; i < count; i++) { + if (NULL == (&pEvents[i])) { + Log_e("null event pointer"); + return; + } +#ifdef EVENT_TIMESTAMP_USED + pEvents[i].timestamp = HAL_Timer_current_sec(); //should be UTC and accurate +#else + pEvents[i].timestamp = 0; +#endif + } +} + +static void event_post_cb(void *pClient, MQTTMessage *msg) +{ + Log_d("recv event reply, clear event"); + IOT_Event_clearFlag(pClient, FLAG_EVENT0); +} + +//event check and post +static void eventPostCheck(void *client) +{ + int i; + int rc; + uint32_t eflag; + uint8_t EventCont; + sEvent *pEventList[EVENT_COUNTS]; + + + eflag = IOT_Event_getFlag(client); + if ((EVENT_COUNTS > 0 ) && (eflag > 0)) { + EventCont = 0; + for (i = 0; i < EVENT_COUNTS; i++) { + if ((eflag & (1 << i))&ALL_EVENTS_MASK) { + pEventList[EventCont++] = &(g_events[i]); + update_events_timestamp(&g_events[i], 1); + } + } + + rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \ + EventCont, pEventList, event_post_cb); + if (rc < 0) { + Log_e("event post failed: %d", rc); + } + } +} + +#endif + +/*action_config.c can be generated by tools/codegen.py -c xx/product.json*/ +/*-----------------action config start -------------------*/ +#ifdef ACTION_ENABLED + +#define TOTAL_ACTION_COUNTS (1) + +static TYPE_DEF_TEMPLATE_INT sg_blink_in_period = 5; +static DeviceProperty g_actionInput_blink[] = { + {.key = "period", .data = &sg_blink_in_period, .type = TYPE_TEMPLATE_INT} +}; +static TYPE_DEF_TEMPLATE_BOOL sg_blink_out_result = 0; +static DeviceProperty g_actionOutput_blink[] = { + + {.key = "result", .data = &sg_blink_out_result, .type = TYPE_TEMPLATE_BOOL}, +}; + +static DeviceAction g_actions[] = { + + { + .pActionId = "blink", + .timestamp = 0, + .input_num = sizeof(g_actionInput_blink) / sizeof(g_actionInput_blink[0]), + .output_num = sizeof(g_actionOutput_blink) / sizeof(g_actionOutput_blink[0]), + .pInput = g_actionInput_blink, + .pOutput = g_actionOutput_blink, + }, +}; +/*-----------------action config end -------------------*/ +static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) +{ + int i; + sReplyPara replyPara; + + //control light blink + int period = 0; + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (!strcmp(pActionInput[i].key, "period")) { + period = *((int*)pActionInput[i].data); + } else { + Log_e("no such input[%s]!", pActionInput[i].key); + } + } + + //do blink + HAL_Printf( "%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_RED); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_GREEN); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]\n" ANSI_COLOR_RESET, ANSI_COLOR_RED); + + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + + DeviceProperty *pActionOutnput = pAction->pOutput; + *(int*)(pActionOutnput[0].data) = 0; //set result + + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); +} + +static int _register_data_template_action(void *pTemplate_client) +{ + int i, rc; + + for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } + } + + return QCLOUD_RET_SUCCESS; +} +#endif + +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_SUBCRIBE_SUCCESS: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + sg_subscribe_event_result = msg->event_type; + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + +/*add user init code, like sensor init*/ +static void _usr_init(void) +{ + Log_d("add your init code here"); +} + +/*control msg from server will trigger this callback*/ +static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +{ + int i = 0; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { + sg_DataTemplate[i].state = eCHANGED; + Log_i("Property=%s changed", pProperty->key); + sg_control_msg_arrived = true; + return; + } + } + + Log_e("Property=%s changed no match", pProperty->key); +} + +static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) +{ + Log_i("recv report_reply(ack=%d): %s", replyAck, pJsonDocument); +} + + +// register data template properties +static int _register_data_template_property(void *pTemplate_client) +{ + int i, rc; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } + } + + return QCLOUD_RET_SUCCESS; +} + +/*get property state, changed or not*/ +static eDataState get_property_state(void *pProperyData) +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + return sg_DataTemplate[i].state; + } + } + + Log_e("no property matched"); + return eNOCHANGE; +} + + +/*set property state, changed or no change*/ +static void set_propery_state(void *pProperyData, eDataState state) +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + sg_DataTemplate[i].state = state; + break; + } + } +} + +/* demo for light logic deal */ +static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) +{ + int i; + const char * ansi_color = NULL; + const char * ansi_color_name = NULL; + char brightness_bar[] = "||||||||||||||||||||"; + int brightness_bar_len = strlen(brightness_bar); + + /* light color */ + switch (light->m_color) { + case eCOLOR_RED: + ansi_color = ANSI_COLOR_RED; + ansi_color_name = " RED "; + break; + case eCOLOR_GREEN: + ansi_color = ANSI_COLOR_GREEN; + ansi_color_name = "GREEN"; + break; + case eCOLOR_BLUE: + ansi_color = ANSI_COLOR_BLUE; + ansi_color_name = " BLUE"; + break; + default: + ansi_color = ANSI_COLOR_YELLOW; + ansi_color_name = "UNKNOWN"; + break; + } + + + /* light brightness bar */ + brightness_bar_len = (light->m_brightness >= 100) ? brightness_bar_len : (int)((light->m_brightness * brightness_bar_len) / 100); + for (i = brightness_bar_len; i < strlen(brightness_bar); i++) { + brightness_bar[i] = '-'; + } + + if (light->m_light_switch) { + /* light is on , show with the properties*/ + HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color, ansi_color_name, brightness_bar, light->m_name); + } else { + /* light is off */ + HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color_name, brightness_bar, light->m_name); + } + + if (eCHANGED == get_property_state(&light->m_light_switch)) { +#ifdef EVENT_POST_ENABLED + if (light->m_light_switch) { + //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + //strcpy(sg_message,"light on"); + //sg_status = 1; + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light on"); + } else { + //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + //strcpy(sg_message,"light off"); + //sg_status = 0; + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); + } + + //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck + IOT_Event_setFlag(client, FLAG_EVENT0); +#else + Log_d("light switch state changed"); +#endif + } +} + +/*example for cycle report, you can delete this for your needs*/ +static void cycle_report(Timer *reportTimer) +{ + int i; + + if (expired(reportTimer)) { + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + set_propery_state(sg_DataTemplate[i].data_property.data, eCHANGED); + countdown_ms(reportTimer, 5000); + } + } +} + +/*get local property data, like sensor data*/ +static void _refresh_local_property(void) +{ + //add your local property refresh logic, cycle report for example + cycle_report(&sg_reportTimer); +} + +static int find_wait_report_property(DeviceProperty *pReportDataList[]) +{ + int i, j; + + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (eCHANGED == sg_DataTemplate[i].state) { + pReportDataList[j++] = &(sg_DataTemplate[i].data_property); + sg_DataTemplate[i].state = eNOCHANGE; + } + } + + return j; +} + +/* demo for up-stream code */ +static int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) +{ + //refresh local property + _refresh_local_property(); + + /*find propery need report*/ + *pCount = find_wait_report_property(pReportDataList); + + return (*pCount > 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +} + +/*You should get the real info for your device, here just for example*/ +static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) +{ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + DeviceProperty plat_info[] = { + {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, + {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, + {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, + {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, + {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, + {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, + {NULL, NULL, 0} //end + }; + + /*self define info*/ + DeviceProperty self_info[] = { + {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, + {NULL, NULL, 0} //end + }; + + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); +} + + +void* sub_dev1_thread(void *ptr, char *product_id, char *device_name) +{ + + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + sReplyPara replyPara; + int ReportCont; + int rc; + void *pGateWayClient = ptr; + + Log_d("sub_dev1_thread ..."); + + //init connection + TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS; + init_params.product_id = product_id; + init_params.device_name = device_name; + init_params.event_handle.h_fp = event_handler; + + + void *client = IOT_Template_Construct(&init_params, IOT_Gateway_Get_MQTT_Client(pGateWayClient)); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + Log_e("Cloud Device Construct Failed"); + return NULL; + } + + //usr init + _usr_init(); + + //init data template + _init_data_template(); + + //register data template propertys here + rc = _register_data_template_property(client); + if (rc == QCLOUD_RET_SUCCESS) { + Log_i("Register data template propertys Success"); + } else { + Log_e("Register data template propertys Failed: %d", rc); + return NULL; + } + + //register data template actions here +#ifdef ACTION_ENABLED + rc = _register_data_template_action(client); + if (rc == QCLOUD_RET_SUCCESS) { + Log_i("Register data template actions Success"); + } else { + Log_e("Register data template actions Failed: %d", rc); + return NULL; + } +#endif + + HAL_SleepMs(1000); //wait subcrible ack + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if (QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + return NULL; + } + } else { + Log_e("Get system info fail, err: %d", rc); + } + + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + return NULL; + } else { + Log_d("Get data status success"); + } + + //init a timer for cycle report, you could delete it or not for your needs + InitTimer(&sg_reportTimer); + + while (IOT_Template_IsConnected(client) || QCLOUD_RET_SUCCESS == rc) { + + rc = IOT_Template_Yield_Without_MQTT_Yield(client, 200); + if(QCLOUD_RET_SUCCESS != rc){ + Log_d("Template Yield without mqtt err, rc:%d", rc); + } + + /* handle control msg from server */ + if (sg_control_msg_arrived) { + deal_down_stream_user_logic(client, &sg_ProductData); + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured + + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); + if (rc == QCLOUD_RET_SUCCESS) { + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; + } else { + Log_e("Contol msg reply failed, err: %d", rc); + } + } + + /*report msg to server*/ + /*report the lastest properties's status*/ + if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)) { + + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + + Log_i("data template reporte success"); + } else { + Log_e("data template reporte failed, err: %d", rc); + } + } else { + Log_e("construct reporte data failed, err: %d", rc); + } + + } + +#ifdef EVENT_POST_ENABLED + eventPostCheck(client); +#endif + + HAL_SleepMs(1000); + } + + rc = IOT_Template_Destroy_Except_MQTT(client); + return NULL; +} diff --git a/samples/mqtt/mqtt_sample.c b/samples/mqtt/mqtt_sample.c new file mode 100644 index 0000000..ed62bfd --- /dev/null +++ b/samples/mqtt/mqtt_sample.c @@ -0,0 +1,318 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "utils_getopt.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + + +#ifdef AUTH_MODE_CERT +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file +#endif + + +static DeviceInfo sg_devInfo; +static int sg_count = 0; +static int sg_sub_packet_id = -1; + + +// user's log print callback +static bool log_handler(const char* message) +{ + // return true if print success + return false; +} + +// MQTT event callback +static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, + mqtt_messge->ptopic, + mqtt_messge->payload_len, + mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams* initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + sprintf(sg_cert_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#else + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#endif + + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _mqtt_event_handler; + initParams->event_handle.context = NULL; + + return QCLOUD_RET_SUCCESS; +} + +#define MAX_SIZE_OF_TOPIC_CONTENT 100 +// publish MQTT msg +static int _publish_test_msg(void *client, char *topic_keyword, QoS qos) +{ + char topicName[128] = {0}; + sprintf(topicName, "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, topic_keyword); + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + + char topic_content[MAX_SIZE_OF_TOPIC_CONTENT + 1] = {0}; + + int size = HAL_Snprintf(topic_content, sizeof(topic_content), "{\"action\": \"publish_test\", \"count\": \"%d\"}", sg_count++); + if (size < 0 || size > sizeof(topic_content) - 1) { + Log_e("payload content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_content)); + return -3; + } + + pub_params.payload = topic_content; + pub_params.payload_len = strlen(topic_content); + + return IOT_MQTT_Publish(client, topicName, &pub_params); +} + +// callback when MQTT msg arrives +static void on_message_callback(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) { + return; + } + + Log_i("Receive Message With topicName:%.*s, payload:%.*s", + (int) message->topic_len, message->ptopic, (int) message->payload_len, (char *) message->payload); +} + +// subscrib MQTT topic +static int _subscribe_topic(void *client, char *topic_keyword, QoS qos) +{ + static char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "%s/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name, topic_keyword); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = on_message_callback; + return IOT_MQTT_Subscribe(client, topic_name, &sub_params); +} + +static bool sg_loop_test = false; +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l")) != EOF) + switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_test = true; + break; + + default: + HAL_Printf("usage: %s [options]\n" + " [-c ] \n" + " [-l ] loop test or not\n" + , argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + int rc; + //init log level + IOT_Log_Set_Level(eLOG_DEBUG); + IOT_Log_Set_MessageHandler(log_handler); + + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + //init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params error, rc = %d", rc); + return rc; + } + + // create MQTT client and connect with server + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + rc = IOT_MQTT_GetErrCode(); + Log_e("MQTT Construct failed, rc = %d", rc); + return QCLOUD_ERR_FAILURE; + } + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + + //subscribe normal topics here + rc = _subscribe_topic(client, "data", QOS0); + if (rc < 0) { + Log_e("Client Subscribe Topic Failed: %d", rc); + return rc; + } + + // wait for subscription result + IOT_MQTT_Yield(client, 500); + + do { + + if (sg_sub_packet_id > 0) { + rc = _publish_test_msg(client, "data", QOS1); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } + } + + rc = IOT_MQTT_Yield(client, 500); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (sg_loop_test) + HAL_SleepMs(1000); + + } while (sg_loop_test); + + rc = IOT_MQTT_Destroy(&client); + + return rc; +} diff --git a/samples/ota/ota_mqtt_sample.c b/samples/ota/ota_mqtt_sample.c index 86792ae..729faf2 100644 --- a/samples/ota/ota_mqtt_sample.c +++ b/samples/ota/ota_mqtt_sample.c @@ -23,8 +23,8 @@ #ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file #endif @@ -36,265 +36,264 @@ static DeviceInfo sg_devInfo; static bool sg_pub_ack = false; static int sg_packet_id = 0; -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); if (sg_packet_id == packet_id) sg_pub_ack = true; - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } /* demo of firmware info management in device side for resuming download from break point */ -#define VERSION_FILE_PATH "./local_fw_info.json" -#define KEY_VER "version" -#define KEY_MD5 "md5" -#define KEY_SIZE "downloadSize" -#define KEY_STATE "state" -#define KEY_PREVER "running_version" +#define VERSION_FILE_PATH "./local_fw_info.json" +#define KEY_VER "version" +#define KEY_MD5 "md5" +#define KEY_SIZE "downloadSize" +#define KEY_STATE "state" +#define KEY_PREVER "running_version" static char * get_local_fw_version(char **ver, char **md5, char **size) { -#define INFO_FILE_MAX_LEN 256 +#define INFO_FILE_MAX_LEN 256 - FILE *fp; - int len; - int rlen; - char *preVer; - char *reportVer = NULL; - - fp = fopen(VERSION_FILE_PATH, "r"); - if(NULL == fp) { + FILE *fp; + int len; + int rlen; + char *preVer; + char *reportVer = NULL; + + fp = fopen(VERSION_FILE_PATH, "r"); + if (NULL == fp) { Log_e("open file %s failed", VERSION_FILE_PATH); - goto exit; + goto exit; } - fseek(fp, 0L, SEEK_END); + fseek(fp, 0L, SEEK_END); len = ftell(fp); - if(len > INFO_FILE_MAX_LEN){ - Log_e("%s is too big, pls check", VERSION_FILE_PATH); - goto exit; - } - - char *JsonDoc = (char *)HAL_Malloc(len + 10); - if(NULL == JsonDoc){ - Log_e("malloc buffer for json file read fail"); - goto exit; - } - - rewind(fp); - rlen = fread(JsonDoc, 1, len, fp); - - if(len != rlen){ - Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); - } - - *ver = LITE_json_value_of(KEY_VER, JsonDoc); - *md5 = LITE_json_value_of(KEY_MD5, JsonDoc); - *size = LITE_json_value_of(KEY_SIZE, JsonDoc); - preVer = LITE_json_value_of(KEY_PREVER, JsonDoc); - - if((NULL != *ver) && (NULL != preVer) && (0 == strcmp(*ver, preVer))){ - reportVer = *ver; - HAL_Free(preVer); - }else{ - reportVer = preVer; - } - + if (len > INFO_FILE_MAX_LEN) { + Log_e("%s is too big, pls check", VERSION_FILE_PATH); + goto exit; + } + + char *JsonDoc = (char *)HAL_Malloc(len + 10); + if (NULL == JsonDoc) { + Log_e("malloc buffer for json file read fail"); + goto exit; + } + + rewind(fp); + rlen = fread(JsonDoc, 1, len, fp); + + if (len != rlen) { + Log_e("read data len (%d) less than needed (%d), %s", rlen, len, JsonDoc); + } + + *ver = LITE_json_value_of(KEY_VER, JsonDoc); + *md5 = LITE_json_value_of(KEY_MD5, JsonDoc); + *size = LITE_json_value_of(KEY_SIZE, JsonDoc); + preVer = LITE_json_value_of(KEY_PREVER, JsonDoc); + + if ((NULL != *ver) && (NULL != preVer) && (0 == strcmp(*ver, preVer))) { + reportVer = *ver; + HAL_Free(preVer); + } else { + reportVer = preVer; + } + exit: - - if(NULL != fp){ - fclose(fp); - } - return reportVer; -#undef INFO_FILE_MAX_LEN + if (NULL != fp) { + fclose(fp); + } + + return reportVer; +#undef INFO_FILE_MAX_LEN } /* update local firmware info for resuming download from break point */ static int update_local_fw_info(const char *version, const char *preVer, const char *md5, uint32_t downloadedSize) { -#define INFO_FILE_MAX_LEN 256 +#define INFO_FILE_MAX_LEN 256 - FILE *fp; - int wlen; - int ret = QCLOUD_RET_SUCCESS; - char dataBuff[INFO_FILE_MAX_LEN]; + FILE *fp; + int wlen; + int ret = QCLOUD_RET_SUCCESS; + char dataBuff[INFO_FILE_MAX_LEN]; - memset(dataBuff, 0, INFO_FILE_MAX_LEN); - HAL_Snprintf(dataBuff, INFO_FILE_MAX_LEN, "{\"%s\":\"%s\", \"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\"}",\ - KEY_VER, version, KEY_MD5, md5, KEY_SIZE, downloadedSize, \ - KEY_PREVER, (NULL == preVer)?"1.0.0": preVer); + memset(dataBuff, 0, INFO_FILE_MAX_LEN); + HAL_Snprintf(dataBuff, INFO_FILE_MAX_LEN, "{\"%s\":\"%s\", \"%s\":\"%s\",\"%s\":%d,\"%s\":\"%s\"}", \ + KEY_VER, version, KEY_MD5, md5, KEY_SIZE, downloadedSize, \ + KEY_PREVER, (NULL == preVer) ? "1.0.0" : preVer); - fp = fopen(VERSION_FILE_PATH, "w"); - if(NULL == fp) { + fp = fopen(VERSION_FILE_PATH, "w"); + if (NULL == fp) { Log_e("open file %s failed", VERSION_FILE_PATH); - ret = QCLOUD_ERR_FAILURE; - goto exit; + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + wlen = fwrite(dataBuff, 1, strlen(dataBuff), fp); + if (wlen != strlen(dataBuff)) { + Log_e("save version to file err"); + ret = QCLOUD_ERR_FAILURE; } - wlen = fwrite(dataBuff, 1, strlen(dataBuff), fp); - if(wlen != strlen(dataBuff)){ - Log_e("save version to file err"); - ret = QCLOUD_ERR_FAILURE; - } - exit: - - if(NULL != fp){ - fclose(fp); - } - return ret; -#undef INFO_FILE_MAX_LEN + if (NULL != fp) { + fclose(fp); + } + + return ret; +#undef INFO_FILE_MAX_LEN } /* get local firmware offset for resuming download from break point */ static int getFwOffset(void *h_ota, char *local_ver, char *local_md5, char *local_size, uint32_t *offset, uint32_t *size_file) { - char version[128], md5sum[33]; - uint32_t local_len; - int Ret; + char version[128], md5sum[33]; + uint32_t local_len; + int Ret; - Ret = IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); - Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, size_file, 4); + Ret = IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); + Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); + Ret |= IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, size_file, 4); - local_len = (NULL == local_size)?0:atoi(local_size); + local_len = (NULL == local_size) ? 0 : atoi(local_size); - - if((NULL == local_ver)||(NULL == local_md5)||(NULL == local_size)){ - *offset = 0; - } - else if((0 != strcmp(local_ver, version))||(0 != strcmp(local_md5, md5sum))||(local_len > *size_file)){ - *offset = 0; - }else { - *offset = local_len; - } - - return Ret; + + if ((NULL == local_ver) || (NULL == local_md5) || (NULL == local_size)) { + *offset = 0; + } else if ((0 != strcmp(local_ver, version)) || (0 != strcmp(local_md5, md5sum)) || (local_len > *size_file)) { + *offset = 0; + } else { + *offset = local_len; + } + + return Ret; } /* calculate left MD5 for resuming download from break point */ -static int cal_exist_fw_md5(void *h_ota, FILE *fp, size_t size){ +static int cal_exist_fw_md5(void *h_ota, FILE *fp, size_t size) +{ #define BUFF_LEN 1024 - char buff[BUFF_LEN]; - size_t rlen; - int Ret = QCLOUD_RET_SUCCESS; - - while((size > 0) && (!feof(fp))){ - rlen = (size > BUFF_LEN)?BUFF_LEN:size; - if(rlen != fread(buff, 1, rlen, fp)){ - Log_e("read data len not expected"); - Ret = QCLOUD_ERR_FAILURE; - break; - } - IOT_OTA_UpdateClientMd5(h_ota, buff, rlen); - size -= rlen; - } - return Ret; -#undef BUFF_LEN + char buff[BUFF_LEN]; + size_t rlen; + int Ret = QCLOUD_RET_SUCCESS; + + while ((size > 0) && (!feof(fp))) { + rlen = (size > BUFF_LEN) ? BUFF_LEN : size; + if (rlen != fread(buff, 1, rlen, fp)) { + Log_e("read data len not expected"); + Ret = QCLOUD_ERR_FAILURE; + break; + } + IOT_OTA_UpdateClientMd5(h_ota, buff, rlen); + size -= rlen; + } + return Ret; +#undef BUFF_LEN } static int _setup_connect_init_params(MQTTInitParams* initParams) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } -int main(int argc, char **argv) +int main(int argc, char **argv) { IOT_Log_Set_Level(eLOG_DEBUG); int rc; - uint32_t firmware_valid; + uint32_t firmware_valid; char version[128], md5sum[33]; uint32_t len, size_downloaded, size_file; - - int ota_over = 0; + + int ota_over = 0; bool upgrade_fetch_success = true; char buf_ota[OTA_BUF_LEN]; - FILE *fp = NULL; - uint32_t offset = 0; + FILE *fp = NULL; + uint32_t offset = 0; MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; rc = _setup_connect_init_params(&init_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params err,rc=%d", rc); + return rc; + } void *client = IOT_MQTT_Construct(&init_params); if (client != NULL) { @@ -310,14 +309,14 @@ int main(int argc, char **argv) return QCLOUD_ERR_FAILURE; } - IOT_MQTT_Yield(client, 1000); //make sure subscribe success - - char *local_ver = NULL, *local_md5 = NULL, *local_size = NULL, *reportVer = NULL; - reportVer = get_local_fw_version(&local_ver, &local_md5, &local_size); - Log_d("local_ver:%s local_md5:%s, local_size:%s", local_ver, local_md5, local_size); - + IOT_MQTT_Yield(client, 1000); //make sure subscribe success + + char *local_ver = NULL, *local_md5 = NULL, *local_size = NULL, *reportVer = NULL; + reportVer = get_local_fw_version(&local_ver, &local_md5, &local_size); + Log_d("local_ver:%s local_md5:%s, local_size:%s", local_ver, local_md5, local_size); + /* Must report version first */ - if (0 > IOT_OTA_ReportVersion(h_ota, (NULL == reportVer)?"1.0.0": reportVer)) { + if (0 > IOT_OTA_ReportVersion(h_ota, (NULL == reportVer) ? "1.0.0" : reportVer)) { Log_e("report OTA version failed"); goto exit; } @@ -326,49 +325,64 @@ int main(int argc, char **argv) Log_i("wait for ota upgrade command..."); IOT_MQTT_Yield(client, 200); - + if (IOT_OTA_IsFetching(h_ota)) { - - /*check pre-download finished or not*/ - /*if version & MD5 is the same,then pre-download not finished,get breakpoint continue download.otherwise the version is new*/ - rc = getFwOffset(h_ota, local_ver, local_md5, local_size, &offset, &size_file); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("get fw offset err,rc:%d",rc); - upgrade_fetch_success = false; - break; - } - - /*cal file md5*/ - //Log_d("Get offset:%d(%x)", offset, offset); - if(offset > 0){ - if (NULL == (fp = fopen("ota.bin", "ab+"))) { - Log_e("open file failed"); - upgrade_fetch_success = false; - break; - } - - if(QCLOUD_RET_SUCCESS != cal_exist_fw_md5(h_ota, fp, offset)){ - Log_e("cal exist fw md5 failed"); - upgrade_fetch_success = false; - break; - } - }else{ - if (NULL == (fp = fopen("ota.bin", "wb+"))) { - Log_e("open file failed"); - upgrade_fetch_success = false; - break; - } - } + + /*check pre-download finished or not*/ + /*if version & MD5 is the same,then pre-download not finished,get breakpoint continue download.otherwise the version is new*/ + rc = getFwOffset(h_ota, local_ver, local_md5, local_size, &offset, &size_file); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("get fw offset err,rc:%d", rc); + upgrade_fetch_success = false; + break; + } + + //finish download but not report state + if(offset == size_file) { + Log_d("download success last time without report!"); + upgrade_fetch_success = true; - /*set offset and start http connect*/ - fseek(fp, offset, SEEK_SET); - rc = IOT_OTA_StartDownload(h_ota, offset, size_file); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("OTA download start err,rc:%d",rc); - upgrade_fetch_success = false; + /* get fw information */ + IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); + IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); + size_downloaded = size_file; break; } + + /*start http connect*/ + rc = IOT_OTA_StartDownload(h_ota, offset, size_file); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("OTA download start err,rc:%d", rc); + upgrade_fetch_success = false; + break; + } + + /*cal file md5*/ + //Log_d("Get offset:%d(%x)", offset, offset); + if (offset > 0) { + if (NULL == (fp = fopen("ota.bin", "ab+"))) { + Log_e("open file failed"); + upgrade_fetch_success = false; + break; + } + + if (QCLOUD_RET_SUCCESS != cal_exist_fw_md5(h_ota, fp, offset)) { + Log_e("cal exist fw md5 failed"); + upgrade_fetch_success = false; + break; + } + + /*set offset*/ + fseek(fp, offset, SEEK_SET); + } else { + if (NULL == (fp = fopen("ota.bin", "wb+"))) { + Log_e("open file failed"); + upgrade_fetch_success = false; + break; + } + } + do { len = IOT_OTA_FetchYield(h_ota, buf_ota, OTA_BUF_LEN, 1); if (len > 0) { @@ -381,36 +395,36 @@ int main(int argc, char **argv) Log_e("download fail rc=%d", len); upgrade_fetch_success = false; break; - } - fflush(fp); - + } + fflush(fp); + /* get OTA information and update local info */ IOT_OTA_Ioctl(h_ota, IOT_OTAG_FETCHED_SIZE, &size_downloaded, 4); IOT_OTA_Ioctl(h_ota, IOT_OTAG_FILE_SIZE, &size_file, 4); IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); - IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - rc = update_local_fw_info(version, reportVer, md5sum, size_downloaded); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("update local fw info err,rc:%d", rc); - } + IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); + rc = update_local_fw_info(version, reportVer, md5sum, size_downloaded); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("update local fw info err,rc:%d", rc); + } IOT_MQTT_Yield(client, 100); - + } while (!IOT_OTA_IsFetchFinish(h_ota)); - - fclose(fp); - fp = NULL; - - /* Must check MD5 match or not */ + + fclose(fp); + fp = NULL; + + /* Must check MD5 match or not */ if (upgrade_fetch_success) { IOT_OTA_Ioctl(h_ota, IOT_OTAG_CHECK_FIRMWARE, &firmware_valid, 4); if (0 == firmware_valid) { Log_e("The firmware is invalid"); upgrade_fetch_success = false; - rc = update_local_fw_info(NULL, reportVer, NULL, 0); - if(QCLOUD_RET_SUCCESS != rc){ - Log_e("update local fw info err,rc:%d", rc); - } + rc = update_local_fw_info(NULL, reportVer, NULL, 0); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("update local fw info err,rc:%d", rc); + } } else { Log_i("The firmware is valid"); upgrade_fetch_success = true; @@ -421,89 +435,88 @@ int main(int argc, char **argv) } HAL_SleepMs(2000); - } while(!ota_over); - - - if (upgrade_fetch_success) - { - /* begin execute OTA files, should report upgrade begin */ - sg_packet_id = IOT_OTA_ReportUpgradeBegin(h_ota); - if (0 > sg_packet_id) { - Log_e("report OTA begin failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - sg_pub_ack = false; - - //* add your own upgrade logic here*// - //* fw_upgrade..... - - if(QCLOUD_RET_SUCCESS == rc){ - /* if upgrade success */ - /* after execute OTA files, should report upgrade result */ - sg_packet_id = IOT_OTA_ReportUpgradeSuccess(h_ota, NULL); - if (0 > sg_packet_id) { - Log_e("report OTA result failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - rc = update_local_fw_info(version, version, md5sum, size_downloaded); // just for example, add your own logic - sg_pub_ack = false; - - }else{ - /* if upgrade fail */ - sg_packet_id = IOT_OTA_ReportUpgradeFail(h_ota, NULL); - if (0 > sg_packet_id) { - Log_e("report OTA result failed error:%d", sg_packet_id); - return QCLOUD_ERR_FAILURE; - } - while (!sg_pub_ack) { - HAL_SleepMs(1000); - IOT_MQTT_Yield(client, 200); - } - rc = update_local_fw_info(NULL, reportVer, NULL, 0); // just for example, add your own logic - sg_pub_ack = false; - - } + } while (!ota_over); + + + if (upgrade_fetch_success) { + /* begin execute OTA files, should report upgrade begin */ + sg_packet_id = IOT_OTA_ReportUpgradeBegin(h_ota); + if (0 > sg_packet_id) { + Log_e("report OTA begin failed error:%d", sg_packet_id); + return QCLOUD_ERR_FAILURE; + } + while (!sg_pub_ack) { + HAL_SleepMs(1000); + IOT_MQTT_Yield(client, 200); + } + sg_pub_ack = false; + + //* add your own upgrade logic here*// + //* fw_upgrade..... + + if (QCLOUD_RET_SUCCESS == rc) { + /* if upgrade success */ + /* after execute OTA files, should report upgrade result */ + sg_packet_id = IOT_OTA_ReportUpgradeSuccess(h_ota, NULL); + if (0 > sg_packet_id) { + Log_e("report OTA result failed error:%d", sg_packet_id); + return QCLOUD_ERR_FAILURE; + } + while (!sg_pub_ack) { + HAL_SleepMs(1000); + IOT_MQTT_Yield(client, 200); + } + rc = update_local_fw_info(version, version, md5sum, size_downloaded); // just for example, add your own logic + sg_pub_ack = false; + + } else { + /* if upgrade fail */ + sg_packet_id = IOT_OTA_ReportUpgradeFail(h_ota, NULL); + if (0 > sg_packet_id) { + Log_e("report OTA result failed error:%d", sg_packet_id); + return QCLOUD_ERR_FAILURE; + } + while (!sg_pub_ack) { + HAL_SleepMs(1000); + IOT_MQTT_Yield(client, 200); + } + rc = update_local_fw_info(NULL, reportVer, NULL, 0); // just for example, add your own logic + sg_pub_ack = false; + + } } exit: - if(NULL != fp){ - fclose(fp); - fp = NULL; - } + if (NULL != fp) { + fclose(fp); + fp = NULL; + } + + if (NULL != local_ver) { + reportVer = (reportVer == local_ver) ? NULL : reportVer; + HAL_Free(local_ver); + local_ver = NULL; + } - if(NULL != local_ver){ - reportVer = (reportVer == local_ver)?NULL: reportVer; - HAL_Free(local_ver); - local_ver = NULL; - } - - if(NULL != local_md5){ - HAL_Free(local_md5); - local_md5 = NULL; - } + if (NULL != local_md5) { + HAL_Free(local_md5); + local_md5 = NULL; + } - if(NULL != local_size){ - HAL_Free(local_size); - local_size = NULL; - } + if (NULL != local_size) { + HAL_Free(local_size); + local_size = NULL; + } - if(NULL != reportVer){ - HAL_Free(reportVer); - reportVer = NULL; - } + if (NULL != reportVer) { + HAL_Free(reportVer); + reportVer = NULL; + } IOT_OTA_Destroy(h_ota); IOT_MQTT_Destroy(&client); - + return 0; } diff --git a/samples/raw_data/raw_data_sample.c b/samples/raw_data/raw_data_sample.c new file mode 100644 index 0000000..3dbfc6f --- /dev/null +++ b/samples/raw_data/raw_data_sample.c @@ -0,0 +1,360 @@ +/* + * Tencent is pleased to support the open source community by making IoT Hub available. + * Copyright (C) 2016 THL A29 Limited, a Tencent company. All rights reserved. + + * Licensed under the MIT License (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://opensource.org/licenses/MIT + + * Unless required by applicable law or agreed to in writing, software distributed under the License is + * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +#include +#include +#include +#include +#include + +#include "utils_getopt.h" +#include "qcloud_iot_export.h" +#include "qcloud_iot_import.h" + +#define MAGIC_HEAD_NUM 0x55aa +typedef struct _sTestData_ { + uint8_t m_power_switch; + uint8_t m_color; + uint8_t m_brightness; +} sTestData; + +typedef struct _sRawDataFrame_ { + uint16_t magic_head; + uint8_t msg_type; + uint8_t res_byte; + uint32_t clientId; + sTestData data; +} sRawDataFrame; + +typedef enum { + eMSG_REPORT = 0x01, + eMSG_CONTROL = 0x20, + eMSG_DEFAULT = 0xFF, +} eMsgType; + +static uint32_t sg_client_id = 0; +static bool sg_loop_test = false; + + +#ifdef AUTH_MODE_CERT +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file +#endif + + +static DeviceInfo sg_devInfo; +static int sg_sub_packet_id = -1; + + +// user's log print callback +static bool log_handler(const char* message) +{ + // return true if print success + return false; +} + +// MQTT event callback +static void _mqtt_event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + MQTTMessage* mqtt_messge = (MQTTMessage*)msg->msg; + uintptr_t packet_id = (uintptr_t)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; + + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; + + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_i("topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + mqtt_messge->topic_len, + mqtt_messge->ptopic, + mqtt_messge->payload_len, + mqtt_messge->payload); + break; + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_SUBCRIBE_NACK: + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + sg_sub_packet_id = packet_id; + break; + + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_i("unsubscribe success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + Log_i("unsubscribe timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_i("unsubscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } +} + + +// Setup MQTT construct parameters +static int _setup_connect_init_params(MQTTInitParams* initParams) +{ + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; + +#ifdef AUTH_MODE_CERT + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef WIN32 + sprintf(sg_cert_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s\\%s\\%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#else + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); +#endif + + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; +#else + initParams->device_secret = sg_devInfo.device_secret; +#endif + + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + + initParams->auto_connect_enable = 1; + initParams->event_handle.h_fp = _mqtt_event_handler; + initParams->event_handle.context = NULL; + + return QCLOUD_RET_SUCCESS; +} + +static void HexDump(uint8_t *pData, uint16_t len) +{ + int i; + + for (i = 0; i < len; i++) { + if (i % 32 == 0) { + HAL_Printf("\n"); + } + HAL_Printf(" %02X", pData[i]); + } + HAL_Printf("\n"); +} + +// publish raw data msg +static int _publish_raw_data_msg(void *client, QoS qos) +{ + sRawDataFrame raw_data; + + + memset((char *)&raw_data, 0, sizeof(sRawDataFrame)); + raw_data.magic_head = MAGIC_HEAD_NUM; + raw_data.msg_type = eMSG_REPORT; + raw_data.clientId = sg_client_id++; + + srand((unsigned)HAL_GetTimeMs()); + raw_data.data.m_power_switch = 1; + raw_data.data.m_color = rand()%3; + raw_data.data.m_brightness = rand() % 100; + + char topicName[128] = {0}; + sprintf(topicName, "$thing/up/raw/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name); + + PublishParams pub_params = DEFAULT_PUB_PARAMS; + pub_params.qos = qos; + pub_params.payload = &raw_data; + pub_params.payload_len = sizeof(raw_data); + + Log_d("raw_data published dump:"); + HexDump((uint8_t *)&raw_data, sizeof(raw_data)); + + return IOT_MQTT_Publish(client, topicName, &pub_params); +} + +// callback when MQTT msg arrives +static void on_raw_data_message_callback(void *pClient, MQTTMessage *message, void *userData) +{ + if (message == NULL) { + return; + } + Log_i("Receive Message With topicName:%.*s, payloadlen:%d", (int) message->topic_len, message->ptopic, (int) message->payload_len); + + Log_d("raw_data reveived dump:"); + HexDump((uint8_t *)message->payload, (int)message->payload_len); +} + +// subscrib MQTT topic +static int _subscribe_raw_data_topic(void *client, QoS qos) +{ + static char topic_name[128] = {0}; + int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$thing/down/raw/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.qos = qos; + sub_params.on_message_handler = on_raw_data_message_callback; + return IOT_MQTT_Subscribe(client, topic_name, &sub_params); +} + +static int parse_arguments(int argc, char **argv) +{ + int c; + while ((c = utils_getopt(argc, argv, "c:l")) != EOF) + switch (c) { + case 'c': + if (HAL_SetDevInfoFile(utils_optarg)) + return -1; + break; + + case 'l': + sg_loop_test = true; + break; + + default: + HAL_Printf("usage: %s [options]\n" + " [-c ] \n" + " [-l ] loop test or not\n" + , argv[0]); + return -1; + } + return 0; +} + +int main(int argc, char **argv) +{ + int rc; + //init log level + IOT_Log_Set_Level(eLOG_DEBUG); + IOT_Log_Set_MessageHandler(log_handler); + + // parse arguments for device info file and loop test; + rc = parse_arguments(argc, argv); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("parse arguments error, rc = %d", rc); + return rc; + } + + //init connection + MQTTInitParams init_params = DEFAULT_MQTTINIT_PARAMS; + rc = _setup_connect_init_params(&init_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("init params error, rc = %d", rc); + return rc; + } + + // create MQTT client and connect with server + void *client = IOT_MQTT_Construct(&init_params); + if (client != NULL) { + Log_i("Cloud Device Construct Success"); + } else { + rc = IOT_MQTT_GetErrCode(); + Log_e("MQTT Construct failed, rc = %d", rc); + return QCLOUD_ERR_FAILURE; + } + +#ifdef SYSTEM_COMM + long time = 0; + // get system timestamp from server + rc = IOT_Get_SysTime(client, &time); + if (QCLOUD_RET_SUCCESS == rc) { + Log_i("system time is %ld", time); + } else { + Log_e("get system time failed!"); + } +#endif + + //subscribe normal topics here + rc = _subscribe_raw_data_topic(client, QOS1); + if (rc < 0) { + Log_e("Client Subscribe raw data topic Failed: %d", rc); + return rc; + } + + // wait for subscription result + IOT_MQTT_Yield(client, 500); + + do { + + if (sg_sub_packet_id > 0) { + rc = _publish_raw_data_msg(client, QOS0); + if (rc < 0) { + Log_e("client publish topic failed :%d.", rc); + } + } + + rc = IOT_MQTT_Yield(client, 500); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(1000); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("exit with error: %d", rc); + break; + } + + if (sg_loop_test) + HAL_SleepMs(5000); + + } while (sg_loop_test); + + rc = IOT_MQTT_Destroy(&client); + + return rc; +} diff --git a/samples/scenarized/light_data_template_sample.c b/samples/scenarized/light_data_template_sample.c index 58b98d6..d49160e 100644 --- a/samples/scenarized/light_data_template_sample.c +++ b/samples/scenarized/light_data_template_sample.c @@ -22,8 +22,8 @@ #ifdef AUTH_MODE_CERT - static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file - static char sg_key_file[PATH_MAX + 1]; // full path of device key file +static char sg_cert_file[PATH_MAX + 1]; // full path of device cert file +static char sg_key_file[PATH_MAX + 1]; // full path of device key file #endif static DeviceInfo sg_devInfo; @@ -45,24 +45,24 @@ size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_dat /*data_config.c can be generated by tools/codegen.py -c xx/product.json*/ -/*-----------------data config start -------------------*/ +/*-----------------data config start -------------------*/ #define TOTAL_PROPERTY_COUNT 4 -#define MAX_STR_NAME_LEN (64) +#define MAX_STR_NAME_LEN (64) static sDataPoint sg_DataTemplate[TOTAL_PROPERTY_COUNT]; -typedef enum{ - eCOLOR_RED = 0, - eCOLOR_GREEN = 1, - eCOLOR_BLUE = 2, -}eColor; +typedef enum { + eCOLOR_RED = 0, + eCOLOR_GREEN = 1, + eCOLOR_BLUE = 2, +} eColor; typedef struct _ProductDataDefine { - TYPE_DEF_TEMPLATE_BOOL m_light_switch; + TYPE_DEF_TEMPLATE_BOOL m_light_switch; TYPE_DEF_TEMPLATE_ENUM m_color; TYPE_DEF_TEMPLATE_INT m_brightness; - TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN+1]; + TYPE_DEF_TEMPLATE_STRING m_name[MAX_STR_NAME_LEN + 1]; } ProductDataDefine; static ProductDataDefine sg_ProductData; @@ -70,35 +70,35 @@ static ProductDataDefine sg_ProductData; static void _init_data_template(void) { memset((void *) & sg_ProductData, 0, sizeof(ProductDataDefine)); - - sg_ProductData.m_light_switch = 0; + + sg_ProductData.m_light_switch = 0; sg_DataTemplate[0].data_property.key = "power_switch"; sg_DataTemplate[0].data_property.data = &sg_ProductData.m_light_switch; sg_DataTemplate[0].data_property.type = TYPE_TEMPLATE_BOOL; - sg_ProductData.m_color = eCOLOR_RED; + sg_ProductData.m_color = eCOLOR_RED; sg_DataTemplate[1].data_property.key = "color"; sg_DataTemplate[1].data_property.data = &sg_ProductData.m_color; sg_DataTemplate[1].data_property.type = TYPE_TEMPLATE_ENUM; - sg_ProductData.m_brightness = 0; + sg_ProductData.m_brightness = 0; sg_DataTemplate[2].data_property.key = "brightness"; sg_DataTemplate[2].data_property.data = &sg_ProductData.m_brightness; sg_DataTemplate[2].data_property.type = TYPE_TEMPLATE_INT; - strncpy(sg_ProductData.m_name, sg_devInfo.device_name, MAX_STR_NAME_LEN); - sg_ProductData.m_name[strlen(sg_devInfo.device_name)] = '\0'; + strncpy(sg_ProductData.m_name, sg_devInfo.device_name, MAX_STR_NAME_LEN); + sg_ProductData.m_name[strlen(sg_devInfo.device_name)] = '\0'; sg_DataTemplate[3].data_property.key = "name"; sg_DataTemplate[3].data_property.data = sg_ProductData.m_name; - sg_DataTemplate[3].data_property.data_buff_len = MAX_STR_NAME_LEN; + sg_DataTemplate[3].data_property.data_buff_len = MAX_STR_NAME_LEN; sg_DataTemplate[3].data_property.type = TYPE_TEMPLATE_STRING; }; -/*-----------------data config end -------------------*/ +/*-----------------data config end -------------------*/ /*event_config.c can be generated by tools/codegen.py -c xx/product.json*/ -/*-----------------event config start -------------------*/ +/*-----------------event config start -------------------*/ #ifdef EVENT_POST_ENABLED #define EVENT_COUNTS (3) #define MAX_EVENT_STR_MESSAGE_LEN (64) @@ -106,296 +106,296 @@ static void _init_data_template(void) static TYPE_DEF_TEMPLATE_BOOL sg_status; -static TYPE_DEF_TEMPLATE_STRING sg_message[MAX_EVENT_STR_MESSAGE_LEN+1]; +static TYPE_DEF_TEMPLATE_STRING sg_message[MAX_EVENT_STR_MESSAGE_LEN + 1]; static DeviceProperty g_propertyEvent_status_report[] = { - {.key = "status", .data = &sg_status, .type = TYPE_TEMPLATE_BOOL}, - {.key = "message", .data = sg_message, .type = TYPE_TEMPLATE_STRING}, + {.key = "status", .data = &sg_status, .type = TYPE_TEMPLATE_BOOL}, + {.key = "message", .data = sg_message, .type = TYPE_TEMPLATE_STRING}, }; static TYPE_DEF_TEMPLATE_FLOAT sg_voltage; static DeviceProperty g_propertyEvent_low_voltage[] = { - {.key = "voltage", .data = &sg_voltage, .type = TYPE_TEMPLATE_FLOAT}, + {.key = "voltage", .data = &sg_voltage, .type = TYPE_TEMPLATE_FLOAT}, }; -static TYPE_DEF_TEMPLATE_STRING sg_name[MAX_EVENT_STR_NAME_LEN+1]; +static TYPE_DEF_TEMPLATE_STRING sg_name[MAX_EVENT_STR_NAME_LEN + 1]; static TYPE_DEF_TEMPLATE_INT sg_error_code; static DeviceProperty g_propertyEvent_hardware_fault[] = { - {.key = "name", .data = sg_name, .type = TYPE_TEMPLATE_STRING}, - {.key = "error_code", .data = &sg_error_code, .type = TYPE_TEMPLATE_INT}, + {.key = "name", .data = sg_name, .type = TYPE_TEMPLATE_STRING}, + {.key = "error_code", .data = &sg_error_code, .type = TYPE_TEMPLATE_INT}, }; -static sEvent g_events[]={ +static sEvent g_events[] = { { - .event_name = "status_report", - .type = "info", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_status_report)/sizeof(g_propertyEvent_status_report[0]), - .pEventData = g_propertyEvent_status_report, + .event_name = "status_report", + .type = "info", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_status_report) / sizeof(g_propertyEvent_status_report[0]), + .pEventData = g_propertyEvent_status_report, }, { - .event_name = "low_voltage", - .type = "alert", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_low_voltage)/sizeof(g_propertyEvent_low_voltage[0]), - .pEventData = g_propertyEvent_low_voltage, + .event_name = "low_voltage", + .type = "alert", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_low_voltage) / sizeof(g_propertyEvent_low_voltage[0]), + .pEventData = g_propertyEvent_low_voltage, }, { - .event_name = "hardware_fault", - .type = "fault", - .timestamp = 0, - .eventDataNum = sizeof(g_propertyEvent_hardware_fault)/sizeof(g_propertyEvent_hardware_fault[0]), - .pEventData = g_propertyEvent_hardware_fault, + .event_name = "hardware_fault", + .type = "fault", + .timestamp = 0, + .eventDataNum = sizeof(g_propertyEvent_hardware_fault) / sizeof(g_propertyEvent_hardware_fault[0]), + .pEventData = g_propertyEvent_hardware_fault, }, }; - -/*-----------------event config end -------------------*/ + +/*-----------------event config end -------------------*/ static void update_events_timestamp(sEvent *pEvents, int count) { - int i; - - for(i = 0; i < count; i++){ - if (NULL == (&pEvents[i])) { - Log_e("null event pointer"); - return; + int i; + + for (i = 0; i < count; i++) { + if (NULL == (&pEvents[i])) { + Log_e("null event pointer"); + return; } -#ifdef EVENT_TIMESTAMP_USED - pEvents[i].timestamp = HAL_Timer_current_sec(); //should be UTC and accurate +#ifdef EVENT_TIMESTAMP_USED + pEvents[i].timestamp = HAL_Timer_current_sec(); //should be UTC and accurate #else - pEvents[i].timestamp = 0; + pEvents[i].timestamp = 0; #endif - } + } } static void event_post_cb(void *pClient, MQTTMessage *msg) { - Log_d("recv event reply, clear event"); - IOT_Event_clearFlag(pClient, FLAG_EVENT0); + Log_d("recv event reply, clear event"); +// IOT_Event_clearFlag(pClient, FLAG_EVENT0); } //event check and post static void eventPostCheck(void *client) { - int i; - int rc; - uint32_t eflag; - uint8_t EventCont; - sEvent *pEventList[EVENT_COUNTS]; - - - eflag = IOT_Event_getFlag(client); - if((EVENT_COUNTS > 0 )&& (eflag > 0)){ - EventCont = 0; - for(i = 0; i < EVENT_COUNTS; i++){ - if((eflag&(1< 0 ) && (eflag > 0)) { + EventCont = 0; + for (i = 0; i < EVENT_COUNTS; i++) { + if ((eflag & (1 << i))&ALL_EVENTS_MASK) { + pEventList[EventCont++] = &(g_events[i]); + update_events_timestamp(&g_events[i], 1); + IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); + } + } + + rc = IOT_Post_Event(client, sg_data_report_buffer, sg_data_report_buffersize, \ + EventCont, pEventList, event_post_cb); + if (rc < 0) { + Log_e("event post failed: %d", rc); + } + } } #endif /*action_config.c can be generated by tools/codegen.py -c xx/product.json*/ -/*-----------------action config start -------------------*/ +/*-----------------action config start -------------------*/ #ifdef ACTION_ENABLED #define TOTAL_ACTION_COUNTS (1) static TYPE_DEF_TEMPLATE_INT sg_blink_in_period = 5; static DeviceProperty g_actionInput_blink[] = { - {.key = "period", .data = &sg_blink_in_period, .type = TYPE_TEMPLATE_INT} + {.key = "period", .data = &sg_blink_in_period, .type = TYPE_TEMPLATE_INT} }; static TYPE_DEF_TEMPLATE_BOOL sg_blink_out_result = 0; static DeviceProperty g_actionOutput_blink[] = { - {.key = "result", .data = &sg_blink_out_result, .type = TYPE_TEMPLATE_BOOL}, + {.key = "result", .data = &sg_blink_out_result, .type = TYPE_TEMPLATE_BOOL}, }; -static DeviceAction g_actions[]={ +static DeviceAction g_actions[] = { { - .pActionId = "blink", - .timestamp = 0, - .input_num = sizeof(g_actionInput_blink)/sizeof(g_actionInput_blink[0]), - .output_num = sizeof(g_actionOutput_blink)/sizeof(g_actionOutput_blink[0]), - .pInput = g_actionInput_blink, - .pOutput = g_actionOutput_blink, + .pActionId = "blink", + .timestamp = 0, + .input_num = sizeof(g_actionInput_blink) / sizeof(g_actionInput_blink[0]), + .output_num = sizeof(g_actionOutput_blink) / sizeof(g_actionOutput_blink[0]), + .pInput = g_actionInput_blink, + .pOutput = g_actionOutput_blink, }, }; -/*-----------------action config end -------------------*/ -static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) -{ - int i; - sReplyPara replyPara; - - //control light blink - int period = 0; - DeviceProperty *pActionInput = pAction->pInput; - for (i = 0; i < pAction->input_num; i++) { - if(!strcmp(pActionInput[i].key, "period")) { - period = *((int*)pActionInput[i].data); - } else { - Log_e("no such input[%s]!", pActionInput[i].key); - } - } - - //do blink - HAL_Printf( "%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_RED); - HAL_SleepMs(period*1000); - HAL_Printf( "\r%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_GREEN); - HAL_SleepMs(period*1000); - HAL_Printf( "\r%s[lighting blink][****]\n" ANSI_COLOR_RESET, ANSI_COLOR_RED); - - // construct output - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault - - DeviceProperty *pActionOutnput = pAction->pOutput; - *(int*)(pActionOutnput[0].data) = 0; //set result - - IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); +/*-----------------action config end -------------------*/ +static void OnActionCallback(void *pClient, const char *pClientToken, DeviceAction *pAction) +{ + int i; + sReplyPara replyPara; + + //control light blink + int period = 0; + DeviceProperty *pActionInput = pAction->pInput; + for (i = 0; i < pAction->input_num; i++) { + if (!strcmp(pActionInput[i].key, "period")) { + period = *((int*)pActionInput[i].data); + } else { + Log_e("no such input[%s]!", pActionInput[i].key); + } + } + + //do blink + HAL_Printf( "%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_RED); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]" ANSI_COLOR_RESET, ANSI_COLOR_GREEN); + HAL_SleepMs(period * 1000); + HAL_Printf( "\r%s[lighting blink][****]\n" ANSI_COLOR_RESET, ANSI_COLOR_RED); + + // construct output + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + strcpy(replyPara.status_msg, "action execute success!"); //add the message about the action resault + + DeviceProperty *pActionOutnput = pAction->pOutput; + *(int*)(pActionOutnput[0].data) = 0; //set result + + IOT_ACTION_REPLY(pClient, pClientToken, sg_data_report_buffer, sg_data_report_buffersize, pAction, &replyPara); } static int _register_data_template_action(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_ACTION_COUNTS; i++) { - rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template action failed, err: %d", rc); - return rc; - } else { - Log_i("data template action=%s registered.", g_actions[i].pActionId); - } + rc = IOT_Template_Register_Action(pTemplate_client, &g_actions[i], OnActionCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template action failed, err: %d", rc); + return rc; + } else { + Log_i("data template action=%s registered.", g_actions[i].pActionId); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } #endif -static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) -{ - uintptr_t packet_id = (uintptr_t)msg->msg; +static void event_handler(void *pclient, void *handle_context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; - switch(msg->event_type) { - case MQTT_EVENT_UNDEF: - Log_i("undefined event occur."); - break; + switch (msg->event_type) { + case MQTT_EVENT_UNDEF: + Log_i("undefined event occur."); + break; - case MQTT_EVENT_DISCONNECT: - Log_i("MQTT disconnect."); - break; + case MQTT_EVENT_DISCONNECT: + Log_i("MQTT disconnect."); + break; - case MQTT_EVENT_RECONNECT: - Log_i("MQTT reconnect."); - break; + case MQTT_EVENT_RECONNECT: + Log_i("MQTT reconnect."); + break; - case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_SUBCRIBE_SUCCESS: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe success, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_TIMEOUT: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); - break; + Log_i("subscribe wait ack timeout, packet-id=%u", (unsigned int)packet_id); + break; - case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_SUBCRIBE_NACK: sg_subscribe_event_result = msg->event_type; - Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_SUCCESS: - Log_i("publish success, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_TIMEOUT: - Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); - break; - - case MQTT_EVENT_PUBLISH_NACK: - Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); - break; - default: - Log_i("Should NOT arrive here."); - break; - } + Log_i("subscribe nack, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_SUCCESS: + Log_i("publish success, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_TIMEOUT: + Log_i("publish timeout, packet-id=%u", (unsigned int)packet_id); + break; + + case MQTT_EVENT_PUBLISH_NACK: + Log_i("publish nack, packet-id=%u", (unsigned int)packet_id); + break; + default: + Log_i("Should NOT arrive here."); + break; + } } /*add user init code, like sensor init*/ static void _usr_init(void) { - Log_d("add your init code here"); + Log_d("add your init code here"); } // Setup MQTT construct parameters static int _setup_connect_init_params(TemplateInitParams* initParams) { - int ret; - - ret = HAL_GetDevInfo((void *)&sg_devInfo); - if(QCLOUD_RET_SUCCESS != ret){ - return ret; - } - - initParams->device_name = sg_devInfo.device_name; - initParams->product_id = sg_devInfo.product_id; + int ret; + + ret = HAL_GetDevInfo((void *)&sg_devInfo); + if (QCLOUD_RET_SUCCESS != ret) { + return ret; + } + + initParams->device_name = sg_devInfo.device_name; + initParams->product_id = sg_devInfo.product_id; #ifdef AUTH_MODE_CERT - /* TLS with certs*/ - char certs_dir[PATH_MAX + 1] = "certs"; - char current_path[PATH_MAX + 1]; - char *cwd = getcwd(current_path, sizeof(current_path)); - if (cwd == NULL) - { - Log_e("getcwd return NULL"); - return QCLOUD_ERR_FAILURE; - } - sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); - sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); - - initParams->cert_file = sg_cert_file; - initParams->key_file = sg_key_file; + /* TLS with certs*/ + char certs_dir[PATH_MAX + 1] = "certs"; + char current_path[PATH_MAX + 1]; + char *cwd = getcwd(current_path, sizeof(current_path)); + if (cwd == NULL) { + Log_e("getcwd return NULL"); + return QCLOUD_ERR_FAILURE; + } + sprintf(sg_cert_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_cert_file_name); + sprintf(sg_key_file, "%s/%s/%s", current_path, certs_dir, sg_devInfo.dev_key_file_name); + + initParams->cert_file = sg_cert_file; + initParams->key_file = sg_key_file; #else - initParams->device_secret = sg_devInfo.device_secret; + initParams->device_secret = sg_devInfo.device_secret; #endif - initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; - initParams->auto_connect_enable = 1; + initParams->command_timeout = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + initParams->keep_alive_interval_ms = QCLOUD_IOT_MQTT_KEEP_ALIVE_INTERNAL; + initParams->auto_connect_enable = 1; initParams->event_handle.h_fp = event_handler; return QCLOUD_RET_SUCCESS; } /*control msg from server will trigger this callback*/ -static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) +static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, uint32_t valueLength, DeviceProperty *pProperty) { int i = 0; - for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + /* handle self defined string/json here. Other properties are dealed in _handle_delta()*/ if (strcmp(sg_DataTemplate[i].data_property.key, pProperty->key) == 0) { sg_DataTemplate[i].state = eCHANGED; - Log_i("Property=%s changed", pProperty->key); + Log_i("Property=%s changed", pProperty->key); sg_control_msg_arrived = true; return; } @@ -404,205 +404,229 @@ static void OnControlMsgCallback(void *pClient, const char *pJsonValueBuffer, ui Log_e("Property=%s changed no match", pProperty->key); } -static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) { - Log_i("recv report_reply(ack=%d): %s", replyAck,pJsonDocument); +static void OnReportReplyCallback(void *pClient, Method method, ReplyAck replyAck, const char *pJsonDocument, void *pUserdata) +{ + Log_i("recv report_reply(ack=%d): %s", replyAck, pJsonDocument); } // register data template properties static int _register_data_template_property(void *pTemplate_client) { - int i,rc; - + int i, rc; + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); - if (rc != QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Destroy(pTemplate_client); - Log_e("register device data template property failed, err: %d", rc); - return rc; - } else { - Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); - } + rc = IOT_Template_Register_Property(pTemplate_client, &sg_DataTemplate[i].data_property, OnControlMsgCallback); + if (rc != QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Destroy(pTemplate_client); + Log_e("register device data template property failed, err: %d", rc); + return rc; + } else { + Log_i("data template property=%s registered.", sg_DataTemplate[i].data_property.key); + } } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } /*get property state, changed or not*/ static eDataState get_property_state(void *pProperyData) { - int i; + int i; - for(i = 0; i < TOTAL_PROPERTY_COUNT; i++){ - if(sg_DataTemplate[i].data_property.data == pProperyData){ - return sg_DataTemplate[i].state; - } - } + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + return sg_DataTemplate[i].state; + } + } - Log_e("no property matched"); - return eNOCHANGE; + Log_e("no property matched"); + return eNOCHANGE; } /*set property state, changed or no change*/ static void set_propery_state(void *pProperyData, eDataState state) -{ - int i; - - for(i = 0; i < TOTAL_PROPERTY_COUNT; i++){ - if(sg_DataTemplate[i].data_property.data == pProperyData){ - sg_DataTemplate[i].state = state; - break; - } - } +{ + int i; + + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (sg_DataTemplate[i].data_property.data == pProperyData) { + sg_DataTemplate[i].state = state; + break; + } + } } /* demo for light logic deal */ -static void deal_down_stream_user_logic(void *client,ProductDataDefine *light) +static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) { - int i; + int i; const char * ansi_color = NULL; const char * ansi_color_name = NULL; char brightness_bar[] = "||||||||||||||||||||"; int brightness_bar_len = strlen(brightness_bar); - /* light color */ - switch(light->m_color) { - case eCOLOR_RED: - ansi_color = ANSI_COLOR_RED; - ansi_color_name = " RED "; - break; - case eCOLOR_GREEN: - ansi_color = ANSI_COLOR_GREEN; - ansi_color_name = "GREEN"; - break; - case eCOLOR_BLUE: - ansi_color = ANSI_COLOR_BLUE; - ansi_color_name = " BLUE"; - break; - default: - ansi_color = ANSI_COLOR_YELLOW; - ansi_color_name = "UNKNOWN"; - break; - } - - - /* light brightness bar */ - brightness_bar_len = (light->m_brightness >= 100)?brightness_bar_len:(int)((light->m_brightness * brightness_bar_len)/100); + /* light color */ + switch (light->m_color) { + case eCOLOR_RED: + ansi_color = ANSI_COLOR_RED; + ansi_color_name = " RED "; + break; + case eCOLOR_GREEN: + ansi_color = ANSI_COLOR_GREEN; + ansi_color_name = "GREEN"; + break; + case eCOLOR_BLUE: + ansi_color = ANSI_COLOR_BLUE; + ansi_color_name = " BLUE"; + break; + default: + ansi_color = ANSI_COLOR_YELLOW; + ansi_color_name = "UNKNOWN"; + break; + } + + + /* light brightness bar */ + brightness_bar_len = (light->m_brightness >= 100) ? brightness_bar_len : (int)((light->m_brightness * brightness_bar_len) / 100); for (i = brightness_bar_len; i < strlen(brightness_bar); i++) { brightness_bar[i] = '-'; } - if(light->m_light_switch){ - /* light is on , show with the properties*/ - HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET,\ - ansi_color,ansi_color_name,brightness_bar,light->m_name); - }else{ - /* light is off */ - HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET,\ - ansi_color_name,brightness_bar,light->m_name); - } - -#ifdef EVENT_POST_ENABLED - if(eCHANGED == get_property_state(&light->m_light_switch)){ - if(light->m_light_switch){ - //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); - //strcpy(sg_message,"light on"); - //sg_status = 1; - *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; - memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); - strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data,"light on"); - }else{ - //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); - //strcpy(sg_message,"light off"); - //sg_status = 0; - *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; - memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); - strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); - } - - //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck - IOT_Event_setFlag(client, FLAG_EVENT0); - } -#endif + if (light->m_light_switch) { + /* light is on , show with the properties*/ + HAL_Printf( "%s[ lighting ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color, ansi_color_name, brightness_bar, light->m_name); + } else { + /* light is off */ + HAL_Printf( ANSI_COLOR_YELLOW"[ light is off ]|[color:%s]|[brightness:%s]|[%s]\n" ANSI_COLOR_RESET, \ + ansi_color_name, brightness_bar, light->m_name); + } + + if (eCHANGED == get_property_state(&light->m_light_switch)) { +#ifdef EVENT_POST_ENABLED + if (light->m_light_switch) { + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light on"); + } else { + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); + } + + //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck + IOT_Event_setFlag(client, FLAG_EVENT0); +#else + Log_d("light switch state changed"); +#endif + } } /*example for cycle report, you can delete this for your needs*/ static void cycle_report(Timer *reportTimer) { - int i; - - if(expired(reportTimer)){ - for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { - if(JSTRING == sg_DataTemplate[i].data_property.type){ - set_propery_state(sg_DataTemplate[i].data_property.data, eCHANGED); - }else{ - set_propery_state(&(sg_DataTemplate[i].data_property.data), eCHANGED); - } - countdown_ms(reportTimer, 5000); - } - } + int i; + + if (expired(reportTimer)) { + for (i = 0; i < TOTAL_PROPERTY_COUNT; i++) { + set_propery_state(sg_DataTemplate[i].data_property.data, eCHANGED); + countdown_ms(reportTimer, 5000); + } + } } /*get local property data, like sensor data*/ static void _refresh_local_property(void) { - //add your local property refresh logic, cycle report for example - cycle_report(&sg_reportTimer); + //add your local property refresh logic, cycle report for example + cycle_report(&sg_reportTimer); } -/* demo for up-stream code */ -static int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) +/*find propery need report*/ +static int find_wait_report_property(DeviceProperty *pReportDataList[]) { - int i, j; + int i, j; - //refresh local property - _refresh_local_property(); - - for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { - if(eCHANGED == sg_DataTemplate[i].state) { + for (i = 0, j = 0; i < TOTAL_PROPERTY_COUNT; i++) { + if (eCHANGED == sg_DataTemplate[i].state) { pReportDataList[j++] = &(sg_DataTemplate[i].data_property); - sg_DataTemplate[i].state = eNOCHANGE; + sg_DataTemplate[i].state = eNOCHANGE; } } - *pCount = j; - return (*pCount > 0)?QCLOUD_RET_SUCCESS:QCLOUD_ERR_FAILURE; + return j; +} + +/* demo for up-stream code */ +static int deal_up_stream_user_logic(DeviceProperty *pReportDataList[], int *pCount) +{ + //refresh local property + _refresh_local_property(); + + /*find propery need report*/ + *pCount = find_wait_report_property(pReportDataList); + + return (*pCount > 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } /*You should get the real info for your device, here just for example*/ static int _get_sys_info(void *handle, char *pJsonDoc, size_t sizeOfBuffer) { - /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ + /*platform info has at least one of module_hardinfo/module_softinfo/fw_ver property*/ DeviceProperty plat_info[] = { - {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, - {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, - {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, - {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, - {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, - {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, + {.key = "module_hardinfo", .type = TYPE_TEMPLATE_STRING, .data = "ESP8266"}, + {.key = "module_softinfo", .type = TYPE_TEMPLATE_STRING, .data = "V1.0"}, + {.key = "fw_ver", .type = TYPE_TEMPLATE_STRING, .data = QCLOUD_IOT_DEVICE_SDK_VERSION}, + {.key = "imei", .type = TYPE_TEMPLATE_STRING, .data = "11-22-33-44"}, + {.key = "lat", .type = TYPE_TEMPLATE_STRING, .data = "22.546015"}, + {.key = "lon", .type = TYPE_TEMPLATE_STRING, .data = "113.941125"}, {NULL, NULL, 0} //end - }; - - /*self define info*/ - DeviceProperty self_info[] = { + }; + + /*self define info*/ + DeviceProperty self_info[] = { {.key = "append_info", .type = TYPE_TEMPLATE_STRING, .data = "your self define info"}, {NULL, NULL, 0} //end - }; + }; - return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); + return IOT_Template_JSON_ConstructSysInfo(handle, pJsonDoc, sizeOfBuffer, plat_info, self_info); } +#ifdef MULTITHREAD_ENABLED +static void *template_yield_thread(void *ptr) +{ +#define THREAD_SLEEP_INTERVAL_MS 1 + int rc = QCLOUD_RET_SUCCESS; + void *pClient = ptr; + + Log_d("template yield thread start ..."); + while (true) { + rc = IOT_Template_Yield(pClient, 200); + if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + continue; + } else if (rc != QCLOUD_RET_SUCCESS && rc != QCLOUD_RET_MQTT_RECONNECTED) { + Log_e("Something goes error: %d", rc); + } + HAL_SleepMs(THREAD_SLEEP_INTERVAL_MS); + } + return NULL; +#undef THREAD_SLEEP_INTERVAL_MS +} +#endif + +int main(int argc, char **argv) +{ + + DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; + sReplyPara replyPara; + int ReportCont; + int rc; + -int main(int argc, char **argv) { - - DeviceProperty *pReportDataList[TOTAL_PROPERTY_COUNT]; - sReplyPara replyPara; - int ReportCont; - int rc; - - //init log level IOT_Log_Set_Level(eLOG_DEBUG); @@ -610,11 +634,11 @@ int main(int argc, char **argv) { TemplateInitParams init_params = DEFAULT_TEMPLATE_INIT_PARAMS; rc = _setup_connect_init_params(&init_params); if (rc != QCLOUD_RET_SUCCESS) { - Log_e("init params err,rc=%d", rc); - return rc; - } + Log_e("init params err,rc=%d", rc); + return rc; + } - void *client = IOT_Template_Construct(&init_params); + void *client = IOT_Template_Construct(&init_params, NULL); if (client != NULL) { Log_i("Cloud Device Construct Success"); } else { @@ -622,8 +646,17 @@ int main(int argc, char **argv) { return QCLOUD_ERR_FAILURE; } - //usr init - _usr_init(); +#ifdef MULTITHREAD_ENABLED + pthread_t *yield_thread_t = NULL; + yield_thread_t = HAL_ThreadCreate(0, 0, "template_yield_thread", template_yield_thread, client); + if (yield_thread_t == NULL) { + Log_e("create yield thread fail"); + goto exit; + } +#endif + + //usr init + _usr_init(); //init data template _init_data_template(); @@ -634,102 +667,109 @@ int main(int argc, char **argv) { Log_i("Register data template propertys Success"); } else { Log_e("Register data template propertys Failed: %d", rc); - return rc; + goto exit; } - //register data template actions here + //register data template actions here #ifdef ACTION_ENABLED rc = _register_data_template_action(client); if (rc == QCLOUD_RET_SUCCESS) { Log_i("Register data template actions Success"); } else { Log_e("Register data template actions Failed: %d", rc); - return rc; + goto exit; } #endif - //report device info, then you can manager your product by these info, like position - rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); - if(QCLOUD_RET_SUCCESS == rc){ - rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Report system info fail, err: %d", rc); - return rc; - } - }else{ - Log_e("Get system info fail, err: %d", rc); - } - - //get the property changed during offline - rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Get data status fail, err: %d", rc); - return rc; - }else{ - Log_d("Get data status success"); - } - - //init a timer for cycle report, you could delete it or not for your needs - InitTimer(&sg_reportTimer); - - while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT - || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { + //report device info, then you can manager your product by these info, like position + rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); + if (QCLOUD_RET_SUCCESS == rc) { + rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Report system info fail, err: %d", rc); + } + } else { + Log_e("Get system info fail, err: %d", rc); + } + + //get the property changed during offline + rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Get data status fail, err: %d", rc); + } else { + Log_d("Get data status success"); + } + + //init a timer for cycle report, you could delete it or not for your needs + InitTimer(&sg_reportTimer); + + while (IOT_Template_IsConnected(client) || rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT + || rc == QCLOUD_RET_MQTT_RECONNECTED || QCLOUD_RET_SUCCESS == rc) { +#ifndef MULTITHREAD_ENABLED rc = IOT_Template_Yield(client, 200); if (rc == QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT) { HAL_SleepMs(1000); continue; + } else if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Exit loop caused of errCode: %d", rc); } - else if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Exit loop caused of errCode: %d", rc); - } - - /* handle control msg from server */ - if (sg_control_msg_arrived) { - deal_down_stream_user_logic(client, &sg_ProductData); - /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ - memset((char *)&replyPara, 0, sizeof(sReplyPara)); - replyPara.code = eDEAL_SUCCESS; - replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; - replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured - - rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); +#endif + + /* handle control msg from server */ + if (sg_control_msg_arrived) { + deal_down_stream_user_logic(client, &sg_ProductData); + /* control msg should reply, otherwise server treat device didn't receive and retain the msg which would be get by get status*/ + memset((char *)&replyPara, 0, sizeof(sReplyPara)); + replyPara.code = eDEAL_SUCCESS; + replyPara.timeout_ms = QCLOUD_IOT_MQTT_COMMAND_TIMEOUT; + replyPara.status_msg[0] = '\0'; //add extra info to replyPara.status_msg when error occured + + rc = IOT_Template_ControlReply(client, sg_data_report_buffer, sg_data_report_buffersize, &replyPara); if (rc == QCLOUD_RET_SUCCESS) { - Log_d("Contol msg reply success"); - sg_control_msg_arrived = false; + Log_d("Contol msg reply success"); + sg_control_msg_arrived = false; } else { Log_e("Contol msg reply failed, err: %d", rc); - } - } - - /*report msg to server*/ - /*report the lastest properties's status*/ - if(QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)){ - - rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); - if (rc == QCLOUD_RET_SUCCESS) { - rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, - OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc == QCLOUD_RET_SUCCESS) { - - Log_i("data template reporte success"); - } else { - Log_e("data template reporte failed, err: %d", rc); - } - } else { - Log_e("construct reporte data failed, err: %d", rc); - } - - } - -#ifdef EVENT_POST_ENABLED - eventPostCheck(client); + } + } + + /*report msg to server*/ + /*report the lastest properties's status*/ + if (QCLOUD_RET_SUCCESS == deal_up_stream_user_logic(pReportDataList, &ReportCont)) { + + rc = IOT_Template_JSON_ConstructReportArray(client, sg_data_report_buffer, sg_data_report_buffersize, ReportCont, pReportDataList); + if (rc == QCLOUD_RET_SUCCESS) { + rc = IOT_Template_Report(client, sg_data_report_buffer, sg_data_report_buffersize, + OnReportReplyCallback, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc == QCLOUD_RET_SUCCESS) { + + Log_i("data template reporte success"); + } else { + Log_e("data template reporte failed, err: %d", rc); + } + } else { + Log_e("construct reporte data failed, err: %d", rc); + } + + } + +#ifdef EVENT_POST_ENABLED + eventPostCheck(client); #endif HAL_SleepMs(1000); } +exit: + rc = IOT_Template_Destroy(client); +#ifdef MULTITHREAD_ENABLED + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } +#endif + return rc; } diff --git a/sdk_src/CMakeLists.txt b/sdk_src/CMakeLists.txt index b5dcad9..5561b58 100644 --- a/sdk_src/CMakeLists.txt +++ b/sdk_src/CMakeLists.txt @@ -1,4 +1,3 @@ -# �������ã�������Ҫ�����Դ�ļ� # UTILS file(GLOB src_utils ${CMAKE_CURRENT_SOURCE_DIR}/utils/*.c) @@ -11,6 +10,12 @@ list(APPEND src_sdk ${src_mqtt}) file(GLOB src_data_template ${CMAKE_CURRENT_SOURCE_DIR}/services/data_template/*.c) list(APPEND src_sdk ${src_data_template}) +# gateway +if(${FEATURE_GATEWAY_ENABLED} STREQUAL "ON") + file(GLOB src_gateway ${CMAKE_CURRENT_SOURCE_DIR}/services/gateway/*.c) + list(APPEND src_sdk ${src_gateway}) +endif() + # ota mqtt if(${FEATURE_OTA_COMM_ENABLED} STREQUAL "ON") file(GLOB src_mqtt_ota @@ -52,7 +57,7 @@ file(GLOB src_network ${CMAKE_CURRENT_SOURCE_DIR}/network/*.c) list(APPEND src_sdk ${src_network}) -# ���ɿ⣬��ȡԴ�� +# code output if(${EXTRACT_SRC} STREQUAL "ON") file(COPY ${src_sdk} DESTINATION ${PROJECT_SOURCE_DIR}/output/qcloud_iot_c_sdk/sdk_src/) endif() diff --git a/sdk_src/internal_inc/mqtt_client.h b/sdk_src/internal_inc/mqtt_client.h index b33f846..f3334a2 100644 --- a/sdk_src/internal_inc/mqtt_client.h +++ b/sdk_src/internal_inc/mqtt_client.h @@ -40,7 +40,7 @@ extern "C" { #define MAX_CONN_ID_LEN (6) /* Max number of topic subscribed */ -#define MAX_MESSAGE_HANDLERS (10) +#define MAX_MESSAGE_HANDLERS (20) /* Max number in repub list */ #define MAX_REPUB_NUM (20) diff --git a/sdk_src/network/at_socket/at_client.c b/sdk_src/network/at_socket/at_client.c index 17970b9..77dcc75 100644 --- a/sdk_src/network/at_socket/at_client.c +++ b/sdk_src/network/at_socket/at_client.c @@ -31,14 +31,14 @@ #define AT_RESP_END_FAIL "FAIL" #define AT_END_CR_LF "\r\n" -sRingbuff g_ring_buff; +sRingbuff g_ring_buff; static at_client sg_at_client; static uint32_t sg_flags = 0; /*this function can be called only by at_uart_isr, just push the data to the at_client ringbuffer.*/ void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len) { - (void)ring_buff_push_data(&g_ring_buff, pdata, len); + (void)ring_buff_push_data(&g_ring_buff, pdata, len); } /** @@ -46,38 +46,36 @@ void at_client_uart_rx_isr_cb(uint8_t *pdata, uint8_t len) * * @param buf_size the maximum response buffer size * @param line_num the number of setting response lines - * = 0: the response data will auto return when received 'OK' or 'eLOG_ERROR' - * != 0: the response data will return when received setting lines number data + * = 0: the response data will auto return when received 'OK' or 'eLOG_ERROR' + * != 0: the response data will return when received setting lines number data * @param timeout the maximum response time * * @return != NULL: response object - * = NULL: no memory + * = NULL: no memory */ at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t timeout) { - at_response_t resp = NULL; - - resp = (at_response_t) HAL_Malloc(sizeof(at_response)); - if (resp == NULL) - { - Log_e("AT create response object failed! No memory for response object!"); - return NULL; - } - - resp->buf = (char *) HAL_Malloc(buf_size); - if (resp->buf == NULL) - { - Log_e("AT create response object failed! No memory for response buffer!"); - HAL_Free(resp); - return NULL; - } - - resp->buf_size = buf_size; - resp->line_num = line_num; - resp->line_counts = 0; - resp->timeout = timeout; - - return resp; + at_response_t resp = NULL; + + resp = (at_response_t) HAL_Malloc(sizeof(at_response)); + if (resp == NULL) { + Log_e("AT create response object failed! No memory for response object!"); + return NULL; + } + + resp->buf = (char *) HAL_Malloc(buf_size); + if (resp->buf == NULL) { + Log_e("AT create response object failed! No memory for response buffer!"); + HAL_Free(resp); + return NULL; + } + + resp->buf_size = buf_size; + resp->line_num = line_num; + resp->line_counts = 0; + resp->timeout = timeout; + + return resp; } /** @@ -87,13 +85,11 @@ at_response_t at_create_resp(uint32_t buf_size, uint32_t line_num, uint32_t time */ void at_delete_resp(at_response_t resp) { - if (resp && resp->buf) - { + if (resp && resp->buf) { HAL_Free(resp->buf); } - if (resp) - { + if (resp) { HAL_Free(resp); resp = NULL; } @@ -102,43 +98,43 @@ void at_delete_resp(at_response_t resp) void at_delayms(uint32_t delayms) { #ifdef AT_OS_USED - HAL_SleepMs(delayms); + HAL_SleepMs(delayms); #else - HAL_DelayMs(delayms); + HAL_DelayMs(delayms); #endif } void at_setFlag(uint32_t flag) { - sg_flags |= flag&0xffffffff; + sg_flags |= flag & 0xffffffff; } void at_clearFlag(uint32_t flag) { - sg_flags &= (~flag)&0xffffffff; + sg_flags &= (~flag) & 0xffffffff; } uint32_t at_getFlag(void) { - return sg_flags; + return sg_flags; } bool at_waitFlag(uint32_t flag, uint32_t timeout) { - Timer timer; - bool Ret = false; - - countdown_ms(&timer, timeout); - do{ - if(flag == (at_getFlag()&flag)){ - Ret = true; - break; - } - at_delayms(1); - }while(!expired(&timer)); - - return Ret; + Timer timer; + bool Ret = false; + + countdown_ms(&timer, timeout); + do { + if (flag == (at_getFlag()&flag)) { + Ret = true; + break; + } + at_delayms(1); + } while (!expired(&timer)); + + return Ret; } /** @@ -148,35 +144,32 @@ bool at_waitFlag(uint32_t flag, uint32_t timeout) * @param resp_line line number, start from '1' * * @return != NULL: response line buffer - * = NULL: input response line error + * = NULL: input response line error */ const char *at_resp_get_line(at_response_t resp, uint32_t resp_line) { - char *resp_buf = resp->buf; - char *resp_line_buf = NULL; - int line_num = 1; + char *resp_buf = resp->buf; + char *resp_line_buf = NULL; + int line_num = 1; - POINTER_SANITY_CHECK(resp, NULL); + POINTER_SANITY_CHECK(resp, NULL); - if (resp_line > resp->line_counts || resp_line <= 0) - { - Log_e("AT response get line failed! Input response line(%d) error!", resp_line); - return NULL; - } + if (resp_line > resp->line_counts || resp_line <= 0) { + Log_e("AT response get line failed! Input response line(%d) error!", resp_line); + return NULL; + } - for (line_num = 1; line_num <= resp->line_counts; line_num++) - { - if (resp_line == line_num) - { - resp_line_buf = resp_buf; + for (line_num = 1; line_num <= resp->line_counts; line_num++) { + if (resp_line == line_num) { + resp_line_buf = resp_buf; - return resp_line_buf; - } + return resp_line_buf; + } - resp_buf += strlen(resp_buf) + 1; - } + resp_buf += strlen(resp_buf) + 1; + } - return NULL; + return NULL; } /** @@ -186,30 +179,28 @@ const char *at_resp_get_line(at_response_t resp, uint32_t resp_line) * @param keyword query keyword * * @return != NULL: response line buffer - * = NULL: no matching data + * = NULL: no matching data */ const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword) { - char *resp_buf = resp->buf; - char *resp_line_buf = NULL; - int line_num = 1; + char *resp_buf = resp->buf; + char *resp_line_buf = NULL; + int line_num = 1; - POINTER_SANITY_CHECK(resp, NULL); - POINTER_SANITY_CHECK(keyword, NULL); + POINTER_SANITY_CHECK(resp, NULL); + POINTER_SANITY_CHECK(keyword, NULL); - for (line_num = 1; line_num <= resp->line_counts; line_num++) - { - if (strstr(resp_buf, keyword)) - { - resp_line_buf = resp_buf; + for (line_num = 1; line_num <= resp->line_counts; line_num++) { + if (strstr(resp_buf, keyword)) { + resp_line_buf = resp_buf; - return resp_line_buf; - } + return resp_line_buf; + } - resp_buf += strlen(resp_buf) + 1; - } + resp_buf += strlen(resp_buf) + 1; + } - return NULL; + return NULL; } /** @@ -220,30 +211,29 @@ const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword) * @param resp_expr response buffer expression * * @return -1 : input response line number error or get line buffer error - * 0 : parsed without match - * >0 : the number of arguments successfully parsed + * 0 : parsed without match + * >0 : the number of arguments successfully parsed */ int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char *resp_expr, ...) { - va_list args; - int resp_args_num = 0; - const char *resp_line_buf = NULL; + va_list args; + int resp_args_num = 0; + const char *resp_line_buf = NULL; - POINTER_SANITY_CHECK(resp, -1); - POINTER_SANITY_CHECK(resp_expr, -1); - if ((resp_line_buf = at_resp_get_line(resp, resp_line)) == NULL) - { - return -1; - } + POINTER_SANITY_CHECK(resp, -1); + POINTER_SANITY_CHECK(resp_expr, -1); + if ((resp_line_buf = at_resp_get_line(resp, resp_line)) == NULL) { + return -1; + } - va_start(args, resp_expr); + va_start(args, resp_expr); - resp_args_num = vsscanf(resp_line_buf, resp_expr, args); + resp_args_num = vsscanf(resp_line_buf, resp_expr, args); - va_end(args); + va_end(args); - return resp_args_num; + return resp_args_num; } /** @@ -254,30 +244,29 @@ int at_resp_parse_line_args(at_response_t resp, uint32_t resp_line, const char * * @param resp_expr response buffer expression * * @return -1 : input keyword error or get line buffer error - * 0 : parsed without match - * >0 : the number of arguments successfully parsed + * 0 : parsed without match + * >0 : the number of arguments successfully parsed */ int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const char *resp_expr, ...) { - va_list args; - int resp_args_num = 0; - const char *resp_line_buf = NULL; + va_list args; + int resp_args_num = 0; + const char *resp_line_buf = NULL; - POINTER_SANITY_CHECK(resp, -1); - POINTER_SANITY_CHECK(resp_expr, -1); - if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == NULL) - { - return -1; - } + POINTER_SANITY_CHECK(resp, -1); + POINTER_SANITY_CHECK(resp_expr, -1); + if ((resp_line_buf = at_resp_get_line_by_kw(resp, keyword)) == NULL) { + return -1; + } - va_start(args, resp_expr); + va_start(args, resp_expr); - resp_args_num = vsscanf(resp_line_buf, resp_expr, args); + resp_args_num = vsscanf(resp_line_buf, resp_expr, args); - va_end(args); + va_end(args); - return resp_args_num; + return resp_args_num; } /** @@ -288,206 +277,189 @@ int at_resp_parse_line_args_by_kw(at_response_t resp, const char *keyword, const * @param cmd_expr AT commands expression * * @return 0 : success - * -1 : response status error - * -2 : wait timeout + * -1 : response status error + * -2 : wait timeout */ int at_obj_exec_cmd(at_response_t resp, const char *cmd_expr, ...) { - POINTER_SANITY_CHECK(cmd_expr, QCLOUD_ERR_INVAL); - - va_list args; - int cmd_size = 0; - int result = QCLOUD_RET_SUCCESS; - const char *cmd = NULL; - at_client_t client = at_client_get(); - - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return QCLOUD_ERR_FAILURE; - } - - HAL_MutexLock(client->lock); - resp->line_counts = 0; - client->resp_status = AT_RESP_OK; - client->resp = resp; - - va_start(args, cmd_expr); - at_vprintfln(cmd_expr, args); - va_end(args); - - if (resp != NULL) - { + POINTER_SANITY_CHECK(cmd_expr, QCLOUD_ERR_INVAL); + + va_list args; + int cmd_size = 0; + int result = QCLOUD_RET_SUCCESS; + const char *cmd = NULL; + at_client_t client = at_client_get(); + + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return QCLOUD_ERR_FAILURE; + } + + HAL_MutexLock(client->lock); + resp->line_counts = 0; + client->resp_status = AT_RESP_OK; + client->resp = resp; + + va_start(args, cmd_expr); + at_vprintfln(cmd_expr, args); + va_end(args); + + if (resp != NULL) { #ifndef AT_OS_USED - client->resp_status = AT_RESP_TIMEOUT; - at_client_yeild(NULL, resp->timeout); - if (client->resp_status != AT_RESP_OK) - { - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } + client->resp_status = AT_RESP_TIMEOUT; + at_client_yeild(NULL, resp->timeout); + if (client->resp_status != AT_RESP_OK) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } #else - if(HAL_SemaphoreWait(client->resp_sem, resp->timeout) < 0){ - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } - - if (client->resp_status != AT_RESP_OK) - { - cmd = at_get_last_cmd(&cmd_size); - Log_e("execute command (%.*s) failed!", cmd_size, cmd); - result = QCLOUD_ERR_FAILURE; - goto __exit; - } -#endif - } + if (HAL_SemaphoreWait(client->resp_sem, resp->timeout) < 0) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } + + if (client->resp_status != AT_RESP_OK) { + cmd = at_get_last_cmd(&cmd_size); + Log_e("execute command (%.*s) failed!", cmd_size, cmd); + result = QCLOUD_ERR_FAILURE; + goto __exit; + } +#endif + } __exit: - client->resp = NULL; - HAL_MutexUnlock(client->lock); - - return result; + client->resp = NULL; + HAL_MutexUnlock(client->lock); + + return result; } /** * Send data to AT server, send data don't have end sign(eg: \r\n). * * @param client current AT client object - * @param buf send data buffer - * @param size send fixed data size - * @param timeout timeout for send + * @param buf send data buffer + * @param size send fixed data size + * @param timeout timeout for send * * @return >0: send data size - * =0: send failed + * =0: send failed */ int at_client_send(at_client_t client, const char *buf, int size, uint32_t timeout) { - POINTER_SANITY_CHECK(buf, 0); + POINTER_SANITY_CHECK(buf, 0); - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return 0; - } + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return 0; + } #ifdef AT_DEBUG - at_print_raw_cmd("send", buf, size); + at_print_raw_cmd("send", buf, size); #endif - return HAL_AT_Uart_Send((void *)buf, size); + return HAL_AT_Uart_Send((void *)buf, size); } static int at_client_getchar(at_client_t client, char *pch, uint32_t timeout) { - int ret = QCLOUD_RET_SUCCESS; - Timer timer; - - countdown_ms(&timer, timeout); - do - { - -#ifndef AT_UART_RECV_IRQ - if(0 == HAL_AT_Uart_Recv((void *)pch, 1, NULL, timeout)) - { - continue; - } + int ret = QCLOUD_RET_SUCCESS; + Timer timer; + + countdown_ms(&timer, timeout); + do { + +#ifndef AT_UART_RECV_IRQ + if (0 == HAL_AT_Uart_Recv((void *)pch, 1, NULL, timeout)) { + continue; + } #else - if(0 == ring_buff_pop_data(client->pRingBuff, (uint8_t *)pch, 1)) //push data to ringbuff @ AT_UART_IRQHandler - { - continue; - } -#endif - else - { - break; - } + if (0 == ring_buff_pop_data(client->pRingBuff, (uint8_t *)pch, 1)) { //push data to ringbuff @ AT_UART_IRQHandler + continue; + } +#endif + else { + break; + } } while (!expired(&timer)); - if(expired(&timer)) - { - ret = QCLOUD_ERR_FAILURE; - } - - return ret; + if (expired(&timer)) { + ret = QCLOUD_ERR_FAILURE; + } + + return ret; } /** * AT client receive fixed-length data. * * @param client current AT client object - * @param buf receive data buffer - * @param size receive fixed data size + * @param buf receive data buffer + * @param size receive fixed data size * @param timeout receive data timeout (ms) * * @note this function can only be used in execution function of URC data * * @return >0: receive data size - * =0: receive failed + * =0: receive failed */ int at_client_obj_recv(char *buf, int size, int timeout) { - int read_idx = 0; - int result = QCLOUD_RET_SUCCESS; - char ch; - - POINTER_SANITY_CHECK(buf, 0); - at_client_t client = at_client_get(); - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return 0; - } - - while (1) - { - if (read_idx < size) - { - result = at_client_getchar(client, &ch, timeout); - if (result != QCLOUD_RET_SUCCESS) - { - Log_e("AT Client receive failed, uart device get data error(%d)", result); - return 0; - } - - buf[read_idx++] = ch; - } - else - { - break; - } - } + int read_idx = 0; + int result = QCLOUD_RET_SUCCESS; + char ch; + + POINTER_SANITY_CHECK(buf, 0); + at_client_t client = at_client_get(); + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return 0; + } + + while (1) { + if (read_idx < size) { + result = at_client_getchar(client, &ch, timeout); + if (result != QCLOUD_RET_SUCCESS) { + Log_e("AT Client receive failed, uart device get data error(%d)", result); + return 0; + } + + buf[read_idx++] = ch; + } else { + break; + } + } #ifdef AT_DEBUG - at_print_raw_cmd("urc_recv", buf, size); + at_print_raw_cmd("urc_recv", buf, size); #endif - return read_idx; + return read_idx; } /** - * AT client set end sign. + * AT client set end sign. * * @param client current AT client object * @param ch the end sign, can not be used when it is '\0' */ void at_set_end_sign(char ch) { - at_client_t client = at_client_get(); - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return; - } - - client->end_sign = ch; + at_client_t client = at_client_get(); + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return; + } + + client->end_sign = ch; } /** @@ -499,22 +471,20 @@ void at_set_end_sign(char ch) */ void at_set_urc_table(at_client_t client, const at_urc_t urc_table, uint32_t table_sz) { - int idx; - - if (client == NULL) - { - Log_e("input AT Client object is NULL, please create or get AT Client object!"); - return; - } - - for (idx = 0; idx < table_sz; idx++) - { - POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_prefix); - POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_suffix); - } - - client->urc_table = urc_table; - client->urc_table_size = table_sz; + int idx; + + if (client == NULL) { + Log_e("input AT Client object is NULL, please create or get AT Client object!"); + return; + } + + for (idx = 0; idx < table_sz; idx++) { + POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_prefix); + POINTER_SANITY_CHECK_RTN(urc_table[idx].cmd_suffix); + } + + client->urc_table = urc_table; + client->urc_table_size = table_sz; } at_client_t at_client_get(void) @@ -524,366 +494,300 @@ at_client_t at_client_get(void) static const at_urc *get_urc_obj(at_client_t client) { - int i, prefix_len, suffix_len; - int buf_sz; - char *buffer = NULL; - - if (client->urc_table == NULL) - { - return NULL; - } - - buffer = client->recv_buffer; - buf_sz = client->cur_recv_len; - - for (i = 0; i < client->urc_table_size; i++) - { - prefix_len = strlen(client->urc_table[i].cmd_prefix); - suffix_len = strlen(client->urc_table[i].cmd_suffix); - if (buf_sz < prefix_len + suffix_len) - { - continue; - } - if ((prefix_len ? !strncmp(buffer, client->urc_table[i].cmd_prefix, prefix_len) : 1) - && (suffix_len ? !strncmp(buffer + buf_sz - suffix_len, client->urc_table[i].cmd_suffix, suffix_len) : 1)) - { - //Log_d("matched:%s", client->urc_table[i].cmd_prefix); - return &client->urc_table[i]; - } - } - - return NULL; + int i, prefix_len, suffix_len; + int buf_sz; + char *buffer = NULL; + + if (client->urc_table == NULL) { + return NULL; + } + + buffer = client->recv_buffer; + buf_sz = client->cur_recv_len; + + for (i = 0; i < client->urc_table_size; i++) { + prefix_len = strlen(client->urc_table[i].cmd_prefix); + suffix_len = strlen(client->urc_table[i].cmd_suffix); + if (buf_sz < prefix_len + suffix_len) { + continue; + } + if ((prefix_len ? !strncmp(buffer, client->urc_table[i].cmd_prefix, prefix_len) : 1) + && (suffix_len ? !strncmp(buffer + buf_sz - suffix_len, client->urc_table[i].cmd_suffix, suffix_len) : 1)) { + //Log_d("matched:%s", client->urc_table[i].cmd_prefix); + return &client->urc_table[i]; + } + } + + return NULL; } static int at_recv_readline(at_client_t client) { - int read_len = 0; - char ch = 0, last_ch = 0; - bool is_full = false; - int ret; - - memset(client->recv_buffer, 0x00, client->recv_bufsz); - client->cur_recv_len = 0; - - while (1) - { - ret = at_client_getchar(client, &ch, GET_CHAR_TIMEOUT_MS); - - if(QCLOUD_RET_SUCCESS != ret) - { - return -1; - } - - if (read_len < client->recv_bufsz) - { - client->recv_buffer[read_len++] = ch; - client->cur_recv_len = read_len; - } - else - { - is_full = true; - } - - /* is newline or URC data */ - if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign) || get_urc_obj(client)) - { - - if (is_full) - { - Log_e("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); - memset(client->recv_buffer, 0x00, client->recv_bufsz); - client->cur_recv_len = 0; - ring_buff_flush(client->pRingBuff); - return -1; - } - break; - } - last_ch = ch; - } + int read_len = 0; + char ch = 0, last_ch = 0; + bool is_full = false; + int ret; + + memset(client->recv_buffer, 0x00, client->recv_bufsz); + client->cur_recv_len = 0; + + while (1) { + ret = at_client_getchar(client, &ch, GET_CHAR_TIMEOUT_MS); + + if (QCLOUD_RET_SUCCESS != ret) { + return -1; + } + + if (read_len < client->recv_bufsz) { + client->recv_buffer[read_len++] = ch; + client->cur_recv_len = read_len; + } else { + is_full = true; + } + + /* is newline or URC data */ + if ((ch == '\n' && last_ch == '\r') || (client->end_sign != 0 && ch == client->end_sign) || get_urc_obj(client)) { + + if (is_full) { + Log_e("read line failed. The line data length is out of buffer size(%d)!", client->recv_bufsz); + memset(client->recv_buffer, 0x00, client->recv_bufsz); + client->cur_recv_len = 0; + ring_buff_flush(client->pRingBuff); + return -1; + } + break; + } + last_ch = ch; + } #ifdef AT_DEBUG - at_print_raw_cmd("recvline", client->recv_buffer, read_len); + at_print_raw_cmd("recvline", client->recv_buffer, read_len); #endif - return read_len; + return read_len; } #ifdef AT_OS_USED static void *client_parser(void *userContex) { - int resp_buf_len = 0; - const at_urc *urc; - int line_counts = 0; - at_client_t client = at_client_get(); - - Log_d("client_parser start..."); - - while(1) - { - if (at_recv_readline(client) > 0) - { - -#ifdef AT_DEBUG - const char *cmd = NULL; - int cmdsize = 0; - cmd = at_get_last_cmd(&cmdsize); - Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); -#endif - if ((urc = get_urc_obj(client)) != NULL) - { - /* current receive is request, try to execute related operations */ - if (urc->func != NULL) - { - urc->func(client->recv_buffer, client->cur_recv_len); - } - - } - else if (client->resp != NULL) - { - if(client->end_sign != 0) // handle endsign - { - if(client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) - { - continue; - } - else - { - goto exit; - } - } - - /* current receive is response */ - client->recv_buffer[client->cur_recv_len - 1] = '\0'; - if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) - { - /* copy response lines, separated by '\0' */ - memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); - resp_buf_len += client->cur_recv_len; - - line_counts++; - } - else - { - client->resp_status = AT_RESP_BUFF_FULL; - Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); - } - /* check response result */ - if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 - && client->resp->line_num == 0) - { - /* get the end data by response result, return response state END_OK. */ - client->resp_status = AT_RESP_OK; - } - else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) - || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) - { - client->resp_status = AT_RESP_eLOG_ERROR; - } - else if (line_counts == client->resp->line_num && client->resp->line_num) - { - /* get the end data by response line, return response state END_OK.*/ - client->resp_status = AT_RESP_OK; - } - else - { - continue; - } -exit: - client->resp->line_counts = line_counts; - client->resp = NULL; - resp_buf_len = 0; - line_counts = 0; - HAL_SemaphorePost(client->resp_sem); - } - else - { -// Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); - } - } - else - { - //Log_d("read no new line"); - } - - } - return NULL; + int resp_buf_len = 0; + const at_urc *urc; + int line_counts = 0; + at_client_t client = at_client_get(); + + Log_d("client_parser start..."); + + while (1) { + if (at_recv_readline(client) > 0) { + +#ifdef AT_DEBUG + const char *cmd = NULL; + int cmdsize = 0; + cmd = at_get_last_cmd(&cmdsize); + Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); +#endif + if ((urc = get_urc_obj(client)) != NULL) { + /* current receive is request, try to execute related operations */ + if (urc->func != NULL) { + urc->func(client->recv_buffer, client->cur_recv_len); + } + + } else if (client->resp != NULL) { + if (client->end_sign != 0) { // handle endsign + if (client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) { + continue; + } else { + goto exit; + } + } + + /* current receive is response */ + client->recv_buffer[client->cur_recv_len - 1] = '\0'; + if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) { + /* copy response lines, separated by '\0' */ + memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); + resp_buf_len += client->cur_recv_len; + + line_counts++; + } else { + client->resp_status = AT_RESP_BUFF_FULL; + Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); + } + /* check response result */ + if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 + && client->resp->line_num == 0) { + /* get the end data by response result, return response state END_OK. */ + client->resp_status = AT_RESP_OK; + } else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) + || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) { + client->resp_status = AT_RESP_eLOG_ERROR; + } else if (line_counts == client->resp->line_num && client->resp->line_num) { + /* get the end data by response line, return response state END_OK.*/ + client->resp_status = AT_RESP_OK; + } else { + continue; + } + exit: + client->resp->line_counts = line_counts; + client->resp = NULL; + resp_buf_len = 0; + line_counts = 0; + HAL_SemaphorePost(client->resp_sem); + } else { +// Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); + } + } else { + //Log_d("read no new line"); + } + + } + return NULL; } #else void at_client_yeild(at_urc *expect_urc, uint32_t timeout) { - int resp_buf_len = 0; - const at_urc *urc; - int line_counts = 0; - int prefix_len; - int suffix_len; - Timer timer; - at_client_t client = at_client_get(); - - Log_d("Entry..."); - countdown_ms(&timer, timeout); - do - { - if (at_recv_readline(client) > 0) - { -#ifdef AT_DEBUG - const char *cmd = NULL; - int cmdsize = 0; - cmd = at_get_last_cmd(&cmdsize); - Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); + int resp_buf_len = 0; + const at_urc *urc; + int line_counts = 0; + int prefix_len; + int suffix_len; + Timer timer; + at_client_t client = at_client_get(); + + Log_d("Entry..."); + countdown_ms(&timer, timeout); + do { + if (at_recv_readline(client) > 0) { +#ifdef AT_DEBUG + const char *cmd = NULL; + int cmdsize = 0; + cmd = at_get_last_cmd(&cmdsize); + Log_d("last_cmd:(%.*s), readline:%s", cmdsize, cmd, client->recv_buffer); #endif - if ((urc = get_urc_obj(client)) != NULL) - { - /* current receive is request, try to execute related operations */ - if (urc->func != NULL) - { - urc->func(client->recv_buffer, client->cur_recv_len); - } - - /*expect urc matched then break*/ - if(expect_urc != NULL) - { - prefix_len = strlen(expect_urc->cmd_prefix); - suffix_len = strlen(expect_urc->cmd_suffix); - if ((prefix_len ? !strncmp(urc->cmd_prefix, expect_urc->cmd_prefix, prefix_len) : 1) - && (suffix_len ? !strncmp(urc->cmd_suffix, expect_urc->cmd_suffix, suffix_len) : 1)){ - client->resp_status = AT_RESP_OK; - break; - } - } - } - else if (client->resp != NULL) - { - if(client->end_sign != 0) // handle endsign - { - if(client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) - { - continue; - } - else - { - client->resp_status = AT_RESP_OK; - client->resp->line_counts = line_counts; - client->resp = NULL; - //client->resp_notice = true; - resp_buf_len = 0; - line_counts = 0; - break; - } - } - - /* current receive is response */ - client->recv_buffer[client->cur_recv_len - 1] = '\0'; - if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) - { - /* copy response lines, separated by '\0' */ - memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); - resp_buf_len += client->cur_recv_len; - - line_counts++; - } - else - { - client->resp_status = AT_RESP_BUFF_FULL; - Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); - } - /* check response result */ - if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 - && client->resp->line_num == 0) - { - /* get the end data by response result, return response state END_OK. */ - client->resp_status = AT_RESP_OK; - } - else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) - || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) - { - client->resp_status = AT_RESP_eLOG_ERROR; - } - else if (line_counts == client->resp->line_num && client->resp->line_num) - { - /* get the end data by response line, return response state END_OK.*/ - client->resp_status = AT_RESP_OK; - } - else - { if(!expired(&timer)) - { - continue; - } - else - { - break; - } - } - - client->resp->line_counts = line_counts; - client->resp = NULL; - //client->resp_notice = true; - resp_buf_len = 0; - line_counts = 0; - break; - } - else - { - // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); - } - } - else - { - //Log_d("read no new line"); - } - }while(!expired(&timer)); + if ((urc = get_urc_obj(client)) != NULL) { + /* current receive is request, try to execute related operations */ + if (urc->func != NULL) { + urc->func(client->recv_buffer, client->cur_recv_len); + } + + /*expect urc matched then break*/ + if (expect_urc != NULL) { + prefix_len = strlen(expect_urc->cmd_prefix); + suffix_len = strlen(expect_urc->cmd_suffix); + if ((prefix_len ? !strncmp(urc->cmd_prefix, expect_urc->cmd_prefix, prefix_len) : 1) + && (suffix_len ? !strncmp(urc->cmd_suffix, expect_urc->cmd_suffix, suffix_len) : 1)) { + client->resp_status = AT_RESP_OK; + break; + } + } + } else if (client->resp != NULL) { + if (client->end_sign != 0) { // handle endsign + if (client->recv_buffer[client->cur_recv_len - 1] != client->end_sign) { + continue; + } else { + client->resp_status = AT_RESP_OK; + client->resp->line_counts = line_counts; + client->resp = NULL; + //client->resp_notice = true; + resp_buf_len = 0; + line_counts = 0; + break; + } + } + + /* current receive is response */ + client->recv_buffer[client->cur_recv_len - 1] = '\0'; + if (resp_buf_len + client->cur_recv_len < client->resp->buf_size) { + /* copy response lines, separated by '\0' */ + memcpy(client->resp->buf + resp_buf_len, client->recv_buffer, client->cur_recv_len); + resp_buf_len += client->cur_recv_len; + + line_counts++; + } else { + client->resp_status = AT_RESP_BUFF_FULL; + Log_e("Read response buffer failed. The Response buffer size is out of buffer size(%d)!", client->resp->buf_size); + } + /* check response result */ + if (memcmp(client->recv_buffer, AT_RESP_END_OK, strlen(AT_RESP_END_OK)) == 0 + && client->resp->line_num == 0) { + /* get the end data by response result, return response state END_OK. */ + client->resp_status = AT_RESP_OK; + } else if (strstr(client->recv_buffer, AT_RESP_END_eLOG_ERROR) + || (memcmp(client->recv_buffer, AT_RESP_END_FAIL, strlen(AT_RESP_END_FAIL)) == 0)) { + client->resp_status = AT_RESP_eLOG_ERROR; + } else if (line_counts == client->resp->line_num && client->resp->line_num) { + /* get the end data by response line, return response state END_OK.*/ + client->resp_status = AT_RESP_OK; + } else { + if (!expired(&timer)) { + continue; + } else { + break; + } + } + + client->resp->line_counts = line_counts; + client->resp = NULL; + //client->resp_notice = true; + resp_buf_len = 0; + line_counts = 0; + break; + } else { + // Log_d("unrecognized line: %.*s", client->cur_recv_len, client->recv_buffer); + } + } else { + //Log_d("read no new line"); + } + } while (!expired(&timer)); } #endif /* initialize the client parameters */ int at_client_para_init(at_client_t client) { - client->lock = HAL_MutexCreate(); - if(NULL == client->lock) - { - Log_e("create lock err"); - return QCLOUD_ERR_FAILURE; - } - -#ifdef AT_OS_USED - client->resp_sem = HAL_SemaphoreCreate(); - if (NULL == client->resp_sem) - { - Log_e("create sem err"); - return QCLOUD_ERR_FAILURE; - } - - client->parser = client_parser; -#endif - - char * ringBuff = HAL_Malloc(RING_BUFF_LEN); - if(NULL == ringBuff) - { - Log_e("malloc ringbuff err"); - return QCLOUD_ERR_FAILURE; - } - ring_buff_init(&g_ring_buff, ringBuff, RING_BUFF_LEN); - - char * recvBuff = HAL_Malloc(CLINET_BUFF_LEN); - if(NULL == recvBuff) - { - Log_e("malloc recvbuff err"); - return QCLOUD_ERR_FAILURE; - } - client->recv_buffer = recvBuff; - - - client->pRingBuff = &g_ring_buff; - client->recv_bufsz = CLINET_BUFF_LEN; - client->cur_recv_len = 0; - - client->resp = NULL; - - client->urc_table = NULL; - client->urc_table_size = 0; - client->end_sign = 0; - - return QCLOUD_RET_SUCCESS; + client->lock = HAL_MutexCreate(); + if (NULL == client->lock) { + Log_e("create lock err"); + return QCLOUD_ERR_FAILURE; + } + +#ifdef AT_OS_USED + client->resp_sem = HAL_SemaphoreCreate(); + if (NULL == client->resp_sem) { + Log_e("create sem err"); + return QCLOUD_ERR_FAILURE; + } + + client->parser = client_parser; +#endif + + char * ringBuff = HAL_Malloc(RING_BUFF_LEN); + if (NULL == ringBuff) { + Log_e("malloc ringbuff err"); + return QCLOUD_ERR_FAILURE; + } + ring_buff_init(&g_ring_buff, ringBuff, RING_BUFF_LEN); + + char * recvBuff = HAL_Malloc(CLINET_BUFF_LEN); + if (NULL == recvBuff) { + Log_e("malloc recvbuff err"); + return QCLOUD_ERR_FAILURE; + } + client->recv_buffer = recvBuff; + + + client->pRingBuff = &g_ring_buff; + client->recv_bufsz = CLINET_BUFF_LEN; + client->cur_recv_len = 0; + + client->resp = NULL; + + client->urc_table = NULL; + client->urc_table_size = 0; + client->end_sign = 0; + + return QCLOUD_RET_SUCCESS; } /** @@ -894,74 +798,69 @@ int at_client_para_init(at_client_t client) */ int at_client_init(at_client_t *pClient) { - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - at_client_t client; - int result; - - client = at_client_get(); - - if(NULL == client) - { - Log_e("no at client get"); - result = QCLOUD_ERR_FAILURE; - goto exit; - } - - if(AT_STATUS_INITIALIZED == client->status) - { - Log_e("at client has been initialized"); - result = QCLOUD_ERR_FAILURE; - goto exit; - } - - result = at_client_para_init(client); - if (result == QCLOUD_RET_SUCCESS) - { - Log_d("AT client(V%s) initialize success.", AT_FRAME_VERSION); - client->status = AT_STATUS_INITIALIZED; - *pClient = client; - -#ifdef AT_OS_USED - // create thread for at parser - if(NULL != client->parser) - { -#define AT_PARSER_THREAD_STACK 6144 -#define AT_PARSER_THREAD_PRIORITY 0 - - client->thread_t = HAL_ThreadCreate( - AT_PARSER_THREAD_STACK, \ - AT_PARSER_THREAD_PRIORITY, - "at_client_parser", - client->parser, \ - client); - - result = client->thread_t ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; - if(QCLOUD_RET_SUCCESS == result){ - Log_d("create at_parser thread success!"); - }else{ - Log_d("create at_parser thread fail!"); - } - -#undef AT_PARSER_THREAD_STACK -#undef AT_PARSER_THREAD_PRIORITY - } -#endif - - } - else - { - *pClient = NULL; - client->status = AT_STATUS_UNINITIALIZED; - Log_e("AT client(V%s) initialize failed(%d).", AT_FRAME_VERSION, result); - } + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + at_client_t client; + int result; + + client = at_client_get(); + + if (NULL == client) { + Log_e("no at client get"); + result = QCLOUD_ERR_FAILURE; + goto exit; + } + + if (AT_STATUS_INITIALIZED == client->status) { + Log_e("at client has been initialized"); + result = QCLOUD_ERR_FAILURE; + goto exit; + } + + result = at_client_para_init(client); + if (result == QCLOUD_RET_SUCCESS) { + Log_d("AT client(V%s) initialize success.", AT_FRAME_VERSION); + client->status = AT_STATUS_INITIALIZED; + *pClient = client; + +#ifdef AT_OS_USED + // create thread for at parser + if (NULL != client->parser) { +#define AT_PARSER_THREAD_STACK 6144 +#define AT_PARSER_THREAD_PRIORITY 0 + + client->thread_t = HAL_ThreadCreate( + AT_PARSER_THREAD_STACK, \ + AT_PARSER_THREAD_PRIORITY, + "at_client_parser", + client->parser, \ + client); + + result = client->thread_t ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; + if (QCLOUD_RET_SUCCESS == result) { + Log_d("create at_parser thread success!"); + } else { + Log_d("create at_parser thread fail!"); + } + +#undef AT_PARSER_THREAD_STACK +#undef AT_PARSER_THREAD_PRIORITY + } +#endif + + } else { + *pClient = NULL; + client->status = AT_STATUS_UNINITIALIZED; + Log_e("AT client(V%s) initialize failed(%d).", AT_FRAME_VERSION, result); + } exit: - return result; + return result; } -int at_client_deinit(at_client_t pClient){ +int at_client_deinit(at_client_t pClient) +{ - //TO DO: - return QCLOUD_RET_SUCCESS; + //TO DO: + return QCLOUD_RET_SUCCESS; } diff --git a/sdk_src/network/at_socket/at_socket_inf.c b/sdk_src/network/at_socket/at_socket_inf.c index 837e208..4abd05b 100644 --- a/sdk_src/network/at_socket/at_socket_inf.c +++ b/sdk_src/network/at_socket/at_socket_inf.c @@ -18,12 +18,12 @@ #include #include -#include +#include #include "qcloud_iot_export.h" #include "qcloud_iot_import.h" -#include "utils_param_check.h" +#include "utils_param_check.h" #include "at_socket_inf.h" /** The global array of available at */ @@ -35,83 +35,83 @@ static void *sg_at_socket_mutex; /**at device driver ops*/ static at_device_op_t *sg_at_device_ops = NULL; -#define MAX_RECV_PKT_PER_CHAIN (10) +#define MAX_RECV_PKT_PER_CHAIN (10) static at_device_op_t * _at_device_op_get(void) { - return sg_at_device_ops; + return sg_at_device_ops; } static int _at_socket_ctx_free(at_socket_ctx_t *pCtx) { - POINTER_SANITY_CHECK(pCtx, QCLOUD_ERR_INVAL); - - pCtx->fd = UNUSED_SOCKET; - pCtx->net_type = eNET_DEFAULT; - - if(pCtx->recvpkt_list){ - list_destroy(pCtx->recvpkt_list); - pCtx->recvpkt_list = NULL; - } - - if(pCtx->recv_lock){ - HAL_MutexDestroy(pCtx->recv_lock); - pCtx->recv_lock = NULL; - } - - return QCLOUD_RET_SUCCESS; + POINTER_SANITY_CHECK(pCtx, QCLOUD_ERR_INVAL); + + pCtx->fd = UNUSED_SOCKET; + pCtx->net_type = eNET_DEFAULT; + + if (pCtx->recvpkt_list) { + list_destroy(pCtx->recvpkt_list); + pCtx->recvpkt_list = NULL; + } + + if (pCtx->recv_lock) { + HAL_MutexDestroy(pCtx->recv_lock); + pCtx->recv_lock = NULL; + } + + return QCLOUD_RET_SUCCESS; } static at_socket_ctx_t *_at_socket_ctx_alloc(void) { - int i; - - for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { - if (at_socket_ctxs[i].state == eSOCKET_CLOSED) { - - at_socket_ctxs[i].net_type = eNET_DEFAULT; - at_socket_ctxs[i].send_timeout_ms = AT_SOCKET_SEND_TIMEOUT_MS; - at_socket_ctxs[i].recv_timeout_ms = AT_SOCKET_RECV_TIMEOUT_MS; - at_socket_ctxs[i].dev_op = _at_device_op_get(); - - at_socket_ctxs[i].recv_lock = HAL_MutexCreate(); - if(NULL == at_socket_ctxs[i].recv_lock){ - Log_e("create recv lock fail"); - goto exit; - } - at_socket_ctxs[i].recvpkt_list = list_new(); - if(NULL != at_socket_ctxs[i].recvpkt_list){ - at_socket_ctxs[i].recvpkt_list->free = HAL_Free; - }else { - Log_e("no memory to allocate recvpkt_list"); - goto exit; - } - - at_socket_ctxs[i].state = eSOCKET_ALLOCED; - return &at_socket_ctxs[i]; - } - } + int i; + + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + if (at_socket_ctxs[i].state == eSOCKET_CLOSED) { + + at_socket_ctxs[i].net_type = eNET_DEFAULT; + at_socket_ctxs[i].send_timeout_ms = AT_SOCKET_SEND_TIMEOUT_MS; + at_socket_ctxs[i].recv_timeout_ms = AT_SOCKET_RECV_TIMEOUT_MS; + at_socket_ctxs[i].dev_op = _at_device_op_get(); + + at_socket_ctxs[i].recv_lock = HAL_MutexCreate(); + if (NULL == at_socket_ctxs[i].recv_lock) { + Log_e("create recv lock fail"); + goto exit; + } + at_socket_ctxs[i].recvpkt_list = list_new(); + if (NULL != at_socket_ctxs[i].recvpkt_list) { + at_socket_ctxs[i].recvpkt_list->free = HAL_Free; + } else { + Log_e("no memory to allocate recvpkt_list"); + goto exit; + } + + at_socket_ctxs[i].state = eSOCKET_ALLOCED; + return &at_socket_ctxs[i]; + } + } exit: - if(i < MAX_AT_SOCKET_NUM){ - _at_socket_ctx_free(&at_socket_ctxs[i]); - } - - return NULL; + if (i < MAX_AT_SOCKET_NUM) { + _at_socket_ctx_free(&at_socket_ctxs[i]); + } + + return NULL; } static at_socket_ctx_t *_at_socket_find(int fd) { - int i; - - for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { - if (at_socket_ctxs[i].fd == fd) { - return &at_socket_ctxs[i]; - } - } - - return NULL; + int i; + + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + if (at_socket_ctxs[i].fd == fd) { + return &at_socket_ctxs[i]; + } + } + + return NULL; } /* get a block to the AT socket receive list*/ @@ -119,15 +119,15 @@ static int _at_recvpkt_put(List *rlist, const char *ptr, size_t length) { at_recv_pkt *pkt = NULL; - if(rlist->len > MAX_RECV_PKT_PER_CHAIN){ - Log_e("Too many recv packets wait for read"); - HAL_Free(pkt); - return QCLOUD_ERR_FAILURE; - } + if (rlist->len > MAX_RECV_PKT_PER_CHAIN) { + Log_e("Too many recv packets wait for read"); + HAL_Free(pkt); + return QCLOUD_ERR_FAILURE; + } pkt = (at_recv_pkt *) HAL_Malloc(sizeof(struct at_recv_pkt)); - if (pkt == NULL){ - Log_e("No memory for receive packet table!"); + if (pkt == NULL) { + Log_e("No memory for receive packet table!"); return QCLOUD_ERR_FAILURE; } @@ -135,281 +135,281 @@ static int _at_recvpkt_put(List *rlist, const char *ptr, size_t length) pkt->bfsz_index = 0; pkt->buff = (char *) ptr; - ListNode *node = list_node_new(pkt); + ListNode *node = list_node_new(pkt); if (NULL == node) { Log_e("run list_node_new is error!"); - HAL_Free(pkt); + HAL_Free(pkt); return QCLOUD_ERR_FAILURE; } list_rpush(rlist, node); - + return length; } /* get a block from AT socket receive list */ static int _at_recvpkt_get(List *pkt_list, char *buff, size_t len) { - ListIterator *iter; - ListNode *node = NULL; - at_recv_pkt *pkt; - size_t readlen = 0, page_len = 0; - POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); - + ListIterator *iter; + ListNode *node = NULL; + at_recv_pkt *pkt; + size_t readlen = 0, page_len = 0; + POINTER_SANITY_CHECK(buff, QCLOUD_ERR_INVAL); + if (pkt_list->len) { - iter = list_iterator_new(pkt_list, LIST_HEAD); + iter = list_iterator_new(pkt_list, LIST_HEAD); if (NULL == iter) { - Log_e("new listiterator fail"); - return QCLOUD_ERR_TCP_READ_FAIL; + Log_e("new listiterator fail"); + return QCLOUD_ERR_TCP_READ_FAIL; } - /*traverse recv pktlist*/ - do{ - node = list_iterator_next(iter); + /*traverse recv pktlist*/ + do { + node = list_iterator_next(iter); if (!node) { - break; + break; } - /*get recv packet*/ - pkt = (at_recv_pkt *)(node->val); - if(!pkt){ - Log_e("pkt is invalid!"); - list_remove(pkt_list, node); - continue; - } - - page_len = pkt->bfsz_totle - pkt->bfsz_index; - if(page_len >= (len - readlen)){ - memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, (len - readlen)); - pkt->bfsz_index += len - readlen; - readlen = len; - break; - }else{ - memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, page_len); - readlen += page_len; - - /*delete pkt after read*/ - HAL_Free(pkt->buff); - list_remove(pkt_list, node); - } - }while(1); + /*get recv packet*/ + pkt = (at_recv_pkt *)(node->val); + if (!pkt) { + Log_e("pkt is invalid!"); + list_remove(pkt_list, node); + continue; + } + + page_len = pkt->bfsz_totle - pkt->bfsz_index; + if (page_len >= (len - readlen)) { + memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, (len - readlen)); + pkt->bfsz_index += len - readlen; + readlen = len; + break; + } else { + memcpy(buff + readlen, pkt->buff + pkt->bfsz_index, page_len); + readlen += page_len; + + /*delete pkt after read*/ + HAL_Free(pkt->buff); + list_remove(pkt_list, node); + } + } while (1); list_iterator_destroy(iter); } - return readlen; + return readlen; } static void _at_socket_recv_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) { - POINTER_SANITY_CHECK_RTN(buff); - at_socket_ctx_t *pAtSocket; - - if(event == AT_SOCKET_EVT_RECV){ - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); - if(_at_recvpkt_put(pAtSocket->recvpkt_list, buff, bfsz) < 0){ - Log_e("put recv package to list fail"); - HAL_Free(buff); - } - HAL_MutexUnlock(sg_at_socket_mutex); - } + POINTER_SANITY_CHECK_RTN(buff); + at_socket_ctx_t *pAtSocket; + + if (event == AT_SOCKET_EVT_RECV) { + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); + if (_at_recvpkt_put(pAtSocket->recvpkt_list, buff, bfsz) < 0) { + Log_e("put recv package to list fail"); + HAL_Free(buff); + } + HAL_MutexUnlock(sg_at_socket_mutex); + } } static void _at_socket_closed_cb(int fd, at_socket_evt_t event, char *buff, size_t bfsz) { - //fancyxu - at_socket_ctx_t *pAtSocket; - pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); - - if(event == AT_SOCKET_EVT_CLOSED) { - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket->state = eSOCKET_CLOSED; - _at_socket_ctx_free(pAtSocket); - HAL_MutexUnlock(sg_at_socket_mutex); - } + //fancyxu + at_socket_ctx_t *pAtSocket; + pAtSocket = _at_socket_find(fd + MAX_AT_SOCKET_NUM); + + if (event == AT_SOCKET_EVT_CLOSED) { + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket->state = eSOCKET_CLOSED; + _at_socket_ctx_free(pAtSocket); + HAL_MutexUnlock(sg_at_socket_mutex); + } } int at_device_op_register(at_device_op_t *device_op) { - int rc; - - if(NULL == sg_at_device_ops){ - sg_at_device_ops = device_op; - rc = QCLOUD_RET_SUCCESS; - }else{ - Log_e("pre device op already register"); - rc = QCLOUD_ERR_FAILURE; - } - - return rc; + int rc; + + if (NULL == sg_at_device_ops) { + sg_at_device_ops = device_op; + rc = QCLOUD_RET_SUCCESS; + } else { + Log_e("pre device op already register"); + rc = QCLOUD_ERR_FAILURE; + } + + return rc; } int at_socket_init(void) { - int i; - int rc = QCLOUD_RET_SUCCESS; - - for(i = 0; i < MAX_AT_SOCKET_NUM; i++){ - at_socket_ctxs[i].fd = UNUSED_SOCKET; - at_socket_ctxs[i].state = eSOCKET_CLOSED; - at_socket_ctxs[i].dev_op = NULL; - at_socket_ctxs[i].recvpkt_list = NULL; - } - - sg_at_socket_mutex = HAL_MutexCreate(); - if (sg_at_socket_mutex == NULL) { - Log_e("create sg_at_socket_mutex fail \n"); - rc = QCLOUD_ERR_FAILURE; - } - - if(NULL != sg_at_device_ops){ - if(QCLOUD_RET_SUCCESS == sg_at_device_ops->init()){ - Log_d("at device %s init success", (NULL == sg_at_device_ops->deviceName)?"noname":sg_at_device_ops->deviceName); - sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_RECV, _at_socket_recv_cb); - sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_CLOSED, _at_socket_closed_cb); - }else{ - Log_e("at device %s init fail", (NULL == sg_at_device_ops->deviceName)?"noname":sg_at_device_ops->deviceName); - } - } - - return rc; + int i; + int rc = QCLOUD_RET_SUCCESS; + + for (i = 0; i < MAX_AT_SOCKET_NUM; i++) { + at_socket_ctxs[i].fd = UNUSED_SOCKET; + at_socket_ctxs[i].state = eSOCKET_CLOSED; + at_socket_ctxs[i].dev_op = NULL; + at_socket_ctxs[i].recvpkt_list = NULL; + } + + sg_at_socket_mutex = HAL_MutexCreate(); + if (sg_at_socket_mutex == NULL) { + Log_e("create sg_at_socket_mutex fail \n"); + rc = QCLOUD_ERR_FAILURE; + } + + if (NULL != sg_at_device_ops) { + if (QCLOUD_RET_SUCCESS == sg_at_device_ops->init()) { + Log_d("at device %s init success", (NULL == sg_at_device_ops->deviceName) ? "noname" : sg_at_device_ops->deviceName); + sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_RECV, _at_socket_recv_cb); + sg_at_device_ops->set_event_cb(AT_SOCKET_EVT_CLOSED, _at_socket_closed_cb); + } else { + Log_e("at device %s init fail", (NULL == sg_at_device_ops->deviceName) ? "noname" : sg_at_device_ops->deviceName); + } + } + + return rc; } int at_socket_parse_domain(const char *host_name, char *host_ip, size_t host_ip_len) { - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->parse_domain, QCLOUD_ERR_INVAL); + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->parse_domain, QCLOUD_ERR_INVAL); - return at_op->parse_domain(host_name, host_ip, host_ip_len); + return at_op->parse_domain(host_name, host_ip, host_ip_len); } int at_socket_get_local_mac(char *macbuff, size_t bufflen) { - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->get_local_mac, QCLOUD_ERR_INVAL); - - return at_op->get_local_mac(macbuff, bufflen); + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->get_local_mac, QCLOUD_ERR_INVAL); + + return at_op->get_local_mac(macbuff, bufflen); } int at_socket_get_local_ip(char *ip, size_t iplen, char *gw, size_t gwlen, char *mask, size_t masklen) { - at_device_op_t *at_op = _at_device_op_get(); - POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(at_op->get_local_ip, QCLOUD_ERR_INVAL); - - return at_op->get_local_ip(ip, iplen, gw, gwlen, mask, masklen); + at_device_op_t *at_op = _at_device_op_get(); + POINTER_SANITY_CHECK(at_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(at_op->get_local_ip, QCLOUD_ERR_INVAL); + + return at_op->get_local_ip(ip, iplen, gw, gwlen, mask, masklen); } int at_socket_connect(const char *host, uint16_t port, eNetProto eProto) -{ - at_socket_ctx_t *pAtSocket; - int fd; - - HAL_MutexLock(sg_at_socket_mutex); - pAtSocket = _at_socket_ctx_alloc(); - HAL_MutexUnlock(sg_at_socket_mutex); - - if((NULL == pAtSocket) || (NULL == pAtSocket->dev_op)|| (NULL == pAtSocket->dev_op->connect)){ - Log_e("alloc socket fail"); - return QCLOUD_ERR_FAILURE; - } - - fd = pAtSocket->dev_op->connect(host, port, eProto); - if(fd < 0){ - Log_e("dev_op connect fail,pls check at device driver!"); - _at_socket_ctx_free(pAtSocket); - }else{ - pAtSocket->fd = fd + MAX_AT_SOCKET_NUM; - pAtSocket->state = eSOCKET_CONNECTED; - } - - return pAtSocket->fd; +{ + at_socket_ctx_t *pAtSocket; + int fd; + + HAL_MutexLock(sg_at_socket_mutex); + pAtSocket = _at_socket_ctx_alloc(); + HAL_MutexUnlock(sg_at_socket_mutex); + + if ((NULL == pAtSocket) || (NULL == pAtSocket->dev_op) || (NULL == pAtSocket->dev_op->connect)) { + Log_e("alloc socket fail"); + return QCLOUD_ERR_FAILURE; + } + + fd = pAtSocket->dev_op->connect(host, port, eProto); + if (fd < 0) { + Log_e("dev_op connect fail,pls check at device driver!"); + _at_socket_ctx_free(pAtSocket); + } else { + pAtSocket->fd = fd + MAX_AT_SOCKET_NUM; + pAtSocket->state = eSOCKET_CONNECTED; + } + + return pAtSocket->fd; } int at_socket_close(int fd) -{ - at_socket_ctx_t *pAtSocket; - - - pAtSocket = _at_socket_find(fd); - if(NULL==pAtSocket) { //server close the connection - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - } - - int rc; - if((eSOCKET_CONNECTED == pAtSocket->state) && (NULL != pAtSocket->dev_op) && (NULL != pAtSocket->dev_op->close)) { - rc = pAtSocket->dev_op->close(pAtSocket->fd - MAX_AT_SOCKET_NUM); - } else { - rc = QCLOUD_ERR_FAILURE; - } - return rc; +{ + at_socket_ctx_t *pAtSocket; + + + pAtSocket = _at_socket_find(fd); + if (NULL == pAtSocket) { //server close the connection + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } + + int rc; + if ((eSOCKET_CONNECTED == pAtSocket->state) && (NULL != pAtSocket->dev_op) && (NULL != pAtSocket->dev_op->close)) { + rc = pAtSocket->dev_op->close(pAtSocket->fd - MAX_AT_SOCKET_NUM); + } else { + rc = QCLOUD_ERR_FAILURE; + } + return rc; } int at_socket_send(int fd, const void *buf, size_t len) { - at_socket_ctx_t *pAtSocket; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->send, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - }else{ - return pAtSocket->dev_op->send(fd - MAX_AT_SOCKET_NUM, buf, len); - } + at_socket_ctx_t *pAtSocket; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->send, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } else { + return pAtSocket->dev_op->send(fd - MAX_AT_SOCKET_NUM, buf, len); + } } int at_socket_recv(int fd, void *buf, size_t len) { - at_socket_ctx_t *pAtSocket; - size_t recv_len; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_READ_FAIL; - }else{ - HAL_MutexLock(pAtSocket->recv_lock); - - //call at device recv driver for os and nonos - if(pAtSocket->recvpkt_list->len == 0) { - if(pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, pAtSocket->recv_timeout_ms) != QCLOUD_RET_SUCCESS) { - Log_e("at device recv err"); //do not return yet - } - } - - /* receive packet list last transmission of remaining data */ - recv_len = _at_recvpkt_get(pAtSocket->recvpkt_list, (char *)buf, len); - HAL_MutexUnlock(pAtSocket->recv_lock); - } - - return recv_len; + at_socket_ctx_t *pAtSocket; + size_t recv_len; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_READ_FAIL; + } else { + HAL_MutexLock(pAtSocket->recv_lock); + + //call at device recv driver for os and nonos + if (pAtSocket->recvpkt_list->len == 0) { + if (pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, pAtSocket->recv_timeout_ms) != QCLOUD_RET_SUCCESS) { + Log_e("at device recv err"); //do not return yet + } + } + + /* receive packet list last transmission of remaining data */ + recv_len = _at_recvpkt_get(pAtSocket->recvpkt_list, (char *)buf, len); + HAL_MutexUnlock(pAtSocket->recv_lock); + } + + return recv_len; } int at_socket_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) { - at_socket_ctx_t *pAtSocket; - - pAtSocket = _at_socket_find(fd); - POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); - - if(pAtSocket->state != eSOCKET_CONNECTED){ - Log_e("socket was closed"); - return QCLOUD_ERR_TCP_PEER_SHUTDOWN; - }else{ - return pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, timeout); - } + at_socket_ctx_t *pAtSocket; + + pAtSocket = _at_socket_find(fd); + POINTER_SANITY_CHECK(pAtSocket, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAtSocket->dev_op->recv_timeout, QCLOUD_ERR_INVAL); + + if (pAtSocket->state != eSOCKET_CONNECTED) { + Log_e("socket was closed"); + return QCLOUD_ERR_TCP_PEER_SHUTDOWN; + } else { + return pAtSocket->dev_op->recv_timeout(fd - MAX_AT_SOCKET_NUM, buf, len, timeout); + } } diff --git a/sdk_src/network/at_socket/at_utils.c b/sdk_src/network/at_socket/at_utils.c index 1a9d4e9..c2b1a95 100644 --- a/sdk_src/network/at_socket/at_utils.c +++ b/sdk_src/network/at_socket/at_utils.c @@ -38,29 +38,21 @@ void at_print_raw_cmd(const char *name, const char *buf, int size) { int i, j; - for (i = 0; i < size; i += WIDTH_SIZE) - { + for (i = 0; i < size; i += WIDTH_SIZE) { HAL_Printf("%s: %04X-%04X: ", name, i, i + WIDTH_SIZE); - for (j = 0; j < WIDTH_SIZE; j++) - { - if (i + j < size) - { + for (j = 0; j < WIDTH_SIZE; j++) { + if (i + j < size) { HAL_Printf("%02X ", buf[i + j]); - } - else - { + } else { HAL_Printf(" "); } - if ((j + 1) % 8 == 0) - { + if ((j + 1) % 8 == 0) { HAL_Printf(" "); } } HAL_Printf(" "); - for (j = 0; j < WIDTH_SIZE; j++) - { - if (i + j < size) - { + for (j = 0; j < WIDTH_SIZE; j++) { + if (i + j < size) { HAL_Printf("%c", __is_print(buf[i + j]) ? buf[i + j] : '.'); } } @@ -98,214 +90,210 @@ int at_vprintfln(const char *format, va_list args) /** * at_sscanf - Unformat a buffer into a list of arguments, rewrite sscanf - * @buf: input buffer - * @fmt: format of buffer - * @args: arguments + * @buf: input buffer + * @fmt: format of buffer + * @args: arguments */ int at_sscanf(const char * buf, const char * fmt, va_list args) { - const char *str = buf; - char *next; - int num = 0; - int qualifier; - int base; - int field_width = -1; - int is_sign = 0; - - while(*fmt && *str) { - /* skip any white space in format */ - /* white space in format matchs any amount of - * white space, including none, in the input. - */ - if (isspace(*fmt)) { - while (isspace(*fmt)) - ++fmt; - while (isspace(*str)) - ++str; - } - - /* anything that is not a conversion must match exactly */ - if (*fmt != '%' && *fmt) { - if (*fmt++ != *str++) - break; - continue; - } - - if (!*fmt) - break; - ++fmt; - - /* skip this conversion. - * advance both strings to next white space - */ - if (*fmt == '*') { - while (!isspace(*fmt) && *fmt) - fmt++; - while (!isspace(*str) && *str) - str++; - continue; - } - - /* get field width */ - if (isdigit(*fmt)) - field_width = atoi(fmt); - - /* get conversion qualifier */ - qualifier = -1; - if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') { - qualifier = *fmt; - fmt++; - } - base = 10; - is_sign = 0; - - if (!*fmt || !*str) - break; - - switch(*fmt++) { - case 'c': - { - char *s = (char *) va_arg(args,char*); - if (field_width == -1) - field_width = 1; - do { - *s++ = *str++; - } while(field_width-- > 0 && *str); - num++; - } - continue; - case 's': - { - char *s = (char *) va_arg(args, char *); - if(field_width == -1) - field_width = INT_MAX; - /* first, skip leading white space in buffer */ - while (isspace(*str)) - str++; - - /* now copy until next white space */ - while (*str && ((*str) != ',')) { - if(isspace(*str)){ - str++; - }else{ - *s++ = *str++; - } - } - *s = '\0'; - num++; - } - continue; - /* S for special handling for MQTTPUB JSON content */ - case 'S': - { - char *s = (char *) va_arg(args, char *); - if(field_width == -1) - field_width = INT_MAX; - /* first, skip leading white space in buffer */ - while (isspace(*str)) - str++; - - /* now copy until next white space */ - while (*str) { - if(isspace(*str)){ - str++; - }else{ - *s++ = *str++; - } - } - *s = '\0'; - num++; - } - continue; - case 'n': - /* return number of characters read so far */ - { - int *i = (int *)va_arg(args,int*); - *i = str - buf; - } - continue; - case 'o': - base = 8; - break; - case 'x': - case 'X': - base = 16; - break; - case 'd': - case 'i': - is_sign = 1; - case 'u': - break; - case '%': - /* looking for '%' in str */ - if (*str++ != '%') - return num; - continue; - default: - /* invalid format; stop here */ - return num; - } - - /* have some sort of integer conversion. - * first, skip white space in buffer. - */ - while (isspace(*str)) - str++; - - if (!*str || !isdigit(*str)) - break; - - switch(qualifier) { - case 'h': - if (is_sign) { - short *s = (short *) va_arg(args,short *); - *s = (short) strtol(str,&next,base); - } else { - unsigned short *s = (unsigned short *) va_arg(args, unsigned short *); - *s = (unsigned short) strtoul(str, &next, base); - } - break; - case 'l': - if (is_sign) { - long *l = (long *) va_arg(args,long *); - *l = strtol(str,&next,base); - } else { - unsigned long *l = (unsigned long*) va_arg(args,unsigned long*); - *l = strtoul(str,&next,base); - } - break; - case 'L': - if (is_sign) { - long long *l = (long long*) va_arg(args,long long *); - *l = strtoll(str,&next,base); - } else { - unsigned long long *l = (unsigned long long*) va_arg(args,unsigned long long*); - *l = strtoull(str,&next,base); - } - break; - case 'Z': - { - unsigned long *s = (unsigned long*) va_arg(args,unsigned long*); - *s = (unsigned long) strtoul(str,&next,base); - } - break; - default: - if (is_sign) { - int *i = (int *) va_arg(args, int*); - *i = (int) strtol(str,&next,base); - } else { - unsigned int *i = (unsigned int*) va_arg(args, unsigned int*); - *i = (unsigned int) strtoul(str,&next,base); - } - break; - } - num++; - - if (!next) - break; - str = next; - } - return num; + const char *str = buf; + char *next; + int num = 0; + int qualifier; + int base; + int field_width = -1; + int is_sign = 0; + + while (*fmt && *str) { + /* skip any white space in format */ + /* white space in format matchs any amount of + * white space, including none, in the input. + */ + if (isspace(*fmt)) { + while (isspace(*fmt)) + ++fmt; + while (isspace(*str)) + ++str; + } + + /* anything that is not a conversion must match exactly */ + if (*fmt != '%' && *fmt) { + if (*fmt++ != *str++) + break; + continue; + } + + if (!*fmt) + break; + ++fmt; + + /* skip this conversion. + * advance both strings to next white space + */ + if (*fmt == '*') { + while (!isspace(*fmt) && *fmt) + fmt++; + while (!isspace(*str) && *str) + str++; + continue; + } + + /* get field width */ + if (isdigit(*fmt)) + field_width = atoi(fmt); + + /* get conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'Z') { + qualifier = *fmt; + fmt++; + } + base = 10; + is_sign = 0; + + if (!*fmt || !*str) + break; + + switch (*fmt++) { + case 'c': { + char *s = (char *) va_arg(args, char*); + if (field_width == -1) + field_width = 1; + do { + *s++ = *str++; + } while (field_width-- > 0 && *str); + num++; + } + continue; + case 's': { + char *s = (char *) va_arg(args, char *); + if (field_width == -1) + field_width = INT_MAX; + /* first, skip leading white space in buffer */ + while (isspace(*str)) + str++; + + /* now copy until next white space */ + while (*str && ((*str) != ',')) { + if (isspace(*str)) { + str++; + } else { + *s++ = *str++; + } + } + *s = '\0'; + num++; + } + continue; + /* S for special handling for MQTTPUB JSON content */ + case 'S': { + char *s = (char *) va_arg(args, char *); + if (field_width == -1) + field_width = INT_MAX; + /* first, skip leading white space in buffer */ + while (isspace(*str)) + str++; + + /* now copy until next white space */ + while (*str) { + if (isspace(*str)) { + str++; + } else { + *s++ = *str++; + } + } + *s = '\0'; + num++; + } + continue; + case 'n': + /* return number of characters read so far */ + { + int *i = (int *)va_arg(args, int*); + *i = str - buf; + } + continue; + case 'o': + base = 8; + break; + case 'x': + case 'X': + base = 16; + break; + case 'd': + case 'i': + is_sign = 1; + case 'u': + break; + case '%': + /* looking for '%' in str */ + if (*str++ != '%') + return num; + continue; + default: + /* invalid format; stop here */ + return num; + } + + /* have some sort of integer conversion. + * first, skip white space in buffer. + */ + while (isspace(*str)) + str++; + + if (!*str || !isdigit(*str)) + break; + + switch (qualifier) { + case 'h': + if (is_sign) { + short *s = (short *) va_arg(args, short *); + *s = (short) strtol(str, &next, base); + } else { + unsigned short *s = (unsigned short *) va_arg(args, unsigned short *); + *s = (unsigned short) strtoul(str, &next, base); + } + break; + case 'l': + if (is_sign) { + long *l = (long *) va_arg(args, long *); + *l = strtol(str, &next, base); + } else { + unsigned long *l = (unsigned long*) va_arg(args, unsigned long*); + *l = strtoul(str, &next, base); + } + break; + case 'L': + if (is_sign) { + long long *l = (long long*) va_arg(args, long long *); + *l = strtoll(str, &next, base); + } else { + unsigned long long *l = (unsigned long long*) va_arg(args, unsigned long long*); + *l = strtoull(str, &next, base); + } + break; + case 'Z': { + unsigned long *s = (unsigned long*) va_arg(args, unsigned long*); + *s = (unsigned long) strtoul(str, &next, base); + } + break; + default: + if (is_sign) { + int *i = (int *) va_arg(args, int*); + *i = (int) strtol(str, &next, base); + } else { + unsigned int *i = (unsigned int*) va_arg(args, unsigned int*); + *i = (unsigned int) strtoul(str, &next, base); + } + break; + } + num++; + + if (!next) + break; + str = next; + } + return num; } /** @@ -316,7 +304,7 @@ int at_sscanf(const char * buf, const char * fmt, va_list args) * * @return -1 : parse arguments failed * 0 : parse without match - * >0 : The number of arguments successfully parsed + * >0 : The number of arguments successfully parsed */ int at_req_parse_args(const char *req_args, const char *req_expr, ...) { @@ -328,9 +316,9 @@ int at_req_parse_args(const char *req_args, const char *req_expr, ...) va_start(args, req_expr); - //req_args_num = vsscanf(req_args, req_expr, args); + //req_args_num = vsscanf(req_args, req_expr, args); req_args_num = at_sscanf(req_args, req_expr, args); - + va_end(args); @@ -339,34 +327,30 @@ int at_req_parse_args(const char *req_args, const char *req_expr, ...) void at_strip(char *str, const char patten) { - char *start, *end; - - start = str; - end = str + strlen(str) -1; - - if(*str == patten) - { - start++; - } - - if(*end == patten) - { - *end-- = '\0'; - } - - strcpy(str, start); + char *start, *end; + + start = str; + end = str + strlen(str) - 1; + + if (*str == patten) { + start++; + } + + if (*end == patten) { + *end-- = '\0'; + } + + strcpy(str, start); } void chr_strip(char *str, const char patten) { - char *end = str + strlen(str); - - while(*str != '\0') - { - if(*str == patten) - { - memmove(str, str+1, end - str); - } - str++; - } + char *end = str + strlen(str); + + while (*str != '\0') { + if (*str == patten) { + memmove(str, str + 1, end - str); + } + str++; + } } diff --git a/sdk_src/network/at_socket/network_at_tcp.c b/sdk_src/network/at_socket/network_at_tcp.c index 09a97a3..326bb32 100644 --- a/sdk_src/network/at_socket/network_at_tcp.c +++ b/sdk_src/network/at_socket/network_at_tcp.c @@ -32,119 +32,112 @@ int network_at_tcp_init(Network *pNetwork) { - int rc; - - /*at device init entry: at_client init, device driver register to at_socket*/ - rc = at_device_init(); - if(QCLOUD_RET_SUCCESS != rc) - { - Log_e("at device init fail,rc:%d",rc); - return rc; - } - - /*do after at device init*/ - rc = at_socket_init(); - if(QCLOUD_RET_SUCCESS != rc) - { - Log_e("at socket init fail,rc:%d",rc); - } - - return rc; + int rc; + + /*at device init entry: at_client init, device driver register to at_socket*/ + rc = at_device_init(); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("at device init fail,rc:%d", rc); + return rc; + } + + /*do after at device init*/ + rc = at_socket_init(); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("at socket init fail,rc:%d", rc); + } + + return rc; } int network_at_tcp_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - - int fd = at_socket_connect(pNetwork->host, pNetwork->port, eNET_TCP); - - if (fd < 0) { - Log_e("fail to connect with TCP server: %s:%u", pNetwork->host, pNetwork->port); - pNetwork->handle = AT_NO_CONNECTED_FD; - return -1; - } - else { - Log_d("connected with TCP server: %s:%u", pNetwork->host, pNetwork->port); - pNetwork->handle = fd; - return 0; - } + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + + int fd = at_socket_connect(pNetwork->host, pNetwork->port, eNET_TCP); + + if (fd < 0) { + Log_e("fail to connect with TCP server: %s:%u", pNetwork->host, pNetwork->port); + pNetwork->handle = AT_NO_CONNECTED_FD; + return -1; + } else { + Log_d("connected with TCP server: %s:%u", pNetwork->host, pNetwork->port); + pNetwork->handle = fd; + return 0; + } } int network_at_tcp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - int ret, err_code; - uint32_t len_recv; - Timer timer; + int ret, err_code; + uint32_t len_recv; + Timer timer; - InitTimer(&timer); + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - len_recv = 0; - err_code = 0; + len_recv = 0; + err_code = 0; - do { - if (expired(&timer)) { - err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; - break; - } + do { + if (expired(&timer)) { + err_code = QCLOUD_ERR_TCP_READ_TIMEOUT; + break; + } - ret = at_socket_recv(pNetwork->handle, data + len_recv, datalen - len_recv); + ret = at_socket_recv(pNetwork->handle, data + len_recv, datalen - len_recv); - if (ret > 0) { - len_recv += ret; - } - else if (ret == 0) { - err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; - } - else {//ret < 0 - Log_e("recv fail\n"); - err_code = QCLOUD_ERR_TCP_READ_FAIL; - break; - } + if (ret > 0) { + len_recv += ret; + } else if (ret == 0) { + err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; + } else { //ret < 0 + Log_e("recv fail\n"); + err_code = QCLOUD_ERR_TCP_READ_FAIL; + break; + } - } while ((len_recv < datalen)); + } while ((len_recv < datalen)); - if (err_code == QCLOUD_ERR_TCP_READ_TIMEOUT && len_recv == 0) { - err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; - } + if (err_code == QCLOUD_ERR_TCP_READ_TIMEOUT && len_recv == 0) { + err_code = QCLOUD_ERR_TCP_NOTHING_TO_READ; + } - *read_len = len_recv; + *read_len = len_recv; - return (datalen == len_recv) ? QCLOUD_RET_SUCCESS : err_code; + return (datalen == len_recv) ? QCLOUD_RET_SUCCESS : err_code; } int network_at_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - int ret; - uint32_t len_sent; - Timer timer; - int net_err = 0; + int ret; + uint32_t len_sent; + Timer timer; + int net_err = 0; InitTimer(&timer); countdown_ms(&timer, timeout_ms); - len_sent = 0; - ret = 1; /* send one time if timeout_ms is value 0 */ + len_sent = 0; + ret = 1; /* send one time if timeout_ms is value 0 */ - do { - ret = at_socket_send(pNetwork->handle, data + len_sent, datalen - len_sent); + do { + ret = at_socket_send(pNetwork->handle, data + len_sent, datalen - len_sent); - if (ret > 0) { - len_sent += ret; - } - else if (0 == ret) { - Log_e("No data be sent\n"); - } - else { - Log_e("send fail, ret:%d\n", ret); - net_err = 1; - break; - } - } while (!net_err && (len_sent < datalen) && (!expired(&timer))); + if (ret > 0) { + len_sent += ret; + } else if (0 == ret) { + Log_e("No data be sent\n"); + } else { + Log_e("send fail, ret:%d\n", ret); + net_err = 1; + break; + } + } while (!net_err && (len_sent < datalen) && (!expired(&timer))); - *written_len = (size_t)len_sent; + *written_len = (size_t)len_sent; - return (len_sent > 0 && net_err == 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_TCP_WRITE_FAIL; + return (len_sent > 0 && net_err == 0) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_TCP_WRITE_FAIL; } void network_at_tcp_disconnect(Network *pNetwork) diff --git a/sdk_src/network/network_interface.c b/sdk_src/network/network_interface.c index 1a88c45..2b4dcb1 100644 --- a/sdk_src/network/network_interface.c +++ b/sdk_src/network/network_interface.c @@ -21,13 +21,15 @@ extern "C" { #include "qcloud_iot_export_error.h" #include "utils_param_check.h" -int is_network_connected(Network *pNetwork) { - return pNetwork->handle; +int is_network_connected(Network *pNetwork) +{ + return pNetwork->handle; } #ifdef AT_TCP_ENABLED -int is_network_at_connected(Network *pNetwork) { - return pNetwork->handle== AT_NO_CONNECTED_FD ? 0: pNetwork->handle == AT_NO_CONNECTED_FD; +int is_network_at_connected(Network *pNetwork) +{ + return pNetwork->handle == AT_NO_CONNECTED_FD ? 0 : pNetwork->handle == AT_NO_CONNECTED_FD; } #endif @@ -36,20 +38,20 @@ int network_init(Network *pNetwork) POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); // to avoid process crash when writing to a broken socket -#if defined(__linux__) +#if defined(__linux__) signal(SIGPIPE, SIG_IGN); #endif - switch(pNetwork->type) { + switch (pNetwork->type) { case NETWORK_TCP: #ifdef AT_TCP_ENABLED - pNetwork->init = network_at_tcp_init; - pNetwork->connect = network_at_tcp_connect; - pNetwork->read = network_at_tcp_read; - pNetwork->write = network_at_tcp_write; - pNetwork->disconnect = network_at_tcp_disconnect; - pNetwork->is_connected = is_network_at_connected; - pNetwork->handle = AT_NO_CONNECTED_FD; + pNetwork->init = network_at_tcp_init; + pNetwork->connect = network_at_tcp_connect; + pNetwork->read = network_at_tcp_read; + pNetwork->write = network_at_tcp_write; + pNetwork->disconnect = network_at_tcp_disconnect; + pNetwork->is_connected = is_network_at_connected; + pNetwork->handle = AT_NO_CONNECTED_FD; #else pNetwork->init = network_tcp_init; pNetwork->connect = network_tcp_connect; @@ -98,7 +100,7 @@ int network_init(Network *pNetwork) #endif default: Log_e("unknown network type: %d", pNetwork->type); - return QCLOUD_ERR_INVAL; + return QCLOUD_ERR_INVAL; } return pNetwork->init(pNetwork); } diff --git a/sdk_src/network/socket/network_socket.c b/sdk_src/network/socket/network_socket.c index 39de631..ade34c8 100644 --- a/sdk_src/network/socket/network_socket.c +++ b/sdk_src/network/socket/network_socket.c @@ -21,7 +21,7 @@ /* * TCP/UDP socket API */ - + int network_tcp_init(Network *pNetwork) { return QCLOUD_RET_SUCCESS; @@ -56,7 +56,7 @@ int network_tcp_write(Network *pNetwork, unsigned char *data, size_t datalen, ui int rc = 0; - rc =HAL_TCP_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); + rc = HAL_TCP_Write(pNetwork->handle, data, datalen, timeout_ms, written_len); return rc; } @@ -83,49 +83,49 @@ int network_udp_init(Network *pNetwork) int network_udp_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = HAL_UDP_ReadTimeout(pNetwork->handle, data, datalen, timeout_ms); - if (ret > 0) { - *read_len = ret; - ret = 0; - } + int ret = HAL_UDP_ReadTimeout(pNetwork->handle, data, datalen, timeout_ms); + if (ret > 0) { + *read_len = ret; + ret = 0; + } - return ret; + return ret; } int network_udp_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = HAL_UDP_Write(pNetwork->handle, data, datalen); - if (ret > 0) { - *written_len = ret; - ret = 0; - } + int ret = HAL_UDP_Write(pNetwork->handle, data, datalen); + if (ret > 0) { + *written_len = ret; + ret = 0; + } - return ret; + return ret; } void network_udp_disconnect(Network *pNetwork) { - POINTER_SANITY_CHECK_RTN(pNetwork); + POINTER_SANITY_CHECK_RTN(pNetwork); - HAL_UDP_Disconnect(pNetwork->handle); - pNetwork->handle = 0; + HAL_UDP_Disconnect(pNetwork->handle); + pNetwork->handle = 0; - return ; + return ; } int network_udp_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - pNetwork->handle = HAL_UDP_Connect(pNetwork->host, pNetwork->port); - if (0 == pNetwork->handle) { - return -1; - } - return 0; + pNetwork->handle = HAL_UDP_Connect(pNetwork->host, pNetwork->port); + if (0 == pNetwork->handle) { + return -1; + } + return 0; } #endif diff --git a/sdk_src/network/tls/network_tls.c b/sdk_src/network/tls/network_tls.c index 2950fa7..43499a5 100644 --- a/sdk_src/network/tls/network_tls.c +++ b/sdk_src/network/tls/network_tls.c @@ -21,7 +21,7 @@ /* * TLS/DTLS network API */ -#ifndef AUTH_WITH_NOTLS +#ifndef AUTH_WITH_NOTLS int network_tls_init(Network *pNetwork) { @@ -31,14 +31,14 @@ int network_tls_init(Network *pNetwork) int network_tls_connect(Network *pNetwork) { POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - + int ret = QCLOUD_ERR_FAILURE; - + pNetwork->handle = (uintptr_t)HAL_TLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); if (pNetwork->handle != 0) { ret = QCLOUD_RET_SUCCESS; } - + return ret; } @@ -77,40 +77,40 @@ int network_dtls_init(Network *pNetwork) int network_dtls_read(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *read_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - return HAL_DTLS_Read(pNetwork->handle, data, datalen, timeout_ms, read_len); + return HAL_DTLS_Read(pNetwork->handle, data, datalen, timeout_ms, read_len); } int network_dtls_write(Network *pNetwork, unsigned char *data, size_t datalen, uint32_t timeout_ms, size_t *written_len) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - return HAL_DTLS_Write(pNetwork->handle, data, datalen, written_len); + return HAL_DTLS_Write(pNetwork->handle, data, datalen, written_len); } void network_dtls_disconnect(Network *pNetwork) { - POINTER_SANITY_CHECK_RTN(pNetwork); + POINTER_SANITY_CHECK_RTN(pNetwork); - HAL_DTLS_Disconnect(pNetwork->handle); - pNetwork->handle = 0; + HAL_DTLS_Disconnect(pNetwork->handle); + pNetwork->handle = 0; - return ; + return ; } int network_dtls_connect(Network *pNetwork) { - POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pNetwork, QCLOUD_ERR_INVAL); - int ret = QCLOUD_ERR_FAILURE; + int ret = QCLOUD_ERR_FAILURE; - pNetwork->handle = (uintptr_t)HAL_DTLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); - if (pNetwork->handle != 0) { - ret = QCLOUD_RET_SUCCESS; - } + pNetwork->handle = (uintptr_t)HAL_DTLS_Connect(&(pNetwork->ssl_connect_params), pNetwork->host, pNetwork->port); + if (pNetwork->handle != 0) { + ret = QCLOUD_RET_SUCCESS; + } - return ret; + return ret; } #endif diff --git a/sdk_src/protocol/http/utils_httpc.c b/sdk_src/protocol/http/utils_httpc.c index d3f7ce6..6d85ffc 100644 --- a/sdk_src/protocol/http/utils_httpc.c +++ b/sdk_src/protocol/http/utils_httpc.c @@ -18,7 +18,7 @@ extern "C" { #endif - + #include #include #include @@ -41,13 +41,13 @@ extern "C" { #define HTTP_CLIENT_MAX_HOST_LEN 64 #define HTTP_CLIENT_MAX_URL_LEN 1024 - + #define HTTP_RETRIEVE_MORE_DATA (1) - + #if defined(MBEDTLS_DEBUG_C) - #define DEBUG_LEVEL 2 +#define DEBUG_LEVEL 2 #endif - + static void _http_client_base64enc(char *out, const char *in) { @@ -71,13 +71,13 @@ static void _http_client_base64enc(char *out, const char *in) } static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_scheme_len, char *host, uint32_t maxhost_len, - int *port, char *path, uint32_t max_path_len) + int *port, char *path, uint32_t max_path_len) { char *scheme_ptr = (char *) url; char *host_ptr = (char *) strstr(url, "://"); uint32_t host_len = 0; uint32_t path_len; - + char *path_ptr; char *fragment_ptr; @@ -103,38 +103,38 @@ static int _http_client_parse_url(const char *url, char *scheme, uint32_t max_sc host_len = path_ptr - host_ptr; memcpy(host, host_ptr, host_len); host[host_len] = '\0'; - + memcpy(path, "/", 1); path[1] = '\0'; return QCLOUD_RET_SUCCESS; } - + if (host_len == 0) { host_len = path_ptr - host_ptr; } - + if (maxhost_len < host_len + 1) { Log_e("Host str is too long (host_len(%d) >= max_len(%d))", host_len + 1, maxhost_len); return QCLOUD_ERR_HTTP_PARSE; } memcpy(host, host_ptr, host_len); host[host_len] = '\0'; - + fragment_ptr = strchr(host_ptr, '#'); if (fragment_ptr != NULL) { path_len = fragment_ptr - path_ptr; } else { path_len = strlen(path_ptr); } - + if (max_path_len < path_len + 1) { Log_e("Path str is too small (%d >= %d)", max_path_len, path_len + 1); return QCLOUD_ERR_HTTP_PARSE; } - + memcpy(path, path_ptr, path_len); - + path[path_len] = '\0'; return QCLOUD_RET_SUCCESS; @@ -151,7 +151,7 @@ static int _http_client_parse_host(const char *url, char *host, uint32_t host_ma return QCLOUD_ERR_HTTP_PARSE; } host_ptr += 3; - + uint32_t pro_len = 0; pro_len = host_ptr - url; @@ -222,7 +222,7 @@ static int _http_client_send_auth(HTTPClient *client, unsigned char *send_buf, i return QCLOUD_RET_SUCCESS; } - + static int _http_client_send_header(HTTPClient *client, const char *url, HttpMethod method, HTTPClientData *client_data) { @@ -237,49 +237,49 @@ static int _http_client_send_header(HTTPClient *client, const char *url, HttpMet (method == HTTP_HEAD) ? "HEAD" : ""; int rc; int port; - + int res = _http_client_parse_url(url, scheme, sizeof(scheme), host, sizeof(host), &port, path, sizeof(path)); if (res != QCLOUD_RET_SUCCESS) { Log_e("httpclient_parse_url returned %d", res); return res; } - + if (strcmp(scheme, "http") == 0) { - + } else if (strcmp(scheme, "https") == 0) { - + } - + memset(send_buf, 0, HTTP_CLIENT_SEND_BUF_SIZE); len = 0; - + HAL_Snprintf(buf, sizeof(buf), "%s %s HTTP/1.1\r\nHost: %s\r\n", meth, path, host); rc = _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); if (rc) { Log_e("Could not write request"); return QCLOUD_ERR_HTTP_CONN; } - + if (client->auth_user) { _http_client_send_auth(client, send_buf, &len); } - + if (client->header) { _http_client_get_info(client, send_buf, &len, (char *) client->header, strlen(client->header)); } - + if (client_data->post_buf != NULL) { HAL_Snprintf(buf, sizeof(buf), "Content-Length: %d\r\n", client_data->post_buf_len); _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); - + if (client_data->post_content_type != NULL) { HAL_Snprintf(buf, sizeof(buf), "Content-Type: %s\r\n", client_data->post_content_type); _http_client_get_info(client, send_buf, &len, buf, strlen(buf)); } } - + _http_client_get_info(client, send_buf, &len, "\r\n", 0); - + //Log_d("REQUEST:\n%s", send_buf); size_t written_len = 0; @@ -293,13 +293,13 @@ static int _http_client_send_header(HTTPClient *client, const char *url, HttpMet Log_e("Connection error (send returned %d)", rc); return QCLOUD_ERR_HTTP_CONN; } - + return QCLOUD_RET_SUCCESS; } - + static int _http_client_send_userdata(HTTPClient *client, HTTPClientData *client_data) -{ +{ if (client_data->post_buf && client_data->post_buf_len) { //Log_d("client_data->post_buf: %s", client_data->post_buf); { @@ -316,10 +316,10 @@ static int _http_client_send_userdata(HTTPClient *client, HTTPClientData *client } } } - + return QCLOUD_RET_SUCCESS; } - + static int _http_client_recv(HTTPClient *client, char *buf, int min_len, int max_len, int *p_read_len, uint32_t timeout_ms, HTTPClientData *client_data) { @@ -327,39 +327,37 @@ static int _http_client_recv(HTTPClient *client, char *buf, int min_len, int max int rc = 0; Timer timer; - + size_t recv_size = 0; + InitTimer(&timer); countdown_ms(&timer, (unsigned int)timeout_ms); - + *p_read_len = 0; - rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), (size_t *)p_read_len); - + rc = client->network_stack.read(&client->network_stack, (unsigned char *)buf, max_len, (uint32_t)left_ms(&timer), &recv_size); + *p_read_len = (int)recv_size; if (rc == QCLOUD_ERR_SSL_NOTHING_TO_READ || rc == QCLOUD_ERR_TCP_NOTHING_TO_READ) { Log_d("HTTP read nothing and timeout"); rc = QCLOUD_RET_SUCCESS; - } - else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_TCP_READ_TIMEOUT) { + } else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_TCP_READ_TIMEOUT) { if (*p_read_len == client_data->retrieve_len || client_data->retrieve_len == 0) rc = QCLOUD_RET_SUCCESS; else Log_e("network_stack read timeout"); - } - else if (rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN && *p_read_len > 0) { + } else if (rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN && *p_read_len > 0) { /* HTTP server give response and close this connection */ client->network_stack.disconnect(&client->network_stack); rc = QCLOUD_RET_SUCCESS; - } - else if (rc != QCLOUD_RET_SUCCESS) { + } else if (rc != QCLOUD_RET_SUCCESS) { Log_e("Connection error rc = %d (recv returned %d)", rc, *p_read_len); IOT_FUNC_EXIT_RC(rc); } - + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - + static int _http_client_retrieve_content(HTTPClient *client, char *data, int len, uint32_t timeout_ms, - HTTPClientData *client_data) + HTTPClientData *client_data) { IOT_FUNC_ENTRY; @@ -367,12 +365,12 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len int templen = 0; int crlf_pos; Timer timer; - + InitTimer(&timer); countdown_ms(&timer, (unsigned int)timeout_ms); - + client_data->is_more = IOT_TRUE; - + if (client_data->response_content_len == -1 && client_data->is_chunked == IOT_FALSE) { while (1) { int rc, max_len; @@ -385,13 +383,13 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->response_buf[client_data->response_buf_len - 1] = '\0'; return HTTP_RETRIEVE_MORE_DATA; } - + max_len = HTTP_CLIENT_MIN(HTTP_CLIENT_CHUNK_SIZE - 1, client_data->response_buf_len - 1 - count); rc = _http_client_recv(client, data, 1, max_len, &len, (uint32_t)left_ms(&timer), client_data); - + /* Receive data */ //Log_d("data len: %d %d", len, count); - + if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } @@ -399,7 +397,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len Log_e("HTTP read timeout!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_TIMEOUT); } - + if (len == 0) { /* read no more data */ Log_d("no more data, len == 0"); @@ -408,7 +406,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } } } - + while (1) { uint32_t readLen = 0; if (client_data->is_chunked && client_data->retrieve_len <= 0) { @@ -432,12 +430,12 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len if (len < HTTP_CLIENT_CHUNK_SIZE) { int new_trf_len, rc; rc = _http_client_recv(client, - data + len, - 0, - HTTP_CLIENT_CHUNK_SIZE - len - 1, - &new_trf_len, - left_ms(&timer), - client_data); + data + len, + 0, + HTTP_CLIENT_CHUNK_SIZE - len - 1, + &new_trf_len, + left_ms(&timer), + client_data); len += new_trf_len; if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); @@ -465,14 +463,14 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len Log_e("Could not read chunk length"); return QCLOUD_ERR_HTTP_UNRESOLVED_DNS; } - + memmove(data, &data[crlf_pos + 2], len - (crlf_pos + 2)); len -= (crlf_pos + 2); - + } else { readLen = client_data->retrieve_len; } - + do { templen = HTTP_CLIENT_MIN(len, readLen); if (count + templen < client_data->response_buf_len - 1) { @@ -486,7 +484,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->retrieve_len -= (client_data->response_buf_len - 1 - count); IOT_FUNC_EXIT_RC(HTTP_RETRIEVE_MORE_DATA); } - + if (len > readLen) { Log_d("memmove %d %d %d\n", readLen, len, client_data->retrieve_len); memmove(data, &data[readLen], len - readLen); /* chunk case, read between two chunks */ @@ -496,7 +494,7 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } else { readLen -= len; } - + if (readLen) { int rc; int max_len = HTTP_CLIENT_MIN(HTTP_CLIENT_CHUNK_SIZE - 1, client_data->response_buf_len - 1 - count); @@ -511,19 +509,19 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len } } } while (readLen); - + if (client_data->is_chunked) { if (len < 2) { int new_trf_len, rc; /* Read missing chars to find end of chunk */ rc = _http_client_recv(client, data + len, 2 - len, HTTP_CLIENT_CHUNK_SIZE - len - 1, &new_trf_len, - left_ms(&timer), client_data); - if ((rc != QCLOUD_RET_SUCCESS )|| (0 == left_ms(&timer))) { + left_ms(&timer), client_data); + if ((rc != QCLOUD_RET_SUCCESS ) || (0 == left_ms(&timer))) { IOT_FUNC_EXIT_RC(rc); } len += new_trf_len; } - + if ((data[0] != '\r') || (data[1] != '\n')) { Log_e("Format error, %s", data); /* after memmove, the beginning of next chunk */ IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_UNRESOLVED_DNS); @@ -535,36 +533,36 @@ static int _http_client_retrieve_content(HTTPClient *client, char *data, int len client_data->is_more = IOT_FALSE; break; } - + } - + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } - -static int _http_client_response_parse(HTTPClient *client, char *data, int len, uint32_t timeout_ms, + +static int _http_client_response_parse(HTTPClient *client, char *data, int len, uint32_t timeout_ms, HTTPClientData *client_data) { IOT_FUNC_ENTRY; - + int crlf_pos; Timer timer; char *tmp_ptr, *ptr_body_end; - + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - + client_data->response_content_len = -1; - + char *crlf_ptr = strstr(data, "\r\n"); if (crlf_ptr == NULL) { Log_e("\\r\\n not found"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_UNRESOLVED_DNS); } - + crlf_pos = crlf_ptr - data; data[crlf_pos] = '\0'; - + #if 0 if (sscanf(data, "HTTP/%*d.%*d %d %*[^\r\n]", &(client->response_code)) != 1) { Log_e("Not a correct HTTP answer : %s\n", data); @@ -573,23 +571,23 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, #endif client->response_code = atoi(data + 9); - + if ((client->response_code < 200) || (client->response_code >= 400)) { Log_w("Response code %d", client->response_code); - + if (client->response_code == 403) IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_AUTH); - + if (client->response_code == 404) IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_NOT_FOUND); } //Log_d("Reading headers : %s", data); - + // remove null character memmove(data, &data[crlf_pos + 2], len - (crlf_pos + 2) + 1); len -= (crlf_pos + 2); - + client_data->is_chunked = IOT_FALSE; if (NULL == (ptr_body_end = strstr(data, "\r\n\r\n"))) { @@ -623,7 +621,7 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, Log_e("Could not parse header"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP); } - + len = len - (ptr_body_end + 4 - data); memmove(data, ptr_body_end + 4, len + 1); int rc = _http_client_retrieve_content(client, data, len, left_ms(&timer), client_data); @@ -632,7 +630,7 @@ static int _http_client_response_parse(HTTPClient *client, char *data, int len, static int _http_client_connect(HTTPClient *client) { - if (QCLOUD_RET_SUCCESS != client->network_stack.connect(&client->network_stack)) { + if (QCLOUD_RET_SUCCESS != client->network_stack.connect(&client->network_stack)) { return QCLOUD_ERR_HTTP_CONN; } @@ -640,7 +638,7 @@ static int _http_client_connect(HTTPClient *client) } static int _http_client_send_request(HTTPClient *client, const char *url, HttpMethod method, HTTPClientData *client_data) -{ +{ int rc; rc = _http_client_send_header(client, url, method, client_data); @@ -655,7 +653,7 @@ static int _http_client_send_request(HTTPClient *client, const char *url, HttpMe return rc; } - + static int _http_client_recv_response(HTTPClient *client, uint32_t timeout_ms, HTTPClientData *client_data) { @@ -664,37 +662,37 @@ static int _http_client_recv_response(HTTPClient *client, uint32_t timeout_ms, H int reclen = 0, rc = QCLOUD_ERR_HTTP_CONN; char buf[HTTP_CLIENT_CHUNK_SIZE] = { 0 }; Timer timer; - + InitTimer(&timer); countdown_ms(&timer, timeout_ms); - + if (0 == client->network_stack.handle) { Log_e("Connection has not been established"); IOT_FUNC_EXIT_RC(rc); } - + if (client_data->is_more) { client_data->response_buf[0] = '\0'; rc = _http_client_retrieve_content(client, buf, reclen, left_ms(&timer), client_data); } else { client_data->is_more = IOT_TRUE; - rc = _http_client_recv(client, buf, 1, HTTP_CLIENT_CHUNK_SIZE - 1, &reclen, left_ms(&timer), client_data); - + rc = _http_client_recv(client, buf, 1, HTTP_CLIENT_CHUNK_SIZE - 1, &reclen, left_ms(&timer), client_data); + if (rc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(rc); } //else if(0 == left_ms(&timer)){ // IOT_FUNC_EXIT_RC(QCLOUD_ERR_HTTP_TIMEOUT); //} - + buf[reclen] = '\0'; - + if (reclen) { //HAL_Printf("RESPONSE:\n%s", buf); rc = _http_client_response_parse(client, buf, reclen, left_ms(&timer), client_data); } } - + IOT_FUNC_EXIT_RC(rc); } @@ -717,7 +715,7 @@ static int _http_network_init(Network *pNetwork, const char *host, int port, con pNetwork->port = port; rc = network_init(pNetwork); - + return rc; } @@ -765,7 +763,7 @@ int qcloud_http_client_common(HTTPClient *client, const char *url, int port, con if (client->network_stack.handle == 0) { rc = qcloud_http_client_connect(client, url, port, ca_crt); if (rc != QCLOUD_RET_SUCCESS) return rc; - } + } rc = _http_client_send_request(client, url, method, client_data); if (rc != QCLOUD_RET_SUCCESS) { @@ -773,7 +771,7 @@ int qcloud_http_client_common(HTTPClient *client, const char *url, int port, con qcloud_http_client_close(client); return rc; } - + return QCLOUD_RET_SUCCESS; } @@ -786,7 +784,7 @@ int qcloud_http_recv_data(HTTPClient *client, uint32_t timeout_ms, HTTPClientDat InitTimer(&timer); countdown_ms(&timer, (unsigned int) timeout_ms); - + if ((NULL != client_data->response_buf) && (0 != client_data->response_buf_len)) { rc = _http_client_recv_response(client, left_ms(&timer), client_data); diff --git a/sdk_src/protocol/mqtt/mqtt_client.c b/sdk_src/protocol/mqtt/mqtt_client.c index 71008ae..723917b 100644 --- a/sdk_src/protocol/mqtt/mqtt_client.c +++ b/sdk_src/protocol/mqtt/mqtt_client.c @@ -66,73 +66,72 @@ int IOT_MQTT_GetErrCode(void) void* IOT_MQTT_Construct(MQTTInitParams *pParams) { g_last_err_code = QCLOUD_ERR_INVAL; - POINTER_SANITY_CHECK(pParams, NULL); - STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); - STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); + POINTER_SANITY_CHECK(pParams, NULL); + STRING_PTR_SANITY_CHECK(pParams->product_id, NULL); + STRING_PTR_SANITY_CHECK(pParams->device_name, NULL); int rc = iot_device_info_set(pParams->product_id, pParams->device_name); - if ( rc != QCLOUD_RET_SUCCESS) { + if ( rc != QCLOUD_RET_SUCCESS) { Log_e("failed to set device info: %d", rc); g_last_err_code = rc; return NULL; } - Qcloud_IoT_Client* mqtt_client = NULL; - - // create and init MQTTClient - if ((mqtt_client = (Qcloud_IoT_Client*) HAL_Malloc (sizeof(Qcloud_IoT_Client))) == NULL) { - Log_e("malloc MQTTClient failed"); - g_last_err_code = QCLOUD_ERR_MALLOC; - return NULL; - } - - rc = qcloud_iot_mqtt_init(mqtt_client, pParams); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("mqtt init failed: %d", rc); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } - - MQTTConnectParams connect_params = DEFAULT_MQTTCONNECT_PARAMS; - connect_params.client_id = iot_device_info_get()->client_id; + Qcloud_IoT_Client* mqtt_client = NULL; + + // create and init MQTTClient + if ((mqtt_client = (Qcloud_IoT_Client*) HAL_Malloc (sizeof(Qcloud_IoT_Client))) == NULL) { + Log_e("malloc MQTTClient failed"); + g_last_err_code = QCLOUD_ERR_MALLOC; + return NULL; + } + + rc = qcloud_iot_mqtt_init(mqtt_client, pParams); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("mqtt init failed: %d", rc); + HAL_Free(mqtt_client); + g_last_err_code = rc; + return NULL; + } + + MQTTConnectParams connect_params = DEFAULT_MQTTCONNECT_PARAMS; + connect_params.client_id = iot_device_info_get()->client_id; // Upper limit of keep alive interval is (11.5 * 60) seconds - connect_params.keep_alive_interval = Min(pParams->keep_alive_interval_ms / 1000, 690); - connect_params.clean_session = pParams->clean_session; - connect_params.auto_connect_enable = pParams->auto_connect_enable; + connect_params.keep_alive_interval = Min(pParams->keep_alive_interval_ms / 1000, 690); + connect_params.clean_session = pParams->clean_session; + connect_params.auto_connect_enable = pParams->auto_connect_enable; #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - size_t src_len = strlen(pParams->device_secret); - size_t len; - memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); - rc = qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); - connect_params.device_secret = (char *)sg_psk_str; - connect_params.device_secret_len = len; - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Device secret decode err, secret:%s", pParams->device_secret); + size_t src_len = strlen(pParams->device_secret); + size_t len; + memset(sg_psk_str, 0x00, DECODE_PSK_LENGTH); + rc = qcloud_iot_utils_base64decode(sg_psk_str, sizeof( sg_psk_str ), &len, (unsigned char *)pParams->device_secret, src_len ); + connect_params.device_secret = (char *)sg_psk_str; + connect_params.device_secret_len = len; + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Device secret decode err, secret:%s", pParams->device_secret); qcloud_iot_mqtt_deinit(mqtt_client); - HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } + HAL_Free(mqtt_client); + g_last_err_code = rc; + return NULL; + } #endif - rc = qcloud_iot_mqtt_connect(mqtt_client, &connect_params); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("mqtt connect with id: %s failed: %d", mqtt_client->options.conn_id, rc); + rc = qcloud_iot_mqtt_connect(mqtt_client, &connect_params); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("mqtt connect with id: %s failed: %d", mqtt_client->options.conn_id, rc); qcloud_iot_mqtt_deinit(mqtt_client); HAL_Free(mqtt_client); - g_last_err_code = rc; - return NULL; - } - else { - Log_i("mqtt connect with id: %s success", mqtt_client->options.conn_id); - g_last_err_code = QCLOUD_RET_SUCCESS; - } - -#ifdef LOG_UPLOAD - //log subscribe topics - if (is_log_uploader_init()) { - int log_level; + g_last_err_code = rc; + return NULL; + } else { + Log_i("mqtt connect with id: %s success", mqtt_client->options.conn_id); + g_last_err_code = QCLOUD_RET_SUCCESS; + } + +#ifdef LOG_UPLOAD + //log subscribe topics + if (is_log_uploader_init()) { + int log_level; rc = qcloud_get_log_level(mqtt_client, &log_level); //rc = qcloud_log_topic_subscribe(mqtt_client); if (rc < 0) { @@ -144,22 +143,23 @@ void* IOT_MQTT_Construct(MQTTInitParams *pParams) } #endif - return mqtt_client; + return mqtt_client; } -int IOT_MQTT_Destroy(void **pClient) { - POINTER_SANITY_CHECK(*pClient, QCLOUD_ERR_INVAL); +int IOT_MQTT_Destroy(void **pClient) +{ + POINTER_SANITY_CHECK(*pClient, QCLOUD_ERR_INVAL); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)(*pClient); + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)(*pClient); - int rc = qcloud_iot_mqtt_disconnect(mqtt_client); + int rc = qcloud_iot_mqtt_disconnect(mqtt_client); - int i = 0; + int i = 0; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { /* notify this event to topic subscriber */ if (NULL != mqtt_client->sub_handles[i].sub_event_handler) - mqtt_client->sub_handles[i].sub_event_handler(mqtt_client, - MQTT_EVENT_CLIENT_DESTROY, mqtt_client->sub_handles[i].handler_user_data); + mqtt_client->sub_handles[i].sub_event_handler(mqtt_client, + MQTT_EVENT_CLIENT_DESTROY, mqtt_client->sub_handles[i].handler_user_data); if (NULL != mqtt_client->sub_handles[i].topic_filter) { HAL_Free((void *)mqtt_client->sub_handles[i].topic_filter); @@ -173,7 +173,7 @@ int IOT_MQTT_Destroy(void **pClient) { #endif HAL_MutexDestroy(mqtt_client->lock_generic); - HAL_MutexDestroy(mqtt_client->lock_write_buf); + HAL_MutexDestroy(mqtt_client->lock_write_buf); HAL_MutexDestroy(mqtt_client->lock_list_sub); HAL_MutexDestroy(mqtt_client->lock_list_pub); @@ -183,15 +183,16 @@ int IOT_MQTT_Destroy(void **pClient) { HAL_Free(*pClient); *pClient = NULL; -#ifdef LOG_UPLOAD +#ifdef LOG_UPLOAD set_log_mqtt_client(NULL); -#endif +#endif Log_i("mqtt release!"); - return rc; + return rc; } -int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) { +int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) +{ Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; int rc = qcloud_iot_mqtt_yield(mqtt_client, timeout_ms); @@ -204,7 +205,7 @@ int IOT_MQTT_Yield(void *pClient, uint32_t timeout_ms) { IOT_Log_Upload(true); #endif - return rc; + return rc; } int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams) @@ -214,21 +215,24 @@ int IOT_MQTT_Publish(void *pClient, char *topicName, PublishParams *pParams) return qcloud_iot_mqtt_publish(mqtt_client, topicName, pParams); } -int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParams) { +int IOT_MQTT_Subscribe(void *pClient, char *topicFilter, SubscribeParams *pParams) +{ - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - return qcloud_iot_mqtt_subscribe(mqtt_client, topicFilter, pParams); + return qcloud_iot_mqtt_subscribe(mqtt_client, topicFilter, pParams); } -int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter) { +int IOT_MQTT_Unsubscribe(void *pClient, char *topicFilter) +{ - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; + Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - return qcloud_iot_mqtt_unsubscribe(mqtt_client, topicFilter); + return qcloud_iot_mqtt_unsubscribe(mqtt_client, topicFilter); } -bool IOT_MQTT_IsConnected(void *pClient) { +bool IOT_MQTT_IsConnected(void *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -239,27 +243,27 @@ bool IOT_MQTT_IsConnected(void *pClient) { } static inline void _strlowr(char *str) -{ - while(*str != '\0') - { - *str = tolower(*str); +{ + while (*str != '\0') { + *str = tolower(*str); str++; - } + } } -int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { +int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(pParams, QCLOUD_ERR_INVAL); - memset(pClient, 0x0, sizeof(Qcloud_IoT_Client)); - + memset(pClient, 0x0, sizeof(Qcloud_IoT_Client)); + int size = HAL_Snprintf(s_qcloud_iot_host, HOST_STR_LENGTH, "%s.%s", pParams->product_id, QCLOUD_IOT_MQTT_DIRECT_DOMAIN); if (size < 0 || size > HOST_STR_LENGTH - 1) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + _strlowr(s_qcloud_iot_host); int i = 0; @@ -272,9 +276,9 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { } if (pParams->command_timeout < MIN_COMMAND_TIMEOUT) - pParams->command_timeout = MIN_COMMAND_TIMEOUT; + pParams->command_timeout = MIN_COMMAND_TIMEOUT; if (pParams->command_timeout > MAX_COMMAND_TIMEOUT) - pParams->command_timeout = MAX_COMMAND_TIMEOUT; + pParams->command_timeout = MAX_COMMAND_TIMEOUT; pClient->command_timeout_ms = pParams->command_timeout; // packet id, random from [1 - 65536] @@ -284,7 +288,7 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { pClient->is_ping_outstanding = 0; pClient->was_manually_disconnected = 0; pClient->counter_network_disconnected = 0; - + pClient->event_handle = pParams->event_handle; pClient->lock_generic = HAL_MutexCreate(); @@ -295,29 +299,29 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { set_client_conn_state(pClient, NOTCONNECTED); if ((pClient->lock_write_buf = HAL_MutexCreate()) == NULL) { - Log_e("create write buf lock failed."); - goto error; + Log_e("create write buf lock failed."); + goto error; } if ((pClient->lock_list_sub = HAL_MutexCreate()) == NULL) { - Log_e("create sub list lock failed."); - goto error; + Log_e("create sub list lock failed."); + goto error; } if ((pClient->lock_list_pub = HAL_MutexCreate()) == NULL) { - Log_e("create pub list lock failed."); - goto error; + Log_e("create pub list lock failed."); + goto error; } if ((pClient->list_pub_wait_ack = list_new()) == NULL) { - Log_e("create pub wait list failed."); - goto error; + Log_e("create pub wait list failed."); + goto error; } - pClient->list_pub_wait_ack->free = HAL_Free; + pClient->list_pub_wait_ack->free = HAL_Free; if ((pClient->list_sub_wait_ack = list_new()) == NULL) { - Log_e("create sub wait list failed."); + Log_e("create sub wait list failed."); goto error; } - pClient->list_sub_wait_ack->free = HAL_Free; + pClient->list_sub_wait_ack->free = HAL_Free; #ifndef AUTH_WITH_NOTLS // device param for TLS connection @@ -357,8 +361,8 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { pClient->network_stack.host = s_qcloud_iot_host; pClient->network_stack.port = s_qcloud_iot_port; - pClient->network_stack.ssl_connect_params.timeout_ms = - pClient->command_timeout_ms > QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT ? pClient->command_timeout_ms:QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT; + pClient->network_stack.ssl_connect_params.timeout_ms = + pClient->command_timeout_ms > QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT ? pClient->command_timeout_ms : QCLOUD_IOT_TLS_HANDSHAKE_TIMEOUT; #else pClient->network_stack.host = s_qcloud_iot_host; @@ -375,56 +379,57 @@ int qcloud_iot_mqtt_init(Qcloud_IoT_Client *pClient, MQTTInitParams *pParams) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); error: - if (pClient->list_pub_wait_ack) { - pClient->list_pub_wait_ack->free(pClient->list_pub_wait_ack); - pClient->list_pub_wait_ack = NULL; - } - if (pClient->list_sub_wait_ack) { - pClient->list_sub_wait_ack->free(pClient->list_sub_wait_ack); - pClient->list_sub_wait_ack = NULL; - } - if (pClient->lock_generic) { - HAL_MutexDestroy(pClient->lock_generic); - pClient->lock_generic = NULL; - } - if (pClient->lock_list_sub) { - HAL_MutexDestroy(pClient->lock_list_sub); - pClient->lock_list_sub = NULL; - } - if (pClient->lock_list_pub) { - HAL_MutexDestroy(pClient->lock_list_pub); - pClient->lock_list_pub = NULL; - } - if (pClient->lock_write_buf) { - HAL_MutexDestroy(pClient->lock_write_buf); - pClient->lock_write_buf = NULL; - } - - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) + if (pClient->list_pub_wait_ack) { + pClient->list_pub_wait_ack->free(pClient->list_pub_wait_ack); + pClient->list_pub_wait_ack = NULL; + } + if (pClient->list_sub_wait_ack) { + pClient->list_sub_wait_ack->free(pClient->list_sub_wait_ack); + pClient->list_sub_wait_ack = NULL; + } + if (pClient->lock_generic) { + HAL_MutexDestroy(pClient->lock_generic); + pClient->lock_generic = NULL; + } + if (pClient->lock_list_sub) { + HAL_MutexDestroy(pClient->lock_list_sub); + pClient->lock_list_sub = NULL; + } + if (pClient->lock_list_pub) { + HAL_MutexDestroy(pClient->lock_list_pub); + pClient->lock_list_pub = NULL; + } + if (pClient->lock_write_buf) { + HAL_MutexDestroy(pClient->lock_write_buf); + pClient->lock_write_buf = NULL; + } + + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE) } -int qcloud_iot_mqtt_deinit(Qcloud_IoT_Client *mqtt_client) +int qcloud_iot_mqtt_deinit(Qcloud_IoT_Client *mqtt_client) { IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(mqtt_client, QCLOUD_ERR_INVAL); HAL_MutexDestroy(mqtt_client->lock_generic); - HAL_MutexDestroy(mqtt_client->lock_write_buf); + HAL_MutexDestroy(mqtt_client->lock_write_buf); HAL_MutexDestroy(mqtt_client->lock_list_sub); HAL_MutexDestroy(mqtt_client->lock_list_pub); list_destroy(mqtt_client->list_pub_wait_ack); list_destroy(mqtt_client->list_sub_wait_ack); - + Log_i("release mqtt client resources"); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) { +int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -434,7 +439,8 @@ int qcloud_iot_mqtt_set_autoreconnect(Qcloud_IoT_Client *pClient, bool value) { IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) { +bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -447,7 +453,8 @@ bool qcloud_iot_mqtt_is_autoreconnect_enabled(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(is_enabled); } -int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -455,7 +462,8 @@ int qcloud_iot_mqtt_get_network_disconnected_count(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(pClient->counter_network_disconnected); } -int qcloud_iot_mqtt_reset_network_disconnected_count(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_reset_network_disconnected_count(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); diff --git a/sdk_src/protocol/mqtt/mqtt_client_common.c b/sdk_src/protocol/mqtt/mqtt_client_common.c index 64627f0..a502a1f 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_common.c +++ b/sdk_src/protocol/mqtt/mqtt_client_common.c @@ -27,7 +27,7 @@ extern "C" { #include "utils_list.h" /* remain waiting time after MQTT header is received (unit: ms) */ -#define QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS (2000) +#define QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS (2000) #define MAX_NO_OF_REMAINING_LENGTH_BYTES 4 @@ -59,7 +59,8 @@ static int _check_handle_is_identical(SubTopicHandle *sub_handle1, SubTopicHandl return 0; } -uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) { +uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -71,25 +72,26 @@ uint16_t get_next_packet_id(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(pClient->next_packet_id); } -void get_next_conn_id(char *conn_id) { - int i; - srand((unsigned)HAL_GetTimeMs()); - for (i = 0; i < MAX_CONN_ID_LEN - 1; i++) { - int flag = rand() % 3; - switch(flag) { - case 0: - conn_id[i] = (rand() % 26) + 'a'; - break; - case 1: - conn_id[i] = (rand() % 26) + 'A'; - break; - case 2: - conn_id[i] = (rand() % 10) + '0'; - break; - } - } - - conn_id[MAX_CONN_ID_LEN - 1] = '\0'; +void get_next_conn_id(char *conn_id) +{ + int i; + srand((unsigned)HAL_GetTimeMs()); + for (i = 0; i < MAX_CONN_ID_LEN - 1; i++) { + int flag = rand() % 3; + switch (flag) { + case 0: + conn_id[i] = (rand() % 26) + 'a'; + break; + case 1: + conn_id[i] = (rand() % 26) + 'A'; + break; + case 2: + conn_id[i] = (rand() % 10) + '0'; + break; + } + } + + conn_id[MAX_CONN_ID_LEN - 1] = '\0'; } /** @@ -98,7 +100,8 @@ void get_next_conn_id(char *conn_id) { * @param length the length to be encoded * @return the number of bytes written to buffer */ -size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) { +size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) +{ IOT_FUNC_ENTRY; size_t outLen = 0; @@ -117,7 +120,8 @@ size_t mqtt_write_packet_rem_len(unsigned char *buf, uint32_t length) { IOT_FUNC_EXIT_RC((int)outLen); } -size_t get_mqtt_packet_len(size_t rem_len) { +size_t get_mqtt_packet_len(size_t rem_len) +{ rem_len += 1; /* header byte */ /* now remaining_length field */ @@ -141,7 +145,8 @@ size_t get_mqtt_packet_len(size_t rem_len) { * @return the number of bytes read from the socket */ static int _decode_packet_rem_len_from_buf_read(uint32_t (*getcharfn)(unsigned char *, uint32_t), uint32_t *value, - uint32_t *readBytesLen) { + uint32_t *readBytesLen) +{ IOT_FUNC_ENTRY; unsigned char c; @@ -168,7 +173,8 @@ static int _decode_packet_rem_len_from_buf_read(uint32_t (*getcharfn)(unsigned c } static unsigned char *bufptr; -uint32_t bufchar(unsigned char *c, uint32_t count) { +uint32_t bufchar(unsigned char *c, uint32_t count) +{ uint32_t i; for (i = 0; i < count; ++i) { @@ -178,7 +184,8 @@ uint32_t bufchar(unsigned char *c, uint32_t count) { return count; } -int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint32_t *readBytesLen) { +int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint32_t *readBytesLen) +{ bufptr = buf; return _decode_packet_rem_len_from_buf_read(bufchar, value, readBytesLen); } @@ -188,7 +195,8 @@ int mqtt_read_packet_rem_len_form_buf(unsigned char *buf, uint32_t *value, uint3 * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned * @return the value calculated */ -uint16_t mqtt_read_uint16_t(unsigned char **pptr) { +uint16_t mqtt_read_uint16_t(unsigned char **pptr) +{ unsigned char *ptr = *pptr; uint8_t firstByte = (uint8_t) (*ptr); uint8_t secondByte = (uint8_t) (*(ptr + 1)); @@ -202,7 +210,8 @@ uint16_t mqtt_read_uint16_t(unsigned char **pptr) { * @param pptr pointer to the input buffer - incremented by the number of bytes used & returned * @return the character read */ -unsigned char mqtt_read_char(unsigned char **pptr) { +unsigned char mqtt_read_char(unsigned char **pptr) +{ unsigned char c = **pptr; (*pptr)++; return c; @@ -213,7 +222,8 @@ unsigned char mqtt_read_char(unsigned char **pptr) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param c the character to write */ -void mqtt_write_char(unsigned char **pptr, unsigned char c) { +void mqtt_write_char(unsigned char **pptr, unsigned char c) +{ **pptr = c; (*pptr)++; } @@ -223,7 +233,8 @@ void mqtt_write_char(unsigned char **pptr, unsigned char c) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param anInt the integer to write */ -void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) { +void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) +{ **pptr = (unsigned char) (anInt / 256); (*pptr)++; **pptr = (unsigned char) (anInt % 256); @@ -235,7 +246,8 @@ void mqtt_write_uint_16(unsigned char **pptr, uint16_t anInt) { * @param pptr pointer to the output buffer - incremented by the number of bytes used & returned * @param string the C string to write */ -void mqtt_write_utf8_string(unsigned char **pptr, const char *string) { +void mqtt_write_utf8_string(unsigned char **pptr, const char *string) +{ size_t len = strlen(string); mqtt_write_uint_16(pptr, (uint16_t) len); memcpy(*pptr, string, len); @@ -319,10 +331,10 @@ int mqtt_init_packet_header(unsigned char *header, MessageTypes message_type, } /* Generate the final protocol header by using bitwise operator */ - *header = ((type<>MQTT_HEADER_TYPE_SHIFT); - *dup = ((header&MQTT_HEADER_DUP_MASK)>>MQTT_HEADER_DUP_SHIFT); + header = mqtt_read_char(&curdata); + *packet_type = ((header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT); + *dup = ((header & MQTT_HEADER_DUP_MASK) >> MQTT_HEADER_DUP_SHIFT); /* read remaining length */ rc = mqtt_read_packet_rem_len_form_buf(curdata, &decodedLen, &readBytesLen); @@ -372,7 +385,7 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ } *packet_id = mqtt_read_uint16_t(&curdata); - + if (enddata - curdata >= 1) { unsigned char ack_code = mqtt_read_char(&curdata); if (ack_code != 0) { @@ -395,7 +408,7 @@ int deserialize_ack_packet(uint8_t *packet_type, uint8_t *dup, uint16_t *packet_ * @return error code. 1 is success, 0 is failure */ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t *count, - QoS *grantedQoSs, unsigned char *buf, size_t buf_len) + QoS *grantedQoSs, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -416,12 +429,12 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t } // read 1st byte in fixed header header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; if (type != SUBACK) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - // read remain part in fixed header + // read remain part in fixed header decodeRc = mqtt_read_packet_rem_len_form_buf(curdata, &decodedLen, &readBytesLen); if (decodeRc != QCLOUD_RET_SUCCESS) { IOT_FUNC_EXIT_RC(decodeRc); @@ -455,7 +468,7 @@ int deserialize_suback_packet(uint16_t *packet_id, uint32_t max_count, uint32_t * @param buf_len the length in bytes of the data in the supplied buffer * @return int indicating function execution status */ -int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len) +int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -482,7 +495,8 @@ int deserialize_unsuback_packet(uint16_t *packet_id, unsigned char *buf, size_t * @param serialized length * @return int indicating function execution status */ -int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, uint32_t *serialized_len) { +int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, MessageTypes packetType, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -512,7 +526,8 @@ int serialize_packet_with_zero_payload(unsigned char *buf, size_t buf_len, Messa IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { +int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -544,7 +559,8 @@ int send_mqtt_packet(Qcloud_IoT_Client *pClient, size_t length, Timer *timer) { } -static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint32_t *value, uint32_t timeout) { +static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint32_t *value, uint32_t timeout) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -591,7 +607,8 @@ static int _decode_packet_rem_len_with_net_read(Qcloud_IoT_Client *pClient, uint * @param packet_type MQTT packet type * @return QCLOUD_RET_SUCCESS for success, or err code for failure */ -static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type) { +static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -601,9 +618,9 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * uint32_t rem_len = 0; size_t read_len = 0; int rc; - int timer_left_ms = left_ms(timer); - - if (timer_left_ms <= 0) { + int timer_left_ms = left_ms(timer); + + if (timer_left_ms <= 0) { timer_left_ms = 1; } @@ -618,12 +635,12 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * len = 1; // 2. read the remaining length - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - + rc = _decode_packet_rem_len_with_net_read(pClient, &rem_len, timer_left_ms); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); @@ -635,7 +652,7 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * size_t bytes_to_be_read; int32_t ret_val = 0; - timer_left_ms = left_ms(timer); + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } @@ -644,7 +661,7 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * bytes_to_be_read = pClient->read_buf_size; do { ret_val = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, bytes_to_be_read, timer_left_ms, - &read_len); + &read_len); if (ret_val == QCLOUD_RET_SUCCESS) { total_bytes_read += read_len; if ((rem_len - total_bytes_read) >= pClient->read_buf_size) { @@ -663,33 +680,32 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * // 3. read payload according to remaining length if (rem_len > 0 && ((len + rem_len) > pClient->read_buf_size)) { - - timer_left_ms = left_ms(timer); + + timer_left_ms = left_ms(timer); if (timer_left_ms <= 0) { timer_left_ms = 1; } timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - - pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, rem_len, timer_left_ms, &read_len); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); - } - else { + + pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf, rem_len, timer_left_ms, &read_len); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_BUF_TOO_SHORT); + } else { if (rem_len > 0) { - timer_left_ms = left_ms(timer); - if (timer_left_ms <= 0) { - timer_left_ms = 1; - } - timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; - rc = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf + len, rem_len, timer_left_ms, &read_len); - if (rc != QCLOUD_RET_SUCCESS) { - IOT_FUNC_EXIT_RC(rc); - } + timer_left_ms = left_ms(timer); + if (timer_left_ms <= 0) { + timer_left_ms = 1; + } + timer_left_ms += QCLOUD_IOT_MQTT_MAX_REMAIN_WAIT_MS; + rc = pClient->network_stack.read(&(pClient->network_stack), pClient->read_buf + len, rem_len, timer_left_ms, &read_len); + if (rc != QCLOUD_RET_SUCCESS) { + IOT_FUNC_EXIT_RC(rc); + } } } - *packet_type = (pClient->read_buf[0]&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; - + *packet_type = (pClient->read_buf[0] & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } @@ -700,7 +716,8 @@ static int _read_mqtt_packet(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t * * @param topicName * @return */ -static uint8_t _is_topic_equals(char *topic_filter, char *topicName) { +static uint8_t _is_topic_equals(char *topic_filter, char *topicName) +{ return (uint8_t) (strlen(topic_filter) == strlen(topicName) && !strcmp(topic_filter, topicName)); } @@ -716,7 +733,8 @@ static uint8_t _is_topic_equals(char *topic_filter, char *topicName) { * @param topicNameLen length of topic name * @return */ -static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t topicNameLen) { +static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t topicNameLen) +{ char *curf; char *curn; char *curn_end; @@ -769,7 +787,8 @@ static uint8_t _is_topic_matched(char *topic_filter, char *topicName, uint16_t t * @param message * @return */ -static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_t topicNameLen, MQTTMessage *message) { +static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_t topicNameLen, MQTTMessage *message) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -781,13 +800,12 @@ static int _deliver_message(Qcloud_IoT_Client *pClient, char *topicName, uint16_ uint32_t i; int flag_matched = 0; - + HAL_MutexLock(pClient->lock_generic); for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((pClient->sub_handles[i].topic_filter != NULL) && (_is_topic_equals(topicName, (char *) pClient->sub_handles[i].topic_filter) || - _is_topic_matched((char *) pClient->sub_handles[i].topic_filter, topicName, topicNameLen))) - { + _is_topic_matched((char *) pClient->sub_handles[i].topic_filter, topicName, topicNameLen))) { HAL_MutexUnlock(pClient->lock_generic); if (pClient->sub_handles[i].message_handler != NULL) { pClient->sub_handles[i].message_handler(pClient, message, pClient->sub_handles[i].handler_user_data); @@ -904,7 +922,7 @@ static int _mask_sub_info_from(Qcloud_IoT_Client *c, unsigned int msgId, SubTopi if (sub_info->msg_id == msgId) { *messageHandler = sub_info->handler; /* return handle */ sub_info->node_state = MQTT_NODE_STATE_INVALID; /* mark as invalid node */ - } + } } list_iterator_destroy(iter); @@ -956,7 +974,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q QoS grantedQoS[3] = {QOS0, QOS0, QOS0}; int rc; bool sub_nack = false; - + rc = deserialize_suback_packet(&packet_id, 1, &count, grantedQoS, pClient->read_buf, pClient->read_buf_size); if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); @@ -965,7 +983,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q int flag_dup = 0, i_free = -1; // check return code in SUBACK packet: 0x00(QOS0, SUCCESS),0x01(QOS1, SUCCESS),0x02(QOS2, SUCCESS),0x80(Failure) if (grantedQoS[0] == 0x80) { - MQTTEventMsg msg; + MQTTEventMsg msg; msg.event_type = MQTT_EVENT_SUBCRIBE_NACK; msg.msg = (void *)(uintptr_t)packet_id; @@ -975,7 +993,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q } HAL_MutexLock(pClient->lock_generic); - + SubTopicHandle sub_handle; memset(&sub_handle, 0, sizeof(SubTopicHandle)); (void)_mask_sub_info_from(pClient, (unsigned int)packet_id, &sub_handle); @@ -992,25 +1010,25 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q /* notify this event to topic subscriber */ if (NULL != sub_handle.sub_event_handler) sub_handle.sub_event_handler(pClient, MQTT_EVENT_SUBCRIBE_NACK, sub_handle.handler_user_data); - + HAL_Free((void *)sub_handle.topic_filter); - sub_handle.topic_filter = NULL; + sub_handle.topic_filter = NULL; IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_SUB); } int i; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((NULL != pClient->sub_handles[i].topic_filter)) { - if (0 == _check_handle_is_identical(&pClient->sub_handles[i], &sub_handle)) { + if (0 == _check_handle_is_identical(&pClient->sub_handles[i], &sub_handle)) { flag_dup = 1; Log_w("Identical topic found: %s", sub_handle.topic_filter); if (pClient->sub_handles[i].handler_user_data != sub_handle.handler_user_data) { - Log_w("Update handler_user_data %p -> %p!", - pClient->sub_handles[i].handler_user_data, sub_handle.handler_user_data); + Log_w("Update handler_user_data %p -> %p!", + pClient->sub_handles[i].handler_user_data, sub_handle.handler_user_data); pClient->sub_handles[i].handler_user_data = sub_handle.handler_user_data; } HAL_Free((void *)sub_handle.topic_filter); - sub_handle.topic_filter = NULL; + sub_handle.topic_filter = NULL; break; } } else { @@ -1033,7 +1051,7 @@ static int _handle_suback_packet(Qcloud_IoT_Client *pClient, Timer *timer, QoS q pClient->sub_handles[i_free].handler_user_data = sub_handle.handler_user_data; } } - + HAL_MutexUnlock(pClient->lock_generic); /* notify this event to user callback */ @@ -1074,18 +1092,18 @@ static int _handle_unsuback_packet(Qcloud_IoT_Client *pClient, Timer *timer) HAL_MutexLock(pClient->lock_generic); /* actually below code is nonsense as unsub handle is different with sub handle even the same topic_filter*/ - #if 0 +#if 0 int i; for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((pClient->sub_handles[i].topic_filter != NULL) - && (0 == _check_handle_is_identical(&pClient->sub_handles[i], &messageHandler))) { + && (0 == _check_handle_is_identical(&pClient->sub_handles[i], &messageHandler))) { memset(&pClient->sub_handles[i], 0, sizeof(SubTopicHandle)); /* NOTE: in case of more than one register(subscribe) with different callback function, * so we must keep continuously searching related message handle. */ } } - #endif +#endif /* Free the topic filter malloced in qcloud_iot_mqtt_unsubscribe */ if (messageHandler.topic_filter) { @@ -1115,10 +1133,8 @@ static uint16_t sg_repeat_packet_id_buf[MQTT_MAX_REPEAT_BUF_LEN]; static int _get_packet_id_in_repeat_buf(uint16_t packet_id) { int i; - for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) - { - if (packet_id == sg_repeat_packet_id_buf[i]) - { + for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) { + if (packet_id == sg_repeat_packet_id_buf[i]) { return packet_id; } } @@ -1140,8 +1156,7 @@ static void _add_packet_id_to_repeat_buf(uint16_t packet_id) void reset_repeat_packet_id_buffer(void) { int i; - for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) - { + for (i = 0; i < MQTT_MAX_REPEAT_BUF_LEN; ++i) { sg_repeat_packet_id_buf[i] = 0; } } @@ -1149,7 +1164,8 @@ void reset_repeat_packet_id_buffer(void) #endif -static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { +static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) +{ IOT_FUNC_ENTRY; char *topic_name; uint16_t topic_len; @@ -1162,18 +1178,17 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { if (QCLOUD_RET_SUCCESS != rc) { IOT_FUNC_EXIT_RC(rc); } - + // topicName from packet is NOT null terminated char fix_topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - - if(topic_len > MAX_SIZE_OF_CLOUD_TOPIC){ - topic_len = MAX_SIZE_OF_CLOUD_TOPIC - 1; - Log_e("topic len exceed buffer len"); - } + + if (topic_len > MAX_SIZE_OF_CLOUD_TOPIC) { + topic_len = MAX_SIZE_OF_CLOUD_TOPIC - 1; + Log_e("topic len exceed buffer len"); + } memcpy(fix_topic, topic_name, topic_len); - if (QOS0 == msg.qos) - { + if (QOS0 == msg.qos) { rc = _deliver_message(pClient, fix_topic, topic_len, &msg); if (QCLOUD_RET_SUCCESS != rc) IOT_FUNC_EXIT_RC(rc); @@ -1187,8 +1202,7 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { int repeat_id = _get_packet_id_in_repeat_buf(msg.id); // deliver to msg callback - if (repeat_id < 0) - { + if (repeat_id < 0) { #endif rc = _deliver_message(pClient, fix_topic, topic_len, &msg); if (QCLOUD_RET_SUCCESS != rc) @@ -1198,7 +1212,7 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { _add_packet_id_to_repeat_buf(msg.id); #endif } - + HAL_MutexLock(pClient->lock_write_buf); if (QOS1 == msg.qos) { rc = serialize_pub_ack_packet(pClient->write_buf, pClient->write_buf_size, PUBACK, 0, msg.id, &len); @@ -1222,7 +1236,8 @@ static int _handle_publish_packet(Qcloud_IoT_Client *pClient, Timer *timer) { } -static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) { +static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) +{ IOT_FUNC_ENTRY; uint16_t packet_id; unsigned char dup, type; @@ -1254,7 +1269,8 @@ static int _handle_pubrec_packet(Qcloud_IoT_Client *pClient, Timer *timer) { } -static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) { +static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; HAL_MutexLock(pClient->lock_generic); @@ -1265,7 +1281,8 @@ static void _handle_pingresp_packet(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT; } -int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos) { +int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_type, QoS qos) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -1309,29 +1326,29 @@ int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_typ } case PUBCOMP: break; - case PINGRESP: + case PINGRESP: break; default: { /* Either unknown packet type or Failure occurred * Should not happen */ - + IOT_FUNC_EXIT_RC(QCLOUD_ERR_RX_MESSAGE_INVAL); break; } } - switch (*packet_type) { + switch (*packet_type) { /* Recv below msgs are all considered as PING OK */ case PUBACK: case SUBACK: - case UNSUBACK: + case UNSUBACK: case PINGRESP: { _handle_pingresp_packet(pClient); break; } /* Recv downlink pub means link is OK but we still need to send PING request */ case PUBLISH: { - HAL_MutexLock(pClient->lock_generic); + HAL_MutexLock(pClient->lock_generic); pClient->is_ping_outstanding = 0; HAL_MutexUnlock(pClient->lock_generic); break; @@ -1341,37 +1358,40 @@ int cycle_for_read(Qcloud_IoT_Client *pClient, Timer *timer, uint8_t *packet_typ IOT_FUNC_EXIT_RC(rc); } -int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, QoS qos) { - IOT_FUNC_ENTRY; - int rc; - uint8_t read_packet_type = 0; +int wait_for_read(Qcloud_IoT_Client *pClient, uint8_t packet_type, Timer *timer, QoS qos) +{ + IOT_FUNC_ENTRY; + int rc; + uint8_t read_packet_type = 0; - POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(timer, QCLOUD_ERR_INVAL); - do { - if (expired(timer)) { - rc = QCLOUD_ERR_MQTT_REQUEST_TIMEOUT; - break; - } - rc = cycle_for_read(pClient, timer, &read_packet_type, qos); - } while (QCLOUD_RET_SUCCESS == rc && read_packet_type != packet_type ); + do { + if (expired(timer)) { + rc = QCLOUD_ERR_MQTT_REQUEST_TIMEOUT; + break; + } + rc = cycle_for_read(pClient, timer, &read_packet_type, qos); + } while (QCLOUD_RET_SUCCESS == rc && read_packet_type != packet_type ); - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected) { +void set_client_conn_state(Qcloud_IoT_Client *pClient, uint8_t connected) +{ HAL_MutexLock(pClient->lock_generic); pClient->is_connected = connected; HAL_MutexUnlock(pClient->lock_generic); } -uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) { +uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; - uint8_t is_connected = 0; - HAL_MutexLock(pClient->lock_generic); - is_connected = pClient->is_connected; - HAL_MutexUnlock(pClient->lock_generic); + uint8_t is_connected = 0; + HAL_MutexLock(pClient->lock_generic); + is_connected = pClient->is_connected; + HAL_MutexUnlock(pClient->lock_generic); IOT_FUNC_EXIT_RC(is_connected); } @@ -1381,7 +1401,7 @@ uint8_t get_client_conn_state(Qcloud_IoT_Client *pClient) { * return: 0, success; NOT 0, fail; */ int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, MessageTypes type, - SubTopicHandle *handler, ListNode **node) + SubTopicHandle *handler, ListNode **node) { IOT_FUNC_ENTRY; if (!c || !handler || !node) { @@ -1398,13 +1418,13 @@ int push_sub_info_to(Qcloud_IoT_Client *c, int len, unsigned short msgId, Messag } QcloudIotSubInfo *sub_info = (QcloudIotSubInfo *)HAL_Malloc(sizeof( - QcloudIotSubInfo) + len); + QcloudIotSubInfo) + len); if (NULL == sub_info) { HAL_MutexUnlock(c->lock_list_sub); Log_e("malloc failed!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - + sub_info->node_state = MQTT_NODE_STATE_NORMANL; sub_info->msg_id = msgId; sub_info->len = len; diff --git a/sdk_src/protocol/mqtt/mqtt_client_connect.c b/sdk_src/protocol/mqtt/mqtt_client_connect.c index b9edc86..c8c15aa 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_connect.c +++ b/sdk_src/protocol/mqtt/mqtt_client_connect.c @@ -55,7 +55,8 @@ typedef enum { * @param the length of buffer needed to contain the serialized version of the packet * @return int indicating function execution status */ -static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) { +static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) +{ size_t len = 0; /* variable depending on MQTT or MQIsdp */ if (3 == options->mqtt_version) { @@ -77,10 +78,16 @@ static uint32_t _get_packet_connect_rem_len(MQTTConnectParams *options) { return (uint32_t) len; } -static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectParams *source) { +static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectParams *source) +{ - POINTER_SANITY_CHECK_RTN(destination); - POINTER_SANITY_CHECK_RTN(source); + POINTER_SANITY_CHECK_RTN(destination); + POINTER_SANITY_CHECK_RTN(source); + + /* In case of reconnecting, source == destination */ + if (source == destination) { + return; + } destination->mqtt_version = source->mqtt_version; destination->client_id = source->client_id; @@ -102,7 +109,8 @@ static void _copy_connect_params(MQTTConnectParams *destination, MQTTConnectPara * @param serialized length * @return int indicating function execution status */ -static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTConnectParams *options, uint32_t *serialized_len) { +static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTConnectParams *options, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -118,28 +126,28 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon long cur_timesec = HAL_Timer_current_sec() + MAX_ACCESS_EXPIRE_TIMEOUT / 1000; if (cur_timesec <= 0 || MAX_ACCESS_EXPIRE_TIMEOUT <= 0) { - cur_timesec = LONG_MAX; + cur_timesec = LONG_MAX; } long cur_timesec_bak = cur_timesec; int cur_timesec_len = 0; - while(cur_timesec_bak != 0) { - cur_timesec_bak /= 10; - ++cur_timesec_len; - } + while (cur_timesec_bak != 0) { + cur_timesec_bak /= 10; + ++cur_timesec_len; + } int username_len = strlen(options->client_id) + strlen(QCLOUD_IOT_DEVICE_SDK_APPID) + MAX_CONN_ID_LEN + cur_timesec_len + 4; options->username = (char*)HAL_Malloc(username_len); get_next_conn_id(options->conn_id); - HAL_Snprintf(options->username, username_len, "%s;%s;%s;%ld", options->client_id, QCLOUD_IOT_DEVICE_SDK_APPID, options->conn_id, cur_timesec); + HAL_Snprintf(options->username, username_len, "%s;%s;%s;%ld", options->client_id, QCLOUD_IOT_DEVICE_SDK_APPID, options->conn_id, cur_timesec); #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - if (options->device_secret != NULL && options->username != NULL) { - char sign[41] = {0}; - utils_hmac_sha1(options->username, strlen(options->username), sign, options->device_secret, options->device_secret_len); - options->password = (char*) HAL_Malloc (51); - if (options->password == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); - HAL_Snprintf(options->password, 51, "%s;hmacsha1", sign); - } + if (options->device_secret != NULL && options->username != NULL) { + char sign[41] = {0}; + utils_hmac_sha1(options->username, strlen(options->username), sign, options->device_secret, options->device_secret_len); + options->password = (char*) HAL_Malloc (51); + if (options->password == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_INVAL); + HAL_Snprintf(options->password, 51, "%s;hmacsha1", sign); + } #endif rem_len = _get_packet_connect_rem_len(options); @@ -167,22 +175,22 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon mqtt_write_char(&ptr, (unsigned char) 3); } - // flags in variable header + // flags in variable header flags |= (options->clean_session) ? MQTT_CONNECT_FLAG_CLEAN_SES : 0; flags |= (options->username != NULL) ? MQTT_CONNECT_FLAG_USERNAME : 0; #if defined(AUTH_WITH_NOTLS) && defined(AUTH_MODE_KEY) - flags |= MQTT_CONNECT_FLAG_PASSWORD; + flags |= MQTT_CONNECT_FLAG_PASSWORD; #endif - + mqtt_write_char(&ptr, flags); - // keep alive interval (unit:ms) in variable header + // keep alive interval (unit:ms) in variable header mqtt_write_uint_16(&ptr, options->keep_alive_interval); // client id mqtt_write_utf8_string(&ptr, options->client_id); - + if ((flags & MQTT_CONNECT_FLAG_USERNAME) && options->username != NULL) { mqtt_write_utf8_string(&ptr, options->username); HAL_Free(options->username); @@ -190,9 +198,9 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon } if ((flags & MQTT_CONNECT_FLAG_PASSWORD) && options->password != NULL) { - mqtt_write_utf8_string(&ptr, options->password); - HAL_Free(options->password); - options->password = NULL; + mqtt_write_utf8_string(&ptr, options->password); + HAL_Free(options->password); + options->password = NULL; } *serialized_len = (uint32_t) (ptr - buf); @@ -208,7 +216,8 @@ static int _serialize_connect_packet(unsigned char *buf, size_t buf_len, MQTTCon * @param buflen the length in bytes of the data in the supplied buffer * @return int indicating function execution status */ -static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, unsigned char *buf, size_t buflen) { +static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, unsigned char *buf, size_t buflen) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(sessionPresent, QCLOUD_ERR_INVAL); @@ -229,7 +238,7 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, } header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; if (CONNACK != type) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -284,7 +293,8 @@ static int _deserialize_connack_packet(uint8_t *sessionPresent, int *connack_rc, * @param options * @return */ -static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) { +static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) +{ IOT_FUNC_ENTRY; @@ -310,14 +320,14 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) // serialize CONNECT packet rc = _serialize_connect_packet(pClient->write_buf, pClient->write_buf_size, &(pClient->options), &len); if (QCLOUD_RET_SUCCESS != rc || 0 == len) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } // send CONNECT packet rc = send_mqtt_packet(pClient, len, &connect_timer); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } HAL_MutexUnlock(pClient->lock_write_buf); @@ -348,7 +358,8 @@ static int _mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *options) IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pParams) { +int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pParams) +{ IOT_FUNC_ENTRY; int rc; @@ -370,7 +381,8 @@ int qcloud_iot_mqtt_connect(Qcloud_IoT_Client *pClient, MQTTConnectParams *pPara IOT_FUNC_EXIT_RC(rc); } -int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; @@ -397,7 +409,8 @@ int qcloud_iot_mqtt_attempt_reconnect(Qcloud_IoT_Client *pClient) { IOT_FUNC_EXIT_RC(QCLOUD_RET_MQTT_RECONNECTED); } -int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_disconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; diff --git a/sdk_src/protocol/mqtt/mqtt_client_net.c b/sdk_src/protocol/mqtt/mqtt_client_net.c index 84b835d..e02d26d 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_net.c +++ b/sdk_src/protocol/mqtt/mqtt_client_net.c @@ -19,14 +19,15 @@ extern "C" { #include "mqtt_client_net.h" -//TODO: how to implement +//TODO: how to implement /** * @brief Check if TLS connection is valid * * @param pNetwork * @return */ -int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) { +int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) +{ return 1; } @@ -37,13 +38,14 @@ int qcloud_iot_mqtt_tls_is_connected(Network *pNetwork) { * @param pConnectParams * @return */ -int qcloud_iot_mqtt_network_init(Network *pNetwork) { +int qcloud_iot_mqtt_network_init(Network *pNetwork) +{ int rc; /* first choice: TLS */ pNetwork->type = NETWORK_TLS; -#ifdef AUTH_WITH_NOTLS +#ifdef AUTH_WITH_NOTLS pNetwork->type = NETWORK_TCP; #endif diff --git a/sdk_src/protocol/mqtt/mqtt_client_publish.c b/sdk_src/protocol/mqtt/mqtt_client_publish.c index 5e24165..9b13dc5 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_publish.c +++ b/sdk_src/protocol/mqtt/mqtt_client_publish.c @@ -31,19 +31,20 @@ extern "C" { * @param enddata pointer to the end of the data: do not read beyond * @return SUCCESS if successful, FAILURE if not */ -static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned char **pptr, unsigned char *enddata) { +static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned char **pptr, unsigned char *enddata) +{ int rc = QCLOUD_ERR_FAILURE; /* the first two bytes are the length of the string */ /* enough length to read the integer? */ if (enddata - (*pptr) > 1) { *stringLen = mqtt_read_uint16_t(pptr); /* increments pptr to point past length */ - - if(*stringLen > QCLOUD_IOT_MQTT_RX_BUF_LEN){ - Log_e("stringLen exceed QCLOUD_IOT_MQTT_RX_BUF_LEN"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - + + if (*stringLen > QCLOUD_IOT_MQTT_RX_BUF_LEN) { + Log_e("stringLen exceed QCLOUD_IOT_MQTT_RX_BUF_LEN"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + if (&(*pptr)[*stringLen] <= enddata) { *string = (char *) *pptr; *pptr += *stringLen; @@ -57,11 +58,12 @@ static int _read_string_with_len(char **string, uint16_t *stringLen, unsigned ch /** * Determines the length of the MQTT publish packet that would be produced using the supplied parameters * @param qos the MQTT QoS of the publish (packetid is omitted for QoS 0) - * @param topicName the topic name to be used in the publish + * @param topicName the topic name to be used in the publish * @param payload_len the length of the payload to be sent * @return the length of buffer needed to contain the serialized version of the packet */ -static uint32_t _get_publish_packet_len(uint8_t qos, char *topicName, size_t payload_len) { +static uint32_t _get_publish_packet_len(uint8_t qos, char *topicName, size_t payload_len) +{ size_t len = 0; len += 2 + strlen(topicName) + payload_len; @@ -138,7 +140,7 @@ static int _mask_push_pubInfo_to(Qcloud_IoT_Client *c, int len, unsigned short m * @return error code. 1 is success */ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16_t *packet_id, char **topicName, - uint16_t *topicNameLen,unsigned char **payload, size_t *payload_len, unsigned char *buf, size_t buf_len) + uint16_t *topicNameLen, unsigned char **payload, size_t *payload_len, unsigned char *buf, size_t buf_len) { IOT_FUNC_ENTRY; @@ -165,11 +167,11 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 } header = mqtt_read_char(&curdata); - type = (header&MQTT_HEADER_TYPE_MASK)>>MQTT_HEADER_TYPE_SHIFT; - *dup = (header&MQTT_HEADER_DUP_MASK)>>MQTT_HEADER_DUP_SHIFT; - *qos = (QoS)((header&MQTT_HEADER_QOS_MASK)>>MQTT_HEADER_QOS_SHIFT); - *retained = header&MQTT_HEADER_RETAIN_MASK; - + type = (header & MQTT_HEADER_TYPE_MASK) >> MQTT_HEADER_TYPE_SHIFT; + *dup = (header & MQTT_HEADER_DUP_MASK) >> MQTT_HEADER_DUP_SHIFT; + *qos = (QoS)((header & MQTT_HEADER_QOS_MASK) >> MQTT_HEADER_QOS_SHIFT); + *retained = header & MQTT_HEADER_RETAIN_MASK; + if (PUBLISH != type) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -208,7 +210,8 @@ int deserialize_publish_packet(uint8_t *dup, QoS *qos, uint8_t *retained, uint16 */ int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes packet_type, uint8_t dup, uint16_t packet_id, - uint32_t *serialized_len) { + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); @@ -253,7 +256,8 @@ int serialize_pub_ack_packet(unsigned char *buf, size_t buf_len, MessageTypes pa static int _serialize_publish_packet(unsigned char *buf, size_t buf_len, uint8_t dup, QoS qos, uint8_t retained, uint16_t packet_id, char *topicName, unsigned char *payload, size_t payload_len, - uint32_t *serialized_len) { + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(serialized_len, QCLOUD_ERR_INVAL); @@ -292,7 +296,8 @@ static int _serialize_publish_packet(unsigned char *buf, size_t buf_len, uint8_t IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, PublishParams *pParams) { +int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, PublishParams *pParams) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pClient, QCLOUD_ERR_INVAL); @@ -304,7 +309,7 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish int rc; ListNode *node = NULL; - + size_t topicLen = strlen(topicName); if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); @@ -326,25 +331,22 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish if (pParams->qos == QOS1) { pParams->id = get_next_packet_id(pClient); if (IOT_Log_Get_Level() <= eLOG_DEBUG) { - Log_d("publish topic seq=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + Log_d("publish topic seq=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + } else { + Log_i("publish topic seq=%d|topicName=%s", pParams->id, topicName); } - else { - Log_i("publish topic seq=%d|topicName=%s", pParams->id, topicName); + } else { + if (IOT_Log_Get_Level() <= eLOG_DEBUG) { + Log_d("publish packetID=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); + } else { + Log_i("publish packetID=%d|topicName=%s", pParams->id, topicName); } } - else { - if (IOT_Log_Get_Level() <= eLOG_DEBUG) { - Log_d("publish packetID=%d|topicName=%s|payload=%s", pParams->id, topicName, (char *)pParams->payload); - } - else { - Log_i("publish packetID=%d|topicName=%s", pParams->id, topicName); - } - } rc = _serialize_publish_packet(pClient->write_buf, pClient->write_buf_size, 0, pParams->qos, pParams->retained, pParams->id, topicName, (unsigned char *) pParams->payload, pParams->payload_len, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); IOT_FUNC_EXIT_RC(rc); } @@ -359,20 +361,20 @@ int qcloud_iot_mqtt_publish(Qcloud_IoT_Client *pClient, char *topicName, Publish /* send the publish packet */ rc = send_mqtt_packet(pClient, len, &timer); - if (QCLOUD_RET_SUCCESS != rc) { - if (pParams->qos > QOS0) { - HAL_MutexLock(pClient->lock_list_pub); - list_remove(pClient->list_pub_wait_ack, node); - HAL_MutexUnlock(pClient->lock_list_pub); - } + if (QCLOUD_RET_SUCCESS != rc) { + if (pParams->qos > QOS0) { + HAL_MutexLock(pClient->lock_list_pub); + list_remove(pClient->list_pub_wait_ack, node); + HAL_MutexUnlock(pClient->lock_list_pub); + } - HAL_MutexUnlock(pClient->lock_write_buf); - IOT_FUNC_EXIT_RC(rc); - } + HAL_MutexUnlock(pClient->lock_write_buf); + IOT_FUNC_EXIT_RC(rc); + } - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); - IOT_FUNC_EXIT_RC(pParams->id); + IOT_FUNC_EXIT_RC(pParams->id); } #ifdef __cplusplus diff --git a/sdk_src/protocol/mqtt/mqtt_client_subscribe.c b/sdk_src/protocol/mqtt/mqtt_client_subscribe.c index 0fbf059..0d906f0 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_subscribe.c +++ b/sdk_src/protocol/mqtt/mqtt_client_subscribe.c @@ -28,7 +28,8 @@ extern "C" { * @param topicFilters the array of topic filter strings to be used in the publish * @return the length of buffer needed to contain the serialized version of the packet */ -static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilters) { +static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilters) +{ size_t i; size_t len = 2; /* packetid */ @@ -51,7 +52,8 @@ static uint32_t _get_subscribe_packet_rem_len(uint32_t count, char **topicFilter * @return the length of the serialized data. <= 0 indicates error */ static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8_t dup, uint16_t packet_id, uint32_t count, - char **topicFilters, QoS *requestedQoSs, uint32_t *serialized_len) { + char **topicFilters, QoS *requestedQoSs, uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -90,7 +92,8 @@ static int _serialize_subscribe_packet(unsigned char *buf, size_t buf_len, uint8 IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, SubscribeParams *pParams) { +int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, SubscribeParams *pParams) +{ IOT_FUNC_ENTRY; int rc; @@ -105,7 +108,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub uint16_t packet_id = 0; ListNode *node = NULL; - + size_t topicLen = strlen(topicFilter); if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); @@ -115,7 +118,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub Log_e("QoS2 is not supported currently"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_QOS_NOT_SUPPORT); } - + if (!get_client_conn_state(pClient)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN) } @@ -126,10 +129,10 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub Log_e("malloc failed"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - + strcpy(topic_filter_stored, topicFilter); topic_filter_stored[topicLen] = 0; - + InitTimer(&timer); countdown_ms(&timer, pClient->command_timeout_ms); @@ -140,8 +143,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub rc = _serialize_subscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, &topic_filter_stored, &pParams->qos, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -160,7 +163,7 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } - + // send SUBSCRIBE packet rc = send_mqtt_packet(pClient, len, &timer); if (QCLOUD_RET_SUCCESS != rc) { @@ -168,8 +171,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub list_remove(pClient->list_sub_wait_ack, node); HAL_MutexUnlock(pClient->lock_list_sub); - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -178,7 +181,8 @@ int qcloud_iot_mqtt_subscribe(Qcloud_IoT_Client *pClient, char *topicFilter, Sub IOT_FUNC_EXIT_RC(packet_id); } -int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { +int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; @@ -208,7 +212,7 @@ int qcloud_iot_mqtt_resubscribe(Qcloud_IoT_Client *pClient) { rc = qcloud_iot_mqtt_subscribe(pClient, topic, &temp_param); if (rc < 0) { - Log_e("resubscribe failed %d, topic: %s", rc, topic); + Log_e("resubscribe failed %d, topic: %s", rc, topic); IOT_FUNC_EXIT_RC(rc); } } diff --git a/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c b/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c index 75357f1..3b11d2d 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c +++ b/sdk_src/protocol/mqtt/mqtt_client_unsubscribe.c @@ -28,7 +28,8 @@ extern "C" { * @param topicFilters the array of topic filter strings to be used in the publish * @return the length of buffer needed to contain the serialized version of the packet */ -static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilters) { +static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilters) +{ size_t i; size_t len = 2; /* packetid */ @@ -51,9 +52,10 @@ static uint32_t _get_unsubscribe_packet_rem_len(uint32_t count, char **topicFilt * @return int indicating function execution status */ static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, - uint8_t dup, uint16_t packet_id, - uint32_t count, char **topicFilters, - uint32_t *serialized_len) { + uint8_t dup, uint16_t packet_id, + uint32_t count, char **topicFilters, + uint32_t *serialized_len) +{ IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(buf, QCLOUD_ERR_INVAL); @@ -89,7 +91,8 @@ static int _serialize_unsubscribe_packet(unsigned char *buf, size_t buf_len, IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { +int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) +{ IOT_FUNC_ENTRY; int rc; @@ -108,12 +111,12 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { if (topicLen > MAX_SIZE_OF_CLOUD_TOPIC) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_TOPIC_LENGTH); } - + /* Remove from message handler array */ HAL_MutexLock(pClient->lock_generic); - for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { + for (i = 0; i < MAX_MESSAGE_HANDLERS; ++i) { if ((pClient->sub_handles[i].topic_filter != NULL && !strcmp(pClient->sub_handles[i].topic_filter, topicFilter)) - || strstr(topicFilter,"/#") != NULL || strstr(topicFilter,"/+") != NULL) { + || strstr(topicFilter, "/#") != NULL || strstr(topicFilter, "/+") != NULL) { /* notify this event to topic subscriber */ if (NULL != pClient->sub_handles[i].sub_event_handler) pClient->sub_handles[i].sub_event_handler( @@ -156,8 +159,8 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { rc = _serialize_unsubscribe_packet(pClient->write_buf, pClient->write_buf_size, 0, packet_id, 1, &topic_filter_stored, &len); if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } @@ -182,8 +185,8 @@ int qcloud_iot_mqtt_unsubscribe(Qcloud_IoT_Client *pClient, char *topicFilter) { list_remove(pClient->list_sub_wait_ack, node); HAL_MutexUnlock(pClient->lock_list_sub); - HAL_MutexUnlock(pClient->lock_write_buf); - HAL_Free(topic_filter_stored); + HAL_MutexUnlock(pClient->lock_write_buf); + HAL_Free(topic_filter_stored); IOT_FUNC_EXIT_RC(rc); } diff --git a/sdk_src/protocol/mqtt/mqtt_client_yield.c b/sdk_src/protocol/mqtt/mqtt_client_yield.c index 107a451..cbad49b 100644 --- a/sdk_src/protocol/mqtt/mqtt_client_yield.c +++ b/sdk_src/protocol/mqtt/mqtt_client_yield.c @@ -27,7 +27,7 @@ static uint32_t _get_random_interval(void) { srand((unsigned)HAL_GetTimeMs()); /* range: 1000 - 2000 ms, in 10ms unit */ - return (rand() % 100 + 100)*10; + return (rand() % 100 + 100) * 10; } @@ -43,7 +43,7 @@ static void _iot_disconnect_callback(Qcloud_IoT_Client *pClient) } } -static void _reconnect_callback(Qcloud_IoT_Client* pClient) +static void _reconnect_callback(Qcloud_IoT_Client* pClient) { if (NULL != pClient->event_handle.h_fp) { MQTTEventMsg msg; @@ -60,10 +60,11 @@ static void _reconnect_callback(Qcloud_IoT_Client* pClient) * @param pClient * @return */ -static int _handle_disconnect(Qcloud_IoT_Client *pClient) { +static int _handle_disconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int rc; - + if (0 == get_client_conn_state(pClient)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } @@ -76,7 +77,7 @@ static int _handle_disconnect(Qcloud_IoT_Client *pClient) { } Log_e("disconnect MQTT for some reasons.."); - + _iot_disconnect_callback(pClient); // exceptional disconnection @@ -90,7 +91,8 @@ static int _handle_disconnect(Qcloud_IoT_Client *pClient) { * @param pClient * @return */ -static int _handle_reconnect(Qcloud_IoT_Client *pClient) { +static int _handle_reconnect(Qcloud_IoT_Client *pClient) +{ IOT_FUNC_ENTRY; int8_t isPhysicalLayerConnected = 1; @@ -102,7 +104,7 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { } if (NULL != pClient->network_stack.is_connected) { - isPhysicalLayerConnected = (int8_t) pClient->network_stack.is_connected(&(pClient->network_stack)); // always return 1 + isPhysicalLayerConnected = (int8_t) pClient->network_stack.is_connected(&(pClient->network_stack)); // always return 1 } if (isPhysicalLayerConnected) { @@ -112,15 +114,14 @@ static int _handle_reconnect(Qcloud_IoT_Client *pClient) { _reconnect_callback(pClient); #ifdef LOG_UPLOAD if (is_log_uploader_init()) { - int log_level; + int log_level; if (qcloud_get_log_level(pClient, &log_level) < 0) { Log_e("client get log topic failed: %d", rc); } } -#endif +#endif IOT_FUNC_EXIT_RC(rc); - } - else { + } else { Log_e("attempt to reconnect failed, errCode: %d", rc); rc = QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT; } @@ -167,7 +168,7 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) IOT_FUNC_EXIT_RC(rc); } - /* there is no ping outstanding - send one */ + /* there is no ping outstanding - send one */ HAL_MutexLock(pClient->lock_write_buf); rc = serialize_packet_with_zero_payload(pClient->write_buf, pClient->write_buf_size, PINGREQ, &serialized_len); if (QCLOUD_RET_SUCCESS != rc) { @@ -177,25 +178,25 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) /* send the ping packet */ int i = 0; - InitTimer(&timer); + InitTimer(&timer); do { countdown_ms(&timer, pClient->command_timeout_ms); rc = send_mqtt_packet(pClient, serialized_len, &timer); } while (QCLOUD_RET_SUCCESS != rc && (i++ < 3)); - + if (QCLOUD_RET_SUCCESS != rc) { - HAL_MutexUnlock(pClient->lock_write_buf); + HAL_MutexUnlock(pClient->lock_write_buf); //If sending a PING fails, propably the connection is not OK and we decide to disconnect and begin reconnection attempts Log_e("Fail to send PING request. Something wrong with the connection."); rc = _handle_disconnect(pClient); IOT_FUNC_EXIT_RC(rc); } HAL_MutexUnlock(pClient->lock_write_buf); - + HAL_MutexLock(pClient->lock_generic); pClient->is_ping_outstanding++; /* start a timer to wait for PINGRESP from server */ - countdown(&pClient->ping_timer, Min(5, pClient->options.keep_alive_interval/2)); + countdown(&pClient->ping_timer, Min(5, pClient->options.keep_alive_interval / 2)); HAL_MutexUnlock(pClient->lock_generic); Log_d("PING request %u has been sent...", pClient->is_ping_outstanding); @@ -210,7 +211,8 @@ static int _mqtt_keep_alive(Qcloud_IoT_Client *pClient) * * @return QCLOUD_RET_SUCCESS when success, QCLOUD_ERR_MQTT_ATTEMPTING_RECONNECT when try reconnecing, or err code for failure */ -int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { +int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) +{ IOT_FUNC_ENTRY; int rc = QCLOUD_RET_SUCCESS; @@ -234,8 +236,8 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { countdown_ms(&timer, timeout_ms); // 3. main loop for packet reading/handling and keep alive maintainance - while (!expired(&timer)) { - + while (!expired(&timer)) { + if (!get_client_conn_state(pClient)) { if (pClient->current_reconnect_wait_interval > MAX_RECONNECT_WAIT_INTERVAL) { rc = QCLOUD_ERR_MQTT_RECONNECT_TIMEOUT; @@ -244,7 +246,7 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { rc = _handle_reconnect(pClient); continue; - } + } rc = cycle_for_read(pClient, &timer, &packet_type, QOS0); @@ -256,11 +258,10 @@ int qcloud_iot_mqtt_yield(Qcloud_IoT_Client *pClient, uint32_t timeout_ms) { qcloud_iot_mqtt_sub_info_proc(pClient); rc = _mqtt_keep_alive(pClient); - } - else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_SSL_READ || - rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN || rc == QCLOUD_ERR_TCP_READ_FAIL){ - Log_e("network read failed, rc: %d. MQTT Disconnect.", rc); - rc = _handle_disconnect(pClient); + } else if (rc == QCLOUD_ERR_SSL_READ_TIMEOUT || rc == QCLOUD_ERR_SSL_READ || + rc == QCLOUD_ERR_TCP_PEER_SHUTDOWN || rc == QCLOUD_ERR_TCP_READ_FAIL) { + Log_e("network read failed, rc: %d. MQTT Disconnect.", rc); + rc = _handle_disconnect(pClient); } if (rc == QCLOUD_ERR_MQTT_NO_CONN) { @@ -453,10 +454,10 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) /* notify this event to topic subscriber */ if (NULL != sub_info->handler.sub_event_handler) - sub_info->handler.sub_event_handler(pClient, - MQTT_EVENT_SUBCRIBE_TIMEOUT, sub_info->handler.handler_user_data); - - } else { + sub_info->handler.sub_event_handler(pClient, + MQTT_EVENT_SUBCRIBE_TIMEOUT, sub_info->handler.handler_user_data); + + } else { /* unsubscribe timeout */ msg.event_type = MQTT_EVENT_UNSUBCRIBE_TIMEOUT; msg.msg = (void *)(uintptr_t)packet_id; @@ -467,7 +468,7 @@ int qcloud_iot_mqtt_sub_info_proc(Qcloud_IoT_Client *pClient) if (NULL != sub_info->handler.topic_filter) HAL_Free((void *)(sub_info->handler.topic_filter)); - + temp_node = node; } diff --git a/sdk_src/services/data_template/data_template_aciton.c b/sdk_src/services/data_template/data_template_aciton.c index 4c4be1d..42a495a 100644 --- a/sdk_src/services/data_template/data_template_aciton.c +++ b/sdk_src/services/data_template/data_template_aciton.c @@ -28,51 +28,51 @@ #include "data_template_client_json.h" #include "qcloud_iot_export_data_template.h" -//Action Subscribe -static int _parse_action_input(DeviceAction *pAction, char *pInput) -{ - int i; - char *temp; - DeviceProperty *pActionInput = pAction->pInput; - - //check and copy - for (i = 0; i < pAction->input_num; i++) { - if (JSTRING == pActionInput[i].type) { - pActionInput[i].data = LITE_json_value_of(pActionInput[i].key, pInput); - if(NULL == pActionInput[i].data) { - Log_e("action input data [%s] not found!", pActionInput[i].key); - return -1; - } - } else { - temp = LITE_json_value_of(pActionInput[i].key, pInput); - if(NULL == temp) { - Log_e("action input data [%s] not found!", pActionInput[i].key); - return -1; - } - if(JINT32 == pActionInput[i].type) { - if (sscanf(temp, "%" SCNi32, (int32_t *)pActionInput[i].data) != 1) { - HAL_Free(temp); - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - return -1; - } - } else if( JFLOAT == pActionInput[i].type) { - if (sscanf(temp, "%f", (float *)pActionInput[i].data) != 1) { - HAL_Free(temp); - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - return -1; - } - } else if( JUINT32 == pActionInput[i].type) { - if (sscanf(temp, "%" SCNu32, (uint32_t *) pActionInput[i].data) != 1) { - HAL_Free(temp); - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - return -1; - } - } - HAL_Free(temp); - } - } - - return 0; +//Action Subscribe +static int _parse_action_input(DeviceAction *pAction, char *pInput) +{ + int i; + char *temp; + DeviceProperty *pActionInput = pAction->pInput; + + //check and copy + for (i = 0; i < pAction->input_num; i++) { + if (JSTRING == pActionInput[i].type) { + pActionInput[i].data = LITE_json_value_of(pActionInput[i].key, pInput); + if (NULL == pActionInput[i].data) { + Log_e("action input data [%s] not found!", pActionInput[i].key); + return -1; + } + } else { + temp = LITE_json_value_of(pActionInput[i].key, pInput); + if (NULL == temp) { + Log_e("action input data [%s] not found!", pActionInput[i].key); + return -1; + } + if (JINT32 == pActionInput[i].type) { + if (sscanf(temp, "%" SCNi32, (int32_t *)pActionInput[i].data) != 1) { + HAL_Free(temp); + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + return -1; + } + } else if ( JFLOAT == pActionInput[i].type) { + if (sscanf(temp, "%f", (float *)pActionInput[i].data) != 1) { + HAL_Free(temp); + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + return -1; + } + } else if ( JUINT32 == pActionInput[i].type) { + if (sscanf(temp, "%" SCNu32, (uint32_t *) pActionInput[i].data) != 1) { + HAL_Free(temp); + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + return -1; + } + } + HAL_Free(temp); + } + } + + return 0; } static void _handle_aciton(Qcloud_IoT_Template *pTemplate, List *list, const char *pClientToken, const char *pActionId, uint32_t timestamp, char *pInput) @@ -100,18 +100,18 @@ static void _handle_aciton(Qcloud_IoT_Template *pTemplate, List *list, const cha Log_e("node's value is invalid!"); continue; } - - ActionHandler *pActionHandle = (ActionHandler *)node->val; - - // check action id and call callback - if(0 == strcmp(pActionId,((DeviceAction*)pActionHandle->action)->pActionId)){ - if(NULL != pActionHandle->callback) { - if(!_parse_action_input(pActionHandle->action, pInput)) { - ((DeviceAction*)pActionHandle->action)->timestamp = timestamp; - pActionHandle->callback(pTemplate, pClientToken, pActionHandle->action); - } - } - } + + ActionHandler *pActionHandle = (ActionHandler *)node->val; + + // check action id and call callback + if (0 == strcmp(pActionId, ((DeviceAction*)pActionHandle->action)->pActionId)) { + if (NULL != pActionHandle->callback) { + if (!_parse_action_input(pActionHandle->action, pInput)) { + ((DeviceAction*)pActionHandle->action)->timestamp = timestamp; + pActionHandle->callback(pTemplate, pClientToken, pActionHandle->action); + } + } + } } list_iterator_destroy(iter); } @@ -119,93 +119,92 @@ static void _handle_aciton(Qcloud_IoT_Template *pTemplate, List *list, const cha IOT_FUNC_EXIT; } -static void _on_action_handle_callback(void *pClient, MQTTMessage *message, void *pUserData) +static void _on_action_handle_callback(void *pClient, MQTTMessage *message, void *pUserData) { - POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + POINTER_SANITY_CHECK_RTN(message); +// Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; +// Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)pUserData; - char *type_str = NULL; + char *type_str = NULL; char* client_token = NULL; char* action_id = NULL; - char *pInput = NULL; - int timestamp = 0; - - Log_d("recv:%.*s",(int) message->payload_len, (char *) message->payload); - - // prase_method - if (!parse_template_method_type((char *) message->payload, &type_str)) - { + char *pInput = NULL; + int timestamp = 0; + + Log_d("recv:%.*s", (int) message->payload_len, (char *) message->payload); + + // prase_method + if (!parse_template_method_type((char *) message->payload, &type_str)) { Log_e("Fail to parse method!"); goto EXIT; } if (strcmp(type_str, CALL_ACTION)) { - goto EXIT; - } + goto EXIT; + } - // prase client Token + // prase client Token if (!parse_client_token((char *) message->payload, &client_token)) { Log_e("fail to parse client token!"); goto EXIT; } - // prase action ID - if (!parse_action_id((char *) message->payload, &action_id)) { + // prase action ID + if (!parse_action_id((char *) message->payload, &action_id)) { Log_e("fail to parse action id!"); goto EXIT; } - // prase timestamp - if (!parse_time_stamp((char *) message->payload, ×tamp)) { + // prase timestamp + if (!parse_time_stamp((char *) message->payload, ×tamp)) { Log_e("fail to parse timestamp!"); goto EXIT; } - // prase action input - if (!parse_action_input((char *) message->payload, &pInput)) { + // prase action input + if (!parse_action_input((char *) message->payload, &pInput)) { Log_e("fail to parse action input!"); goto EXIT; - } + } - //find action ID in register list and call handle - if (template_client != NULL) + //find action ID in register list and call handle + if (template_client != NULL) _handle_aciton(template_client, template_client->inner_data.action_handle_list, client_token, action_id, timestamp, pInput); EXIT: - HAL_Free(type_str); - HAL_Free(client_token); - HAL_Free(pInput); - return; + HAL_Free(type_str); + HAL_Free(client_token); + HAL_Free(pInput); + return; } int IOT_Action_Init(void *c) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; - static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - - int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - - if (size < 0 || size > sizeof(topic_name) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } - - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _on_action_handle_callback; - - return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; + static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + + int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _on_action_handle_callback; + sub_params.user_data = pTemplate; + + return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); } -//Action register +//Action register static int _add_action_handle_to_template_list(Qcloud_IoT_Template *pTemplate, DeviceAction *pAction, OnActionHandleCallback callback) { IOT_FUNC_ENTRY; ActionHandler *action_handle = (ActionHandler *)HAL_Malloc(sizeof(ActionHandler)); - if (NULL == action_handle) - { + if (NULL == action_handle) { Log_e("run memory malloc is error!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -236,14 +235,14 @@ int IOT_Action_Register(void *pTemplate, DeviceAction *pAction, OnActionHandleCa { IOT_FUNC_ENTRY; - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; POINTER_SANITY_CHECK(pTemplate, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); POINTER_SANITY_CHECK(pAction, QCLOUD_ERR_INVAL); - if (_check_action_existence(ptemplate, pAction)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_ACTION_EXIST); + if (_check_action_existence(ptemplate, pAction)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_ACTION_EXIST); int rc; HAL_MutexLock(ptemplate->mutex); @@ -255,9 +254,9 @@ int IOT_Action_Register(void *pTemplate, DeviceAction *pAction, OnActionHandleCa int IOT_Action_Remove(void *pTemplate, DeviceAction *pAction) { - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; - if (!_check_action_existence(ptemplate, pAction)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_NOT_ACTION_EXIST); + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)pTemplate; + if (!_check_action_existence(ptemplate, pAction)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_NOT_ACTION_EXIST); int rc = QCLOUD_RET_SUCCESS; @@ -271,130 +270,129 @@ int IOT_Action_Remove(void *pTemplate, DeviceAction *pAction) list_remove(ptemplate->inner_data.action_handle_list, node); } HAL_MutexUnlock(ptemplate->mutex); - + return rc; } //Action post to server -static int _iot_action_json_init(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction) +static int _iot_action_json_init(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction) { - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - int32_t rc_of_snprintf; - memset(jsonBuffer, 0, sizeOfBuffer); - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", REPORT_ACTION, pClientToken); + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + int32_t rc_of_snprintf; + memset(jsonBuffer, 0, sizeOfBuffer); + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", REPORT_ACTION, pClientToken); return check_snprintf_return(rc_of_snprintf, sizeOfBuffer); } -static int _iot_construct_action_json(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction, sReplyPara *replyPara) -{ - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - uint8_t i; - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pAction, QCLOUD_ERR_INVAL); - - int rc = _iot_action_json_init(ptemplate, jsonBuffer, sizeOfBuffer, pClientToken, pAction); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("event json init failed: %d", rc); - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"code\":%d, \"status\":\"%s\", \"response\":{",\ - replyPara->code, replyPara->status_msg); - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - DeviceProperty *pJsonNode = pAction->pOutput; - for (i = 0; i < pAction->output_num; i++) { - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - Log_e("%dth/%d null event property data", i, pAction->output_num); - return QCLOUD_ERR_INVAL; - } - pJsonNode++; - } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - //finish json - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); - - return check_snprintf_return(rc_of_snprintf, remain_size); -} +static int _iot_construct_action_json(void *handle, char *jsonBuffer, size_t sizeOfBuffer, const char *pClientToken, DeviceAction *pAction, sReplyPara *replyPara) +{ + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + uint8_t i; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; + + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pAction, QCLOUD_ERR_INVAL); + + int rc = _iot_action_json_init(ptemplate, jsonBuffer, sizeOfBuffer, pClientToken, pAction); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("event json init failed: %d", rc); + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"code\":%d, \"status\":\"%s\", \"response\":{", \ + replyPara->code, replyPara->status_msg); + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + DeviceProperty *pJsonNode = pAction->pOutput; + for (i = 0; i < pAction->output_num; i++) { + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + Log_e("%dth/%d null event property data", i, pAction->output_num); + return QCLOUD_ERR_INVAL; + } + pJsonNode++; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + //finish json + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); + + return check_snprintf_return(rc_of_snprintf, remain_size); +} static int _publish_action_to_cloud(void *c, char *pJsonDoc) { - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; - - int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > sizeof(topic) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); - return QCLOUD_ERR_FAILURE; - } - - PublishParams pubParams = DEFAULT_PUB_PARAMS; - pubParams.qos = QOS1; - pubParams.payload_len = strlen(pJsonDoc); - pubParams.payload = (char *) pJsonDoc; - - rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); - - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; + + int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/action/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (size < 0 || size > sizeof(topic) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); + return QCLOUD_ERR_FAILURE; + } + + PublishParams pubParams = DEFAULT_PUB_PARAMS; + pubParams.qos = QOS1; + pubParams.payload_len = strlen(pJsonDoc); + pubParams.payload = (char *) pJsonDoc; + + rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); + + IOT_FUNC_EXIT_RC(rc); } -int IOT_ACTION_REPLY(void *pClient, const char *pClientToken, char *pJsonDoc, size_t sizeOfBuffer, DeviceAction *pAction, sReplyPara *replyPara) +int IOT_ACTION_REPLY(void *pClient, const char *pClientToken, char *pJsonDoc, size_t sizeOfBuffer, DeviceAction *pAction, sReplyPara *replyPara) { - int rc; - - rc = _iot_construct_action_json(pClient, pJsonDoc, sizeOfBuffer, pClientToken, pAction, replyPara); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("construct action json fail, %d",rc); - return rc; - } - - rc = _publish_action_to_cloud(pClient, pJsonDoc); - if (rc < 0) { - Log_e("publish action to cloud fail, %d",rc); - } - - return rc; + int rc; + + rc = _iot_construct_action_json(pClient, pJsonDoc, sizeOfBuffer, pClientToken, pAction, replyPara); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("construct action json fail, %d", rc); + return rc; + } + + rc = _publish_action_to_cloud(pClient, pJsonDoc); + if (rc < 0) { + Log_e("publish action to cloud fail, %d", rc); + } + + return rc; } -#endif +#endif diff --git a/sdk_src/services/data_template/data_template_client.c b/sdk_src/services/data_template/data_template_client.c index eb99baa..4eb8639 100644 --- a/sdk_src/services/data_template/data_template_client.c +++ b/sdk_src/services/data_template/data_template_client.c @@ -31,95 +31,96 @@ extern "C" { #include "data_template_client_common.h" -static void _init_request_params(RequestParams *pParams, Method method, OnReplyCallback callback, void *userContext, uint8_t timeout_sec) { - pParams->method = method; - pParams->user_context = userContext; - pParams->timeout_sec = timeout_sec; - pParams->request_callback = callback; +static void _init_request_params(RequestParams *pParams, Method method, OnReplyCallback callback, void *userContext, uint8_t timeout_sec) +{ + pParams->method = method; + pParams->user_context = userContext; + pParams->timeout_sec = timeout_sec; + pParams->request_callback = callback; } -int IOT_Template_Publish(void *handle, char *topicName, PublishParams *pParams) +int IOT_Template_Publish(void *handle, char *topicName, PublishParams *pParams) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; - return qcloud_iot_mqtt_publish(template_client->mqtt, topicName, pParams); + return qcloud_iot_mqtt_publish(template_client->mqtt, topicName, pParams); } -int IOT_Template_Subscribe(void *handle, char *topicFilter, SubscribeParams *pParams) +int IOT_Template_Subscribe(void *handle, char *topicFilter, SubscribeParams *pParams) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; - return qcloud_iot_mqtt_subscribe(template_client->mqtt, topicFilter, pParams); + return qcloud_iot_mqtt_subscribe(template_client->mqtt, topicFilter, pParams); } -int IOT_Template_Unsubscribe(void *handle, char *topicFilter) +int IOT_Template_Unsubscribe(void *handle, char *topicFilter) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)handle; - return qcloud_iot_mqtt_unsubscribe(template_client->mqtt, topicFilter); + return qcloud_iot_mqtt_unsubscribe(template_client->mqtt, topicFilter); } bool IOT_Template_IsConnected(void *handle) { - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - IOT_FUNC_EXIT_RC(IOT_MQTT_IsConnected(template_client->mqtt)) + IOT_FUNC_EXIT_RC(IOT_MQTT_IsConnected(template_client->mqtt)) } -int IOT_Template_Register_Property(void *handle, DeviceProperty *pProperty, OnPropRegCallback callback) +int IOT_Template_Register_Property(void *handle, DeviceProperty *pProperty, OnPropRegCallback callback) { IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - int rc; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + int rc; if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (template_common_check_property_existence(ptemplate, pProperty)) - IOT_FUNC_EXIT_RC(QCLOUD_ERR_PROPERTY_EXIST); + if (template_common_check_property_existence(ptemplate, pProperty)) + IOT_FUNC_EXIT_RC(QCLOUD_ERR_PROPERTY_EXIST); rc = template_common_register_property_on_delta(ptemplate, pProperty, callback); IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_UnRegister_Property(void *handle, DeviceProperty *pProperty) +int IOT_Template_UnRegister_Property(void *handle, DeviceProperty *pProperty) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { + if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - if (!template_common_check_property_existence(ptemplate, pProperty)) { + if (!template_common_check_property_existence(ptemplate, pProperty)) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_NOT_PROPERTY_EXIST); } - int rc = template_common_remove_property(ptemplate, pProperty); - IOT_FUNC_EXIT_RC(rc); + int rc = template_common_remove_property(ptemplate, pProperty); + IOT_FUNC_EXIT_RC(rc); } #ifdef ACTION_ENABLED -int IOT_Template_Register_Action(void *handle, DeviceAction *pAction, OnActionHandleCallback callback) +int IOT_Template_Register_Action(void *handle, DeviceAction *pAction, OnActionHandleCallback callback) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - int rc; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + int rc; if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); @@ -129,43 +130,43 @@ int IOT_Template_Register_Action(void *handle, DeviceAction *pAction, OnActionHa IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_UnRegister_Action(void *handle, DeviceAction *pAction) +int IOT_Template_UnRegister_Action(void *handle, DeviceAction *pAction) { - IOT_FUNC_ENTRY; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + IOT_FUNC_ENTRY; + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { + if (IOT_MQTT_IsConnected(ptemplate->mqtt) == false) { IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); } - int rc = IOT_Action_Remove(ptemplate, pAction); - IOT_FUNC_EXIT_RC(rc); + int rc = IOT_Action_Remove(ptemplate, pAction); + IOT_FUNC_EXIT_RC(rc); } #endif static void _copy_template_init_params_to_mqtt(MQTTInitParams *pMqttInitParams, TemplateInitParams *templateInitParams) { - pMqttInitParams->device_name = templateInitParams->device_name; + pMqttInitParams->device_name = templateInitParams->device_name; pMqttInitParams->product_id = templateInitParams->product_id; #ifdef AUTH_MODE_CERT - pMqttInitParams->cert_file = templateInitParams->cert_file; - pMqttInitParams->key_file = templateInitParams->key_file; + pMqttInitParams->cert_file = templateInitParams->cert_file; + pMqttInitParams->key_file = templateInitParams->key_file; #else - pMqttInitParams->device_secret = templateInitParams->device_secret; + pMqttInitParams->device_secret = templateInitParams->device_secret; #endif - pMqttInitParams->command_timeout = templateInitParams->command_timeout; + pMqttInitParams->command_timeout = templateInitParams->command_timeout; pMqttInitParams->keep_alive_interval_ms = templateInitParams->keep_alive_interval_ms; pMqttInitParams->clean_session = templateInitParams->clean_session; pMqttInitParams->auto_connect_enable = templateInitParams->auto_connect_enable; } -static void _reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) +static void _reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) { - Request *request = (Request *)pUserdata; - Log_d("replyAck=%d", replyAck); + Request *request = (Request *)pUserdata; + Log_d("replyAck=%d", replyAck); if (NULL != pReceivedJsonDocument) { Log_d("Received Json Document=%s", pReceivedJsonDocument); @@ -173,118 +174,117 @@ static void _reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const Log_d("Received Json Document is NULL"); } - *((ReplyAck *)(request->user_context))= replyAck; + *((ReplyAck *)(request->user_context)) = replyAck; } /*control data may be for get status replay*/ -static void _get_status_reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) +static void _get_status_reply_ack_cb(void *pClient, Method method, ReplyAck replyAck, const char *pReceivedJsonDocument, void *pUserdata) { - Request *request = (Request *)pUserdata; - - Log_d("replyAck=%d", replyAck); - if (NULL == pReceivedJsonDocument) { + Request *request = (Request *)pUserdata; + + Log_d("replyAck=%d", replyAck); + if (NULL == pReceivedJsonDocument) { Log_d("Received Json Document is NULL"); - }else{ - Log_d("Received Json Document=%s", pReceivedJsonDocument); - } - - if (*((ReplyAck *)request->user_context) == ACK_ACCEPTED){ - IOT_Template_ClearControl(pClient, request->client_token, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - }else{ - *((ReplyAck *)request->user_context)= replyAck; - } + } else { + Log_d("Received Json Document=%s", pReceivedJsonDocument); + } + + if (*((ReplyAck *)request->user_context) == ACK_ACCEPTED) { + IOT_Template_ClearControl(pClient, request->client_token, NULL, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + } else { + *((ReplyAck *)request->user_context) = replyAck; + } } -static int _template_ConstructControlReply(char *jsonBuffer, size_t sizeOfBuffer, sReplyPara *replyPara) +static int _template_ConstructControlReply(char *jsonBuffer, size_t sizeOfBuffer, sReplyPara *replyPara) { - - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - int rc; - size_t remain_size = 0; - int32_t rc_of_snprintf; + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + + int rc; + size_t remain_size = 0; + int32_t rc_of_snprintf; if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } - rc_of_snprintf = HAL_Snprintf(jsonBuffer , remain_size, "{\"code\":%d, \"clientToken\":\"%s\",", replyPara->code, get_control_clientToken()); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - + rc_of_snprintf = HAL_Snprintf(jsonBuffer, remain_size, "{\"code\":%d, \"clientToken\":\"%s\",", replyPara->code, get_control_clientToken()); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { return rc; } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } - if(strlen(replyPara->status_msg) > 0){ - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"status\":\"%s\"}", replyPara->status_msg); - }else{ - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}"); - } + if (strlen(replyPara->status_msg) > 0) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"status\":\"%s\"}", replyPara->status_msg); + } else { + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}"); + } + + rc = check_snprintf_return(rc_of_snprintf, remain_size); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - - return rc; + return rc; } -static void _template_mqtt_event_handler(void *pclient, void *context, MQTTEventMsg *msg) +static void _template_mqtt_event_handler(void *pclient, void *context, MQTTEventMsg *msg) { - uintptr_t packet_id = (uintptr_t)msg->msg; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)context; - MQTTMessage* topic_info = (MQTTMessage*)msg->msg; - - switch (msg->event_type) { - case MQTT_EVENT_SUBCRIBE_SUCCESS: - Log_d("template subscribe success, packet-id=%u", packet_id); - if (template_client->inner_data.sync_status > 0) - template_client->inner_data.sync_status = 0; - break; - case MQTT_EVENT_SUBCRIBE_TIMEOUT: - Log_d("template subscribe wait ack timeout, packet-id=%u", packet_id); - if (template_client->inner_data.sync_status > 0) - template_client->inner_data.sync_status = -1; - break; - case MQTT_EVENT_SUBCRIBE_NACK: - Log_d("template subscribe nack, packet-id=%u", packet_id); - if (template_client->inner_data.sync_status > 0) - template_client->inner_data.sync_status = -1; - break; - case MQTT_EVENT_PUBLISH_RECVEIVED: - Log_d("template topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", - topic_info->topic_len, - topic_info->ptopic, - topic_info->payload_len, - topic_info->payload); - break; - default: - /* Log_i("Should NOT arrive here."); */ - break; - } - if (template_client->event_handle.h_fp != NULL) - { - template_client->event_handle.h_fp(template_client, template_client->event_handle.context, msg); - } + uintptr_t packet_id = (uintptr_t)msg->msg; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template *)context; + MQTTMessage* topic_info = (MQTTMessage*)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + Log_d("template subscribe success, packet-id=%u", packet_id); + if (template_client->inner_data.sync_status > 0) + template_client->inner_data.sync_status = 0; + break; + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + Log_d("template subscribe wait ack timeout, packet-id=%u", packet_id); + if (template_client->inner_data.sync_status > 0) + template_client->inner_data.sync_status = -1; + break; + case MQTT_EVENT_SUBCRIBE_NACK: + Log_d("template subscribe nack, packet-id=%u", packet_id); + if (template_client->inner_data.sync_status > 0) + template_client->inner_data.sync_status = -1; + break; + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_d("template topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + topic_info->topic_len, + topic_info->ptopic, + topic_info->payload_len, + topic_info->payload); + break; + default: + /* Log_i("Should NOT arrive here."); */ + break; + } + if (template_client->event_handle.h_fp != NULL) { + template_client->event_handle.h_fp(template_client, template_client->event_handle.context, msg); + } } -int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, DeviceProperty *pDeviceProperties[]) -{ - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pDeviceProperties, QCLOUD_ERR_INVAL); +int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t count, DeviceProperty *pDeviceProperties[]) +{ + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pDeviceProperties, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - size_t remain_size = 0; int32_t rc_of_snprintf = 0; - int rc; + int rc; int8_t i; - build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } @@ -296,7 +296,7 @@ int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_ } for (i = 0; i < count; i++) { - DeviceProperty *pJsonNode = pDeviceProperties[i]; + DeviceProperty *pJsonNode = pDeviceProperties[i]; if (pJsonNode != NULL && pJsonNode->key != NULL) { rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); @@ -314,140 +314,141 @@ int IOT_Template_JSON_ConstructReportArray(void *handle, char *jsonBuffer, size_ rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}}"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("construct datatemplate report array failed: %d", rc); - return rc; - } + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("construct datatemplate report array failed: %d", rc); + return rc; + } - return rc; + return rc; } -int IOT_Template_ClearControl(void *handle, char *pClientToken, OnReplyCallback callback, uint32_t timeout_ms) +int IOT_Template_ClearControl(void *handle, char *pClientToken, OnReplyCallback callback, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; - char JsonDoc[MAX_CLEAE_DOC_LEN]; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - memset(JsonDoc, 0, MAX_CLEAE_DOC_LEN); - int rc_of_snprintf = HAL_Snprintf(JsonDoc, MAX_CLEAE_DOC_LEN, "{\"clientToken\":\"%s\"}", pClientToken); - rc = check_snprintf_return(rc_of_snprintf, MAX_CLEAE_DOC_LEN); + int rc; + char JsonDoc[MAX_CLEAE_DOC_LEN]; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pClientToken, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + memset(JsonDoc, 0, MAX_CLEAE_DOC_LEN); + int rc_of_snprintf = HAL_Snprintf(JsonDoc, MAX_CLEAE_DOC_LEN, "{\"clientToken\":\"%s\"}", pClientToken); + rc = check_snprintf_return(rc_of_snprintf, MAX_CLEAE_DOC_LEN); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, CLEAR, callback, NULL, timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, JsonDoc, MAX_CLEAE_DOC_LEN); - IOT_FUNC_EXIT_RC(rc); + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, CLEAR, callback, NULL, timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, JsonDoc, MAX_CLEAE_DOC_LEN); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_Report(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) +int IOT_Template_Report(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; + int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } - //Log_d("Report Document: %s", pJsonDoc); + //Log_d("Report Document: %s", pJsonDoc); - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, REPORT, callback, userContext, timeout_ms/1000); + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, REPORT, callback, userContext, timeout_ms / 1000); - rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); + rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_Report_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) +int IOT_Template_Report_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; + int rc = QCLOUD_RET_SUCCESS; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - ReplyAck ack_report = ACK_NONE; - rc = IOT_Template_Report(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + if (IOT_MQTT_IsConnected(template->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } - while (ACK_NONE == ack_report) { + ReplyAck ack_report = ACK_NONE; + rc = IOT_Template_Report(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); + if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + while (ACK_NONE == ack_report) { +#ifndef MULTITHREAD_ENABLED IOT_Template_Yield(handle, 200); +#else + IOT_Template_Yield_Without_MQTT_Yield(handle, 200); +#endif } - if (ACK_ACCEPTED == ack_report) { + if (ACK_ACCEPTED == ack_report) { rc = QCLOUD_RET_SUCCESS; } else if (ACK_TIMEOUT == ack_report) { rc = QCLOUD_ERR_REPORT_TIMEOUT; } else if (ACK_REJECTED == ack_report) { rc = QCLOUD_ERR_REPORT_REJECTED; } - - IOT_FUNC_EXIT_RC(rc); + + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t sizeOfBuffer, DeviceProperty *pPlatInfo, DeviceProperty *pSelfInfo) -{ - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pPlatInfo, QCLOUD_ERR_INVAL); +int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t sizeOfBuffer, DeviceProperty *pPlatInfo, DeviceProperty *pSelfInfo) +{ + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pPlatInfo, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template*)handle; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - size_t remain_size = 0; int32_t rc_of_snprintf = 0; - int rc; + int rc; - build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + build_empty_json(&(ptemplate->inner_data.token_num), jsonBuffer); + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } @@ -458,13 +459,13 @@ int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t si return rc; } - DeviceProperty *pJsonNode = pPlatInfo; - while((NULL != pJsonNode)&&(NULL != pJsonNode->key)) { + DeviceProperty *pJsonNode = pPlatInfo; + while ((NULL != pJsonNode) && (NULL != pJsonNode->key)) { rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - pJsonNode++; + pJsonNode++; } if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { @@ -473,183 +474,188 @@ int IOT_Template_JSON_ConstructSysInfo(void *handle, char *jsonBuffer, size_t si rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "},"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } - pJsonNode = pSelfInfo; - if((NULL == pJsonNode)||(NULL == pJsonNode->key)){ - Log_d("No self define info"); - goto end; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 2, remain_size, ", \"device_label\":{"); + pJsonNode = pSelfInfo; + if ((NULL == pJsonNode) || (NULL == pJsonNode->key)) { + Log_d("No self define info"); + goto end; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 2, remain_size, ", \"device_label\":{"); rc = check_snprintf_return(rc_of_snprintf, remain_size); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - while((NULL != pJsonNode)&&(NULL != pJsonNode->key)) { + while ((NULL != pJsonNode) && (NULL != pJsonNode->key)) { rc = put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); if (rc != QCLOUD_RET_SUCCESS) { return rc; } - pJsonNode++; + pJsonNode++; } rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}},"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } end: - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; } rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}"); rc = check_snprintf_return(rc_of_snprintf, remain_size); - return rc; + return rc; } -int IOT_Template_Report_SysInfo(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) +int IOT_Template_Report_SysInfo(void *handle, char *pJsonDoc, size_t sizeOfBuffer, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; + int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } - //Log_d("eLOG_INFO Document: %s", pJsonDoc); + //Log_d("eLOG_INFO Document: %s", pJsonDoc); - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, RINFO, callback, userContext, timeout_ms/1000); + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, RINFO, callback, userContext, timeout_ms / 1000); - rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); + rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_Report_SysInfo_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) +int IOT_Template_Report_SysInfo_Sync(void *handle, char *pJsonDoc, size_t sizeOfBuffer, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; + int rc = QCLOUD_RET_SUCCESS; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } + if (IOT_MQTT_IsConnected(template->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } - ReplyAck ack_report = ACK_NONE; - rc = IOT_Template_Report_SysInfo(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + ReplyAck ack_report = ACK_NONE; + rc = IOT_Template_Report_SysInfo(handle, pJsonDoc, sizeOfBuffer, _reply_ack_cb, &ack_report, timeout_ms); - while (ACK_NONE == ack_report) { + if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + while (ACK_NONE == ack_report) { +#ifndef MULTITHREAD_ENABLED IOT_Template_Yield(handle, 200); +#else + IOT_Template_Yield_Without_MQTT_Yield(handle, 200); +#endif } - if (ACK_ACCEPTED == ack_report) { + if (ACK_ACCEPTED == ack_report) { rc = QCLOUD_RET_SUCCESS; } else if (ACK_TIMEOUT == ack_report) { rc = QCLOUD_ERR_REPORT_TIMEOUT; } else if (ACK_REJECTED == ack_report) { rc = QCLOUD_ERR_REPORT_REJECTED; } - - IOT_FUNC_EXIT_RC(rc); + + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_GetStatus(void *handle, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) +int IOT_Template_GetStatus(void *handle, OnReplyCallback callback, void *userContext, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc; + int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(callback, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + char getRequestJsonDoc[MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN]; + build_empty_json(&(template_client->inner_data.token_num), getRequestJsonDoc); - char getRequestJsonDoc[MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN]; - build_empty_json(&(template_client->inner_data.token_num), getRequestJsonDoc); - - //Log_d("GET Status Document: %s", getRequestJsonDoc); + //Log_d("GET Status Document: %s", getRequestJsonDoc); - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, GET, callback, userContext, timeout_ms/1000); + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, GET, callback, userContext, timeout_ms / 1000); - rc = send_template_request(template_client, &request_params, getRequestJsonDoc, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN); - IOT_FUNC_EXIT_RC(rc); -} + rc = send_template_request(template_client, &request_params, getRequestJsonDoc, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN); + IOT_FUNC_EXIT_RC(rc); +} -int IOT_Template_GetStatus_sync(void *handle, uint32_t timeout_ms) +int IOT_Template_GetStatus_sync(void *handle, uint32_t timeout_ms) { IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; + int rc = QCLOUD_RET_SUCCESS; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template* pTemplate = (Qcloud_IoT_Template*)handle; + Qcloud_IoT_Template* pTemplate = (Qcloud_IoT_Template*)handle; - if (IOT_MQTT_IsConnected(pTemplate->mqtt) == false) { - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } + if (IOT_MQTT_IsConnected(pTemplate->mqtt) == false) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } - ReplyAck ack_request = ACK_NONE; - rc = IOT_Template_GetStatus(handle, _get_status_reply_ack_cb, &ack_request, timeout_ms); - if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); - - while (ACK_NONE == ack_request) { + ReplyAck ack_request = ACK_NONE; + rc = IOT_Template_GetStatus(handle, _get_status_reply_ack_cb, &ack_request, timeout_ms); + if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); + while (ACK_NONE == ack_request) { +#ifndef MULTITHREAD_ENABLED IOT_Template_Yield(handle, 200); +#else + IOT_Template_Yield_Without_MQTT_Yield(handle, 200); +#endif } - if (ACK_ACCEPTED == ack_request) { + if (ACK_ACCEPTED == ack_request) { rc = QCLOUD_RET_SUCCESS; } else if (ACK_TIMEOUT == ack_request) { rc = QCLOUD_ERR_GET_TIMEOUT; @@ -657,168 +663,223 @@ int IOT_Template_GetStatus_sync(void *handle, uint32_t timeout_ms) rc = QCLOUD_ERR_GET_REJECTED; } - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_ControlReply(void *handle, char *pJsonDoc, size_t sizeOfBuffer, sReplyPara *replyPara) +int IOT_Template_ControlReply(void *handle, char *pJsonDoc, size_t sizeOfBuffer, sReplyPara *replyPara) { IOT_FUNC_ENTRY; - int rc; - - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - - if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { - Log_e("template is disconnected"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); - } - - // if topic $thing/down/property subscribe not success before, subsrcibe again - if (template_client->inner_data.sync_status < 0) { - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - } - - rc = _template_ConstructControlReply(pJsonDoc, sizeOfBuffer, replyPara); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("Construct ControlReply fail,rc=%d",rc); - return rc; - } - Log_d("Report Document: %s", pJsonDoc); - - RequestParams request_params = DEFAULT_REQUEST_PARAMS; - _init_request_params(&request_params, REPLY, NULL, NULL, replyPara->timeout_ms/1000); - - rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); - IOT_FUNC_EXIT_RC(rc); + int rc; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + + if (IOT_MQTT_IsConnected(template_client->mqtt) == false) { + Log_e("template is disconnected"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_MQTT_NO_CONN); + } + + // if topic $thing/down/property subscribe not success before, subsrcibe again + if (template_client->inner_data.sync_status < 0) { + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } + } + + rc = _template_ConstructControlReply(pJsonDoc, sizeOfBuffer, replyPara); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("Construct ControlReply fail,rc=%d", rc); + return rc; + } + Log_d("Report Document: %s", pJsonDoc); + + RequestParams request_params = DEFAULT_REQUEST_PARAMS; + _init_request_params(&request_params, REPLY, NULL, NULL, replyPara->timeout_ms / 1000); + + rc = send_template_request(template_client, &request_params, pJsonDoc, sizeOfBuffer); + IOT_FUNC_EXIT_RC(rc); } -int IOT_Template_Yield(void *handle, uint32_t timeout_ms) { +int IOT_Template_Yield(void *handle, uint32_t timeout_ms) +{ IOT_FUNC_ENTRY; int rc; - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); - NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)handle; - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); handle_template_expired_reply(ptemplate); - -#ifdef EVENT_POST_ENABLED - handle_template_expired_event(ptemplate); + +#ifdef EVENT_POST_ENABLED + handle_template_expired_event(ptemplate); #endif rc = IOT_MQTT_Yield(ptemplate->mqtt, timeout_ms); IOT_FUNC_EXIT_RC(rc); } -void* IOT_Template_Construct(TemplateInitParams *pParams) +void* IOT_Template_Construct(TemplateInitParams *pParams, void *pMqttClient) { - POINTER_SANITY_CHECK(pParams, NULL); - int rc; - - Qcloud_IoT_Template *template_client = NULL; - if ((template_client = (Qcloud_IoT_Template *)HAL_Malloc(sizeof(Qcloud_IoT_Template))) == NULL) { - Log_e("memory not enough to malloc TemplateClient"); - } - - MQTTInitParams mqtt_init_params; - _copy_template_init_params_to_mqtt(&mqtt_init_params, pParams); - - mqtt_init_params.event_handle.h_fp = _template_mqtt_event_handler; - mqtt_init_params.event_handle.context = template_client; - - void *mqtt_client = NULL; - if ((mqtt_client = IOT_MQTT_Construct(&mqtt_init_params)) == NULL) { - HAL_Free(template_client); - goto End; - } - - template_client->mqtt = mqtt_client; - template_client->event_handle = pParams->event_handle; - template_client->inner_data.upstream_topic = NULL; - template_client->inner_data.downstream_topic = NULL; - template_client->inner_data.token_num = 0; - template_client->inner_data.eventflags = 0; - - rc = qcloud_iot_template_init(template_client); - if (rc != QCLOUD_RET_SUCCESS) { - IOT_MQTT_Destroy(&(template_client->mqtt)); - HAL_Free(template_client); - goto End; - } - - rc = subscribe_template_downstream_topic(template_client); - if (rc < 0) - { - Log_e("Subcribe $thing/down/property fail!"); - } - else { - template_client->inner_data.sync_status = rc; - while (rc == template_client->inner_data.sync_status) { - IOT_Template_Yield(template_client, 100); - } - if (0 == template_client->inner_data.sync_status) { - Log_i("Sync device data successfully"); - } else { - Log_e("Sync device data failed"); - } - } + POINTER_SANITY_CHECK(pParams, NULL); + int rc; + + Qcloud_IoT_Template *template_client = NULL; + if ((template_client = (Qcloud_IoT_Template *)HAL_Malloc(sizeof(Qcloud_IoT_Template))) == NULL) { + Log_e("memory not enough to malloc TemplateClient"); + } + + MQTTInitParams mqtt_init_params; + _copy_template_init_params_to_mqtt(&mqtt_init_params, pParams); + + mqtt_init_params.event_handle.h_fp = _template_mqtt_event_handler; + mqtt_init_params.event_handle.context = template_client; + + void *mqtt_client = NULL; + if (NULL == pMqttClient) { + if ((mqtt_client = IOT_MQTT_Construct(&mqtt_init_params)) == NULL) { + HAL_Free(template_client); + goto End; + } + } else { + mqtt_client = pMqttClient; + //TO DO: change device info handle logic + rc = iot_device_info_set(pParams->product_id, pParams->device_name); + if ( rc != QCLOUD_RET_SUCCESS) { + Log_e("failed to set device info: %d", rc); + } + } + + template_client->mqtt = mqtt_client; + template_client->event_handle = pParams->event_handle; + template_client->inner_data.upstream_topic = NULL; + template_client->inner_data.downstream_topic = NULL; + template_client->inner_data.token_num = 0; + template_client->inner_data.eventflags = 0; + + rc = qcloud_iot_template_init(template_client); + if (rc != QCLOUD_RET_SUCCESS) { + IOT_MQTT_Destroy(&(template_client->mqtt)); + HAL_Free(template_client); + goto End; + } + + rc = subscribe_template_downstream_topic(template_client); + if (rc < 0) { + Log_e("Subcribe $thing/down/property fail!"); + } else { +#ifndef MULTITHREAD_ENABLED + template_client->inner_data.sync_status = rc; + while (rc == template_client->inner_data.sync_status) { + IOT_Template_Yield(template_client, 100); + } + + if (0 == template_client->inner_data.sync_status) { + Log_i("Sync device data successfully"); + } else { + Log_e("Sync device data failed"); + } +#else + template_client->inner_data.sync_status = 0; +#endif + } #ifdef EVENT_POST_ENABLED - rc = IOT_Event_Init(template_client); - if (rc < 0) - { - Log_e("event init failed: %d", rc); - IOT_Template_Destroy(&(template_client->mqtt)); - HAL_Free(template_client); - goto End; - } + rc = IOT_Event_Init(template_client); + if (rc < 0) { + Log_e("event init failed: %d", rc); + IOT_Template_Destroy(&(template_client->mqtt)); + HAL_Free(template_client); + goto End; + } #endif #ifdef ACTION_ENABLED - rc = IOT_Action_Init(template_client); - if (rc < 0) - { - Log_e("action init failed: %d", rc); - IOT_Template_Destroy(&(template_client->mqtt)); - HAL_Free(template_client); - goto End; - } + rc = IOT_Action_Init(template_client); + if (rc < 0) { + Log_e("action init failed: %d", rc); + IOT_Template_Destroy(&(template_client->mqtt)); + HAL_Free(template_client); + goto End; + } #endif - return template_client; + return template_client; End: - return NULL; + return NULL; } int IOT_Template_Destroy(void *handle) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + qcloud_iot_template_reset(handle); + + IOT_MQTT_Destroy(&template_client->mqtt); + + if (NULL != template_client->mutex) { + HAL_MutexDestroy(template_client->mutex); + } + + if (NULL != template_client->inner_data.downstream_topic) { + HAL_Free(template_client->inner_data.downstream_topic); + template_client->inner_data.downstream_topic = NULL; + } + + HAL_Free(handle); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) +} + + +#ifdef MULTITHREAD_ENABLED +int IOT_Template_Yield_Without_MQTT_Yield(void *handle, uint32_t timeout_ms) +{ + + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + NUMBERIC_SANITY_CHECK(timeout_ms, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)handle; + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + handle_template_expired_reply(ptemplate); - Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; - qcloud_iot_template_reset(handle); +#ifdef EVENT_POST_ENABLED + handle_template_expired_event(ptemplate); +#endif - IOT_MQTT_Destroy(&template_client->mqtt); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int IOT_Template_Destroy_Except_MQTT(void *handle) +{ + IOT_FUNC_ENTRY; + + POINTER_SANITY_CHECK(handle, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* template_client = (Qcloud_IoT_Template*)handle; + qcloud_iot_template_reset(handle); if (NULL != template_client->mutex) { HAL_MutexDestroy(template_client->mutex); } - if (NULL != template_client->inner_data.downstream_topic) { + if (NULL != template_client->inner_data.downstream_topic) { HAL_Free(template_client->inner_data.downstream_topic); - template_client->inner_data.downstream_topic = NULL; + template_client->inner_data.downstream_topic = NULL; } HAL_Free(handle); @@ -826,6 +887,8 @@ int IOT_Template_Destroy(void *handle) IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS) } +#endif + #ifdef __cplusplus } #endif diff --git a/sdk_src/services/data_template/data_template_client_common.c b/sdk_src/services/data_template/data_template_client_common.c index 4def22f..cee382b 100644 --- a/sdk_src/services/data_template/data_template_client_common.c +++ b/sdk_src/services/data_template/data_template_client_common.c @@ -28,8 +28,7 @@ static int _add_property_handle_to_template_list(Qcloud_IoT_Template *pTemplate, IOT_FUNC_ENTRY; PropertyHandler *property_handle = (PropertyHandler *)HAL_Malloc(sizeof(PropertyHandler)); - if (NULL == property_handle) - { + if (NULL == property_handle) { Log_e("run memory malloc is error!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -72,7 +71,7 @@ int template_common_remove_property(Qcloud_IoT_Template *ptemplate, DeviceProper list_remove(ptemplate->inner_data.property_handle_list, node); } HAL_MutexUnlock(ptemplate->mutex); - + return rc; } diff --git a/sdk_src/services/data_template/data_template_client_json.c b/sdk_src/services/data_template/data_template_client_json.c index 19ceb46..7eefa4b 100644 --- a/sdk_src/services/data_template/data_template_client_json.c +++ b/sdk_src/services/data_template/data_template_client_json.c @@ -29,7 +29,8 @@ extern "C" { #include "qcloud_iot_export_method.h" -int check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) { +int check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) +{ if (returnCode >= maxSizeOfWrite) { return QCLOUD_ERR_JSON_BUFFER_TRUNCATED; @@ -40,7 +41,8 @@ int check_snprintf_return(int32_t returnCode, size_t maxSizeOfWrite) { return QCLOUD_RET_SUCCESS; } -void insert_str(char *pDestStr, char *pSourceStr, int pos) { +void insert_str(char *pDestStr, char *pSourceStr, int pos) +{ int len = strlen(pDestStr); int nlen = strlen(pSourceStr); int i; @@ -55,35 +57,36 @@ void insert_str(char *pDestStr, char *pSourceStr, int pos) { } -static int _direct_update_value(char *value, DeviceProperty *pProperty) { +static int _direct_update_value(char *value, DeviceProperty *pProperty) +{ int rc = QCLOUD_RET_SUCCESS; if (pProperty->type == JBOOL) { - rc = LITE_get_boolean(pProperty->data, value); + rc = LITE_get_boolean(pProperty->data, value); } else if (pProperty->type == JINT32) { - rc = LITE_get_int32(pProperty->data, value); + rc = LITE_get_int32(pProperty->data, value); } else if (pProperty->type == JINT16) { - rc = LITE_get_int16(pProperty->data, value); + rc = LITE_get_int16(pProperty->data, value); } else if (pProperty->type == JINT8) { - rc = LITE_get_int8(pProperty->data, value); + rc = LITE_get_int8(pProperty->data, value); } else if (pProperty->type == JUINT32) { - rc = LITE_get_uint32(pProperty->data, value); + rc = LITE_get_uint32(pProperty->data, value); } else if (pProperty->type == JUINT16) { - rc = LITE_get_uint16(pProperty->data, value); + rc = LITE_get_uint16(pProperty->data, value); } else if (pProperty->type == JUINT8) { - rc = LITE_get_uint8(pProperty->data, value); + rc = LITE_get_uint8(pProperty->data, value); } else if (pProperty->type == JFLOAT) { - rc = LITE_get_float(pProperty->data, value); + rc = LITE_get_float(pProperty->data, value); } else if (pProperty->type == JDOUBLE) { - rc = LITE_get_double(pProperty->data, value); - }else if(pProperty->type == JSTRING){ - rc = LITE_get_string(pProperty->data, value, pProperty->data_buff_len); - }else if(pProperty->type == JOBJECT){ - Log_d("Json type wait to be deal,%s",value); - }else{ - Log_e("pProperty type unknow,%d",pProperty->type); - } + rc = LITE_get_double(pProperty->data, value); + } else if (pProperty->type == JSTRING) { + rc = LITE_get_string(pProperty->data, value, pProperty->data_buff_len); + } else if (pProperty->type == JOBJECT) { + Log_d("Json type wait to be deal,%s", value); + } else { + Log_e("pProperty type unknow,%d", pProperty->type); + } return rc; } @@ -95,14 +98,16 @@ static int _direct_update_value(char *value, DeviceProperty *pProperty) { * @param maxSizeOfJsonDocument max size of JSON string * @return length after adding */ -static int32_t _add_client_token(char *pJsonDocument, size_t maxSizeOfJsonDocument, uint32_t *tokenNumber) { +static int32_t _add_client_token(char *pJsonDocument, size_t maxSizeOfJsonDocument, uint32_t *tokenNumber) +{ int32_t rc_of_snprintf = HAL_Snprintf(pJsonDocument, maxSizeOfJsonDocument, "%s-%u", iot_device_info_get()->product_id, (*tokenNumber)++); return rc_of_snprintf; } -int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) { +int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) +{ int rc; int32_t rc_of_snprintf = 0; @@ -127,35 +132,35 @@ int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void } else { if (type == JINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi32 - ",", *(int32_t *) (pData)); + PRIi32 + ",", *(int32_t *) (pData)); } else if (type == JINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi16 - ",", *(int16_t *) (pData)); + PRIi16 + ",", *(int16_t *) (pData)); } else if (type == JINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi8 - ",", *(int8_t *) (pData)); + PRIi8 + ",", *(int8_t *) (pData)); } else if (type == JUINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu32 - ",", *(uint32_t *) (pData)); + PRIu32 + ",", *(uint32_t *) (pData)); } else if (type == JUINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu16 - ",", *(uint16_t *) (pData)); + PRIu16 + ",", *(uint16_t *) (pData)); } else if (type == JUINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu8 - ",", *(uint8_t *) (pData)); + PRIu8 + ",", *(uint8_t *) (pData)); } else if (type == JDOUBLE) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *) (pData)); } else if (type == JFLOAT) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *) (pData)); - } else if (type == JBOOL) { + } else if (type == JBOOL) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%s,", - *(bool *) (pData) ? "true" : "false"); + *(bool *) (pData) ? "true" : "false"); } else if (type == JSTRING) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *) (pData)); } else if (type == JOBJECT) { @@ -168,7 +173,8 @@ int put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void return rc; } -int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) { +int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pKey, void *pData, JsonDataType type) +{ int rc; int32_t rc_of_snprintf = 0; @@ -193,35 +199,35 @@ int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pK } else { if (type == JINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi32 - ",", *(int32_t *) (pData)); + PRIi32 + ",", *(int32_t *) (pData)); } else if (type == JINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi16 - ",", *(int16_t *) (pData)); + PRIi16 + ",", *(int16_t *) (pData)); } else if (type == JINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIi8 - ",", *(int8_t *) (pData)); + PRIi8 + ",", *(int8_t *) (pData)); } else if (type == JUINT32) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu32 - ",", *(uint32_t *) (pData)); + PRIu32 + ",", *(uint32_t *) (pData)); } else if (type == JUINT16) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu16 - ",", *(uint16_t *) (pData)); + PRIu16 + ",", *(uint16_t *) (pData)); } else if (type == JUINT8) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%" - PRIu8 - ",", *(uint8_t *) (pData)); + PRIu8 + ",", *(uint8_t *) (pData)); } else if (type == JDOUBLE) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(double *) (pData)); } else if (type == JFLOAT) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%f,", *(float *) (pData)); - } else if (type == JBOOL) { + } else if (type == JBOOL) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "%u,", - *(bool *) (pData) ? 1 : 0); + *(bool *) (pData) ? 1 : 0); } else if (type == JSTRING) { rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"%s\",", (char *) (pData)); } else if (type == JOBJECT) { @@ -234,106 +240,111 @@ int template_put_json_node(char *jsonBuffer, size_t sizeOfBuffer, const char *pK return rc; } -int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber) { +int generate_client_token(char *pStrBuffer, size_t sizeOfBuffer, uint32_t *tokenNumber) +{ return _add_client_token(pStrBuffer, sizeOfBuffer, tokenNumber); } -void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer) { - HAL_Snprintf(pJsonBuffer, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN, "{\"clientToken\":\"%s-%u\"}", iot_device_info_get()->product_id, (*tokenNumber)++); +void build_empty_json(uint32_t *tokenNumber, char *pJsonBuffer) +{ + HAL_Snprintf(pJsonBuffer, MAX_SIZE_OF_JSON_WITH_CLIENT_TOKEN, "{\"clientToken\":\"%s-%u\"}", iot_device_info_get()->product_id, (*tokenNumber)++); } -bool parse_client_token(char *pJsonDoc, char **pClientToken) { - *pClientToken = LITE_json_value_of(CLIENT_TOKEN_FIELD, pJsonDoc); - return *pClientToken == NULL ? false : true; +bool parse_client_token(char *pJsonDoc, char **pClientToken) +{ + *pClientToken = LITE_json_value_of(CLIENT_TOKEN_FIELD, pJsonDoc); + return *pClientToken == NULL ? false : true; } -bool parse_action_id(char *pJsonDoc, char **pActionID) { - *pActionID = LITE_json_value_of(ACTION_ID_FIELD, pJsonDoc); - return *pActionID == NULL ? false : true; +bool parse_action_id(char *pJsonDoc, char **pActionID) +{ + *pActionID = LITE_json_value_of(ACTION_ID_FIELD, pJsonDoc); + return *pActionID == NULL ? false : true; } -bool parse_time_stamp(char *pJsonDoc, int32_t *pTimestamp) { +bool parse_time_stamp(char *pJsonDoc, int32_t *pTimestamp) +{ - bool ret = false; + bool ret = false; - char *timestamp = LITE_json_value_of(TIME_STAMP_FIELD, pJsonDoc); - if (timestamp == NULL) return false; + char *timestamp = LITE_json_value_of(TIME_STAMP_FIELD, pJsonDoc); + if (timestamp == NULL) return false; - if (sscanf(timestamp, "%" SCNu32, pTimestamp) != 1) { - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } + if (sscanf(timestamp, "%" SCNu32, pTimestamp) != 1) { + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } - HAL_Free(timestamp); + HAL_Free(timestamp); - return ret; + return ret; } bool parse_action_input(char *pJsonDoc, char **pActionInput) { *pActionInput = LITE_json_value_of(CMD_CONTROL_PARA, pJsonDoc); - return *pActionInput == NULL ? false : true; + return *pActionInput == NULL ? false : true; } -bool parse_code_return(char *pJsonDoc, int32_t *pCode) { +bool parse_code_return(char *pJsonDoc, int32_t *pCode) +{ - bool ret = false; + bool ret = false; - char *code = LITE_json_value_of(REPLY_CODE, pJsonDoc); - if (code == NULL) return false; + char *code = LITE_json_value_of(REPLY_CODE, pJsonDoc); + if (code == NULL) return false; - if (sscanf(code, "%" SCNi32, pCode) != 1) { - Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); - } - else { - ret = true; - } + if (sscanf(code, "%" SCNi32, pCode) != 1) { + Log_e("parse code failed, errCode: %d", QCLOUD_ERR_JSON_PARSE); + } else { + ret = true; + } - HAL_Free(code); + HAL_Free(code); - return ret; + return ret; } -bool parse_status_return(char *pJsonDoc, char **pStatus) { - *pStatus = LITE_json_value_of(REPLY_STATUS, pJsonDoc); - return *pStatus == NULL ? false : true; +bool parse_status_return(char *pJsonDoc, char **pStatus) +{ + *pStatus = LITE_json_value_of(REPLY_STATUS, pJsonDoc); + return *pStatus == NULL ? false : true; } -bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty) { +bool update_value_if_key_match(char *pJsonDoc, DeviceProperty *pProperty) +{ - bool ret = false; + bool ret = false; - char* property_data = LITE_json_value_of(pProperty->key, pJsonDoc); - if ((property_data == NULL) || !(strncmp(property_data, "null", 4)) - ||!(strncmp(property_data, "NULL", 4))) { - } - else { - _direct_update_value(property_data, pProperty); - ret = true; - HAL_Free(property_data); - } + char* property_data = LITE_json_value_of(pProperty->key, pJsonDoc); + if ((property_data == NULL) || !(strncmp(property_data, "null", 4)) + || !(strncmp(property_data, "NULL", 4))) { + } else { + _direct_update_value(property_data, pProperty); + ret = true; + HAL_Free(property_data); + } - return ret; + return ret; } bool parse_template_method_type(char *pJsonDoc, char **pMethod) { - *pMethod = LITE_json_value_of(METHOD_FIELD, pJsonDoc); - return *pMethod == NULL ? false : true; + *pMethod = LITE_json_value_of(METHOD_FIELD, pJsonDoc); + return *pMethod == NULL ? false : true; } bool parse_template_get_control(char *pJsonDoc, char **control) { *control = LITE_json_value_of(GET_CONTROL_PARA, pJsonDoc); - return *control == NULL ? false : true; + return *control == NULL ? false : true; } bool parse_template_cmd_control(char *pJsonDoc, char **control) { *control = LITE_json_value_of(CMD_CONTROL_PARA, pJsonDoc); - return *control == NULL ? false : true; + return *control == NULL ? false : true; } diff --git a/sdk_src/services/data_template/data_template_client_manager.c b/sdk_src/services/data_template/data_template_client_manager.c index 3c2ffd8..ee6aede 100644 --- a/sdk_src/services/data_template/data_template_client_manager.c +++ b/sdk_src/services/data_template/data_template_client_manager.c @@ -46,8 +46,7 @@ static int _unsubscribe_template_downstream_topic(void* pClient) char downstream_topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; int size = HAL_Snprintf(downstream_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -63,14 +62,13 @@ static int _unsubscribe_template_downstream_topic(void* pClient) /** * @brief add request to data_template request wait for reply list -*/ +*/ static int _add_request_to_template_list(Qcloud_IoT_Template *pTemplate, const char *pClientToken, RequestParams *pParams) { IOT_FUNC_ENTRY; HAL_MutexLock(pTemplate->mutex); - if (pTemplate->inner_data.reply_list->len >= MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME) - { + if (pTemplate->inner_data.reply_list->len >= MAX_APPENDING_REQUEST_AT_ANY_GIVEN_TIME) { HAL_MutexUnlock(pTemplate->mutex); IOT_FUNC_EXIT_RC(QCLOUD_ERR_MAX_APPENDING_REQUEST); } @@ -112,20 +110,19 @@ static int _add_request_to_template_list(Qcloud_IoT_Template *pTemplate, const c * @param method method type * @param pJsonDoc JSON to publish * @return QCLOUD_RET_SUCCESS for success, or err code for failure - */ + */ int _publish_to_template_upstream_topic(Qcloud_IoT_Template *pTemplate, Method method, char *pJsonDoc) { IOT_FUNC_ENTRY; int rc = QCLOUD_RET_SUCCESS; char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - int size; - + int size; + - size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } @@ -153,25 +150,25 @@ static int _set_template_json_type(char *pJsonDoc, size_t sizeOfBuffer, Method m POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); char *method_str = NULL; switch (method) { - case GET: - method_str = GET_STATUS; - break; - case REPORT: - method_str = REPORT_CMD; - break; - case RINFO: - method_str = INFO_CMD; - break; - case REPLY: - method_str = CONTROL_CMD_REPLY; - break; - case CLEAR: - method_str = CLEAR_CONTROL; - break; - default: - Log_e("unexpected method!"); - rc = QCLOUD_ERR_INVAL; - break; + case GET: + method_str = GET_STATUS; + break; + case REPORT: + method_str = REPORT_CMD; + break; + case RINFO: + method_str = INFO_CMD; + break; + case REPLY: + method_str = CONTROL_CMD_REPLY; + break; + case CLEAR: + method_str = CLEAR_CONTROL; + break; + default: + Log_e("unexpected method!"); + rc = QCLOUD_ERR_INVAL; + break; } if (rc != QCLOUD_RET_SUCCESS) IOT_FUNC_EXIT_RC(rc); @@ -242,8 +239,7 @@ static void _handle_template_expired_reply_callback(Qcloud_IoT_Template *pTempla if (NULL == request) IOT_FUNC_EXIT; - if (expired(&request->timer)) - { + if (expired(&request->timer)) { if (request->callback != NULL) { request->callback(pTemplate, request->method, ACK_TIMEOUT, sg_template_cloud_rcv_buf, request); } @@ -257,13 +253,13 @@ static void _handle_template_expired_reply_callback(Qcloud_IoT_Template *pTempla static void _set_control_clientToken(const char *pClientToken) { - memset(sg_template_clientToken, '\0', MAX_SIZE_OF_CLIENT_TOKEN); - strncpy(sg_template_clientToken, pClientToken, MAX_SIZE_OF_CLIENT_TOKEN); + memset(sg_template_clientToken, '\0', MAX_SIZE_OF_CLIENT_TOKEN); + strncpy(sg_template_clientToken, pClientToken, MAX_SIZE_OF_CLIENT_TOKEN); } char * get_control_clientToken(void) { - return sg_template_clientToken; + return sg_template_clientToken; } void qcloud_iot_template_reset(void *pClient) @@ -277,20 +273,18 @@ void qcloud_iot_template_reset(void *pClient) _unsubscribe_template_downstream_topic(template_client->mqtt); - if (template_client->inner_data.reply_list) - { + if (template_client->inner_data.reply_list) { list_destroy(template_client->inner_data.reply_list); } - if (template_client->inner_data.event_list) - { + if (template_client->inner_data.event_list) { list_destroy(template_client->inner_data.event_list); } } -int qcloud_iot_template_init(Qcloud_IoT_Template *pTemplate) +int qcloud_iot_template_init(Qcloud_IoT_Template *pTemplate) { - IOT_FUNC_ENTRY; + IOT_FUNC_ENTRY; POINTER_SANITY_CHECK(pTemplate, QCLOUD_ERR_INVAL); @@ -299,46 +293,41 @@ int qcloud_iot_template_init(Qcloud_IoT_Template *pTemplate) IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); pTemplate->inner_data.property_handle_list = list_new(); - if (pTemplate->inner_data.property_handle_list) - { + if (pTemplate->inner_data.property_handle_list) { pTemplate->inner_data.property_handle_list->free = HAL_Free; + } else { + Log_e("no memory to allocate property_handle_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + pTemplate->inner_data.reply_list = list_new(); + if (pTemplate->inner_data.reply_list) { + pTemplate->inner_data.reply_list->free = HAL_Free; + } else { + Log_e("no memory to allocate reply_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + pTemplate->inner_data.event_list = list_new(); + if (pTemplate->inner_data.event_list) { + pTemplate->inner_data.event_list->free = HAL_Free; + } else { + Log_e("no memory to allocate event_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - else { - Log_e("no memory to allocate property_handle_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + + pTemplate->inner_data.action_handle_list = list_new(); + if (pTemplate->inner_data.action_handle_list) { + pTemplate->inner_data.action_handle_list->free = HAL_Free; + } else { + Log_e("no memory to allocate action_handle_list"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); } - pTemplate->inner_data.reply_list = list_new(); - if (pTemplate->inner_data.reply_list) - { - pTemplate->inner_data.reply_list->free = HAL_Free; - } else { - Log_e("no memory to allocate reply_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - pTemplate->inner_data.event_list = list_new(); - if (pTemplate->inner_data.event_list) - { - pTemplate->inner_data.event_list->free = HAL_Free; - } else { - Log_e("no memory to allocate event_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - pTemplate->inner_data.action_handle_list = list_new(); - if (pTemplate->inner_data.action_handle_list) - { - pTemplate->inner_data.action_handle_list->free = HAL_Free; - } else { - Log_e("no memory to allocate action_handle_list"); - IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); - } - - IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } -void handle_template_expired_reply(Qcloud_IoT_Template *pTemplate) +void handle_template_expired_reply(Qcloud_IoT_Template *pTemplate) { IOT_FUNC_ENTRY; @@ -410,11 +399,9 @@ static void _handle_control(Qcloud_IoT_Template *pTemplate, char* control_str) } if (property_handle->property != NULL) { - if (update_value_if_key_match(control_str, property_handle->property)) - { - - if (property_handle->callback != NULL) - { + if (update_value_if_key_match(control_str, property_handle->property)) { + + if (property_handle->callback != NULL) { property_handle->callback(pTemplate, control_str, strlen(control_str), property_handle->property); } node = NULL; @@ -439,42 +426,39 @@ static void _handle_template_reply_callback(Qcloud_IoT_Template *pTemplate, List if (NULL == request) IOT_FUNC_EXIT; - if (strcmp(request->client_token, pClientToken) == 0) - { + if (strcmp(request->client_token, pClientToken) == 0) { ReplyAck status = ACK_NONE; // check operation success or not according to code field of reply message int32_t reply_code = 0; - + bool parse_success = parse_code_return(sg_template_cloud_rcv_buf, &reply_code); if (parse_success) { - if (reply_code == 0) { - status = ACK_ACCEPTED; - } else { - status = ACK_REJECTED; - } - - if (strcmp(pType, GET_STATUS_REPLY) == 0 && status == ACK_ACCEPTED) - { - char* control_str = NULL; - if (parse_template_get_control(sg_template_cloud_rcv_buf, &control_str)) { - Log_d("control data from get_status_reply"); - _set_control_clientToken(pClientToken); - _handle_control(pTemplate, control_str); - HAL_Free(control_str); - *((ReplyAck *)request->user_context) = ACK_ACCEPTED; //prepare for clear_control - } - } - - - if (request->callback != NULL) { - request->callback(pTemplate, request->method, status, sg_template_cloud_rcv_buf, request); - } - } - else { - Log_e("parse template operation result code failed."); + if (reply_code == 0) { + status = ACK_ACCEPTED; + } else { + status = ACK_REJECTED; + } + + if (strcmp(pType, GET_STATUS_REPLY) == 0 && status == ACK_ACCEPTED) { + char* control_str = NULL; + if (parse_template_get_control(sg_template_cloud_rcv_buf, &control_str)) { + Log_d("control data from get_status_reply"); + _set_control_clientToken(pClientToken); + _handle_control(pTemplate, control_str); + HAL_Free(control_str); + *((ReplyAck *)request->user_context) = ACK_ACCEPTED; //prepare for clear_control + } + } + + + if (request->callback != NULL) { + request->callback(pTemplate, request->method, status, sg_template_cloud_rcv_buf, request); + } + } else { + Log_e("parse template operation result code failed."); } - + list_remove(list, *node); *node = NULL; @@ -490,8 +474,10 @@ static void _on_template_downstream_topic_handler(void *pClient, MQTTMessage *me POINTER_SANITY_CHECK_RTN(pClient); POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; +// Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; +// Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)pUserdata; + const char *topic = message->ptopic; size_t topic_len = message->topic_len; @@ -508,38 +494,37 @@ static void _on_template_downstream_topic_handler(void *pClient, MQTTMessage *me } int cloud_rcv_len = min(CLOUD_IOT_JSON_RX_BUF_LEN - 1, message->payload_len); - memset(sg_template_cloud_rcv_buf, 0, sizeof(sg_template_cloud_rcv_buf)); + memset(sg_template_cloud_rcv_buf, 0, sizeof(sg_template_cloud_rcv_buf)); memcpy(sg_template_cloud_rcv_buf, message->payload, cloud_rcv_len + 1); sg_template_cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string - //Log_d("recv:%s", sg_template_cloud_rcv_buf); + //Log_d("recv:%s", sg_template_cloud_rcv_buf); - //parse the message type from topic $thing/down/property - if (!parse_template_method_type(sg_template_cloud_rcv_buf, &type_str)) - { + //parse the message type from topic $thing/down/property + if (!parse_template_method_type(sg_template_cloud_rcv_buf, &type_str)) { Log_e("Fail to parse method!"); goto End; } if (!parse_client_token(sg_template_cloud_rcv_buf, &client_token)) { - Log_e("Fail to parse client token! Json=%s", sg_template_cloud_rcv_buf); - goto End; + Log_e("Fail to parse client token! Json=%s", sg_template_cloud_rcv_buf); + goto End; } - - //handle control message + + //handle control message if (!strcmp(type_str, CONTROL_CMD)) { - HAL_MutexLock(template_client->mutex); - char* control_str = NULL; - if (parse_template_cmd_control(sg_template_cloud_rcv_buf, &control_str)) { - Log_d("control_str:%s", control_str); - _set_control_clientToken(client_token); - _handle_control(template_client, control_str); - HAL_Free(control_str); - } - - HAL_MutexUnlock(template_client->mutex); - goto End; - } - + HAL_MutexLock(template_client->mutex); + char* control_str = NULL; + if (parse_template_cmd_control(sg_template_cloud_rcv_buf, &control_str)) { + Log_d("control_str:%s", control_str); + _set_control_clientToken(client_token); + _handle_control(template_client, control_str); + HAL_Free(control_str); + } + + HAL_MutexUnlock(template_client->mutex); + goto End; + } + if (template_client != NULL) _traverse_template_list(template_client, template_client->inner_data.reply_list, client_token, type_str, _handle_template_reply_callback); @@ -555,16 +540,15 @@ int subscribe_template_downstream_topic(Qcloud_IoT_Template *pTemplate) IOT_FUNC_ENTRY; int rc; - int size; - + int size; + if (pTemplate->inner_data.downstream_topic == NULL) { char *downstream_topic = (char *)HAL_Malloc(MAX_SIZE_OF_CLOUD_TOPIC * sizeof(char)); if (downstream_topic == NULL) IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); memset(downstream_topic, 0x0, MAX_SIZE_OF_CLOUD_TOPIC); - size = HAL_Snprintf(downstream_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) - { + size = HAL_Snprintf(downstream_topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/property/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC - 1) { Log_e("buf size < topic length!"); HAL_Free(downstream_topic); IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); @@ -575,6 +559,7 @@ int subscribe_template_downstream_topic(Qcloud_IoT_Template *pTemplate) SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; subscribe_params.on_message_handler = _on_template_downstream_topic_handler; subscribe_params.qos = QOS0; + subscribe_params.user_data = pTemplate; rc = IOT_MQTT_Subscribe(pTemplate->mqtt, pTemplate->inner_data.downstream_topic, &subscribe_params); if (rc < 0) { diff --git a/sdk_src/services/data_template/data_template_event.c b/sdk_src/services/data_template/data_template_event.c index 369fa8d..45200f4 100644 --- a/sdk_src/services/data_template/data_template_event.c +++ b/sdk_src/services/data_template/data_template_event.c @@ -13,7 +13,7 @@ * */ -#ifdef __cplusplus +#ifdef __cplusplus extern "C" { #endif @@ -61,26 +61,26 @@ static void _traverse_event_list(Qcloud_IoT_Template *pTemplate, List *list, con Log_e("node's value is invalid!"); continue; } - - sEventReply *pReply = (sEventReply *)node->val; - /*timeout check*/ - if(eDEAL_EXPIRED == eDealType){ - if(expired(&pReply->timer)){ - Log_e("eventToken[%s] timeout",pReply->client_token); - list_remove(list, node); - node = NULL; - } - } - - /*match event wait for reply by clientToken*/ - if((eDEAL_REPLY_CB == eDealType) && (0 == strcmp(pClientToken, pReply->client_token))){ - if(NULL != pReply->callback){ - pReply->callback(pTemplate, message); - Log_d("eventToken[%s] released",pReply->client_token); - list_remove(list, node); - node = NULL; - } - } + + sEventReply *pReply = (sEventReply *)node->val; + /*timeout check*/ + if (eDEAL_EXPIRED == eDealType) { + if (expired(&pReply->timer)) { + Log_e("eventToken[%s] timeout", pReply->client_token); + list_remove(list, node); + node = NULL; + } + } + + /*match event wait for reply by clientToken*/ + if ((eDEAL_REPLY_CB == eDealType) && (0 == strcmp(pClientToken, pReply->client_token))) { + if (NULL != pReply->callback) { + pReply->callback(pTemplate, message); + Log_d("eventToken[%s] released", pReply->client_token); + list_remove(list, node); + node = NULL; + } + } } list_iterator_destroy(iter); @@ -90,44 +90,46 @@ static void _traverse_event_list(Qcloud_IoT_Template *pTemplate, List *list, con IOT_FUNC_EXIT; } -static void _on_event_reply_callback(void *pClient, MQTTMessage *message, void *userData) +static void _on_event_reply_callback(void *pClient, MQTTMessage *message, void *userData) { - POINTER_SANITY_CHECK_RTN(message); - Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; - Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + POINTER_SANITY_CHECK_RTN(message); +// Qcloud_IoT_Client *mqtt_client = (Qcloud_IoT_Client *)pClient; +// Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)mqtt_client->event_handle.context; + Qcloud_IoT_Template *template_client = (Qcloud_IoT_Template*)userData; + - int32_t code; + int32_t code; char* client_token = NULL; - char* status = NULL; + char* status = NULL; - Log_d("recv:%.*s",(int) message->payload_len, (char *) message->payload); - - // parse clientToken from payload + Log_d("recv:%.*s", (int) message->payload_len, (char *) message->payload); + + // parse clientToken from payload if (!parse_client_token((char *) message->payload, &client_token)) { Log_e("fail to parse client token!"); return; } - // parse code from payload - if(!parse_code_return((char *) message->payload, &code)){ + // parse code from payload + if (!parse_code_return((char *) message->payload, &code)) { Log_e("fail to parse code"); return; } - if(!parse_status_return((char *) message->payload, &status)){ - // Log_d("no status return"); + if (!parse_status_return((char *) message->payload, &status)) { + // Log_d("no status return"); } - Log_d("eventToken:%s code:%d status:%s", client_token, code, status); + Log_d("eventToken:%s code:%d status:%s", client_token, code, status); if (template_client != NULL) _traverse_event_list(template_client, template_client->inner_data.event_list, client_token, message, eDEAL_REPLY_CB); HAL_Free(client_token); - HAL_Free(status); + HAL_Free(status); - return; + return; } /** @@ -138,10 +140,9 @@ static sEventReply * _create_event_add_to_list(Qcloud_IoT_Template *pTemplate, O IOT_FUNC_ENTRY; HAL_MutexLock(pTemplate->mutex); - if (pTemplate->inner_data.event_list->len >= MAX_EVENT_WAIT_REPLY) - { + if (pTemplate->inner_data.event_list->len >= MAX_EVENT_WAIT_REPLY) { HAL_MutexUnlock(pTemplate->mutex); - Log_e("Too many event wait for reply"); + Log_e("Too many event wait for reply"); IOT_FUNC_EXIT_RC(NULL); } @@ -153,18 +154,18 @@ static sEventReply * _create_event_add_to_list(Qcloud_IoT_Template *pTemplate, O } pReply->callback = replyCb; - pReply->user_context = pTemplate; - + pReply->user_context = pTemplate; + InitTimer(&(pReply->timer)); countdown(&(pReply->timer), reply_timeout_ms); - HAL_Snprintf(pReply->client_token, EVENT_TOKEN_MAX_LEN, "%s-%u", iot_device_info_get()->product_id, pTemplate->inner_data.token_num++); - + HAL_Snprintf(pReply->client_token, EVENT_TOKEN_MAX_LEN, "%s-%u", iot_device_info_get()->product_id, pTemplate->inner_data.token_num++); + ListNode *node = list_node_new(pReply); if (NULL == node) { HAL_MutexUnlock(pTemplate->mutex); Log_e("run list_node_new is error!"); - HAL_Free(pReply); + HAL_Free(pReply); IOT_FUNC_EXIT_RC(NULL); } @@ -173,218 +174,217 @@ static sEventReply * _create_event_add_to_list(Qcloud_IoT_Template *pTemplate, O HAL_MutexUnlock(pTemplate->mutex); IOT_FUNC_EXIT_RC(pReply); -} +} static int _iot_event_json_init(void *handle, char *jsonBuffer, size_t sizeOfBuffer, uint8_t event_count, OnEventReplyCallback replyCb, uint32_t reply_timeout_ms) { - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - int32_t rc_of_snprintf; - sEventReply *pReply; - - pReply = _create_event_add_to_list(ptemplate, replyCb, reply_timeout_ms); - if(!pReply){ - Log_e("create event failed"); - return QCLOUD_ERR_FAILURE; - } - - memset(jsonBuffer, 0, sizeOfBuffer); - if(event_count > SIGLE_EVENT){ - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ - POST_EVENTS, pReply->client_token); - }else{ - rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ - POST_EVENT, pReply->client_token); - } + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; + int32_t rc_of_snprintf; + sEventReply *pReply; + + pReply = _create_event_add_to_list(ptemplate, replyCb, reply_timeout_ms); + if (!pReply) { + Log_e("create event failed"); + return QCLOUD_ERR_FAILURE; + } + + memset(jsonBuffer, 0, sizeOfBuffer); + if (event_count > SIGLE_EVENT) { + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ + POST_EVENTS, pReply->client_token); + } else { + rc_of_snprintf = HAL_Snprintf(jsonBuffer, sizeOfBuffer, "{\"method\":\"%s\", \"clientToken\":\"%s\", ", \ + POST_EVENT, pReply->client_token); + } return check_snprintf_return(rc_of_snprintf, sizeOfBuffer); } - + static int _iot_construct_event_json(void *handle, char *jsonBuffer, size_t sizeOfBuffer, - uint8_t event_count, - sEvent *pEventArry[], - OnEventReplyCallback replyCb, - uint32_t reply_timeout_ms) -{ - size_t remain_size = 0; - int32_t rc_of_snprintf = 0; - uint8_t i,j; - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; - - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pEventArry, QCLOUD_ERR_INVAL); - - int rc = _iot_event_json_init(ptemplate, jsonBuffer, sizeOfBuffer, event_count, replyCb, reply_timeout_ms); - - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("event json init failed: %d", rc); - return rc; - } - //Log_d("event_count:%d, Doc_init:%s",event_count, jsonBuffer); - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - if(event_count > SIGLE_EVENT){//mutlti event - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"events\":["); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - for(i = 0; i < event_count; i++){ - sEvent *pEvent = pEventArry[i]; - if(NULL == pEvent){ - Log_e("%dth/%d null event", i, event_count); - return QCLOUD_ERR_INVAL; - } - - if(0 == pEvent->timestamp){ //no accurate UTC time, set 0 - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{",\ - pEvent->event_name, pEvent->type); - }else{ // accurate UTC time is second,change to ms - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{",\ - pEvent->event_name, pEvent->type, pEvent->timestamp); - - } - - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - DeviceProperty *pJsonNode = pEvent->pEventData; - for (j = 0; j < pEvent->eventDataNum; j++) { - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); - return QCLOUD_ERR_INVAL; - } - pJsonNode++; - } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer)-1, remain_size, "}}," ); - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - pEvent++; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "]"); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - }else{ //single - sEvent *pEvent = pEventArry[0]; - if(0 == pEvent->timestamp){ //no accurate UTC time, set 0 - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{",\ - pEvent->event_name, pEvent->type); - }else{ // accurate UTC time is second,change to ms - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{",\ - pEvent->event_name, pEvent->type, pEvent->timestamp); - } - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - DeviceProperty *pJsonNode = pEvent->pEventData; - for (i = 0; i < pEvent->eventDataNum; i++) { - if (pJsonNode != NULL && pJsonNode->key != NULL) { - rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); - - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } else { - Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); - return QCLOUD_ERR_INVAL; - } - pJsonNode++; - } - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); - - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - } - - //finish json - if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); - - return check_snprintf_return(rc_of_snprintf, remain_size); -} - + uint8_t event_count, + sEvent *pEventArry[], + OnEventReplyCallback replyCb, + uint32_t reply_timeout_ms) +{ + size_t remain_size = 0; + int32_t rc_of_snprintf = 0; + uint8_t i, j; + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)handle; + + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(jsonBuffer, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pEventArry, QCLOUD_ERR_INVAL); + + int rc = _iot_event_json_init(ptemplate, jsonBuffer, sizeOfBuffer, event_count, replyCb, reply_timeout_ms); + + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("event json init failed: %d", rc); + return rc; + } + //Log_d("event_count:%d, Doc_init:%s",event_count, jsonBuffer); + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + if (event_count > SIGLE_EVENT) { //mutlti event + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"events\":["); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + for (i = 0; i < event_count; i++) { + sEvent *pEvent = pEventArry[i]; + if (NULL == pEvent) { + Log_e("%dth/%d null event", i, event_count); + return QCLOUD_ERR_INVAL; + } + + if (0 == pEvent->timestamp) { //no accurate UTC time, set 0 + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{", \ + pEvent->event_name, pEvent->type); + } else { // accurate UTC time is second,change to ms + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{", \ + pEvent->event_name, pEvent->type, pEvent->timestamp); + + } + + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + DeviceProperty *pJsonNode = pEvent->pEventData; + for (j = 0; j < pEvent->eventDataNum; j++) { + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); + return QCLOUD_ERR_INVAL; + } + pJsonNode++; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}}," ); + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + pEvent++; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "]"); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + } else { //single + sEvent *pEvent = pEventArry[0]; + if (0 == pEvent->timestamp) { //no accurate UTC time, set 0 + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{", \ + pEvent->event_name, pEvent->type); + } else { // accurate UTC time is second,change to ms + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{", \ + pEvent->event_name, pEvent->type, pEvent->timestamp); + } + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + DeviceProperty *pJsonNode = pEvent->pEventData; + for (i = 0; i < pEvent->eventDataNum; i++) { + if (pJsonNode != NULL && pJsonNode->key != NULL) { + rc = template_put_json_node(jsonBuffer, remain_size, pJsonNode->key, pJsonNode->data, pJsonNode->type); + + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } else { + Log_e("%dth/%d null event property data", i, pEvent->eventDataNum); + return QCLOUD_ERR_INVAL; + } + pJsonNode++; + } + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer) - 1, remain_size, "}" ); + + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + } + + //finish json + if ((remain_size = sizeOfBuffer - strlen(jsonBuffer)) < 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "}"); + + return check_snprintf_return(rc_of_snprintf, remain_size); +} + static int _publish_event_to_cloud(void *c, char *pJsonDoc) { - IOT_FUNC_ENTRY; - int rc = QCLOUD_RET_SUCCESS; - char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; + IOT_FUNC_ENTRY; + int rc = QCLOUD_RET_SUCCESS; + char topic[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *ptemplate = (Qcloud_IoT_Template *)c; - int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - if (size < 0 || size > sizeof(topic) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); - return QCLOUD_ERR_FAILURE; - } + int size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/up/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + if (size < 0 || size > sizeof(topic) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic)); + return QCLOUD_ERR_FAILURE; + } - PublishParams pubParams = DEFAULT_PUB_PARAMS; - pubParams.qos = QOS0; - pubParams.payload_len = strlen(pJsonDoc); - pubParams.payload = (char *) pJsonDoc; + PublishParams pubParams = DEFAULT_PUB_PARAMS; + pubParams.qos = QOS1; + pubParams.payload_len = strlen(pJsonDoc); + pubParams.payload = (char *) pJsonDoc; - rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); + rc = IOT_MQTT_Publish(ptemplate->mqtt, topic, &pubParams); - IOT_FUNC_EXIT_RC(rc); + IOT_FUNC_EXIT_RC(rc); } -void handle_template_expired_event(void *client) +void handle_template_expired_event(void *client) { IOT_FUNC_ENTRY; - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; _traverse_event_list(pTemplate, pTemplate->inner_data.event_list, NULL, NULL, eDEAL_EXPIRED); @@ -393,98 +393,98 @@ void handle_template_expired_event(void *client) void IOT_Event_setFlag(void *client, uint32_t flag) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; - - pTemplate->inner_data.eventflags |= flag&0xffffffff; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + + pTemplate->inner_data.eventflags |= flag & 0xffffffff; } void IOT_Event_clearFlag(void *client, uint32_t flag) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; - pTemplate->inner_data.eventflags &= (~flag)&0xffffffff; + pTemplate->inner_data.eventflags &= (~flag) & 0xffffffff; } uint32_t IOT_Event_getFlag(void *client) { - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)client; - return pTemplate->inner_data.eventflags; -} + return pTemplate->inner_data.eventflags; +} int IOT_Event_Init(void *c) { - static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; - Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; - - int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); - - - if (size < 0 || size > sizeof(topic_name) - 1) - { - Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); - return QCLOUD_ERR_FAILURE; - } - SubscribeParams sub_params = DEFAULT_SUB_PARAMS; - sub_params.on_message_handler = _on_event_reply_callback; - - return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); + static char topic_name[MAX_SIZE_OF_CLOUD_TOPIC] = {0}; + Qcloud_IoT_Template *pTemplate = (Qcloud_IoT_Template *)c; + + int size = HAL_Snprintf(topic_name, MAX_SIZE_OF_CLOUD_TOPIC, "$thing/down/event/%s/%s", iot_device_info_get()->product_id, iot_device_info_get()->device_name); + + + if (size < 0 || size > sizeof(topic_name) - 1) { + Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); + return QCLOUD_ERR_FAILURE; + } + SubscribeParams sub_params = DEFAULT_SUB_PARAMS; + sub_params.on_message_handler = _on_event_reply_callback; + sub_params.user_data = pTemplate; + + return IOT_MQTT_Subscribe(pTemplate->mqtt, topic_name, &sub_params); } -int IOT_Post_Event(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, uint8_t event_count, sEvent *pEventArry[], OnEventReplyCallback replyCb) +int IOT_Post_Event(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, uint8_t event_count, sEvent *pEventArry[], OnEventReplyCallback replyCb) { - int rc; - - rc = _iot_construct_event_json(pClient, pJsonDoc, sizeOfBuffer, event_count, pEventArry, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("construct event json fail, %d",rc); - return rc; - } - - rc = _publish_event_to_cloud(pClient, pJsonDoc); - if (rc < 0) { - Log_e("publish event to cloud fail, %d",rc); - } - - return rc; + int rc; + + rc = _iot_construct_event_json(pClient, pJsonDoc, sizeOfBuffer, event_count, pEventArry, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("construct event json fail, %d", rc); + return rc; + } + + rc = _publish_event_to_cloud(pClient, pJsonDoc); + if (rc < 0) { + Log_e("publish event to cloud fail, %d", rc); + } + + return rc; } -int IOT_Post_Event_Raw(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, char *pEventMsg, OnEventReplyCallback replyCb) +int IOT_Post_Event_Raw(void *pClient, char *pJsonDoc, size_t sizeOfBuffer, char *pEventMsg, OnEventReplyCallback replyCb) { - int rc; - size_t remain_size = 0; - int32_t rc_of_snprintf; - - Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)pClient; - - POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); - POINTER_SANITY_CHECK(pEventMsg, QCLOUD_ERR_INVAL); - - rc = _iot_event_json_init(ptemplate, pJsonDoc, sizeOfBuffer, MUTLTI_EVENTS, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { - Log_e("event json init failed: %d", rc); - return rc; - } - - if ((remain_size = sizeOfBuffer - strlen(pJsonDoc)) <= 1) { - return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; - } - - rc_of_snprintf = HAL_Snprintf(pJsonDoc + strlen(pJsonDoc), remain_size, "\"events\":[%s]}", pEventMsg); - rc = check_snprintf_return(rc_of_snprintf, remain_size); - if (rc != QCLOUD_RET_SUCCESS) { - return rc; - } - - Log_d("JsonDoc:%s", pJsonDoc); - - rc = _publish_event_to_cloud(pClient, pJsonDoc); - if (rc < 0 ) { - Log_e("publish event raw to cloud fail, %d",rc); - } - - return rc; + int rc; + size_t remain_size = 0; + int32_t rc_of_snprintf; + + Qcloud_IoT_Template* ptemplate = (Qcloud_IoT_Template *)pClient; + + POINTER_SANITY_CHECK(ptemplate, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pJsonDoc, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(pEventMsg, QCLOUD_ERR_INVAL); + + rc = _iot_event_json_init(ptemplate, pJsonDoc, sizeOfBuffer, MUTLTI_EVENTS, replyCb, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); + if (rc != QCLOUD_RET_SUCCESS) { + Log_e("event json init failed: %d", rc); + return rc; + } + + if ((remain_size = sizeOfBuffer - strlen(pJsonDoc)) <= 1) { + return QCLOUD_ERR_JSON_BUFFER_TOO_SMALL; + } + + rc_of_snprintf = HAL_Snprintf(pJsonDoc + strlen(pJsonDoc), remain_size, "\"events\":[%s]}", pEventMsg); + rc = check_snprintf_return(rc_of_snprintf, remain_size); + if (rc != QCLOUD_RET_SUCCESS) { + return rc; + } + + Log_d("JsonDoc:%s", pJsonDoc); + + rc = _publish_event_to_cloud(pClient, pJsonDoc); + if (rc < 0 ) { + Log_e("publish event raw to cloud fail, %d", rc); + } + + return rc; } #endif diff --git a/sdk_src/services/gateway/gateway_api.c b/sdk_src/services/gateway/gateway_api.c new file mode 100644 index 0000000..4617bab --- /dev/null +++ b/sdk_src/services/gateway/gateway_api.c @@ -0,0 +1,303 @@ +#include + +#include "utils_param_check.h" + +#include "gateway_common.h" +#include "mqtt_client.h" + + +static Gateway sg_gateway = {0}; + +void _gateway_event_handler(void *client, void *context, MQTTEventMsg *msg) +{ + uintptr_t packet_id = (uintptr_t)msg->msg; + Gateway* gateway = (Gateway*)context; + + POINTER_SANITY_CHECK_RTN(context); + POINTER_SANITY_CHECK_RTN(msg); + MQTTMessage* topic_info = (MQTTMessage*)msg->msg; + + switch (msg->event_type) { + case MQTT_EVENT_SUBCRIBE_SUCCESS: + case MQTT_EVENT_UNSUBCRIBE_SUCCESS: + Log_d("gateway sub|unsub(%d) success, packet-id=%u", msg->event_type, (unsigned int)packet_id); + if (gateway->gateway_data.sync_status == packet_id) { + gateway->gateway_data.sync_status = 0; + return; + } + break; + + case MQTT_EVENT_SUBCRIBE_TIMEOUT: + case MQTT_EVENT_UNSUBCRIBE_TIMEOUT: + case MQTT_EVENT_SUBCRIBE_NACK: + case MQTT_EVENT_UNSUBCRIBE_NACK: + Log_d("gateway timeout|nack(%d) event, packet-id=%u", msg->event_type, (unsigned int)packet_id); + if (gateway->gateway_data.sync_status == packet_id) { + gateway->gateway_data.sync_status = -1; + return; + } + break; + + case MQTT_EVENT_PUBLISH_RECVEIVED: + Log_d("gateway topic message arrived but without any related handle: topic=%.*s, topic_msg=%.*s", + topic_info->topic_len, + topic_info->ptopic, + topic_info->payload_len, + topic_info->payload); + break; + + default: + break; + } + + if (gateway->event_handle.h_fp != NULL) { + gateway->event_handle.h_fp(client, gateway->event_handle.context, msg); + } + + return; +} + + +void* IOT_Gateway_Construct(GatewayInitParam* init_param) +{ + int rc = 0; + GatewayParam param = DEFAULT_GATEWAY_PARAMS; + POINTER_SANITY_CHECK(init_param, NULL); + + if (sg_gateway.is_construct) { + Log_e("gateway have been construct"); + IOT_FUNC_EXIT_RC(NULL); + } + + memset(&sg_gateway, 0, sizeof(Gateway)); + + /* replace user event handle */ + sg_gateway.event_handle.h_fp = init_param->init_param.event_handle.h_fp; + sg_gateway.event_handle.context = init_param->init_param.event_handle.context; + + /* set _gateway_event_handler as mqtt event handle */ + init_param->init_param.event_handle.h_fp = _gateway_event_handler; + init_param->init_param.event_handle.context = &sg_gateway; + + /* construct MQTT client */ + sg_gateway.mqtt = IOT_MQTT_Construct(&init_param->init_param); + if (NULL == sg_gateway.mqtt) { + Log_e("construct MQTT failed"); + IOT_FUNC_EXIT_RC(NULL); + } + + /* subscribe default topic */ + param.product_id = init_param->init_param.product_id; + param.device_name = init_param->init_param.device_name; + rc = gateway_subscribe_unsubscribe_default(&sg_gateway, ¶m); + if (QCLOUD_RET_SUCCESS != rc) { + Log_e("subscribe default topic failed"); + IOT_Gateway_Destroy((void*)&sg_gateway); + IOT_FUNC_EXIT_RC(NULL); + } + + sg_gateway.is_construct = 1; + + return &sg_gateway; +} + + +int IOT_Gateway_Subdev_Online(void *client, GatewayParam* param) +{ + int rc = 0; + char topic[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + char payload[GATEWAY_PAYLOAD_BUFFER_LEN + 1] = {0}; + int size = 0; + SubdevSession* session = NULL; + PublishParams params = DEFAULT_PUB_PARAMS; + Gateway* gateway = (Gateway*)client; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); + + session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_d("there is no session, create a new session"); + + /* create subdev session */ + session = subdev_add_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_e("create session error!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_CREATE_SESSION_FAIL); + } + } else { + if (SUBDEV_SEESION_STATUS_ONLINE == session->session_status) { + Log_i("device have online"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_ONLINE); + } + } + + + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + + size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN + 1, GATEWAY_PAYLOAD_STATUS_FMT, "online", param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) { + Log_e("buf size < payload length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(gateway->gateway_data.online.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("buf size < client_id length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + gateway->gateway_data.online.result = -2; + + params.qos = QOS0; + params.payload_len = strlen(payload); + params.payload = (char *) payload; + + + /* publish packet */ + rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.online.result); + if (QCLOUD_RET_SUCCESS != rc) { + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + IOT_FUNC_EXIT_RC(rc); + } + + session->session_status = SUBDEV_SEESION_STATUS_ONLINE; + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + + +int IOT_Gateway_Subdev_Offline(void *client, GatewayParam* param) +{ + int rc = 0; + char topic[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + char payload[GATEWAY_PAYLOAD_BUFFER_LEN + 1] = {0}; + int size = 0; + SubdevSession* session = NULL; + Gateway* gateway = (Gateway*)client; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->subdev_device_name, QCLOUD_ERR_INVAL); + + session = subdev_find_session(gateway, param->subdev_product_id, param->subdev_device_name); + if (NULL == session) { + Log_d("no session, can not offline"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_NO_EXIST); + + } + if (SUBDEV_SEESION_STATUS_OFFLINE == session->session_status) { + Log_i("device have offline"); + /* free session */ + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SUBDEV_OFFLINE); + } + + size = HAL_Snprintf(topic, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_FMT, param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + + size = HAL_Snprintf(payload, GATEWAY_PAYLOAD_BUFFER_LEN + 1, GATEWAY_PAYLOAD_STATUS_FMT, "offline", param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > GATEWAY_PAYLOAD_BUFFER_LEN) { + Log_e("buf size < payload length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + size = HAL_Snprintf(gateway->gateway_data.offline.client_id, MAX_SIZE_OF_CLIENT_ID, GATEWAY_CLIENT_ID_FMT, param->subdev_product_id, param->subdev_device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("buf size < client_id length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + gateway->gateway_data.offline.result = -2; + + + + PublishParams params = DEFAULT_PUB_PARAMS; + params.qos = QOS0; + params.payload_len = strlen(payload); + params.payload = (char *) payload; + + /* publish packet */ + rc = gateway_publish_sync(gateway, topic, ¶ms, &gateway->gateway_data.offline.result); + if (QCLOUD_RET_SUCCESS != rc) { + IOT_FUNC_EXIT_RC(rc); + } + + session->session_status = SUBDEV_SEESION_STATUS_OFFLINE; + + /* free session */ + subdev_remove_session(gateway, param->subdev_product_id, param->subdev_device_name); + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + + +int IOT_Gateway_Destroy(void *client) +{ + int ret; + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + ret = IOT_MQTT_Destroy(&gateway->mqtt); + gateway->is_construct = 0; + + return ret; +} + +void *IOT_Gateway_Get_MQTT_Client(void *client) +{ + Gateway* gateway = (Gateway*)client; + + return (NULL == gateway) ? NULL : (gateway->mqtt); +} + +int IOT_Gateway_Yield(void *client, uint32_t timeout_ms) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Yield(gateway->mqtt, timeout_ms); +} + +int IOT_Gateway_Subscribe(void *client, char *topic_filter, SubscribeParams *params) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); +} + + +int IOT_Gateway_Unsubscribe(void *client, char *topic_filter) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); +} + + +int IOT_Gateway_Publish(void *client, char *topic_name, PublishParams *params) +{ + Gateway* gateway = (Gateway*)client; + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + return IOT_MQTT_Publish(gateway->mqtt, topic_name, params); + +} + diff --git a/sdk_src/services/gateway/gateway_common.c b/sdk_src/services/gateway/gateway_common.c new file mode 100644 index 0000000..d659feb --- /dev/null +++ b/sdk_src/services/gateway/gateway_common.c @@ -0,0 +1,351 @@ + +#include "lite-utils.h" +#include "mqtt_client.h" +#include "gateway_common.h" + + +static char cloud_rcv_buf[GATEWAY_RECEIVE_BUFFER_LEN]; + + +static bool get_json_type(char *json, char **v) +{ + *v = LITE_json_value_of("type", json); + return *v == NULL ? false : true; +} + +static bool get_json_devices(char *json, char **v) +{ + *v = LITE_json_value_of("payload.devices", json); + return *v == NULL ? false : true; +} + +static bool get_json_result(char *json, int32_t* res) +{ + char *v = LITE_json_value_of("result", json); + if (v == NULL) { + return false; + } + if (LITE_get_int32(res, v) != QCLOUD_RET_SUCCESS) { + HAL_Free(v); + return false; + } + HAL_Free(v); + return true; +} + +static bool get_json_product_id(char *json, char **v) +{ + *v = LITE_json_value_of("product_id", json); + return *v == NULL ? false : true; +} + + +static bool get_json_device_name(char *json, char **v) +{ + *v = LITE_json_value_of("device_name", json); + return *v == NULL ? false : true; +} + +static void _gateway_message_handler(void *client, MQTTMessage *message, void *user_data) +{ + Qcloud_IoT_Client *mqtt = NULL; + Gateway *gateway = NULL; + char *topic = NULL; + size_t topic_len = 0; + int cloud_rcv_len = 0; + char *type = NULL; + char *devices = NULL, *devices_strip = NULL; + char *product_id = NULL; + char *device_name = NULL; + int32_t result = 0; + char client_id[MAX_SIZE_OF_CLIENT_ID + 1] = {0}; + int size = 0; + + POINTER_SANITY_CHECK_RTN(client); + POINTER_SANITY_CHECK_RTN(message); + + mqtt = (Qcloud_IoT_Client *)client; + gateway = (Gateway*)mqtt->event_handle.context; + POINTER_SANITY_CHECK_RTN(gateway); + + topic = (char *)message->ptopic; + topic_len = message->topic_len; + if (NULL == topic || topic_len <= 0) { + Log_e("topic == NULL or topic_len <= 0."); + return; + } + + if (message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN) { + Log_e("message->payload_len > GATEWAY_RECEIVE_BUFFER_LEN."); + return; + } + + cloud_rcv_len = Min(GATEWAY_RECEIVE_BUFFER_LEN - 1, message->payload_len); + memcpy(cloud_rcv_buf, message->payload, cloud_rcv_len + 1); + cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string +// Log_d("recv:%s", cloud_rcv_buf); + + if (!get_json_type(cloud_rcv_buf, &type)) { + Log_e("Fail to parse type from msg: %s", cloud_rcv_buf); + return; + } + + if (!get_json_devices(cloud_rcv_buf, &devices)) { + Log_e("Fail to parse devices from msg: %s", cloud_rcv_buf); + HAL_Free(type); + return; + } + + if (devices[0] == '[') { + devices_strip = devices + 1; + } else { + devices_strip = devices; + } + + if (!get_json_result(devices_strip, &result)) { + Log_e("Fail to parse result from msg: %s", cloud_rcv_buf); + HAL_Free(type); + HAL_Free(devices); + return; + } + if (!get_json_product_id(devices_strip, &product_id)) { + Log_e("Fail to parse product_id from msg: %s", cloud_rcv_buf); + HAL_Free(type); + HAL_Free(devices); + return; + } + if (!get_json_device_name(devices_strip, &device_name)) { + Log_e("Fail to parse device_name from msg: %s", cloud_rcv_buf); + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + return; + } + + size = HAL_Snprintf(client_id, MAX_SIZE_OF_CLIENT_ID + 1, GATEWAY_CLIENT_ID_FMT, product_id, device_name); + if (size < 0 || size > MAX_SIZE_OF_CLIENT_ID) { + Log_e("generate client_id fail."); + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + HAL_Free(device_name); + return; + } + + + if (strncmp(type, "online", sizeof("online") - 1) == 0) { + if (strncmp(client_id, gateway->gateway_data.online.client_id, size) == 0) { + Log_i("client_id(%s), online result %d", client_id, result); + gateway->gateway_data.online.result = result; + } + } else if (strncmp(type, "offline", sizeof("offline") - 1) == 0) { + if (strncmp(client_id, gateway->gateway_data.offline.client_id, size) == 0) { + Log_i("client_id(%s), offline result %d", client_id, result); + gateway->gateway_data.offline.result = result; + } + } + + HAL_Free(type); + HAL_Free(devices); + HAL_Free(product_id); + HAL_Free(device_name); + return; + +} + +int gateway_subscribe_unsubscribe_topic(Gateway *gateway, char *topic_filter, SubscribeParams *params, int is_subscribe) +{ + int rc = 0; + int loop_count = 0; + uint32_t status = -1; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + POINTER_SANITY_CHECK(params, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(topic_filter, QCLOUD_ERR_INVAL); + + params->qos = QOS1; + gateway->gateway_data.sync_status = status; + + if (is_subscribe) { + /* subscribe */ + rc = IOT_MQTT_Subscribe(gateway->mqtt, topic_filter, params); + } else { + /* unsubscribe */ + rc = IOT_MQTT_Unsubscribe(gateway->mqtt, topic_filter); + } + + if (rc < 0) { + Log_e("subscribe or un(%d), result(%d)", is_subscribe, rc); + IOT_FUNC_EXIT_RC(rc); + } + + gateway->gateway_data.sync_status = status = rc; + while (status == gateway->gateway_data.sync_status) { + if (loop_count > GATEWAY_LOOP_MAX_COUNT) { + Log_i("loop max count, time out"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_Gateway_Yield(gateway, 200); + loop_count++; + } + + if (gateway->gateway_data.sync_status != 0) { + Log_e("gateway->gateway_data.sync_status(%u) != 0", gateway->gateway_data.sync_status); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +int gateway_subscribe_unsubscribe_default(Gateway *gateway, GatewayParam *param) +{ + int rc = 0; + int size = 0; + char topic_filter[MAX_SIZE_OF_CLOUD_TOPIC + 1] = {0}; + SubscribeParams subscribe_params = DEFAULT_SUB_PARAMS; + + POINTER_SANITY_CHECK(param, QCLOUD_ERR_INVAL); + + STRING_PTR_SANITY_CHECK(param->product_id, QCLOUD_ERR_INVAL); + STRING_PTR_SANITY_CHECK(param->device_name, QCLOUD_ERR_INVAL); + + //subscribe online/offline operation reslut + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_CLOUD_TOPIC + 1, GATEWAY_TOPIC_OPERATION_RESULT_FMT, param->product_id, param->device_name); + if (size < 0 || size > MAX_SIZE_OF_CLOUD_TOPIC) { + Log_e("buf size < topic length!"); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + subscribe_params.on_message_handler = _gateway_message_handler; + rc = gateway_subscribe_unsubscribe_topic(gateway, topic_filter, &subscribe_params, IOT_TRUE); + if (QCLOUD_RET_SUCCESS != rc) { + IOT_FUNC_EXIT_RC(rc); + } + + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + +SubdevSession* subdev_find_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession* session = NULL; + + POINTER_SANITY_CHECK(gateway, NULL); + STRING_PTR_SANITY_CHECK(product_id, NULL); + STRING_PTR_SANITY_CHECK(device_name, NULL); + + session = gateway->session_list; + + /* session is exist */ + while (session) { + if (0 == strcmp(session->product_id, product_id) && + 0 == strcmp(session->device_name, device_name)) { + + IOT_FUNC_EXIT_RC(session); + } + session = session->next; + } + + IOT_FUNC_EXIT_RC(NULL); +} + +SubdevSession* subdev_add_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession* session = NULL; + + POINTER_SANITY_CHECK(gateway, NULL); + STRING_PTR_SANITY_CHECK(product_id, NULL); + STRING_PTR_SANITY_CHECK(device_name, NULL); + + session = HAL_Malloc(sizeof(SubdevSession)); + if (session == NULL) { + Log_e("Not enough memory"); + IOT_FUNC_EXIT_RC(NULL); + } + + /* add session to list */ + session->next = gateway->session_list; + gateway->session_list = session; + + int size = strlen(product_id); + strncpy(session->product_id, product_id, size); + session->product_id[size] = '\0'; + size = strlen(device_name); + strncpy(session->device_name, device_name, size); + session->device_name[size] = '\0'; + session->session_status = SUBDEV_SEESION_STATUS_INIT; + + IOT_FUNC_EXIT_RC(session); +} + +int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name) +{ + SubdevSession* cur_session = NULL; + SubdevSession* pre_session = NULL; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_FAILURE); + STRING_PTR_SANITY_CHECK(product_id, QCLOUD_ERR_FAILURE); + STRING_PTR_SANITY_CHECK(device_name, QCLOUD_ERR_FAILURE); + + pre_session = cur_session = gateway->session_list; + + if (NULL == cur_session) { + Log_e("session list is empty"); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + + /* session is exist */ + while (cur_session) { + if (0 == strcmp(cur_session->product_id, product_id) && + 0 == strcmp(cur_session->device_name, device_name) ) { + if (cur_session == gateway->session_list) { + gateway->session_list = cur_session->next; + } else { + pre_session->next = cur_session->next; + } + HAL_Free(cur_session); + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); + } + pre_session = cur_session; + cur_session = cur_session->next; + } + + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); +} + + +int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, int32_t *result) +{ + int rc = 0; + int loop_count = 0; + int32_t res = *result; + + POINTER_SANITY_CHECK(gateway, QCLOUD_ERR_INVAL); + + rc = IOT_Gateway_Publish(gateway, topic, params); + if (rc < 0) { + Log_e("publish fail."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + + /* wait for response */ + while (res == *result) { + if (loop_count > GATEWAY_LOOP_MAX_COUNT) { + Log_i("loop max count, time out."); + IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT); + } + +#ifndef MULTITHREAD_ENABLED + IOT_Gateway_Yield(gateway, 200); +#else + HAL_SleepMs(1); +#endif + loop_count++; + } + + if (*result != 0) { + IOT_FUNC_EXIT_RC(QCLOUD_ERR_FAILURE); + } + IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); +} + diff --git a/sdk_src/services/ota/ota_client.c b/sdk_src/services/ota/ota_client.c index 51bbdb7..bca9efe 100644 --- a/sdk_src/services/ota/ota_client.c +++ b/sdk_src/services/ota/ota_client.c @@ -35,26 +35,26 @@ extern "C" { #define OTA_VERSION_STR_LEN_MAX (32) typedef struct { - const char *product_id; /* point to product id */ - const char *device_name; /* point to device name */ + const char *product_id; /* point to product id */ + const char *device_name; /* point to device name */ - uint32_t id; /* message id */ - IOT_OTA_State_Code state; /* OTA state */ - uint32_t size_last_fetched; /* size of last downloaded */ - uint32_t size_fetched; /* size of already downloaded */ - uint32_t size_file; /* size of file */ + uint32_t id; /* message id */ + IOT_OTA_State_Code state; /* OTA state */ + uint32_t size_last_fetched; /* size of last downloaded */ + uint32_t size_fetched; /* size of already downloaded */ + uint32_t size_file; /* size of file */ - char *purl; /* point to URL */ - char *version; /* point to string */ - char md5sum[33]; /* MD5 string */ + char *purl; /* point to URL */ + char *version; /* point to string */ + char md5sum[33]; /* MD5 string */ - void *md5; /* MD5 handle */ - void *ch_signal; /* channel handle of signal exchanged with OTA server */ - void *ch_fetch; /* channel handle of download */ + void *md5; /* MD5 handle */ + void *ch_signal; /* channel handle of signal exchanged with OTA server */ + void *ch_fetch; /* channel handle of download */ - int err; /* last error code */ + int err; /* last error code */ - short current_signal_type; + short current_signal_type; Timer report_timer; @@ -70,7 +70,8 @@ static int _ota_check_progress(IOT_OTA_Progress_Code progress) } /* callback when OTA topic msg is received */ -static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { +static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) +{ #define OTA_JSON_TYPE_VALUE_LENGTH 64 char *json_type = NULL; @@ -83,8 +84,8 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } if (msg == NULL || msg_len <= 0) { - Log_e("OTA response message is NULL"); - return; + Log_e("OTA response message is NULL"); + return; } if (qcloud_otalib_get_firmware_type(msg, &json_type) != QCLOUD_RET_SUCCESS) { @@ -93,29 +94,27 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } if (!strcmp(json_type, REPORT_VERSION_RSP)) { - if (qcloud_otalib_get_report_version_result(msg) < QCLOUD_RET_SUCCESS) { + if (qcloud_otalib_get_report_version_result(msg) < QCLOUD_RET_SUCCESS) { Log_e("Report version failed!"); h_ota->err = IOT_OTA_ERR_REPORT_VERSION; h_ota->state = IOT_OTAS_FETCHED; - } - else { - Log_i("Report version success!"); - } - goto End; - } - else { + } else { + Log_i("Report version success!"); + } + goto End; + } else { if (strcmp(json_type, UPDATE_FIRMWARE) != 0) { - Log_e("Netheir Report version result nor update firmware! type: %s", json_type); + Log_e("Netheir Report version result nor update firmware! type: %s", json_type); goto End; } - if(NULL != json_type) { + if (NULL != json_type) { HAL_Free(json_type); json_type = NULL; } if (0 != qcloud_otalib_get_params(msg, &json_type, &h_ota->purl, &h_ota->version, - h_ota->md5sum, &h_ota->size_file)) { + h_ota->md5sum, &h_ota->size_file)) { Log_e("Get firmware parameter failed"); goto End; } @@ -124,16 +123,16 @@ static void _ota_callback(void *pcontext, const char *msg, uint32_t msg_len) { } End: - if (json_type != NULL) HAL_Free(json_type); + if (json_type != NULL) HAL_Free(json_type); #undef OTA_JSON_TYPE_VALUE_LENGTH } static void IOT_OTA_ResetStatus(void *handle) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - h_ota->state = IOT_OTAS_INITED; -} + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + h_ota->state = IOT_OTAS_INITED; +} static int IOT_OTA_ReportProgress(void *handle, IOT_OTA_Progress_Code progress, IOT_OTAReportType reportType) { @@ -197,7 +196,7 @@ static int IOT_OTA_ReportUpgradeResult(void *handle, const char *version, IOT_OT POINTER_SANITY_CHECK(handle, IOT_OTA_ERR_INVALID_PARAM); POINTER_SANITY_CHECK(version, IOT_OTA_ERR_INVALID_PARAM); - + int ret, len; char *msg_upgrade; OTA_Struct_t *h_ota = (OTA_Struct_t *)handle; @@ -254,7 +253,7 @@ void *IOT_OTA_Init(const char *product_id, const char *device_name, void *ch_sig POINTER_SANITY_CHECK(product_id, NULL); POINTER_SANITY_CHECK(device_name, NULL); POINTER_SANITY_CHECK(ch_signal, NULL); - + OTA_Struct_t *h_ota = NULL; if (NULL == (h_ota = HAL_Malloc(sizeof(OTA_Struct_t)))) { @@ -341,31 +340,31 @@ int IOT_OTA_Destroy(void *handle) /*support continuous transmission of breakpoints*/ int IOT_OTA_StartDownload(void *handle, uint32_t offset, uint32_t size) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int Ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int Ret; - h_ota->size_fetched += offset; - h_ota->ch_fetch = ofc_Init(h_ota->purl, offset, size); + h_ota->size_fetched = offset; + h_ota->ch_fetch = ofc_Init(h_ota->purl, offset, size); if (NULL == h_ota->ch_fetch) { Log_e("Initialize fetch module failed"); - return QCLOUD_ERR_FAILURE; + return QCLOUD_ERR_FAILURE; } - Ret = qcloud_ofc_connect(h_ota->ch_fetch); + Ret = qcloud_ofc_connect(h_ota->ch_fetch); if (QCLOUD_RET_SUCCESS != Ret) { Log_e("Connect fetch module failed"); - h_ota->state = IOT_OTAS_DISCONNECTED; + h_ota->state = IOT_OTAS_DISCONNECTED; } - - return Ret; + + return Ret; } /*support continuous transmission of breakpoints*/ void IOT_OTA_UpdateClientMd5(void *handle, char * buff, uint32_t size) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - qcloud_otalib_md5_update(h_ota->md5, buff, size); + qcloud_otalib_md5_update(h_ota->md5, buff, size); } int IOT_OTA_ReportVersion(void *handle, const char *version) @@ -433,31 +432,31 @@ int IOT_OTA_ReportUpgradeBegin(void *handle) int IOT_OTA_ReportUpgradeSuccess(void *handle, const char *version) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int ret; - - if(NULL == version){ - ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_SUCCESS); - }else{ - ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_SUCCESS); - } - - return ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int ret; + + if (NULL == version) { + ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_SUCCESS); + } else { + ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_SUCCESS); + } + + return ret; } int IOT_OTA_ReportUpgradeFail(void *handle, const char *version) { - OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; - int ret; - - if(NULL == version){ - ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_FAIL); - }else{ - ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_FAIL); - } - - return ret; + OTA_Struct_t *h_ota = (OTA_Struct_t *) handle; + int ret; + + if (NULL == version) { + ret = IOT_OTA_ReportUpgradeResult(handle, h_ota->version, IOT_OTAR_UPGRADE_FAIL); + } else { + ret = IOT_OTA_ReportUpgradeResult(handle, version, IOT_OTAR_UPGRADE_FAIL); + } + + return ret; } @@ -529,8 +528,8 @@ int IOT_OTA_FetchYield(void *handle, char *buf, uint32_t buf_len, uint32_t timeo } else if (ret == IOT_OTA_ERR_FETCH_TIMEOUT) { // fetch timeout IOT_OTA_ReportUpgradeResult(h_ota, h_ota->version, IOT_OTAR_DOWNLOAD_TIMEOUT); h_ota->err = ret; - } - + } + return ret; } else if (0 == h_ota->size_fetched) { /* force report status in the first */ diff --git a/sdk_src/services/ota/ota_fetch.c b/sdk_src/services/ota/ota_fetch.c index e779031..97f62dc 100644 --- a/sdk_src/services/ota/ota_fetch.c +++ b/sdk_src/services/ota/ota_fetch.c @@ -41,30 +41,30 @@ typedef struct { } OTAHTTPStruct; -static int is_begin_with(const char * str1,char *str2) +#ifdef OTA_USE_HTTPS +static int is_begin_with(const char * str1, char *str2) { - if(str1 == NULL || str2 == NULL) + if (str1 == NULL || str2 == NULL) return -1; int len1 = strlen(str1); int len2 = strlen(str2); - if((len1 < len2) || (len1 == 0 || len2 == 0)) + if ((len1 < len2) || (len1 == 0 || len2 == 0)) return -1; char *p = str2; int i = 0; - while(*p != '\0') - { - if(*p != str1[i]) - return 0; + while (*p != '\0') { + if (*p != str1[i]) + return 0; p++; i++; } return 1; } - +#endif static char sg_head_content[OTA_HTTP_HEAD_CONTENT_LEN]; void *ofc_Init(const char *url, uint32_t offset, uint32_t size) -{ +{ OTAHTTPStruct *h_odc; if (NULL == (h_odc = HAL_Malloc(sizeof(OTAHTTPStruct)))) { @@ -73,14 +73,14 @@ void *ofc_Init(const char *url, uint32_t offset, uint32_t size) } memset(h_odc, 0, sizeof(OTAHTTPStruct)); - memset(sg_head_content, 0, OTA_HTTP_HEAD_CONTENT_LEN); - HAL_Snprintf(sg_head_content, OTA_HTTP_HEAD_CONTENT_LEN,\ - "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"\ - "Accept-Encoding: gzip, deflate\r\n"\ - "Range: bytes=%d-%d\r\n", - offset, size); - - Log_d("head_content:%s", sg_head_content); + memset(sg_head_content, 0, OTA_HTTP_HEAD_CONTENT_LEN); + HAL_Snprintf(sg_head_content, OTA_HTTP_HEAD_CONTENT_LEN, \ + "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"\ + "Accept-Encoding: gzip, deflate\r\n"\ + "Range: bytes=%d-%d\r\n", + offset, size); + + Log_d("head_content:%s", sg_head_content); /* set http request-header parameter */ h_odc->http.header = sg_head_content; h_odc->url = url; @@ -97,11 +97,12 @@ int32_t qcloud_ofc_connect(void *handle) int port = 80; const char *ca_crt = NULL; - if (is_begin_with(h_odc->url, "https")) - { +#ifdef OTA_USE_HTTPS + if (is_begin_with(h_odc->url, "https")) { port = 443; ca_crt = iot_https_ca_get(); } +#endif int32_t rc = qcloud_http_client_common(&h_odc->http, h_odc->url, port, ca_crt, HTTP_GET, &h_odc->http_data); @@ -119,18 +120,18 @@ int32_t qcloud_ofc_fetch(void *handle, char *buf, uint32_t bufLen, uint32_t time h_odc->http_data.response_buf = buf; h_odc->http_data.response_buf_len = bufLen; diff = h_odc->http_data.response_content_len - h_odc->http_data.retrieve_len; - + int rc = qcloud_http_recv_data(&h_odc->http, timeout_s * 1000, &h_odc->http_data); if (QCLOUD_RET_SUCCESS != rc) { if (rc == QCLOUD_ERR_HTTP_NOT_FOUND) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_NOT_EXIST); - + if (rc == QCLOUD_ERR_HTTP_AUTH) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_AUTH_FAIL); - + if (rc == QCLOUD_ERR_HTTP_TIMEOUT) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FETCH_TIMEOUT); - + IOT_FUNC_EXIT_RC(rc); } diff --git a/sdk_src/services/ota/ota_lib.c b/sdk_src/services/ota/ota_lib.c index 5d2cb6d..065fa82 100644 --- a/sdk_src/services/ota/ota_lib.c +++ b/sdk_src/services/ota/ota_lib.c @@ -33,7 +33,7 @@ extern "C" { /* Get the specific @key value, and copy to @dest */ /* 0, successful; -1, failed */ static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const char *key, - char *dest, size_t dest_len) + char *dest, size_t dest_len) { IOT_FUNC_ENTRY; @@ -41,17 +41,17 @@ static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const c char* key_bak = HAL_Malloc(strlen(key) + 1); if (key_bak == NULL) { - Log_e("not enough memory for malloc key"); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc key"); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } char* json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); if (json_doc_bak == NULL) { - Log_e("not enough memory for malloc json"); - HAL_Free(key_bak); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc json"); + HAL_Free(key_bak); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } strcpy(key_bak, key); @@ -59,29 +59,27 @@ static int _qcloud_otalib_get_firmware_fixlen_para(const char *json_doc, const c char* value = LITE_json_value_of(key_bak, json_doc_bak); if (value == NULL) { - Log_e("Not '%s' key in json doc of OTA", key); - ret = IOT_OTA_ERR_FAIL; - } - else { - uint32_t val_len = strlen(value); - if (val_len > dest_len) { - Log_e("value length of the key is too long"); - ret = IOT_OTA_ERR_FAIL; - } - else { - memcpy(dest, value, val_len); - ret = QCLOUD_RET_SUCCESS; - } - - HAL_Free(value); + Log_e("Not '%s' key in json doc of OTA", key); + ret = IOT_OTA_ERR_FAIL; + } else { + uint32_t val_len = strlen(value); + if (val_len > dest_len) { + Log_e("value length of the key is too long"); + ret = IOT_OTA_ERR_FAIL; + } else { + memcpy(dest, value, val_len); + ret = QCLOUD_RET_SUCCESS; + } + + HAL_Free(value); } - if (key_bak != NULL) { - HAL_Free(key_bak); - } - if (json_doc_bak != NULL) { - HAL_Free(json_doc_bak); - } + if (key_bak != NULL) { + HAL_Free(key_bak); + } + if (json_doc_bak != NULL) { + HAL_Free(json_doc_bak); + } IOT_FUNC_EXIT_RC(ret); } @@ -99,17 +97,17 @@ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const c char* key_bak = HAL_Malloc(strlen(key) + 1); if (key_bak == NULL) { - Log_e("not enough memory for malloc key"); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc key"); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } char* json_doc_bak = HAL_Malloc(strlen(json_doc) + 1); if (json_doc_bak == NULL) { - Log_e("not enough memory for malloc json"); - HAL_Free(key_bak); - ret = IOT_OTA_ERR_FAIL; - IOT_FUNC_EXIT_RC(ret); + Log_e("not enough memory for malloc json"); + HAL_Free(key_bak); + ret = IOT_OTA_ERR_FAIL; + IOT_FUNC_EXIT_RC(ret); } strcpy(key_bak, key); @@ -117,16 +115,16 @@ static int _qcloud_otalib_get_firmware_varlen_para(const char *json_doc, const c *dest = LITE_json_value_of(key_bak, json_doc_bak); if (*dest == NULL) { - Log_e("Not '%s' key in json '%s' doc of OTA", key_bak, json_doc_bak); - ret = IOT_OTA_ERR_FAIL; + Log_e("Not '%s' key in json '%s' doc of OTA", key_bak, json_doc_bak); + ret = IOT_OTA_ERR_FAIL; } - if (key_bak != NULL) { - HAL_Free(key_bak); - } - if (json_doc_bak != NULL) { - HAL_Free(json_doc_bak); - } + if (key_bak != NULL) { + HAL_Free(key_bak); + } + if (json_doc_bak != NULL) { + HAL_Free(json_doc_bak); + } IOT_FUNC_EXIT_RC(ret); @@ -184,16 +182,16 @@ int qcloud_otalib_get_report_version_result(const char *json) int rc = _qcloud_otalib_get_firmware_varlen_para(json, RESULT_FIELD, &result_code); if ( rc != QCLOUD_RET_SUCCESS || strcmp(result_code, "0") != 0) { - if(NULL != result_code) HAL_Free(result_code); + if (NULL != result_code) HAL_Free(result_code); IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); } - if(NULL != result_code) HAL_Free(result_code); + if (NULL != result_code) HAL_Free(result_code); IOT_FUNC_EXIT_RC(QCLOUD_RET_SUCCESS); } int qcloud_otalib_get_params(const char *json, char **type, char **url, char **version, char *md5, - uint32_t *fileSize) + uint32_t *fileSize) { #define OTA_FILESIZE_STR_LEN (16) @@ -266,45 +264,45 @@ int qcloud_otalib_gen_report_msg(char *buf, size_t bufLen, uint32_t id, const ch switch (reportType) { /* report OTA download begin */ case IOT_OTAR_DOWNLOAD_BEGIN: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"0\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"0\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", version); + break; /* report OTA download progress */ case IOT_OTAR_DOWNLOADING: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"%d\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", - progress, version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"downloading\", \"percent\":\"%d\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\": \"%s\"}}", + progress, version); + break; case IOT_OTAR_DOWNLOAD_TIMEOUT: case IOT_OTAR_FILE_NOT_EXIST: case IOT_OTAR_MD5_NOT_MATCH: case IOT_OTAR_AUTH_FAIL: case IOT_OTAR_UPGRADE_FAIL: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"fail\", \"result_code\":\"%d\", \"result_msg\":\"time_out\"}, \"version\": \"%s\"}}", reportType, version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\": {\"progress\": {\"state\":\"fail\", \"result_code\":\"%d\", \"result_msg\":\"time_out\"}, \"version\": \"%s\"}}", reportType, version); + break; /* report OTA upgrade begin */ case IOT_OTAR_UPGRADE_BEGIN: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"burning\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", - version); - break; + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"burning\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", + version); + break; /* report OTA upgrade finish */ case IOT_OTAR_UPGRADE_SUCCESS: - ret = HAL_Snprintf(buf, - bufLen, - "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"done\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", - version); - break; - + ret = HAL_Snprintf(buf, + bufLen, + "{\"type\": \"report_progress\", \"report\":{\"progress\":{\"state\":\"done\", \"result_code\":\"0\", \"result_msg\":\"\"}, \"version\":\"%s\"}}", + version); + break; + default: - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); - break; + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + break; } diff --git a/sdk_src/services/ota/ota_mqtt.c b/sdk_src/services/ota/ota_mqtt.c index c3d06a4..75a3fc7 100644 --- a/sdk_src/services/ota/ota_mqtt.c +++ b/sdk_src/services/ota/ota_mqtt.c @@ -28,13 +28,13 @@ extern "C" { /* OSC, OTA signal channel */ typedef struct { - void *mqtt; //MQTT cient + void *mqtt; //MQTT cient - const char *product_id; - const char *device_name; + const char *product_id; + const char *device_name; - char topic_upgrade[OTA_MAX_TOPIC_LEN]; //OTA MQTT Topic - OnOTAMessageCallback msg_callback; + char topic_upgrade[OTA_MAX_TOPIC_LEN]; //OTA MQTT Topic + OnOTAMessageCallback msg_callback; void *context; } OTA_MQTT_Struct_t; @@ -50,7 +50,7 @@ static int _otamqtt_gen_topic_name(char *buf, size_t bufLen, const char *OTATopi ret = HAL_Snprintf(buf, bufLen, "$ota/%s/%s/%s", OTATopicType, productId, deviceName); - if(ret >= bufLen) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + if (ret >= bufLen) IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); if (ret < 0) { Log_e("HAL_Snprintf failed"); @@ -80,8 +80,8 @@ static int _otamqtt_publish(OTA_MQTT_Struct_t *handle, const char *topicType, in /* inform OTA to topic: "/ota/device/progress/$(product_id)/$(device_name)" */ ret = _otamqtt_gen_topic_name(topic_name, OTA_MAX_TOPIC_LEN, topicType, handle->product_id, handle->device_name); if (ret < 0) { - Log_e("generate topic name of info failed"); - IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); + Log_e("generate topic name of info failed"); + IOT_FUNC_EXIT_RC(IOT_OTA_ERR_FAIL); } ret = IOT_MQTT_Publish(handle->mqtt, topic_name, &pub_params); @@ -147,7 +147,7 @@ void *qcloud_osc_init(const char *productId, const char *deviceName, void *chann do_exit: if (NULL != h_osc) { - HAL_Free(h_osc); + HAL_Free(h_osc); } return NULL; @@ -182,7 +182,7 @@ int qcloud_osc_report_upgrade_result(void *handle, const char *msg) return _otamqtt_publish(handle, "report", QOS1, msg); } -#endif +#endif #ifdef __cplusplus } diff --git a/sdk_src/services/system/system_mqtt.c b/sdk_src/services/system/system_mqtt.c index f83acd1..a165b4d 100644 --- a/sdk_src/services/system/system_mqtt.c +++ b/sdk_src/services/system/system_mqtt.c @@ -25,7 +25,7 @@ extern "C" { #include "qcloud_iot_import.h" -#ifdef SYSTEM_COMM +#ifdef SYSTEM_COMM #include "qcloud_iot_export_system.h" #include "mqtt_client.h" @@ -35,27 +35,28 @@ extern "C" { typedef struct _sys_mqtt_state { bool topic_sub_ok; bool result_recv_ok; - long time; -}SysMQTTState; + long time; +} SysMQTTState; static SysMQTTState sg_state = { - .topic_sub_ok = false, - .result_recv_ok = false, - .time = 0}; + .topic_sub_ok = false, + .result_recv_ok = false, + .time = 0 +}; static void _system_mqtt_message_callback(void *pClient, MQTTMessage *message, void *pUserData) { #define MAX_RECV_LEN (512) - POINTER_SANITY_CHECK_RTN(message); + POINTER_SANITY_CHECK_RTN(message); static char rcv_buf[MAX_RECV_LEN + 1]; - size_t len = (message->payload_len > MAX_RECV_LEN)?MAX_RECV_LEN:(message->payload_len); + size_t len = (message->payload_len > MAX_RECV_LEN) ? MAX_RECV_LEN : (message->payload_len); - if(message->payload_len > MAX_RECV_LEN){ - Log_e("payload len oversize"); - } + if (message->payload_len > MAX_RECV_LEN) { + Log_e("payload len oversize"); + } memcpy(rcv_buf, message->payload, len); rcv_buf[len] = '\0'; // jsmn_parse relies on a string SysMQTTState *state = (SysMQTTState *)pUserData; @@ -75,28 +76,28 @@ static void _system_mqtt_sub_event_handler(void *pclient, MQTTEventType event_ty { SysMQTTState *state = (SysMQTTState *)pUserData; - switch(event_type) { + switch (event_type) { case MQTT_EVENT_SUBCRIBE_SUCCESS: Log_d("mqtt sys topic subscribe success"); - state->topic_sub_ok = true; + state->topic_sub_ok = true; break; case MQTT_EVENT_SUBCRIBE_TIMEOUT: Log_i("mqtt sys topic subscribe timeout"); - state->topic_sub_ok = false; + state->topic_sub_ok = false; break; case MQTT_EVENT_SUBCRIBE_NACK: Log_i("mqtt sys topic subscribe NACK"); - state->topic_sub_ok = false; + state->topic_sub_ok = false; break; case MQTT_EVENT_UNSUBSCRIBE: Log_i("mqtt sys topic has been unsubscribed"); - state->topic_sub_ok = false;; + state->topic_sub_ok = false;; break; case MQTT_EVENT_CLIENT_DESTROY: Log_i("mqtt client has been destroyed"); - state->topic_sub_ok = false;; + state->topic_sub_ok = false;; break; default: return; @@ -122,7 +123,7 @@ static int _iot_system_info_get_publish(void *pClient) pub_params.payload = payload_content; pub_params.payload_len = strlen(payload_content); - return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); + return IOT_MQTT_Publish(mqtt_client, topic_name, &pub_params); } static int _iot_system_info_result_subscribe(void *pClient) @@ -134,8 +135,7 @@ static int _iot_system_info_result_subscribe(void *pClient) char topic_name[128] = {0}; int size = HAL_Snprintf(topic_name, sizeof(topic_name), "$sys/operation/result/%s/%s", dev_info->product_id, dev_info->device_name); - if (size < 0 || size > sizeof(topic_name) - 1) - { + if (size < 0 || size > sizeof(topic_name) - 1) { Log_e("topic content length not enough! content size:%d buf size:%d", size, (int)sizeof(topic_name)); return QCLOUD_ERR_FAILURE; } @@ -159,8 +159,8 @@ int IOT_Get_SysTime(void* pClient, long *time) // subscribe sys topic: $sys/operation/get/${productid}/${devicename} // skip this if the subscription is done and valid - if(!sg_state.topic_sub_ok){ - for(cntSub = 0; cntSub < 3; cntSub++){ + if (!sg_state.topic_sub_ok) { + for (cntSub = 0; cntSub < 3; cntSub++) { ret = _iot_system_info_result_subscribe(mqtt_client); if (ret < 0) { Log_w("_iot_system_info_result_subscribe failed: %d, cnt: %d", ret, cntSub); @@ -169,39 +169,39 @@ int IOT_Get_SysTime(void* pClient, long *time) /* wait for sub ack */ ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); - if(sg_state.topic_sub_ok) { + if (sg_state.topic_sub_ok) { break; } } } // return failure if subscribe failed - if(!sg_state.topic_sub_ok){ + if (!sg_state.topic_sub_ok) { Log_e("Subscribe sys topic failed!"); return QCLOUD_ERR_FAILURE; } sg_state.result_recv_ok = false; // publish msg to get system timestamp - ret = _iot_system_info_get_publish(mqtt_client); - if (ret < 0) { - Log_e("client publish sys topic failed :%d.", ret); + ret = _iot_system_info_get_publish(mqtt_client); + if (ret < 0) { + Log_e("client publish sys topic failed :%d.", ret); return ret; - } + } do { ret = qcloud_iot_mqtt_yield((Qcloud_IoT_Client *)pClient, 100); cntRev++; - } while(!sg_state.result_recv_ok && cntRev < 20); + } while (!sg_state.result_recv_ok && cntRev < 20); - - if (sg_state.result_recv_ok) { + + if (sg_state.result_recv_ok) { *time = sg_state.time; - ret = QCLOUD_RET_SUCCESS; + ret = QCLOUD_RET_SUCCESS; } else { *time = 0; ret = QCLOUD_ERR_FAILURE; - } + } return ret; } diff --git a/sdk_src/utils/json_parser.c b/sdk_src/utils/json_parser.c index 11827e1..9adc8c5 100644 --- a/sdk_src/utils/json_parser.c +++ b/sdk_src/utils/json_parser.c @@ -60,7 +60,7 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, char JsonMark[JSTYPEMAX][2] = { { '\"', '\"' }, { '{', '}' }, { '[', ']' }, { '0', ' ' } }; int iMarkDepth = 0, iValueType = JSNONE, iNameLen = 0, iValueLen = 0; char *p_cName = 0, *p_cValue = 0, *p_cPos = str; - char lastchr = ' '; + char lastchr = ' '; if (type == JSOBJECT) { /* Get Key */ @@ -81,7 +81,7 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, while (p_cPos && *p_cPos) { if (*p_cPos == '"') { iValueType = JSSTRING; - lastchr = *p_cPos; + lastchr = *p_cPos; p_cValue = ++p_cPos; break; } else if (*p_cPos == '{') { @@ -99,12 +99,12 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, } else if (*p_cPos == 't' || *p_cPos == 'T' || *p_cPos == 'f' || *p_cPos == 'F') { iValueType = JSBOOLEAN; p_cValue = p_cPos; - break; - }else if (*p_cPos == 'n' || *p_cPos == 'N') { + break; + } else if (*p_cPos == 'n' || *p_cPos == 'N') { iValueType = JSNULL; p_cValue = p_cPos; break; - } + } p_cPos++; } while (p_cPos && *p_cPos && iValueType > JSNONE) { @@ -125,40 +125,38 @@ char *json_get_next_object(int type, char *str, char **key, int *key_len, break; } } else if (iValueType == JSNULL) { //support null/NULL - int nlen = strlen(p_cValue); - - if ((*p_cValue == 'n' || *p_cValue == 'N') && nlen >= 4 + int nlen = strlen(p_cValue); + + if ((*p_cValue == 'n' || *p_cValue == 'N') && nlen >= 4 && (!strncmp(p_cValue, "null", 4) || !strncmp(p_cValue, "NULL", 4))) { iValueLen = 4; p_cPos = p_cValue + iValueLen; break; - } - } - else if (iValueType == JSNUMBER) { + } + } else if (iValueType == JSNUMBER) { //if (*p_cPos < '0' || *p_cPos > '9') { - if ((*p_cPos < '0' || *p_cPos > '9')&&(*p_cPos != '.')) { //support float + if ((*p_cPos < '0' || *p_cPos > '9') && (*p_cPos != '.')) { //support float iValueLen = p_cPos - p_cValue; break; } - } - else if (*p_cPos == JsonMark[iValueType][1]) { + } else if (*p_cPos == JsonMark[iValueType][1]) { if (iMarkDepth == 0) { - iValueLen = p_cPos - p_cValue + (iValueType == JSSTRING ? 0 : 1); - p_cPos++; - if((iValueType == JSSTRING) && (lastchr == '\\')){ - lastchr = *p_cPos; - continue; - }else{ - break; - } + iValueLen = p_cPos - p_cValue + (iValueType == JSSTRING ? 0 : 1); + p_cPos++; + if ((iValueType == JSSTRING) && (lastchr == '\\')) { + lastchr = *p_cPos; + continue; + } else { + break; + } } else { iMarkDepth--; } } else if (*p_cPos == JsonMark[iValueType][0]) { iMarkDepth++; } - lastchr = *p_cPos; + lastchr = *p_cPos; p_cPos++; } @@ -233,7 +231,7 @@ int json_get_value_by_name_cb(char *p_cName, int iNameLen, char *p_cValue, int i #endif if ((iNameLen == p_stNameValue->nLen) && !strncmp(p_cName, p_stNameValue->pN, p_stNameValue->nLen)) { - + p_stNameValue->pV = p_cValue; p_stNameValue->vLen = iValueLen; p_stNameValue->vType = iValueType; @@ -256,9 +254,9 @@ char *json_get_value_by_name(char *p_cJsonStr, int iStrLen, char *p_cName, int * } if (p_iValueType) { *p_iValueType = stNV.vType; - if(JSNULL == stNV.vType){ - stNV.pV = NULL; - } + if (JSNULL == stNV.vType) { + stNV.pV = NULL; + } } } return stNV.pV; diff --git a/sdk_src/utils/json_token.c b/sdk_src/utils/json_token.c index 97d72cd..143a5f4 100644 --- a/sdk_src/utils/json_token.c +++ b/sdk_src/utils/json_token.c @@ -132,88 +132,94 @@ void LITE_json_keys_release(list_head_t *keylist) } -static void _strip_transfer(char *src) +static void _strip_transfer(char *src) { - char *end = src + strlen(src)+ 1; - - while(*src != '\0') - { - if(*src == '\\') - { - memmove(src, src+1, end - src); - end--; - } - src++; - } -} + char *end = src + strlen(src) + 1; + while (*src != '\0') { + if (*src == '\\') { + memmove(src, src + 1, end - src); + end--; + } + src++; + } +} char * LITE_json_string_value_strip_transfer(char *key, char *src) { - char * str = LITE_json_value_of(key, src); + char * str = LITE_json_value_of(key, src); - if(NULL != str){ - _strip_transfer(str); - } - return str; + if (NULL != str) { + _strip_transfer(str); + } + return str; } -int LITE_get_int32(int32_t *value, char *src) { - return (sscanf(src, "%" SCNi32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_int32(int32_t *value, char *src) +{ + return (sscanf(src, "%" SCNi32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_int16(int16_t *value, char *src) { - return (sscanf(src, "%" SCNi16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_int16(int16_t *value, char *src) +{ + return (sscanf(src, "%" SCNi16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_int8(int8_t *value, char *src) { - return (sscanf(src, "%" SCNi8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_int8(int8_t *value, char *src) +{ + return (sscanf(src, "%" SCNi8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_uint32(uint32_t *value, char *src) { - return (sscanf(src, "%" SCNu32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_uint32(uint32_t *value, char *src) +{ + return (sscanf(src, "%" SCNu32, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_uint16(uint16_t *value, char *src) { - return (sscanf(src, "%" SCNu16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_uint16(uint16_t *value, char *src) +{ + return (sscanf(src, "%" SCNu16, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_uint8(uint8_t *value, char *src) { - return (sscanf(src, "%" SCNu8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_uint8(uint8_t *value, char *src) +{ + return (sscanf(src, "%" SCNu8, value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_float(float *value, char *src) { - return (sscanf(src, "%f", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_float(float *value, char *src) +{ + return (sscanf(src, "%f", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_double(double *value, char *src) { - return (sscanf(src, "%lf", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; +int LITE_get_double(double *value, char *src) +{ + return (sscanf(src, "%lf", value) == 1) ? QCLOUD_RET_SUCCESS : QCLOUD_ERR_FAILURE; } -int LITE_get_boolean(bool *value, char *src) { - if (!strcmp(src, "false")) { - *value = false; - } - else { - *value = true; - } +int LITE_get_boolean(bool *value, char *src) +{ + if (!strcmp(src, "false")) { + *value = false; + } else { + *value = true; + } - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } -int LITE_get_string(int8_t *value, char *src, uint16_t max_len) { - int rc; - - if(NULL != strncpy((char *)value, src, max_len)){ - value[Min(strlen(src), max_len)] = '\0'; - rc = QCLOUD_RET_SUCCESS; - }else{ - rc = QCLOUD_ERR_FAILURE; - } - - return rc; +int LITE_get_string(int8_t *value, char *src, uint16_t max_len) +{ + int rc; + + if (NULL != strncpy((char *)value, src, max_len)) { + value[Min(strlen(src), max_len)] = '\0'; + rc = QCLOUD_RET_SUCCESS; + } else { + rc = QCLOUD_ERR_FAILURE; + } + + return rc; } diff --git a/sdk_src/utils/qcloud_iot_ca.c b/sdk_src/utils/qcloud_iot_ca.c index 834e68d..22c6972 100644 --- a/sdk_src/utils/qcloud_iot_ca.c +++ b/sdk_src/utils/qcloud_iot_ca.c @@ -18,6 +18,8 @@ extern "C" { #endif #include "qcloud_iot_ca.h" +#include "qcloud_iot_import.h" + #include @@ -49,6 +51,8 @@ static const char *iot_ca_crt = \ "-----END CERTIFICATE-----" }; +#ifdef OTA_USE_HTTPS + static const char *iot_https_ca_crt = \ { "-----BEGIN CERTIFICATE-----\r\n" @@ -101,17 +105,21 @@ static const char *iot_https_ca_crt = \ }; #endif -const char *iot_ca_get() { +#endif + +const char *iot_ca_get() +{ #ifndef AUTH_WITH_NOTLS - return iot_ca_crt; + return iot_ca_crt; #else return NULL; #endif } -const char *iot_https_ca_get() { -#ifndef AUTH_WITH_NOTLS - return iot_https_ca_crt; +const char *iot_https_ca_get() +{ +#if ((!defined(AUTH_WITH_NOTLS)) && (defined OTA_USE_HTTPS)) + return iot_https_ca_crt; #else return NULL; #endif diff --git a/sdk_src/utils/qcloud_iot_device.c b/sdk_src/utils/qcloud_iot_device.c index 2371a6d..d82e82b 100644 --- a/sdk_src/utils/qcloud_iot_device.c +++ b/sdk_src/utils/qcloud_iot_device.c @@ -25,39 +25,37 @@ extern "C" { static DeviceInfo sg_device_info; static bool sg_devinfo_initialized; -int iot_device_info_init() +int iot_device_info_init() { - if (sg_devinfo_initialized) { - Log_e("device info has been initialized."); - return 0; - } + if (sg_devinfo_initialized) { + Log_e("device info has been initialized."); + return 0; + } + + memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); + sg_devinfo_initialized = true; - memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); - sg_devinfo_initialized = true; - - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } -int iot_device_info_set(const char *product_id, const char *device_name) -{ +int iot_device_info_set(const char *product_id, const char *device_name) +{ - memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); - if ((MAX_SIZE_OF_PRODUCT_ID) < strlen(product_id)) - { - Log_e("product name(%s) length:(%lu) exceeding limitation", product_id, strlen(product_id)); - return QCLOUD_ERR_FAILURE; - } - if ((MAX_SIZE_OF_DEVICE_NAME) < strlen(device_name)) - { - Log_e("device name(%s) length:(%lu) exceeding limitation", device_name, strlen(device_name)); - return QCLOUD_ERR_FAILURE; - } + memset(&sg_device_info, 0x0, sizeof(DeviceInfo)); + if ((MAX_SIZE_OF_PRODUCT_ID) < strlen(product_id)) { + Log_e("product name(%s) length:(%lu) exceeding limitation", product_id, strlen(product_id)); + return QCLOUD_ERR_FAILURE; + } + if ((MAX_SIZE_OF_DEVICE_NAME) < strlen(device_name)) { + Log_e("device name(%s) length:(%lu) exceeding limitation", device_name, strlen(device_name)); + return QCLOUD_ERR_FAILURE; + } - strncpy(sg_device_info.product_id, product_id, MAX_SIZE_OF_PRODUCT_ID); - strncpy(sg_device_info.device_name, device_name, MAX_SIZE_OF_DEVICE_NAME); + strncpy(sg_device_info.product_id, product_id, MAX_SIZE_OF_PRODUCT_ID); + strncpy(sg_device_info.device_name, device_name, MAX_SIZE_OF_DEVICE_NAME); - /* construct device-id(@product_id+@device_name) */ - memset(sg_device_info.client_id, 0x0, MAX_SIZE_OF_CLIENT_ID); + /* construct device-id(@product_id+@device_name) */ + memset(sg_device_info.client_id, 0x0, MAX_SIZE_OF_CLIENT_ID); int ret = HAL_Snprintf(sg_device_info.client_id, MAX_SIZE_OF_CLIENT_ID, "%s%s", product_id, device_name); if ((ret < 0) || (ret >= MAX_SIZE_OF_CLIENT_ID)) { Log_e("set device info failed"); @@ -65,7 +63,7 @@ int iot_device_info_set(const char *product_id, const char *device_name) } Log_i("SDK_Ver: %s, Product_ID: %s, Device_Name: %s", QCLOUD_IOT_DEVICE_SDK_VERSION, product_id, device_name); - return QCLOUD_RET_SUCCESS; + return QCLOUD_RET_SUCCESS; } DeviceInfo* iot_device_info_get(void) diff --git a/sdk_src/utils/qcloud_iot_log.c b/sdk_src/utils/qcloud_iot_log.c index ea64fff..c176013 100644 --- a/sdk_src/utils/qcloud_iot_log.c +++ b/sdk_src/utils/qcloud_iot_log.c @@ -29,7 +29,7 @@ static char *level_str[] = { "DIS", "ERR", "WRN", "INF", "DBG" }; -static LogMessageHandler sg_log_message_handler= NULL; +static LogMessageHandler sg_log_message_handler = NULL; LOG_LEVEL g_log_print_level = eLOG_INFO; @@ -46,35 +46,37 @@ static const char *_get_filename(const char *p) #else char ch = '/'; #endif - const char *q = strrchr(p,ch); - if(q == NULL) - { + const char *q = strrchr(p, ch); + if (q == NULL) { q = p; - } - else - { + } else { q++; } return q; } -void IOT_Log_Set_Level(LOG_LEVEL logLevel) { +void IOT_Log_Set_Level(LOG_LEVEL logLevel) +{ g_log_print_level = logLevel; } -LOG_LEVEL IOT_Log_Get_Level() { +LOG_LEVEL IOT_Log_Get_Level() +{ return g_log_print_level; } -void IOT_Log_Set_MessageHandler(LogMessageHandler handler) { - sg_log_message_handler = handler; +void IOT_Log_Set_MessageHandler(LogMessageHandler handler) +{ + sg_log_message_handler = handler; } -void IOT_Log_Set_Upload_Level(LOG_LEVEL logLevel) { +void IOT_Log_Set_Upload_Level(LOG_LEVEL logLevel) +{ g_log_upload_level = logLevel; } -LOG_LEVEL IOT_Log_Get_Upload_Level() { +LOG_LEVEL IOT_Log_Get_Upload_Level() +{ return g_log_upload_level; } @@ -91,7 +93,7 @@ void IOT_Log_Fini_Uploader(void) { #ifdef LOG_UPLOAD fini_log_uploader(); - return; + return; #else return ; #endif @@ -108,16 +110,16 @@ int IOT_Log_Upload(bool force_upload) void IOT_Log_Gen(const char *file, const char *func, const int line, const int level, const char *fmt, ...) { - if (level > g_log_print_level && level > g_log_upload_level) { - return; - } + if (level > g_log_print_level && level > g_log_upload_level) { + return; + } /* format log content */ - const char *file_name = _get_filename(file); + const char *file_name = _get_filename(file); - char sg_text_buf[MAX_LOG_MSG_LEN + 1]; - char *tmp_buf = sg_text_buf; - char *o = tmp_buf; + char sg_text_buf[MAX_LOG_MSG_LEN + 1]; + char *tmp_buf = sg_text_buf; + char *o = tmp_buf; memset(tmp_buf, 0, sizeof(sg_text_buf)); o += HAL_Snprintf(o, sizeof(sg_text_buf), "%s|%s|%s|%s(%d): ", level_str[level], HAL_Timer_current(), file_name, func, line); @@ -138,9 +140,9 @@ void IOT_Log_Gen(const char *file, const char *func, const int line, const int l if (level <= g_log_print_level) { /* customer defined log print handler */ - if (sg_log_message_handler != NULL && sg_log_message_handler(tmp_buf)) { - return; - } + if (sg_log_message_handler != NULL && sg_log_message_handler(tmp_buf)) { + return; + } /* default log handler: print to console */ HAL_Printf("%s", tmp_buf); diff --git a/sdk_src/utils/string_utils.c b/sdk_src/utils/string_utils.c index e0755a2..7a73593 100644 --- a/sdk_src/utils/string_utils.c +++ b/sdk_src/utils/string_utils.c @@ -57,9 +57,9 @@ char *LITE_format_nstring(const int len, const char *fmt, ...) int rc = -1; va_start(ap, fmt); - tmp = HAL_Malloc(len+2); - memset(tmp, 0, len+2); - rc = HAL_Vsnprintf(tmp, len+1, fmt, ap); + tmp = HAL_Malloc(len + 2); + memset(tmp, 0, len + 2); + rc = HAL_Vsnprintf(tmp, len + 1, fmt, ap); va_end(ap); LITE_ASSERT(tmp); LITE_ASSERT(rc < 1024); @@ -170,3 +170,17 @@ void LITE_replace_substr(char originalString[], char key[], char swap[]) } } } + +void LITE_str_strip_char(char *src, char destCh) +{ + char *end = src + strlen(src) + 1; + + while (*src != '\0') { + if (*src == destCh) { + memmove(src, src + 1, end - src); + end--; + } + src++; + } +} + diff --git a/sdk_src/utils/utils_aes.c b/sdk_src/utils/utils_aes.c index f4d8db0..bf4d46c 100644 --- a/sdk_src/utils/utils_aes.c +++ b/sdk_src/utils/utils_aes.c @@ -112,8 +112,7 @@ static int aes_padlock_ace = -1; /* * Forward S-box */ -static const unsigned char FSb[256] = -{ +static const unsigned char FSb[256] = { 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, @@ -243,8 +242,7 @@ static const uint32_t FT3[256] = { FT }; /* * Reverse S-box */ -static const unsigned char RSb[256] = -{ +static const unsigned char RSb[256] = { 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, @@ -374,8 +372,7 @@ static const uint32_t RT3[256] = { RT }; /* * Round constants */ -static const uint32_t RCON[10] = -{ +static const uint32_t RCON[10] = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010, 0x00000020, 0x00000040, 0x00000080, 0x0000001B, 0x00000036 @@ -428,8 +425,7 @@ static void aes_gen_tables( void ) /* * compute pow and log tables over GF(2^8) */ - for( i = 0, x = 1; i < 256; i++ ) - { + for ( i = 0, x = 1; i < 256; i++ ) { pow[i] = x; log[x] = i; x = ( x ^ XTIME( x ) ) & 0xFF; @@ -438,8 +434,7 @@ static void aes_gen_tables( void ) /* * calculate the round constants */ - for( i = 0, x = 1; i < 10; i++ ) - { + for ( i = 0, x = 1; i < 10; i++ ) { RCON[i] = (uint32_t) x; x = XTIME( x ) & 0xFF; } @@ -450,14 +445,17 @@ static void aes_gen_tables( void ) FSb[0x00] = 0x63; RSb[0x63] = 0x00; - for( i = 1; i < 256; i++ ) - { + for ( i = 1; i < 256; i++ ) { x = pow[255 - log[i]]; - y = x; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; - x ^= y; y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + y = x; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; + x ^= y; + y = ( ( y << 1 ) | ( y >> 7 ) ) & 0xFF; x ^= y ^ 0x63; FSb[i] = (unsigned char) x; @@ -467,8 +465,7 @@ static void aes_gen_tables( void ) /* * generate the forward and reverse tables */ - for( i = 0; i < 256; i++ ) - { + for ( i = 0; i < 256; i++ ) { x = FSb[i]; y = XTIME( x ) & 0xFF; z = ( y ^ x ) & 0xFF; @@ -542,7 +539,7 @@ void utils_aes_init( utils_aes_context *ctx ) void utils_aes_free( utils_aes_context *ctx ) { - if( ctx == NULL ) + if ( ctx == NULL ) return; utils_platform_zeroize( ctx, sizeof( utils_aes_context ) ); @@ -553,7 +550,7 @@ void utils_aes_free( utils_aes_context *ctx ) */ #if !defined(UTILS_AES_SETKEY_ENC_ALT) int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { unsigned int i; uint32_t *RK; @@ -561,17 +558,22 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, AES_VALIDATE_RET( ctx != NULL ); AES_VALIDATE_RET( key != NULL ); - switch( keybits ) - { - case 128: ctx->nr = 10; break; - case 192: ctx->nr = 12; break; - case 256: ctx->nr = 14; break; - default : return( UTILS_ERR_AES_INVALID_KEY_LENGTH ); + switch ( keybits ) { + case 128: + ctx->nr = 10; + break; + case 192: + ctx->nr = 12; + break; + case 256: + ctx->nr = 14; + break; + default : + return ( UTILS_ERR_AES_INVALID_KEY_LENGTH ); } #if !defined(UTILS_AES_ROM_TABLES) - if( aes_init_done == 0 ) - { + if ( aes_init_done == 0 ) { aes_gen_tables(); aes_init_done = 1; } @@ -579,22 +581,19 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, ctx->rk = RK = ctx->buf; - for( i = 0; i < ( keybits >> 5 ); i++ ) - { + for ( i = 0; i < ( keybits >> 5 ); i++ ) { GET_UINT32_LE( RK[i], key, i << 2 ); } - switch( ctx->nr ) - { + switch ( ctx->nr ) { case 10: - for( i = 0; i < 10; i++, RK += 4 ) - { + for ( i = 0; i < 10; i++, RK += 4 ) { RK[4] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[3] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[3] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[3] ) & 0xFF ] << 24 ); RK[5] = RK[1] ^ RK[4]; RK[6] = RK[2] ^ RK[5]; @@ -604,13 +603,12 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, case 12: - for( i = 0; i < 8; i++, RK += 6 ) - { + for ( i = 0; i < 8; i++, RK += 6 ) { RK[6] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[5] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[5] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[5] ) & 0xFF ] << 24 ); RK[7] = RK[1] ^ RK[6]; RK[8] = RK[2] ^ RK[7]; @@ -622,23 +620,22 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, case 14: - for( i = 0; i < 7; i++, RK += 8 ) - { + for ( i = 0; i < 7; i++, RK += 8 ) { RK[8] = RK[0] ^ RCON[i] ^ - ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[7] >> 8 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 16 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[7] >> 24 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[7] ) & 0xFF ] << 24 ); RK[9] = RK[1] ^ RK[8]; RK[10] = RK[2] ^ RK[9]; RK[11] = RK[3] ^ RK[10]; RK[12] = RK[4] ^ - ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( RK[11] ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( RK[11] >> 24 ) & 0xFF ] << 24 ); RK[13] = RK[5] ^ RK[12]; RK[14] = RK[6] ^ RK[13]; @@ -647,7 +644,7 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, break; } - return( 0 ); + return ( 0 ); } #endif /* !UTILS_AES_SETKEY_ENC_ALT */ @@ -656,7 +653,7 @@ int utils_aes_setkey_enc( utils_aes_context *ctx, const unsigned char *key, */ #if !defined(UTILS_AES_SETKEY_DEC_ALT) int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, - unsigned int keybits ) + unsigned int keybits ) { int i, j, ret; utils_aes_context cty; @@ -671,7 +668,7 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, ctx->rk = RK = ctx->buf; /* Also checks keybits */ - if( ( ret = utils_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) + if ( ( ret = utils_aes_setkey_enc( &cty, key, keybits ) ) != 0 ) goto exit; ctx->nr = cty.nr; @@ -684,10 +681,8 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, *RK++ = *SK++; *RK++ = *SK++; - for( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) - { - for( j = 0; j < 4; j++, SK++ ) - { + for ( i = ctx->nr - 1, SK -= 8; i > 0; i--, SK -= 8 ) { + for ( j = 0; j < 4; j++, SK++ ) { *RK++ = AES_RT0( FSb[ ( *SK ) & 0xFF ] ) ^ AES_RT1( FSb[ ( *SK >> 8 ) & 0xFF ] ) ^ AES_RT2( FSb[ ( *SK >> 16 ) & 0xFF ] ) ^ @@ -703,7 +698,7 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, exit: utils_aes_free( &cty ); - return( ret ); + return ( ret ); } @@ -760,21 +755,24 @@ int utils_aes_setkey_dec( utils_aes_context *ctx, const unsigned char *key, */ #if !defined(UTILS_AES_ENCRYPT_ALT) int utils_internal_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { int i; uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_FROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -782,42 +780,42 @@ int utils_internal_aes_encrypt( utils_aes_context *ctx, AES_FROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) FSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) FSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) FSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) FSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); PUT_UINT32_LE( X2, output, 8 ); PUT_UINT32_LE( X3, output, 12 ); - return( 0 ); + return ( 0 ); } #endif /* !UTILS_AES_ENCRYPT_ALT */ #if !defined(UTILS_DEPRECATED_REMOVED) void utils_aes_encrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { utils_internal_aes_encrypt( ctx, input, output ); } @@ -828,21 +826,24 @@ void utils_aes_encrypt( utils_aes_context *ctx, */ #if !defined(UTILS_AES_DECRYPT_ALT) int utils_internal_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { int i; uint32_t *RK, X0, X1, X2, X3, Y0, Y1, Y2, Y3; RK = ctx->rk; - GET_UINT32_LE( X0, input, 0 ); X0 ^= *RK++; - GET_UINT32_LE( X1, input, 4 ); X1 ^= *RK++; - GET_UINT32_LE( X2, input, 8 ); X2 ^= *RK++; - GET_UINT32_LE( X3, input, 12 ); X3 ^= *RK++; + GET_UINT32_LE( X0, input, 0 ); + X0 ^= *RK++; + GET_UINT32_LE( X1, input, 4 ); + X1 ^= *RK++; + GET_UINT32_LE( X2, input, 8 ); + X2 ^= *RK++; + GET_UINT32_LE( X3, input, 12 ); + X3 ^= *RK++; - for( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) - { + for ( i = ( ctx->nr >> 1 ) - 1; i > 0; i-- ) { AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); AES_RROUND( X0, X1, X2, X3, Y0, Y1, Y2, Y3 ); } @@ -850,42 +851,42 @@ int utils_internal_aes_decrypt( utils_aes_context *ctx, AES_RROUND( Y0, Y1, Y2, Y3, X0, X1, X2, X3 ); X0 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y0 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y3 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 24 ) & 0xFF ] << 24 ); X1 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y1 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y0 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y2 >> 24 ) & 0xFF ] << 24 ); X2 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y2 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y1 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y3 >> 24 ) & 0xFF ] << 24 ); X3 = *RK++ ^ \ - ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ - ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ - ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ - ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); + ( (uint32_t) RSb[ ( Y3 ) & 0xFF ] ) ^ + ( (uint32_t) RSb[ ( Y2 >> 8 ) & 0xFF ] << 8 ) ^ + ( (uint32_t) RSb[ ( Y1 >> 16 ) & 0xFF ] << 16 ) ^ + ( (uint32_t) RSb[ ( Y0 >> 24 ) & 0xFF ] << 24 ); PUT_UINT32_LE( X0, output, 0 ); PUT_UINT32_LE( X1, output, 4 ); PUT_UINT32_LE( X2, output, 8 ); PUT_UINT32_LE( X3, output, 12 ); - return( 0 ); + return ( 0 ); } #endif /* !UTILS_AES_DECRYPT_ALT */ #if !defined(UTILS_DEPRECATED_REMOVED) void utils_aes_decrypt( utils_aes_context *ctx, - const unsigned char input[16], - unsigned char output[16] ) + const unsigned char input[16], + unsigned char output[16] ) { utils_internal_aes_decrypt( ctx, input, output ); } @@ -895,9 +896,9 @@ void utils_aes_decrypt( utils_aes_context *ctx, * AES-ECB block encryption/decryption */ int utils_aes_crypt_ecb( utils_aes_context *ctx, - int mode, - const unsigned char input[16], - unsigned char output[16] ) + int mode, + const unsigned char input[16], + unsigned char output[16] ) { AES_VALIDATE_RET( ctx != NULL ); AES_VALIDATE_RET( input != NULL ); @@ -905,10 +906,10 @@ int utils_aes_crypt_ecb( utils_aes_context *ctx, AES_VALIDATE_RET( mode == UTILS_AES_ENCRYPT || mode == UTILS_AES_DECRYPT ); - if( mode == UTILS_AES_ENCRYPT ) - return( utils_internal_aes_encrypt( ctx, input, output ) ); + if ( mode == UTILS_AES_ENCRYPT ) + return ( utils_internal_aes_encrypt( ctx, input, output ) ); else - return( utils_internal_aes_decrypt( ctx, input, output ) ); + return ( utils_internal_aes_decrypt( ctx, input, output ) ); } #if defined(UTILS_CIPHER_MODE_CBC) @@ -916,11 +917,11 @@ int utils_aes_crypt_ecb( utils_aes_context *ctx, * AES-CBC buffer encryption/decryption */ int utils_aes_crypt_cbc( utils_aes_context *ctx, - int mode, - size_t length, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) { int i; unsigned char temp[16]; @@ -932,18 +933,16 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, AES_VALIDATE_RET( input != NULL ); AES_VALIDATE_RET( output != NULL ); - if( length % 16 ) - return( UTILS_ERR_AES_INVALID_INPUT_LENGTH ); + if ( length % 16 ) + return ( UTILS_ERR_AES_INVALID_INPUT_LENGTH ); - if( mode == UTILS_AES_DECRYPT ) - { - while( length > 0 ) - { + if ( mode == UTILS_AES_DECRYPT ) { + while ( length > 0 ) { memcpy( temp, input, 16 ); utils_aes_crypt_ecb( ctx, mode, input, output ); - for( i = 0; i < 16; i++ ) + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( output[i] ^ iv[i] ); memcpy( iv, temp, 16 ); @@ -952,12 +951,9 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, output += 16; length -= 16; } - } - else - { - while( length > 0 ) - { - for( i = 0; i < 16; i++ ) + } else { + while ( length > 0 ) { + for ( i = 0; i < 16; i++ ) output[i] = (unsigned char)( input[i] ^ iv[i] ); utils_aes_crypt_ecb( ctx, mode, output, output ); @@ -969,59 +965,59 @@ int utils_aes_crypt_cbc( utils_aes_context *ctx, } } - return( 0 ); + return ( 0 ); } int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, uint8_t *pOutData, uint32_t outBuffLen, - uint8_t mode, uint8_t *pKey, uint16_t keybits, uint8_t *iv) + uint8_t mode, uint8_t *pKey, uint16_t keybits, uint8_t *iv) { - int ret = QCLOUD_RET_SUCCESS; - int padlen; - utils_aes_context ctx; - - utils_aes_init( &ctx ); - - - if(UTILS_AES_ENCRYPT == mode){ - ret = utils_aes_setkey_enc( &ctx, pKey, keybits); - if( ret != 0 ){ - Log_e("Set encry key err,ret:%d", ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - - /*zero padding*/ - if(outBuffLen < (datalen + UTILS_AES_BLOCK_LEN)){ - Log_e("Output buffer should not less than datalen+UTILS_AES_BLOCK_LEN for padding"); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - padlen = UTILS_AES_BLOCK_LEN - datalen%UTILS_AES_BLOCK_LEN; - memcpy(pOutData, pInData, datalen); - memset(pOutData + datalen, '\0', padlen); /*zero-padding*/ - datalen += padlen; - }else{ - ret = utils_aes_setkey_dec( &ctx, pKey, keybits); - if( ret != 0 ){ - Log_e("Set dencry key err,ret:%d", ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - } - } - - ret = utils_aes_crypt_cbc( &ctx, mode, datalen, iv, pInData, pOutData); - if( ret != 0 ){ - Log_e("encryt err,ret:%d",ret); - ret = QCLOUD_ERR_FAILURE; - goto exit; - }else{ - ret = QCLOUD_RET_SUCCESS; - } - -exit: - - return ret; -} + int ret = QCLOUD_RET_SUCCESS; + int padlen; + utils_aes_context ctx; + + utils_aes_init( &ctx ); + + + if (UTILS_AES_ENCRYPT == mode) { + ret = utils_aes_setkey_enc( &ctx, pKey, keybits); + if ( ret != 0 ) { + Log_e("Set encry key err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + + /*zero padding*/ + if (outBuffLen < (datalen + UTILS_AES_BLOCK_LEN)) { + Log_e("Output buffer should not less than datalen+UTILS_AES_BLOCK_LEN for padding"); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + padlen = UTILS_AES_BLOCK_LEN - datalen % UTILS_AES_BLOCK_LEN; + memcpy(pOutData, pInData, datalen); + memset(pOutData + datalen, '\0', padlen); /*zero-padding*/ + datalen += padlen; + } else { + ret = utils_aes_setkey_dec( &ctx, pKey, keybits); + if ( ret != 0 ) { + Log_e("Set dencry key err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } + } + + ret = utils_aes_crypt_cbc( &ctx, mode, datalen, iv, pInData, pOutData); + if ( ret != 0 ) { + Log_e("encryt err,ret:%d", ret); + ret = QCLOUD_ERR_FAILURE; + goto exit; + } else { + ret = QCLOUD_RET_SUCCESS; + } + +exit: + + return ret; +} #endif /* UTILS_CIPHER_MODE_CBC */ #endif /* !UTILS_AES_ALT */ @@ -1033,45 +1029,65 @@ int utils_aes_cbc(uint8_t *pInData, uint32_t datalen, uint8_t *pOutData, uint32_ * * http://csrc.nist.gov/archive/aes/rijndael/rijndael-vals.zip */ -static const unsigned char aes_test_ecb_dec[3][16] = -{ - { 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, - 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 }, - { 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, - 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 }, - { 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, - 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE } +static const unsigned char aes_test_ecb_dec[3][16] = { + { + 0x44, 0x41, 0x6A, 0xC2, 0xD1, 0xF5, 0x3C, 0x58, + 0x33, 0x03, 0x91, 0x7E, 0x6B, 0xE9, 0xEB, 0xE0 + }, + { + 0x48, 0xE3, 0x1E, 0x9E, 0x25, 0x67, 0x18, 0xF2, + 0x92, 0x29, 0x31, 0x9C, 0x19, 0xF1, 0x5B, 0xA4 + }, + { + 0x05, 0x8C, 0xCF, 0xFD, 0xBB, 0xCB, 0x38, 0x2D, + 0x1F, 0x6F, 0x56, 0x58, 0x5D, 0x8A, 0x4A, 0xDE + } }; -static const unsigned char aes_test_ecb_enc[3][16] = -{ - { 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, - 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F }, - { 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, - 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 }, - { 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, - 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 } +static const unsigned char aes_test_ecb_enc[3][16] = { + { + 0xC3, 0x4C, 0x05, 0x2C, 0xC0, 0xDA, 0x8D, 0x73, + 0x45, 0x1A, 0xFE, 0x5F, 0x03, 0xBE, 0x29, 0x7F + }, + { + 0xF3, 0xF6, 0x75, 0x2A, 0xE8, 0xD7, 0x83, 0x11, + 0x38, 0xF0, 0x41, 0x56, 0x06, 0x31, 0xB1, 0x14 + }, + { + 0x8B, 0x79, 0xEE, 0xCC, 0x93, 0xA0, 0xEE, 0x5D, + 0xFF, 0x30, 0xB4, 0xEA, 0x21, 0x63, 0x6D, 0xA4 + } }; #if defined(UTILS_CIPHER_MODE_CBC) -static const unsigned char aes_test_cbc_dec[3][16] = -{ - { 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, - 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 }, - { 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, - 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B }, - { 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, - 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 } +static const unsigned char aes_test_cbc_dec[3][16] = { + { + 0xFA, 0xCA, 0x37, 0xE0, 0xB0, 0xC8, 0x53, 0x73, + 0xDF, 0x70, 0x6E, 0x73, 0xF7, 0xC9, 0xAF, 0x86 + }, + { + 0x5D, 0xF6, 0x78, 0xDD, 0x17, 0xBA, 0x4E, 0x75, + 0xB6, 0x17, 0x68, 0xC6, 0xAD, 0xEF, 0x7C, 0x7B + }, + { + 0x48, 0x04, 0xE1, 0x81, 0x8F, 0xE6, 0x29, 0x75, + 0x19, 0xA3, 0xE8, 0x8C, 0x57, 0x31, 0x04, 0x13 + } }; -static const unsigned char aes_test_cbc_enc[3][16] = -{ - { 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, - 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D }, - { 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, - 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 }, - { 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, - 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 } +static const unsigned char aes_test_cbc_enc[3][16] = { + { + 0x8A, 0x05, 0xFC, 0x5E, 0x09, 0x5A, 0xF4, 0x84, + 0x8A, 0x08, 0xD3, 0x28, 0xD3, 0x68, 0x8E, 0x3D + }, + { + 0x7B, 0xD9, 0x66, 0xD5, 0x3A, 0xD8, 0xC1, 0xBB, + 0x85, 0xD2, 0xAD, 0xFA, 0xE8, 0x7B, 0xB1, 0x04 + }, + { + 0xFE, 0x3C, 0x53, 0x65, 0x3E, 0x2F, 0x45, 0xB5, + 0x6F, 0xCD, 0x88, 0xB2, 0xCC, 0x89, 0x8F, 0xF0 + } }; #endif /* UTILS_CIPHER_MODE_CBC */ @@ -1114,25 +1130,21 @@ int utils_aes_self_test( int verbose ) /* * ECB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-ECB-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memset( buf, 0, 16 ); - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { ret = utils_aes_setkey_dec( &ctx, key, keybits ); aes_tests = aes_test_ecb_dec[u]; - } - else - { + } else { ret = utils_aes_setkey_enc( &ctx, key, keybits ); aes_tests = aes_test_ecb_enc[u]; } @@ -1142,61 +1154,52 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - for( j = 0; j < 10000; j++ ) - { + for ( j = 0; j < 10000; j++ ) { ret = utils_aes_crypt_ecb( &ctx, mode, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; } - if( memcmp( buf, aes_tests, 16 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 16 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #if defined(UTILS_CIPHER_MODE_CBC) /* * CBC mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-CBC-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); - memset( iv , 0, 16 ); + memset( iv, 0, 16 ); memset( prv, 0, 16 ); memset( buf, 0, 16 ); - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { ret = utils_aes_setkey_dec( &ctx, key, keybits ); aes_tests = aes_test_cbc_dec[u]; - } - else - { + } else { ret = utils_aes_setkey_enc( &ctx, key, keybits ); aes_tests = aes_test_cbc_enc[u]; } @@ -1206,20 +1209,15 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - for( j = 0; j < 10000; j++ ) - { - if( mode == UTILS_AES_ENCRYPT ) - { + for ( j = 0; j < 10000; j++ ) { + if ( mode == UTILS_AES_ENCRYPT ) { unsigned char tmp[16]; memcpy( tmp, prv, 16 ); @@ -1228,22 +1226,21 @@ int utils_aes_self_test( int verbose ) } ret = utils_aes_crypt_cbc( &ctx, mode, 16, iv, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; } - if( memcmp( buf, aes_tests, 16 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 16 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_CBC */ @@ -1251,15 +1248,14 @@ int utils_aes_self_test( int verbose ) /* * CFB128 mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-CFB128-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, aes_test_cfb128_iv, 16 ); memcpy( key, aes_test_cfb128_key[u], keybits / 8 ); @@ -1271,42 +1267,35 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { memcpy( buf, aes_test_cfb128_ct[u], 64 ); aes_tests = aes_test_cfb128_pt; - } - else - { + } else { memcpy( buf, aes_test_cfb128_pt, 64 ); aes_tests = aes_test_cfb128_ct[u]; } ret = utils_aes_crypt_cfb128( &ctx, mode, 64, &offset, iv, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; - if( memcmp( buf, aes_tests, 64 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 64 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_CFB */ @@ -1314,15 +1303,14 @@ int utils_aes_self_test( int verbose ) /* * OFB mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; keybits = 128 + u * 64; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-OFB-%3d (%s): ", keybits, - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( iv, aes_test_ofb_iv, 16 ); memcpy( key, aes_test_ofb_key[u], keybits / 8 ); @@ -1334,42 +1322,35 @@ int utils_aes_self_test( int verbose ) * there is an alternative underlying implementation i.e. when * UTILS_AES_ALT is defined. */ - if( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) - { + if ( ret == UTILS_ERR_PLATFORM_FEATURE_UNSUPPORTED && keybits == 192 ) { utils_printf( "skipped\n" ); continue; - } - else if( ret != 0 ) - { + } else if ( ret != 0 ) { goto exit; } - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { memcpy( buf, aes_test_ofb_ct[u], 64 ); aes_tests = aes_test_ofb_pt; - } - else - { + } else { memcpy( buf, aes_test_ofb_pt, 64 ); aes_tests = aes_test_ofb_ct[u]; } ret = utils_aes_crypt_ofb( &ctx, 64, &offset, iv, buf, buf ); - if( ret != 0 ) + if ( ret != 0 ) goto exit; - if( memcmp( buf, aes_tests, 64 ) != 0 ) - { + if ( memcmp( buf, aes_tests, 64 ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_OFB */ @@ -1377,184 +1358,173 @@ int utils_aes_self_test( int verbose ) /* * CTR mode */ - for( i = 0; i < 6; i++ ) - { + for ( i = 0; i < 6; i++ ) { u = i >> 1; mode = i & 1; - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( " AES-CTR-128 (%s): ", - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); memcpy( nonce_counter, aes_test_ctr_nonce_counter[u], 16 ); memcpy( key, aes_test_ctr_key[u], 16 ); offset = 0; - if( ( ret = utils_aes_setkey_enc( &ctx, key, 128 ) ) != 0 ) + if ( ( ret = utils_aes_setkey_enc( &ctx, key, 128 ) ) != 0 ) goto exit; len = aes_test_ctr_len[u]; - if( mode == UTILS_AES_DECRYPT ) - { + if ( mode == UTILS_AES_DECRYPT ) { memcpy( buf, aes_test_ctr_ct[u], len ); aes_tests = aes_test_ctr_pt[u]; - } - else - { + } else { memcpy( buf, aes_test_ctr_pt[u], len ); aes_tests = aes_test_ctr_ct[u]; } ret = utils_aes_crypt_ctr( &ctx, len, &offset, nonce_counter, - stream_block, buf, buf ); - if( ret != 0 ) + stream_block, buf, buf ); + if ( ret != 0 ) goto exit; - if( memcmp( buf, aes_tests, len ) != 0 ) - { + if ( memcmp( buf, aes_tests, len ) != 0 ) { ret = 1; goto exit; } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "passed\n" ); } - if( verbose != 0 ) + if ( verbose != 0 ) utils_printf( "\n" ); #endif /* UTILS_CIPHER_MODE_CTR */ #if defined(UTILS_CIPHER_MODE_XTS) { - static const int num_tests = - sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); - utils_aes_xts_context ctx_xts; - - /* - * XTS mode - */ - utils_aes_xts_init( &ctx_xts ); - - for( i = 0; i < num_tests << 1; i++ ) - { - const unsigned char *data_unit; - u = i >> 1; - mode = i & 1; - - if( verbose != 0 ) - utils_printf( " AES-XTS-128 (%s): ", - ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + static const int num_tests = + sizeof(aes_test_xts_key) / sizeof(*aes_test_xts_key); + utils_aes_xts_context ctx_xts; - memset( key, 0, sizeof( key ) ); - memcpy( key, aes_test_xts_key[u], 32 ); - data_unit = aes_test_xts_data_unit[u]; + /* + * XTS mode + */ + utils_aes_xts_init( &ctx_xts ); + + for ( i = 0; i < num_tests << 1; i++ ) { + const unsigned char *data_unit; + u = i >> 1; + mode = i & 1; + + if ( verbose != 0 ) + utils_printf( " AES-XTS-128 (%s): ", + ( mode == UTILS_AES_DECRYPT ) ? "dec" : "enc" ); + + memset( key, 0, sizeof( key ) ); + memcpy( key, aes_test_xts_key[u], 32 ); + data_unit = aes_test_xts_data_unit[u]; + + len = sizeof( *aes_test_xts_ct32 ); + + if ( mode == UTILS_AES_DECRYPT ) { + ret = utils_aes_xts_setkey_dec( &ctx_xts, key, 256 ); + if ( ret != 0) + goto exit; + memcpy( buf, aes_test_xts_ct32[u], len ); + aes_tests = aes_test_xts_pt32[u]; + } else { + ret = utils_aes_xts_setkey_enc( &ctx_xts, key, 256 ); + if ( ret != 0) + goto exit; + memcpy( buf, aes_test_xts_pt32[u], len ); + aes_tests = aes_test_xts_ct32[u]; + } - len = sizeof( *aes_test_xts_ct32 ); - if( mode == UTILS_AES_DECRYPT ) - { - ret = utils_aes_xts_setkey_dec( &ctx_xts, key, 256 ); - if( ret != 0) - goto exit; - memcpy( buf, aes_test_xts_ct32[u], len ); - aes_tests = aes_test_xts_pt32[u]; - } - else - { - ret = utils_aes_xts_setkey_enc( &ctx_xts, key, 256 ); - if( ret != 0) + ret = utils_aes_crypt_xts( &ctx_xts, mode, len, data_unit, + buf, buf ); + if ( ret != 0 ) goto exit; - memcpy( buf, aes_test_xts_pt32[u], len ); - aes_tests = aes_test_xts_ct32[u]; - } - - ret = utils_aes_crypt_xts( &ctx_xts, mode, len, data_unit, - buf, buf ); - if( ret != 0 ) - goto exit; + if ( memcmp( buf, aes_tests, len ) != 0 ) { + ret = 1; + goto exit; + } - if( memcmp( buf, aes_tests, len ) != 0 ) - { - ret = 1; - goto exit; + if ( verbose != 0 ) + utils_printf( "passed\n" ); } - if( verbose != 0 ) - utils_printf( "passed\n" ); - } - - if( verbose != 0 ) - utils_printf( "\n" ); + if ( verbose != 0 ) + utils_printf( "\n" ); - utils_aes_xts_free( &ctx_xts ); + utils_aes_xts_free( &ctx_xts ); } #endif /* UTILS_CIPHER_MODE_XTS */ ret = 0; exit: - if( ret != 0 && verbose != 0 ) + if ( ret != 0 && verbose != 0 ) utils_printf( "failed\n" ); utils_aes_free( &ctx ); - return( ret ); + return ( ret ); } - + /*aes128-cbc*/ int aes_sample(int verbose) { - int ret = 0,i; - unsigned int keybits; - unsigned char key[UTILS_AES_BLOCK_LEN] = "1234567890abcdef"; - char dataIn[1024] = {0}; - unsigned char iv[16]; - int sLen; - int datalen; - - utils_printf("\nAES-CBC-128 enc "); - keybits = AES_KEY_BITS_128; - memset( iv , '0', 16); - - sLen = strlen("{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}"); - strncpy(dataIn,"{\"code\":0,\"message\":\"success\",\"encryptionType\":1,\"psk\":\"VI04Eh4N8VgM29U/dnu9cQ==\"}",sLen); - - utils_printf("\nthe data to encrypt(%d):\n",sLen); - for (i = 0; i #include #include "utils_base64.h" -static const unsigned char base64_enc_map[64] = -{ +static const unsigned char base64_enc_map[64] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', @@ -33,8 +32,7 @@ static const unsigned char base64_enc_map[64] = '8', '9', '+', '/' }; -static const unsigned char base64_dec_map[128] = -{ +static const unsigned char base64_dec_map[128] = { 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, @@ -49,155 +47,144 @@ static const unsigned char base64_dec_map[128] = 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 127, 127, 127, 127, 127 }; - + #define BASE64_SIZE_T_MAX ( (size_t) -1 ) /* SIZE_T_MAX is not standard */ - + int qcloud_iot_utils_base64encode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; unsigned char *p; - - if( slen == 0 ) - { + + if ( slen == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } - + n = slen / 3 + ( slen % 3 != 0 ); - - if( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) - { + + if ( n > ( BASE64_SIZE_T_MAX - 1 ) / 4 ) { *olen = BASE64_SIZE_T_MAX; - return( QCLOUD_ERR_FAILURE ); + return ( QCLOUD_ERR_FAILURE ); } - + n *= 4; - - if( ( dlen < n + 1 ) || ( NULL == dst ) ) - { + + if ( ( dlen < n + 1 ) || ( NULL == dst ) ) { *olen = n + 1; - return( QCLOUD_ERR_FAILURE ); + return ( QCLOUD_ERR_FAILURE ); } - + n = ( slen / 3 ) * 3; - + int C1, C2, C3; - for( i = 0, p = dst; i < n; i += 3 ) - { + for ( i = 0, p = dst; i < n; i += 3 ) { C1 = *src++; C2 = *src++; C3 = *src++; - + *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; *p++ = base64_enc_map[(((C2 & 15) << 2) + (C3 >> 6)) & 0x3F]; *p++ = base64_enc_map[C3 & 0x3F]; } - - if( i < slen ) - { + + if ( i < slen ) { C1 = *src++; C2 = ( ( i + 1 ) < slen ) ? *src++ : 0; - + *p++ = base64_enc_map[(C1 >> 2) & 0x3F]; *p++ = base64_enc_map[(((C1 & 3) << 4) + (C2 >> 4)) & 0x3F]; - - if( ( i + 1 ) < slen ) + + if ( ( i + 1 ) < slen ) *p++ = base64_enc_map[((C2 & 15) << 2) & 0x3F]; else *p++ = '='; - + *p++ = '='; } - + *olen = p - dst; *p = 0; - - return( 0 ); + + return ( 0 ); } int qcloud_iot_utils_base64decode( unsigned char *dst, size_t dlen, size_t *olen, - const unsigned char *src, size_t slen ) + const unsigned char *src, size_t slen ) { size_t i, n; uint32_t j, x; unsigned char *p; - + /* First pass: check for validity and get output length */ - for( i = n = j = 0; i < slen; i++ ) - { + for ( i = n = j = 0; i < slen; i++ ) { /* Skip spaces before checking for EOL */ x = 0; - while( i < slen && src[i] == ' ' ) - { + while ( i < slen && src[i] == ' ' ) { ++i; ++x; } - + /* Spaces at end of buffer are OK */ - if( i == slen ) + if ( i == slen ) break; - - if( ( slen - i ) >= 2 && - src[i] == '\r' && src[i + 1] == '\n' ) + + if ( ( slen - i ) >= 2 && + src[i] == '\r' && src[i + 1] == '\n' ) continue; - - if( src[i] == '\n' ) + + if ( src[i] == '\n' ) continue; - + /* Space inside a line is an error */ - if( x != 0 ) - return( QCLOUD_ERR_FAILURE ); - - if( src[i] == '=' && ++j > 2 ) - return( QCLOUD_ERR_FAILURE ); - - if( src[i] > 127 || base64_dec_map[src[i]] == 127 ) - return( QCLOUD_ERR_FAILURE ); - - if( base64_dec_map[src[i]] < 64 && j != 0 ) - return( QCLOUD_ERR_FAILURE ); - + if ( x != 0 ) + return ( QCLOUD_ERR_FAILURE ); + + if ( src[i] == '=' && ++j > 2 ) + return ( QCLOUD_ERR_FAILURE ); + + if ( src[i] > 127 || base64_dec_map[src[i]] == 127 ) + return ( QCLOUD_ERR_FAILURE ); + + if ( base64_dec_map[src[i]] < 64 && j != 0 ) + return ( QCLOUD_ERR_FAILURE ); + n++; } - - if( n == 0 ) - { + + if ( n == 0 ) { *olen = 0; - return( 0 ); + return ( 0 ); } - + n = ( ( n * 6 ) + 7 ) >> 3; n -= j; - - if( dst == NULL || dlen < n ) - { + + if ( dst == NULL || dlen < n ) { *olen = n; - return( QCLOUD_ERR_FAILURE ); + return ( QCLOUD_ERR_FAILURE ); } - - for( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) - { - if( *src == '\r' || *src == '\n' || *src == ' ' ) + + for ( j = 3, n = x = 0, p = dst; i > 0; i--, src++ ) { + if ( *src == '\r' || *src == '\n' || *src == ' ' ) continue; - + j -= ( base64_dec_map[*src] == 64 ); x = ( x << 6 ) | ( base64_dec_map[*src] & 0x3F ); - - if( ++n == 4 ) - { + + if ( ++n == 4 ) { n = 0; - if( j > 0 ) *p++ = (unsigned char)( x >> 16 ); - if( j > 1 ) *p++ = (unsigned char)( x >> 8 ); - if( j > 2 ) *p++ = (unsigned char)( x ); + if ( j > 0 ) *p++ = (unsigned char)( x >> 16 ); + if ( j > 1 ) *p++ = (unsigned char)( x >> 8 ); + if ( j > 2 ) *p++ = (unsigned char)( x ); } } - + *olen = p - dst; - - return( 0 ); + + return ( 0 ); } - + #ifdef __cplusplus } #endif diff --git a/sdk_src/utils/utils_getopt.c b/sdk_src/utils/utils_getopt.c index 723f6f4..a00ad80 100644 --- a/sdk_src/utils/utils_getopt.c +++ b/sdk_src/utils/utils_getopt.c @@ -22,12 +22,12 @@ #include "qcloud_iot_import.h" #include "utils_getopt.h" -static int utils_opterr = 1; /* if error message should be printed */ -static int utils_optind = 1; /* index into parent argv vector */ -static int utils_optopt; /* character checked for validity */ -static int utils_optreset = 1; /* reset getopt */ +static int utils_opterr = 1; /* if error message should be printed */ +static int utils_optind = 1; /* index into parent argv vector */ +static int utils_optopt; /* character checked for validity */ +static int utils_optreset = 1; /* reset getopt */ -char* utils_optarg; /* argument associated with option */ +char* utils_optarg; /* argument associated with option */ int utils_getopt(int nargc, char* const* nargv, const char* options) { @@ -36,67 +36,63 @@ int utils_getopt(int nargc, char* const* nargv, const char* options) #define BADARG (int)':' #define EMSG "" - static char* place = EMSG; /* option letter processing */ - const char* oli; /* option letter list index */ - - if (utils_optreset || !*place) /* update scanning pointer */ - { - utils_optreset = 0; - - if (utils_optind >= nargc || *(place = nargv[utils_optind]) != '-') - { - utils_optind = 1; - utils_optreset = 1; - place = EMSG; - return (-1); - } - - place++; - } - - /* option letter okay? */ - if ((utils_optopt = (int)*place++) == (int)':' || - !(oli = strchr(options, utils_optopt))) { - /* - * if the user didn't specify '-' as an option, - * assume it means -1. - */ - if (utils_optopt == (int)'-') - return (-1); - - if (!*place) - ++utils_optind; - - if (utils_opterr && *options != ':') - HAL_Printf("illegal option - %c\n", utils_optopt); - - return (BADCH); - } - - if (*++oli != ':') { /* don't need argument */ - utils_optarg = NULL; - if (!*place) - ++utils_optind; - } - else - { /* need an argument */ - if (*place) /* no white space */ - utils_optarg = place; - else if (nargc <= ++utils_optind) { /* no arg */ - place = EMSG; - if (*options == ':') - return (BADARG); - if (utils_opterr) - HAL_Printf("option requires an argument - %c\n", utils_optopt); - return (BADCH); - } - else /* white space */ - utils_optarg = nargv[utils_optind]; - - place = EMSG; - ++utils_optind; - } - - /* dump back option letter */ - return (utils_optopt); + static char* place = EMSG; /* option letter processing */ + const char* oli; /* option letter list index */ + + if (utils_optreset || !*place) { /* update scanning pointer */ + utils_optreset = 0; + + if (utils_optind >= nargc || *(place = nargv[utils_optind]) != '-') { + utils_optind = 1; + utils_optreset = 1; + place = EMSG; + return (-1); + } + + place++; + } + + /* option letter okay? */ + if ((utils_optopt = (int) * place++) == (int)':' || + !(oli = strchr(options, utils_optopt))) { + /* + * if the user didn't specify '-' as an option, + * assume it means -1. + */ + if (utils_optopt == (int)'-') + return (-1); + + if (!*place) + ++utils_optind; + + if (utils_opterr && *options != ':') + HAL_Printf("illegal option - %c\n", utils_optopt); + + return (BADCH); + } + + if (*++oli != ':') { /* don't need argument */ + utils_optarg = NULL; + if (!*place) + ++utils_optind; + } else { + /* need an argument */ + if (*place) /* no white space */ + utils_optarg = place; + else if (nargc <= ++utils_optind) { /* no arg */ + place = EMSG; + if (*options == ':') + return (BADARG); + if (utils_opterr) + HAL_Printf("option requires an argument - %c\n", utils_optopt); + return (BADCH); + } else /* white space */ + utils_optarg = nargv[utils_optind]; + + place = EMSG; + ++utils_optind; + } + + /* dump back option letter */ + return (utils_optopt); } diff --git a/sdk_src/utils/utils_hmac.c b/sdk_src/utils/utils_hmac.c index 9ef75f9..db14624 100644 --- a/sdk_src/utils/utils_hmac.c +++ b/sdk_src/utils/utils_hmac.c @@ -26,13 +26,13 @@ void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, int key_len) { - if((NULL == msg) || (NULL == digest) || (NULL == key)) { + if ((NULL == msg) || (NULL == digest) || (NULL == key)) { Log_e("parameter is Null,failed!"); return; } - if(key_len > KEY_IOPAD_SIZE) { - Log_e("key_len > size(%d) of array",KEY_IOPAD_SIZE); + if (key_len > KEY_IOPAD_SIZE) { + Log_e("key_len > size(%d) of array", KEY_IOPAD_SIZE); return; } @@ -76,13 +76,13 @@ void utils_hmac_md5(const char *msg, int msg_len, char *digest, const char *key, void utils_hmac_sha1(const char *msg, int msg_len, char *digest, const char *key, int key_len) { - if((NULL == msg) || (NULL == digest) || (NULL == key)) { + if ((NULL == msg) || (NULL == digest) || (NULL == key)) { Log_e("parameter is Null,failed!"); return; } - if(key_len > KEY_IOPAD_SIZE) { - Log_e("key_len > size(%d) of array",KEY_IOPAD_SIZE); + if (key_len > KEY_IOPAD_SIZE) { + Log_e("key_len > size(%d) of array", KEY_IOPAD_SIZE); return; } diff --git a/sdk_src/utils/utils_list.c b/sdk_src/utils/utils_list.c index a84f7b0..b873ab5 100644 --- a/sdk_src/utils/utils_list.c +++ b/sdk_src/utils/utils_list.c @@ -274,7 +274,6 @@ ListNode *list_iterator_next(ListIterator *self) void list_iterator_destroy(ListIterator *self) { HAL_Free(self); - self = NULL; } /* diff --git a/sdk_src/utils/utils_ringbuff.c b/sdk_src/utils/utils_ringbuff.c index 5af0574..ad52181 100644 --- a/sdk_src/utils/utils_ringbuff.c +++ b/sdk_src/utils/utils_ringbuff.c @@ -19,13 +19,13 @@ int ring_buff_init(sRingbuff* ring_buff, char* buff, uint32_t size ) { - ring_buff->buffer = buff; + ring_buff->buffer = buff; ring_buff->size = size; ring_buff->readpoint = 0; ring_buff->writepoint = 0; - memset(ring_buff->buffer, 0, ring_buff->size); - ring_buff->full = false; - + memset(ring_buff->buffer, 0, ring_buff->size); + ring_buff->full = false; + return RINGBUFF_OK; } @@ -33,74 +33,59 @@ int ring_buff_flush(sRingbuff* ring_buff) { ring_buff->readpoint = 0; ring_buff->writepoint = 0; - memset(ring_buff->buffer, 0, ring_buff->size); - ring_buff->full = false; - + memset(ring_buff->buffer, 0, ring_buff->size); + ring_buff->full = false; + return RINGBUFF_OK; } int ring_buff_push_data(sRingbuff* ring_buff, uint8_t *pData, int len) { - int i; - - if(len > ring_buff->size) - { - return RINGBUFF_TOO_SHORT; - } - - for(i = 0; i < len; i++) - { - if(((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) - { - ring_buff->full = true; - return RINGBUFF_FULL; - } - else - { - if(ring_buff->writepoint < (ring_buff->size - 1)) - { - ring_buff->writepoint ++; - } - else - { - ring_buff->writepoint = 0; - } - ring_buff->buffer[ring_buff->writepoint] = pData[i]; - } - } - - return RINGBUFF_OK; + int i; + + if (len > ring_buff->size) { + return RINGBUFF_TOO_SHORT; + } + + for (i = 0; i < len; i++) { + if (((ring_buff->writepoint + 1) % ring_buff->size) == ring_buff->readpoint) { + ring_buff->full = true; + return RINGBUFF_FULL; + } else { + if (ring_buff->writepoint < (ring_buff->size - 1)) { + ring_buff->writepoint ++; + } else { + ring_buff->writepoint = 0; + } + ring_buff->buffer[ring_buff->writepoint] = pData[i]; + } + } + + return RINGBUFF_OK; } int ring_buff_pop_data(sRingbuff* ring_buff, uint8_t *pData, int len) { - int i; - - if(len > ring_buff->size) - { - return RINGBUFF_TOO_SHORT; - } - - for(i = 0; i < len; i++) - { - if(ring_buff->writepoint == ring_buff->readpoint) - { - break; - } - else - { - if(ring_buff->readpoint == (ring_buff->size - 1)) - { - ring_buff->readpoint = 0; - } - - else - { - ring_buff->readpoint++; - } - pData[i] = ring_buff->buffer[ring_buff->readpoint]; - } - } - - return i; + int i; + + if (len > ring_buff->size) { + return RINGBUFF_TOO_SHORT; + } + + for (i = 0; i < len; i++) { + if (ring_buff->writepoint == ring_buff->readpoint) { + break; + } else { + if (ring_buff->readpoint == (ring_buff->size - 1)) { + ring_buff->readpoint = 0; + } + + else { + ring_buff->readpoint++; + } + pData[i] = ring_buff->buffer[ring_buff->readpoint]; + } + } + + return i; } diff --git a/sdk_src/utils/utils_timer.c b/sdk_src/utils/utils_timer.c index 433ce7d..997c443 100644 --- a/sdk_src/utils/utils_timer.c +++ b/sdk_src/utils/utils_timer.c @@ -16,29 +16,34 @@ #ifdef __cplusplus extern "C" { #endif - + #include "utils_timer.h" - -bool expired(Timer *timer) { + +bool expired(Timer *timer) +{ return HAL_Timer_expired(timer); } -void countdown_ms(Timer *timer, unsigned int timeout_ms) { +void countdown_ms(Timer *timer, unsigned int timeout_ms) +{ HAL_Timer_countdown_ms(timer, timeout_ms); } -void countdown(Timer *timer, unsigned int timeout) { +void countdown(Timer *timer, unsigned int timeout) +{ HAL_Timer_countdown(timer, timeout); } -int left_ms(Timer *timer) { +int left_ms(Timer *timer) +{ return HAL_Timer_remain(timer); } -void InitTimer(Timer *timer) { +void InitTimer(Timer *timer) +{ HAL_Timer_init(timer); } - + #ifdef __cplusplus } #endif diff --git a/tools/build_scripts/parse_make_settings.mk b/tools/build_scripts/parse_make_settings.mk index 6642792..e927f12 100644 --- a/tools/build_scripts/parse_make_settings.mk +++ b/tools/build_scripts/parse_make_settings.mk @@ -28,6 +28,7 @@ SWITCH_VARS := \ FEATURE_ACTION_ENABLED \ FEATURE_DEBUG_DEV_INFO_USED \ FEATURE_OTA_USE_HTTPS \ + FEATURE_MULTITHREAD_ENABLED \ $(foreach v, \ @@ -89,4 +90,8 @@ endif # Auth mode ifeq (y, $(strip $(FEATURE_SYSTEM_COMM_ENABLED))) CFLAGS += -DSYSTEM_COMM +endif + +ifeq (y, $(strip $(FEATURE_GATEWAY_ENABLED))) +CFLAGS += -DMULTITHREAD_ENABLED endif \ No newline at end of file diff --git a/tools/cmake_scripts/config.h.in b/tools/cmake_scripts/config.h.in index 3a3e873..9a400f3 100644 --- a/tools/cmake_scripts/config.h.in +++ b/tools/cmake_scripts/config.h.in @@ -15,3 +15,6 @@ #cmakedefine AT_UART_RECV_IRQ #cmakedefine AT_OS_USED #cmakedefine AT_DEBUG +#cmakedefine OTA_USE_HTTPS +#cmakedefine GATEWAY_ENABLED +#cmakedefine MULTITHREAD_ENABLED From 19b65fe8429911585978e8147d767c3ee5273380 Mon Sep 17 00:00:00 2001 From: yougaliu Date: Thu, 5 Mar 2020 18:46:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?1.=20=E4=BF=AE=E6=AD=A3freeRTOS=E4=B8=8B?= =?UTF-8?q?=E7=9A=84=E7=BA=BF=E7=A8=8B=E5=88=9B=E5=BB=BA=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=82=202.=20mbedTLS=E5=A2=9E=E5=8A=A0=E8=B0=83=E8=AF=95?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=89=93=E5=8D=B0=E5=9B=9E=E8=B0=83=E3=80=82?= =?UTF-8?q?=203.=20=E4=BF=AE=E5=A4=8D=E5=8D=95=E4=B8=AA=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E6=97=B6json=E6=8B=BC=E6=8E=A5=E5=A4=9A=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E2=80=9C{=E2=80=9D=E7=AC=A6=E5=8F=B7=E3=80=82=204.=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Ddata=5Ftemplate=20client=20=E9=94=80=E6=AF=81=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3IOT=5FTemplate=5FDestroy=20=E6=BD=9C=E5=9C=A8=E5=86=85?= =?UTF-8?q?=E5=AD=98=E6=B3=84=E9=9C=B2=E9=A3=8E=E9=99=A9=E3=80=82=205.=20?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=BD=91=E5=85=B3=E5=92=8C=E4=BA=8C=E8=BF=9B?= =?UTF-8?q?=E5=88=B6=E4=BD=BF=E7=94=A8=E8=AF=B4=E6=98=8E=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...60\346\215\256\344\270\212\346\212\245.md" | 154 +++++++++ ...53\351\200\237\345\205\245\351\227\250.md" | 298 ++++++++++++++++++ include/config.h | 8 +- make.settings | 2 +- .../at_device/esp8266/at_device_esp8266.c | 47 ++- .../at_device/esp8266/at_device_esp8266.h | 3 - platform/os/freertos/HAL_AT_UART_freertos.c | 3 +- platform/os/freertos/HAL_OS_freertos.c | 21 +- platform/os/linux/HAL_Device_linux.c | 21 +- platform/os/linux/HAL_OS_linux.c | 5 + platform/os/nonos/HAL_Device_nonos.c | 2 +- platform/os/nonos/HAL_OS_nonos.c | 15 + platform/os/rtthread/HAL_Device_rtthread.c | 55 +++- platform/os/rtthread/HAL_OS_rtthread.c | 26 +- platform/tls/mbedtls/HAL_TLS_mbedtls.c | 23 ++ samples/data_template/data_template_sample.c | 18 +- samples/gateway/gateway_sample.c | 58 ++-- samples/gateway/sub_dev001.c | 54 ++-- samples/ota/ota_mqtt_sample.c | 28 +- samples/raw_data/raw_data_sample.c | 18 +- .../scenarized/light_data_template_sample.c | 12 +- .../data_template/data_template_event.c | 2 +- sdk_src/services/gateway/gateway_common.c | 16 +- sdk_src/utils/json_token.c | 9 + 24 files changed, 736 insertions(+), 162 deletions(-) create mode 100644 "docs/\344\272\214\350\277\233\345\210\266\346\225\260\346\215\256\344\270\212\346\212\245.md" create mode 100644 "docs/\347\275\221\345\205\263\350\256\276\345\244\207\345\277\253\351\200\237\345\205\245\351\227\250.md" diff --git "a/docs/\344\272\214\350\277\233\345\210\266\346\225\260\346\215\256\344\270\212\346\212\245.md" "b/docs/\344\272\214\350\277\233\345\210\266\346\225\260\346\215\256\344\270\212\346\212\245.md" new file mode 100644 index 0000000..2ec2d59 --- /dev/null +++ "b/docs/\344\272\214\350\277\233\345\210\266\346\225\260\346\215\256\344\270\212\346\212\245.md" @@ -0,0 +1,154 @@ +用户参考自定义透传的智能灯示例,定义目标产品的二进制数据协议,编写对应的上下行数据的解析脚本,设备侧即可基于二进制实现和平台交互。 + +### 1.创建自定义透传产品,同时选择智能灯产品类型 +![](https://main.qcloudimg.com/raw/e385b9e53e2b510df5da93c2977919cb.png) + +### 2. 使能二进制数据解析功能 +![](https://main.qcloudimg.com/raw/22f6e4797466f41e17111b61f9c51072.png) + +### 3. 智能灯二进制协议格式 + +- 上报格式 +![](https://main.qcloudimg.com/raw/d4736c9fe19da201d65e80cb72ab17d2.png) + +- 下发格式 +![](https://main.qcloudimg.com/raw/67ed266e814783adef513dcbf764fbbc.png) + +### 4. 编辑上下行二进制数据与Json数据转换的解析脚本并提交 +- 目前解析脚本暂时只支持JavaScript语法 +![](https://main.qcloudimg.com/raw/2e6d2b20723d7567f64fab7889d8e87a.png) + +对应的脚本代码如下: +- 上行二进制数据到Json数据的解析脚本 + +``` + +function RawToProtocol(fPort, bytes) { + var data = { + "method": "report", + "clientToken": new Date(), + "params":{} + }; + if (bytes[2] != 1) { + return data ; + } + var sw = bytes[8]; + if (sw == 0 || sw == 1) { + data.params.power_switch = sw; + } + var color = bytes[9]; + if (color >=0 && color < 4 ) { + data.params.color = color; + } + var brightness = bytes[10]; + if (brightness >=0 && brightness <=100 ) { + data.params.brightness = brightness; + } + return data; +} + +``` + +- 下行Json数据到二进制数据的解析脚本 + +``` + +function ProtocolToRaw(json) { + + var data = new Array(); + + var method = json['method']; + if (method !="control") { + return data; + } + data[0] = 0xaa;// header 0x55aa + data[1] = 0x55; + + data[2] = 0x20; // control commandb + data[3] = 0; // padding + + //requestid 这里随便填了 + data[4] = 0xcc; + data[5] = 0xcc; + data[6] = 0xcc; + data[7] = 0xcc; + + var params = json['params']; + + if (params.power_switch != undefined) { + data[8] = params.power_switch ; //switch + } else { + data[8] = 255; + } + + if (params.color != undefined) { + data[9] = params.color ; //color + } else { + data[9] = 255; + } + + if (params.brightness != undefined) { + data[10] = params.brightness ; //brightness + } else { + data[10] = 255; } + + data[11] = 255 ; //name is invalid + return data; +} + + +``` + +- 可以在线调试脚本的解析功能 +![](https://main.qcloudimg.com/raw/6ce7da31c2442f7967cb89edd20ed09b.png) + + +### 5. 编译SDK并运行二进制示例 + +- 带参数 -l 二进制示例会循环执行,示例会定时上报二进制数据,收到二进制数据会dump出来。 + +``` +./raw_data_mqtt_sample -l +INF|2020-02-13 01:41:55|qcloud_iot_device.c|iot_device_info_set(65): SDK_Ver: 3.1.1, Product_ID: NQ7GQN6KSR, Device_Name: dev001 +DBG|2020-02-13 01:41:55|HAL_TLS_mbedtls.c|HAL_TLS_Connect(206): Setting up the SSL/TLS structure... +DBG|2020-02-13 01:41:55|HAL_TLS_mbedtls.c|HAL_TLS_Connect(248): Performing the SSL/TLS handshake... +DBG|2020-02-13 01:41:55|HAL_TLS_mbedtls.c|HAL_TLS_Connect(249): Connecting to /nq7gqn6ksr.iotcloud.tencentdevices.com/8883... +INF|2020-02-13 01:41:56|HAL_TLS_mbedtls.c|HAL_TLS_Connect(271): connected with /nq7gqn6ksr.iotcloud.tencentdevices.com/8883... +INF|2020-02-13 01:41:56|mqtt_client.c|IOT_MQTT_Construct(127): mqtt connect with id: 9Z39s success +INF|2020-02-13 01:41:56|raw_data_sample.c|main(306): Cloud Device Construct Success +DBG|2020-02-13 01:41:56|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/raw/NQ7GQN6KSR/dev001|packet_id=15330 +INF|2020-02-13 01:41:56|raw_data_sample.c|_mqtt_event_handler(95): subscribe success, packet-id=15330 +DBG|2020-02-13 01:41:57|raw_data_sample.c|_publish_raw_data_msg(223): raw_data published dump: + + AA 55 01 00 00 00 00 00 01 01 38 00 +DBG|2020-02-13 01:41:57|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/raw/NQ7GQN6KSR/dev001|payload= + + DBG|2020-02-13 01:42:02|raw_data_sample.c|_publish_raw_data_msg(223): raw_data published dump: + + AA 55 01 00 01 00 00 00 01 00 54 00 +DBG|2020-02-13 01:42:02|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/raw/NQ7GQN6KSR/dev001|payload= + +``` + +- 收到下行数据并dump + +``` + +INF|2020-02-13 01:47:23|raw_data_sample.c|on_raw_data_message_callback(235): Receive Message With topicName:$thing/down/raw/NQ7GQN6KSR/dev001, payloadlen:12 +DBG|2020-02-13 01:47:23|raw_data_sample.c|on_raw_data_message_callback(237): raw_data reveived dump: + + AA 55 20 00 CC CC CC CC FF 01 FF FF +INF|2020-02-13 01:47:23|raw_data_sample.c|on_raw_data_message_callback(235): Receive Message With topicName:$thing/down/raw/NQ7GQN6KSR/dev001, payloadlen:12 +DBG|2020-02-13 01:47:23|raw_data_sample.c|on_raw_data_message_callback(237): raw_data reveived dump: + + AA 55 20 00 CC CC CC CC FF 01 FF FF + +``` + +### 6. 控制台日志 + +- 在线调试 +![](https://main.qcloudimg.com/raw/5e8dd1b8efdc079a72ffb8d9e3b52830.png) + +- 设备日志 +![](https://main.qcloudimg.com/raw/9ee577ed46f1170531d444703c5968f9.png) \ No newline at end of file diff --git "a/docs/\347\275\221\345\205\263\350\256\276\345\244\207\345\277\253\351\200\237\345\205\245\351\227\250.md" "b/docs/\347\275\221\345\205\263\350\256\276\345\244\207\345\277\253\351\200\237\345\205\245\351\227\250.md" new file mode 100644 index 0000000..bab4d23 --- /dev/null +++ "b/docs/\347\275\221\345\205\263\350\256\276\345\244\207\345\277\253\351\200\237\345\205\245\351\227\250.md" @@ -0,0 +1,298 @@ +# 网关设备快速入门 +本文档将讲述如何在腾讯物联网开发平台(IoT Explorer)控制台申请网关设备并绑定子设备, 并结合C-SDK 的**gateway_sample**快速体验网关设备代理子设备上下线,子设备基于数据模板协议或者自定义数据,发送和接收消息。 + + +## 一. 控制台创建网关设备 + +#### 1. 创建网关产品和设备 +点击页面**创建新产品**按钮, 创建一个网关产品。 + +![](https://main.qcloudimg.com/raw/5a535db5040ac350f4033fd40071a1d7.jpg) + +在弹出的产品窗口中,选择节点类型和产品类型,输入产品名称,选择认证方式和数据格式,输入产品描述,然后点击确定创建 + +在生成的产品页面下,点击**子设备管理**进行子产品和子设备绑定。 + +![](https://main.qcloudimg.com/raw/5228791ee57d182f7adb71617c6be96a.jpg) + +子设备是通过网关产品代理实现子设备的鉴权和通信,网关能够代理子设备鉴权和通信的前提是在平台实现了网关和子设备的绑定操作。需要注意的是子设备是无法直连物联网平台的产品,由网关设备代理连接,所以子设备的认证方式不影响连接,由网关设备来负责认证接入。 + +在子产品管理页面绑定子产品 +![](https://main.qcloudimg.com/raw/244dcf505fc026cb465ff26fce682d0d.jpg) + +在网关产品下创建网关设备,进入子设备管理,选择绑定的子产品产品,然后选择对应子产品下需要绑定的子设备 + +![](https://main.qcloudimg.com/raw/8bad6a65baaab95d0de6eab402aeb269.jpg) +![](https://main.qcloudimg.com/raw/1d65fe910deb0521595302ba5d54efda.jpg) + +#### 2. 定义子产品数据模板或者创建自定义产品 + +网关示例代理子设备上线后,默认会订阅topic $productID/$devName/data, 并向这个topic发送数据,这个topic只有自定义透传的产品才会有data topic。 +![](https://main.qcloudimg.com/raw/26b60d86e694d23b32d7a460dd8c5794.jpg) +![](https://main.qcloudimg.com/raw/cdb697cae207a87dda99fb89f51bd617.jpg) + +网关示例中,开启宏定义 `SUB_DEV_USE_DATA_TEMPLATE_LIGHT`,会代理子产品数据模板为智能灯的子设进行通信,如果开启该宏定义,请绑定一个智能灯的产品并将子产品和子设备信息分别配置到`LIGHT_SUB_DEV_PRODUCT_ID`和`LIGHT_SUB_DEV_NAME`。 + +``` +# define SUB_DEV_USE_DATA_TEMPLATE_LIGHT + +# ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT +# define LIGHT_SUB_DEV_PRODUCT_ID "WPDA0S6S08" +# define LIGHT_SUB_DEV_NAME "dev001" +extern void* sub_dev1_thread(void *ptr, char *product_id, char *device_name); +# endif +``` + +## 二. 编译运行示例程序 + +#### 1. 配置网关和子设备信息 +修改设备信息配置device_info.json,配置网关产品、设备、密钥或者证书,配置绑定的子设备数量,对应的产品和设备名 +``` +{ + "auth_mode":"KEY", + + "productId":"PRODUCT_ID", //网关产品ID + "productSecret":"YOUR_PRODUCT_SECRET", + "deviceName":"YOUR_DEV_NAME", //网关设备名 + + "key_deviceinfo":{ + "deviceSecret":"xxxxx" //密钥认证,网关设备的密钥 + }, + + "cert_deviceinfo":{ + "devCertFile":"YOUR_DEVICE_CERT_FILE_NAME", //证书认证,网关设备的公钥证书文件名 + "devPrivateKeyFile":"YOUR_DEVICE_PRIVATE_KEY_FILE_NAME" //证书认证,网关设备的私钥证书文件名 + }, + + "subDev":{ + "subdev_num":6, //子设备数量 + "subdev_list": //对应的子产品和子设备 + [ + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev001"}, + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev002"}, + {"sub_productId": "WPDA0S6S08", "sub_devName": "dev003"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test001"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test002"}, + {"sub_productId": "Y8T6NB8DM0", "sub_devName": "test003"} + ] + } +} +``` + +#### 2. 修改编译选项 +- 使用cmake编译,修改CMakeLists.txt(以**密钥认证设备**为例),使能网关功能,网关会关联打开多线程功能 + +``` +set(BUILD_TYPE "release") +set(COMPILE_TOOLS "gcc") +set(PLATFORM "linux") +set(FEATURE_MQTT_COMM_ENABLED ON) +set(FEATURE_GATEWAY_ENABLED ON) +set(FEATURE_MULTITHREAD_ENABLED ON) +set(FEATURE_AUTH_MODE "KEY") + +``` +执行脚本编译 +``` +./cmake_build.sh +``` +示例输出位于`output/release/bin`文件夹中 + +- 使用makefile编译,修改CMakeLists.txt(以**密钥认证设备**为例),使能网关功能,网关会关联打开多线程功能 + +``` +PLATFORM_CC = gcc +PLATFORM_AR = ar +PLATFORM_OS = linux + +FEATURE_GATEWAY_ENABLED = y +FEATURE_MULTITHREAD_ENABLED = y +``` + +执行make编译 +``` +make +``` +示例输出位于`output/release/bin`文件夹中 + + +#### 3. 执行网关示例程序 +如下日志信息显示示例程序通过MQTT网关代理子设备上下线状态变化,发布和订阅消息。 + +``` +./gateway_sample +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(632): sub device num:6 +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(634): 0th subDevPid:BK7EEF4UIB subDevName:dev001 +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(634): 1th subDevPid:BK7EEF4UIB subDevName:dev002 +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(634): 2th subDevPid:BK7EEF4UIB subDevName:dev003 +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(634): 3th subDevPid:7P3KIFQ1JD subDevName:test001 +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(634): 4th subDevPid:7P3KIFQ1JD subDevName:test002 +DBG|2020-02-27 05:53:59|HAL_Device_linux.c|HAL_GetGwDevInfo(634): 5th subDevPid:7P3KIFQ1JD subDevName:test003 +INF|2020-02-27 05:53:59|qcloud_iot_device.c|iot_device_info_set(65): SDK_Ver: 3.1.1, Product_ID: 0WUKPUCOTC, Device_Name: GW001 +DBG|2020-02-27 05:53:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(228): Setting up the SSL/TLS structure... +DBG|2020-02-27 05:53:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(270): Performing the SSL/TLS handshake... +DBG|2020-02-27 05:53:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(271): Connecting to /0wukpucotc.iotcloud.tencentdevices.com/8883... +INF|2020-02-27 05:53:59|HAL_TLS_mbedtls.c|HAL_TLS_Connect(293): connected with /0wukpucotc.iotcloud.tencentdevices.com/8883... +INF|2020-02-27 05:53:59|mqtt_client.c|IOT_MQTT_Construct(127): mqtt connect with id: piVMy success +DBG|2020-02-27 05:53:59|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$gateway/operation/result/0WUKPUCOTC/GW001|packet_id=7213 +DBG|2020-02-27 05:53:59|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7213 +DBG|2020-02-27 05:54:00|gateway_sample.c|gateway_yield_thread(202): gateway yield thread start ... +DBG|2020-02-27 05:54:01|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-02-27 05:54:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"BK7EEF4UIB","device_name":"dev001"}]}} +INF|2020-02-27 05:54:01|gateway_common.c|_gateway_message_handler(138): client_id(BK7EEF4UIB/dev001), online result 0 +DBG|2020-02-27 05:54:01|gateway_sample.c|main(289): subDev Pid:BK7EEF4UIB devName:dev001 online success. +DBG|2020-02-27 05:54:01|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-02-27 05:54:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"BK7EEF4UIB","device_name":"dev002"}]}} +INF|2020-02-27 05:54:01|gateway_common.c|_gateway_message_handler(138): client_id(BK7EEF4UIB/dev002), online result 0 +DBG|2020-02-27 05:54:01|gateway_sample.c|main(289): subDev Pid:BK7EEF4UIB devName:dev002 online success. +DBG|2020-02-27 05:54:01|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-02-27 05:54:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"BK7EEF4UIB","device_name":"dev003"}]}} +INF|2020-02-27 05:54:01|gateway_common.c|_gateway_message_handler(138): client_id(BK7EEF4UIB/dev003), online result 0 +DBG|2020-02-27 05:54:01|gateway_sample.c|main(289): subDev Pid:BK7EEF4UIB devName:dev003 online success. +DBG|2020-02-27 05:54:01|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-02-27 05:54:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"7P3KIFQ1JD","device_name":"test001"}]}} +INF|2020-02-27 05:54:01|gateway_common.c|_gateway_message_handler(138): client_id(7P3KIFQ1JD/test001), online result 0 +DBG|2020-02-27 05:54:01|gateway_sample.c|main(289): subDev Pid:7P3KIFQ1JD devName:test001 online success. +DBG|2020-02-27 05:54:01|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-02-27 05:54:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"7P3KIFQ1JD","device_name":"test002"}]}} +INF|2020-02-27 05:54:01|gateway_common.c|_gateway_message_handler(138): client_id(7P3KIFQ1JD/test002), online result 0 +DBG|2020-02-27 05:54:01|gateway_sample.c|main(289): subDev Pid:7P3KIFQ1JD devName:test002 online success. +DBG|2020-02-27 05:54:01|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-02-27 05:54:01|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"7P3KIFQ1JD","device_name":"test003"}]}} +INF|2020-02-27 05:54:01|gateway_common.c|_gateway_message_handler(138): client_id(7P3KIFQ1JD/test003), online result 0 +DBG|2020-02-27 05:54:01|gateway_sample.c|main(289): subDev Pid:7P3KIFQ1JD devName:test003 online success. +ERR|2020-02-27 05:54:01|gateway_sample.c|main(311): create sub_dev light thread success +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/property/BK7EEF4UIB/dev002|packet_id=7214 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/property/BK7EEF4UIB/dev003|packet_id=7215 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/property/7P3KIFQ1JD/test001|packet_id=7216 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/property/7P3KIFQ1JD/test002|packet_id=7217 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/property/7P3KIFQ1JD/test003|packet_id=7218 +DBG|2020-02-27 05:54:01|sub_dev001.c|sub_dev1_thread(563): sub_dev1_thread ... +INF|2020-02-27 05:54:01|qcloud_iot_device.c|iot_device_info_set(65): SDK_Ver: 3.1.1, Product_ID: BK7EEF4UIB, Device_Name: dev001 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/property/BK7EEF4UIB/dev001|packet_id=7219 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/event/BK7EEF4UIB/dev001|packet_id=7220 +DBG|2020-02-27 05:54:01|mqtt_client_subscribe.c|qcloud_iot_mqtt_subscribe(141): topicName=$thing/down/action/BK7EEF4UIB/dev001|packet_id=7221 +INF|2020-02-27 05:54:01|sub_dev001.c|sub_dev1_thread(574): Cloud Device Construct Success +DBG|2020-02-27 05:54:01|sub_dev001.c|_usr_init(337): add your init code here +INF|2020-02-27 05:54:01|sub_dev001.c|_register_data_template_property(376): data template property=power_switch registered. +INF|2020-02-27 05:54:01|sub_dev001.c|_register_data_template_property(376): data template property=color registered. +INF|2020-02-27 05:54:01|sub_dev001.c|_register_data_template_property(376): data template property=brightness registered. +INF|2020-02-27 05:54:01|sub_dev001.c|_register_data_template_property(376): data template property=name registered. +INF|2020-02-27 05:54:01|sub_dev001.c|sub_dev1_thread(589): Register data template propertys Success +INF|2020-02-27 05:54:01|sub_dev001.c|_register_data_template_action(277): data template action=blink registered. +INF|2020-02-27 05:54:01|sub_dev001.c|sub_dev1_thread(599): Register data template actions Success +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7214 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7214 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7216 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7216 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7218 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7218 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7217 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7217 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7215 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7215 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7219 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7219 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7220 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7220 +DBG|2020-02-27 05:54:01|gateway_api.c|_gateway_event_handler(23): gateway sub|unsub(3) success, packet-id=7221 +INF|2020-02-27 05:54:01|gateway_sample.c|_event_handler(74): subscribe success, packet-id=7221 +DBG|2020-02-27 05:54:02|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev001|payload={"method":"report_info", "clientToken":"BK7EEF4UIB-0", "params":{"module_hardinfo":"ESP8266","module_softinfo":"V1.0","fw_ver":"3.1.1","imei":"11-22-33-44","lat":"22.546015","lon":"113.941125", "device_label":{"append_info":"your self define info"}}} +DBG|2020-02-27 05:54:02|data_template_client.c|_reply_ack_cb(169): replyAck=0 +DBG|2020-02-27 05:54:02|data_template_client.c|_reply_ack_cb(172): Received Json Document={"method":"report_info_reply","clientToken":"BK7EEF4UIB-0","code":0,"status":"success"} +DBG|2020-02-27 05:54:02|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev001|payload={"method":"get_status", "clientToken":"BK7EEF4UIB-1"} +DBG|2020-02-27 05:54:02|data_template_client.c|_get_status_reply_ack_cb(185): replyAck=0 +DBG|2020-02-27 05:54:02|data_template_client.c|_get_status_reply_ack_cb(189): Received Json Document={"method":"get_status_reply","clientToken":"BK7EEF4UIB-1","code":0,"status":"success","data":{"reported":{"brightness":0,"name":"dev001","power_switch":1,"color":1}}} +DBG|2020-02-27 05:54:02|sub_dev001.c|sub_dev1_thread(625): Get data status success +DBG|2020-02-27 05:54:02|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev001|payload={"method":"report", "clientToken":"BK7EEF4UIB-2", "params":{"power_switch":0,"color":0,"brightness":0,"name":""}} +INF|2020-02-27 05:54:02|sub_dev001.c|sub_dev1_thread(666): data template reporte success +INF|2020-02-27 05:54:02|sub_dev001.c|OnReportReplyCallback(360): recv report_reply(ack=0): {"method":"report_reply","clientToken":"BK7EEF4UIB-2","code":0,"status":"success"} +DBG|2020-02-27 05:54:03|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev002|payload={"method":"report","clientToken":"123","params":{}} +DBG|2020-02-27 05:54:03|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev003|payload={"method":"report","clientToken":"123","params":{}} +DBG|2020-02-27 05:54:03|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/7P3KIFQ1JD/test001|payload={"method":"report","clientToken":"123","params":{}} +DBG|2020-02-27 05:54:03|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/7P3KIFQ1JD/test002|payload={"method":"report","clientToken":"123","params":{}} +DBG|2020-02-27 05:54:03|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/7P3KIFQ1JD/test003|payload={"method":"report","clientToken":"123","params":{}} +INF|2020-02-27 05:54:03|gateway_sample.c|_message_handler(124): Receive Message With topicName:$thing/down/property/BK7EEF4UIB/dev002, payload:{"method":"report_reply","clientToken":"123","code":0,"status":"success"} +INF|2020-02-27 05:54:03|gateway_sample.c|_message_handler(124): Receive Message With topicName:$thing/down/property/7P3KIFQ1JD/test001, payload:{"method":"report_reply","clientToken":"123","code":0,"status":"success"} +INF|2020-02-27 05:54:03|gateway_sample.c|_message_handler(124): Receive Message With topicName:$thing/down/property/7P3KIFQ1JD/test002, payload:{"method":"report_reply","clientToken":"123","code":0,"status":"success"} +INF|2020-02-27 05:54:03|gateway_sample.c|_message_handler(124): Receive Message With topicName:$thing/down/property/7P3KIFQ1JD/test003, payload:{"method":"report_reply","clientToken":"123","code":0,"status":"success"} +INF|2020-02-27 05:54:03|gateway_sample.c|_message_handler(124): Receive Message With topicName:$thing/down/property/BK7EEF4UIB/dev003, payload:{"method":"report_reply","clientToken":"123","code":0,"status":"success"} +DBG|2020-02-27 05:54:07|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev001|payload={"method":"report", "clientToken":"BK7EEF4UIB-3", "params":{"power_switch":0,"color":0,"brightness":0,"name":""}} +INF|2020-02-27 05:54:07|sub_dev001.c|sub_dev1_thread(666): data template reporte success +INF|2020-02-27 05:54:07|sub_dev001.c|OnReportReplyCallback(360): recv report_reply(ack=0): {"method":"report_reply","clientToken":"BK7EEF4UIB-3","code":0,"status":"success"} +``` + +#### 4. 观察子设备上线 +如下日志信息显示示例程序的网关设备Gateway-demo通过MQTT代理6个子设备上线成功: + +``` +DBG|2020-01-13 16:11:24|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-01-13 16:11:24|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/MMC8QP0VAQ/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"WPDA0S6S08","device_name":"dev001"}]}} +INF|2020-01-13 16:11:24|gateway_common.c|_gateway_message_handler(138): client_id(WPDA0S6S08/dev001), online result 0 +DBG|2020-01-13 16:11:25|gateway_sample.c|main(282): subDev Pid:WPDA0S6S08 devName:dev001 online success. +DBG|2020-01-13 16:11:25|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-01-13 16:11:25|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/MMC8QP0VAQ/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"WPDA0S6S08","device_name":"dev002"}]}} +INF|2020-01-13 16:11:25|gateway_common.c|_gateway_message_handler(138): client_id(WPDA0S6S08/dev002), online result 0 +DBG|2020-01-13 16:11:25|gateway_sample.c|main(282): subDev Pid:WPDA0S6S08 devName:dev002 online success. +DBG|2020-01-13 16:11:25|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-01-13 16:11:25|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/MMC8QP0VAQ/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"WPDA0S6S08","device_name":"dev003"}]}} +INF|2020-01-13 16:11:25|gateway_common.c|_gateway_message_handler(138): client_id(WPDA0S6S08/dev003), online result 0 +DBG|2020-01-13 16:11:25|gateway_sample.c|main(282): subDev Pid:WPDA0S6S08 devName:dev003 online success. +DBG|2020-01-13 16:11:25|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-01-13 16:11:25|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/MMC8QP0VAQ/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"Y8T6NB8DM0","device_name":"test001"}]}} +INF|2020-01-13 16:11:25|gateway_common.c|_gateway_message_handler(138): client_id(Y8T6NB8DM0/test001), online result 0 +DBG|2020-01-13 16:11:25|gateway_sample.c|main(282): subDev Pid:Y8T6NB8DM0 devName:test001 online success. +DBG|2020-01-13 16:11:25|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-01-13 16:11:25|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/MMC8QP0VAQ/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"Y8T6NB8DM0","device_name":"test002"}]}} +INF|2020-01-13 16:11:25|gateway_common.c|_gateway_message_handler(138): client_id(Y8T6NB8DM0/test002), online result 0 +DBG|2020-01-13 16:11:25|gateway_sample.c|main(282): subDev Pid:Y8T6NB8DM0 devName:test002 online success. +DBG|2020-01-13 16:11:25|gateway_api.c|IOT_Gateway_Subdev_Online(125): there is no session, create a new session +DBG|2020-01-13 16:11:25|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/MMC8QP0VAQ/GW001|payload={"type":"online","payload":{"devices":[{"product_id":"Y8T6NB8DM0","device_name":"test003"}]}} +INF|2020-01-13 16:11:25|gateway_common.c|_gateway_message_handler(138): client_id(Y8T6NB8DM0/test003), online result 0 +DBG|2020-01-13 16:11:26|gateway_sample.c|main(282): subDev Pid:Y8T6NB8DM0 devName:test003 online success. + +``` + +#### 5. 观察子设备下线 +如下日志信息显示示例程序的网关设备Gateway-demo通过MQTT代理子设备下线成功: +```` +DBG|2020-02-27 05:58:49|gateway_sample.c|main(388): subDev Pid:BK7EEF4UIB devName:dev002 offline success. +DBG|2020-02-27 05:58:49|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"offline","payload":{"devices":[{"product_id":"BK7EEF4UIB","device_name":"dev003"}]}} +INF|2020-02-27 05:58:49|gateway_common.c|_gateway_message_handler(143): client_id(BK7EEF4UIB/dev003), offline result 0 +DBG|2020-02-27 05:58:49|gateway_sample.c|main(388): subDev Pid:BK7EEF4UIB devName:dev003 offline success. +DBG|2020-02-27 05:58:49|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"offline","payload":{"devices":[{"product_id":"7P3KIFQ1JD","device_name":"test001"}]}} +INF|2020-02-27 05:58:49|gateway_common.c|_gateway_message_handler(143): client_id(7P3KIFQ1JD/test001), offline result 0 +DBG|2020-02-27 05:58:49|gateway_sample.c|main(388): subDev Pid:7P3KIFQ1JD devName:test001 offline success. +DBG|2020-02-27 05:58:49|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"offline","payload":{"devices":[{"product_id":"7P3KIFQ1JD","device_name":"test002"}]}} +INF|2020-02-27 05:58:49|gateway_common.c|_gateway_message_handler(143): client_id(7P3KIFQ1JD/test002), offline result 0 +DBG|2020-02-27 05:58:49|gateway_sample.c|main(388): subDev Pid:7P3KIFQ1JD devName:test002 offline success. +DBG|2020-02-27 05:58:49|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$gateway/operation/0WUKPUCOTC/GW001|payload={"type":"offline","payload":{"devices":[{"product_id":"7P3KIFQ1JD","device_name":"test003"}]}} +INF|2020-02-27 05:58:49|gateway_common.c|_gateway_message_handler(143): client_id(7P3KIFQ1JD/test003), offline result 0 +DBG|2020-02-27 05:58:49|gateway_sample.c|main(388): subDev Pid:7P3KIFQ1JD devName:test003 offline success. + +``` +#### 6. 观察网关发送接收子设备的消息 +通过控制台控制智能灯子设备开关状态、灯光颜色和亮度,如下日志信息 +``` +DBG|2020-02-27 06:02:19|data_template_client_manager.c|_on_template_downstream_topic_handler(527): control_str:{"power_switch":1,"brightness":50} +INF|2020-02-27 06:02:19|sub_dev001.c|OnControlMsgCallback(349): Property=brightness changed +INF|2020-02-27 06:02:19|sub_dev001.c|OnControlMsgCallback(349): Property=power_switch changed +[ lighting ]|[color: RED ]|[brightness:||||||||||----------]|[] +DBG|2020-02-27 06:02:19|data_template_client.c|IOT_Template_ControlReply(698): Report Document: {"code":0, "clientToken":"clientToken-db6220ff-ab9f-4655-945d-dd14b6e3498d"} +DBG|2020-02-27 06:02:19|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev001|payload={"method":"control_reply", "code":0, "clientToken":"clientToken-db6220ff-ab9f-4655-945d-dd14b6e3498d"} +DBG|2020-02-27 06:02:19|sub_dev001.c|sub_dev1_thread(649): Contol msg reply success +``` +#### 6. 观察网关代理子设备发送消息 +智能灯子设备会周期上报,开关状态发生变化会上报事件 +``` +DBG|2020-02-27 06:02:19|mqtt_client_publish.c|qcloud_iot_mqtt_publish(334): publish topic seq=58053|topicName=$thing/up/event/BK7EEF4UIB/dev001|payload={"method":"event_post", "clientToken":"BK7EEF4UIB-8", "eventId":"status_report", "type":"info", "timestamp":0, "params":{"status":1,"message":"light on"}} +INF|2020-02-27 06:02:19|gateway_sample.c|_event_handler(101): publish success, packet-id=58053 +INF|2020-02-27 06:02:19|sub_dev001.c|OnReportReplyCallback(360): recv report_reply(ack=0): {"method":"report_reply","clientToken":"BK7EEF4UIB-7","code":0,"status":"success"} +DBG|2020-02-27 06:02:19|data_template_event.c|_on_event_reply_callback(105): recv:{"method":"event_reply","clientToken":"BK7EEF4UIB-8","code":0,"status":"","data":{}} +DBG|2020-02-27 06:02:19|data_template_event.c|_on_event_reply_callback(123): eventToken:BK7EEF4UIB-8 code:0 status:(null) +DBG|2020-02-27 06:02:19|sub_dev001.c|event_post_cb(169): recv event reply, clear event +DBG|2020-02-27 06:02:19|data_template_event.c|_traverse_event_list(79): eventToken[BK7EEF4UIB-8] released +DBG|2020-02-27 06:02:21|mqtt_client_publish.c|qcloud_iot_mqtt_publish(340): publish packetID=0|topicName=$thing/up/property/BK7EEF4UIB/dev001|payload={"method":"report", "clientToken":"BK7EEF4UIB-9", "params":{"power_switch":1,"color":0,"brightness":50,"name":""}} +INF|2020-02-27 06:02:21|sub_dev001.c|sub_dev1_thread(666): data template reporte success +INF|2020-02-27 06:02:21|sub_dev001.c|OnReportReplyCallback(360): recv report_reply(ack=0): {"method":"report_reply","clientToken":"BK7EEF4UIB-9","code":0,"status":"success"} +``` \ No newline at end of file diff --git a/include/config.h b/include/config.h index 6b678e2..3731897 100644 --- a/include/config.h +++ b/include/config.h @@ -6,15 +6,15 @@ #define OTA_MQTT_CHANNEL /* #undef SYSTEM_COMM */ /* #undef EVENT_POST_ENABLED */ -#define ACTION_ENABLED +/* #undef ACTION_ENABLED*/ /* #undef DEV_DYN_REG_ENABLED */ /* #undef LOG_UPLOAD */ /* #undef IOT_DEBUG */ /* #undef DEBUG_DEV_INFO_USED */ -#define AT_TCP_ENABLED -#define AT_UART_RECV_IRQ +/* #undef AT_TCP_ENABLED */ +/* #undef AT_UART_RECV_IRQ */ /* #undef AT_OS_USED */ /* #undef AT_DEBUG */ /* #undef OTA_USE_HTTPS */ -#define GATEWAY_ENABLED +/* #undef GATEWAY_ENABLED*/ /* #undef MULTITHREAD_ENABLED */ diff --git a/make.settings b/make.settings index 543250f..f61e3de 100644 --- a/make.settings +++ b/make.settings @@ -38,7 +38,7 @@ FEATURE_AUTH_WITH_NOTLS = n FEATURE_DATA_TEMPLATE_ENABLED = y # 是否打开数据模板事件上报功能 -FEATURE_EVENT_POST_ENABLED = y +FEATURE_EVENT_POST_ENABLED = n # 是否打开数据模板行为功能 FEATURE_ACTION_ENABLED = n diff --git a/platform/at_device/esp8266/at_device_esp8266.c b/platform/at_device/esp8266/at_device_esp8266.c index ca23952..ee1c890 100644 --- a/platform/at_device/esp8266/at_device_esp8266.c +++ b/platform/at_device/esp8266/at_device_esp8266.c @@ -26,12 +26,15 @@ #include "at_socket_inf.h" #include "at_device_esp8266.h" +char g_WIFI_SSID[20] = "Your_SSID"; +char g_WIFI_PASSWORD[20] = "Your_SSID_PW"; + + #define WIFI_CONN_FLAG (1<<0) #define SEND_OK_FLAG (1<<1) #define SEND_FAIL_FLAG (1<<2) static uint8_t sg_SocketBitMap = 0; - static at_evt_cb_t at_evt_cb_table[] = { [AT_SOCKET_EVT_RECV] = NULL, [AT_SOCKET_EVT_CLOSED] = NULL, @@ -39,7 +42,6 @@ static at_evt_cb_t at_evt_cb_table[] = { static int alloc_fd(void) { - uint8_t i; int fd; @@ -50,7 +52,13 @@ static int alloc_fd(void) } } - return (i < ESP8266_MAX_SOCKET_NUM) ? (fd = i) : (fd = UNUSED_SOCKET); + if (i < ESP8266_MAX_SOCKET_NUM) { + fd = i; + } else { + fd = UNUSED_SOCKET; + } + + return fd; } static void free_fd(int fd) @@ -64,7 +72,6 @@ static void free_fd(int fd) static void urc_send_func(const char *data, size_t size) { - POINTER_SANITY_CHECK_RTN(data); if (strstr(data, "SEND OK")) { @@ -214,7 +221,6 @@ static int esp8266_init(void) at_delayms(2000); /* disable echo */ - ret = at_exec_cmd(resp, "ATE0"); if (QCLOUD_RET_SUCCESS != ret) { Log_e("cmd ATE0 exec err"); @@ -229,6 +235,7 @@ static int esp8266_init(void) //goto exit; } + at_delayms(100); /* get module version */ ret = at_exec_cmd(resp, "AT+GMR"); @@ -245,14 +252,15 @@ static int esp8266_init(void) at_delayms(100); at_clearFlag(WIFI_CONN_FLAG); /* connect to WiFi AP */ - ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", WIFI_SSID, WIFI_PASSWORD); + Log_d("Join wifi ap ssid:%s, password:%s", g_WIFI_SSID, g_WIFI_PASSWORD); + ret = at_exec_cmd(resp, "AT+CWJAP=\"%s\",\"%s\"", g_WIFI_SSID, g_WIFI_PASSWORD); if (!at_waitFlag(WIFI_CONN_FLAG, AT_RESP_TIMEOUT_MS)) { Log_e("wifi connect timeout"); ret = QCLOUD_ERR_FAILURE; goto __exit; } - + at_delayms(1500); ret = at_exec_cmd(resp, "AT+CIPMUX=1"); if (QCLOUD_RET_SUCCESS != ret) { Log_e("cmd AT+CIPMUX=1 exec err"); @@ -264,6 +272,7 @@ static int esp8266_init(void) at_delete_resp(resp); } + at_delayms(1000); return ret; } @@ -429,7 +438,7 @@ static int esp8266_send(int fd, const void *buff, size_t len) at_delete_resp(resp); } - return sent_size; //fancyxu + return sent_size; } static int esp8266_recv_timeout(int fd, void *buf, size_t len, uint32_t timeout) @@ -512,7 +521,6 @@ at_device_op_t at_ops_esp8266 = { int at_device_esp8266_init(void) { - int i; int ret; at_client_t p_client; @@ -536,10 +544,11 @@ int at_device_esp8266_init(void) /* register URC data execution function */ at_set_urc_table(p_client, urc_table, sizeof(urc_table) / sizeof(urc_table[0])); - Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); - for (i = 0; i < p_client->urc_table_size; i++) { - Log_d("%s", p_client->urc_table[i].cmd_prefix); - } +// Log_d("urc table addr:%p, size:%d", p_client->urc_table, p_client->urc_table_size); +// for(int i=0; i < p_client->urc_table_size; i++) +// { +// Log_d("%s",p_client->urc_table[i].cmd_prefix); +// } ret = at_device_op_register(&at_ops_esp8266); if (QCLOUD_RET_SUCCESS != ret) { @@ -558,7 +567,17 @@ int at_device_esp8266_init(void) } /*at device driver must realize this api which called by HAL_AT_TCP_Init*/ +static bool sg_at_device_init_flag = false; int at_device_init(void) { - return at_device_esp8266_init(); + int rc = QCLOUD_RET_SUCCESS; + + if (false == sg_at_device_init_flag) { + rc = at_device_esp8266_init(); + if (QCLOUD_RET_SUCCESS == rc) { + sg_at_device_init_flag = true; + } + } + + return rc; } diff --git a/platform/at_device/esp8266/at_device_esp8266.h b/platform/at_device/esp8266/at_device_esp8266.h index a131c19..6925d37 100644 --- a/platform/at_device/esp8266/at_device_esp8266.h +++ b/platform/at_device/esp8266/at_device_esp8266.h @@ -21,9 +21,6 @@ #define ESP8266_SEND_MAX_LEN_ONCE (2048) #define ESP8266_MAX_SOCKET_NUM (5) -#define WIFI_SSID "youga_wifi"//"Honor 8"// -#define WIFI_PASSWORD "Iot@2018"//"xy123123"// - int at_device_esp8266_init(void); #endif /* __AT_DEVICE_ESP8266_H__ */ diff --git a/platform/os/freertos/HAL_AT_UART_freertos.c b/platform/os/freertos/HAL_AT_UART_freertos.c index bcfb309..3ff15a7 100644 --- a/platform/os/freertos/HAL_AT_UART_freertos.c +++ b/platform/os/freertos/HAL_AT_UART_freertos.c @@ -48,9 +48,8 @@ void HAL_AT_UART_IRQHandler(void) uint8_t ch; if (__HAL_UART_GET_FLAG(pAtUart, UART_FLAG_RXNE) == SET) { ch = (uint8_t) READ_REG(pAtUart->Instance->RDR) & 0xFF; - /*this callback for at_client*/ + /*push data to ringbuffer for at parser*/ at_client_uart_rx_isr_cb(&ch, 1); - HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin); } __HAL_UART_CLEAR_PEFLAG(pAtUart); } diff --git a/platform/os/freertos/HAL_OS_freertos.c b/platform/os/freertos/HAL_OS_freertos.c index 955b3a1..fe1901e 100644 --- a/platform/os/freertos/HAL_OS_freertos.c +++ b/platform/os/freertos/HAL_OS_freertos.c @@ -149,15 +149,30 @@ void HAL_MutexUnlock(_IN_ void *mutex) */ void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) { - osThreadId thread_t = (osThreadId)HAL_Malloc(sizeof(osThreadId)); +#define DEFAULT_STACK_SIZE 1024 - osThreadDef(taskname, (os_pthread)fn, (osPriority)priority, 0, stack_size); - thread_t = osThreadCreate(osThread(taskname), arg); + osThreadId thread_t; + osThreadDef_t thread_def; + + if (NULL == fn) { + return NULL; + } + + thread_def.name = taskname; + thread_def.pthread = (os_pthread)fn; + thread_def.tpriority = (osPriority)priority; + thread_def.instances = 0; + thread_def.stacksize = (stack_size == 0) ? DEFAULT_STACK_SIZE : stack_size; + + thread_t = osThreadCreate(&thread_def, arg); if (NULL == thread_t) { HAL_Printf("create thread fail\n\r"); } return (void *)thread_t; + +#undef DEFAULT_STACK_SIZE + } int HAL_ThreadDestroy(void* threadId) diff --git a/platform/os/linux/HAL_Device_linux.c b/platform/os/linux/HAL_Device_linux.c index 3663946..b91482f 100644 --- a/platform/os/linux/HAL_Device_linux.c +++ b/platform/os/linux/HAL_Device_linux.c @@ -50,13 +50,10 @@ static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; #endif #ifdef GATEWAY_ENABLED -/* sub-device product id */ -//static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -//static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; #ifdef DEBUG_DEV_INFO_USED -static const DeviceInfo sg_subdevList[] = { +/* sub-device list */ +static DeviceInfo sg_subdevList[] = { {.product_id = "WPDA0S6S08", .device_name = "dev001"}, {.product_id = "WPDA0S6S08", .device_name = "dev002"}, {.product_id = "WPDA0S6S08", .device_name = "dev003"}, @@ -322,7 +319,7 @@ static int iot_parse_devinfo_from_json_file(DeviceInfo *pDevInfo) static int iot_get_subdev_from_list(char* devList, DeviceInfo *pDevInfo, int *pDevNum) { #define MAX_LEN_DEV_INFO (MAX_SIZE_OF_PRODUCT_ID + MAX_SIZE_OF_DEVICE_NAME + 128) - int devNum = *pDevNum; + int devNum = *pDevNum; int count = 0; int ret = QCLOUD_RET_SUCCESS; char *pNext; @@ -337,10 +334,10 @@ static int iot_get_subdev_from_list(char* devList, DeviceInfo *pDevInfo, int *pD memset(TempBuff, '\0', MAX_LEN_DEV_INFO); HAL_Snprintf(TempBuff, MAX_LEN_DEV_INFO, "%s}", pNext); char *pos = strchr(TempBuff, '{'); - if(NULL == pos){ - *pDevNum = count; - break; - } + if (NULL == pos) { + *pDevNum = count; + break; + } char* productId = LITE_json_value_of(KEY_SUBDEV_PRODUCT_ID, pos); if (productId) { @@ -601,10 +598,10 @@ int HAL_GetGwDevInfo(void *pgwDeviceInfo) #ifdef DEBUG_DEV_INFO_USED ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - if (sizeof(sg_subdevList[]) / sizeof(sg_subdevList[0]) > MAX_NUM_SUB_DEV) { + if (sizeof(sg_subdevList) / sizeof(sg_subdevList[0]) > MAX_NUM_SUB_DEV) { gwDevInfo->sub_dev_num = MAX_NUM_SUB_DEV; } else { - gwDevInfo->sub_dev_num = sizeof(sg_subdevList[]) / sizeof(sg_subdevList[0]); + gwDevInfo->sub_dev_num = sizeof(sg_subdevList) / sizeof(sg_subdevList[0]); } for (i = 0; i < gwDevInfo->sub_dev_num; i++) { diff --git a/platform/os/linux/HAL_OS_linux.c b/platform/os/linux/HAL_OS_linux.c index c5060ca..01608c9 100644 --- a/platform/os/linux/HAL_OS_linux.c +++ b/platform/os/linux/HAL_OS_linux.c @@ -144,7 +144,12 @@ int HAL_ThreadDestroy(void* threadId) { int ret; + if (NULL == threadId) { + return QCLOUD_ERR_FAILURE; + } + if (0 == pthread_cancel(*((pthread_t*)threadId))) { + pthread_join(*((pthread_t*)threadId), NULL); ret = QCLOUD_RET_SUCCESS; } else { ret = QCLOUD_ERR_FAILURE; diff --git a/platform/os/nonos/HAL_Device_nonos.c b/platform/os/nonos/HAL_Device_nonos.c index 5236b95..e76250e 100644 --- a/platform/os/nonos/HAL_Device_nonos.c +++ b/platform/os/nonos/HAL_Device_nonos.c @@ -16,7 +16,7 @@ #include #include #include -#include +#include "string.h" #include "qcloud_iot_import.h" #include "qcloud_iot_export.h" diff --git a/platform/os/nonos/HAL_OS_nonos.c b/platform/os/nonos/HAL_OS_nonos.c index 2e28601..1483aa6 100644 --- a/platform/os/nonos/HAL_OS_nonos.c +++ b/platform/os/nonos/HAL_OS_nonos.c @@ -68,6 +68,21 @@ void *HAL_Malloc(uint32_t size) return malloc(size); } +void* HAL_Calloc(uint32_t nelements, uint32_t elementSize) +{ + uint32_t size; + void *ptr = NULL; + + size = nelements * elementSize; + ptr = malloc(size); + + if (ptr) { + memset(ptr, 0, size); + } + + return ptr; +} + void *HAL_MutexCreate(void) { return (void *)1; diff --git a/platform/os/rtthread/HAL_Device_rtthread.c b/platform/os/rtthread/HAL_Device_rtthread.c index 23a0541..fbf27f7 100644 --- a/platform/os/rtthread/HAL_Device_rtthread.c +++ b/platform/os/rtthread/HAL_Device_rtthread.c @@ -17,25 +17,29 @@ #include #include +#include +#include "rtconfig.h" + #include "qcloud_iot_import.h" #include "qcloud_iot_export.h" - #include "utils_param_check.h" + + /* Enable this macro (also control by cmake) to use static string buffer to store device info */ /* To use specific storing methods like files/flash, disable this macro and implement dedicated methods */ #define DEBUG_DEV_INFO_USED #ifdef DEBUG_DEV_INFO_USED /* product Id */ -static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; +static char sg_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = PKG_USING_TENCENT_IOT_EXPLORER_PRODUCT_ID; /* device name */ -static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_DEV_NAME"; +static char sg_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = PKG_USING_TENCENT_IOT_EXPLORER_DEVICE_NAME; #ifdef DEV_DYN_REG_ENABLED /* product secret for device dynamic Registration */ -static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = "YOUR_PRODUCT_SECRET"; +static char sg_product_secret[MAX_SIZE_OF_PRODUCT_SECRET + 1] = PKG_USING_TENCENT_IOT_EXPLORER_PRODUCT_SECRET; #endif #ifdef AUTH_MODE_CERT @@ -45,14 +49,21 @@ static char sg_device_cert_file_name[MAX_SIZE_OF_DEVICE_CERT_FILE_NAME + 1] static char sg_device_privatekey_file_name[MAX_SIZE_OF_DEVICE_SECRET_FILE_NAME + 1] = "YOUR_DEVICE_NAME_private.key"; #else /* device secret of PSK device */ -static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = "YOUR_IOT_PSK"; +static char sg_device_secret[MAX_SIZE_OF_DEVICE_SECRET + 1] = PKG_USING_TENCENT_IOT_EXPLORER_DEVICE_SECRET; #endif #ifdef GATEWAY_ENABLED -/* sub-device product id */ -static char sg_sub_device_product_id[MAX_SIZE_OF_PRODUCT_ID + 1] = "PRODUCT_ID"; -/* sub-device device name */ -static char sg_sub_device_name[MAX_SIZE_OF_DEVICE_NAME + 1] = "YOUR_SUB_DEV_NAME"; + +static const DeviceInfo sg_subdevList[] = { + {.product_id = "BK7EEF4UIB", .device_name = "dev01"}, + {.product_id = "BK7EEF4UIB", .device_name = "dev02"}, + {.product_id = "BK7EEF4UIB", .device_name = "dev03"}, + + {.product_id = "7P3KIFQ1JD", .device_name = "test01"}, + {.product_id = "7P3KIFQ1JD", .device_name = "test02"}, + {.product_id = "7P3KIFQ1JD", .device_name = "test03"} +}; + #endif static int device_info_copy(void *pdst, void *psrc, uint8_t max_len) @@ -135,26 +146,36 @@ int HAL_GetGwDevInfo(void *pgwDeviceInfo) { POINTER_SANITY_CHECK(pgwDeviceInfo, QCLOUD_ERR_DEV_INFO); int ret; + int i; + GatewayDeviceInfo *gwDevInfo = (GatewayDeviceInfo *)pgwDeviceInfo; memset((char *)gwDevInfo, 0, sizeof(GatewayDeviceInfo)); #ifdef DEBUG_DEV_INFO_USED ret = HAL_GetDevInfo(&(gwDevInfo->gw_info));//get gw dev info - //only one sub-device is supported now - gwDevInfo->sub_dev_num = 1; - //copy sub dev info - ret = device_info_copy(gwDevInfo->sub_dev_info[0].product_id, sg_sub_device_product_id, MAX_SIZE_OF_PRODUCT_ID); - ret |= device_info_copy(gwDevInfo->sub_dev_info[0].device_name, sg_sub_device_name, MAX_SIZE_OF_DEVICE_NAME); + if (sizeof(sg_subdevList) / sizeof(sg_subdevList[0]) > MAX_NUM_SUB_DEV) { + gwDevInfo->sub_dev_num = MAX_NUM_SUB_DEV; + } else { + gwDevInfo->sub_dev_num = sizeof(sg_subdevList) / sizeof(sg_subdevList[0]); + } -#else - Log_e("HAL_GetDevInfo from json not implement yet"); - ret = QCLOUD_ERR_DEV_INFO; + for (i = 0; i < gwDevInfo->sub_dev_num; i++) { + //copy sub dev info + ret = device_info_copy(gwDevInfo->sub_dev_info[i].product_id, sg_subdevList[i].product_id, MAX_SIZE_OF_PRODUCT_ID); + ret |= device_info_copy(gwDevInfo->sub_dev_info[i].device_name, sg_subdevList[i].device_name, MAX_SIZE_OF_DEVICE_NAME); + } #endif if (QCLOUD_RET_SUCCESS != ret) { Log_e("Get gateway device info err"); ret = QCLOUD_ERR_DEV_INFO; + } else { + Log_d("sub device num:%d", gwDevInfo->sub_dev_num); + for (i = 0; i < gwDevInfo->sub_dev_num; i++) { + Log_d("%dth subDevPid:%s subDevName:%s", i, gwDevInfo->sub_dev_info[i].product_id, gwDevInfo->sub_dev_info[i].device_name); + } } return ret; } + #endif diff --git a/platform/os/rtthread/HAL_OS_rtthread.c b/platform/os/rtthread/HAL_OS_rtthread.c index c72cff6..10bb488 100644 --- a/platform/os/rtthread/HAL_OS_rtthread.c +++ b/platform/os/rtthread/HAL_OS_rtthread.c @@ -70,8 +70,6 @@ void *HAL_MutexCreate(void) } return mutex; - - } void HAL_MutexDestroy(_IN_ void *mutex) @@ -136,4 +134,28 @@ void HAL_SleepMs(_IN_ uint32_t ms) (void)rt_thread_delay(rt_tick_from_millisecond(ms)); } +#if ((defined(MULTITHREAD_ENABLED)) || (defined AT_TCP_ENABLED)) +void * HAL_ThreadCreate(uint16_t stack_size, int priority, char * taskname, void *(*fn)(void*), void* arg) +{ +#define DEFAULT_TASK_TICK 10 + rt_thread_t tid; + tid = rt_thread_create(taskname, fn, arg, stack_size, priority, DEFAULT_TASK_TICK); + + if (tid != RT_NULL) { + rt_thread_startup(tid); + } + + return (void *)tid; +#undef DEFAULT_TASK_TICK +} + +int HAL_ThreadDestroy(void* threadId) +{ + int ret; + ret = rt_thread_delete(threadId); + + return ret; +} +#endif + diff --git a/platform/tls/mbedtls/HAL_TLS_mbedtls.c b/platform/tls/mbedtls/HAL_TLS_mbedtls.c index f6edd1c..a4b1d88 100644 --- a/platform/tls/mbedtls/HAL_TLS_mbedtls.c +++ b/platform/tls/mbedtls/HAL_TLS_mbedtls.c @@ -34,6 +34,8 @@ extern "C" { #include "mbedtls/net_sockets.h" #include "mbedtls/ctr_drbg.h" #include "mbedtls/error.h" +#include "mbedtls/debug.h" + #include "utils_timer.h" @@ -72,6 +74,17 @@ static void _free_mebedtls(TLSDataParams *pParams) HAL_Free(pParams); } +#if defined(MBEDTLS_DEBUG_C) +#define DEBUG_LEVEL 0 +static void _ssl_debug( void *ctx, int level, + const char *file, int line, + const char *str ) +{ + Log_i("[mbedTLS]:[%s]:[%d]: %s\r\n", file, line, str); +} + +#endif + /** * @brief mbedtls SSL client init * @@ -87,6 +100,9 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC { int ret = QCLOUD_RET_SUCCESS; + + + mbedtls_net_init(&(pDataParams->socket_fd)); mbedtls_ssl_init(&(pDataParams->ssl)); mbedtls_ssl_config_init(&(pDataParams->ssl_conf)); @@ -96,6 +112,13 @@ static int _mbedtls_client_init(TLSDataParams *pDataParams, TLSConnectParams *pC mbedtls_pk_init(&(pDataParams->private_key)); mbedtls_entropy_init(&(pDataParams->entropy)); + +#if defined(MBEDTLS_DEBUG_C) + mbedtls_debug_set_threshold( DEBUG_LEVEL ); + mbedtls_ssl_conf_dbg(&pDataParams->ssl_conf, _ssl_debug, NULL); +#endif + + // custom parameter is NULL for now if ((ret = mbedtls_ctr_drbg_seed(&(pDataParams->ctr_drbg), mbedtls_entropy_func, &(pDataParams->entropy), NULL, 0)) != 0) { diff --git a/samples/data_template/data_template_sample.c b/samples/data_template/data_template_sample.c index ff682d6..9bd33ef 100644 --- a/samples/data_template/data_template_sample.c +++ b/samples/data_template/data_template_sample.c @@ -27,7 +27,7 @@ static DeviceInfo sg_devInfo; static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; static bool sg_control_msg_arrived = false; static char sg_data_report_buffer[2048]; -size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_data_report_buffer[0]); +static size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_data_report_buffer[0]); #ifdef EVENT_POST_ENABLED @@ -52,7 +52,7 @@ static void update_events_timestamp(sEvent *pEvents, int count) static void event_post_cb(void *pClient, MQTTMessage *msg) { Log_d("Reply:%.*s", msg->payload_len, msg->payload); -// IOT_Event_clearFlag(pClient, FLAG_EVENT0 | FLAG_EVENT1 | FLAG_EVENT2); +// IOT_Event_clearFlag(pClient, FLAG_EVENT0 | FLAG_EVENT1 | FLAG_EVENT2); } //event check and post @@ -71,7 +71,7 @@ static void eventPostCheck(void *client) if ((eflag & (1 << i))&ALL_EVENTS_MASK) { pEventList[event_count++] = &(g_events[i]); update_events_timestamp(&g_events[i], 1); - IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); + IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); } } @@ -424,7 +424,7 @@ int main(int argc, char **argv) Log_i("Register data template propertys Success"); } else { Log_e("Register data template propertys Failed: %d", rc); - goto exit; + goto exit; } //register data template actions here @@ -519,15 +519,15 @@ int main(int argc, char **argv) HAL_SleepMs(3000); } - + exit: rc = IOT_Template_Destroy(client); - + #ifdef MULTITHREAD_ENABLED - if (NULL != yield_thread_t) { - HAL_ThreadDestroy((void *)yield_thread_t); - } + if (NULL != yield_thread_t) { + HAL_ThreadDestroy((void *)yield_thread_t); + } #endif return rc; diff --git a/samples/gateway/gateway_sample.c b/samples/gateway/gateway_sample.c index 3af675b..1b951da 100644 --- a/samples/gateway/gateway_sample.c +++ b/samples/gateway/gateway_sample.c @@ -198,7 +198,7 @@ static void *gateway_yield_thread(void *ptr) int rc = QCLOUD_RET_SUCCESS; void *pClient = ptr; - + Log_d("gateway yield thread start ..."); while (sg_thread_running) { rc = IOT_Gateway_Yield(pClient, 200); @@ -310,12 +310,12 @@ int main(int argc, char **argv) } else { Log_e("create sub_dev light thread success"); } - continue; + continue; } -#endif +#endif - memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); - size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/down/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); + memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/down/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); if (size < 0 || size > MAX_SIZE_OF_TOPIC) { Log_e("buf size < topic length!"); @@ -331,44 +331,44 @@ int main(int argc, char **argv) } } - HAL_SleepMs(2000); /*wait subcribe ack*/ + HAL_SleepMs(2000); /*wait subcribe ack*/ // publish to sub-device data_template up stream topic for example PublishParams pub_param = DEFAULT_PUB_PARAMS; pub_param.qos = QOS0; - -//pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"data\":\"err reply wil received\"}}"; - pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{}}"; - pub_param.payload_len = strlen(pub_param.payload); + +//pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{\"data\":\"err reply wil received\"}}"; + pub_param.payload = "{\"method\":\"report\",\"clientToken\":\"123\",\"params\":{}}"; + pub_param.payload_len = strlen(pub_param.payload); for (i = 0; i < gw->sub_dev_num; i++) { subDevInfo = &gw->sub_dev_info[i]; -#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT - if ((0 == strcmp(subDevInfo->product_id, LIGHT_SUB_DEV_PRODUCT_ID)) - && (0 == strcmp(subDevInfo->device_name, LIGHT_SUB_DEV_NAME))) { - continue; +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + if ((0 == strcmp(subDevInfo->product_id, LIGHT_SUB_DEV_PRODUCT_ID)) + && (0 == strcmp(subDevInfo->device_name, LIGHT_SUB_DEV_NAME))) { + continue; } -#endif - memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); - size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/up/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); +#endif + memset(topic_filter, 0, MAX_SIZE_OF_TOPIC + 1); + size = HAL_Snprintf(topic_filter, MAX_SIZE_OF_TOPIC, "$thing/up/property/%s/%s", subDevInfo->product_id, subDevInfo->device_name); if (size < 0 || size > MAX_SIZE_OF_TOPIC) { Log_e("buf size < topic length!"); return QCLOUD_ERR_FAILURE; } - + rc = IOT_Gateway_Publish(client, topic_filter, &pub_param); if (rc < 0) { Log_e("IOT_Gateway_Publish fail."); - } + } } exit: -#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT - if(NULL != light_thread_t){ - pthread_join(*light_thread_t, NULL); - } -#endif +#ifdef SUB_DEV_USE_DATA_TEMPLATE_LIGHT + if (NULL != light_thread_t) { + pthread_join(*light_thread_t, NULL); + } +#endif //set GateWay device info param.product_id = gw->gw_info.product_id; @@ -388,15 +388,15 @@ int main(int argc, char **argv) Log_d("subDev Pid:%s devName:%s offline success.", subDevInfo->product_id, subDevInfo->device_name); } } - + if (errCount > 0) { Log_e("%d of %d sub devices offline fail", errCount, gw->sub_dev_num); } - //stop running thread - sg_thread_running = false; - HAL_SleepMs(1000); /*make sure no thread use client before destroy*/ - + //stop running thread + sg_thread_running = false; + HAL_SleepMs(1000); /*make sure no thread use client before destroy*/ + rc = IOT_Gateway_Destroy(client); if (NULL != yield_thread_t) { HAL_ThreadDestroy((void *)yield_thread_t); diff --git a/samples/gateway/sub_dev001.c b/samples/gateway/sub_dev001.c index e9bbba7..633f1e5 100644 --- a/samples/gateway/sub_dev001.c +++ b/samples/gateway/sub_dev001.c @@ -456,27 +456,27 @@ static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) } if (eCHANGED == get_property_state(&light->m_light_switch)) { -#ifdef EVENT_POST_ENABLED - if (light->m_light_switch) { - //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); - //strcpy(sg_message,"light on"); - //sg_status = 1; - *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; - memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); - strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light on"); - } else { - //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); - //strcpy(sg_message,"light off"); - //sg_status = 0; - *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; - memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); - strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); - } - - //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck - IOT_Event_setFlag(client, FLAG_EVENT0); +#ifdef EVENT_POST_ENABLED + if (light->m_light_switch) { + //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + //strcpy(sg_message,"light on"); + //sg_status = 1; + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light on"); + } else { + //memset(sg_message, 0, MAX_EVENT_STR_MESSAGE_LEN); + //strcpy(sg_message,"light off"); + //sg_status = 0; + *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 0; + memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); + strcpy((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, "light off"); + } + + //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck + IOT_Event_setFlag(client, FLAG_EVENT0); #else - Log_d("light switch state changed"); + Log_d("light switch state changed"); #endif } } @@ -603,7 +603,7 @@ void* sub_dev1_thread(void *ptr, char *product_id, char *device_name) } #endif - HAL_SleepMs(1000); //wait subcrible ack + HAL_SleepMs(1000); //wait subcrible ack //report device info, then you can manager your product by these info, like position rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); if (QCLOUD_RET_SUCCESS == rc) { @@ -629,11 +629,11 @@ void* sub_dev1_thread(void *ptr, char *product_id, char *device_name) InitTimer(&sg_reportTimer); while (IOT_Template_IsConnected(client) || QCLOUD_RET_SUCCESS == rc) { - - rc = IOT_Template_Yield_Without_MQTT_Yield(client, 200); - if(QCLOUD_RET_SUCCESS != rc){ - Log_d("Template Yield without mqtt err, rc:%d", rc); - } + + rc = IOT_Template_Yield_Without_MQTT_Yield(client, 200); + if (QCLOUD_RET_SUCCESS != rc) { + Log_d("Template Yield without mqtt err, rc:%d", rc); + } /* handle control msg from server */ if (sg_control_msg_arrived) { @@ -680,6 +680,6 @@ void* sub_dev1_thread(void *ptr, char *product_id, char *device_name) HAL_SleepMs(1000); } - rc = IOT_Template_Destroy_Except_MQTT(client); + rc = IOT_Template_Destroy_Except_MQTT(client); return NULL; } diff --git a/samples/ota/ota_mqtt_sample.c b/samples/ota/ota_mqtt_sample.c index 729faf2..c7db1ba 100644 --- a/samples/ota/ota_mqtt_sample.c +++ b/samples/ota/ota_mqtt_sample.c @@ -337,19 +337,19 @@ int main(int argc, char **argv) break; } - //finish download but not report state - if(offset == size_file) { - Log_d("download success last time without report!"); - upgrade_fetch_success = true; - - /* get fw information */ + //finish download but not report state + if (offset == size_file) { + Log_d("download success last time without report!"); + upgrade_fetch_success = true; + + /* get fw information */ IOT_OTA_Ioctl(h_ota, IOT_OTAG_MD5SUM, md5sum, 33); IOT_OTA_Ioctl(h_ota, IOT_OTAG_VERSION, version, 128); - size_downloaded = size_file; - break; - } + size_downloaded = size_file; + break; + } - /*start http connect*/ + /*start http connect*/ rc = IOT_OTA_StartDownload(h_ota, offset, size_file); if (QCLOUD_RET_SUCCESS != rc) { Log_e("OTA download start err,rc:%d", rc); @@ -357,7 +357,7 @@ int main(int argc, char **argv) break; } - /*cal file md5*/ + /*cal file md5*/ //Log_d("Get offset:%d(%x)", offset, offset); if (offset > 0) { if (NULL == (fp = fopen("ota.bin", "ab+"))) { @@ -372,8 +372,8 @@ int main(int argc, char **argv) break; } - /*set offset*/ - fseek(fp, offset, SEEK_SET); + /*set offset*/ + fseek(fp, offset, SEEK_SET); } else { if (NULL == (fp = fopen("ota.bin", "wb+"))) { Log_e("open file failed"); @@ -381,7 +381,7 @@ int main(int argc, char **argv) break; } } - + do { len = IOT_OTA_FetchYield(h_ota, buf_ota, OTA_BUF_LEN, 1); diff --git a/samples/raw_data/raw_data_sample.c b/samples/raw_data/raw_data_sample.c index 3dbfc6f..bd1ee24 100644 --- a/samples/raw_data/raw_data_sample.c +++ b/samples/raw_data/raw_data_sample.c @@ -33,7 +33,7 @@ typedef struct _sTestData_ { typedef struct _sRawDataFrame_ { uint16_t magic_head; uint8_t msg_type; - uint8_t res_byte; + uint8_t res_byte; uint32_t clientId; sTestData data; } sRawDataFrame; @@ -185,33 +185,33 @@ static int _setup_connect_init_params(MQTTInitParams* initParams) static void HexDump(uint8_t *pData, uint16_t len) { - int i; - + int i; + for (i = 0; i < len; i++) { if (i % 32 == 0) { HAL_Printf("\n"); } HAL_Printf(" %02X", pData[i]); } - HAL_Printf("\n"); + HAL_Printf("\n"); } // publish raw data msg static int _publish_raw_data_msg(void *client, QoS qos) { sRawDataFrame raw_data; - + memset((char *)&raw_data, 0, sizeof(sRawDataFrame)); raw_data.magic_head = MAGIC_HEAD_NUM; raw_data.msg_type = eMSG_REPORT; raw_data.clientId = sg_client_id++; - srand((unsigned)HAL_GetTimeMs()); + srand((unsigned)HAL_GetTimeMs()); raw_data.data.m_power_switch = 1; - raw_data.data.m_color = rand()%3; + raw_data.data.m_color = rand() % 3; raw_data.data.m_brightness = rand() % 100; - + char topicName[128] = {0}; sprintf(topicName, "$thing/up/raw/%s/%s", sg_devInfo.product_id, sg_devInfo.device_name); @@ -235,7 +235,7 @@ static void on_raw_data_message_callback(void *pClient, MQTTMessage *message, vo Log_i("Receive Message With topicName:%.*s, payloadlen:%d", (int) message->topic_len, message->ptopic, (int) message->payload_len); Log_d("raw_data reveived dump:"); - HexDump((uint8_t *)message->payload, (int)message->payload_len); + HexDump((uint8_t *)message->payload, (int)message->payload_len); } // subscrib MQTT topic diff --git a/samples/scenarized/light_data_template_sample.c b/samples/scenarized/light_data_template_sample.c index d49160e..349b9d3 100644 --- a/samples/scenarized/light_data_template_sample.c +++ b/samples/scenarized/light_data_template_sample.c @@ -41,7 +41,7 @@ static Timer sg_reportTimer; static MQTTEventType sg_subscribe_event_result = MQTT_EVENT_UNDEF; static bool sg_control_msg_arrived = false; static char sg_data_report_buffer[2048]; -size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_data_report_buffer[0]); +static size_t sg_data_report_buffersize = sizeof(sg_data_report_buffer) / sizeof(sg_data_report_buffer[0]); /*data_config.c can be generated by tools/codegen.py -c xx/product.json*/ @@ -196,7 +196,7 @@ static void eventPostCheck(void *client) if ((eflag & (1 << i))&ALL_EVENTS_MASK) { pEventList[EventCont++] = &(g_events[i]); update_events_timestamp(&g_events[i], 1); - IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); + IOT_Event_clearFlag(client, (1 << i)&ALL_EVENTS_MASK); } } @@ -506,7 +506,7 @@ static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) } if (eCHANGED == get_property_state(&light->m_light_switch)) { -#ifdef EVENT_POST_ENABLED +#ifdef EVENT_POST_ENABLED if (light->m_light_switch) { *(TYPE_DEF_TEMPLATE_BOOL *)g_events[0].pEventData[0].data = 1; memset((TYPE_DEF_TEMPLATE_STRING *)g_events[0].pEventData[1].data, 0, MAX_EVENT_STR_MESSAGE_LEN); @@ -520,7 +520,7 @@ static void deal_down_stream_user_logic(void *client, ProductDataDefine *light) //switch state changed set EVENT0 flag, the events will be posted by eventPostCheck IOT_Event_setFlag(client, FLAG_EVENT0); #else - Log_d("light switch state changed"); + Log_d("light switch state changed"); #endif } } @@ -685,7 +685,7 @@ int main(int argc, char **argv) rc = _get_sys_info(client, sg_data_report_buffer, sg_data_report_buffersize); if (QCLOUD_RET_SUCCESS == rc) { rc = IOT_Template_Report_SysInfo_Sync(client, sg_data_report_buffer, sg_data_report_buffersize, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { + if (rc != QCLOUD_RET_SUCCESS) { Log_e("Report system info fail, err: %d", rc); } } else { @@ -694,7 +694,7 @@ int main(int argc, char **argv) //get the property changed during offline rc = IOT_Template_GetStatus_sync(client, QCLOUD_IOT_MQTT_COMMAND_TIMEOUT); - if (rc != QCLOUD_RET_SUCCESS) { + if (rc != QCLOUD_RET_SUCCESS) { Log_e("Get data status fail, err: %d", rc); } else { Log_d("Get data status success"); diff --git a/sdk_src/services/data_template/data_template_event.c b/sdk_src/services/data_template/data_template_event.c index 45200f4..8c9687c 100644 --- a/sdk_src/services/data_template/data_template_event.c +++ b/sdk_src/services/data_template/data_template_event.c @@ -306,7 +306,7 @@ static int _iot_construct_event_json(void *handle, char *jsonBuffer, size_t size } else { //single sEvent *pEvent = pEventArry[0]; if (0 == pEvent->timestamp) { //no accurate UTC time, set 0 - rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "{\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{", \ + rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":0, \"params\":{", \ pEvent->event_name, pEvent->type); } else { // accurate UTC time is second,change to ms rc_of_snprintf = HAL_Snprintf(jsonBuffer + strlen(jsonBuffer), remain_size, "\"eventId\":\"%s\", \"type\":\"%s\", \"timestamp\":%u000, \"params\":{", \ diff --git a/sdk_src/services/gateway/gateway_common.c b/sdk_src/services/gateway/gateway_common.c index d659feb..b9ca01d 100644 --- a/sdk_src/services/gateway/gateway_common.c +++ b/sdk_src/services/gateway/gateway_common.c @@ -83,7 +83,7 @@ static void _gateway_message_handler(void *client, MQTTMessage *message, void *u cloud_rcv_len = Min(GATEWAY_RECEIVE_BUFFER_LEN - 1, message->payload_len); memcpy(cloud_rcv_buf, message->payload, cloud_rcv_len + 1); cloud_rcv_buf[cloud_rcv_len] = '\0'; // jsmn_parse relies on a string -// Log_d("recv:%s", cloud_rcv_buf); +// Log_d("recv:%s", cloud_rcv_buf); if (!get_json_type(cloud_rcv_buf, &type)) { Log_e("Fail to parse type from msg: %s", cloud_rcv_buf); @@ -238,8 +238,8 @@ SubdevSession* subdev_find_session(Gateway *gateway, char *product_id, char *dev /* session is exist */ while (session) { - if (0 == strcmp(session->product_id, product_id) && - 0 == strcmp(session->device_name, device_name)) { + if (0 == strcmp(session->product_id, product_id) && + 0 == strcmp(session->device_name, device_name)) { IOT_FUNC_EXIT_RC(session); } @@ -296,8 +296,8 @@ int subdev_remove_session(Gateway *gateway, char *product_id, char *device_name) /* session is exist */ while (cur_session) { - if (0 == strcmp(cur_session->product_id, product_id) && - 0 == strcmp(cur_session->device_name, device_name) ) { + if (0 == strcmp(cur_session->product_id, product_id) && + 0 == strcmp(cur_session->device_name, device_name) ) { if (cur_session == gateway->session_list) { gateway->session_list = cur_session->next; } else { @@ -334,12 +334,12 @@ int gateway_publish_sync(Gateway *gateway, char *topic, PublishParams *params, i Log_i("loop max count, time out."); IOT_FUNC_EXIT_RC(QCLOUD_ERR_GATEWAY_SESSION_TIMEOUT); } - + #ifndef MULTITHREAD_ENABLED IOT_Gateway_Yield(gateway, 200); #else - HAL_SleepMs(1); -#endif + HAL_SleepMs(1); +#endif loop_count++; } diff --git a/sdk_src/utils/json_token.c b/sdk_src/utils/json_token.c index 143a5f4..f29e8c8 100644 --- a/sdk_src/utils/json_token.c +++ b/sdk_src/utils/json_token.c @@ -24,6 +24,15 @@ #include "lite-utils.h" #include "qcloud_iot_export_error.h" +#ifndef SCNi8 +#define SCNi8 "hhi" +#endif + +#ifndef SCNu8 +#define SCNu8 "hhu" +#endif + + char *LITE_json_value_of(char *key, char *src) { char *value = NULL;