Skip to content

Commit 5a674b0

Browse files
committed
first commit
1 parent 7a1514a commit 5a674b0

16 files changed

+2053
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build

CMakeLists.txt

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# For more information about build system see
2+
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
3+
# The following five lines of boilerplate have to be in your project's
4+
# CMakeLists in this exact order for cmake to work correctly
5+
cmake_minimum_required(VERSION 3.16)
6+
7+
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
8+
project(esp-tls-test)
9+
10+
target_add_binary_data(esp-tls-test.elf "main/ca.crt" TEXT)

main/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
idf_component_register(SRCS "esp-tls-test.c"
2+
INCLUDE_DIRS ".")

main/ca.conf

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
basicConstraints = CA:TRUE
2+
keyUsage = cRLSign, keyCertSign
3+
[req]
4+
distinguished_name = req_distinguished_name
5+
prompt = no
6+
[req_distinguished_name]
7+
C = IT
8+
ST = Marche
9+
L = Gabicce Mare
10+
CN = My personal CA for IoT

main/ca.crt

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDMzCCAhsCFCiUx7QcE8xH1A1IAP8hRVDPk/rkMA0GCSqGSIb3DQEBDQUAMFYx
3+
CzAJBgNVBAYTAklUMQ8wDQYDVQQIDAZNYXJjaGUxFTATBgNVBAcMDEdhYmljY2Ug
4+
TWFyZTEfMB0GA1UEAwwWTXkgcGVyc29uYWwgQ0EgZm9yIElvVDAeFw0yMzAxMjcw
5+
OTM4MDRaFw00MzAxMjkwOTM4MDRaMFYxCzAJBgNVBAYTAklUMQ8wDQYDVQQIDAZN
6+
YXJjaGUxFTATBgNVBAcMDEdhYmljY2UgTWFyZTEfMB0GA1UEAwwWTXkgcGVyc29u
7+
YWwgQ0EgZm9yIElvVDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJuk
8+
xFx6tHmvMNPiYtWwA3v3t1b+PTjcGBI4s789+mUbwXKRS/kSbfNjtZZdAbkoLRuh
9+
L04aqvcjuOlelFRVgK2sU2HnVveaNvjFQo2szrDQthTV6JUIFSfgoCjFk8jNEf18
10+
v1DxgTo1I61rYyJhgf2jAtwRDosVTDvDfcRKKdql6ZduD4N6PNTumJzqj8bDECJF
11+
ByBUwfTMz3etBmkiTExjeSGstdiFS8tl8vG9N+IFp7gWzU2bSAefzVTWOCumnimC
12+
Er+HATK0sjNGY7OEWF0AQklSus0137Iw+ypIWx6DVjJo1B9dx3ty9CwYWWv2KYxd
13+
YgtCpZ57fXVjLAkXhHcCAwEAATANBgkqhkiG9w0BAQ0FAAOCAQEAg9sf+QgRJ7ag
14+
C4R6f12eVyePiNBhee5/31tD9ooE5pjH/WAh61nH5NhB9YIcx0fKc/Rn18cQULPj
15+
cu4JsQ5QgY3Wb7rZFOZ9nxlmTbn9ds18DNBu8PBavNWlYLMp2PRsu3OOfjROt1Wc
16+
t6vr3aUTotQZ+6l8TUC4cNK4UXcViNcn2/hTdF0uwrTpyrfKG0jD98xq83X2bhcp
17+
bE0AUkM8c5+otHQ1xEgSGXo11YINPD8iIpvFGIfahjjXMLGJWxSLNs6PaaKRjHSO
18+
gzKeDAEXrtlp9uTnBSYJvlI76Q5dCG4QE1Hl8XarBWod22CYScx6L9P/+cjuDgvM
19+
J9KwoZgG2A==
20+
-----END CERTIFICATE-----

main/ca.key

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN PRIVATE KEY-----
2+
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbpMRcerR5rzDT
3+
4mLVsAN797dW/j043BgSOLO/PfplG8FykUv5Em3zY7WWXQG5KC0boS9OGqr3I7jp
4+
XpRUVYCtrFNh51b3mjb4xUKNrM6w0LYU1eiVCBUn4KAoxZPIzRH9fL9Q8YE6NSOt
5+
a2MiYYH9owLcEQ6LFUw7w33ESinapemXbg+DejzU7pic6o/GwxAiRQcgVMH0zM93
6+
rQZpIkxMY3khrLXYhUvLZfLxvTfiBae4Fs1Nm0gHn81U1jgrpp4pghK/hwEytLIz
7+
RmOzhFhdAEJJUrrNNd+yMPsqSFseg1YyaNQfXcd7cvQsGFlr9imMXWILQqWee311
8+
YywJF4R3AgMBAAECggEALoJAWQAjsN7sYMxby03i5Kbjpr+nDLgcC0ndUG7VRWRT
9+
XIhVYvKiX2Hyr6FQNANw4zo5mAW5A8utZDLqcP7xyjPd4LoPz0JKXfEYD5zNUKG1
10+
XymCbBIzvCxPv482t4Cr+QrPYoEgJAQgCqC1yV7IyMFux9Li/SWal5s1mDOvKRIG
11+
cXCHb6+FDHSqRWjxO0a+hA5pJClExKKNTXESUM7WGi3IKsD3WweQqFfT35qmBOJ6
12+
D7UgD3+leNA81H899gNyalx7mCvWoVki7udxfiqJMOpwIJOW4xe3Yzl1mdHHWekt
13+
O0QeBgid7qXM+dJWfzzWIpAwZJ9KMHbGVKc6rZzeBQKBgQC9O597gDZdsUfZQoTO
14+
XRiSR4sBOCbqGbQNE81tyV4piBbMUTQX0tTypSAR6H4JZhF8QDW5ik9+IhlErou9
15+
IpWke5mvZel+/6ECz9SJrydXXJTnaheWe/rty58zxcblDsurnGes/M7H00zcUw6H
16+
THBX/XHHNGgeaIoMSKEzyeME/QKBgQDSjzUSlp2pZk92E2STwVDK7k2jfeIn6VQE
17+
PddnL73gGSV127R66Qdu2BTlAs72H3K+C3ZVGKRVcx8E+6bSyTQA1sDWsNw2Tmah
18+
mm9HGnYmdEberCyykSHrHEQAW5Q2B/jG+sYVDC8CfXOs20axqe8E3jtaQHmPktkS
19+
VIkj8WEDgwKBgQC12keQgw08CvN2ObOxMcw8P165hEH5dUwPyTkBSaQhG3R1U5BR
20+
WL5mlQN10kzVMW6aToaS0PVFzPUliOwnjcXrNRDje3fiIT2Vmy6wRk/zZ7h9j/ot
21+
FuZ1gdp0AZv7YrWeLQeBOc5qQIi7r2Hl6jKIjLq76oQovOP1nBK210xA7QKBgBV7
22+
9T9bTOT/AnaazfVhkTvTiup2qr/FyAPSx4rIzUfzaOYYr9amtlJyC9e+LJ3iYZPQ
23+
mZdfN01cvLqGbuQtEXhQcUa2rxF/eGte1aHcqleMH7sSuFDUDDDwJmQe9AV7VMAA
24+
0HtPTfCkGkx150WzgCbwAgBYec7TfgCnzYJ0W6C/AoGAbHddgp7GBwZaT/Z8sSej
25+
ghF1uMLIyLuR8MsexU6OhLff9rtS+L+NPRqDoc53X+09mFxus7Ubwp7YRXkvJUwF
26+
JVTifVT5IglQsRtmBSWc0gU8zDfZyGsOxT0WSGbTj5OXqlMxuWz3xZt3w7k9tJC8
27+
Xac6m3MVP8GajmAxyJbaUPs=
28+
-----END PRIVATE KEY-----

main/esp-tls-test.c

+154
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
#include <stdio.h>
2+
3+
#include <unistd.h>
4+
#include <string.h>
5+
6+
#include <esp_system.h>
7+
#include <esp_tls.h>
8+
#include <esp_wifi.h>
9+
#include <nvs_flash.h>
10+
11+
#include <lwip/dns.h>
12+
13+
#include <freertos/event_groups.h>
14+
15+
//================ WIFI =============
16+
#define ESP_WIFI_SSID "SSID"
17+
#define ESP_WIFI_PASS "p4zzw0rd"
18+
#define ESP_MAXIMUM_RETRY 5
19+
#define WIFI_CONNECTED_BIT BIT0
20+
21+
22+
static bool s_is_wifi_connected = false;
23+
static EventGroupHandle_t s_event_group_handler;
24+
static int s_retry_count = 0;
25+
//===================================
26+
27+
ip4_addr_t server_ip; //DNS server IP
28+
29+
30+
31+
//================ TLS =============
32+
extern const uint8_t ca_crt_start[] asm("_binary_ca_crt_start");
33+
extern const uint8_t ca_crt_end[] asm("_binary_ca_crt_end");
34+
35+
char * hostname = "sslserver.home";
36+
//==================================
37+
38+
//event handler of the WiFi
39+
static void event_handler(void* arg, esp_event_base_t event_base, int32_t event_id, void* event_data)
40+
{
41+
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
42+
{
43+
esp_wifi_connect();
44+
}
45+
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
46+
{
47+
if (s_retry_count < ESP_MAXIMUM_RETRY)
48+
{
49+
esp_wifi_connect();
50+
s_retry_count++;
51+
}
52+
}
53+
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
54+
{
55+
xEventGroupSetBits(s_event_group_handler, WIFI_CONNECTED_BIT);
56+
s_retry_count = 0;
57+
}
58+
}
59+
60+
void wifi_init_sta(void)
61+
{
62+
s_event_group_handler = xEventGroupCreate();
63+
64+
ESP_ERROR_CHECK(esp_netif_init());
65+
66+
ESP_ERROR_CHECK(esp_event_loop_create_default());
67+
esp_netif_create_default_wifi_sta();
68+
69+
wifi_init_config_t config = WIFI_INIT_CONFIG_DEFAULT();
70+
ESP_ERROR_CHECK(esp_wifi_init(&config));
71+
72+
esp_event_handler_instance_t handler_any_id;
73+
esp_event_handler_instance_t handler_got_ip;
74+
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
75+
ESP_EVENT_ANY_ID,
76+
&event_handler,
77+
NULL,
78+
&handler_any_id));
79+
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
80+
IP_EVENT_STA_GOT_IP,
81+
&event_handler,
82+
NULL,
83+
&handler_got_ip));
84+
85+
wifi_config_t wifi_config = {
86+
.sta = {
87+
.ssid = ESP_WIFI_SSID,
88+
.password = ESP_WIFI_PASS,
89+
}
90+
};
91+
92+
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
93+
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
94+
ESP_ERROR_CHECK(esp_wifi_start());
95+
96+
EventBits_t bits = xEventGroupWaitBits(s_event_group_handler,
97+
WIFI_CONNECTED_BIT,
98+
pdFALSE,
99+
pdFALSE,
100+
portMAX_DELAY);
101+
102+
if (bits & WIFI_CONNECTED_BIT)
103+
s_is_wifi_connected = true;
104+
105+
ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, handler_got_ip));
106+
ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, handler_any_id));
107+
vEventGroupDelete(s_event_group_handler);
108+
}
109+
110+
void app_main(void)
111+
{
112+
{// set wifi connection
113+
esp_err_t ret = nvs_flash_init();
114+
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
115+
ESP_ERROR_CHECK(nvs_flash_erase());
116+
ret = nvs_flash_init();
117+
}
118+
ESP_ERROR_CHECK(ret);
119+
120+
printf("\n[WIFI] Connecting to WiFi...\n");
121+
wifi_init_sta();
122+
while (!s_is_wifi_connected)
123+
{
124+
printf("[WIFI] Waiting for the WiFi to connect\n");
125+
sleep(1);
126+
}
127+
128+
printf("[WIFI] Connected to WiFi\n");
129+
}
130+
131+
IP4_ADDR(&server_ip, 192, 168, 1, 199);
132+
dns_setserver(0, &server_ip);
133+
134+
135+
esp_tls_t *tls = esp_tls_init();
136+
if(!tls){
137+
printf("[TLS] not initialised successfully\n");
138+
return;
139+
}
140+
141+
ESP_ERROR_CHECK(esp_tls_set_global_ca_store(ca_crt_start, ca_crt_end - ca_crt_start));
142+
143+
esp_tls_cfg_t cfg = {
144+
.use_global_ca_store = true
145+
};
146+
147+
148+
esp_tls_conn_new_sync(hostname, strlen(hostname) + 1, 6000, &cfg, tls);
149+
esp_tls_conn_write(tls, "some encrypted data", strlen("some encrypted data"));
150+
151+
esp_tls_conn_destroy(tls);
152+
153+
printf("bye ;)\n");
154+
}

0 commit comments

Comments
 (0)