diff --git a/IDE/MSVS-2019-AZSPHERE/README.md b/IDE/MSVS-2019-AZSPHERE/README.md new file mode 100644 index 000000000..c6de27abd --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/README.md @@ -0,0 +1,44 @@ +wolfSSL for Microsoft Azure Sphere Devices in MSVS 2019 +========================================== + +## Description +This directory contains the Visual Studio CMake Project that is targeted for +the visual studio 2019 Azure Sphere plugin. + +## Limitations +The example includes a client and server executable but the main.c app +only runs the server by default. main.c can be manually modified to run the +client instead if desired. + +By default the main.c app include the hardware definitions for MT3620-mini. It +can be manually modified to include hardware definitions for MT3620, or +avnet MT3620 instead. + +The app relies on a wolfSSL static library project, app and library are built +by the CMakeLists.txt located in +IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeLists.txt. The library and app +use `user_settings.h` to enable and disable features. + +### Set Up Steps +0. Setup your Azure Sphere device. + [Install Azure Sphere](https://docs.microsoft.com/en-us/azure-sphere/install/install) + [Set up an account](https://docs.microsoft.com/en-us/azure-sphere/install/azure-directory-account) + [Claim your device](https://docs.microsoft.com/en-us/azure-sphere/install/claim-device) + [Configure networking](https://docs.microsoft.com/en-us/azure-sphere/install/configure-wifi) + +1. Open the local folder IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere in MSVS 2019 + +2. From the file menu select "Build" dropdown + + Click: `Rebuild All` option + +3. Connect your Azure Sphere MT3620-mini Development Board using USB. + +4. Test the server. + + Run server(Azure Sphere) using: `Debug->'Start new instance'` + + Run the following wolfSSL example client command inside wolfssl directory. + +``` +./examples/client/client -h "Server IP Address" -p 11111 -A ./certs/ca-cert.pem +``` + +For other information please refer to the README in IDE/VS-AZURE-SPHERE diff --git a/IDE/MSVS-2019-AZSPHERE/client/client.c b/IDE/MSVS-2019-AZSPHERE/client/client.c new file mode 100644 index 000000000..1c7e70efc --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/client/client.c @@ -0,0 +1,138 @@ +/* client.c + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +#include "client.h" +/* the usual suspects */ +#include +#include +#include + +/* socket includes */ +#include +#include +#include +#include + +/* utility functions shared between client and server */ +#include + +/* wolfSSL */ +#include +#include +#include + +/* Azure Sphere */ +#include + + +#ifndef NO_MAIN_DRIVER +int main(int argc, char** argv) +#else +int azsphere_client_app(int argc, char** argv) +#endif +{ + bool isNetworkingReady = false; + SOCKET_T sockfd = 0; + char buff[256]; + size_t len; + int ret; + + /* declare wolfSSL objects */ + WOLFSSL_CTX* ctx = NULL; + WOLFSSL* ssl = NULL; + + util_PrintIfAddr(); + + /* Check if the Azure Sphere Dev Board has network connectivity. */ + if ((Networking_IsNetworkingReady(&isNetworkingReady) < 0) || !isNetworkingReady) { + fprintf(stderr, "ERROR: network is not up.\n"); + return -1; + } + + ret = wolfIO_TcpConnect(&sockfd, SERVER_IP, DEFAULT_PORT, 0); + if ((ret != 0) || ((int)sockfd < 0)) { + fprintf(stderr, "ERROR: failed to create socket."); + return -1; + } + + /* Initialize wolfSSL */ + wolfSSL_Init(); + + /* Create and initialize WOLFSSL_CTX */ + ctx = wolfSSL_CTX_new(wolfTLSv1_2_client_method()); + if (ctx == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL_CTX\n"); + util_Cleanup(sockfd,ctx,ssl); + return -1; + } + + /* Load client certificates into WOLFSSL_CTX */ + ret = wolfSSL_CTX_load_verify_buffer(ctx, CERT, SIZEOF_CERT, WOLFSSL_FILETYPE_ASN1); + if (ret != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to load client certificate, " + "please check the buffer.\n"); + util_Cleanup(sockfd,ctx,ssl); + return -1; + } + + /* Create a WOLFSSL object */ + if ((ssl = wolfSSL_new(ctx)) == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL object\n"); + util_Cleanup(sockfd,ctx,ssl); + return -1; + } + + /* Attach wolfSSL to the socket */ + wolfSSL_set_fd(ssl, sockfd); + + /* Connect to wolfSSL on the server side */ + if (wolfSSL_connect(ssl) != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to connect to wolfSSL\n"); + util_Cleanup(sockfd,ctx,ssl); + return -1; + } + + /* Get length of message for server. */ + printf("\nMessage for server: %s\n",msg); + len = strnlen(msg, sizeof(msg)); + + /* Send the message to the server */ + if (wolfSSL_write(ssl, msg, (int)len) != len) { + fprintf(stderr, "ERROR: failed to write\n"); + util_Cleanup(sockfd,ctx,ssl); + return -1; + } + + /* Read the server 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"); + util_Cleanup(sockfd,ctx,ssl); + return -1; + } + + /* Print to stdout any data the server sends */ + printf("Server Reply: %s\n", buff); + + /* Cleanup and return */ + util_Cleanup(sockfd,ctx,ssl); + return 0; /* Return reporting a success */ +} diff --git a/IDE/MSVS-2019-AZSPHERE/client/client.h b/IDE/MSVS-2019-AZSPHERE/client/client.h new file mode 100644 index 000000000..07a17b514 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/client/client.h @@ -0,0 +1,125 @@ +/* client.h + * + * Copyright (C) 2006-2022 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + + +#ifndef WOLFSSL_CLIENT_H +#define WOLFSSL_CLIENT_H + +#include +#ifdef NO_MAIN_DRIVER +int azsphere_client_app(int argc, char** argv); +#endif + +static const unsigned char wolfssl_website_root_ca[] = +{ + 0x30, 0x82, 0x03, 0x75, 0x30, 0x82, 0x02, 0x5D, 0xA0, 0x03, + 0x02, 0x01, 0x02, 0x02, 0x0B, 0x04, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x15, 0x4B, 0x5A, 0xC3, 0x94, 0x30, 0x0D, 0x06, 0x09, + 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, + 0x00, 0x30, 0x57, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, 0x55, + 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, 0x17, + 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x10, 0x47, 0x6C, 0x6F, + 0x62, 0x61, 0x6C, 0x53, 0x69, 0x67, 0x6E, 0x20, 0x6E, 0x76, + 0x2D, 0x73, 0x61, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, 0x55, + 0x04, 0x0B, 0x13, 0x07, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, + 0x41, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, + 0x13, 0x12, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x53, 0x69, + 0x67, 0x6E, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, 0x41, + 0x30, 0x1E, 0x17, 0x0D, 0x39, 0x38, 0x30, 0x39, 0x30, 0x31, + 0x31, 0x32, 0x30, 0x30, 0x30, 0x30, 0x5A, 0x17, 0x0D, 0x32, + 0x38, 0x30, 0x31, 0x32, 0x38, 0x31, 0x32, 0x30, 0x30, 0x30, + 0x30, 0x5A, 0x30, 0x57, 0x31, 0x0B, 0x30, 0x09, 0x06, 0x03, + 0x55, 0x04, 0x06, 0x13, 0x02, 0x42, 0x45, 0x31, 0x19, 0x30, + 0x17, 0x06, 0x03, 0x55, 0x04, 0x0A, 0x13, 0x10, 0x47, 0x6C, + 0x6F, 0x62, 0x61, 0x6C, 0x53, 0x69, 0x67, 0x6E, 0x20, 0x6E, + 0x76, 0x2D, 0x73, 0x61, 0x31, 0x10, 0x30, 0x0E, 0x06, 0x03, + 0x55, 0x04, 0x0B, 0x13, 0x07, 0x52, 0x6F, 0x6F, 0x74, 0x20, + 0x43, 0x41, 0x31, 0x1B, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, + 0x03, 0x13, 0x12, 0x47, 0x6C, 0x6F, 0x62, 0x61, 0x6C, 0x53, + 0x69, 0x67, 0x6E, 0x20, 0x52, 0x6F, 0x6F, 0x74, 0x20, 0x43, + 0x41, 0x30, 0x82, 0x01, 0x22, 0x30, 0x0D, 0x06, 0x09, 0x2A, + 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00, + 0x03, 0x82, 0x01, 0x0F, 0x00, 0x30, 0x82, 0x01, 0x0A, 0x02, + 0x82, 0x01, 0x01, 0x00, 0xDA, 0x0E, 0xE6, 0x99, 0x8D, 0xCE, + 0xA3, 0xE3, 0x4F, 0x8A, 0x7E, 0xFB, 0xF1, 0x8B, 0x83, 0x25, + 0x6B, 0xEA, 0x48, 0x1F, 0xF1, 0x2A, 0xB0, 0xB9, 0x95, 0x11, + 0x04, 0xBD, 0xF0, 0x63, 0xD1, 0xE2, 0x67, 0x66, 0xCF, 0x1C, + 0xDD, 0xCF, 0x1B, 0x48, 0x2B, 0xEE, 0x8D, 0x89, 0x8E, 0x9A, + 0xAF, 0x29, 0x80, 0x65, 0xAB, 0xE9, 0xC7, 0x2D, 0x12, 0xCB, + 0xAB, 0x1C, 0x4C, 0x70, 0x07, 0xA1, 0x3D, 0x0A, 0x30, 0xCD, + 0x15, 0x8D, 0x4F, 0xF8, 0xDD, 0xD4, 0x8C, 0x50, 0x15, 0x1C, + 0xEF, 0x50, 0xEE, 0xC4, 0x2E, 0xF7, 0xFC, 0xE9, 0x52, 0xF2, + 0x91, 0x7D, 0xE0, 0x6D, 0xD5, 0x35, 0x30, 0x8E, 0x5E, 0x43, + 0x73, 0xF2, 0x41, 0xE9, 0xD5, 0x6A, 0xE3, 0xB2, 0x89, 0x3A, + 0x56, 0x39, 0x38, 0x6F, 0x06, 0x3C, 0x88, 0x69, 0x5B, 0x2A, + 0x4D, 0xC5, 0xA7, 0x54, 0xB8, 0x6C, 0x89, 0xCC, 0x9B, 0xF9, + 0x3C, 0xCA, 0xE5, 0xFD, 0x89, 0xF5, 0x12, 0x3C, 0x92, 0x78, + 0x96, 0xD6, 0xDC, 0x74, 0x6E, 0x93, 0x44, 0x61, 0xD1, 0x8D, + 0xC7, 0x46, 0xB2, 0x75, 0x0E, 0x86, 0xE8, 0x19, 0x8A, 0xD5, + 0x6D, 0x6C, 0xD5, 0x78, 0x16, 0x95, 0xA2, 0xE9, 0xC8, 0x0A, + 0x38, 0xEB, 0xF2, 0x24, 0x13, 0x4F, 0x73, 0x54, 0x93, 0x13, + 0x85, 0x3A, 0x1B, 0xBC, 0x1E, 0x34, 0xB5, 0x8B, 0x05, 0x8C, + 0xB9, 0x77, 0x8B, 0xB1, 0xDB, 0x1F, 0x20, 0x91, 0xAB, 0x09, + 0x53, 0x6E, 0x90, 0xCE, 0x7B, 0x37, 0x74, 0xB9, 0x70, 0x47, + 0x91, 0x22, 0x51, 0x63, 0x16, 0x79, 0xAE, 0xB1, 0xAE, 0x41, + 0x26, 0x08, 0xC8, 0x19, 0x2B, 0xD1, 0x46, 0xAA, 0x48, 0xD6, + 0x64, 0x2A, 0xD7, 0x83, 0x34, 0xFF, 0x2C, 0x2A, 0xC1, 0x6C, + 0x19, 0x43, 0x4A, 0x07, 0x85, 0xE7, 0xD3, 0x7C, 0xF6, 0x21, + 0x68, 0xEF, 0xEA, 0xF2, 0x52, 0x9F, 0x7F, 0x93, 0x90, 0xCF, + 0x02, 0x03, 0x01, 0x00, 0x01, 0xA3, 0x42, 0x30, 0x40, 0x30, + 0x0E, 0x06, 0x03, 0x55, 0x1D, 0x0F, 0x01, 0x01, 0xFF, 0x04, + 0x04, 0x03, 0x02, 0x01, 0x06, 0x30, 0x0F, 0x06, 0x03, 0x55, + 0x1D, 0x13, 0x01, 0x01, 0xFF, 0x04, 0x05, 0x30, 0x03, 0x01, + 0x01, 0xFF, 0x30, 0x1D, 0x06, 0x03, 0x55, 0x1D, 0x0E, 0x04, + 0x16, 0x04, 0x14, 0x60, 0x7B, 0x66, 0x1A, 0x45, 0x0D, 0x97, + 0xCA, 0x89, 0x50, 0x2F, 0x7D, 0x04, 0xCD, 0x34, 0xA8, 0xFF, + 0xFC, 0xFD, 0x4B, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, + 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x82, + 0x01, 0x01, 0x00, 0xD6, 0x73, 0xE7, 0x7C, 0x4F, 0x76, 0xD0, + 0x8D, 0xBF, 0xEC, 0xBA, 0xA2, 0xBE, 0x34, 0xC5, 0x28, 0x32, + 0xB5, 0x7C, 0xFC, 0x6C, 0x9C, 0x2C, 0x2B, 0xBD, 0x09, 0x9E, + 0x53, 0xBF, 0x6B, 0x5E, 0xAA, 0x11, 0x48, 0xB6, 0xE5, 0x08, + 0xA3, 0xB3, 0xCA, 0x3D, 0x61, 0x4D, 0xD3, 0x46, 0x09, 0xB3, + 0x3E, 0xC3, 0xA0, 0xE3, 0x63, 0x55, 0x1B, 0xF2, 0xBA, 0xEF, + 0xAD, 0x39, 0xE1, 0x43, 0xB9, 0x38, 0xA3, 0xE6, 0x2F, 0x8A, + 0x26, 0x3B, 0xEF, 0xA0, 0x50, 0x56, 0xF9, 0xC6, 0x0A, 0xFD, + 0x38, 0xCD, 0xC4, 0x0B, 0x70, 0x51, 0x94, 0x97, 0x98, 0x04, + 0xDF, 0xC3, 0x5F, 0x94, 0xD5, 0x15, 0xC9, 0x14, 0x41, 0x9C, + 0xC4, 0x5D, 0x75, 0x64, 0x15, 0x0D, 0xFF, 0x55, 0x30, 0xEC, + 0x86, 0x8F, 0xFF, 0x0D, 0xEF, 0x2C, 0xB9, 0x63, 0x46, 0xF6, + 0xAA, 0xFC, 0xDF, 0xBC, 0x69, 0xFD, 0x2E, 0x12, 0x48, 0x64, + 0x9A, 0xE0, 0x95, 0xF0, 0xA6, 0xEF, 0x29, 0x8F, 0x01, 0xB1, + 0x15, 0xB5, 0x0C, 0x1D, 0xA5, 0xFE, 0x69, 0x2C, 0x69, 0x24, + 0x78, 0x1E, 0xB3, 0xA7, 0x1C, 0x71, 0x62, 0xEE, 0xCA, 0xC8, + 0x97, 0xAC, 0x17, 0x5D, 0x8A, 0xC2, 0xF8, 0x47, 0x86, 0x6E, + 0x2A, 0xC4, 0x56, 0x31, 0x95, 0xD0, 0x67, 0x89, 0x85, 0x2B, + 0xF9, 0x6C, 0xA6, 0x5D, 0x46, 0x9D, 0x0C, 0xAA, 0x82, 0xE4, + 0x99, 0x51, 0xDD, 0x70, 0xB7, 0xDB, 0x56, 0x3D, 0x61, 0xE4, + 0x6A, 0xE1, 0x5C, 0xD6, 0xF6, 0xFE, 0x3D, 0xDE, 0x41, 0xCC, + 0x07, 0xAE, 0x63, 0x52, 0xBF, 0x53, 0x53, 0xF4, 0x2B, 0xE9, + 0xC7, 0xFD, 0xB6, 0xF7, 0x82, 0x5F, 0x85, 0xD2, 0x41, 0x18, + 0xDB, 0x81, 0xB3, 0x04, 0x1C, 0xC5, 0x1F, 0xA4, 0x80, 0x6F, + 0x15, 0x20, 0xC9, 0xDE, 0x0C, 0x88, 0x0A, 0x1D, 0xD6, 0x66, + 0x55, 0xE2, 0xFC, 0x48, 0xC9, 0x29, 0x26, 0x69, 0xE0 +}; +static const int sizeof_wolfssl_website_root_ca = sizeof(wolfssl_website_root_ca); + +#endif /* WOLFSSL_CLIENT_H */ diff --git a/IDE/MSVS-2019-AZSPHERE/include.am b/IDE/MSVS-2019-AZSPHERE/include.am new file mode 100644 index 000000000..fc24e53ee --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/include.am @@ -0,0 +1,25 @@ +# vim:ft=automake +# included from Top Level Makefile.am +# All paths should be given relative to the root + +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/client/client.c +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/client/client.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/server/server.c +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/server/server.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/shared/util.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/user_settings.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/.gitignore +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeLists.txt +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeSettings.json +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/template_appliance.json +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/template_appliance.json +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/template_appliance.json +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/app_manifest.json +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/launch.vs.json +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c +EXTRA_DIST+= IDE/MSVS-2019-AZSPHERE/README.md + diff --git a/IDE/MSVS-2019-AZSPHERE/server/server.c b/IDE/MSVS-2019-AZSPHERE/server/server.c new file mode 100644 index 000000000..da6671b9a --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/server/server.c @@ -0,0 +1,213 @@ +/* server.c + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +#include "server.h" +/* the usual suspects */ +#include +#include +#include + +/* socket includes */ +#include +#include +#include +#include + +/* includes */ +#include + +/* wolfSSL */ +#include +#include +#include + +/* Azure Sphere */ +#include +#include + +#define BIND_PORT 11111 +#define CERT_BUF server_cert_der_2048 +#define SIZEOF_CERT_BUF sizeof_server_cert_der_2048 +#define KEY_BUF server_key_der_2048 +#define SIZEOF_KEY_BUF sizeof_server_key_der_2048 + +#ifndef NO_MAIN_DRIVER +int main(void) +#else +int azsphere_server_app(void) +#endif +{ + bool isNetworkingReady = false; + 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 = NULL; + WOLFSSL* ssl = NULL; + + util_PrintIfAddr(); + + /* Check if the Azure Sphere Dev Board has network connectivity. */ + if ((Networking_IsNetworkingReady(&isNetworkingReady) < 0) || !isNetworkingReady) { + fprintf(stderr,"Error: Network is not up.\n"); + return -1; + } + + /* 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"); + util_Cleanup(sockfd, ctx, ssl); + 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"); + util_Cleanup(sockfd, ctx, ssl); + return -1; + } + + /* Load server certificates into WOLFSSL_CTX */ + if (wolfSSL_CTX_use_certificate_buffer(ctx, CERT_BUF, SIZEOF_CERT_BUF, SSL_FILETYPE_ASN1) + != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", + CERT_BUF); + util_Cleanup(sockfd, ctx, ssl); + return -1; + } + + /* Load server key into WOLFSSL_CTX */ + if (wolfSSL_CTX_use_PrivateKey_buffer(ctx, KEY_BUF, SIZEOF_KEY_BUF, SSL_FILETYPE_ASN1) + != SSL_SUCCESS) { + fprintf(stderr, "ERROR: failed to load %s, please check the file.\n", + KEY_BUF); + util_Cleanup(sockfd, ctx, ssl); + 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(BIND_PORT); /* on BIND_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"); + util_Cleanup(sockfd, ctx, ssl); + return -1; + } + + /* Listen for a new connection, allow 5 pending connections */ + if (listen(sockfd, 5) == -1) { + fprintf(stderr, "ERROR: failed to listen\n"); + util_Cleanup(sockfd, ctx, ssl); + 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"); + util_Cleanup(sockfd, ctx, ssl); + return -1; + } + + /* Create a WOLFSSL object */ + if ((ssl = wolfSSL_new(ctx)) == NULL) { + fprintf(stderr, "ERROR: failed to create WOLFSSL object\n"); + util_Cleanup(sockfd, ctx, ssl); + 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)); + util_Cleanup(sockfd, ctx, ssl); + 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"); + util_Cleanup(sockfd, ctx, ssl); + 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, (int)len) != len) { + fprintf(stderr, "ERROR: failed to write\n"); + util_Cleanup(sockfd, ctx, ssl); + 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 */ + util_Cleanup(sockfd, ctx, ssl); + return 0; /* Return reporting a success */ +} diff --git a/IDE/MSVS-2019-AZSPHERE/server/server.h b/IDE/MSVS-2019-AZSPHERE/server/server.h new file mode 100644 index 000000000..eaa8edec0 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/server/server.h @@ -0,0 +1,33 @@ +/* server.h + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + + + +#ifndef WOLFSSL_SERVER_H +#define WOLFSSL_SERVER_H + +#include +#ifdef NO_MAIN_DRIVER +int azsphere_server_app(void); +#endif + +#endif /* WOLFSSL_SERVER_H */ + diff --git a/IDE/MSVS-2019-AZSPHERE/shared/util.h b/IDE/MSVS-2019-AZSPHERE/shared/util.h new file mode 100644 index 000000000..0cd976b5d --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/shared/util.h @@ -0,0 +1,82 @@ +/* util.h + * + * Copyright (C) 2006-2022 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +#ifndef _UTIL_H_ +#define _UTIL_H_ + +#include +#include +#include +#include + +#define _GNU_SOURCE /* defines NI_NUMERICHOST */ +#ifndef NI_MAXHOST + #define NI_MAXHOST 256 +#endif + +static void util_Cleanup(int sockfd, WOLFSSL_CTX* ctx, WOLFSSL* ssl) +{ + wolfSSL_free(ssl); /* Free the wolfSSL object */ + wolfSSL_CTX_free(ctx); /* Free the wolfSSL context object */ + wolfSSL_Cleanup(); /* Cleanup the wolfSSL environment */ + close(sockfd); /* Close the connection to the server */ +} + +/* Displays each AF_INET interface and it's IP Address +* Return: WOLFSSL_SUCCESS if print is successful else WOLFSSL_FAILURE +*/ +static int util_PrintIfAddr(void) +{ + char host[NI_MAXHOST]; + struct ifaddrs* ifaddr, * nxt; + int family, info, n; + + /* Get a linked list of 'struct ifaddrs*' */ + if (getifaddrs(&ifaddr) != 0) { + fprintf(stderr, "ERROR: Getting network interface and IP address"); + return WOLFSSL_FAILURE; + } + printf("\nInterface IP Address\n"); + /* Traverse ifaddr linked list using nxt */ + for (nxt = ifaddr; nxt != NULL; nxt = nxt->ifa_next) { + if (nxt->ifa_addr == NULL) + continue; + family = nxt->ifa_addr->sa_family; + /* Display the address of each AF_INET* interface */ + if (family == AF_INET) { + info = getnameinfo(nxt->ifa_addr, sizeof(struct sockaddr_in), + host, NI_MAXHOST, NULL, 0, NI_NUMERICHOST); + if (info != 0) { + fprintf(stderr, "Failed to getnameinfo"); + freeifaddrs(ifaddr); + return WOLFSSL_FAILURE; + } + /* Determine amount of space, n, to justify IP Address */ + n = (int)strlen("Interface ") - (int)strlen(nxt->ifa_name); + n = (n > 0) ? n : 1; /* Set space to 1 if n is negative */ + printf("%s %*c%s>\n", nxt->ifa_name, n, '<', host); + } + } + printf("\n"); + freeifaddrs(ifaddr); + return WOLFSSL_SUCCESS; +} +#endif diff --git a/IDE/MSVS-2019-AZSPHERE/user_settings.h b/IDE/MSVS-2019-AZSPHERE/user_settings.h new file mode 100644 index 000000000..359431f8e --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/user_settings.h @@ -0,0 +1,96 @@ +/* user_settings.h + * + * Copyright (C) 2006-2022 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +#ifndef _USER_SETTINGS_H_ +#define _USER_SETTINGS_H_ + +#define SERVER_IP "192.168.1.123" +#define CUSTOM_SERVER_CONNECTION + +#define WOLFSSL_AZSPHERE +/* Client connects to the server with these details. */ +#ifdef CUSTOM_SERVER_CONNECTION + #ifndef SERVER_IP + #define SERVER_IP "192.168.1.200" /* Local Test Server IP */ + #endif + #ifndef DEFAULT_PORT + #define DEFAULT_PORT 11111 + #endif + #define CERT ca_cert_der_2048 + #define SIZEOF_CERT sizeof_ca_cert_der_2048 + static const char msg[] = "Are you listening wolfSSL Server?"; +#else + #ifndef SERVER_IP + #define SERVER_IP "www.wolfssl.com" + #endif + #ifndef DEFAULT_PORT + #define DEFAULT_PORT 443 + #endif + #define CERT wolfssl_website_root_ca + #define SIZEOF_CERT sizeof_wolfssl_website_root_ca + static const char msg[] = "GET /index.html HTTP/1.1\r\n\r\n"; +#endif + +/* Math: Normal (!USE_FAST_MATH) */ +#define SIZEOF_LONG_LONG 8 +#define WC_RSA_BLINDING +#define ECC_TIMING_RESISTANT + +/* Enable options */ +#define HAVE_CHACHA +#define HAVE_POLY1305 +#define HAVE_ECC +#define HAVE_SUPPORTED_CURVES +#define HAVE_TLS_EXTENSIONS +#define HAVE_ONE_TIME_AUTH +#define HAVE_TRUNCATED_HMAC +#define HAVE_EXTENDED_MASTER +#define HAVE_ALPN +#define HAVE_SNI +#define HAVE_OCSP +#define HAVE_AESGCM + +/* Disable options */ +#define NO_PWDBASED +#define NO_DSA +#define NO_DES3 +#define NO_RC4 +#define NO_MD4 + +/* Benchmark / Testing */ +#define BENCH_EMBEDDED +#define USE_CERT_BUFFERS_2048 +#define USE_CERT_BUFFERS_256 + +/* OS */ +#define SINGLE_THREADED + +/* Filesystem */ +#define NO_FILESYSTEM + +/* Debug */ +#include +#define printf Log_Debug +#define WOLFIO_DEBUG + +#define NO_MAIN_DRIVER + +#endif /* _USER_SETTINGS_H_ */ diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/.gitignore b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/.gitignore new file mode 100644 index 000000000..a970767e9 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/.gitignore @@ -0,0 +1,3 @@ +# Ignore output directories +/out/ +/install/ diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeLists.txt b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeLists.txt new file mode 100644 index 000000000..f3a8253eb --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeLists.txt @@ -0,0 +1,58 @@ +# CMakeList.txt +# +# Copyright (C) 2006-2022 wolfSSL Inc. +# +# This file is part of wolfSSL. (formerly known as CyaSSL) +# +# Usage: +# In MSVS 2019 with Azure Sphere plugin installed choose option +# "Open Local Folder" and browse to wolfssl-root/IDE/MSVS-2019-AZSPHERE" +# highlight wolfssl_new_azsphere and select "Open" +# +# To build: +# go to MSVS menu option "Build" and select "Build All" +# +# See https://docs.microsoft.com/en-us/azure-sphere/install/overview for how +# to get started with an Azure sphere device. Once you have completed the step +# to build/flash and run the Blinky example you will be ready to build/flash +# and run this example! + +cmake_minimum_required (VERSION 3.4.1) + +project (wolfssl_new_azsphere C) + +azsphere_configure_tools(TOOLS_REVISION "22.02") +azsphere_configure_api(TARGET_API_SET "12") + +# add wolfSSL preprocessor directives +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DWOLFSSL_USER_SETTINGS -Wno-conversion -Wno-sign-conversion") + +# add a shared object for SSL/TLS and CRYPTO +set( SSL_SRC_DIR "../../../src" ) +set( CRYPTO_SRC_DIR "../../../wolfcrypt/src" ) +set( INCLUDE_DIR "../../.." ) +aux_source_directory( ${SSL_SRC_DIR} SSL_SOURCES ) +list( REMOVE_ITEM SSL_SOURCES ../../../src/bio.c ) +list( REMOVE_ITEM SSL_SOURCES ../../../src/conf.c ) +list( REMOVE_ITEM SSL_SOURCES ../../../src/x509.c ) +list( REMOVE_ITEM SSL_SOURCES ../../../src/x509_str.c ) +list( REMOVE_ITEM SSL_SOURCES ../../../src/pk.c ) +aux_source_directory( ${CRYPTO_SRC_DIR} CRYPTO_SOURCES ) +list( REMOVE_ITEM CRYPTO_SOURCES ../../../wolfcrypt/src/evp.c ) +list( REMOVE_ITEM CRYPTO_SOURCES ../../../wolfcrypt/src/misc.c ) +add_library( wolfssl STATIC ${SSL_SOURCES} ${CRYPTO_SOURCES} ) + +# Create executable that uses library +set( SERVER_APP_DIR "../server" ) +set( CLIENT_APP_DIR "../client" ) +set( USER_SETTINGS_DIR ".." ) +set( APP_INCLUDE_DIRS ${SERVER_APP_DIR} ${CLIENT_APP_DIR} ${USER_SETTINGS_DIR} ) + +add_executable (${PROJECT_NAME} main.c ${SERVER_APP_DIR}/server.c ${CLIENT_APP_DIR}/client.c ) +target_link_libraries (${PROJECT_NAME} applibs pthread gcc_s c wolfssl) +include_directories( ${INCLUDE_DIR} ${APP_INCLUDE_DIRS}) + +# azsphere_target_hardware_definition(${PROJECT_NAME} TARGET_DIRECTORY "HardwareDefinitions/mt3620_rdb" TARGET_DEFINITION "template_appliance.json") +azsphere_target_hardware_definition(${PROJECT_NAME} TARGET_DIRECTORY "HardwareDefinitions/seeed_mt3620_mdb" TARGET_DEFINITION "template_appliance.json") + +azsphere_target_add_image_package(${PROJECT_NAME}) diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeSettings.json b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeSettings.json new file mode 100644 index 000000000..6b414b826 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/CMakeSettings.json @@ -0,0 +1,47 @@ +{ + "environments": [ + { + "environment": "AzureSphere" + } + ], + "configurations": [ + { + "name": "ARM-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ + "AzureSphere" + ], + "buildRoot": "${projectDir}\\out\\${name}", + "installRoot": "${projectDir}\\out\\${name}", + "cmakeToolchain": "${env.AzureSphereDefaultSDKDir}CMakeFiles\\AzureSphereToolchain.cmake", + "buildCommandArgs": "-v", + "ctestCommandArgs": "", + "variables": [ + { + "name": "AZURE_SPHERE_TARGET_API_SET", + "value": "latest-lts" + } + ] + }, + { + "name": "ARM-Release", + "generator": "Ninja", + "configurationType": "Release", + "inheritEnvironments": [ + "AzureSphere" + ], + "buildRoot": "${projectDir}\\out\\${name}", + "installRoot": "${projectDir}\\out\\${name}", + "cmakeToolchain": "${env.AzureSphereDefaultSDKDir}CMakeFiles\\AzureSphereToolchain.cmake", + "buildCommandArgs": "-v", + "ctestCommandArgs": "", + "variables": [ + { + "name": "AZURE_SPHERE_TARGET_API_SET", + "value": "latest-lts" + } + ] + } + ] +} diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h new file mode 100644 index 000000000..e956d5921 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/inc/hw/template_appliance.h @@ -0,0 +1,36 @@ +/* template_appliance.h + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +/* This file maps the Avnet MT3620 Starter Kit (SK) + * to the 'template appliance' abstraction used by the templates. + * Some peripherals are on-board, while other peripherals must be + * attached externally (conditionally). + * See https://aka.ms/AzureSphereHardwareDefinitions for more + * information on how to use hardware abstractions . + */ + + +#pragma once +#include "avnet_mt3620_sk.h" + +/* MT3620 SK: wolfssl azsphere CI app */ +#define WOLF_AZSPHERE AVNET_MT3620_SK_USER_LED_RED + diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/template_appliance.json b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/template_appliance.json new file mode 100644 index 000000000..b24ebc116 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/avnet_mt3620_sk/template_appliance.json @@ -0,0 +1,41 @@ +{ + "Metadata": { + "Type": "Azure Sphere Hardware Definition", + "Version": 1 + }, + "Description": + { + "Name": "Template hardware abstraction for Avnet MT3620 SK", + "MainCoreHeaderFileTopContent": [ + "/* Copyright (C) 2006-2022 wolfSSL Inc.", + " * This file is part of wolfSSL.", + " *", + " * 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-1335, USA", + " */", + + "/* This file maps the Avnet MT3620 Starter Kit (SK)", + " * to the 'template appliance' abstraction used by the templates.", + " * Some peripherals are on-board, while other peripherals must be", + " * attached externally (conditionally).", + " * See https://aka.ms/AzureSphereHardwareDefinitions for more", + " * information on how to use hardware abstractions .", + " */" + ] + }, + "Imports" : [ {"Path": "avnet_mt3620_sk.json"} ], + "Peripherals": [ + {"Name": "WOLF_AZSPHERE", "Type": "Gpio", "Mapping": "AVNET_MT3620_SK_USER_LED_RED", "Comment": "MT3620 SK: User LED."} + ] +} diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h new file mode 100644 index 000000000..05ed1790f --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/inc/hw/template_appliance.h @@ -0,0 +1,32 @@ +/* Copyright (C) 2006-2022 wolfSSL Inc. + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +/* This file maps the MT3620 reference development board (RDB) + * to the 'template appliance' abstraction used by the templates. + * Some peripherals are on-board, while other peripherals must be + * attached externally (conditionally). + * See https://aka.ms/AzureSphereHardwareDefinitions for more + * information on how to use hardware abstractions . + */ + +#pragma once +#include "mt3620_rdb.h" + +/* MT3620 SK: wolfssl azsphere CI app */ +#define WOLF_AZSPHERE MT3620_RDB_LED1_RED + diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/template_appliance.json b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/template_appliance.json new file mode 100644 index 000000000..4f891b7ea --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/mt3620_rdb/template_appliance.json @@ -0,0 +1,41 @@ +{ + "Metadata": { + "Type": "Azure Sphere Hardware Definition", + "Version": 1 + }, + "Description": + { + "Name": "Template hardware abstraction for MT3620 RDB", + "MainCoreHeaderFileTopContent": [ + "/* Copyright (C) 2006-2022 wolfSSL Inc.", + " * This file is part of wolfSSL.", + " *", + " * 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-1335, USA", + " */", + + "/* This file maps the MT3620 reference development board (RDB)", + " * to the 'template appliance' abstraction used by the templates.", + " * Some peripherals are on-board, while other peripherals must be", + " * attached externally (conditionally).", + " * See https://aka.ms/AzureSphereHardwareDefinitions for more", + " * information on how to use hardware abstractions .", + " */" + ] + }, + "Imports" : [ {"Path": "mt3620_rdb.json"} ], + "Peripherals": [ + {"Name": "WOLF_AZSPHERE", "Type": "Gpio", "Mapping": "MT3620_RDB_LED1_RED", "Comment": "MT3620 RDB: LED 1 (red channel)"} + ] +} diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h new file mode 100644 index 000000000..e2af66bec --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/inc/hw/template_appliance.h @@ -0,0 +1,35 @@ +/* template_appliance.h + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +/* This file maps the Seeed MT3620 Mini Development Board (MDB) + * to the 'template appliance' abstraction used by the templates. + * Some peripherals are on-board, while other peripherals must be + * attached externally (conditionally). + * See https://aka.ms/AzureSphereHardwareDefinitions for more + * information on how to use hardware abstractions . + */ + +#pragma once +#include "seeed_mt3620_mdb.h" + +/* MT3620 SK: wolfssl azsphere CI app */ +#define WOLF_AZSPHERE SEEED_MT3620_MDB_USER_LED + diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/template_appliance.json b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/template_appliance.json new file mode 100644 index 000000000..a7e5a2154 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/HardwareDefinitions/seeed_mt3620_mdb/template_appliance.json @@ -0,0 +1,41 @@ +{ + "Metadata": { + "Type": "Azure Sphere Hardware Definition", + "Version": 1 + }, + "Description": + { + "Name": "Template hardware abstraction for Seeed MT3620 MDB", + "MainCoreHeaderFileTopContent": [ + "/* Copyright (C) 2006-2022 wolfSSL Inc.", + " * This file is part of wolfSSL.", + " *", + " * 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-1335, USA", + " */", + + "/* This file maps the Seeed MT3620 Mini Development Board (MDB)", + " * to the 'template appliance' abstraction used by the templates.", + " * Some peripherals are on-board, while other peripherals must be", + " * attached externally (conditionally).", + " * See https://aka.ms/AzureSphereHardwareDefinitions for more", + " * information on how to use hardware abstractions .", + " */" + ] + }, + "Imports" : [ {"Path": "seeed_mt3620_mdb.json"} ], + "Peripherals": [ + {"Name": "WOLF_AZSPHERE", "Type": "Gpio", "Mapping": "SEEED_MT3620_MDB_USER_LED", "Comment": "MT3620 MDB: User LED."} + ] +} diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/app_manifest.json b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/app_manifest.json new file mode 100644 index 000000000..7e9bc9366 --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/app_manifest.json @@ -0,0 +1,12 @@ +{ + "SchemaVersion": 1, + "Name": "wolfssl_new_azsphere", + "ComponentId": "959b4478-a9a3-440a-b1e7-9bb0b1f1d357", + "EntryPoint": "/bin/app", + "CmdArgs": [], + "Capabilities": { + "Gpio": [ "$WOLF_AZSPHERE" ], + "AllowedApplicationConnections": [] + }, + "ApplicationType": "Default" +} diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h new file mode 100644 index 000000000..2afdfcf3e --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/applibs_versions.h @@ -0,0 +1,25 @@ +#pragma once + +/// +/// This identifier should be defined before including any of the networking-related header files. +/// It indicates which version of the Wi-Fi data structures the application uses. +/// +#define NETWORKING_STRUCTS_VERSION 1 + +/// +/// This identifier must be defined before including any of the Wi-Fi related header files. +/// It indicates which version of the Wi-Fi data structures the application uses. +/// +#define WIFICONFIG_STRUCTS_VERSION 1 + +/// +/// This identifier must be defined before including any of the UART-related header files. +/// It indicates which version of the UART data structures the application uses. +/// +#define UART_STRUCTS_VERSION 1 + +/// +/// This identifier must be defined before including any of the SPI-related header files. +/// It indicates which version of the SPI data structures the application uses. +/// +#define SPI_STRUCTS_VERSION 1 diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/launch.vs.json b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/launch.vs.json new file mode 100644 index 000000000..c0d0323cc --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/launch.vs.json @@ -0,0 +1,14 @@ +{ + "version": "0.2.1", + "configurations": [ + { + "type": "azurespheredbg", + "name": "wolfssl_new_azsphere (HLCore)", + "project": "CMakeLists.txt", + "workingDirectory": "${workspaceRoot}", + "applicationPath": "${debugInfo.target}", + "imagePath": "${debugInfo.targetImage}", + "partnerComponents": [] + } + ] +} diff --git a/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c new file mode 100644 index 000000000..104e0c8df --- /dev/null +++ b/IDE/MSVS-2019-AZSPHERE/wolfssl_new_azsphere/main.c @@ -0,0 +1,92 @@ +/* main.c + * + * Copyright (C) 2006-2021 wolfSSL Inc. + * + * This file is part of wolfSSL. + * + * 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-1335, USA + */ + +#include +#include +#include +#include + +#include +#include +#include +#ifndef WOLFSSL_USER_SETTINGS + #error "user_settings.h not included" +#endif +#include +#include + +/* + * The following #include imports a "template appliance" definition. This app + * comes with multiple implementations of the template appliance, each in a + * separate directory, which allow the code to run unchanged on different + * hardware. + * + * By default, this app targets hardware that follows the MT3620-mini Reference + * Development Board (MDB) specification, such as the MT3620-mini Dev Kit from + * Seeed Studio. + * + * To target different hardware, you'll need to update CMakeLists.txt. + * For example, to target the Avnet MT3620 Starter Kit, make this update: + * azsphere_target_hardware_definition(${PROJECT_NAME} + * TARGET_DIRECTORY "HardwareDefinitions/avnet_mt3620_sk" + * TARGET_DEFINITION "template_appliance.json") + * + * See https://aka.ms/AzureSphereHardwareDefinitions for more details. + */ +#include + +typedef enum { + ExitCode_Success = 0, + + ExitCode_Main_Led = 1 +} ExitCode; + +int main(void) +{ + Log_Debug( + "\nVisit https://github.com/Azure/azure-sphere-samples for other" + " examples.\n"); + int ret; + + int fd = GPIO_OpenAsOutput(WOLF_AZSPHERE, GPIO_OutputMode_PushPull, GPIO_Value_High); + if (fd < 0) { + Log_Debug( + "Error opening GPIO: %s (%d). Check that app_manifest.json includes" + " the GPIO used.\n", + strerror(errno), errno); + return ExitCode_Main_Led; + } + + const struct timespec sleepTime = {.tv_sec = 1, .tv_nsec = 0}; + + printf("Launching the server...\n"); + ret = azsphere_server_app(); + printf("ret azsphere_server_app = %d\n", ret); + + /* if server exists continually blink the red LED indicating server needs + * to be rebooted */ + while (true) { + GPIO_SetValue(fd, GPIO_Value_Low); + nanosleep(&sleepTime, NULL); + GPIO_SetValue(fd, GPIO_Value_High); + nanosleep(&sleepTime, NULL); + } +} diff --git a/IDE/include.am b/IDE/include.am index 05ee1e53b..4da994c02 100644 --- a/IDE/include.am +++ b/IDE/include.am @@ -16,6 +16,7 @@ include IDE/INTIME-RTOS/include.am include IDE/KDS/include.am include IDE/STM32Cube/include.am include IDE/VS-ARM/include.am +include IDE/MSVS-2019-AZSPHERE/include.am include IDE/VS-AZURE-SPHERE/include.am include IDE/GCC-ARM/include.am include IDE/CSBENCH/include.am diff --git a/wolfssl/wolfcrypt/types.h b/wolfssl/wolfcrypt/types.h index 1fe38ae63..d7c4a4dfd 100644 --- a/wolfssl/wolfcrypt/types.h +++ b/wolfssl/wolfcrypt/types.h @@ -649,7 +649,7 @@ decouple library dependencies with standard string, memory and so on. #endif #if defined(WOLFSSL_DEOS) #define XSTRCASECMP(s1,s2) stricmp((s1),(s2)) - #elif defined(WOLFSSL_CMSIS_RTOSv2) + #elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) #define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) #elif defined(WOLF_C89) #define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) @@ -678,7 +678,7 @@ decouple library dependencies with standard string, memory and so on. #endif #if defined(WOLFSSL_DEOS) #define XSTRNCASECMP(s1,s2,n) strnicmp((s1),(s2),(n)) - #elif defined(WOLFSSL_CMSIS_RTOSv2) + #elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n)) #elif defined(WOLF_C89) #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n))