forked from wolfSSL/wolfssl
Porting wolfssl into ESP-IDF development framework
This commit is contained in:
33
IDE/Espressif/ESP-IDF/README.md
Normal file
33
IDE/Espressif/ESP-IDF/README.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# ESP-IDF port
|
||||||
|
## Overview
|
||||||
|
ESP-IDF development framework with wolfSSL by setting *WOLFSSL_ESPIDF* definition
|
||||||
|
|
||||||
|
Including the following examples:
|
||||||
|
simple tls_client/server
|
||||||
|
crypt test
|
||||||
|
crypt benchmark
|
||||||
|
|
||||||
|
The *user_settings.h* file enables some of the hardened settings.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
1. ESP-IDF development framework
|
||||||
|
[https://docs.espressif.com/projects/esp-idf/en/latest/get-started/]
|
||||||
|
Note: This expects to use Linux version.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
1. Run *setup.sh* to deploy files into ESP-IDF tree
|
||||||
|
2. Find Wolfssl files at /path/to/esp-idf/components/wolfssl/
|
||||||
|
3. Find Example programs under /path/to/esp-idf/examples/protocols/wolfssl_xxx
|
||||||
|
4. Uncomment out #define WOLFSSL_ESPIDF in /path/to/wolfssl/wolfssl/wolfcrypt/settings.h
|
||||||
|
Uncomment out #define WOLFSSL_ESPWROOM32 in /path/to/wolfssl/wolfssl/wolfcrypt/settings.h
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
1. The *user_settings.h* for each example can be found in /path/to/examples/protocols/wolfssl_xxx/main/include/user_settings.h
|
||||||
|
|
||||||
|
## Build examples
|
||||||
|
1. See README in each example folder
|
||||||
|
|
||||||
|
## Support
|
||||||
|
For question please email [support@wolfssl.com]
|
||||||
|
|
||||||
|
Note: This is tested with "Ubuntu 18.04.1 LTS" and ESP32-WROOM-32.
|
@@ -0,0 +1,6 @@
|
|||||||
|
# The following lines of boilerplate have to be in your project's
|
||||||
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
project(wolfssl_benchmark)
|
11
IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/Makefile
Normal file
11
IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/Makefile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := wolfssl_benchmark
|
||||||
|
|
||||||
|
CFLAGS += -DWOLFSSL_USER_SETTINGS
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk
|
||||||
|
|
14
IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/README.md
Normal file
14
IDE/Espressif/ESP-IDF/examples/wolfssl_benchmark/README.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
#wolfSSL Example
|
||||||
|
|
||||||
|
The Example contains of wolfSSL benchmark program.
|
||||||
|
|
||||||
|
1. "make menuconfig" to configure the program.
|
||||||
|
1-1. Example Configuration ->
|
||||||
|
BENCH_ARG : argument that you want to use. Default is "-lng 0"
|
||||||
|
The list of argument can be find in help.
|
||||||
|
|
||||||
|
When you want to run the benchmark program
|
||||||
|
1. "make flash" to compile and load the firmware
|
||||||
|
2. "make monitor" to see the message
|
||||||
|
|
||||||
|
See the README.md file in the upper level 'examples' directory for more information about examples.
|
@@ -0,0 +1,29 @@
|
|||||||
|
menu "Example Configuration"
|
||||||
|
|
||||||
|
config BENCH_ARGV
|
||||||
|
string "Arguments for benchmark test"
|
||||||
|
default "-lng 0"
|
||||||
|
help
|
||||||
|
-? <num> Help, print this usage
|
||||||
|
0: English, 1: Japanese
|
||||||
|
-csv Print terminal output in csv format
|
||||||
|
-base10 Display bytes as power of 10 (eg 1 kB = 1000 Bytes)
|
||||||
|
-no_aad No additional authentication data passed.
|
||||||
|
-dgst_full Full digest operation performed.
|
||||||
|
-rsa_sign Measure RSA sign/verify instead of encrypt/decrypt.
|
||||||
|
-<alg> Algorithm to benchmark. Available algorithms include:
|
||||||
|
cipher aes-cbc aes-gcm chacha20 chacha20-poly1305
|
||||||
|
digest md5 poly1305 sha sha2 sha224 sha256 sha384 sha512 sha3
|
||||||
|
sha3-224 sha3-256 sha3-384 sha3-512
|
||||||
|
mac hmac hmac-md5 hmac-sha hmac-sha224 hmac-sha256 hmac-sha384
|
||||||
|
hmac-sha512
|
||||||
|
asym rsa rsa-sz dh ecc-kg ecc
|
||||||
|
other rng
|
||||||
|
-lng <num> Display benchmark result by specified language.
|
||||||
|
0: English, 1: Japanese
|
||||||
|
<num> Size of block in bytes
|
||||||
|
|
||||||
|
e.g -lng 1
|
||||||
|
e.g sha
|
||||||
|
|
||||||
|
endmenu
|
@@ -0,0 +1,8 @@
|
|||||||
|
#
|
||||||
|
# Main component makefile.
|
||||||
|
#
|
||||||
|
# This Makefile can be left empty. By default, it will take the sources in the
|
||||||
|
# src/ directory, compile them and link them into lib(subdirectory_name).a
|
||||||
|
# in the build directory. This behaviour is entirely configurable,
|
||||||
|
# please read the ESP-IDF documents if you need to do this.
|
||||||
|
#
|
@@ -0,0 +1,80 @@
|
|||||||
|
/* helper.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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 <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
|
#define WOLFSSL_BENCH_ARGV CONFIG_BENCH_ARGV
|
||||||
|
|
||||||
|
char* __argv[22];
|
||||||
|
|
||||||
|
int construct_argv()
|
||||||
|
{
|
||||||
|
int cnt = 0;
|
||||||
|
int i = 0;
|
||||||
|
int len = 0;
|
||||||
|
char *_argv; /* buffer for copying the string */
|
||||||
|
char *ch; /* char pointer to trace the string */
|
||||||
|
char buff[16] = { 0 }; /* buffer for a argument copy */
|
||||||
|
|
||||||
|
printf("arg:%s\n", CONFIG_BENCH_ARGV);
|
||||||
|
len = strlen(CONFIG_BENCH_ARGV);
|
||||||
|
_argv = (char*)malloc(len + 1);
|
||||||
|
if (!_argv) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
memset(_argv, 0, len+1);
|
||||||
|
memcpy(_argv, CONFIG_BENCH_ARGV, len);
|
||||||
|
_argv[len] = '\0';
|
||||||
|
ch = _argv;
|
||||||
|
|
||||||
|
__argv[cnt] = malloc(10);
|
||||||
|
sprintf(__argv[cnt], "benchmark");
|
||||||
|
__argv[9] = '\0';
|
||||||
|
cnt = 1;
|
||||||
|
|
||||||
|
while (*ch != '\0')
|
||||||
|
{
|
||||||
|
/* skip white-space */
|
||||||
|
while (*ch == ' ') { ++ch; }
|
||||||
|
|
||||||
|
memset(buff, 0, sizeof(buff));
|
||||||
|
/* copy each args into buffer */
|
||||||
|
i = 0;
|
||||||
|
while ((*ch != ' ') && (*ch != '\0') && (i < 16)) {
|
||||||
|
buff[i] = *ch;
|
||||||
|
++i;
|
||||||
|
++ch;
|
||||||
|
}
|
||||||
|
/* copy the string into argv */
|
||||||
|
__argv[cnt] = (char*)malloc(i + 1);
|
||||||
|
memset(__argv[cnt], 0, i + 1);
|
||||||
|
memcpy(__argv[cnt], buff, i + 1);
|
||||||
|
/* next args */
|
||||||
|
++cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(_argv);
|
||||||
|
|
||||||
|
return (cnt);
|
||||||
|
}
|
@@ -0,0 +1,51 @@
|
|||||||
|
/* user_settings.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define BENCH_EMBEDDED
|
||||||
|
#define USE_CERT_BUFFERS_2048
|
||||||
|
|
||||||
|
/* TLS 1.3 */
|
||||||
|
#define WOLFSSL_TLS13
|
||||||
|
#define HAVE_TLS_EXTENSIONS
|
||||||
|
#define WC_RSA_PSS
|
||||||
|
#define HAVE_HKDF
|
||||||
|
#define HAVE_FFDHE_2048
|
||||||
|
#define HAVE_AEAD
|
||||||
|
#define HAVE_SUPPORTED_CURVES
|
||||||
|
|
||||||
|
#define SINGLE_THREADED /* or define RTOS option */
|
||||||
|
#define NO_FILESYSTEM
|
||||||
|
|
||||||
|
#define HAVE_AESGCM
|
||||||
|
#define WOLFSSL_SHA512
|
||||||
|
#define HAVE_ECC
|
||||||
|
#define HAVE_CURVE25519
|
||||||
|
#define CURVE25519_SMALL
|
||||||
|
#define HAVE_ED25519
|
||||||
|
|
||||||
|
/* debug options */
|
||||||
|
/* #define DEBUG_WOLFSSL */
|
||||||
|
|
||||||
|
/* date/time */
|
||||||
|
/* if it cannot adjust time in the device, */
|
||||||
|
/* enable macro below */
|
||||||
|
/* #define NO_ASN_TIME */
|
||||||
|
/* #define XTIME time */
|
@@ -0,0 +1,4 @@
|
|||||||
|
CONFIG_BENCH_ARGV="-lng 0"
|
||||||
|
CONFIG_MAIN_TASK_STACK_SIZE=5000
|
||||||
|
CONFIG_FREERTOS_HZ=1000
|
||||||
|
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=
|
@@ -0,0 +1,6 @@
|
|||||||
|
# The following lines of boilerplate have to be in your project's
|
||||||
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
project(wolfssl_client)
|
11
IDE/Espressif/ESP-IDF/examples/wolfssl_client/Makefile
Normal file
11
IDE/Espressif/ESP-IDF/examples/wolfssl_client/Makefile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := wolfssl_client
|
||||||
|
|
||||||
|
CFLAGS += -DWOLFSSL_USER_SETTINGS
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk
|
||||||
|
|
19
IDE/Espressif/ESP-IDF/examples/wolfssl_client/README.md
Normal file
19
IDE/Espressif/ESP-IDF/examples/wolfssl_client/README.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#wolfssl Example
|
||||||
|
|
||||||
|
The Example contains of wolfSSL tls client demo.
|
||||||
|
|
||||||
|
1. "make menuconfig" to config the project
|
||||||
|
1-1. Example Configuration ->
|
||||||
|
WIFI SSID: your own WIFI, which is connected to the Internet.(default is "myssid")
|
||||||
|
WIFI Password: WIFI password, and default is "mypassword"
|
||||||
|
Target host ip address : the host that you want to connect to.(default is 127.0.0.1)
|
||||||
|
|
||||||
|
Note: the example program uses 11111 port. If you want to use different port
|
||||||
|
, you need to modifiy DEFAULT_PORT definition in the code.
|
||||||
|
|
||||||
|
When you want to test the wolfSSL client
|
||||||
|
1. "make falsh monitor" to load the firmware and see the context
|
||||||
|
2. You can use <wolfssl>/examples/server/server program for test.
|
||||||
|
e.g. Launch ./examples/server/server -v 4 -b -i
|
||||||
|
|
||||||
|
See the README.md file in the upper level 'examples' directory for more information about examples.
|
@@ -0,0 +1,21 @@
|
|||||||
|
menu "Example Configuration"
|
||||||
|
|
||||||
|
config WIFI_SSID
|
||||||
|
string "WiFi SSID"
|
||||||
|
default "myssid"
|
||||||
|
help
|
||||||
|
SSID (network name) for the example to connect to.
|
||||||
|
|
||||||
|
config WIFI_PASSWORD
|
||||||
|
string "WiFi Password"
|
||||||
|
default "mypassword"
|
||||||
|
help
|
||||||
|
WiFi password (WPA or WPA2) for the example to use.
|
||||||
|
|
||||||
|
config TARGET_HOST
|
||||||
|
string "Target host"
|
||||||
|
default "127.0.01.1"
|
||||||
|
help
|
||||||
|
host address for the example to connect
|
||||||
|
|
||||||
|
endmenu
|
151
IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/client-tls.c
Normal file
151
IDE/Espressif/ESP-IDF/examples/wolfssl_client/main/client-tls.c
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
/* client-tls-callback.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
/* the usual suspects */
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* ESP specific */
|
||||||
|
#include "wifi_connect.h"
|
||||||
|
|
||||||
|
/* socket includes */
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/* wolfSSL */
|
||||||
|
#include <wolfssl/options.h>
|
||||||
|
#include <wolfssl/ssl.h>
|
||||||
|
#include <wolfssl/certs_test.h>
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_TRACK_MEMORY
|
||||||
|
#include <wolfssl/wolfcrypt/mem_track.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *TAG = "tls_client";
|
||||||
|
|
||||||
|
void tls_smp_client_task()
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
int sockfd;
|
||||||
|
struct sockaddr_in servAddr;
|
||||||
|
char buff[256];
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
/* declare wolfSSL objects */
|
||||||
|
WOLFSSL_CTX *ctx;
|
||||||
|
WOLFSSL *ssl;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("tls_smp_client_task");
|
||||||
|
|
||||||
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
WOLFSSL_MSG("Debug ON");
|
||||||
|
wolfSSL_Debugging_ON();
|
||||||
|
#endif
|
||||||
|
/* 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) {
|
||||||
|
printf("ERROR: failed to create the socket\n");
|
||||||
|
}
|
||||||
|
/* Create and initialize WOLFSSL_CTX */
|
||||||
|
if ((ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())) == NULL) {
|
||||||
|
printf("ERROR: failed to create WOLFSSL_CTX\n");
|
||||||
|
}
|
||||||
|
WOLFSSL_MSG("Loading...cert");
|
||||||
|
/* Load client certificates into WOLFSSL_CTX */
|
||||||
|
if ((ret = wolfSSL_CTX_load_verify_buffer(ctx, ca_cert_der_2048,
|
||||||
|
sizeof_ca_cert_der_2048, WOLFSSL_FILETYPE_ASN1)) != SSL_SUCCESS) {
|
||||||
|
printf("ERROR: failed to load %d, please check the file.\n",ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
WOLFSSL_MSG("inet_pton");
|
||||||
|
if ((ret = inet_pton(AF_INET, TLS_SMP_TARGET_HOST,
|
||||||
|
&servAddr.sin_addr)) != 1) {
|
||||||
|
printf("ERROR: invalid address ret=%d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Connect to the server */
|
||||||
|
sprintf(buff, "Connecting to server....%s(port:%d)", TLS_SMP_TARGET_HOST
|
||||||
|
, DEFAULT_PORT);
|
||||||
|
WOLFSSL_MSG(buff);
|
||||||
|
if ((ret = connect(sockfd, (struct sockaddr *)&servAddr,
|
||||||
|
sizeof(servAddr))) == -1){
|
||||||
|
printf("ERROR: failed to connect ret=%d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
WOLFSSL_MSG("Create a WOLFSSL object");
|
||||||
|
/* Create a WOLFSSL object */
|
||||||
|
if ((ssl = wolfSSL_new(ctx)) == NULL) {
|
||||||
|
printf("ERROR: failed to create WOLFSSL object\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attach wolfSSL to the socket */
|
||||||
|
wolfSSL_set_fd(ssl, sockfd);
|
||||||
|
|
||||||
|
WOLFSSL_MSG("Connect to wolfSSL on the server side");
|
||||||
|
/* Connect to wolfSSL on the server side */
|
||||||
|
if (wolfSSL_connect(ssl) != SSL_SUCCESS) {
|
||||||
|
printf("ERROR: failed to connect to wolfSSL\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Get a message for the server from stdin */
|
||||||
|
WOLFSSL_MSG("Message for server: ");
|
||||||
|
memset(buff, 0, sizeof(buff));
|
||||||
|
sprintf(buff, "message from client\n");
|
||||||
|
len = strnlen(buff, sizeof(buff));
|
||||||
|
/* Send the message to the server */
|
||||||
|
if (wolfSSL_write(ssl, buff, len) != len) {
|
||||||
|
printf("ERROR: failed to write\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the server data into our buff array */
|
||||||
|
memset(buff, 0, sizeof(buff));
|
||||||
|
if (wolfSSL_read(ssl, buff, sizeof(buff) - 1) == -1) {
|
||||||
|
printf("ERROR: failed to read\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print to stdout any data the server sends */
|
||||||
|
WOLFSSL_MSG("Server:");
|
||||||
|
WOLFSSL_MSG(buff);
|
||||||
|
/* Cleanup and return */
|
||||||
|
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 */
|
||||||
|
|
||||||
|
vTaskDelete(NULL);
|
||||||
|
|
||||||
|
return; /* Return reporting a success */
|
||||||
|
}
|
@@ -0,0 +1,8 @@
|
|||||||
|
#
|
||||||
|
# Main component makefile.
|
||||||
|
#
|
||||||
|
# This Makefile can be left empty. By default, it will take the sources in the
|
||||||
|
# src/ directory, compile them and link them into lib(subdirectory_name).a
|
||||||
|
# in the build directory. This behaviour is entirely configurable,
|
||||||
|
# please read the ESP-IDF documents if you need to do this.
|
||||||
|
#
|
@@ -0,0 +1,51 @@
|
|||||||
|
/* user_settings.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define BENCH_EMBEDDED
|
||||||
|
#define USE_CERT_BUFFERS_2048
|
||||||
|
|
||||||
|
/* TLS 1.3 */
|
||||||
|
#define WOLFSSL_TLS13
|
||||||
|
#define HAVE_TLS_EXTENSIONS
|
||||||
|
#define WC_RSA_PSS
|
||||||
|
#define HAVE_HKDF
|
||||||
|
#define HAVE_FFDHE_2048
|
||||||
|
#define HAVE_AEAD
|
||||||
|
#define HAVE_SUPPORTED_CURVES
|
||||||
|
|
||||||
|
#define SINGLE_THREADED /* or define RTOS option */
|
||||||
|
#define NO_FILESYSTEM
|
||||||
|
|
||||||
|
#define HAVE_AESGCM
|
||||||
|
#define WOLFSSL_SHA512
|
||||||
|
#define HAVE_ECC
|
||||||
|
#define HAVE_CURVE25519
|
||||||
|
#define CURVE25519_SMALL
|
||||||
|
#define HAVE_ED25519
|
||||||
|
|
||||||
|
/* debug options */
|
||||||
|
/* #define DEBUG_WOLFSSL */
|
||||||
|
|
||||||
|
/* date/time */
|
||||||
|
/* if it cannot adjust time in the device, */
|
||||||
|
/* enable macro below */
|
||||||
|
/* #define NO_ASN_TIME */
|
||||||
|
/* #define XTIME time */
|
@@ -0,0 +1,38 @@
|
|||||||
|
/* user_settings.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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 _TLS_WIFI_H_
|
||||||
|
#define _TLS_WIFI_H_
|
||||||
|
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "esp_wifi.h"
|
||||||
|
#include "esp_event_loop.h"
|
||||||
|
|
||||||
|
#define DEFAULT_PORT 11111
|
||||||
|
|
||||||
|
#define TLS_SMP_CLIENT_TASK_NAME "tls_client_example"
|
||||||
|
#define TLS_SMP_CLIENT_TASK_WORDS 10240
|
||||||
|
#define TLS_SMP_CLIENT_TASK_PRIORITY 8
|
||||||
|
|
||||||
|
#define TLS_SMP_WIFI_SSID CONFIG_WIFI_SSID
|
||||||
|
#define TLS_SMP_WIFI_PASS CONFIG_WIFI_PASSWORD
|
||||||
|
#define TLS_SMP_TARGET_HOST CONFIG_TARGET_HOST
|
||||||
|
|
||||||
|
#endif
|
@@ -0,0 +1,146 @@
|
|||||||
|
/* wifi_connect.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
/*ESP specific */
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "freertos/event_groups.h"
|
||||||
|
#include "wifi_connect.h"
|
||||||
|
#include "lwip/sockets.h"
|
||||||
|
#include "lwip/netdb.h"
|
||||||
|
#include "lwip/apps/sntp.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
|
const static int CONNECTED_BIT = BIT0;
|
||||||
|
static EventGroupHandle_t wifi_event_group;
|
||||||
|
/* proto-type */
|
||||||
|
extern void tls_smp_client_task();
|
||||||
|
static void tls_smp_client_init();
|
||||||
|
|
||||||
|
const static char *TAG = "tls_client";
|
||||||
|
|
||||||
|
static EventGroupHandle_t wifi_event_group;
|
||||||
|
extern void tls_smp_client_task();
|
||||||
|
|
||||||
|
static void set_time()
|
||||||
|
{
|
||||||
|
/* set dummy wallclock time. */
|
||||||
|
struct timeval utctime;
|
||||||
|
struct timezone tz;
|
||||||
|
struct strftime_buf;
|
||||||
|
time_t now;
|
||||||
|
struct tm timeinfo;
|
||||||
|
char strftime_buf[64];
|
||||||
|
|
||||||
|
utctime.tv_sec = 1542008020; /* dummy time: Mon Nov 12 07:33:40 2018 */
|
||||||
|
utctime.tv_usec = 0;
|
||||||
|
tz.tz_minuteswest = 0;
|
||||||
|
tz.tz_dsttime = 0;
|
||||||
|
|
||||||
|
settimeofday(&utctime, &tz);
|
||||||
|
|
||||||
|
time(&now);
|
||||||
|
localtime_r(&now, &timeinfo);
|
||||||
|
|
||||||
|
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
|
||||||
|
ESP_LOGI(TAG, "The current date/time is: %s", strftime_buf);
|
||||||
|
|
||||||
|
/* wait until wifi connect */
|
||||||
|
xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,
|
||||||
|
false, true, portMAX_DELAY);
|
||||||
|
/* now we start client tasks. */
|
||||||
|
tls_smp_client_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create task */
|
||||||
|
static void tls_smp_client_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
xTaskHandle _handle;
|
||||||
|
/* http://esp32.info/docs/esp_idf/html/dd/d3c/group__xTaskCreate.html */
|
||||||
|
ret = xTaskCreate(tls_smp_client_task,
|
||||||
|
TLS_SMP_CLIENT_TASK_NAME,
|
||||||
|
TLS_SMP_CLIENT_TASK_WORDS,
|
||||||
|
NULL,
|
||||||
|
TLS_SMP_CLIENT_TASK_PRIORITY,
|
||||||
|
&_handle);
|
||||||
|
|
||||||
|
if (ret != pdPASS) {
|
||||||
|
ESP_LOGI(TAG, "create thread %s failed", TLS_SMP_CLIENT_TASK_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* event hander for wifi events */
|
||||||
|
static esp_err_t wifi_event_handler(void *ctx, system_event_t *event)
|
||||||
|
{
|
||||||
|
switch (event->event_id)
|
||||||
|
{
|
||||||
|
case SYSTEM_EVENT_STA_START:
|
||||||
|
esp_wifi_connect();
|
||||||
|
break;
|
||||||
|
case SYSTEM_EVENT_STA_GOT_IP:
|
||||||
|
ESP_LOGI(TAG, "got ip:%s",
|
||||||
|
ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
|
||||||
|
/* http://esp32.info/docs/esp_idf/html/dd/d08/group__xEventGroupSetBits.html */
|
||||||
|
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
|
||||||
|
break;
|
||||||
|
case SYSTEM_EVENT_STA_DISCONNECTED:
|
||||||
|
esp_wifi_connect();
|
||||||
|
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
/* entry point */
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG, "Start app_main...");
|
||||||
|
ESP_ERROR_CHECK(nvs_flash_init());
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "Initialize wifi");
|
||||||
|
/* TCP/IP adapter initialization */
|
||||||
|
tcpip_adapter_init();
|
||||||
|
|
||||||
|
/* */
|
||||||
|
wifi_event_group = xEventGroupCreate();
|
||||||
|
ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL));
|
||||||
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
|
||||||
|
|
||||||
|
wifi_config_t wifi_config = {
|
||||||
|
.sta = {
|
||||||
|
.ssid = TLS_SMP_WIFI_SSID,
|
||||||
|
.password = TLS_SMP_WIFI_PASS,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
/* WiFi station mode */
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
|
||||||
|
/* Wifi Set the configuration of the ESP32 STA or AP */
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
|
||||||
|
/* Start Wifi */
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_start() );
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "wifi_init_sta finished.");
|
||||||
|
ESP_LOGI(TAG, "connect to ap SSID:%s password:%s",
|
||||||
|
TLS_SMP_WIFI_SSID, TLS_SMP_WIFI_PASS);
|
||||||
|
ESP_LOGI(TAG, "Set dummy time...");
|
||||||
|
set_time();
|
||||||
|
}
|
@@ -0,0 +1,7 @@
|
|||||||
|
# The following lines of boilerplate have to be in your project's
|
||||||
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
project(tls_server)
|
11
IDE/Espressif/ESP-IDF/examples/wolfssl_server/Makefile
Normal file
11
IDE/Espressif/ESP-IDF/examples/wolfssl_server/Makefile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := tls_server
|
||||||
|
|
||||||
|
CFLAGS += -DWOLFSSL_USER_SETTINGS
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk
|
||||||
|
|
19
IDE/Espressif/ESP-IDF/examples/wolfssl_server/README.md
Normal file
19
IDE/Espressif/ESP-IDF/examples/wolfssl_server/README.md
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#wolfSSL Example
|
||||||
|
|
||||||
|
The Example contains a wolfSSL simple server.
|
||||||
|
|
||||||
|
1. "make menuconfigure" to configure the project
|
||||||
|
1-1. Example Configuration ->
|
||||||
|
WIFI SSID : your own WIFI, which is connected to the Internet.(default is "myssid")
|
||||||
|
WIFI Password : WIFI password, and default is "mypassword"
|
||||||
|
|
||||||
|
When you want to test the wolfSSL simple server demo
|
||||||
|
1. "make flash" to compile the code and load the firmware
|
||||||
|
2. "make monitor" to see the context. The assigned IP address can be found in output message.
|
||||||
|
3. Once the server connects to the wifi, it is waiting for client request.
|
||||||
|
("Waiting for a connection..." message will be displayed.)
|
||||||
|
4. You can use <wolfssl>/examples/client to test the server
|
||||||
|
e.g ./example/client/client -h xx.xx.xx
|
||||||
|
|
||||||
|
See the README.md file in the upper level 'examples' directory for more information about examples.
|
||||||
|
|
@@ -0,0 +1,15 @@
|
|||||||
|
menu "Example Configuration"
|
||||||
|
|
||||||
|
config WIFI_SSID
|
||||||
|
string "WiFi SSID"
|
||||||
|
default "myssid"
|
||||||
|
help
|
||||||
|
SSID (network name) for the example to connect to.
|
||||||
|
|
||||||
|
config WIFI_PASSWORD
|
||||||
|
string "WiFi Password"
|
||||||
|
default "mypassword"
|
||||||
|
help
|
||||||
|
WiFi password (WPA or WPA2) for the example to use.
|
||||||
|
|
||||||
|
endmenu
|
@@ -0,0 +1,3 @@
|
|||||||
|
#
|
||||||
|
# Main Makefile. This is basically the same as a component makefile.
|
||||||
|
#
|
@@ -0,0 +1,51 @@
|
|||||||
|
/* user_settings.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define BENCH_EMBEDDED
|
||||||
|
#define USE_CERT_BUFFERS_2048
|
||||||
|
|
||||||
|
/* TLS 1.3 */
|
||||||
|
#define WOLFSSL_TLS13
|
||||||
|
#define HAVE_TLS_EXTENSIONS
|
||||||
|
#define WC_RSA_PSS
|
||||||
|
#define HAVE_HKDF
|
||||||
|
#define HAVE_FFDHE_2048
|
||||||
|
#define HAVE_AEAD
|
||||||
|
#define HAVE_SUPPORTED_CURVES
|
||||||
|
|
||||||
|
#define SINGLE_THREADED /* or define RTOS option */
|
||||||
|
#define NO_FILESYSTEM
|
||||||
|
|
||||||
|
#define HAVE_AESGCM
|
||||||
|
#define WOLFSSL_SHA512
|
||||||
|
#define HAVE_ECC
|
||||||
|
#define HAVE_CURVE25519
|
||||||
|
#define CURVE25519_SMALL
|
||||||
|
#define HAVE_ED25519
|
||||||
|
|
||||||
|
/* debug options */
|
||||||
|
/* #define DEBUG_WOLFSSL */
|
||||||
|
|
||||||
|
/* date/time */
|
||||||
|
/* if it cannot adjust time in the device, */
|
||||||
|
/* enable macro below */
|
||||||
|
/* #define NO_ASN_TIME */
|
||||||
|
/* #define XTIME time */
|
@@ -0,0 +1,37 @@
|
|||||||
|
/* wifi_connect.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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 _TLS_WIFI_H_
|
||||||
|
#define _TLS_WIFI_H_
|
||||||
|
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include "esp_wifi.h"
|
||||||
|
#include "esp_event_loop.h"
|
||||||
|
|
||||||
|
#define DEFAULT_PORT 11111
|
||||||
|
|
||||||
|
#define TLS_SMP_SERVER_TASK_NAME "tls_sever_example"
|
||||||
|
#define TLS_SMP_SERVER_TASK_WORDS 10240
|
||||||
|
#define TLS_SMP_SERVER_TASK_PRIORITY 8
|
||||||
|
|
||||||
|
#define TLS_SMP_WIFI_SSID CONFIG_WIFI_SSID
|
||||||
|
#define TLS_SMP_WIFI_PASS CONFIG_WIFI_PASSWORD
|
||||||
|
|
||||||
|
#endif
|
170
IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/server-tls.c
Normal file
170
IDE/Espressif/ESP-IDF/examples/wolfssl_server/main/server-tls.c
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
/* server-tls-callback.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
/* the usual suspects */
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
/* socket includes */
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <arpa/inet.h>
|
||||||
|
#include <netinet/in.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
/* wolfSSL */
|
||||||
|
#include <wolfssl/options.h>
|
||||||
|
#include <wolfssl/ssl.h>
|
||||||
|
#include <wolfssl/certs_test.h>
|
||||||
|
|
||||||
|
/* ESP specific */
|
||||||
|
#include "wifi_connect.h"
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_TRACK_MEMORY
|
||||||
|
#include <wolfssl/wolfcrypt/mem_track.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
const char *TAG = "tls_server";
|
||||||
|
|
||||||
|
void tls_smp_server_task()
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
|
||||||
|
/* declare wolfSSL objects */
|
||||||
|
WOLFSSL_CTX* ctx;
|
||||||
|
WOLFSSL* ssl;
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("tls_smp_server_task");
|
||||||
|
|
||||||
|
#ifdef DEBUG_WOLFSSL
|
||||||
|
WOLFSSL_MSG("Debug ON");
|
||||||
|
wolfSSL_Debugging_ON();
|
||||||
|
#endif
|
||||||
|
/* Initialize wolfSSL */
|
||||||
|
WOLFSSL_MSG("Start wolfSSL_Init()");
|
||||||
|
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. */
|
||||||
|
WOLFSSL_MSG( "start socket())");
|
||||||
|
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
|
||||||
|
printf("ERROR: failed to create the socket");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create and initialize WOLFSSL_CTX */
|
||||||
|
WOLFSSL_MSG("Create and initialize WOLFSSL_CTX");
|
||||||
|
if ((ctx = wolfSSL_CTX_new(wolfSSLv23_server_method())) == NULL) {
|
||||||
|
printf("ERROR: failed to create WOLFSSL_CTX");
|
||||||
|
}
|
||||||
|
WOLFSSL_MSG("Loading certificate...");
|
||||||
|
/* Load server certificates into WOLFSSL_CTX */
|
||||||
|
if ((ret = wolfSSL_CTX_use_certificate_buffer(ctx, server_cert_der_2048,
|
||||||
|
sizeof_server_cert_der_2048,
|
||||||
|
WOLFSSL_FILETYPE_ASN1)) != SSL_SUCCESS) {
|
||||||
|
printf("ERROR: failed to load cert");
|
||||||
|
}
|
||||||
|
WOLFSSL_MSG("Loading key info...");
|
||||||
|
/* Load server key into WOLFSSL_CTX */
|
||||||
|
if((ret=wolfSSL_CTX_use_PrivateKey_buffer(ctx,
|
||||||
|
server_key_der_2048, sizeof_server_key_der_2048,
|
||||||
|
WOLFSSL_FILETYPE_ASN1)) != SSL_SUCCESS) {
|
||||||
|
printf("ERROR: failed to load privatekey");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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) {
|
||||||
|
printf("ERROR: failed to bind");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Listen for a new connection, allow 5 pending connections */
|
||||||
|
if (listen(sockfd, 5) == -1) {
|
||||||
|
printf("ERROR: failed to listen");
|
||||||
|
}
|
||||||
|
/* Continue to accept clients until shutdown is issued */
|
||||||
|
while (!shutdown) {
|
||||||
|
WOLFSSL_MSG("Waiting for a connection...");
|
||||||
|
/* Accept client connections */
|
||||||
|
if ((connd = accept(sockfd, (struct sockaddr*)&clientAddr, &size))
|
||||||
|
== -1) {
|
||||||
|
printf("ERROR: failed to accept the connection");
|
||||||
|
}
|
||||||
|
/* Create a WOLFSSL object */
|
||||||
|
if ((ssl = wolfSSL_new(ctx)) == NULL) {
|
||||||
|
printf("ERROR: failed to create WOLFSSL object");
|
||||||
|
}
|
||||||
|
/* Attach wolfSSL to the socket */
|
||||||
|
wolfSSL_set_fd(ssl, connd);
|
||||||
|
/* Establish TLS connection */
|
||||||
|
ret = wolfSSL_accept(ssl);
|
||||||
|
if (ret != SSL_SUCCESS) {
|
||||||
|
printf("wolfSSL_accept error %d", wolfSSL_get_error(ssl, ret));
|
||||||
|
}
|
||||||
|
WOLFSSL_MSG("Client connected successfully");
|
||||||
|
/* Read the client data into our buff array */
|
||||||
|
memset(buff, 0, sizeof(buff));
|
||||||
|
if (wolfSSL_read(ssl, buff, sizeof(buff)-1) == -1) {
|
||||||
|
printf("ERROR: failed to read");
|
||||||
|
}
|
||||||
|
/* Print to stdout any data the client sends */
|
||||||
|
WOLFSSL_MSG("Client sends:");
|
||||||
|
WOLFSSL_MSG(buff);
|
||||||
|
/* Check for server shutdown command */
|
||||||
|
if (strncmp(buff, "shutdown", 8) == 0) {
|
||||||
|
WOLFSSL_MSG("Shutdown command issued!");
|
||||||
|
shutdown = 1;
|
||||||
|
}
|
||||||
|
/* Write our reply into buff */
|
||||||
|
memset(buff, 0, sizeof(buff));
|
||||||
|
memcpy(buff, "I hear ya fa shizzle!", sizeof(buff));
|
||||||
|
len = strnlen(buff, sizeof(buff));
|
||||||
|
/* Reply back to the client */
|
||||||
|
if (wolfSSL_write(ssl, buff, len) != len) {
|
||||||
|
printf("ERROR: failed to write");
|
||||||
|
}
|
||||||
|
/* Cleanup after this connection */
|
||||||
|
wolfSSL_free(ssl); /* Free the wolfSSL object */
|
||||||
|
close(connd); /* Close the connection to the client */
|
||||||
|
}
|
||||||
|
/* 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 */
|
||||||
|
|
||||||
|
vTaskDelete(NULL);
|
||||||
|
|
||||||
|
return; /* Return reporting a success */
|
||||||
|
}
|
@@ -0,0 +1,143 @@
|
|||||||
|
/* wifi_connect.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
/*ESP specific */
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "freertos/event_groups.h"
|
||||||
|
#include "wifi_connect.h"
|
||||||
|
#include "lwip/sockets.h"
|
||||||
|
#include "lwip/netdb.h"
|
||||||
|
#include "lwip/apps/sntp.h"
|
||||||
|
#include "nvs_flash.h"
|
||||||
|
|
||||||
|
const static int CONNECTED_BIT = BIT0;
|
||||||
|
static EventGroupHandle_t wifi_event_group;
|
||||||
|
/* prefix for logging */
|
||||||
|
const static char *TAG = "tls_server";
|
||||||
|
/* proto-type difinition */
|
||||||
|
extern void tls_smp_server_task();
|
||||||
|
static void tls_smp_server_init();
|
||||||
|
|
||||||
|
static void set_time()
|
||||||
|
{
|
||||||
|
/* set dummy wallclock time. */
|
||||||
|
struct timeval utctime;
|
||||||
|
struct timezone tz;
|
||||||
|
struct strftime_buf;
|
||||||
|
time_t now;
|
||||||
|
struct tm timeinfo;
|
||||||
|
char strftime_buf[64];
|
||||||
|
|
||||||
|
utctime.tv_sec = 1542008020; /* dummy time: Mon Nov 12 07:33:40 2018 */
|
||||||
|
utctime.tv_usec = 0;
|
||||||
|
tz.tz_minuteswest = 0;
|
||||||
|
tz.tz_dsttime = 0;
|
||||||
|
|
||||||
|
settimeofday(&utctime, &tz);
|
||||||
|
|
||||||
|
time(&now);
|
||||||
|
localtime_r(&now, &timeinfo);
|
||||||
|
|
||||||
|
strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo);
|
||||||
|
ESP_LOGI(TAG, "The current date/time is: %s", strftime_buf);
|
||||||
|
|
||||||
|
/* wait until wifi connect */
|
||||||
|
xEventGroupWaitBits(wifi_event_group, CONNECTED_BIT,
|
||||||
|
false, true, portMAX_DELAY);
|
||||||
|
/* now we start client tasks. */
|
||||||
|
tls_smp_server_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* create task */
|
||||||
|
static void tls_smp_server_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
xTaskHandle _handle;
|
||||||
|
/* http://esp32.info/docs/esp_idf/html/dd/d3c/group__xTaskCreate.html */
|
||||||
|
ret = xTaskCreate(tls_smp_server_task,
|
||||||
|
TLS_SMP_SERVER_TASK_NAME,
|
||||||
|
TLS_SMP_SERVER_TASK_WORDS,
|
||||||
|
NULL,
|
||||||
|
TLS_SMP_SERVER_TASK_PRIORITY,
|
||||||
|
&_handle);
|
||||||
|
|
||||||
|
if (ret != pdPASS) {
|
||||||
|
ESP_LOGI(TAG, "create thread %s failed", TLS_SMP_SERVER_TASK_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* event hander for wifi events */
|
||||||
|
static esp_err_t wifi_event_handler(void *ctx, system_event_t *event)
|
||||||
|
{
|
||||||
|
switch (event->event_id)
|
||||||
|
{
|
||||||
|
case SYSTEM_EVENT_STA_START:
|
||||||
|
esp_wifi_connect();
|
||||||
|
break;
|
||||||
|
case SYSTEM_EVENT_STA_GOT_IP:
|
||||||
|
ESP_LOGI(TAG, "got ip:%s",
|
||||||
|
ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip));
|
||||||
|
/* http://esp32.info/docs/esp_idf/html/dd/d08/group__xEventGroupSetBits.html */
|
||||||
|
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
|
||||||
|
break;
|
||||||
|
case SYSTEM_EVENT_STA_DISCONNECTED:
|
||||||
|
esp_wifi_connect();
|
||||||
|
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ESP_OK;
|
||||||
|
}
|
||||||
|
/* entry point */
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG, "Start app_main...");
|
||||||
|
ESP_ERROR_CHECK(nvs_flash_init());
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "Initialize wifi");
|
||||||
|
/* TCP/IP adapter initialization */
|
||||||
|
tcpip_adapter_init();
|
||||||
|
|
||||||
|
/* */
|
||||||
|
wifi_event_group = xEventGroupCreate();
|
||||||
|
ESP_ERROR_CHECK(esp_event_loop_init(wifi_event_handler, NULL));
|
||||||
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
|
||||||
|
|
||||||
|
wifi_config_t wifi_config = {
|
||||||
|
.sta = {
|
||||||
|
.ssid = TLS_SMP_WIFI_SSID,
|
||||||
|
.password = TLS_SMP_WIFI_PASS,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
/* WiFi station mode */
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );
|
||||||
|
/* Wifi Set the configuration of the ESP32 STA or AP */
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );
|
||||||
|
/* Start Wifi */
|
||||||
|
ESP_ERROR_CHECK(esp_wifi_start() );
|
||||||
|
|
||||||
|
ESP_LOGI(TAG, "wifi_init_sta finished.");
|
||||||
|
ESP_LOGI(TAG, "connect to ap SSID:%s password:%s",
|
||||||
|
TLS_SMP_WIFI_SSID, TLS_SMP_WIFI_PASS);
|
||||||
|
ESP_LOGI(TAG, "Set Dummy time...");
|
||||||
|
set_time();
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
# The following five lines of boilerplate have to be in your project's
|
||||||
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
project(wolfssl_test)
|
11
IDE/Espressif/ESP-IDF/examples/wolfssl_test/Makefile
Normal file
11
IDE/Espressif/ESP-IDF/examples/wolfssl_test/Makefile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#
|
||||||
|
# This is a project Makefile. It is assumed the directory this Makefile resides in is a
|
||||||
|
# project subdirectory.
|
||||||
|
#
|
||||||
|
|
||||||
|
PROJECT_NAME := wolfssl_test
|
||||||
|
|
||||||
|
CFLAGS += -DWOLFSSL_USER_SETTINGS
|
||||||
|
|
||||||
|
include $(IDF_PATH)/make/project.mk
|
||||||
|
|
10
IDE/Espressif/ESP-IDF/examples/wolfssl_test/README.md
Normal file
10
IDE/Espressif/ESP-IDF/examples/wolfssl_test/README.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#wolfSSL Example
|
||||||
|
|
||||||
|
The Example contains of wolfSSL test program.
|
||||||
|
|
||||||
|
When you want to run the benchmark program
|
||||||
|
1. "make menuconfig" to configure the program,first
|
||||||
|
1. "make flash" to compile and load the firemware
|
||||||
|
2. "make monitor" to see the message
|
||||||
|
|
||||||
|
See the README.md file in the upper level 'examples' directory for more information about examples.
|
@@ -0,0 +1,3 @@
|
|||||||
|
#
|
||||||
|
# Main Makefile. This is basically the same as a component makefile.
|
||||||
|
#
|
@@ -0,0 +1,51 @@
|
|||||||
|
/* user_settings.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2006-2018 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
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define BENCH_EMBEDDED
|
||||||
|
#define USE_CERT_BUFFERS_2048
|
||||||
|
|
||||||
|
/* TLS 1.3 */
|
||||||
|
#define WOLFSSL_TLS13
|
||||||
|
#define HAVE_TLS_EXTENSIONS
|
||||||
|
#define WC_RSA_PSS
|
||||||
|
#define HAVE_HKDF
|
||||||
|
#define HAVE_FFDHE_2048
|
||||||
|
#define HAVE_AEAD
|
||||||
|
#define HAVE_SUPPORTED_CURVES
|
||||||
|
|
||||||
|
#define SINGLE_THREADED /* or define RTOS option */
|
||||||
|
#define NO_FILESYSTEM
|
||||||
|
|
||||||
|
#define HAVE_AESGCM
|
||||||
|
#define WOLFSSL_SHA512
|
||||||
|
#define HAVE_ECC
|
||||||
|
#define HAVE_CURVE25519
|
||||||
|
#define CURVE25519_SMALL
|
||||||
|
#define HAVE_ED25519
|
||||||
|
|
||||||
|
/* debug options */
|
||||||
|
/* #define DEBUG_WOLFSSL */
|
||||||
|
|
||||||
|
/* date/time */
|
||||||
|
/* if it cannot adjust time in the device, */
|
||||||
|
/* enable macro below */
|
||||||
|
/* #define NO_ASN_TIME */
|
||||||
|
/* #define XTIME time */
|
@@ -0,0 +1,2 @@
|
|||||||
|
CONFIG_MAIN_TASK_STACK_SIZE=5000
|
||||||
|
CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=
|
79
IDE/Espressif/ESP-IDF/libs/CMakeLists.txt
Normal file
79
IDE/Espressif/ESP-IDF/libs/CMakeLists.txt
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
set(CMAKE_CURRENT_SOURCE_DIR ".")
|
||||||
|
set(WOLFSSL_ROOT ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
set(INCLUDE_PATH ${WOLFSSL_ROOT})
|
||||||
|
set(COMPONENT_SRCS
|
||||||
|
"src/keys.c"
|
||||||
|
"src/sniffer.c"
|
||||||
|
"src/tls.c"
|
||||||
|
"src/wolfio.c"
|
||||||
|
"src/crl.c"
|
||||||
|
"src/internal.c"
|
||||||
|
"src/ocsp.c"
|
||||||
|
"src/ssl.c"
|
||||||
|
"src/tls13.c"
|
||||||
|
"wolfcrypt/src/aes.c"
|
||||||
|
"wolfcrypt/src/arc4.c"
|
||||||
|
"wolfcrypt/src/asm.c"
|
||||||
|
"wolfcrypt/src/asn.c"
|
||||||
|
"wolfcrypt/src/blake2b.c"
|
||||||
|
"wolfcrypt/src/camellia.c"
|
||||||
|
"wolfcrypt/src/chacha.c"
|
||||||
|
"wolfcrypt/src/chacha20_poly1305.c"
|
||||||
|
"wolfcrypt/src/cmac.c"
|
||||||
|
"wolfcrypt/src/coding.c"
|
||||||
|
"wolfcrypt/src/compress.c"
|
||||||
|
"wolfcrypt/src/cpuid.c"
|
||||||
|
"wolfcrypt/src/cryptodev.c"
|
||||||
|
"wolfcrypt/src/curve25519.c"
|
||||||
|
"wolfcrypt/src/des3.c"
|
||||||
|
"wolfcrypt/src/dh.c"
|
||||||
|
"wolfcrypt/src/dsa.c"
|
||||||
|
"wolfcrypt/src/ecc.c"
|
||||||
|
"wolfcrypt/src/ecc_fp.c"
|
||||||
|
"wolfcrypt/src/ed25519.c"
|
||||||
|
"wolfcrypt/src/error.c"
|
||||||
|
"wolfcrypt/src/fe_low_mem.c"
|
||||||
|
"wolfcrypt/src/fe_operations.c"
|
||||||
|
"wolfcrypt/src/ge_low_mem.c"
|
||||||
|
"wolfcrypt/src/ge_operations.c"
|
||||||
|
"wolfcrypt/src/hash.c"
|
||||||
|
"wolfcrypt/src/hc128.c"
|
||||||
|
"wolfcrypt/src/hmac.c"
|
||||||
|
"wolfcrypt/src/idea.c"
|
||||||
|
"wolfcrypt/src/integer.c"
|
||||||
|
"wolfcrypt/src/logging.c"
|
||||||
|
"wolfcrypt/src/md2.c"
|
||||||
|
"wolfcrypt/src/md4.c"
|
||||||
|
"wolfcrypt/src/md5.c"
|
||||||
|
"wolfcrypt/src/memory.c"
|
||||||
|
"wolfcrypt/src/pkcs12.c"
|
||||||
|
"wolfcrypt/src/pkcs7.c"
|
||||||
|
"wolfcrypt/src/poly1305.c"
|
||||||
|
"wolfcrypt/src/pwdbased.c"
|
||||||
|
"wolfcrypt/src/rabbit.c"
|
||||||
|
"wolfcrypt/src/random.c"
|
||||||
|
"wolfcrypt/src/ripemd.c"
|
||||||
|
"wolfcrypt/src/rsa.c"
|
||||||
|
"wolfcrypt/src/sha.c"
|
||||||
|
"wolfcrypt/src/sha256.c"
|
||||||
|
"wolfcrypt/src/sha3.c"
|
||||||
|
"wolfcrypt/src/sha512.c"
|
||||||
|
"wolfcrypt/src/signature.c"
|
||||||
|
"wolfcrypt/src/sp_arm32.c"
|
||||||
|
"wolfcrypt/src/sp_arm64.c"
|
||||||
|
"wolfcrypt/src/sp_c32.c"
|
||||||
|
"wolfcrypt/src/sp_c64.c"
|
||||||
|
"wolfcrypt/src/sp_int.c"
|
||||||
|
"wolfcrypt/src/sp_x86_64.c"
|
||||||
|
"wolfcrypt/src/srp.c"
|
||||||
|
"wolfcrypt/src/tfm.c"
|
||||||
|
"wolfcrypt/src/wc_encrypt.c"
|
||||||
|
"wolfcrypt/src/wc_port.c"
|
||||||
|
"wolfcrypt/src/wolfevent.c"
|
||||||
|
"wolfcrypt/src/wolfmath.c"
|
||||||
|
)
|
||||||
|
set(COMPONENT_REQUIRES lwip)
|
||||||
|
set(COMPONENT_ADD_INCLUDEDIRS ../freertos/include/freertos)
|
||||||
|
register_component()
|
13
IDE/Espressif/ESP-IDF/libs/component.mk
Normal file
13
IDE/Espressif/ESP-IDF/libs/component.mk
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#
|
||||||
|
# Component Makefile
|
||||||
|
#
|
||||||
|
|
||||||
|
COMPONENT_ADD_INCLUDEDIRS := .
|
||||||
|
COMPONENT_ADD_INCLUDEDIRS += ../freertos/include/freertos/
|
||||||
|
|
||||||
|
COMPONENT_SRCDIRS := src wolfcrypt/src
|
||||||
|
|
||||||
|
COMPONENT_OBJEXCLUDE := wolfcrypt/src/aes_asm.o
|
||||||
|
COMPONENT_OBJEXCLUDE += wolfcrypt/src/evp.o
|
||||||
|
COMPONENT_OBJEXCLUDE += wolfcrypt/src/misc.o
|
||||||
|
COMPONENT_OBJEXCLUDE += src/bio.o
|
106
IDE/Espressif/ESP-IDF/setup.sh
Executable file
106
IDE/Espressif/ESP-IDF/setup.sh
Executable file
@@ -0,0 +1,106 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# check if IDF_PATH is set
|
||||||
|
if [ -z "$IDF_PATH" ]; then
|
||||||
|
echo "Please follows the instruction of ESP-IDF installation and set IDF_PATH."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
RMDCMD='/bin/rm -rf'
|
||||||
|
MKDCMD='/bin/mkdir'
|
||||||
|
CPDCMD='/bin/cp'
|
||||||
|
|
||||||
|
SCRIPTDIR=`dirname $0`
|
||||||
|
SCRIPTDIR=`cd $SCRIPTDIR && pwd -P`
|
||||||
|
WOLFSSL_ESPIDFDIR=${SCRIPTDIR}
|
||||||
|
WOLFSSL_ESPIDFDIR=`cd $WOLFSSL_ESPIDFDIR && pwd -P`
|
||||||
|
BASEDIR=${SCRIPTDIR}/../../../
|
||||||
|
BASEDIR=`cd ${BASEDIR} && pwd -P`
|
||||||
|
|
||||||
|
# echo $WOLFSSL_ESPIDFDIR
|
||||||
|
|
||||||
|
WOLFSSLLIB_TRG_DIR=${IDF_PATH}/components/wolfssl
|
||||||
|
WOLFSSLEXP_TRG_DIR=${IDF_PATH}/examples/protocols
|
||||||
|
|
||||||
|
if [ ! -d $IDF_PATH ]; then
|
||||||
|
echo "ESP-IDF Development Framework doesn't exist.: $IDF_PATH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Copy files into ESP-IDF development framework
|
||||||
|
pushd $IDF_PATH > /dev/null
|
||||||
|
|
||||||
|
echo "Copy files into $IDF_PATH"
|
||||||
|
# Remove/Create directories
|
||||||
|
${RMDCMD} ${WOLFSSLLIB_TRG_DIR}/
|
||||||
|
${MKDCMD} ${WOLFSSLLIB_TRG_DIR}/
|
||||||
|
|
||||||
|
${MKDCMD} ${WOLFSSLLIB_TRG_DIR}/src
|
||||||
|
${MKDCMD} ${WOLFSSLLIB_TRG_DIR}/wolfcrypt
|
||||||
|
${MKDCMD} ${WOLFSSLLIB_TRG_DIR}/wolfssl
|
||||||
|
|
||||||
|
popd > /dev/null # $WOLFSSL_ESPIDFDIR
|
||||||
|
pushd ${BASEDIR} > /dev/null # WOLFSSL TOP DIR
|
||||||
|
|
||||||
|
# copying ... files in src/ into $WOLFSSLLIB_TRG_DIR/src
|
||||||
|
${CPDCMD} ./src/*.c ${WOLFSSLLIB_TRG_DIR}/src/
|
||||||
|
|
||||||
|
${CPDCMD} -r ./wolfcrypt/src/ ${WOLFSSLLIB_TRG_DIR}/wolfcrypt/
|
||||||
|
${CPDCMD} -r ./wolfcrypt/test ${WOLFSSLLIB_TRG_DIR}/wolfcrypt/
|
||||||
|
${CPDCMD} -r ./wolfcrypt/benchmark ${WOLFSSLLIB_TRG_DIR}/wolfcrypt/
|
||||||
|
|
||||||
|
${CPDCMD} -r ./wolfssl/*.h ${WOLFSSLLIB_TRG_DIR}/wolfssl/
|
||||||
|
${CPDCMD} -r ./wolfssl/wolfcrypt ${WOLFSSLLIB_TRG_DIR}/wolfssl/
|
||||||
|
|
||||||
|
popd > /dev/null #
|
||||||
|
|
||||||
|
${CPDCMD} ./libs/CMakeLists.txt ${WOLFSSLLIB_TRG_DIR}/
|
||||||
|
${CPDCMD} ./libs/component.mk ${WOLFSSLLIB_TRG_DIR}/
|
||||||
|
|
||||||
|
pushd ${BASEDIR} > /dev/null # WOLFSSL TOP DIR
|
||||||
|
|
||||||
|
# Benchmark program
|
||||||
|
${RMDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/main/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/main/include
|
||||||
|
|
||||||
|
${CPDCMD} -r ./wolfcrypt/benchmark/benchmark.c ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/main/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_benchmark/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_benchmark/main/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/main/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_benchmark/main/include/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_benchmark/main/include/
|
||||||
|
|
||||||
|
# Crypt Test program
|
||||||
|
${RMDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/main/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/main/include
|
||||||
|
|
||||||
|
${CPDCMD} -r ./wolfcrypt/test/test.c ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/main/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_test/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_test/main/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/main/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_test/main/include/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_test/main/include/
|
||||||
|
|
||||||
|
# TLS Client program
|
||||||
|
${RMDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/main/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/main/include
|
||||||
|
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_client/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_client/main/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/main/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_client/main/include/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_client/main/include/
|
||||||
|
|
||||||
|
# TLS Server program
|
||||||
|
${RMDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/main/
|
||||||
|
${MKDCMD} ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/main/include
|
||||||
|
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_server/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_server/main/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/main/
|
||||||
|
${CPDCMD} -r ${WOLFSSL_ESPIDFDIR}/examples/wolfssl_server/main/include/* ${WOLFSSLEXP_TRG_DIR}/wolfssl_server/main/include/
|
||||||
|
|
||||||
|
popd > /dev/null #
|
||||||
|
|
||||||
|
exit 1
|
@@ -20,4 +20,4 @@ include IDE/mynewt/include.am
|
|||||||
include IDE/Renesas/cs+/Projects/include.am
|
include IDE/Renesas/cs+/Projects/include.am
|
||||||
include IDE/Renesas/e2studio/Projects/include.am
|
include IDE/Renesas/e2studio/Projects/include.am
|
||||||
|
|
||||||
EXTRA_DIST+= IDE/IAR-EWARM IDE/MDK-ARM IDE/MDK5-ARM IDE/MYSQL IDE/LPCXPRESSO IDE/HEXIWEAR
|
EXTRA_DIST+= IDE/IAR-EWARM IDE/MDK-ARM IDE/MDK5-ARM IDE/MYSQL IDE/LPCXPRESSO IDE/HEXIWEAR IDE/Espressif
|
||||||
|
@@ -4986,10 +4986,14 @@ exit_ed_verify:
|
|||||||
/* declared above at line 239 */
|
/* declared above at line 239 */
|
||||||
/* extern double current_time(int reset); */
|
/* extern double current_time(int reset); */
|
||||||
|
|
||||||
#elif defined FREERTOS
|
#elif defined(FREERTOS)
|
||||||
|
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
#if defined(WOLFSSL_ESPIDF)
|
||||||
|
/* proto type definition */
|
||||||
|
int construct_argv();
|
||||||
|
extern char* __argv[22];
|
||||||
|
#endif
|
||||||
double current_time(int reset)
|
double current_time(int reset)
|
||||||
{
|
{
|
||||||
portTickType tickCount;
|
portTickType tickCount;
|
||||||
@@ -5166,11 +5170,18 @@ static int string_matches(const char* arg, const char* str)
|
|||||||
int len = (int)XSTRLEN(str) + 1;
|
int len = (int)XSTRLEN(str) + 1;
|
||||||
return XSTRNCMP(arg, str, len) == 0;
|
return XSTRNCMP(arg, str, len) == 0;
|
||||||
}
|
}
|
||||||
|
#ifdef WOLFSSL_ESPIDF
|
||||||
|
int app_main( )
|
||||||
|
#else
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int optMatched;
|
int optMatched;
|
||||||
|
#ifdef WOLFSSL_ESPIDF
|
||||||
|
int argc = construct_argv();
|
||||||
|
char** argv = (char**)__argv;
|
||||||
|
#endif
|
||||||
#ifndef WOLFSSL_BENCHMARK_ALL
|
#ifndef WOLFSSL_BENCHMARK_ALL
|
||||||
int i;
|
int i;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -213,6 +213,9 @@ void WOLFSSL_TIME(int count)
|
|||||||
#include <bsp_ser.h>
|
#include <bsp_ser.h>
|
||||||
#elif defined(WOLFSSL_USER_LOG)
|
#elif defined(WOLFSSL_USER_LOG)
|
||||||
/* user includes their own headers */
|
/* user includes their own headers */
|
||||||
|
#elif defined(WOLFSSL_ESPIDF)
|
||||||
|
#include "esp_types.h"
|
||||||
|
#include "esp_log.h"
|
||||||
#else
|
#else
|
||||||
#include <stdio.h> /* for default printf stuff */
|
#include <stdio.h> /* for default printf stuff */
|
||||||
#endif
|
#endif
|
||||||
@@ -247,6 +250,9 @@ static void wolfssl_log(const int logLevel, const char *const logMessage)
|
|||||||
|
|
||||||
#elif defined(WOLFSSL_APACHE_MYNEWT)
|
#elif defined(WOLFSSL_APACHE_MYNEWT)
|
||||||
LOG_DEBUG(&mynewt_log, LOG_MODULE_DEFAULT, "%s\n", logMessage);
|
LOG_DEBUG(&mynewt_log, LOG_MODULE_DEFAULT, "%s\n", logMessage);
|
||||||
|
#elif defined(WOLFSSL_ESPIDF)
|
||||||
|
extern char* TAG;
|
||||||
|
ESP_LOGI(TAG, "%s", logMessage);
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "%s\n", logMessage);
|
fprintf(stderr, "%s\n", logMessage);
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2060,6 +2060,22 @@ int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif defined(WOLFSSL_ESPIDF)
|
||||||
|
#if defined(WOLFSSL_ESPWROOM32)
|
||||||
|
#include <esp_system.h>
|
||||||
|
|
||||||
|
int wc_GenerateSeed(OS_Seed* os, byte* output, word32 sz)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i< sz; i++) {
|
||||||
|
output[i] = esp_random( );
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* end WOLFSSL_ESPWROOM32 */
|
||||||
|
|
||||||
#elif defined(CUSTOM_RAND_GENERATE_BLOCK)
|
#elif defined(CUSTOM_RAND_GENERATE_BLOCK)
|
||||||
/* #define CUSTOM_RAND_GENERATE_BLOCK myRngFunc
|
/* #define CUSTOM_RAND_GENERATE_BLOCK myRngFunc
|
||||||
* extern int myRngFunc(byte* output, word32 sz);
|
* extern int myRngFunc(byte* output, word32 sz);
|
||||||
|
@@ -1474,7 +1474,7 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
word32 keyLen, len;
|
word32 keyLen = 0, len;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_HAVE_SP_RSA
|
#ifdef WOLFSSL_HAVE_SP_RSA
|
||||||
|
@@ -184,6 +184,9 @@
|
|||||||
#include "mcu/mcu_sim.h"
|
#include "mcu/mcu_sim.h"
|
||||||
#endif
|
#endif
|
||||||
#include "os/os_time.h"
|
#include "os/os_time.h"
|
||||||
|
#elif defined(WOLFSSL_ESPIDF)
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
#else
|
#else
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#endif
|
#endif
|
||||||
@@ -1064,11 +1067,24 @@ initDefaultName();
|
|||||||
#ifndef NO_MAIN_DRIVER
|
#ifndef NO_MAIN_DRIVER
|
||||||
|
|
||||||
/* so overall tests can pull in test function */
|
/* so overall tests can pull in test function */
|
||||||
|
#ifdef WOLFSSL_ESPIDF
|
||||||
|
void app_main( )
|
||||||
|
#else
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
func_args args;
|
func_args args;
|
||||||
|
#ifdef WOLFSSL_ESPIDF
|
||||||
|
/* set dummy wallclock time. */
|
||||||
|
struct timeval utctime;
|
||||||
|
struct timezone tz;
|
||||||
|
utctime.tv_sec = 1521725159; /* dummy time: 2018-03-22T13:25:59+00:00 */
|
||||||
|
utctime.tv_usec = 0;
|
||||||
|
tz.tz_minuteswest = 0;
|
||||||
|
tz.tz_dsttime = 0;
|
||||||
|
settimeofday(&utctime, &tz);
|
||||||
|
#endif
|
||||||
#ifdef WOLFSSL_APACHE_MYNEWT
|
#ifdef WOLFSSL_APACHE_MYNEWT
|
||||||
#ifdef ARCH_sim
|
#ifdef ARCH_sim
|
||||||
mcu_sim_parse_args(argc, argv);
|
mcu_sim_parse_args(argc, argv);
|
||||||
@@ -1091,10 +1107,10 @@ initDefaultName();
|
|||||||
return -1001;
|
return -1001;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef WOLFSSL_ESPIDF
|
||||||
args.argc = argc;
|
args.argc = argc;
|
||||||
args.argv = argv;
|
args.argv = argv;
|
||||||
|
#endif
|
||||||
if ((ret = wolfCrypt_Init()) != 0) {
|
if ((ret = wolfCrypt_Init()) != 0) {
|
||||||
printf("wolfCrypt_Init failed %d\n", ret);
|
printf("wolfCrypt_Init failed %d\n", ret);
|
||||||
err_sys("Error with wolfCrypt_Init!\n", -1003);
|
err_sys("Error with wolfCrypt_Init!\n", -1003);
|
||||||
@@ -1115,8 +1131,9 @@ initDefaultName();
|
|||||||
if (wc_FreeNetRandom() < 0)
|
if (wc_FreeNetRandom() < 0)
|
||||||
err_sys("Failed to free netRandom context", -1005);
|
err_sys("Failed to free netRandom context", -1005);
|
||||||
#endif /* HAVE_WNR */
|
#endif /* HAVE_WNR */
|
||||||
|
#ifndef WOLFSSL_ESPIDF
|
||||||
return args.return_code;
|
return args.return_code;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* NO_MAIN_DRIVER */
|
#endif /* NO_MAIN_DRIVER */
|
||||||
|
@@ -175,6 +175,12 @@
|
|||||||
/* Uncomment next line if building for using Apache mynewt */
|
/* Uncomment next line if building for using Apache mynewt */
|
||||||
/* #define WOLFSSL_APACHE_MYNEWT */
|
/* #define WOLFSSL_APACHE_MYNEWT */
|
||||||
|
|
||||||
|
/* Uncomment next line if building for using ESP-IDF */
|
||||||
|
/* #define WOLFSSL_ESPIDF */
|
||||||
|
|
||||||
|
/* Uncomment next line if using Espressif ESP32-WROOM-32 */
|
||||||
|
/* #define WOLFSSL_ESPWROOM32 */
|
||||||
|
|
||||||
#include <wolfssl/wolfcrypt/visibility.h>
|
#include <wolfssl/wolfcrypt/visibility.h>
|
||||||
|
|
||||||
#ifdef WOLFSSL_USER_SETTINGS
|
#ifdef WOLFSSL_USER_SETTINGS
|
||||||
@@ -216,6 +222,22 @@
|
|||||||
#include <nx_api.h>
|
#include <nx_api.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_ESPIDF)
|
||||||
|
#define FREERTOS
|
||||||
|
#define WOLFSSL_LWIP
|
||||||
|
#define NO_WRITEV
|
||||||
|
#define SIZEOF_LONG_LONG 8
|
||||||
|
#define NO_WOLFSSL_DIR
|
||||||
|
#define WOLFSSL_NO_CURRDIR
|
||||||
|
|
||||||
|
#define TFM_TIMING_RESISTANT
|
||||||
|
#define ECC_TIMING_RESISTANT
|
||||||
|
#define WC_RSA_BLINDING
|
||||||
|
#if !defined(WOLFSSL_USER_SETTINGS)
|
||||||
|
#define HAVE_ECC
|
||||||
|
#endif /* !WOLFSSL_USER_SETTINGS */
|
||||||
|
#endif /* WOLFSSL_ESPIDF */
|
||||||
|
|
||||||
#if defined(HAVE_LWIP_NATIVE) /* using LwIP native TCP socket */
|
#if defined(HAVE_LWIP_NATIVE) /* using LwIP native TCP socket */
|
||||||
#define WOLFSSL_LWIP
|
#define WOLFSSL_LWIP
|
||||||
#define NO_WRITEV
|
#define NO_WRITEV
|
||||||
@@ -609,7 +631,9 @@ extern void uITRON4_free(void *p) ;
|
|||||||
#define XMALLOC(s, h, type) pvPortMalloc((s))
|
#define XMALLOC(s, h, type) pvPortMalloc((s))
|
||||||
#define XFREE(p, h, type) vPortFree((p))
|
#define XFREE(p, h, type) vPortFree((p))
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(HAVE_ED25519) || defined(WOLFSSL_ESPIDF)
|
||||||
|
#define XREALLOC(p, n, h, t) wolfSSL_Realloc((p), (n))
|
||||||
|
#endif
|
||||||
#ifndef NO_WRITEV
|
#ifndef NO_WRITEV
|
||||||
#define NO_WRITEV
|
#define NO_WRITEV
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user