This commit is contained in:
tom_win 2020-05-17 15:12:06 +02:00
parent e82eace59d
commit a5a06d2255
20 changed files with 532 additions and 338 deletions

View File

@ -1,18 +1,18 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
fqsUu3MM72qGX8XHLoTy0iUCgYAx7AI9xFNEStIXyPKEdNiGsqCPORzk6NsWW7qO ji3agQYBulcJ4vjALsvejwKBgQCJQPuMGHb0a5TMPcHfbDzDZlYg0aU1WSubnHhE
uYTylMk7tyU1/L1eYePQvu6gV5IZ6GcwaLkTNep7NVgsvV0e9ZT1ku/a7OgpivRX DiBsaGyWq6wotby8RZqMXjfCrsUzUdCYw3Zyt8oOLuqsp5sGHCty7rP6pbrbhkRC
fCU3ZzkkE5YqvT2lJA9sKG/PzQIUoX9i7lVRE45CwRWkm3VaoxFtClLBVgYIEVNA z+nQeDS2Gx9FmXSTE8EtZDPosqlxJObQp2IkZxN9KkP2zFGuhl8bo1oOtSw7SUDl
5NQevQKBgCv+Gl7uk1N9VrlD2XwwmHCWooqVr3FPOq6ztX4014DzZmxkyem9GJGZ qxXvGQKBgQDPRhUKxKk+ApDRLImWTjuG6PCBi2XhVXd+HIE6JnUgnDZSNOn2WJqH
uyuzM4bKjb/lmk4RI19VZoExyt+7K3eWUSUQNS6Erhcjx74+vSngKOV2TNiGnByx IVWxIc/OAlg0e3rRWCbmwJAjHhZZ+pCp1gju12SjiVzBri2KIxOhVj8IucqvpIyr
oJoUlKquhEijlX/pJtH8812EYGtm5COkRA2QkWfr6hb6KQtz4wq7 kOSwd33TlO0aRq0gM3xHvLUsb31sjHJeVTTrgiKbwAVcYMzLrjoJXg==
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----

View File

@ -1,18 +1,18 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,27 +1,27 @@
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----

View File

@ -9,20 +9,15 @@
#include "komunikacia.h" #include "komunikacia.h"
#include "kryptografia.h" #include "kryptografia.h"
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_aplikacie *nastavenia) int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_aplikacie *nastavenia, int velkost_bloku_dat)
{ {
int uspech; int uspech;
//odoslanie nazvu (resp. cesty) suboru while(wolfSSL_write(ssl, cesta, SPRAVA_VELKOST_BUFFERA) != SPRAVA_VELKOST_BUFFERA)
uspech = 0;
while(uspech < VELKOST_CESTY)
{ {
uspech = wolfSSL_write(ssl, cesta, VELKOST_CESTY); if(wolfSSL_want_write(ssl)) continue;
if(uspech <= 0) fprintf(stderr, "Nastala chyba pri posielani nazvu suboru\n");
{ return -1;
fprintf(stderr, "Nastala chyba pri posielani dat o subore.\n");
return -1;
}
} }
//otvorenie suboru na citanie //otvorenie suboru na citanie
@ -40,123 +35,143 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_a
//nastavi ukazovatel na koniec suboru //nastavi ukazovatel na koniec suboru
//a zisti velkost suboru //a zisti velkost suboru
fseek(subor, 0, SEEK_END); fseek(subor, 0, SEEK_END);
int velkost = (int)ftell(subor); int velkost_suboru = (int)ftell(subor);
char velkost_suboru[VELKOST_SUBOR]; char velkost_suboru_retazec[SPRAVA_VELKOST_BUFFERA];
sprintf(velkost_suboru, "%ld", velkost); sprintf(velkost_suboru_retazec, "%d", velkost_suboru);
printf("Velkost suboru: %s bajtov\n", velkost_suboru); printf("Velkost suboru: %s bajtov\n", velkost_suboru_retazec);
uspech = 0;
while(uspech < VELKOST_SUBOR) while(wolfSSL_write(ssl, velkost_suboru_retazec, SPRAVA_VELKOST_BUFFERA) != SPRAVA_VELKOST_BUFFERA)
{ {
uspech = wolfSSL_write(ssl, velkost_suboru, VELKOST_SUBOR); if(wolfSSL_want_write(ssl)) continue;
if(uspech <= 0) fprintf(stderr, "Nastala chyba pri posielani velkosti suboru\n");
{ return -1;
fprintf(stderr, "Nastala chyba pri posielani dat o velkosti suboru.\n");
return -1;
}
} }
//nastavi ukazovatel na zaciatok suboru //nastavi ukazovatel na zaciatok suboru
//a nacita data zo suboru do pola //a nacita data zo suboru do pola
unsigned char* pole = calloc(velkost, sizeof(unsigned char)); unsigned char* data = calloc(velkost_suboru, sizeof(unsigned char));
if(pole == NULL) if(data == NULL)
{ {
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre pole\n"); fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre pole data,\ndo ktoreho sa nacita obsah suboru\n");
return -1; return -1;
} }
fseek(subor, 0, SEEK_SET); fseek(subor, 0, SEEK_SET);
fread((unsigned char*)pole, 1, velkost, subor); fread((unsigned char*)data, 1, velkost_suboru, subor);
//posielanie jednotlivych bajtov //posielanie jednotlivych bajtov
unsigned char* data_ukazovatel = data;
uspech = 0; uspech = 0;
while(uspech < velkost) int ostava_poslat = velkost_suboru;
for(int i = 0; i < (velkost_suboru/velkost_bloku_dat) + 1; ++i)
{ {
uspech = wolfSSL_write(ssl, pole, velkost); if(ostava_poslat > velkost_bloku_dat)
if(uspech <= 0)
{ {
fprintf(stderr, "Nastala chyba pri posielani suboru.\n"); while(wolfSSL_write(ssl, data_ukazovatel, velkost_bloku_dat) != velkost_bloku_dat)
return -1; {
if(wolfSSL_want_write(ssl)) continue;
fprintf(stderr, "Nastala chyba pri posielani suboru\n");
return -1;
}
} }
else
{
uspech = 0;
while(wolfSSL_write(ssl, data_ukazovatel, ostava_poslat) != ostava_poslat)
{
if(wolfSSL_want_write(ssl)) continue;
fprintf(stderr, "Nastala chyba pri posielani suboru\n");
return -1;
}
}
data_ukazovatel += velkost_bloku_dat;
ostava_poslat -= velkost_bloku_dat;
} }
printf("Subor bol uspesne odoslany.\n"); printf("Subor bol uspesne odoslany.\n");
//generovanie a poslanie kontrolneho suctu serveru pre kontrolu //generovanie a poslanie kontrolneho suctu serveru pre kontrolu
unsigned char* kontrolny_sucet; unsigned char* kontrolny_sucet;
int velkost_kontrolneho_suctu; int velkost_kontrolneho_suctu;
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, velkost, &velkost_kontrolneho_suctu); kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, velkost_suboru, &velkost_kontrolneho_suctu);
uspech = 0; while(wolfSSL_write(ssl, kontrolny_sucet, velkost_kontrolneho_suctu) != velkost_kontrolneho_suctu)
while(uspech < velkost_kontrolneho_suctu)
{ {
uspech = wolfSSL_write(ssl, kontrolny_sucet, velkost_kontrolneho_suctu); if(wolfSSL_want_write(ssl)) continue;
fprintf(stderr, "Nastala chyba pri posielani kontrolneho suctu\n");
return -1;
} }
free(kontrolny_sucet); free(kontrolny_sucet);
fclose(subor); fclose(subor);
return 0; return 0;
} }
} }
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia) int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia, int velkost_bloku_dat)
{ {
int uspech; int uspech;
//prijem dat o subore //prijem dat o subore
char* cesta = calloc(VELKOST_CESTY, sizeof(char)); char* cesta = calloc(SPRAVA_VELKOST_BUFFERA, sizeof(char));
char* velkost_suboru = calloc(VELKOST_SUBOR, sizeof(char)); char* velkost_suboru_retazec = calloc(SPRAVA_VELKOST_BUFFERA, sizeof(char));
uspech = 0; while(wolfSSL_read(ssl, cesta, SPRAVA_VELKOST_BUFFERA) != SPRAVA_VELKOST_BUFFERA)
while(uspech < VELKOST_CESTY)
{ {
uspech = wolfSSL_read(ssl, cesta, VELKOST_CESTY); if(wolfSSL_want_read(ssl)) continue;
if(uspech <= 0) fprintf(stderr, "Nastala chyba pri prijati nazvu suboru\n");
{ return -1;
fprintf(stderr, "Nastala chyba pri prijati dat o subore\n");
return -1;
}
} }
printf("Prebieha prijimanie suboru %s\n", cesta); printf("Prebieha prijimanie suboru %s\n", cesta);
//ziskanie informacie od klienta o velkosti odoslaneho suboru //ziskanie informacie od klienta o velkosti odoslaneho suboru
uspech = 0; while(wolfSSL_read(ssl, velkost_suboru_retazec, SPRAVA_VELKOST_BUFFERA) != SPRAVA_VELKOST_BUFFERA)
while(uspech < VELKOST_SUBOR)
{ {
uspech = wolfSSL_read(ssl, velkost_suboru, VELKOST_SUBOR); if(wolfSSL_want_read(ssl)) continue;
if(uspech <= 0) fprintf(stderr, "Nastala chyba pri prijati velkosti suboru\n");
{ return -1;
fprintf(stderr, "Nastala chyba pri prijati velkosti suboru\n");
return -1;
}
} }
int velkost = (int)atol(velkost_suboru); int velkost_suboru = (int)atol(velkost_suboru_retazec);
if(velkost < 1) if(velkost_suboru <= 0)
{ {
printf("Nastala chyba pri prijati suboru\n"); printf("Bola prijata informacia o velkosti suboru s hodnotu mensou nez 0\nPravdepodobne nastala chyba pri prenose\n");
return -1; return -1;
} }
else else
{ {
printf("Velkost suboru: %s bajtov\n", velkost_suboru); printf("Velkost suboru: %s bajtov\n", velkost_suboru_retazec);
} }
//prijem jednotlivych bajtov //prijem jednotlivych bajtov
unsigned char* pole = calloc(velkost, sizeof(unsigned char)); unsigned char* data = calloc(velkost_suboru, sizeof(unsigned char));
if(pole == NULL) if(data == NULL)
{ {
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre pole\n"); fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre pole data\ndo ktoreho sa zapisu prijate data\n");
return -1; return -1;
} }
unsigned char* pole_uk = pole;
unsigned char* data_ukazovatel = data;
uspech = 0; int ostava_prijat = velkost_suboru;
for(int i = 0; i < (velkost/16384) + 1; ++i) for(int i = 0; i < (velkost_suboru/velkost_bloku_dat) + 1; ++i)
{ {
uspech = wolfSSL_read(ssl, pole_uk, velkost); if(ostava_prijat > velkost_bloku_dat)
pole_uk += 16384; {
if(uspech <= 0) while(wolfSSL_read(ssl, data_ukazovatel, velkost_bloku_dat) != velkost_bloku_dat)
{ {
fprintf(stderr, "Nastala chyba pri posielani suboru.\n"); if(wolfSSL_want_read(ssl)) continue;
fprintf(stderr, "Nastala chyba pri prijimani suboru\n");
return -1; return -1;
} }
}
else
{
while(wolfSSL_read(ssl, data_ukazovatel, ostava_prijat) != ostava_prijat)
{
if(wolfSSL_want_read(ssl)) continue;
fprintf(stderr, "Nastala chyba pri prijimani suboru\n");
return -1;
}
}
data_ukazovatel += velkost_bloku_dat;
ostava_prijat -= velkost_bloku_dat;
} }
printf("Subor bol uspesne prijaty.\n"); printf("Subor bol uspesne prijaty.\n");
@ -165,25 +180,34 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
int velkost_kontrolneho_suctu; int velkost_kontrolneho_suctu;
FILE *subor = fopen(cesta, "wb+"); FILE *subor = fopen(cesta, "wb+");
int n = fwrite((unsigned char*)pole, 1, velkost, subor); int pocet_zapisanych_bajtov = fwrite((unsigned char*)data, 1, velkost_suboru, subor);
if(pocet_zapisanych_bajtov <= 0)
{
fprintf(stderr, "Nepodarilo sa zapisat do suboru obsah prijateho suboru\n");
return -1;
}
else if(pocet_zapisanych_bajtov < velkost_suboru)
{
fprintf(stderr, "Nepodarilo sa zapisat do suboru cely obsah prijateho suboru\n");
return -1;
}
else
{
printf("Do suboru %s bolo zapisanych %d bajtov\n", cesta, pocet_zapisanych_bajtov);
}
fclose(subor); fclose(subor);
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, velkost, &velkost_kontrolneho_suctu); kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, velkost_suboru, &velkost_kontrolneho_suctu);
//prijem hashu, ktory vypocital server //prijem kontrolneho suctu, ktory vypocital server
char* prijaty_kontrolny_sucet = calloc(velkost_kontrolneho_suctu, sizeof(char)); char* prijaty_kontrolny_sucet = calloc(velkost_kontrolneho_suctu, sizeof(char));
uspech = 0; while(wolfSSL_read(ssl, (char*)prijaty_kontrolny_sucet, velkost_kontrolneho_suctu) != velkost_kontrolneho_suctu)
while(uspech != velkost_kontrolneho_suctu)
{ {
uspech = wolfSSL_read(ssl, (char*)prijaty_kontrolny_sucet, velkost_kontrolneho_suctu); if(wolfSSL_want_read(ssl)) continue;
if(uspech <= 0) fprintf(stderr, "Nastala chyba pri prijati kontrolneho suctu\n");
{ return -1;
fprintf(stderr, "Nastala chyba pri prijati kontrolneho suctu.\n");
free(prijaty_kontrolny_sucet);
return -1;
}
} }
//kontrola ci sa prijaty a vypocitany kontrolny sucet suboru zhoduju //kontrola ci sa prijaty a vypocitany kontrolny sucet suboru zhoduju
@ -199,7 +223,7 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
} }
free(cesta); free(cesta);
free(velkost_suboru); free(velkost_suboru_retazec);
free(kontrolny_sucet); free(kontrolny_sucet);
free(prijaty_kontrolny_sucet); free(prijaty_kontrolny_sucet);
return 0; return 0;
@ -420,14 +444,19 @@ int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor)
FILE* subor = fopen(komunikacny_subor, "ab+"); FILE* subor = fopen(komunikacny_subor, "ab+");
int uspech = 0; int uspech = 0;
int prebieha_nacitanie_velkosti_spravy = 0; stav_nacitania stav;
int prebieha_nacitanie_kontrolneho_suctu = 0; stav = NEPREBIEHA_NACITANIE;
int prebieha_nacitanie_dat = 0;
unsigned char znak; unsigned char znak;
//mnozstvo nacitanych dat //mnozstvo nacitanych dat
int nacitane_data = 0; int nacitane_data = 0;
//kontrolny vzor ktory jednoznacne identifikuje zaciatok spravy
unsigned char kontrolny_vzor[] = {0xAA, 0xAA, 0xAA, 0xAA};
//urcuje kolko bajtov z kontrolneho vzoru
//uz bolo prijatych z celkoveho poctu (4)
int kontrolny_vzor_pozicia = 0;
//velkost spravy, ktora sa bude prijmat //velkost spravy, ktora sa bude prijmat
int velkost_spravy = 0; int velkost_spravy = 0;
unsigned char velkost_spravy_hex[4]; unsigned char velkost_spravy_hex[4];
@ -443,70 +472,68 @@ int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor)
int kontrolny_sucet_pozicia = 0; int kontrolny_sucet_pozicia = 0;
unsigned char* prijate_data; unsigned char* prijate_data;
//kontrolny vzor ktory jednoznacne identifikuje zaciatok spravy
unsigned char kontrolny_vzor[] = {0xAA, 0xAA, 0xAA, 0xAA};
int kontrolny_vzor_pozicia = 0; //aktualna pozicia v kontrolnom vzore
int velkost_kontrolneho_vzoru = sizeof(kontrolny_vzor)/sizeof(kontrolny_vzor[0]);
while(1) while(stav != NACITANIE_UKONCENE)
{ {
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1); uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
if(uspech > 0) if(uspech > 0)
{ {
//nacitanie kontrolneho vzoru switch(stav)
if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie_dat && !prebieha_nacitanie_kontrolneho_suctu &&
znak == kontrolny_vzor[kontrolny_vzor_pozicia])
{ {
kontrolny_vzor_pozicia++; case NEPREBIEHA_NACITANIE:
if(kontrolny_vzor_pozicia == 4) if(znak == kontrolny_vzor[kontrolny_vzor_pozicia])
{
prebieha_nacitanie_velkosti_spravy = 1;
kontrolny_vzor_pozicia = 0;
}
}
//nacitanie velkosti spravy
else if(!prebieha_nacitanie_dat && prebieha_nacitanie_velkosti_spravy)
{
velkost_spravy_hex[velkost_spravy_pozicia] = znak;
velkost_spravy_pozicia++;
if(velkost_spravy_pozicia == 4)
{
velkost_spravy = (uint32_t)velkost_spravy_hex[0] << 24 | (uint32_t)velkost_spravy_hex[1] << 16 |
(uint32_t)velkost_spravy_hex[2] << 8 | (uint32_t)velkost_spravy_hex[3];
prebieha_nacitanie_kontrolneho_suctu = 1;
prebieha_nacitanie_velkosti_spravy = 0;
prijate_data = calloc(velkost_spravy, sizeof(unsigned char));
if(prijate_data == NULL)
{ {
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre prijate_data\n"); kontrolny_vzor_pozicia++;
return -1;
} }
} if(kontrolny_vzor_pozicia == 4)
} {
//nacitanie kontrolneho vzoru kontrolny_vzor_pozicia = 0;
else if(!prebieha_nacitanie_dat && prebieha_nacitanie_kontrolneho_suctu) stav = PREBIEHA_NACITANIE_VELKOSTI_SPRAVY;
{ }
kontrolny_sucet_hex[kontrolny_sucet_pozicia] = znak; break;
kontrolny_sucet_pozicia++; case PREBIEHA_NACITANIE_VELKOSTI_SPRAVY:
if(kontrolny_sucet_pozicia == 4) velkost_spravy_hex[velkost_spravy_pozicia] = znak;
{ velkost_spravy_pozicia++;
kontrolny_sucet = (uint32_t)kontrolny_sucet_hex[0] << 24 | (uint32_t)kontrolny_sucet_hex[1] << 16 | if(velkost_spravy_pozicia == 4)
(uint32_t)kontrolny_sucet_hex[2] << 8 | (uint32_t)kontrolny_sucet_hex[3]; {
prebieha_nacitanie_dat = 1; velkost_spravy = (uint32_t)velkost_spravy_hex[0] << 24 | (uint32_t)velkost_spravy_hex[1] << 16 |
prebieha_nacitanie_velkosti_spravy = 0; (uint32_t)velkost_spravy_hex[2] << 8 | (uint32_t)velkost_spravy_hex[3];
} velkost_spravy_pozicia = 0;
} stav = PREBIEHA_NACITANIE_KONTROLNEHO_SUCTU;
//nacitanie dat
else //dynamicka alokacia pola s velkostou, ktora bola prijata
{ //do neho bude zapisana prijata sprava
if(prebieha_nacitanie_dat) prijate_data = calloc(velkost_spravy, sizeof(unsigned char));
{ if(prijate_data == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre prijate_data\n");
return -1;
}
}
break;
case PREBIEHA_NACITANIE_KONTROLNEHO_SUCTU:
kontrolny_sucet_hex[kontrolny_sucet_pozicia] = znak;
kontrolny_sucet_pozicia++;
if(kontrolny_sucet_pozicia == 4)
{
kontrolny_sucet = (uint32_t)kontrolny_sucet_hex[0] << 24 | (uint32_t)kontrolny_sucet_hex[1] << 16 |
(uint32_t)kontrolny_sucet_hex[2] << 8 | (uint32_t)kontrolny_sucet_hex[3];
kontrolny_sucet_pozicia = 0;
stav = PREBIEHA_NACITANIE_DAT;
}
break;
case PREBIEHA_NACITANIE_DAT:
prijate_data[nacitane_data] = znak; prijate_data[nacitane_data] = znak;
nacitane_data += uspech; nacitane_data += uspech;
if(nacitane_data == velkost_spravy) break; if(nacitane_data == velkost_spravy)
} {
stav = NACITANIE_UKONCENE;
}
break;
default:
//tento stav by nemal nikdy nastat
fprintf(stderr, "Nepodarilo sa urcit stav nacitania spravy pomocou RS232\n");
return -1;
} }
} }
} }
@ -531,7 +558,7 @@ int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor)
} }
else else
{ {
printf("Sprava neprisla v poriadku"); fprintf(stderr, "Sprava neprisla v poriadku");
return -1; return -1;
} }

View File

@ -17,8 +17,9 @@
#include "kryptografia.h" #include "kryptografia.h"
#include "../externe_kniznice/teuniz_rs232/rs232.h" #include "../externe_kniznice/teuniz_rs232/rs232.h"
#define VELKOST_CESTY 64 //velkost retazca, kt. uklada lokaciu suboru //velkost buffrov ktore ukladaju doplnujuce data pri komunikacii
#define VELKOST_SUBOR 32 //velkost retazca, kt. uklada velkost prenasaneho suboru //napr. velkost suboru, cestu ku suboru a ine
#define SPRAVA_VELKOST_BUFFERA 64
#if defined(_WIN32) #if defined(_WIN32)
//makro ktore urcuje win distribuciu ak nieje detekovana //makro ktore urcuje win distribuciu ak nieje detekovana
@ -76,6 +77,12 @@ int cakat_na_komunikaciu(int cislo_portu);
// RS232 KOMUNIKACNY KANAL // // RS232 KOMUNIKACNY KANAL //
///////////////////////////// /////////////////////////////
typedef enum stav_nacitania {
NEPREBIEHA_NACITANIE, PREBIEHA_NACITANIE_VELKOSTI_SPRAVY, PREBIEHA_NACITANIE_KONTROLNEHO_SUCTU,
PREBIEHA_NACITANIE_DAT, NACITANIE_UKONCENE
} stav_nacitania;
/** /**
* rs232_otvorit_rozhranie: realizuje otvorenie RS232 serioveho rozhrania * rs232_otvorit_rozhranie: realizuje otvorenie RS232 serioveho rozhrania
* @parameter int cislo_rozhrania: cislo RS232 serioveho rozhrania * @parameter int cislo_rozhrania: cislo RS232 serioveho rozhrania
@ -119,17 +126,19 @@ int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor);
* @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu
* @parameter char* cesta: ukazuje na retazec, ktory reprezentuje cestu k suboru * @parameter char* cesta: ukazuje na retazec, ktory reprezentuje cestu k suboru
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient * @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient
* @parameter int velkost_bloku_dat: velkost dat po ktorych sa budu data posielat
* @vrati int : operacia bola uspesna(0), neuspesna(-1) * @vrati int : operacia bola uspesna(0), neuspesna(-1)
*/ */
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_aplikacie* nastavenia); int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_aplikacie* nastavenia, int velkost_bloku_dat);
/** /**
* prijat_subor: realizuje prijem suboru * prijat_subor: realizuje prijem suboru
* @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu * @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu
* @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient * @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient
* @parameter int velkost_bloku_dat: velkost dat po ktorych sa budu data prijimat
* @vrati int : operacia bola uspesna(0), neuspesna(-1) * @vrati int : operacia bola uspesna(0), neuspesna(-1)
*/ */
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia); int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia, int velkost_bloku_dat);
#endif #endif

View File

@ -71,7 +71,7 @@ void zobraz_sifru(WOLFSSL* ssl)
printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl)); printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl));
} }
int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email) int generovat_rsa_certifikat(const char* subor_certifikat, const char* subor_kluc, int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
{ {
int uspech = 0; int uspech = 0;
@ -151,7 +151,7 @@ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char
pem_kluc_velkost = uspech; pem_kluc_velkost = uspech;
//zapis vygenerovaneho klucu do suboru //zapis vygenerovaneho klucu do suboru
subor = fopen("../../certifikaty/vygenerovany_kluc.key", "wb"); subor = fopen(subor_kluc, "wb+");
fwrite(pem_kluc, 1, pem_kluc_velkost, subor); fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
fclose(subor); fclose(subor);
@ -204,8 +204,8 @@ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char
} }
pem_certifikat_velkost = uspech; pem_certifikat_velkost = uspech;
//zapis vygenerovaneho klucu do suboru //zapis vygenerovaneho certifikatu do suboru
subor = fopen("../../certifikaty/vygenerovany_certifikat.pem", "wb"); subor = fopen(subor_certifikat, "wb+");
fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor); fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor);
fclose(subor); fclose(subor);
@ -214,7 +214,7 @@ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char
return 0; return 0;
} }
int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email) int generovat_ecc_certifikat(const char* subor_certifikat, const char* subor_kluc, int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
{ {
int uspech = 0 ; int uspech = 0 ;
@ -293,7 +293,7 @@ int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algo
pem_kluc_velkost = uspech; pem_kluc_velkost = uspech;
//zapis vygenerovaneho kluca do suboru //zapis vygenerovaneho kluca do suboru
subor = fopen("../certifikaty/vygenerovany_kluc.key", "wb"); subor = fopen(subor_kluc, "wb+");
fwrite(pem_kluc, 1, pem_kluc_velkost, subor); fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
fclose(subor); fclose(subor);
@ -347,14 +347,14 @@ int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algo
pem_certifikat_velkost = uspech; pem_certifikat_velkost = uspech;
//zapis vygenerovaneho klucu do suboru //zapis vygenerovaneho klucu do suboru
subor = fopen("../certifikaty/vygenerovany_certifikat.pem", "wb"); subor = fopen(subor_certifikat, "wb+");
fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor); fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor);
fclose(subor); fclose(subor);
return 0; return 0;
} }
int vygenerovat_rsa_ziadost(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email) int vygenerovat_rsa_ziadost(const char* subor_ziadost, const char* subor_kluc, int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
{ {
int uspech = 0; int uspech = 0;
@ -392,6 +392,11 @@ int vygenerovat_rsa_ziadost(int pocet_bitov, int exponent, int algoritmus, char*
return -1; return -1;
} }
FILE* subor = fopen(subor_kluc, "wb+");
fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
fclose(subor);
printf("RSA kluc bol uspesne vygenerovany\n");
//premenne pre ukladanie dat ziadosti //premenne pre ukladanie dat ziadosti
Cert ziadost; Cert ziadost;
unsigned char der_ziadost[VELKOST_BUFFERA]; unsigned char der_ziadost[VELKOST_BUFFERA];
@ -429,9 +434,13 @@ int vygenerovat_rsa_ziadost(int pocet_bitov, int exponent, int algoritmus, char*
fprintf(stderr, "Nastala chyba pri vytvoreni suboru PEM so ziadostou.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech)); fprintf(stderr, "Nastala chyba pri vytvoreni suboru PEM so ziadostou.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech));
return -1; return -1;
} }
pem_ziadost_velkost = uspech;
subor = fopen(subor_ziadost, "wb+");
fwrite(pem_ziadost, 1, pem_ziadost_velkost, subor);
fclose(subor);
} }
int vygenerovat_ecc_ziadost(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email) int vygenerovat_ecc_ziadost(const char* subor_ziadost, const char* subor_kluc, int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email)
{ {
int uspech = 0; int uspech = 0;
@ -469,6 +478,11 @@ int vygenerovat_ecc_ziadost(int pocet_bitov, ecc_curve_id kluc_krivka, int algor
return -1; return -1;
} }
FILE* subor = fopen(subor_kluc, "wb+");
fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
fclose(subor);
printf("ECC kluc bol uspesne vygenerovany\n");
//premenne pre ukladanie dat ziadosti //premenne pre ukladanie dat ziadosti
Cert ziadost; Cert ziadost;
unsigned char der_ziadost[VELKOST_BUFFERA]; unsigned char der_ziadost[VELKOST_BUFFERA];
@ -506,6 +520,10 @@ int vygenerovat_ecc_ziadost(int pocet_bitov, ecc_curve_id kluc_krivka, int algor
fprintf(stderr, "Nastala chyba pri vytvoreni suboru PEM so ziadostou.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech)); fprintf(stderr, "Nastala chyba pri vytvoreni suboru PEM so ziadostou.\nCislo chyby: %d\nDovod chyby: %s\n", uspech, wc_GetErrorString(uspech));
return -1; return -1;
} }
pem_ziadost_velkost = uspech;
subor = fopen(subor_ziadost, "wb+");
fwrite(pem_ziadost, 1, pem_ziadost_velkost, subor);
fclose(subor);
} }
int nacitat_certifikaty(WOLFSSL_CTX* ctx, const char* subor_certifikat, const char* subor_kluc) int nacitat_certifikaty(WOLFSSL_CTX* ctx, const char* subor_certifikat, const char* subor_kluc)
@ -541,7 +559,6 @@ int nacitat_certifikaty(WOLFSSL_CTX* ctx, const char* subor_certifikat, const ch
void zobraz_certifikat(WOLFSSL* ssl) void zobraz_certifikat(WOLFSSL* ssl)
{ {
printf("Informacie o certifikate:\n");
WOLFSSL_X509 *certifikat = wolfSSL_get_peer_certificate(ssl); WOLFSSL_X509 *certifikat = wolfSSL_get_peer_certificate(ssl);
char* pole; char* pole;
if (!certifikat) if (!certifikat)

View File

@ -26,8 +26,13 @@
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
//velkost bufferov do ktorych sa ukladaju data certifikatov, klucov, ziadosti
#define VELKOST_BUFFERA 4096 #define VELKOST_BUFFERA 4096
//pocet bajtov ktore vstupuju do crc funkcie
#define CRC32_VELKOST 10 #define CRC32_VELKOST 10
//velkost vystupu blake2d hashu v bitoch
#define BLAKE2B_VELKOST 64 #define BLAKE2B_VELKOST 64
/** /**
@ -82,41 +87,49 @@ unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia
/** /**
* generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority, * generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,
* vygenerovanie a podpis ecc certifikatu pomocou sukromneho kluca a certifikatu autority * vygenerovanie a podpis ecc certifikatu pomocou sukromneho kluca a certifikatu autority
* @parameter const char* subor_kluc : absolutna cesta ku suboru so sukromnym klucom vo formate PEM
* @parameter const char* subor_certifikat : absolutna cesta ku suboru s certifikatom vo formate PEM
* @parameter int pocet_bitov : velkost kluca * @parameter int pocet_bitov : velkost kluca
* @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca * @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca
* @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov * @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov
* @vrati int: operacia bola uspesna(0), neuspesna(-1) * @vrati int: operacia bola uspesna(0), neuspesna(-1)
*/ */
int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email); int generovat_ecc_certifikat(const char* subor_kluc, const char* subor_certifikat, int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
/** /**
* generovat_rsa_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority, * generovat_rsa_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,
* vygenerovanie a podpis rsa certifikatu pomocou sukromneho kluca a certifikatu autority * vygenerovanie a podpis rsa certifikatu pomocou sukromneho kluca a certifikatu autority
* @parameter const char* subor_kluc : absolutna cesta ku suboru so sukromnym klucom vo formate PEM
* @parameter const char* subor_certifikat : absolutna cesta ku suboru s certifikatom vo formate PEM
* @parameter int pocet_bitov : velkost kluca * @parameter int pocet_bitov : velkost kluca
* @parameter int exponent : hodnota exponentu * @parameter int exponent : hodnota exponentu
* @parameter int algoritmus : kod algoritmu, sluziaceho na vymenu klucov * @parameter int algoritmus : kod algoritmu, sluziaceho na vymenu klucov
* @vrati int : operacia bola uspesna(0), neuspesna(-1) * @vrati int : operacia bola uspesna(0), neuspesna(-1)
*/ */
int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email); int generovat_rsa_certifikat(const char* subor_kluc, const char* subor_certifikat, int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
/** /**
* generovat_rsa_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti * generovat_rsa_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti
* @parameter const char* subor_kluc : absolutna cesta ku suboru so sukromnym klucom vo formate PEM
* @parameter const char* subor_ziadost : absolutna cesta ku suboru so ziadostou vo formate PEM
* @parameter int pocet_bitov : velkost kluca * @parameter int pocet_bitov : velkost kluca
* @parameter int exponent : hodnota exponentu * @parameter int exponent : hodnota exponentu
* @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov * @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov
* @vrati int: operacia bola uspesna(0), neuspesna(-1) * @vrati int: operacia bola uspesna(0), neuspesna(-1)
*/ */
int generovat_rsa_ziadost(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email); int generovat_rsa_ziadost(const char* subor_kluc, const char* subor_ziadost, int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
/** /**
* generovat_ecc_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti * generovat_ecc_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti
* @parameter const char* subor_kluc : absolutna cesta ku suboru so sukromnym klucom vo formate PEM
* @parameter const char* subor_ziadost : absolutna cesta ku suboru so ziadostou vo formate PEM
* @parameter int pocet_bitov : velkost kluca * @parameter int pocet_bitov : velkost kluca
* @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca * @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca
* @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov * @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov
* @vrati int: operacia bola uspesna(0), neuspesna(-1) * @vrati int: operacia bola uspesna(0), neuspesna(-1)
*/ */
int generovat_ecc_ziadost(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email); int generovat_ecc_ziadost(const char* subor_kluc, const char* subor_ziadost, int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email);
/** /**
* nastav_ctx_klient : realizuje vytvorenie a inicializaciu CTX struktury * nastav_ctx_klient : realizuje vytvorenie a inicializaciu CTX struktury

View File

@ -103,6 +103,7 @@ int main(int argc, char const *argv[])
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; WOLFSSL_CTX *ctx = NULL;
const char* subor = NULL; const char* subor = NULL;
int autentizacia = 0;
int zadane_rozhranie = 0; int zadane_rozhranie = 0;
int uvedeny_subor = 0; int uvedeny_subor = 0;
int nacitanie_zo_suboru = 0; int nacitanie_zo_suboru = 0;
@ -118,9 +119,10 @@ int main(int argc, char const *argv[])
} }
else else
{ {
printf("---------------\n| Certifikaty |\n---------------\n");
for(int i = 0; i < argc; i++) for(int i = 0; i < argc; i++)
{ {
if( (!strcmp(argv[i], "-s")) ) if( (!strcmp(argv[i], "-subor")) )
{ {
uvedeny_subor = 1; uvedeny_subor = 1;
if((argv[i+1] == NULL) ) if((argv[i+1] == NULL) )
@ -133,7 +135,7 @@ int main(int argc, char const *argv[])
subor = argv[i+1]; subor = argv[i+1];
} }
} }
if( (!strcmp(argv[i], "-port")) ) else if( (!strcmp(argv[i], "-port")) )
{ {
zadane_rozhranie = 1; zadane_rozhranie = 1;
if((argv[i+1] == NULL)) if((argv[i+1] == NULL))
@ -150,7 +152,32 @@ int main(int argc, char const *argv[])
} }
} }
} }
else if( (!strcmp(argv[i], "-n")) ) else if( (!strcmp(argv[i], "-cert-aut")) )
{
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu autority ktory chcete nacitat\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else if(!strcmp(argv[i+1], "ecc"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
else if( (!strcmp(argv[i], "-cert")) )
{ {
nacitanie_zo_suboru = 1; nacitanie_zo_suboru = 1;
if(generovanie_certifikatu) if(generovanie_certifikatu)
@ -165,17 +192,11 @@ int main(int argc, char const *argv[])
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
} }
else else
{ {
@ -183,7 +204,7 @@ int main(int argc, char const *argv[])
return -1; return -1;
} }
} }
else if( (!strcmp(argv[i], "-g")) ) else if( (!strcmp(argv[i], "-cert-gen")) )
{ {
generovanie_certifikatu = 1; generovanie_certifikatu = 1;
if(nacitanie_zo_suboru) if(nacitanie_zo_suboru)
@ -198,18 +219,14 @@ int main(int argc, char const *argv[])
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL); if(generovat_rsa_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL); if(generovat_ecc_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
} }
else else
{ {
@ -219,23 +236,29 @@ int main(int argc, char const *argv[])
} }
} }
} }
//vypis upozornenia o autentizacii
if(!autentizacia)
{
printf("Nebol nacitany certifikat autority, takze nebude vykonana autentizacia druhej strany\n");
}
if(!zadane_rozhranie) if(!zadane_rozhranie)
{ {
fprintf(stderr, "Nebol urcene seriove rozhranie\n"); fprintf(stderr, "Nebol urcene seriove rozhranie\n");
return -1; return -1;
} }
else if(!generovanie_certifikatu && !nacitanie_zo_suboru) else if(!generovanie_certifikatu && !nacitanie_zo_suboru)
{ {
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n"); fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n"); printf("Zadajde prepinac -gen-cert (generovanie), alebo -cert (nacitanie zo suboru) s parametrom rsa alebo ecc\n");
return -1; return -1;
} }
else if(!uvedeny_subor) else if(!uvedeny_subor)
{ {
fprintf(stderr, "Nebola uvedena cesta ku suboru na odoslanie\n"); fprintf(stderr, "Nebola uvedena cesta ku suboru na odoslanie\n");
return -1; return -1;
} }
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"); //nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
@ -256,6 +279,8 @@ int main(int argc, char const *argv[])
wolfSSL_set_using_nonblock(ssl, k_subor); wolfSSL_set_using_nonblock(ssl, k_subor);
//pokus o inizicalizaciu TLS handshaku so serverom //pokus o inizicalizaciu TLS handshaku so serverom
printf("-----------------\n| TLS Handshake |\n-----------------\n");
printf("Inicializacia TLS spojenia\n");
uspech = wolfSSL_connect(ssl); uspech = wolfSSL_connect(ssl);
if(uspech != SSL_SUCCESS) if(uspech != SSL_SUCCESS)
{ {
@ -268,19 +293,20 @@ int main(int argc, char const *argv[])
free(popis_chyby); free(popis_chyby);
return -1; return -1;
} }
printf("Podarilo sa vytvorit TLS spojenie\n");
zobraz_sifru(ssl); zobraz_sifru(ssl);
printf("----------------------------\n| Informacie o certifikate |\n----------------------------\n");
zobraz_certifikat(ssl); zobraz_certifikat(ssl);
//nastavenie funkcie pre vypocet kontrolneho suctu //nastavenie funkcie pre vypocet kontrolneho suctu
//nastavime typ "crc" alebo "hash" a nazov funkcie, nazov druhej funkcie nastavime na NULL //nastavime typ "crc" alebo "hash" a nazov funkcie, nazov druhej funkcie nastavime na NULL
nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32); nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32);
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) printf("-------------------\n| Poslanie suboru |\n-------------------\n");
{
fclose(fopen(KOMUNIKACNY_SUBOR, "wb")); if(poslat_subor(ssl, ctx, subor, &nastavenia, 4096) == -1) return -1;
return -1;
} printf("----------------------\n| Ukoncenie spojenia |\n----------------------\n");
//ukoncenie spojenia, vymazanie komunikacneho suboru //ukoncenie spojenia, vymazanie komunikacneho suboru
//a vycistenie serioveho buffera //a vycistenie serioveho buffera

BIN
rs232_kanal/klient/obr.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -13,4 +13,4 @@
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat :: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat
::Priklady spustenia: ::Priklady spustenia:
klient -port 4 -n rsa -s document.pdf klient -port 4 -cert rsa -cert-aut rsa -subor obr.jpg

BIN
rs232_kanal/server/obr.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -100,6 +100,7 @@ int main(int argc, char const *argv[])
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; WOLFSSL_CTX *ctx = NULL;
int autentizacia = 0;
int zadane_rozhranie = 0; int zadane_rozhranie = 0;
int generovanie_certifikatu = 0; int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0; int nacitanie_zo_suboru = 0;
@ -115,9 +116,10 @@ int main(int argc, char const *argv[])
} }
else else
{ {
printf("---------------\n| Certifikaty |\n---------------\n");
for(int i = 0; i < argc; i++) for(int i = 0; i < argc; i++)
{ {
if( (!strcmp(argv[i], "-port")) ) if( (!strcmp(argv[i], "-port")) )
{ {
zadane_rozhranie = 1; zadane_rozhranie = 1;
if((argv[i+1] == NULL)) if((argv[i+1] == NULL))
@ -134,7 +136,32 @@ int main(int argc, char const *argv[])
} }
} }
} }
else if( (!strcmp(argv[i], "-n")) ) else if( (!strcmp(argv[i], "-cert-aut")) )
{
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu autority ktory chcete nacitat\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else if(!strcmp(argv[i+1], "ecc"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
else if( (!strcmp(argv[i], "-cert")) )
{ {
nacitanie_zo_suboru = 1; nacitanie_zo_suboru = 1;
if(generovanie_certifikatu) if(generovanie_certifikatu)
@ -149,17 +176,11 @@ int main(int argc, char const *argv[])
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
} }
else else
{ {
@ -167,7 +188,7 @@ int main(int argc, char const *argv[])
return -1; return -1;
} }
} }
else if( (!strcmp(argv[i], "-g")) ) else if( (!strcmp(argv[i], "-cert-gen")) )
{ {
generovanie_certifikatu = 1; generovanie_certifikatu = 1;
if(nacitanie_zo_suboru) if(nacitanie_zo_suboru)
@ -182,15 +203,13 @@ int main(int argc, char const *argv[])
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL); if(generovat_rsa_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL); if(generovat_ecc_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
} }
else else
@ -201,6 +220,12 @@ int main(int argc, char const *argv[])
} }
} }
} }
//vypis upozornenia o autentizacii
if(!autentizacia)
{
printf("Nebol nacitany certifikat autority, takze nebude vykonana autentizacia druhej strany\n");
}
if(!zadane_rozhranie) if(!zadane_rozhranie)
{ {
@ -233,6 +258,8 @@ int main(int argc, char const *argv[])
wolfSSL_set_using_nonblock(ssl, k_subor); wolfSSL_set_using_nonblock(ssl, k_subor);
//cakanie na inicializaciu TLS handshaku klientom //cakanie na inicializaciu TLS handshaku klientom
printf("-----------------\n| TLS Handshake |\n-----------------\n");
printf("Inicializacia TLS spojenia\n");
uspech = wolfSSL_accept(ssl); uspech = wolfSSL_accept(ssl);
if(uspech != SSL_SUCCESS) if(uspech != SSL_SUCCESS)
{ {
@ -245,24 +272,24 @@ int main(int argc, char const *argv[])
free(popis_chyby); free(popis_chyby);
return -1; return -1;
} }
printf("Podarilo sa vytvorit TLS spojenie\n");
zobraz_sifru(ssl); zobraz_sifru(ssl);
printf("----------------------------\n| Informacie o certifikate |\n----------------------------\n");
zobraz_certifikat(ssl); zobraz_certifikat(ssl);
//nastavenie funkcie pre vypocet kontrolneho suctu //nastavenie funkcie pre vypocet kontrolneho suctu
//nastavime typ "crc" alebo "hash" a nazov funkcie, nazov druhej funkcie nastavime na NULL //nastavime typ "crc" alebo "hash" a nazov funkcie, nazov druhej funkcie nastavime na NULL
nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32); nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32);
//vypocet casu prenosu suboru //vypocet casu prenosu suboru
printf("-------------------\n| Prijatie suboru |\n-------------------\n");
clock_t cas; clock_t cas;
cas = clock(); cas = clock();
if(prijat_subor(ssl, ctx, &nastavenia) == -1) if(prijat_subor(ssl, ctx, &nastavenia, 4096) == -1) return -1;
{
fclose(fopen(KOMUNIKACNY_SUBOR, "wb"));
return -1;
}
cas = clock() - cas; cas = clock() - cas;
printf("Cas prenosu suboru: %f sekund\n", (double)cas/CLOCKS_PER_SEC); printf("Cas prenosu suboru: %f sekund\n", (double)cas/CLOCKS_PER_SEC);
printf("----------------------\n| Ukoncenie spojenia |\n----------------------\n");
//ukoncenie spojenia, vymazanie komunikacneho suboru //ukoncenie spojenia, vymazanie komunikacneho suboru
//a vycistenie serioveho buffera //a vycistenie serioveho buffera

View File

@ -11,4 +11,4 @@
:: -g rsa|ecc sluzi na generovanie certifikatu :: -g rsa|ecc sluzi na generovanie certifikatu
:: -n rsa|ecc sluzi na nacitanie uz vygenerovanych certifikatov z adresara /certifikaty :: -n rsa|ecc sluzi na nacitanie uz vygenerovanych certifikatov z adresara /certifikaty
server -port 5 -n rsa server -port 5 -cert rsa -cert-aut rsa

View File

@ -22,9 +22,12 @@
#define ECC_CERTIFIKAT "../../certifikaty/klient/klient_ecc.pem" #define ECC_CERTIFIKAT "../../certifikaty/klient/klient_ecc.pem"
#define VYGENEROVANY_KLUC "../../certifikaty/klient/vygenerovany_kluc.key" #define VYGENEROVANY_KLUC "../../certifikaty/klient/vygenerovany_kluc.key"
#define VYGENEROVANY_CERTIFIKAT "../../certifikaty/klient/vygenerovany_certifikat.pem" #define VYGENEROVANY_CERTIFIKAT "../../certifikaty/klient/vygenerovany_certifikat.pem"
#define VYGENEROVANA_ZIADOST "../../certifikaty/klient/vygenerovana_ziadost.pem"
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
int autentizacia = 0;
clock_t cas;
int uspech; int uspech;
int generovanie_certifikatu = 0; int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0; int nacitanie_zo_suboru = 0;
@ -56,9 +59,10 @@ int main(int argc, char** argv)
{ {
//skontroluje ci nebol zadany prepinac "-g" pre moznost generovanie certifikatu, //skontroluje ci nebol zadany prepinac "-g" pre moznost generovanie certifikatu,
//ak ano pozrie aky typ certifikatu (v CLI argument hned za nim) bol zvoleny //ak ano pozrie aky typ certifikatu (v CLI argument hned za nim) bol zvoleny
printf("---------------\n| Certifikaty |\n---------------\n");
for(int i = 0; i < argc; i++) for(int i = 0; i < argc; i++)
{ {
if( (!strcmp(argv[i], "-s")) ) if( (!strcmp(argv[i], "-subor")) )
{ {
uvedeny_subor = 1; uvedeny_subor = 1;
if((argv[i+1] == NULL) ) if((argv[i+1] == NULL) )
@ -71,9 +75,9 @@ int main(int argc, char** argv)
subor = argv[i+1]; subor = argv[i+1];
} }
} }
if( (!strcmp(argv[i], "-ip")) ) if( (!strcmp(argv[i], "-ip-adr")) )
{ {
port = 1; ip = 1;
if((argv[i+1] == NULL) ) if((argv[i+1] == NULL) )
{ {
printf("Nezadali ste ip adresu\n"); printf("Nezadali ste ip adresu\n");
@ -86,7 +90,7 @@ int main(int argc, char** argv)
} }
else if( (!strcmp(argv[i], "-port")) ) else if( (!strcmp(argv[i], "-port")) )
{ {
ip = 1; port = 1;
if((argv[i+1] == NULL) ) if((argv[i+1] == NULL) )
{ {
printf("Nezadali ste cislo portu\n"); printf("Nezadali ste cislo portu\n");
@ -97,7 +101,32 @@ int main(int argc, char** argv)
cislo_portu = atoi(argv[i+1]); cislo_portu = atoi(argv[i+1]);
} }
} }
else if( (!strcmp(argv[i], "-n")) ) else if( (!strcmp(argv[i], "-cert-aut")) )
{
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu autority ktory chcete nacitat\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else if(!strcmp(argv[i+1], "ecc"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
else if( (!strcmp(argv[i], "-cert")) )
{ {
nacitanie_zo_suboru = 1; nacitanie_zo_suboru = 1;
if(generovanie_certifikatu) if(generovanie_certifikatu)
@ -112,12 +141,10 @@ int main(int argc, char** argv)
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1;
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1;
} }
else else
@ -126,9 +153,14 @@ int main(int argc, char** argv)
return -1; return -1;
} }
} }
else if( (!strcmp(argv[i], "-g")) ) else if( (!strcmp(argv[i], "-cert-gen")) )
{ {
generovanie_certifikatu = 1; generovanie_certifikatu = 1;
if(nacitanie_zo_suboru)
{
fprintf(stderr, "Nie je mozne zvolit obidve metody nacitania certifikatov naraz\n");
return -1;
}
if((argv[i+1] == NULL) || (i == argc-1)) if((argv[i+1] == NULL) || (i == argc-1))
{ {
printf("Nezadali ste typ certifikatu ktory chcete vygenerovat\n"); printf("Nezadali ste typ certifikatu ktory chcete vygenerovat\n");
@ -136,17 +168,14 @@ int main(int argc, char** argv)
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita_rsa.pem", NULL); if(generovat_rsa_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "klient@klient.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL); if(generovat_ecc_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "klient@klient.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
} }
else else
{ {
@ -155,6 +184,12 @@ int main(int argc, char** argv)
} }
} }
} }
//vypis upozornenia o autentizacii
if(!autentizacia)
{
printf("Nebol nacitany certifikat autority, takze nebude vykonana autentizacia druhej strany\n");
}
if(!ip) if(!ip)
{ {
@ -181,18 +216,23 @@ int main(int argc, char** argv)
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"); //nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
//pokus o inicializaciu TCP/IP prenosoveho kanala //pokus o inicializaciu TCP/IP prenosoveho kanala
printf("----------------\n| TCP/IP kanal |\n----------------\n");
printf("Pokus o inicializaciu TCP/IP prenosoveho kanala\n");
cislo_soketu = pripojit_na_server(ip_adresa, cislo_portu, 5); cislo_soketu = pripojit_na_server(ip_adresa, cislo_portu, 5);
if(!cislo_soketu) return -1; if(!cislo_soketu) return -1;
printf("TCP/IP kanal bol uspesne vytvoreny\n");
//pokus o vytvorenie novej wolfSSL relacie //pokus o vytvorenie novej wolfSSL relacie
ssl = wolfSSL_new(ctx); ssl = wolfSSL_new(ctx);
//priradenie file descriptora soketu ako I/O pre TLS spojenie //priradenie file descriptora soketu ako I/O pre TLS spojenie
wolfSSL_set_fd(ssl, cislo_soketu); wolfSSL_set_fd(ssl, cislo_soketu);
wolfSSL_set_using_nonblock(ssl, 1);
//pokus o inizicalizaciu TLS handshaku so serverom //pokus o inizicalizaciu TLS handshaku so serverom
uspech = wolfSSL_connect(ssl); uspech = wolfSSL_connect(ssl);
printf("-----------------\n| TLS Handshake |\n-----------------\n");
printf("Inicializacia TLS spojenia\n");
if(uspech != SSL_SUCCESS) if(uspech != SSL_SUCCESS)
{ {
char* popis_chyby = calloc(100, sizeof(char)); char* popis_chyby = calloc(100, sizeof(char));
@ -202,18 +242,21 @@ int main(int argc, char** argv)
printf("Skontrolujte certifikaty.\n"); printf("Skontrolujte certifikaty.\n");
free(popis_chyby); free(popis_chyby);
return -1; return -1;
} }
printf("Podarilo sa vytvorit TLS spojenie\n");
zobraz_sifru(ssl); zobraz_sifru(ssl);
printf("----------------------------\n| Informacie o certifikate |\n----------------------------\n");
zobraz_certifikat(ssl); zobraz_certifikat(ssl);
//nastavenie funkcie pre vypocet kontrolneho suctu //nastavenie funkcie pre vypocet kontrolneho suctu
//nastavime typ "crc" alebo "hash" a nazov funkcie, nazov druhej funkcie nastavime na NULL //nastavime typ "crc" alebo "hash" a nazov funkcie, nazov druhej funkcie nastavime na NULL
nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32); nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32);
printf("-------------------\n| Poslanie suboru |\n-------------------\n");
if(poslat_subor(ssl, ctx, subor, &nastavenia, 16384) == -1) return -1;
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) printf("----------------------\n| Ukoncenie spojenia |\n----------------------\n");
{
return -1;
}
ukoncit_spojenie(ssl, ctx); ukoncit_spojenie(ssl, ctx);
} }
ukoncit_soket(cislo_soketu); ukoncit_soket(cislo_soketu);

BIN
tcpip_kanal/klient/obr.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -12,4 +12,4 @@
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat :: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat
::Priklady spustenia: ::Priklady spustenia:
klient -ip 127.0.0.1 -port 8080 -n rsa -s document.pdf klient -ip-adr 127.0.0.1 -port 8080 -cert rsa -cert-aut rsa -subor obr.jpg

BIN
tcpip_kanal/server/obr.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -22,9 +22,12 @@
#define ECC_CERTIFIKAT "../../certifikaty/server/server_ecc.pem" #define ECC_CERTIFIKAT "../../certifikaty/server/server_ecc.pem"
#define VYGENEROVANY_KLUC "../../certifikaty/server/vygenerovany_kluc.key" #define VYGENEROVANY_KLUC "../../certifikaty/server/vygenerovany_kluc.key"
#define VYGENEROVANY_CERTIFIKAT "../../certifikaty/server/vygenerovany_certifikat.pem" #define VYGENEROVANY_CERTIFIKAT "../../certifikaty/server/vygenerovany_certifikat.pem"
#define VYGENEROVANA_ZIADOST "../../certifikaty/server/vygenerovana_ziadost.pem"
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int autentizacia = 0;
int uspech;
int autentizacia_klienta = 0; int autentizacia_klienta = 0;
int generovanie_certifikatu = 0; int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0; int nacitanie_zo_suboru = 0;
@ -52,6 +55,7 @@ int main(int argc, char **argv)
{ {
//skontroluje ci nebol zadany prepinac "-g" pre moznost generovanie certifikatu, //skontroluje ci nebol zadany prepinac "-g" pre moznost generovanie certifikatu,
//ak ano pozrie aky typ certifikatu (v CLI argument hned za nim) bol zvoleny //ak ano pozrie aky typ certifikatu (v CLI argument hned za nim) bol zvoleny
printf("---------------\n| Certifikaty |\n---------------\n");
for(int i = 0; i < argc; i++) for(int i = 0; i < argc; i++)
{ {
if( (!strcmp(argv[i], "-port")) ) if( (!strcmp(argv[i], "-port")) )
@ -67,7 +71,32 @@ int main(int argc, char **argv)
cislo_portu = atoi(argv[i+1]); cislo_portu = atoi(argv[i+1]);
} }
} }
else if( (!strcmp(argv[i], "-n")) ) else if( (!strcmp(argv[i], "-cert-aut")) )
{
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu autority ktory chcete nacitat\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else if(!strcmp(argv[i+1], "ecc"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
autentizacia = 1;
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
else if( (!strcmp(argv[i], "-cert")) )
{ {
nacitanie_zo_suboru = 1; nacitanie_zo_suboru = 1;
if(generovanie_certifikatu) if(generovanie_certifikatu)
@ -82,18 +111,11 @@ int main(int argc, char **argv)
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
printf("jo\n");
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
} }
else else
{ {
@ -101,7 +123,7 @@ int main(int argc, char **argv)
return -1; return -1;
} }
} }
else if( (!strcmp(argv[i], "-g")) ) else if( (!strcmp(argv[i], "-cert-gen")) )
{ {
generovanie_certifikatu = 1; generovanie_certifikatu = 1;
if(nacitanie_zo_suboru) if(nacitanie_zo_suboru)
@ -116,15 +138,13 @@ int main(int argc, char **argv)
} }
else if(!strcmp(argv[i+1], "rsa")) else if(!strcmp(argv[i+1], "rsa"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL); if(generovat_rsa_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
} }
else if(!strcmp(argv[i+1], "ecc")) else if(!strcmp(argv[i+1], "ecc"))
{ {
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL); if(generovat_ecc_certifikat(VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC, ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "server@server.sk") == -1) return -1;
if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1; if(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
} }
else else
@ -135,6 +155,12 @@ int main(int argc, char **argv)
} }
} }
//vypis upozornenia o autentizacii
if(!autentizacia)
{
printf("Nebol nacitany certifikat autority, takze nebude vykonana autentizacia druhej strany\n");
}
if(!port) if(!port)
{ {
fprintf(stderr, "Nebol urceny port\n"); fprintf(stderr, "Nebol urceny port\n");
@ -151,6 +177,8 @@ int main(int argc, char **argv)
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"); //nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
//pokus vytvorenie TCP/IP prenosoveho kanala //pokus vytvorenie TCP/IP prenosoveho kanala
printf("----------------\n| TCP/IP kanal |\n----------------\n");
printf("Pokus o inicializaciu TCP/IP prenosoveho kanala\n");
cislo_soketu = cakat_na_komunikaciu(cislo_portu); cislo_soketu = cakat_na_komunikaciu(cislo_portu);
struct sockaddr_in adresa; struct sockaddr_in adresa;
@ -158,15 +186,18 @@ int main(int argc, char **argv)
int velkost = sizeof(adresa); int velkost = sizeof(adresa);
int cislo_soketu_klienta = accept(cislo_soketu, (struct sockaddr*)&adresa, &velkost); int cislo_soketu_klienta = accept(cislo_soketu, (struct sockaddr*)&adresa, &velkost);
printf("Spojenie [%s:%d]\n", inet_ntoa(adresa.sin_addr), ntohs(adresa.sin_port)); printf("Spojenie [%s:%d]\n", inet_ntoa(adresa.sin_addr), ntohs(adresa.sin_port));
printf("TCP/IP kanal bol uspesne vytvoreny\n");
//pokus o vytvorenie novej wolfSSL relacie //pokus o vytvorenie novej wolfSSL relacie
ssl = wolfSSL_new(ctx); ssl = wolfSSL_new(ctx);
//priradenie file descriptora soketu ako I/O pre TLS spojenie //priradenie file descriptora soketu ako I/O pre TLS spojenie
wolfSSL_set_fd(ssl, cislo_soketu_klienta); wolfSSL_set_fd(ssl, cislo_soketu_klienta);
wolfSSL_set_using_nonblock(ssl, 1);
//cakanie na inicializaciu TLS handshaku klientom //cakanie na inicializaciu TLS handshaku klientom
int uspech; printf("-----------------\n| TLS Handshake |\n-----------------\n");
printf("Inicializacia TLS spojenia\n");
if(wolfSSL_accept(ssl) != SSL_SUCCESS) if(wolfSSL_accept(ssl) != SSL_SUCCESS)
{ {
char* popis_chyby = calloc(100, sizeof(char)); char* popis_chyby = calloc(100, sizeof(char));
@ -177,7 +208,9 @@ int main(int argc, char **argv)
free(popis_chyby); free(popis_chyby);
return -1; return -1;
} }
printf("Podarilo sa vytvorit TLS spojenie\n");
zobraz_sifru(ssl); zobraz_sifru(ssl);
printf("----------------------------\n| Informacie o certifikate |\n----------------------------\n");
zobraz_certifikat(ssl); zobraz_certifikat(ssl);
//nastavenie funkcie pre vypocet kontrolneho suctu //nastavenie funkcie pre vypocet kontrolneho suctu
@ -185,15 +218,14 @@ int main(int argc, char **argv)
nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32); nastav_funkciu(&nastavenia, "crc", (hashovacia_funkcia)NULL, funkcia_CRC32);
//vypocet casu prenosu suboru //vypocet casu prenosu suboru
printf("-------------------\n| Prijatie suboru |\n-------------------\n");
clock_t cas; clock_t cas;
cas = clock(); cas = clock();
if(prijat_subor(ssl, ctx, &nastavenia) == -1) if(prijat_subor(ssl, ctx, &nastavenia, 16384) == -1) return -1;
{
return -1;
}
cas = clock() - cas; cas = clock() - cas;
printf("Cas prenosu suboru: %f sekund\n", (double)cas/CLOCKS_PER_SEC); printf("Cas prenosu suboru: %f sekund\n", (double)cas/CLOCKS_PER_SEC);
printf("----------------------\n| Ukoncenie spojenia |\n----------------------\n");
ukoncit_spojenie(ssl, ctx); ukoncit_spojenie(ssl, ctx);
} }
ukoncit_soket(cislo_soketu); ukoncit_soket(cislo_soketu);

View File

@ -11,5 +11,5 @@
:: -n rsa|ecc sluzi na nacitanie uz vygenerovanych certifikatov z adresara /certifikaty :: -n rsa|ecc sluzi na nacitanie uz vygenerovanych certifikatov z adresara /certifikaty
::Priklady spustenia: ::Priklady spustenia:
server -port 8080 -n rsa server -port 8080 -cert rsa -cert-aut rsa
::server -port 8080 -g ecc ::server -port 8080 -g ecc