0.0.9
This commit is contained in:
parent
bd7044b397
commit
7cda2704e7
42
README.md
42
README.md
@ -1,7 +1,45 @@
|
|||||||
# Certificate authority on ESP32
|
# Certifikacna autorita na procesore ESP32
|
||||||
Used examples in this project
|
Softverova kniznica: ESP-IDF v4.2-dev-792-g6330b3345-dirty
|
||||||
|
|
||||||
|
Struktura projektu:
|
||||||
|
/.vscode/-c_cpp_properties.json #podpora C/C++ v projekte pre VS Code
|
||||||
|
/launch.json # GDB debugger
|
||||||
|
/components/ca/-ca.c
|
||||||
|
-gen_key.c
|
||||||
|
/cmd_nvs/-cmd_nvs.c
|
||||||
|
/cmd_system/-cmd_system.c
|
||||||
|
/display/-display.c
|
||||||
|
/files/-file.c
|
||||||
|
/https_server/-https_server.c
|
||||||
|
/-url_decoder.c
|
||||||
|
/wifi/wifi.c
|
||||||
|
/@lv_port_esp32 #graficka kniznica
|
||||||
|
/main/main.c
|
||||||
|
/partitions_example.csv
|
||||||
|
|
||||||
|
Stiahnutie projektu:
|
||||||
|
git clone git@git.kemt.fei.tuke.sk:db195kv/bakalarka.git
|
||||||
|
git submodule update --init --recursive
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Vyuzitie projektu na procesore ESP32:
|
||||||
|
Used static DRAM: 124440 bytes ( 56296 available, 68.9% used)
|
||||||
|
Used static IRAM: 97948 bytes ( 33124 available, 74.7% used)
|
||||||
|
Total image size:~1162779 bytes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Pouzite priklady v projekte
|
||||||
* https://github.com/espressif/esp-idf/tree/master/examples/wifi/getting_started/station
|
* https://github.com/espressif/esp-idf/tree/master/examples/wifi/getting_started/station
|
||||||
* https://github.com/espressif/esp-idf/tree/master/examples/protocols/https_server
|
* https://github.com/espressif/esp-idf/tree/master/examples/protocols/https_server
|
||||||
* https://github.com/espressif/esp-idf/tree/master/examples/system/console
|
* https://github.com/espressif/esp-idf/tree/master/examples/system/console
|
||||||
* https://github.com/ARMmbed/mbedtls/blob/development/programs/pkey/gen_key.c
|
* https://github.com/ARMmbed/mbedtls/blob/development/programs/pkey/gen_key.c
|
||||||
* https://github.com/ARMmbed/mbedtls/blob/development/programs/x509/cert_write.c
|
* https://github.com/ARMmbed/mbedtls/blob/development/programs/x509/cert_write.c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gen_key type=ec output_file=/spiffs/server_key.key
|
||||||
|
write_cert selfsign=1 issuer_key=/spiffs/keyfile.key issuer_name=CN=ESP32_CA,O=TUKE,C=SK is_ca=1 output_file=/spiffs/ca.crt
|
||||||
|
write_cert issuer_key=/spiffs/keyfile.key issuer_crt=/spiffs/ca.crt output_file=/spiffs/server.crt
|
||||||
|
write_cert request_file=/spiffs/certsignreq.csr issuer_key=/spiffs/keyfile.key issuer_crt=/spiffs/ca.crt output_file=/spiffs/user.crt
|
@ -76,7 +76,7 @@ int main( void )
|
|||||||
#else
|
#else
|
||||||
#define USAGE_CSR ""
|
#define USAGE_CSR ""
|
||||||
#endif /* MBEDTLS_X509_CSR_PARSE_C */
|
#endif /* MBEDTLS_X509_CSR_PARSE_C */
|
||||||
|
/*predvolene hodnoty pre certifikat*/
|
||||||
#define DFL_ISSUER_CRT ""
|
#define DFL_ISSUER_CRT ""
|
||||||
#define DFL_REQUEST_FILE ""
|
#define DFL_REQUEST_FILE ""
|
||||||
#define DFL_SUBJECT_KEY "/spiffs/subject.key"
|
#define DFL_SUBJECT_KEY "/spiffs/subject.key"
|
||||||
@ -99,7 +99,7 @@ int main( void )
|
|||||||
#define DFL_SUBJ_IDENT 1
|
#define DFL_SUBJ_IDENT 1
|
||||||
#define DFL_CONSTRAINTS 1
|
#define DFL_CONSTRAINTS 1
|
||||||
#define DFL_DIGEST MBEDTLS_MD_SHA256
|
#define DFL_DIGEST MBEDTLS_MD_SHA256
|
||||||
|
/*V pripade zle zadanych argumentov vypise USAGE*/
|
||||||
#define USAGE \
|
#define USAGE \
|
||||||
"\n usage: cert_write param=<>...\n" \
|
"\n usage: cert_write param=<>...\n" \
|
||||||
"\n acceptable parameters:\n" \
|
"\n acceptable parameters:\n" \
|
||||||
@ -186,20 +186,20 @@ struct options
|
|||||||
int authority_identifier; /* add authority identifier to CRT */
|
int authority_identifier; /* add authority identifier to CRT */
|
||||||
int subject_identifier; /* add subject identifier to CRT */
|
int subject_identifier; /* add subject identifier to CRT */
|
||||||
int basic_constraints; /* add basic constraints ext to CRT */
|
int basic_constraints; /* add basic constraints ext to CRT */
|
||||||
int version; /* CRT version */
|
int version; /* CRT version b */
|
||||||
mbedtls_md_type_t md; /* Hash used for signing */
|
mbedtls_md_type_t md; /* Hash used for signing */
|
||||||
unsigned char key_usage; /* key usage flags */
|
unsigned char key_usage; /* key usage flags */
|
||||||
unsigned char ns_cert_type; /* NS cert type */
|
unsigned char ns_cert_type; /* NS cert type */
|
||||||
} opt;
|
} opt;
|
||||||
|
/*struktura pre ulozenie vsetkych argumentov v pamati z dovodu dealokacie povodnych obdrzanych z konzoly*/
|
||||||
struct pass_args
|
struct pass_args
|
||||||
{
|
{
|
||||||
int argc;
|
int argc;
|
||||||
char **argv;
|
char **argv;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct pass_args global_arg;
|
struct pass_args global_arg;
|
||||||
|
|
||||||
|
/*Funkcia pre zapis certifikatu do suboru*/
|
||||||
int write_certificate( mbedtls_x509write_cert *crt, const char *output_file,
|
int write_certificate( mbedtls_x509write_cert *crt, const char *output_file,
|
||||||
int (*f_rng)(void *, unsigned char *, size_t),
|
int (*f_rng)(void *, unsigned char *, size_t),
|
||||||
void *p_rng )
|
void *p_rng )
|
||||||
@ -211,6 +211,7 @@ int write_certificate( mbedtls_x509write_cert *crt, const char *output_file,
|
|||||||
|
|
||||||
memset( output_buf, 0, 4096 );
|
memset( output_buf, 0, 4096 );
|
||||||
vTaskDelay(15);
|
vTaskDelay(15);
|
||||||
|
/*Zapis certifikatu do premennej output_buff vo formate pem */
|
||||||
if( ( ret = mbedtls_x509write_crt_pem( crt, output_buf, 4096,
|
if( ( ret = mbedtls_x509write_crt_pem( crt, output_buf, 4096,
|
||||||
f_rng, p_rng ) ) < 0 )
|
f_rng, p_rng ) ) < 0 )
|
||||||
return( ret );
|
return( ret );
|
||||||
@ -230,9 +231,10 @@ int write_certificate( mbedtls_x509write_cert *crt, const char *output_file,
|
|||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
/*Logika pre vytvaranie certifikatov*/
|
||||||
static int connect( int argc, char *argv[] )
|
static int connect( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
|
/*Definicia premennych*/
|
||||||
int ret = 1;
|
int ret = 1;
|
||||||
int exit_code = MBEDTLS_EXIT_FAILURE;
|
int exit_code = MBEDTLS_EXIT_FAILURE;
|
||||||
mbedtls_x509_crt issuer_crt;
|
mbedtls_x509_crt issuer_crt;
|
||||||
@ -251,11 +253,9 @@ static int connect( int argc, char *argv[] )
|
|||||||
mbedtls_mpi serial;
|
mbedtls_mpi serial;
|
||||||
mbedtls_entropy_context entropy;
|
mbedtls_entropy_context entropy;
|
||||||
mbedtls_ctr_drbg_context ctr_drbg;
|
mbedtls_ctr_drbg_context ctr_drbg;
|
||||||
const char *pers = "crt example app";
|
const char *pers = "crt app";
|
||||||
|
|
||||||
/*
|
/*Nastavenie hodnot premennych*/
|
||||||
* Set to sane values
|
|
||||||
*/
|
|
||||||
mbedtls_x509write_crt_init( &crt );
|
mbedtls_x509write_crt_init( &crt );
|
||||||
mbedtls_pk_init( &loaded_issuer_key );
|
mbedtls_pk_init( &loaded_issuer_key );
|
||||||
mbedtls_pk_init( &loaded_subject_key );
|
mbedtls_pk_init( &loaded_subject_key );
|
||||||
@ -274,7 +274,7 @@ static int connect( int argc, char *argv[] )
|
|||||||
mbedtls_printf( USAGE );
|
mbedtls_printf( USAGE );
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
/*Priradenie defaultnych hodnot do struktury options */
|
||||||
opt.issuer_crt = DFL_ISSUER_CRT;
|
opt.issuer_crt = DFL_ISSUER_CRT;
|
||||||
opt.request_file = DFL_REQUEST_FILE;
|
opt.request_file = DFL_REQUEST_FILE;
|
||||||
opt.subject_key = DFL_SUBJECT_KEY;
|
opt.subject_key = DFL_SUBJECT_KEY;
|
||||||
@ -297,11 +297,14 @@ static int connect( int argc, char *argv[] )
|
|||||||
opt.subject_identifier = DFL_SUBJ_IDENT;
|
opt.subject_identifier = DFL_SUBJ_IDENT;
|
||||||
opt.authority_identifier = DFL_AUTH_IDENT;
|
opt.authority_identifier = DFL_AUTH_IDENT;
|
||||||
opt.basic_constraints = DFL_CONSTRAINTS;
|
opt.basic_constraints = DFL_CONSTRAINTS;
|
||||||
|
/*Nacitavanie hodnot z argumentov */
|
||||||
for( i = 1; i < argc; i++ )
|
for( i = 1; i < argc; i++ )
|
||||||
{
|
{
|
||||||
|
|
||||||
p = argv[i];
|
p = argv[i];
|
||||||
|
/*rozdelenie argumentu na dva stringy
|
||||||
|
*prvy string p znaci do ktorej premennej sa budu ukladat hodnoty zo stringu q
|
||||||
|
*/
|
||||||
if( ( q = strchr( p, '=' ) ) == NULL )
|
if( ( q = strchr( p, '=' ) ) == NULL )
|
||||||
goto usage;
|
goto usage;
|
||||||
*q++ = '\0';
|
*q++ = '\0';
|
||||||
@ -515,7 +518,7 @@ static int connect( int argc, char *argv[] )
|
|||||||
|
|
||||||
mbedtls_printf( " ok\n" );
|
mbedtls_printf( " ok\n" );
|
||||||
|
|
||||||
// Parse serial to MPI
|
// Nacitanie serioveho cisla
|
||||||
//
|
//
|
||||||
mbedtls_printf( " . Reading serial number..." );
|
mbedtls_printf( " . Reading serial number..." );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
@ -523,17 +526,18 @@ static int connect( int argc, char *argv[] )
|
|||||||
FILE* f;
|
FILE* f;
|
||||||
f = fopen( opt.serial, "w+" );
|
f = fopen( opt.serial, "w+" );
|
||||||
|
|
||||||
|
//Nacitavanie serioveho cisla do premennej typu mpi zo suboru
|
||||||
if( ( ret = mbedtls_mpi_read_file(&serial,10,f) ) != 0 )
|
if( ( ret = mbedtls_mpi_read_file(&serial,10,f) ) != 0 )
|
||||||
{
|
{//ak subor neexistuje tak sa nacita seriove cislo zo stringu "1"
|
||||||
mbedtls_mpi_read_string( &serial, 10, "1");
|
mbedtls_mpi_read_string( &serial, 10, "1");
|
||||||
// mbedtls_strerror( ret, buf, 1024 );
|
// mbedtls_strerror( ret, buf, 1024 );
|
||||||
// mbedtls_printf( " failed\n ! mbedtls_mpi_read_string "
|
// mbedtls_printf( " failed\n ! mbedtls_mpi_read_string "
|
||||||
// "returned -0x%04x - %s\n\n", -ret, buf );
|
// "returned -0x%04x - %s\n\n", -ret, buf );
|
||||||
//goto exit;
|
//goto exit;
|
||||||
}
|
}
|
||||||
|
/*Zvysenie serioveho cisla o +1*/
|
||||||
mbedtls_mpi_add_int(&serial,&serial,1);
|
mbedtls_mpi_add_int(&serial,&serial,1);
|
||||||
|
/*Zapis serioveho cisla do suboru*/
|
||||||
mbedtls_mpi_write_file(NULL,&serial,10,f);
|
mbedtls_mpi_write_file(NULL,&serial,10,f);
|
||||||
fclose( f );
|
fclose( f );
|
||||||
|
|
||||||
@ -549,7 +553,7 @@ static int connect( int argc, char *argv[] )
|
|||||||
*/
|
*/
|
||||||
mbedtls_printf( " . Loading the issuer certificate ..." );
|
mbedtls_printf( " . Loading the issuer certificate ..." );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
//Nacitanie certifikatu certifikacnej autority zo suboru
|
||||||
if( ( ret = mbedtls_x509_crt_parse_file( &issuer_crt, opt.issuer_crt ) ) != 0 )
|
if( ( ret = mbedtls_x509_crt_parse_file( &issuer_crt, opt.issuer_crt ) ) != 0 )
|
||||||
{
|
{
|
||||||
mbedtls_strerror( ret, buf, 1024 );
|
mbedtls_strerror( ret, buf, 1024 );
|
||||||
@ -843,13 +847,16 @@ exit:
|
|||||||
|
|
||||||
return( exit_code );
|
return( exit_code );
|
||||||
}
|
}
|
||||||
static void ca_task_run(void *parameter){
|
|
||||||
|
|
||||||
|
static void ca_task_run(void *parameter){
|
||||||
|
/*Pretypovanie parametra na strukturu pass_args*/
|
||||||
struct pass_args local = *(struct pass_args*)parameter;
|
struct pass_args local = *(struct pass_args*)parameter;
|
||||||
|
/*Logika pre vytvaranie certifikatov*/
|
||||||
connect(local.argc,local.argv);
|
connect(local.argc,local.argv);
|
||||||
|
/*Po vykonani funkcie connect sa uloha ukonci*/
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
}
|
}
|
||||||
|
/*Funkcia skopiruje hodnoty v parametroch a vytvori ulohu na vytvaranie certifikatov*/
|
||||||
void task_create_ca(const int argc, const char *argv[]){
|
void task_create_ca(const int argc, const char *argv[]){
|
||||||
global_arg.argc = argc;
|
global_arg.argc = argc;
|
||||||
int ii;
|
int ii;
|
||||||
@ -859,15 +866,15 @@ void task_create_ca(const int argc, const char *argv[]){
|
|||||||
strcpy(global_arg.argv[ii], argv[ii]);
|
strcpy(global_arg.argv[ii], argv[ii]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*vytvorenie ulohy kde sa bude vykonavat funkcia ca_task_run s argumentmi na druhom jadre s vysokou prioritou*/
|
||||||
xTaskCreatePinnedToCore(&ca_task_run,"cert_write",23000,&global_arg,30,NULL,1);
|
xTaskCreatePinnedToCore(&ca_task_run,"cert_write",23000,&global_arg,30,NULL,1);
|
||||||
//xTaskCreate(&task_run,"gen_key",20000,NULL,12,NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*Zaregistrovanie prikazu write_cert*/
|
||||||
void register_ca(void)
|
void register_ca(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
const esp_console_cmd_t join_cmd = {
|
const esp_console_cmd_t ca_cmd = {
|
||||||
.command = "write_cert",
|
.command = "write_cert",
|
||||||
.help = "Write Certificate from CSR",
|
.help = "Write Certificate from CSR",
|
||||||
.hint = NULL,
|
.hint = NULL,
|
||||||
@ -875,7 +882,7 @@ void register_ca(void)
|
|||||||
.argtable = NULL
|
.argtable = NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
ESP_ERROR_CHECK( esp_console_cmd_register(&join_cmd) );
|
ESP_ERROR_CHECK( esp_console_cmd_register(&ca_cmd) );
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_X509_CRT_WRITE_C && MBEDTLS_X509_CRT_PARSE_C &&
|
#endif /* MBEDTLS_X509_CRT_WRITE_C && MBEDTLS_X509_CRT_PARSE_C &&
|
||||||
MBEDTLS_FS_IO && MBEDTLS_ENTROPY_C && MBEDTLS_CTR_DRBG_C &&
|
MBEDTLS_FS_IO && MBEDTLS_ENTROPY_C && MBEDTLS_CTR_DRBG_C &&
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#define DEV_RANDOM_THRESHOLD 32
|
#define DEV_RANDOM_THRESHOLD 32
|
||||||
|
/*struktura pre ulozenie vsetkych argumentov v pamati z dovodu dealokacie povodnych obdrzanych z konzoly*/
|
||||||
struct pass_args
|
struct pass_args
|
||||||
{
|
{
|
||||||
int argc;
|
int argc;
|
||||||
@ -464,9 +464,11 @@ exit:
|
|||||||
|
|
||||||
|
|
||||||
static void task_run(void *parameter){
|
static void task_run(void *parameter){
|
||||||
|
/*Pretypovanie parametra na strukturu pass_args*/
|
||||||
struct pass_args local = *(struct pass_args*)parameter;
|
struct pass_args local = *(struct pass_args*)parameter;
|
||||||
|
/*Logika pre vytvaranie klucov*/
|
||||||
connect(local.argc,local.argv);
|
connect(local.argc,local.argv);
|
||||||
|
/*Po vykonani funkcie connect sa uloha ukonci*/
|
||||||
vTaskDelete(NULL);
|
vTaskDelete(NULL);
|
||||||
}
|
}
|
||||||
static void task_create(const int argc, const char *argv[]){
|
static void task_create(const int argc, const char *argv[]){
|
||||||
@ -477,15 +479,10 @@ static void task_create(const int argc, const char *argv[]){
|
|||||||
global_arg.argv[ii] = malloc(strlen(argv[ii])+1);
|
global_arg.argv[ii] = malloc(strlen(argv[ii])+1);
|
||||||
strcpy(global_arg.argv[ii], argv[ii]);
|
strcpy(global_arg.argv[ii], argv[ii]);
|
||||||
}
|
}
|
||||||
|
/*vytvorenie ulohy kde sa bude vykonavat funkcia task_create_ca s argumentmi na druhom jadre s vysokou prioritou*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
xTaskCreatePinnedToCore(&task_run,"gen_key",40000,&global_arg,12,NULL,1);
|
xTaskCreatePinnedToCore(&task_run,"gen_key",40000,&global_arg,12,NULL,1);
|
||||||
//xTaskCreate(&task_run,"gen_key",20000,NULL,12,NULL);
|
|
||||||
}
|
}
|
||||||
|
/*Zaregistrovanie prikazu write_cert*/
|
||||||
void register_gen_key(void)
|
void register_gen_key(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1,13 +1,4 @@
|
|||||||
/* LVGL Example project
|
|
||||||
*
|
|
||||||
* Basic project to test LVGL on ESP32 based projects.
|
|
||||||
*
|
|
||||||
* This example code is in the Public Domain (or CC0 licensed, at your option.)
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, this
|
|
||||||
* software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
|
||||||
* CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
*/
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -43,15 +34,18 @@
|
|||||||
#include "wifi.h"
|
#include "wifi.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*objekty ktorych hodnoty sa mozu menit inymi funkciami*/
|
||||||
static lv_obj_t* win;
|
static lv_obj_t* win;
|
||||||
static lv_obj_t* table;
|
static lv_obj_t* table;
|
||||||
extern esp_netif_t *sta_netif;
|
|
||||||
static lv_obj_t* label_bottom;
|
static lv_obj_t* label_bottom;
|
||||||
|
//ulozena instancia esp_netif objektu v tomto pripade potrebna kvoli zobrazeniu ip adresy na displej
|
||||||
|
extern esp_netif_t *sta_netif;
|
||||||
|
|
||||||
|
|
||||||
static void IRAM_ATTR lv_tick_task(void *arg);
|
static void IRAM_ATTR lv_tick_task(void *arg);
|
||||||
|
//vytvorenie sablony zobrazenej na displeji
|
||||||
static lv_obj_t * status_create(void);
|
static lv_obj_t * status_create(void);
|
||||||
|
//doplnenie hodnot do tabulky
|
||||||
static void fill_the_table();
|
static void fill_the_table();
|
||||||
|
|
||||||
|
|
||||||
@ -109,6 +103,7 @@ void guiTask(void* parameter) {
|
|||||||
if (xSemaphoreTake(xGuiSemaphore, (TickType_t)10) == pdTRUE) {
|
if (xSemaphoreTake(xGuiSemaphore, (TickType_t)10) == pdTRUE) {
|
||||||
lv_task_handler();
|
lv_task_handler();
|
||||||
xSemaphoreGive(xGuiSemaphore);
|
xSemaphoreGive(xGuiSemaphore);
|
||||||
|
//aktualizovanie hodnot v tabulke
|
||||||
fill_the_table(buff);
|
fill_the_table(buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ static const char *TAG = "SPIFFS";
|
|||||||
.max_files = 20,
|
.max_files = 20,
|
||||||
.format_if_mount_failed = true
|
.format_if_mount_failed = true
|
||||||
};
|
};
|
||||||
|
//inicializacia SPIFFS suboroveho systemu
|
||||||
void init_memory(){
|
void init_memory(){
|
||||||
ESP_LOGI(TAG, "Initializing SPIFFS");
|
ESP_LOGI(TAG, "Initializing SPIFFS");
|
||||||
|
|
||||||
@ -46,11 +46,7 @@ ESP_LOGI(TAG, "Initializing SPIFFS");
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void close_memory(){
|
//vytvorenie suboru s hodnotou zadanou v druhom parametri
|
||||||
esp_vfs_spiffs_unregister(conf.partition_label);
|
|
||||||
ESP_LOGI(TAG, "SPIFFS unmounted");
|
|
||||||
}
|
|
||||||
|
|
||||||
void create_file(char adresa[],char comment[]){
|
void create_file(char adresa[],char comment[]){
|
||||||
ESP_LOGI(TAG, "Opening file");
|
ESP_LOGI(TAG, "Opening file");
|
||||||
FILE* f = fopen(adresa, "w");
|
FILE* f = fopen(adresa, "w");
|
||||||
@ -63,7 +59,7 @@ void create_file(char adresa[],char comment[]){
|
|||||||
ESP_LOGI(TAG, "File written");
|
ESP_LOGI(TAG, "File written");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//Citanie existujuceho suboru na uart
|
||||||
void read_file(char adresa[]){
|
void read_file(char adresa[]){
|
||||||
char line[120];
|
char line[120];
|
||||||
ESP_LOGI(TAG, "Reading file");
|
ESP_LOGI(TAG, "Reading file");
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
/* A simple example that demonstrates how to create GET and POST
|
/* A simple example that demonstrates how to create GET and POST
|
||||||
* handlers and start an HTTPS server.
|
* handlers and start an HTTPS server.
|
||||||
*/
|
*/
|
||||||
|
/*
|
||||||
struct pass_args
|
struct pass_args
|
||||||
{
|
{
|
||||||
int argc;
|
int argc;
|
||||||
@ -34,8 +34,8 @@ struct pass_args
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct pass_args global_arg_task;
|
//struct pass_args global_arg_task;
|
||||||
|
*/
|
||||||
|
|
||||||
static const char *TAG = "server";
|
static const char *TAG = "server";
|
||||||
TaskHandle_t xHandleServer = NULL;
|
TaskHandle_t xHandleServer = NULL;
|
||||||
@ -114,10 +114,10 @@ static esp_err_t echo_post_handler(httpd_req_t *req)
|
|||||||
}
|
}
|
||||||
strcat(formatted_out,csr_end);
|
strcat(formatted_out,csr_end);
|
||||||
printf("%s",formatted_out);
|
printf("%s",formatted_out);
|
||||||
|
//Hodnoty predavane ulohe cert_write pre generovanie certifikatov pod CA
|
||||||
const int argc = 5;
|
const int argc = 5;
|
||||||
const char* argv[] = {"write_cert","request_file=/spiffs/certsignreq.csr","issuer_key=/spiffs/keyfile.key","issuer_crt=/spiffs/ca.crt","output_file=/spiffs/user.crt"};
|
const char* argv[] = {"write_cert","request_file=/spiffs/certsignreq.csr","issuer_key=/spiffs/keyfile.key","issuer_crt=/spiffs/ca.crt","output_file=/spiffs/user.crt"};
|
||||||
global_arg_task.argc = argc;
|
//global_arg_task.argc = argc;
|
||||||
//global_arg_task.argv = argv;
|
//global_arg_task.argv = argv;
|
||||||
/*
|
/*
|
||||||
int ii;
|
int ii;
|
||||||
@ -126,15 +126,16 @@ static esp_err_t echo_post_handler(httpd_req_t *req)
|
|||||||
global_arg_task.argv[ii] = malloc(strlen(argv[ii])+1);
|
global_arg_task.argv[ii] = malloc(strlen(argv[ii])+1);
|
||||||
strcpy(global_arg_task.argv[ii], argv[ii]);
|
strcpy(global_arg_task.argv[ii], argv[ii]);
|
||||||
}
|
}
|
||||||
*/
|
*/ /*Ulozenie CSR requestu*/
|
||||||
create_file("/spiffs/certsignreq.csr",formatted_out);
|
create_file("/spiffs/certsignreq.csr",formatted_out);
|
||||||
|
/*Volanie funkcie pre vytvorenie ulohy podpisu certifikatu*/
|
||||||
task_create_ca(argc,argv);
|
task_create_ca(argc,argv);
|
||||||
memset(buf,'\0',sizeof(buf)-1);
|
memset(buf,'\0',sizeof(buf)-1);
|
||||||
memset(buffered_out, '\0', strlen(url));
|
memset(buffered_out, '\0', strlen(url));
|
||||||
memset(formatted_out, '\0', strlen(url));
|
memset(formatted_out, '\0', strlen(url));
|
||||||
vTaskDelay(400);
|
vTaskDelay(400);
|
||||||
|
|
||||||
/*nahradenie LF znaku za CRLF kvoli HTTP serveru */
|
/*nahradenie LF znaku za CRLF v certifikate kvoli HTTP serveru */
|
||||||
FILE* f = fopen("/spiffs/user.crt", "r");
|
FILE* f = fopen("/spiffs/user.crt", "r");
|
||||||
if(f!=NULL){
|
if(f!=NULL){
|
||||||
while(fgets(buffered_out, sizeof(buffered_out)-1, f)){
|
while(fgets(buffered_out, sizeof(buffered_out)-1, f)){
|
||||||
@ -144,7 +145,7 @@ static esp_err_t echo_post_handler(httpd_req_t *req)
|
|||||||
|
|
||||||
fclose(f);
|
fclose(f);
|
||||||
|
|
||||||
|
/*Rozdelenie certifikatu do tokenov*/
|
||||||
token = NULL;
|
token = NULL;
|
||||||
token = strtok(buf, "\n");
|
token = strtok(buf, "\n");
|
||||||
|
|
||||||
@ -175,7 +176,7 @@ static const httpd_uri_t echo = {
|
|||||||
.handler = echo_post_handler,
|
.handler = echo_post_handler,
|
||||||
.user_ctx = NULL
|
.user_ctx = NULL
|
||||||
};
|
};
|
||||||
|
/*Registrovanie URI*/
|
||||||
static const httpd_uri_t root = {
|
static const httpd_uri_t root = {
|
||||||
.uri = "/",
|
.uri = "/",
|
||||||
.method = HTTP_GET,
|
.method = HTTP_GET,
|
||||||
@ -189,20 +190,20 @@ static httpd_handle_t start_webserver(void)
|
|||||||
|
|
||||||
// Start the httpd server
|
// Start the httpd server
|
||||||
ESP_LOGI(TAG, "Starting server");
|
ESP_LOGI(TAG, "Starting server");
|
||||||
|
//Inicializacia konfiguracie pre http server
|
||||||
httpd_ssl_config_t conf = HTTPD_SSL_CONFIG_DEFAULT();
|
httpd_ssl_config_t conf = HTTPD_SSL_CONFIG_DEFAULT();
|
||||||
conf.httpd.stack_size = 12000;
|
conf.httpd.stack_size = 12000;
|
||||||
|
//pridanie certifikatu do konfiguracie
|
||||||
extern const unsigned char cacert_pem_start[] asm("_binary_cacert_pem_start");
|
extern const unsigned char cacert_pem_start[] asm("_binary_cacert_pem_start");
|
||||||
extern const unsigned char cacert_pem_end[] asm("_binary_cacert_pem_end");
|
extern const unsigned char cacert_pem_end[] asm("_binary_cacert_pem_end");
|
||||||
conf.cacert_pem = cacert_pem_start;
|
conf.cacert_pem = cacert_pem_start;
|
||||||
conf.cacert_len = cacert_pem_end - cacert_pem_start;
|
conf.cacert_len = cacert_pem_end - cacert_pem_start;
|
||||||
|
//pridanie sukromneho kluca do konfiguracie
|
||||||
extern const unsigned char prvtkey_pem_start[] asm("_binary_prvtkey_pem_start");
|
extern const unsigned char prvtkey_pem_start[] asm("_binary_prvtkey_pem_start");
|
||||||
extern const unsigned char prvtkey_pem_end[] asm("_binary_prvtkey_pem_end");
|
extern const unsigned char prvtkey_pem_end[] asm("_binary_prvtkey_pem_end");
|
||||||
conf.prvtkey_pem = prvtkey_pem_start;
|
conf.prvtkey_pem = prvtkey_pem_start;
|
||||||
conf.prvtkey_len = prvtkey_pem_end - prvtkey_pem_start;
|
conf.prvtkey_len = prvtkey_pem_end - prvtkey_pem_start;
|
||||||
|
//vytvorenie HTTP + SSL servera
|
||||||
esp_err_t ret = httpd_ssl_start(&server, &conf);
|
esp_err_t ret = httpd_ssl_start(&server, &conf);
|
||||||
if (ESP_OK != ret) {
|
if (ESP_OK != ret) {
|
||||||
ESP_LOGI(TAG, "Error starting server!");
|
ESP_LOGI(TAG, "Error starting server!");
|
||||||
|
@ -41,10 +41,14 @@ static void initialise_wifi(void)
|
|||||||
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
|
||||||
/*Inicializacia wifi drivera*/
|
/*Inicializacia wifi drivera*/
|
||||||
ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
|
ESP_ERROR_CHECK( esp_wifi_init(&cfg) );
|
||||||
|
//registrovanie eventov do event loopu
|
||||||
ESP_ERROR_CHECK( esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &event_handler, NULL) );
|
ESP_ERROR_CHECK( esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &event_handler, NULL) );
|
||||||
ESP_ERROR_CHECK( esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL) );
|
ESP_ERROR_CHECK( esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL) );
|
||||||
|
//Ukladanie wifi konfiguracie do RAM
|
||||||
ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
|
ESP_ERROR_CHECK( esp_wifi_set_storage(WIFI_STORAGE_RAM) );
|
||||||
|
|
||||||
ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_NULL) );
|
ESP_ERROR_CHECK( esp_wifi_set_mode(WIFI_MODE_NULL) );
|
||||||
|
|
||||||
ESP_ERROR_CHECK( esp_wifi_start() );
|
ESP_ERROR_CHECK( esp_wifi_start() );
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
|
||||||
|
36
main/main.c
36
main/main.c
@ -59,24 +59,9 @@ static const char* TAG = "konzola";
|
|||||||
* The easiest way to do this is to use FATFS filesystem on top of
|
* The easiest way to do this is to use FATFS filesystem on top of
|
||||||
* wear_levelling library.
|
* wear_levelling library.
|
||||||
*/
|
*/
|
||||||
|
/*Historia prikazov moze byt ukladana a nacitana zo suboru*/
|
||||||
#if CONFIG_STORE_HISTORY
|
#if CONFIG_STORE_HISTORY
|
||||||
|
#define HISTORY_PATH "/spiffs/history.txt"
|
||||||
#define MOUNT_PATH "/data"
|
|
||||||
#define HISTORY_PATH MOUNT_PATH "/history.txt"
|
|
||||||
|
|
||||||
static void initialize_filesystem(void)
|
|
||||||
{
|
|
||||||
static wl_handle_t wl_handle;
|
|
||||||
const esp_vfs_fat_mount_config_t mount_config = {
|
|
||||||
.max_files = 4,
|
|
||||||
.format_if_mount_failed = true
|
|
||||||
};
|
|
||||||
esp_err_t err = esp_vfs_fat_spiflash_mount(MOUNT_PATH, "storage_fat", &mount_config, &wl_handle);
|
|
||||||
if (err != ESP_OK) {
|
|
||||||
ESP_LOGE(TAG, "Failed to mount FATFS (%s)", esp_err_to_name(err));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif // CONFIG_STORE_HISTORY
|
#endif // CONFIG_STORE_HISTORY
|
||||||
|
|
||||||
static void initialize_nvs(void)
|
static void initialize_nvs(void)
|
||||||
@ -160,8 +145,6 @@ void app_main(void)
|
|||||||
init_memory();
|
init_memory();
|
||||||
|
|
||||||
#if CONFIG_STORE_HISTORY
|
#if CONFIG_STORE_HISTORY
|
||||||
/*Inicializacia FATFS*/
|
|
||||||
initialize_filesystem();
|
|
||||||
ESP_LOGI(TAG, "Command history enabled");
|
ESP_LOGI(TAG, "Command history enabled");
|
||||||
#else
|
#else
|
||||||
ESP_LOGI(TAG, "Command history disabled");
|
ESP_LOGI(TAG, "Command history disabled");
|
||||||
@ -170,15 +153,26 @@ void app_main(void)
|
|||||||
ESP_ERROR_CHECK(esp_netif_init());
|
ESP_ERROR_CHECK(esp_netif_init());
|
||||||
/*Vytvorenie specialneho event loopu pre systemove eventy*/
|
/*Vytvorenie specialneho event loopu pre systemove eventy*/
|
||||||
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
||||||
|
|
||||||
initialize_console();
|
initialize_console();
|
||||||
|
|
||||||
/* Registrovanie príkazov */
|
/* Registrovanie príkazov */
|
||||||
|
/*Registrovanie prikazu help ktory vypise vsetky prikazy*/
|
||||||
esp_console_register_help_command();
|
esp_console_register_help_command();
|
||||||
|
/*Registrovanie prikazov free pre zobrazenie aktualnej velkosti zasobnika,
|
||||||
|
*heap pre zobrazenie velkosti zasobnika pri spusteni zariadenia,
|
||||||
|
*restart pre restartovanie zariadenia,
|
||||||
|
*/
|
||||||
register_system();
|
register_system();
|
||||||
|
/*Registrovanie prikazu join pre pripojenie na wifi*/
|
||||||
register_wifi();
|
register_wifi();
|
||||||
|
//
|
||||||
register_nvs();
|
register_nvs();
|
||||||
|
/*Registrovanie prikazu write_cert pre vytvorenie certifikatov*/
|
||||||
register_ca();
|
register_ca();
|
||||||
|
/*Registrovanie prikazu server_on pre HTTP + SSL servera*/
|
||||||
register_server();
|
register_server();
|
||||||
|
/*Registrovanie prikazu pre generovanie verejnych klucov*/
|
||||||
register_gen_key();
|
register_gen_key();
|
||||||
|
|
||||||
|
|
||||||
@ -194,7 +188,6 @@ void app_main(void)
|
|||||||
const char* prompt = LOG_COLOR_I "esp32> " LOG_RESET_COLOR;
|
const char* prompt = LOG_COLOR_I "esp32> " LOG_RESET_COLOR;
|
||||||
|
|
||||||
printf("\n"
|
printf("\n"
|
||||||
"This is an example of ESP-IDF console component.\n"
|
|
||||||
"Type 'help' to get the list of commands.\n"
|
"Type 'help' to get the list of commands.\n"
|
||||||
"Use UP/DOWN arrows to navigate through command history.\n"
|
"Use UP/DOWN arrows to navigate through command history.\n"
|
||||||
"Press TAB when typing command name to auto-complete.\n");
|
"Press TAB when typing command name to auto-complete.\n");
|
||||||
@ -233,6 +226,9 @@ void app_main(void)
|
|||||||
|
|
||||||
/* Try to run the command */
|
/* Try to run the command */
|
||||||
int ret;
|
int ret;
|
||||||
|
/*Rozparsovanie riadku na argumenty, prvy argument je brany ako prikaz
|
||||||
|
*v pripade ze prikaz nie je registrovany tak funkcia vrati hodnotu ESP_ERR_NOT_FOUND
|
||||||
|
*/
|
||||||
esp_err_t err = esp_console_run(line, &ret);
|
esp_err_t err = esp_console_run(line, &ret);
|
||||||
if (err == ESP_ERR_NOT_FOUND) {
|
if (err == ESP_ERR_NOT_FOUND) {
|
||||||
printf("Unrecognized command\n");
|
printf("Unrecognized command\n");
|
||||||
|
Loading…
Reference in New Issue
Block a user