diff --git a/IDE/MQX/Makefile b/IDE/MQX/Makefile new file mode 100644 index 000000000..3ee997700 --- /dev/null +++ b/IDE/MQX/Makefile @@ -0,0 +1,153 @@ +WOLF_ROOT = ../.. +MQX_ROOT = $(WOLF_ROOT)/../../../Freescale/Freescale_MQX_4_1/ +CC = arm-none-eabi-gcc +AR = arm-none-eabi-ar + +WOLFLIB = ./libwolfssl.a +MQXLIB = + +OPTIMIZE = -O2 + +WORNING = \ + -Wno-int-to-pointer-cast\ + -Wno-incompatible-pointer-types\ + -Wno-discarded-qualifiers\ + -Wno-int-conversion\ + -Wno-implicit-function-declaration\ + -Wno-pointer-to-int-cast + +USER_SETTINGS_H = -I./ -DWOLFSSL_USER_SETTINGS +CFLAGS = $(OPTIMIZE) -I$(WOLF_ROOT)/. $(USER_SETTINGS_H) $(MQX_INCLUDE) $(WORNING) + +MQX_INCLUDE = -I$(MQX_ROOT)/mqx/source/include\ +-I$(MQX_ROOT)/mqx/source/psp/cortex_m\ +-I$(MQX_ROOT)/mqx/source/psp/cortex_a/compiler/gcc_arm\ +-I$(MQX_ROOT)/mqx/source/psp/cortex_m/cpu\ +-I$(MQX_ROOT)/mfs/source/include\ +-I$(MQX_ROOT)/mqx/source/bsp/twrk70f120m\ +-I$(MQX_ROOT)/mqx/source/io/cm\ +-I$(MQX_ROOT)/mqx/source/io/lpm\ +-I$(MQX_ROOT)/mqx/source/io/serial\ +-I$(MQX_ROOT)/mqx/source/io/dma\ +-I$(MQX_ROOT)/mqx/source/io/spi\ +-I$(MQX_ROOT)/mqx/source/io/i2c\ +-I$(MQX_ROOT)/mqx/source/io/io_mem\ +-I$(MQX_ROOT)/mqx/source/io/io_null\ +-I$(MQX_ROOT)/mqx/source/io/enet\ +-I$(MQX_ROOT)/mqx/source/io/enet/macnet\ +-I$(MQX_ROOT)/mqx/source/io/lwgpio\ +-I$(MQX_ROOT)/mqx/source/io/gpio\ +-I$(MQX_ROOT)/mqx/source/io/gpio/kgpio\ +-I$(MQX_ROOT)/mqx/source/io/esdhc\ +-I$(MQX_ROOT)/mqx/source/io/sdcard\ +-I$(MQX_ROOT)/mqx/source/io/sdcard/sdcard_spi\ +-I$(MQX_ROOT)/mqx/source/io/sdcard/sdcard_esdhc\ +-I$(MQX_ROOT)/mqx/source/io/pccard\ +-I$(MQX_ROOT)/mqx/source/io/pcflash\ +-I$(MQX_ROOT)/mqx/source/io/adc/kadc\ +-I$(MQX_ROOT)/mqx/source/io/adc\ +-I$(MQX_ROOT)/mqx/source/io/lwadc\ +-I$(MQX_ROOT)/mqx/source/io/flashx\ +-I$(MQX_ROOT)/mqx/source/io/flashx/freescale\ +-I$(MQX_ROOT)/mqx/source/io/hwtimer\ +-I$(MQX_ROOT)/mqx/source/io/rtc\ +-I$(MQX_ROOT)/mqx/source/io/debug\ +-I$(MQX_ROOT)/mqx/source/io/tchres\ +-I$(MQX_ROOT)/mqx/source/io/nandflash\ +-I$(MQX_ROOT)/mqx/source/io/timer\ +-I$(MQX_ROOT)/mqx/source/io/usb\ +-I$(MQX_ROOT)/mqx/source/io/hmi\ +-I$(MQX_ROOT)/mqx/source/io/sai\ +-I$(MQX_ROOT)/mqx/source/io/rtcs\ +-I$(MQX_ROOT)/rtcs/source/include + +OBJ =\ +$(WOLF_ROOT)/src/crl.o\ +$(WOLF_ROOT)/src/internal.o\ +$(WOLF_ROOT)/src/keys.o\ +$(WOLF_ROOT)/src/ocsp.o\ +$(WOLF_ROOT)/src/sniffer.o\ +$(WOLF_ROOT)/src/ssl.o\ +$(WOLF_ROOT)/src/tls13.o\ +$(WOLF_ROOT)/src/tls.o\ +$(WOLF_ROOT)/src/wolfio.o\ +$(WOLF_ROOT)/wolfcrypt/src/aes.o\ +$(WOLF_ROOT)/wolfcrypt/src/arc4.o\ +$(WOLF_ROOT)/wolfcrypt/src/asm.o\ +$(WOLF_ROOT)/wolfcrypt/src/asn.o\ +$(WOLF_ROOT)/wolfcrypt/src/blake2b.o\ +$(WOLF_ROOT)/wolfcrypt/src/blake2s.o\ +$(WOLF_ROOT)/wolfcrypt/src/camellia.o\ +$(WOLF_ROOT)/wolfcrypt/src/chacha20_poly1305.o\ +$(WOLF_ROOT)/wolfcrypt/src/chacha.o\ +$(WOLF_ROOT)/wolfcrypt/src/cmac.o\ +$(WOLF_ROOT)/wolfcrypt/src/coding.o\ +$(WOLF_ROOT)/wolfcrypt/src/compress.o\ +$(WOLF_ROOT)/wolfcrypt/src/cpuid.o\ +$(WOLF_ROOT)/wolfcrypt/src/cryptocb.o\ +$(WOLF_ROOT)/wolfcrypt/src/curve25519.o\ +$(WOLF_ROOT)/wolfcrypt/src/des3.o\ +$(WOLF_ROOT)/wolfcrypt/src/dh.o\ +$(WOLF_ROOT)/wolfcrypt/src/dsa.o\ +$(WOLF_ROOT)/wolfcrypt/src/ecc.o\ +$(WOLF_ROOT)/wolfcrypt/src/ecc_fp.o\ +$(WOLF_ROOT)/wolfcrypt/src/ed25519.o\ +$(WOLF_ROOT)/wolfcrypt/src/error.o\ +$(WOLF_ROOT)/wolfcrypt/src/fe_low_mem.o\ +$(WOLF_ROOT)/wolfcrypt/src/fe_operations.o\ +$(WOLF_ROOT)/wolfcrypt/src/ge_low_mem.o\ +$(WOLF_ROOT)/wolfcrypt/src/ge_operations.o\ +$(WOLF_ROOT)/wolfcrypt/src/hash.o\ +$(WOLF_ROOT)/wolfcrypt/src/hc128.o\ +$(WOLF_ROOT)/wolfcrypt/src/hmac.o\ +$(WOLF_ROOT)/wolfcrypt/src/idea.o\ +$(WOLF_ROOT)/wolfcrypt/src/integer.o\ +$(WOLF_ROOT)/wolfcrypt/src/logging.o\ +$(WOLF_ROOT)/wolfcrypt/src/md2.o\ +$(WOLF_ROOT)/wolfcrypt/src/md4.o\ +$(WOLF_ROOT)/wolfcrypt/src/md5.o\ +$(WOLF_ROOT)/wolfcrypt/src/memory.o\ +$(WOLF_ROOT)/wolfcrypt/src/pkcs12.o\ +$(WOLF_ROOT)/wolfcrypt/src/pkcs7.o\ +$(WOLF_ROOT)/wolfcrypt/src/poly1305.o\ +$(WOLF_ROOT)/wolfcrypt/src/pwdbased.o\ +$(WOLF_ROOT)/wolfcrypt/src/rabbit.o\ +$(WOLF_ROOT)/wolfcrypt/src/random.o\ +$(WOLF_ROOT)/wolfcrypt/src/ripemd.o\ +$(WOLF_ROOT)/wolfcrypt/src/rsa.o\ +$(WOLF_ROOT)/wolfcrypt/src/sha256.o\ +$(WOLF_ROOT)/wolfcrypt/src/sha3.o\ +$(WOLF_ROOT)/wolfcrypt/src/sha512.o\ +$(WOLF_ROOT)/wolfcrypt/src/sha.o\ +$(WOLF_ROOT)/wolfcrypt/src/signature.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_arm32.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_arm64.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_armthumb.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_c32.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_c64.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_cortexm.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_int.o\ +$(WOLF_ROOT)/wolfcrypt/src/sp_x86_64.o\ +$(WOLF_ROOT)/wolfcrypt/src/srp.o\ +$(WOLF_ROOT)/wolfcrypt/src/tfm.o\ +$(WOLF_ROOT)/wolfcrypt/src/wc_encrypt.o\ +$(WOLF_ROOT)/wolfcrypt/src/wc_pkcs11.o\ +$(WOLF_ROOT)/wolfcrypt/src/wc_port.o\ +$(WOLF_ROOT)/wolfcrypt/src/wolfevent.o\ +$(WOLF_ROOT)/wolfcrypt/src/wolfmath.o + + +all : wolfssllib client server test benchmark + +wolfssllib : $(OBJ) + $(AR) r $(WOLFLIB) $(OBJ) +test : wolfssllib ./user_settings.h + $(CC) -o test $(CFLAGS) $(WOLF_ROOT)/wolfcrypt/test/test.c $(WOLFLIB) $(MQXLIB) +benchmark : wolfssllib ./user_settings.h + $(CC) -o benchmark $(CFLAGS) $(WOLF_ROOT)/wolfcrypt/benchmark/benchmark.c $(WOLFLIB) $(WOLFLIB) $(MQXLIB) +server : wolfssllib ./user_settings.h + $(CC) -o server $(CFLAGS) $(WOLF_ROOT)/IDE/MQX/server-tls.c $(WOLFLIB) $(MQXLIB) +client : wolfssllib ./user_settings.h + $(CC) -o client $(CFLAGS) $(WOLF_ROOT)/IDE/MQX/client-tls.c $(WOLFLIB) $(MQXLIB) +clean : + rm $(OBJ) $(WOLFLIB) diff --git a/IDE/MQX/README-jp.md b/IDE/MQX/README-jp.md new file mode 100644 index 000000000..093e98b6b --- /dev/null +++ b/IDE/MQX/README-jp.md @@ -0,0 +1,29 @@ +# MQX向けビルド方法 +## 概要 +このMakefileはwolfSSLライブラリーとサンプルプログラムをMQX向けにビルドするためのものです。 +以下のターゲットを含んでいます。 + - wolfssllib: wolfSSL静的ライブラリー + - test: 暗号アルゴリズムのテスト + - benchmark: 暗号アルゴリズムのベンチマーク + - client: TLS クライアントサンプルプログラム + - server: TLS サーバサンプルプログラム + + +## 準備 +- 事前にGCCをインストールしておいてください。 + GNU Arm Embedded Toolchain, https://developer.arm.com +- 事前にMQXをインストールしておいてください。 + Freescale MQX RTOS 4.1以降, https://www.nxp.com/ + Freescale_MQX_4_1/doc/MQX_Getting_Started.pdfをご参照ください。 + +## 設定 +- wolfSSL コンフィグレーションオプション + /IDE/MQX/user_settings.hファイルに必要なオプションを追加または削除してください。 + +- Makefileの設定 + MQX_ROOT: MQX のインストールパス + MQXLIB: リンクするMQX ライブラリのパス + CC: コンパイラコマンド + AR: ARコマンド + WOLF_ROOT: Makefileの格納位置を変える場合はこの定義を変更してください + \ No newline at end of file diff --git a/IDE/MQX/README.md b/IDE/MQX/README.md new file mode 100644 index 000000000..8fb38daa3 --- /dev/null +++ b/IDE/MQX/README.md @@ -0,0 +1,27 @@ +#How to build with MQX +## Overview +This Makefile is for building wolfSSL library and sample programs running with MQX. +It has following targets. + - wolfssllib: wolfSSL static library (libwolfssl.a) + - test: crypt test + - benchmark: cypher benchmark + - client: TLS client example + - server: TLS server example + +## Prerequisites +- Installed GCC + Download from GNU Arm Embedded Toolchain at https://developer.arm.com/ +- Installed MQX + Download Freescale MQX RTOS 4.1 or later at https://www.nxp.com/ + Follow Freescale_MQX_4_1/doc/MQX_Getting_Started.pdf + +## Setup +- wolfSSL configuration parameters + You can add or remove configuration options in /IDE/MQX/user_settings.h. + +- Setup Makefile + MQX_ROOT: MQX source code installed path + MQXLIB: MQX library path to like with + CC: compiler + AR: archiver + WOLF_ROOT: change this if you move this Makefile location diff --git a/IDE/MQX/client-tls.c b/IDE/MQX/client-tls.c new file mode 100644 index 000000000..b16987624 --- /dev/null +++ b/IDE/MQX/client-tls.c @@ -0,0 +1,163 @@ +/* client-tls.c + * + * Copyright (C) 2006-2020 wolfSSL Inc. + * + * This file is part of wolfSSL. (formerly known as CyaSSL) + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + + +/* wolfSSL */ +#include +#include + +#define DEFAULT_PORT 11111 + +#define CERT_FILE "../certs/ca-cert.pem" + + + +int main(int argc, char** argv) +{ + int sockfd; + struct sockaddr_in servAddr; + char buff[256]; + size_t len; + int ret; + + /* declare wolfSSL objects */ + WOLFSSL_CTX* ctx; + WOLFSSL* ssl; + + + + /* Check for proper calling convention */ + if (argc != 2) { + printf("usage: %s \n", argv[0]); + return 0; + } + + /* Create a socket that uses an internet IPv4 address, + * Sets the socket to be stream based (TCP), + * 0 means choose the default protocol. */ + if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + fprintf(stderr, "ERROR: failed to create the socket\n"); + ret = -1; + goto end; + } + + /* Initialize the server address struct with zeros */ + memset(&servAddr, 0, sizeof(servAddr)); + + /* Fill in the server address */ + servAddr.sin_family = AF_INET; /* using IPv4 */ + servAddr.sin_port = htons(DEFAULT_PORT); /* on DEFAULT_PORT */ + + /* Get the server IPv4 address from the command line call */ + if (inet_pton(AF_INET, argv[1], &servAddr.sin_addr, sizeof(servAddr.sin_addr)) != 1) { + fprintf(stderr, "ERROR: invalid address\n"); + ret = -1; + goto end; + } + + /* Connect to the server */ + if ((ret = connect(sockfd, (struct sockaddr*) &servAddr, sizeof(servAddr))) + == -1) { + fprintf(stderr, "ERROR: failed to connect\n"); + goto end; + } + + /*---------------------------------*/ + /* Start of security */ + /*---------------------------------*/ + /* Initialize wolfSSL */ + if ((ret = wolfSSL_Init()) != WOLFSSL_SUCCESS) { + fprintf(stderr, "ERROR: Failed to initialize the library\n"); + goto socket_cleanup; + } + + /* Create and initialize WOLFSSL_CTX */ + if ((ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method())) == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL_CTX\n"); + ret = -1; + goto socket_cleanup; + } + + /* Load client certificates into WOLFSSL_CTX */ + if ((ret = wolfSSL_CTX_load_verify_locations(ctx, CERT_FILE, NULL)) + != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", + CERT_FILE); + goto ctx_cleanup; + } + + /* Create a WOLFSSL object */ + if ((ssl = wolfSSL_new(ctx)) == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL object\n"); + ret = -1; + goto ctx_cleanup; + } + + /* Attach wolfSSL to the socket */ + if ((ret = wolfSSL_set_fd(ssl, sockfd)) != WOLFSSL_SUCCESS) { + fprintf(stderr, "ERROR: Failed to set the file descriptor\n"); + goto cleanup; + } + + /* Connect to wolfSSL on the server side */ + if ((ret = wolfSSL_connect(ssl)) != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to connect to wolfSSL\n"); + goto cleanup; + } + + /* Get a message for the server from stdin */ + printf("Message for server: "); + memset(buff, 0, sizeof(buff)); + if (fgets(buff, sizeof(buff), stdin) == NULL) { + fprintf(stderr, "ERROR: failed to get message for server\n"); + ret = -1; + goto cleanup; + } + len = strnlen(buff, sizeof(buff)); + + /* Send the message to the server */ + if ((ret = wolfSSL_write(ssl, buff, len)) != len) { + fprintf(stderr, "ERROR: failed to write entire message\n"); + fprintf(stderr, "%d bytes of %d bytes were sent", ret, (int) len); + goto cleanup; + } + + /* Read the server data into our buff array */ + memset(buff, 0, sizeof(buff)); + if ((ret = wolfSSL_read(ssl, buff, sizeof(buff)-1)) == -1) { + fprintf(stderr, "ERROR: failed to read\n"); + goto cleanup; + } + + /* Print to stdout any data the server sends */ + printf("Server: %s\n", buff); + + /* Cleanup and return */ +cleanup: + wolfSSL_free(ssl); /* Free the wolfSSL object */ +ctx_cleanup: + wolfSSL_CTX_free(ctx); /* Free the wolfSSL context object */ + wolfSSL_Cleanup(); /* Cleanup the wolfSSL environment */ +socket_cleanup: + close(sockfd); /* Close the connection to the server */ +end: + return ret; /* Return reporting a success */ +} diff --git a/IDE/MQX/include.am b/IDE/MQX/include.am new file mode 100644 index 000000000..27687d33e --- /dev/null +++ b/IDE/MQX/include.am @@ -0,0 +1,11 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root + +EXTRA_DIST+= IDE/MQX/client-tls.c +EXTRA_DIST+= IDE/MQX/Makefile +EXTRA_DIST+= IDE/MQX/README-jp.md +EXTRA_DIST+= IDE/MQX/README.md +EXTRA_DIST+= IDE/MQX/server-tls.c +EXTRA_DIST+= IDE/MQX/user_config.h +EXTRA_DIST+= IDE/MQX/user_settings.h \ No newline at end of file diff --git a/IDE/MQX/server-tls.c b/IDE/MQX/server-tls.c new file mode 100644 index 000000000..47f1a05c3 --- /dev/null +++ b/IDE/MQX/server-tls.c @@ -0,0 +1,194 @@ +/* server-tls.c + * + * Copyright (C) 2006-2020 wolfSSL Inc. + * + * This file is part of wolfSSL. (formerly known as CyaSSL) + * + * wolfSSL is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * wolfSSL is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* wolfSSL */ +#include +#include +#include + +#define DEFAULT_PORT 11111 + +#define CERT_FILE "../certs/server-cert.pem" +#define KEY_FILE "../certs/server-key.pem" + + + +int main() +{ + int sockfd; + int connd; + struct sockaddr_in servAddr; + struct sockaddr_in clientAddr; + socklen_t size = sizeof(clientAddr); + char buff[256]; + size_t len; + int shutdown = 0; + int ret; + const char* reply = "I hear ya fa shizzle!\n"; + + /* declare wolfSSL objects */ + WOLFSSL_CTX* ctx; + WOLFSSL* ssl; + + + + /* Initialize wolfSSL */ + wolfSSL_Init(); + + + + /* Create a socket that uses an internet IPv4 address, + * Sets the socket to be stream based (TCP), + * 0 means choose the default protocol. */ + if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { + fprintf(stderr, "ERROR: failed to create the socket\n"); + return -1; + } + + + + /* Create and initialize WOLFSSL_CTX */ + if ((ctx = wolfSSL_CTX_new(wolfTLSv1_2_server_method())) == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL_CTX\n"); + return -1; + } + + /* Load server certificates into WOLFSSL_CTX */ + if (wolfSSL_CTX_use_certificate_file(ctx, CERT_FILE, SSL_FILETYPE_PEM) + != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", + CERT_FILE); + return -1; + } + + /* Load server key into WOLFSSL_CTX */ + if (wolfSSL_CTX_use_PrivateKey_file(ctx, KEY_FILE, SSL_FILETYPE_PEM) + != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", + KEY_FILE); + return -1; + } + + + + /* Initialize the server address struct with zeros */ + memset(&servAddr, 0, sizeof(servAddr)); + + /* Fill in the server address */ + servAddr.sin_family = AF_INET; /* using IPv4 */ + servAddr.sin_port = htons(DEFAULT_PORT); /* on DEFAULT_PORT */ + servAddr.sin_addr.s_addr = INADDR_ANY; /* from anywhere */ + + + + /* Bind the server socket to our port */ + if (bind(sockfd, (struct sockaddr*)&servAddr, sizeof(servAddr)) == -1) { + fprintf(stderr, "ERROR: failed to bind\n"); + return -1; + } + + /* Listen for a new connection, allow 5 pending connections */ + if (listen(sockfd, 5) == -1) { + fprintf(stderr, "ERROR: failed to listen\n"); + return -1; + } + + + + /* Continue to accept clients until shutdown is issued */ + while (!shutdown) { + printf("Waiting for a connection...\n"); + + /* Accept client connections */ + if ((connd = accept(sockfd, (struct sockaddr*)&clientAddr, &size)) + == -1) { + fprintf(stderr, "ERROR: failed to accept the connection\n\n"); + return -1; + } + + /* Create a WOLFSSL object */ + if ((ssl = wolfSSL_new(ctx)) == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL object\n"); + return -1; + } + + /* Attach wolfSSL to the socket */ + wolfSSL_set_fd(ssl, connd); + + /* Establish TLS connection */ + ret = wolfSSL_accept(ssl); + if (ret != SSL_SUCCESS) { + fprintf(stderr, "wolfSSL_accept error = %d\n", + wolfSSL_get_error(ssl, ret)); + return -1; + } + + + printf("Client connected successfully\n"); + + + + /* Read the client data into our buff array */ + memset(buff, 0, sizeof(buff)); + if (wolfSSL_read(ssl, buff, sizeof(buff)-1) == -1) { + fprintf(stderr, "ERROR: failed to read\n"); + return -1; + } + + /* Print to stdout any data the client sends */ + printf("Client: %s\n", buff); + + /* Check for server shutdown command */ + if (strncmp(buff, "shutdown", 8) == 0) { + printf("Shutdown command issued!\n"); + shutdown = 1; + } + + + + /* Write our reply into buff */ + memset(buff, 0, sizeof(buff)); + memcpy(buff, reply, strlen(reply)); + len = strnlen(buff, sizeof(buff)); + + /* Reply back to the client */ + if (wolfSSL_write(ssl, buff, len) != len) { + fprintf(stderr, "ERROR: failed to write\n"); + return -1; + } + + + + /* Cleanup after this connection */ + wolfSSL_free(ssl); /* Free the wolfSSL object */ + close(connd); /* Close the connection to the client */ + } + + printf("Shutdown complete\n"); + + + + /* Cleanup and return */ + wolfSSL_CTX_free(ctx); /* Free the wolfSSL context object */ + wolfSSL_Cleanup(); /* Cleanup the wolfSSL environment */ + close(sockfd); /* Close the socket listening for clients */ + return 0; /* Return reporting a success */ +} \ No newline at end of file diff --git a/IDE/MQX/user_config.h b/IDE/MQX/user_config.h new file mode 100644 index 000000000..d66e53235 --- /dev/null +++ b/IDE/MQX/user_config.h @@ -0,0 +1 @@ +#define MQX_CPU PSP_CPU_MK60DN512Z \ No newline at end of file diff --git a/IDE/MQX/user_settings.h b/IDE/MQX/user_settings.h new file mode 100644 index 000000000..c8431116b --- /dev/null +++ b/IDE/MQX/user_settings.h @@ -0,0 +1,63 @@ + +/* wolfSSH */ +#define WOLFSSL_PUBLIC_MP + +/* TLS1.3 */ +#define WOLFSSL_TLS13 +#define HAVE_TLS_EXTENSIONS +#define HAVE_SUPPORTED_CURVES +#define HAVE_FFDHE_2048 +#define HAVE_THREAD_LS + +/* SP optimization */ +#define WOLFSSL_HAVE_SP_RSA +#define WOLFSSL_HAVE_SP_DH +#define WOLFSSL_SP_4096 +#define WOLFSSL_HAVE_SP_ECC +#define HAVE_ECC384 +#define WOLFSSL_SP_384 + +/* Hardening */ +#define TFM_TIMING_RESISTANT +#define ECC_TIMING_RESISTANT +#define WC_RSA_BLINDING + +/* Default Cyphers */ +#define HAVE_AESGCM +#define WOLFSSL_SHA512 +#define WOLFSSL_SHA384 +#define HAVE_HKDF +#define NO_DSA +#define HAVE_ECC +#define TFM_ECC256 +#define ECC_SHAMIR +#define WC_RSA_PSS +#define WOLFSSL_BASE64_ENCODE +#define NO_RC4 +#define NO_HC128 +#define NO_RABBIT +#define WOLFSSL_SHA224 +#define WOLFSSL_SHA3 +#define WOLFSSL_SHAKE256 +#define HAVE_POLY1305 +#define HAVE_ONE_TIME_AUTH +#define HAVE_CHACHA +#define HAVE_HASHDRBG +#define HAVE_TLS_EXTENSIONS +#define HAVE_SUPPORTED_CURVES +#define HAVE_EXTENDED_MASTER +#define NO_RC4 +#define HAVE_ENCRYPT_THEN_MAC +#define NO_PSK +#define NO_MD4 +#define NO_PWDBASED +#define USE_FAST_MATH +#define WC_NO_ASYNC_THREADING +#define HAVE_DH_DEFAULT_PARAMS +#define NO_DES +#define WOLFSSL_DH_CONST + +/* MQX */ +#define FREESCALE_MQX +#define FREESCALE_NO_RNG + diff --git a/IDE/include.am b/IDE/include.am index 3814a1f63..d88f1bbec 100644 --- a/IDE/include.am +++ b/IDE/include.am @@ -20,6 +20,7 @@ include IDE/CSBENCH/include.am include IDE/ECLIPSE/DEOS/include.am include IDE/ECLIPSE/MICRIUM/include.am include IDE/ECLIPSE/SIFIVE/include.am +include IDE/MQX/include.am include IDE/ECLIPSE/RTTHREAD/include.am include IDE/mynewt/include.am include IDE/Renesas/e2studio/DK-S7G2/include.am