...
This commit is contained in:
parent
0a572e0d27
commit
562df8a2bb
@ -3,26 +3,30 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "komunikacia.h"
|
#include "komunikacia.h"
|
||||||
#include "kryptografia.h"
|
#include "kryptografia.h"
|
||||||
#include "rs232.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 uspech;
|
int uspech;
|
||||||
|
|
||||||
//odoslanie nazvu (resp. cesty) suboru
|
//odoslanie nazvu (resp. cesty) suboru
|
||||||
uspech = wolfSSL_write(ssl, cesta, VELKOST_CESTY);
|
uspech = 0;
|
||||||
if(uspech <= 0)
|
while(uspech < VELKOST_CESTY)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nastala chyba pri posielani dat o subore.\n");
|
uspech = wolfSSL_write(ssl, cesta, VELKOST_CESTY);
|
||||||
return -1;
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri posielani dat o subore.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FILE* subor = fopen(cesta, "r");
|
//otvorenie suboru na citanie
|
||||||
|
FILE* subor = fopen(cesta, "rb");
|
||||||
if(subor == NULL)
|
if(subor == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nebolo mozne najst pozadovany subor.\n");
|
fprintf(stderr, "Nebolo mozne najst pozadovany subor.\n");
|
||||||
@ -36,47 +40,58 @@ 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);
|
||||||
long velkost = ftell(subor);
|
int velkost = (int)ftell(subor);
|
||||||
char velkost_suboru[VELKOST_SUBOR];
|
char velkost_suboru[VELKOST_SUBOR];
|
||||||
sprintf(velkost_suboru, "%ld", velkost);
|
sprintf(velkost_suboru, "%ld", velkost);
|
||||||
printf("Velkost suboru: %s bajtov\n", velkost_suboru);
|
printf("Velkost suboru: %s bajtov\n", velkost_suboru);
|
||||||
wolfSSL_write(ssl, velkost_suboru, VELKOST_SUBOR);
|
uspech = 0;
|
||||||
|
while(uspech < VELKOST_SUBOR)
|
||||||
|
{
|
||||||
|
uspech = wolfSSL_write(ssl, velkost_suboru, VELKOST_SUBOR);
|
||||||
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
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
|
||||||
char* pole = malloc(velkost);
|
unsigned char* pole = calloc(velkost, sizeof(unsigned char));
|
||||||
char* pole_uk = pole;
|
|
||||||
fseek(subor, 0, SEEK_SET);
|
fseek(subor, 0, SEEK_SET);
|
||||||
fread(pole, 1, velkost, subor);
|
fread((unsigned char*)pole, 1, velkost, subor);
|
||||||
fclose(subor);
|
|
||||||
|
|
||||||
//posielanie jednotlivych bajtov
|
//posielanie jednotlivych bajtov
|
||||||
for(int i = 0; i < velkost + 1; ++i)
|
uspech = 0;
|
||||||
|
while(uspech < velkost)
|
||||||
{
|
{
|
||||||
uspech = wolfSSL_write(ssl, pole_uk, velkost);
|
uspech = wolfSSL_write(ssl, (unsigned char*)pole, velkost);
|
||||||
if(uspech <= 0)
|
if(uspech <= 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nastala chyba pri posielani suboru.\n");
|
fprintf(stderr, "Nastala chyba pri posielani suboru.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
pole_uk += 1;
|
|
||||||
}
|
}
|
||||||
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
|
||||||
byte* kontrolny_sucet;
|
byte* kontrolny_sucet;
|
||||||
int velkost_kontrolneho_suctu;
|
int velkost_kontrolneho_suctu;
|
||||||
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia->funkcia, cesta, &velkost_kontrolneho_suctu);
|
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, &velkost_kontrolneho_suctu);
|
||||||
for(int i = 0; i < velkost_kontrolneho_suctu; i++)
|
|
||||||
|
uspech = 0;
|
||||||
|
while(uspech < velkost_kontrolneho_suctu)
|
||||||
{
|
{
|
||||||
kontrolny_sucet[i] = (char)kontrolny_sucet[i];
|
uspech = wolfSSL_write(ssl, kontrolny_sucet, velkost_kontrolneho_suctu);
|
||||||
}
|
if(uspech <= 0)
|
||||||
wolfSSL_write(ssl, kontrolny_sucet, velkost_kontrolneho_suctu);
|
{
|
||||||
if(uspech <= 0)
|
fprintf(stderr, "Nastala chyba pri posielani kontrolneho suctu.\n");
|
||||||
{
|
return -1;
|
||||||
fprintf(stderr, "Nastala chyba pri posielani kontrolneho suctu.\n");
|
}
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
free(kontrolny_sucet);
|
||||||
|
fclose(subor);
|
||||||
|
free(pole);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,25 +100,35 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
|
|||||||
{
|
{
|
||||||
int uspech;
|
int uspech;
|
||||||
|
|
||||||
//prijem dat o velkosti suboru
|
//prijem dat o subore
|
||||||
char* cesta = calloc(VELKOST_CESTY, sizeof(char));
|
char* cesta = calloc(VELKOST_CESTY, sizeof(char));
|
||||||
uspech = wolfSSL_read(ssl, cesta, VELKOST_CESTY);
|
char* velkost_suboru = calloc(VELKOST_SUBOR, sizeof(char));
|
||||||
if(uspech <= 0)
|
|
||||||
|
uspech = 0;
|
||||||
|
while(uspech < VELKOST_CESTY)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nastala chyba pri prijati dat o subore\n");
|
uspech = wolfSSL_read(ssl, cesta, VELKOST_CESTY);
|
||||||
return -1;
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
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
|
||||||
char velkost_suboru[32];
|
uspech = 0;
|
||||||
uspech = wolfSSL_read(ssl, velkost_suboru, VELKOST_SUBOR);
|
while(uspech < VELKOST_SUBOR)
|
||||||
if(uspech <= 0)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nastala chyba pri prijati velkosti suboru\n");
|
uspech = wolfSSL_read(ssl, velkost_suboru, VELKOST_SUBOR);
|
||||||
return -1;
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nastala chyba pri prijati velkosti suboru\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
long velkost = atol(velkost_suboru);
|
|
||||||
|
int velkost = (int)atol(velkost_suboru);
|
||||||
if(velkost < 1)
|
if(velkost < 1)
|
||||||
{
|
{
|
||||||
printf("Nastala chyba pri prijati suboru\n");
|
printf("Nastala chyba pri prijati suboru\n");
|
||||||
@ -115,42 +140,46 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
|
|||||||
}
|
}
|
||||||
|
|
||||||
//prijem jednotlivych bajtov
|
//prijem jednotlivych bajtov
|
||||||
char* pole = malloc(velkost);
|
unsigned char* pole = calloc(velkost, sizeof(unsigned char));
|
||||||
char* pole_uk = pole;
|
uspech = 0;
|
||||||
for(int i = 0; i < velkost + 1; ++i)
|
while(uspech < velkost)
|
||||||
{
|
{
|
||||||
uspech = wolfSSL_read(ssl, pole_uk, velkost);
|
uspech = wolfSSL_read(ssl, (unsigned char*)pole, velkost);
|
||||||
if(uspech <= 0)
|
if(uspech <= 0)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nastala chyba pri prijati suboru.\n");
|
fprintf(stderr, "Nastala chyba pri prijatii suboru.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
pole_uk += 1;
|
|
||||||
}
|
}
|
||||||
printf("Subor bol uspesne prijaty.\n");
|
printf("Subor bol uspesne prijaty.\n");
|
||||||
|
|
||||||
//vypocet vlastneho kontrolneho suctu
|
//vypocet vlastneho kontrolneho suctu
|
||||||
byte* kontrolny_sucet;
|
byte* kontrolny_sucet;
|
||||||
int velkost_kontrolneho_suctu;
|
int velkost_kontrolneho_suctu;
|
||||||
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia->funkcia, cesta, &velkost_kontrolneho_suctu);
|
|
||||||
|
FILE *subor = fopen(cesta, "wb+");
|
||||||
|
int n = fwrite((unsigned char*)pole, 1, velkost, subor);
|
||||||
|
fclose(subor);
|
||||||
|
|
||||||
|
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, &velkost_kontrolneho_suctu);
|
||||||
|
|
||||||
//prijem hashu, ktory vypocital server
|
//prijem hashu, ktory vypocital server
|
||||||
char* prijaty_kontrolny_sucet = calloc(velkost_kontrolneho_suctu, sizeof(char));
|
char* prijaty_kontrolny_sucet = calloc(velkost_kontrolneho_suctu, sizeof(char));
|
||||||
uspech = wolfSSL_read(ssl, prijaty_kontrolny_sucet, velkost_kontrolneho_suctu);
|
|
||||||
if(uspech <= 0)
|
uspech = 0;
|
||||||
|
while(uspech != velkost_kontrolneho_suctu)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nastala chyba pri prijati kontrolneho suctu.\n");
|
uspech = wolfSSL_read(ssl, (char*)prijaty_kontrolny_sucet, velkost_kontrolneho_suctu);
|
||||||
return -1;
|
if(uspech <= 0)
|
||||||
|
{
|
||||||
|
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
|
||||||
for(int i = 0; i < velkost_kontrolneho_suctu; i++)
|
if(!strcmp((char*)prijaty_kontrolny_sucet, (char*)kontrolny_sucet))
|
||||||
{
|
|
||||||
kontrolny_sucet[i] = (char)kontrolny_sucet[i];
|
|
||||||
}
|
|
||||||
printf("%s\n", prijaty_kontrolny_sucet);
|
|
||||||
printf("%s\n", kontrolny_sucet);
|
|
||||||
if(!strcmp(prijaty_kontrolny_sucet, kontrolny_sucet))
|
|
||||||
{
|
{
|
||||||
printf("Subor prisiel v poriadku.\n");
|
printf("Subor prisiel v poriadku.\n");
|
||||||
}
|
}
|
||||||
@ -160,11 +189,15 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
|
|||||||
printf("Subor neprisiel v poriadku alebo neboli pouzite rovnake funkcie.\n");
|
printf("Subor neprisiel v poriadku alebo neboli pouzite rovnake funkcie.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//zapis nacitanych dat do suboru
|
char*data = calloc(100, sizeof(char));
|
||||||
FILE* subor = fopen(cesta, "w");
|
uspech = wolfSSL_read(ssl, data, 100);
|
||||||
fwrite(pole, 1, velkost, subor);
|
free(data);
|
||||||
fclose(subor);
|
|
||||||
|
free(cesta);
|
||||||
|
free(velkost_suboru);
|
||||||
|
free(kontrolny_sucet);
|
||||||
|
free(prijaty_kontrolny_sucet);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __KOMUNIKACIA_H__
|
#ifndef __KOMUNIKACIA_H__
|
||||||
@ -87,6 +87,7 @@ int cakat_na_komunikaciu(int cislo_portu);
|
|||||||
* @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 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
|
||||||
* @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);
|
||||||
@ -95,6 +96,7 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_
|
|||||||
* 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
|
||||||
* @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);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "kryptografia.h"
|
#include "kryptografia.h"
|
||||||
@ -44,8 +44,9 @@ void nastav_sifry(WOLFSSL_CTX* ctx, const char* sifry)
|
|||||||
wolfSSL_CTX_set_cipher_list(ctx, sifry);
|
wolfSSL_CTX_set_cipher_list(ctx, sifry);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nastav_funkciu(nastavenia_aplikacie* nastavenia, hashovacia_funkcia funkcia)
|
void nastav_funkciu(nastavenia_aplikacie* nastavenia, char* typ_vypoctu, hashovacia_funkcia funkcia)
|
||||||
{
|
{
|
||||||
|
strcpy(nastavenia->typ_vypoctu, typ_vypoctu);
|
||||||
nastavenia->funkcia = funkcia;
|
nastavenia->funkcia = funkcia;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +68,7 @@ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char
|
|||||||
|
|
||||||
//nacitanie certifikatu autority vo formate DER ulozeneho v subore certifikaty/autorita/autorita_rsa.der
|
//nacitanie certifikatu autority vo formate DER ulozeneho v subore certifikaty/autorita/autorita_rsa.der
|
||||||
printf("Nacitavanie certifikatu autority zo suboru.\n");
|
printf("Nacitavanie certifikatu autority zo suboru.\n");
|
||||||
FILE* subor = fopen("../certifikaty/autorita/autorita_rsa.der", "rb");
|
FILE* subor = fopen("../../certifikaty/autorita/autorita_rsa.der", "rb");
|
||||||
der_autorita_certifikat_velkost = fread(der_autorita_certifikat, 1, VELKOST_BUFFERA , subor);
|
der_autorita_certifikat_velkost = fread(der_autorita_certifikat, 1, VELKOST_BUFFERA , subor);
|
||||||
if(der_autorita_certifikat_velkost < 0)
|
if(der_autorita_certifikat_velkost < 0)
|
||||||
{
|
{
|
||||||
@ -79,7 +80,7 @@ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char
|
|||||||
|
|
||||||
//vytvorenie struktury RsaKey autority zo sukromneho kluca vo formate DER ulozeneho v subore certifikaty/autorita/autorita_kluc_rsa.der
|
//vytvorenie struktury RsaKey autority zo sukromneho kluca vo formate DER ulozeneho v subore certifikaty/autorita/autorita_kluc_rsa.der
|
||||||
printf("Nacitavanie sukromneho kluca autority zo suboru.\n");
|
printf("Nacitavanie sukromneho kluca autority zo suboru.\n");
|
||||||
subor = fopen("../certifikaty/autorita/autorita_kluc_rsa.der", "rb");
|
subor = fopen("../../certifikaty/autorita/autorita_kluc_rsa.der", "rb");
|
||||||
der_autorita_kluc_velkost = fread(der_autorita_kluc, 1, VELKOST_BUFFERA , subor);
|
der_autorita_kluc_velkost = fread(der_autorita_kluc, 1, VELKOST_BUFFERA , subor);
|
||||||
if(der_autorita_kluc_velkost < 0)
|
if(der_autorita_kluc_velkost < 0)
|
||||||
{
|
{
|
||||||
@ -134,7 +135,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("../../certifikaty/vygenerovany_kluc.key", "wb");
|
||||||
fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
|
fwrite(pem_kluc, 1, pem_kluc_velkost, subor);
|
||||||
fclose(subor);
|
fclose(subor);
|
||||||
|
|
||||||
@ -188,7 +189,7 @@ 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 klucu do suboru
|
||||||
subor = fopen("../certifikaty/vygenerovany_certifikat.pem", "wb");
|
subor = fopen("../../certifikaty/vygenerovany_certifikat.pem", "wb");
|
||||||
fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor);
|
fwrite(pem_certifikat, 1, pem_certifikat_velkost, subor);
|
||||||
fclose(subor);
|
fclose(subor);
|
||||||
|
|
||||||
@ -544,87 +545,119 @@ void zobraz_certifikat(WOLFSSL* ssl)
|
|||||||
X509_free(certifikat);
|
X509_free(certifikat);
|
||||||
}
|
}
|
||||||
|
|
||||||
byte* generovat_kontrolny_sucet_suboru(hashovacia_funkcia funkcia, const char* cesta, int* velkost)
|
byte* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int* velkost)
|
||||||
{
|
{
|
||||||
int pocet_bajtov;
|
int pocet_bajtov;
|
||||||
FILE* subor = fopen(cesta, "rb");
|
FILE* subor = fopen(cesta, "rb");
|
||||||
unsigned char data[1024];
|
unsigned char data[100000];
|
||||||
|
memset(data, 0, 100000);
|
||||||
byte* vysledok;
|
byte* vysledok;
|
||||||
if(funkcia == funkcia_SHA)
|
if(!strcmp(nastavenia->typ_vypoctu, "crc"))
|
||||||
{
|
{
|
||||||
*velkost = SHA_DIGEST_SIZE;
|
//crc32
|
||||||
vysledok = calloc(SHA_DIGEST_SIZE, sizeof(byte));
|
*velkost = 11;
|
||||||
Sha sha;
|
vysledok = calloc(11, sizeof(byte));
|
||||||
wc_InitSha(&sha);
|
fread((unsigned char*)data, 1, 100000, subor);
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
int i, j;
|
||||||
wc_ShaUpdate(&sha, data, pocet_bajtov);
|
unsigned int byte, crc, mask;
|
||||||
wc_ShaFinal(&sha, vysledok);
|
i = 0;
|
||||||
|
crc = 0xFFFFFFFF;
|
||||||
|
while (data[i] != 0)
|
||||||
|
{
|
||||||
|
byte = data[i];
|
||||||
|
crc = crc ^ byte;
|
||||||
|
for (j = 7; j >= 0; j--)
|
||||||
|
{
|
||||||
|
mask = -(crc & 1);
|
||||||
|
crc = (crc >> 1) ^ (0xEDB88320 & mask);
|
||||||
|
}
|
||||||
|
i = i + 1;
|
||||||
|
}
|
||||||
|
crc = crc ^ 0xFFFFFFFF;
|
||||||
|
sprintf(vysledok, "%u", crc);
|
||||||
}
|
}
|
||||||
else if(funkcia == funkcia_SHA224)
|
else if(!strcmp(nastavenia->typ_vypoctu, "hash"))
|
||||||
{
|
{
|
||||||
*velkost = SHA224_DIGEST_SIZE;
|
if(nastavenia->funkcia == funkcia_SHA)
|
||||||
vysledok = calloc(SHA224_DIGEST_SIZE, sizeof(byte));
|
{
|
||||||
Sha224 sha;
|
*velkost = SHA_DIGEST_SIZE;
|
||||||
wc_InitSha224(&sha);
|
vysledok = calloc(SHA_DIGEST_SIZE, sizeof(byte));
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
Sha sha;
|
||||||
wc_Sha224Update(&sha, data, pocet_bajtov);
|
wc_InitSha(&sha);
|
||||||
wc_Sha224Final(&sha, vysledok);
|
while ((pocet_bajtov = fread (data, 1, 100000, subor)) != 0)
|
||||||
}
|
wc_ShaUpdate(&sha, data, pocet_bajtov);
|
||||||
else if(funkcia == funkcia_SHA256)
|
wc_ShaFinal(&sha, vysledok);
|
||||||
{
|
}
|
||||||
*velkost = SHA256_DIGEST_SIZE;
|
else if(nastavenia->funkcia == funkcia_SHA224)
|
||||||
byte* vysledok = calloc(SHA256_DIGEST_SIZE, sizeof(byte));
|
{
|
||||||
Sha256 sha;
|
*velkost = SHA224_DIGEST_SIZE;
|
||||||
wc_InitSha256(&sha);
|
vysledok = calloc(SHA224_DIGEST_SIZE, sizeof(byte));
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
Sha224 sha;
|
||||||
wc_Sha256Update(&sha, data, pocet_bajtov);
|
wc_InitSha224(&sha);
|
||||||
wc_Sha256Final(&sha, vysledok);
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
}
|
wc_Sha224Update(&sha, data, pocet_bajtov);
|
||||||
else if(funkcia == funkcia_SHA384)
|
wc_Sha224Final(&sha, vysledok);
|
||||||
{
|
}
|
||||||
*velkost = SHA384_DIGEST_SIZE;
|
else if(nastavenia->funkcia == funkcia_SHA256)
|
||||||
vysledok = calloc(SHA384_DIGEST_SIZE, sizeof(byte));
|
{
|
||||||
Sha384 sha;
|
*velkost = SHA256_DIGEST_SIZE;
|
||||||
wc_InitSha384(&sha);
|
byte* vysledok = calloc(SHA256_DIGEST_SIZE, sizeof(byte));
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
Sha256 sha;
|
||||||
wc_Sha384Update(&sha, data, pocet_bajtov);
|
wc_InitSha256(&sha);
|
||||||
wc_Sha384Final(&sha, vysledok);
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
}
|
wc_Sha256Update(&sha, data, pocet_bajtov);
|
||||||
else if(funkcia == funkcia_SHA512)
|
wc_Sha256Final(&sha, vysledok);
|
||||||
{
|
}
|
||||||
*velkost = WC_SHA512_DIGEST_SIZE;
|
else if(nastavenia->funkcia == funkcia_SHA384)
|
||||||
vysledok = calloc(WC_SHA512_DIGEST_SIZE, sizeof(byte));
|
{
|
||||||
wc_Sha512 sha;
|
*velkost = SHA384_DIGEST_SIZE;
|
||||||
wc_InitSha512(&sha);
|
vysledok = calloc(SHA384_DIGEST_SIZE, sizeof(byte));
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
Sha384 sha;
|
||||||
wc_Sha512Update(&sha, data, pocet_bajtov);
|
wc_InitSha384(&sha);
|
||||||
wc_Sha512Final(&sha, vysledok);
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
}
|
wc_Sha384Update(&sha, data, pocet_bajtov);
|
||||||
else if(funkcia == funkcia_BLAKE2B)
|
wc_Sha384Final(&sha, vysledok);
|
||||||
{
|
}
|
||||||
*velkost = 64;
|
else if(nastavenia->funkcia == funkcia_SHA512)
|
||||||
vysledok = calloc(64, sizeof(byte));
|
{
|
||||||
Blake2b b2b;
|
*velkost = WC_SHA512_DIGEST_SIZE;
|
||||||
wc_InitBlake2b(&b2b, 64);
|
vysledok = calloc(WC_SHA512_DIGEST_SIZE, sizeof(byte));
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
wc_Sha512 sha;
|
||||||
wc_Blake2bUpdate(&b2b, data, pocet_bajtov);
|
wc_InitSha512(&sha);
|
||||||
wc_Blake2bFinal(&b2b, vysledok, 64);
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
}
|
wc_Sha512Update(&sha, data, pocet_bajtov);
|
||||||
else if(funkcia == funkcia_RIPEMD160)
|
wc_Sha512Final(&sha, vysledok);
|
||||||
{
|
}
|
||||||
*velkost = RIPEMD_DIGEST_SIZE;
|
else if(nastavenia->funkcia == funkcia_BLAKE2B)
|
||||||
vysledok = calloc(RIPEMD_DIGEST_SIZE, sizeof(byte));
|
{
|
||||||
RipeMd ripemd;
|
*velkost = 64;
|
||||||
wc_InitRipeMd(&ripemd);
|
vysledok = calloc(64, sizeof(byte));
|
||||||
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
Blake2b b2b;
|
||||||
wc_RipeMdUpdate(&ripemd, data, pocet_bajtov);
|
wc_InitBlake2b(&b2b, 64);
|
||||||
wc_RipeMdFinal(&ripemd, vysledok);
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
|
wc_Blake2bUpdate(&b2b, data, pocet_bajtov);
|
||||||
|
wc_Blake2bFinal(&b2b, vysledok, 64);
|
||||||
|
}
|
||||||
|
else if(nastavenia->funkcia == funkcia_RIPEMD160)
|
||||||
|
{
|
||||||
|
*velkost = RIPEMD_DIGEST_SIZE;
|
||||||
|
vysledok = calloc(RIPEMD_DIGEST_SIZE, sizeof(byte));
|
||||||
|
RipeMd ripemd;
|
||||||
|
wc_InitRipeMd(&ripemd);
|
||||||
|
while ((pocet_bajtov = fread (data, 1, 1024, subor)) != 0)
|
||||||
|
wc_RipeMdUpdate(&ripemd, data, pocet_bajtov);
|
||||||
|
wc_RipeMdFinal(&ripemd, vysledok);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Nepodarilo sa vybrat funkciu pre vypocet kontrolneho suctu.\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Nespravny nazov hashovacej funkcie.\n");
|
fprintf(stderr, "Nepodarilo sa vybrat funkciu pre vypocet kontrolneho suctu.\n");
|
||||||
exit(0);
|
|
||||||
}
|
}
|
||||||
|
fclose(subor);
|
||||||
return vysledok;
|
return vysledok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __KRYPTOGRAFIA_H__
|
#ifndef __KRYPTOGRAFIA_H__
|
||||||
@ -22,15 +22,19 @@
|
|||||||
#include <wolfssl/wolfcrypt/ripemd.h>
|
#include <wolfssl/wolfcrypt/ripemd.h>
|
||||||
#include <wolfssl/wolfcrypt/blake2.h>
|
#include <wolfssl/wolfcrypt/blake2.h>
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
#define VELKOST_BUFFERA 4096
|
#define VELKOST_BUFFERA 4096
|
||||||
|
|
||||||
typedef enum hashovacia_funkcia {
|
typedef enum hashovacia_funkcia {
|
||||||
funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512,
|
funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512,
|
||||||
funkcia_BLAKE2B, funkcia_RIPEMD160
|
funkcia_BLAKE2B, funkcia_RIPEMD160, ziadna
|
||||||
} hashovacia_funkcia;
|
} hashovacia_funkcia;
|
||||||
|
|
||||||
typedef struct nastavenia_aplikacie {
|
typedef struct nastavenia_aplikacie {
|
||||||
hashovacia_funkcia funkcia;
|
hashovacia_funkcia funkcia;
|
||||||
|
char typ_vypoctu[32];
|
||||||
} nastavenia_aplikacie;
|
} nastavenia_aplikacie;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -41,7 +45,7 @@ typedef struct nastavenia_aplikacie {
|
|||||||
* na zaklade nazvu funkcie uvedenom v prvom argumente
|
* na zaklade nazvu funkcie uvedenom v prvom argumente
|
||||||
* @vrati smernik na vygenerovany hash
|
* @vrati smernik na vygenerovany hash
|
||||||
*/
|
*/
|
||||||
byte* generovat_kontrolny_sucet_suboru(hashovacia_funkcia funkcia, const char* cesta, int* velkost);
|
byte* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int* velkost);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,
|
* generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,
|
||||||
@ -66,7 +70,7 @@ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char
|
|||||||
/**
|
/**
|
||||||
* generovat_rsa_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti
|
* generovat_rsa_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti
|
||||||
* @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 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)
|
||||||
*/
|
*/
|
||||||
@ -115,9 +119,10 @@ void nastav_sifry(WOLFSSL_CTX* ctx, const char* sifry);
|
|||||||
* nastav_funkciu: nastavi hashovaciu funkciu ktora bude pouzita pri vypocte kontrolneho suctu suboru
|
* nastav_funkciu: nastavi hashovaciu funkciu ktora bude pouzita pri vypocte kontrolneho suctu suboru
|
||||||
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient
|
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient
|
||||||
* @paramater hashovacia_funkcia funkcia : nazov hashovacej funkcie
|
* @paramater hashovacia_funkcia funkcia : nazov hashovacej funkcie
|
||||||
|
* @parameter char* typ_vypoctu : umoznuje vyber medzi "crc" a "hash" kontrolnym suctom
|
||||||
moznosti: funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160
|
moznosti: funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160
|
||||||
*/
|
*/
|
||||||
void nastav_funkciu(nastavenia_aplikacie* nastavenia, hashovacia_funkcia funkcia);
|
void nastav_funkciu(nastavenia_aplikacie* nastavenia, char* typ_vypoctu, hashovacia_funkcia funkcia);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nacitat_certifikaty: realizuje nacitanie certifikatov zo suborov do struktury WOLFSSL_CTX
|
* nacitat_certifikaty: realizuje nacitanie certifikatov zo suborov do struktury WOLFSSL_CTX
|
||||||
|
28
readme.txt
28
readme.txt
@ -2,8 +2,8 @@ Bakalarska praca
|
|||||||
Meno studenta: Tomas Lukac
|
Meno studenta: Tomas Lukac
|
||||||
Veduci BP: prof. Ing. Milos Drutarovsky CSc.
|
Veduci BP: prof. Ing. Milos Drutarovsky CSc.
|
||||||
Skola: KEMT FEI TUKE
|
Skola: KEMT FEI TUKE
|
||||||
Datum poslednej upravy: 6.4.2020
|
Datum poslednej upravy: 15.4.2020
|
||||||
Verzia: 0.1
|
Verzia: 0.2
|
||||||
----------------------------
|
----------------------------
|
||||||
Zoznam zdrojovych suborov
|
Zoznam zdrojovych suborov
|
||||||
certifikaty
|
certifikaty
|
||||||
@ -28,15 +28,21 @@ Zoznam zdrojovych suborov
|
|||||||
|__kryptografia.h
|
|__kryptografia.h
|
||||||
|__kryptografia.c
|
|__kryptografia.c
|
||||||
tcpip_kanal
|
tcpip_kanal
|
||||||
|__klient.c
|
klient
|
||||||
|__server.c
|
|__klient.c
|
||||||
|__Makefile
|
|__Makefile
|
||||||
|
server
|
||||||
|
|__server.c
|
||||||
|
|__Makefile
|
||||||
rs232_kanal
|
rs232_kanal
|
||||||
|__klient.c
|
klient
|
||||||
|__klient.txt
|
|__klient.c
|
||||||
|__server.c
|
|__Makefile
|
||||||
|__server.txt
|
|__klient.txt
|
||||||
|__Makefile
|
server
|
||||||
|
|__server.c
|
||||||
|
|__Makefile
|
||||||
|
|__server.txt
|
||||||
|
|
||||||
Opis aplikacie
|
Opis aplikacie
|
||||||
Realizuje zabezpecenu vymenu sprav medzi klientom a serverom a autentizaciu servera klientom vyuzitim kniznice WolfSSL. Ako prvu je
|
Realizuje zabezpecenu vymenu sprav medzi klientom a serverom a autentizaciu servera klientom vyuzitim kniznice WolfSSL. Ako prvu je
|
||||||
@ -98,7 +104,7 @@ Navod na prelozenie a spustenie (Linux)
|
|||||||
|
|
||||||
Navod na prelozenie a spustenie (Windows)
|
Navod na prelozenie a spustenie (Windows)
|
||||||
1. skopirovanie potrebnych dll z adresara /wolfssl/64bit_kniznice/ , resp. /wolfssl/32bit_kniznice/
|
1. skopirovanie potrebnych dll z adresara /wolfssl/64bit_kniznice/ , resp. /wolfssl/32bit_kniznice/
|
||||||
do podadresara tcpip_kanal, resp. rs232_kanal
|
do podadresara tcpip_kanal -> klient alebo server, resp. rs232_kanal -> klient alebo server
|
||||||
a) wolfssl.dll -> kniznica wolfssl
|
a) wolfssl.dll -> kniznica wolfssl
|
||||||
b) vcruntime140.dll -> visual c++ runtime
|
b) vcruntime140.dll -> visual c++ runtime
|
||||||
c) api-ms-win-crt-runtime-l1-1-0.dll
|
c) api-ms-win-crt-runtime-l1-1-0.dll
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
## Bakalarska praca ##
|
|
||||||
## Meno studenta: Tomas Lukac ##
|
|
||||||
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
|
||||||
## Skola: KEMT FEI TUKE ##
|
|
||||||
## Datum poslednej upravy: 6.4.2020 ##
|
|
||||||
##################################################
|
|
||||||
|
|
||||||
#prekladac
|
|
||||||
CC = gcc
|
|
||||||
|
|
||||||
#prepinace pre prekladac
|
|
||||||
CFLAGS = -Wcpp -Werror -I./../wolfssl/
|
|
||||||
LIB =
|
|
||||||
|
|
||||||
ifeq ($(OS), Windows_NT)
|
|
||||||
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
|
||||||
LIB += -L./../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32 -m64
|
|
||||||
endif
|
|
||||||
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
|
|
||||||
LIB += -L./../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32 -Os
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
UNAME_S := $(shell uname -s)
|
|
||||||
ifeq ($(UNAME_S), Linux)
|
|
||||||
LIB += -lwolfssl
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
all: klient server
|
|
||||||
|
|
||||||
klient: klient.o kryptografia.o komunikacia.o rs232.o
|
|
||||||
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o rs232.o $(LIB)
|
|
||||||
|
|
||||||
server: server.o kryptografia.o komunikacia.o rs232.o
|
|
||||||
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o rs232.o $(LIB)
|
|
||||||
|
|
||||||
klient.o: klient.c
|
|
||||||
$(CC) $(CFLAGS) -c klient.c $(LIB)
|
|
||||||
|
|
||||||
server.o: server.c
|
|
||||||
$(CC) $(CFLAGS) -c server.c $(LIB)
|
|
||||||
|
|
||||||
kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h
|
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/kryptografia.c $(LIB)
|
|
||||||
|
|
||||||
komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h
|
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB)
|
|
||||||
|
|
||||||
rs232.o: ../kniznica/rs232.c ../kniznica/rs232.h
|
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/rs232.c $(LIB)
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
|
|
||||||
clean-linux:
|
|
||||||
rm *.o -f klient server
|
|
||||||
|
|
||||||
clean-win:
|
|
||||||
del *.o klient.exe server.exe
|
|
Binary file not shown.
45
rs232_kanal/klient/Makefile
Normal file
45
rs232_kanal/klient/Makefile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
##################################################
|
||||||
|
## Bakalarska praca ##
|
||||||
|
## Meno studenta: Tomas Lukac ##
|
||||||
|
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||||
|
## Skola: KEMT FEI TUKE ##
|
||||||
|
## Datum poslednej upravy: 15.4.2020 ##
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
#prekladac
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
#prepinace pre prekladac
|
||||||
|
CFLAGS = -Wcpp -Werror -I./../../wolfssl/
|
||||||
|
SOURCES = $(wildcard ../../kniznica/*.c) \
|
||||||
|
$(wildcard *.c)
|
||||||
|
OBJECTS = $(SOURCES:.c=.o)
|
||||||
|
EXECUTABLE = klient
|
||||||
|
|
||||||
|
ifeq ($(OS), Windows_NT)
|
||||||
|
CLEAN += del *.o *.exe
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
||||||
|
ARCH += -m64
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
|
||||||
|
ARCH += -m32
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S), Linux)
|
||||||
|
LDFLAGS += -lwolfssl
|
||||||
|
CLEAN += rm *.o $(EXECUTABLE)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(EXECUTABLE)
|
||||||
|
|
||||||
|
$(EXECUTABLE): $(OBJECTS)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(CLEAN)
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -23,68 +23,102 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../kniznica/kryptografia.h"
|
#include "../../kniznica/kryptografia.h"
|
||||||
#include "../kniznica/komunikacia.h"
|
#include "../../kniznica/komunikacia.h"
|
||||||
#include "../kniznica/rs232.h"
|
#include "../../kniznica/rs232.h"
|
||||||
|
|
||||||
#define RSA_VELKOST 2048
|
#define RSA_VELKOST 2048
|
||||||
#define ECC_VELKOST 32
|
#define ECC_VELKOST 32
|
||||||
#define RSA_EXPONENT 65537
|
#define RSA_EXPONENT 65537
|
||||||
|
|
||||||
//cesty ku suborom
|
//cesty ku suborom
|
||||||
#define RSA_KLUC "../certifikaty/klient/klient_rsa.key"
|
#define RSA_KLUC "../../certifikaty/klient/klient_rsa.key"
|
||||||
#define RSA_CERTIFIKAT "../certifikaty/klient/klient_rsa.pem"
|
#define RSA_CERTIFIKAT "../../certifikaty/klient/klient_rsa.pem"
|
||||||
#define ECC_KLUC "../certifikaty/klient/klient_ecc.key"
|
#define ECC_KLUC "../../certifikaty/klient/klient_ecc.key"
|
||||||
#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 KOMUNIKACNY_SUBOR "klient.txt"
|
#define KOMUNIKACNY_SUBOR "klient.txt"
|
||||||
|
|
||||||
int rs232_prijat;
|
int rs232_prijat;
|
||||||
int cislo_rozhrania = 0;
|
int cislo_rozhrania = 0;
|
||||||
int prebieha_nacitanie = 0;
|
|
||||||
int aktualne_data = 0;
|
int aktualne_data = 0;
|
||||||
|
|
||||||
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
||||||
{
|
{
|
||||||
int uspech = 0;
|
int uspech = 0;
|
||||||
|
int prebieha_nacitanie = 0;
|
||||||
|
int prebieha_nacitanie_velkosti_spravy = 0;
|
||||||
|
unsigned char znak;
|
||||||
|
|
||||||
|
|
||||||
//ziskanie dat zo serioveho rozhrania
|
//ziskanie dat zo serioveho rozhrania
|
||||||
if(aktualne_data == 0)
|
if(aktualne_data == 0)
|
||||||
{
|
{
|
||||||
FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab");
|
//otvorenie suboru do ktoreho sa zapisuju prijate binarne data
|
||||||
|
//ktore sa nasledne nacitaju do buffera (buf) pre desifrovanie
|
||||||
|
FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab+");
|
||||||
|
|
||||||
|
//mnozstvo nacitanych dat
|
||||||
int nacitane_data = 0;
|
int nacitane_data = 0;
|
||||||
unsigned char znak;
|
//velkost spravy, ktora sa bude prijmat
|
||||||
|
int velkost_spravy = 0;
|
||||||
|
//urcuje kolko bajtov z informacie o velkosti spravy
|
||||||
|
//uz bolo prijatych z celkoveho poctu (4)
|
||||||
|
int velkost_spravy_bajt = 0;
|
||||||
|
int velkost_spravy_pocet_bajtov = 4;
|
||||||
|
|
||||||
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
||||||
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
||||||
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
||||||
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
||||||
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
||||||
|
int velkost_kontrolneho_vzoru = sizeof(zaciatok_spravy)/sizeof(zaciatok_spravy[0]);
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
|
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
|
||||||
if(uspech > 0)
|
if(uspech > 0)
|
||||||
{
|
{
|
||||||
if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2))
|
//ak nacitanie spravy este nezacalo, ale bol najdeny bajt, ktory je sucastou kontrolneho vzoru,
|
||||||
|
//ktory urcuje zaciatok spravy, posun sa v kontrolnom vzore o jednu poziciu a cakaj ci nebudu
|
||||||
|
//prichadzat dalsie bajty z tohto kontrolneho vzoru
|
||||||
|
if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) &&
|
||||||
|
(zaciatok_spravy_pozicia < velkost_kontrolneho_vzoru - 1))
|
||||||
{
|
{
|
||||||
zaciatok_spravy_pozicia++;
|
zaciatok_spravy_pozicia++;
|
||||||
}
|
}
|
||||||
else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia == 3))
|
//ak prebehlo nacitanie vsetkych bajtov, ktore su sucastou kontrolneho vzoru urcujuceho zaciatok spravy
|
||||||
|
//ocakavaj prichod bajtov, ktore budu niest informaciu o velkosti spravy
|
||||||
|
else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) &&
|
||||||
|
(zaciatok_spravy_pozicia == velkost_kontrolneho_vzoru - 1))
|
||||||
{
|
{
|
||||||
//ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka,
|
prebieha_nacitanie_velkosti_spravy = 1;
|
||||||
//ktora urcuje ze prebieha nacitavanie spravy
|
|
||||||
prebieha_nacitanie = 1;
|
|
||||||
zaciatok_spravy_pozicia = 0;
|
zaciatok_spravy_pozicia = 0;
|
||||||
//zaciatok_spravy_pozicia = 0;
|
|
||||||
}
|
}
|
||||||
else if((prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia <= 2)))
|
//pokracuj v nacitavani bajtov urcujucich velkost spravy, dokym nie su vsetky nacitane
|
||||||
|
//a po nacitani vsetkych bajtov moze zacat nacitanie spravy
|
||||||
|
else if(!prebieha_nacitanie && prebieha_nacitanie_velkosti_spravy)
|
||||||
|
{
|
||||||
|
velkost_spravy_bajt++;
|
||||||
|
if(velkost_spravy_bajt == velkost_spravy_pocet_bajtov)
|
||||||
|
{
|
||||||
|
prebieha_nacitanie = 1;
|
||||||
|
prebieha_nacitanie_velkosti_spravy = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ak prebieha nacitanie a bol najdeny bajt, ktory je sucastou kontrolneho vzoru, ktory urcuje koniec spravy,
|
||||||
|
//posun sa v kontrolnom vzore o jednu poziciu a cakaj ci nebudu prichadzat dalsie bajty z tohto kontrolneho vzoru
|
||||||
|
else if((prebieha_nacitanie && (znak == koniec_spravy[koniec_spravy_pozicia]) &&
|
||||||
|
(koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[koniec_spravy_pozicia]) &&
|
||||||
|
(koniec_spravy_pozicia < velkost_kontrolneho_vzoru - 1)))
|
||||||
{
|
{
|
||||||
koniec_spravy_pozicia++;
|
koniec_spravy_pozicia++;
|
||||||
prebieha_nacitanie = 0;
|
prebieha_nacitanie = 0;
|
||||||
}
|
}
|
||||||
else if(!prebieha_nacitanie && znak != koniec_spravy[0])
|
//v pripade ak zacalo nacitanie kontrolneho vzoru, ktory urcuje koniec spravy, ale nebol najdeny posledny znak z tohto vzoru
|
||||||
|
//nacitaj do suboru docasne nezapisane znaky, ktore su sucastou kontrolneho vzoru a zaroven nacitaj aktualny znak
|
||||||
|
else if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie && znak != koniec_spravy[koniec_spravy_pozicia])
|
||||||
{
|
{
|
||||||
for(int i = 0; i < koniec_spravy_pozicia; i++)
|
for(int i = 0; i < koniec_spravy_pozicia; i++)
|
||||||
{
|
{
|
||||||
@ -97,18 +131,19 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|||||||
koniec_spravy_pozicia = 0;
|
koniec_spravy_pozicia = 0;
|
||||||
prebieha_nacitanie = 1;
|
prebieha_nacitanie = 1;
|
||||||
}
|
}
|
||||||
else if(!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 3))
|
//ak prebehlo nacitanie vsetkych bajtov, ktore su sucastou kontrolneho vzoru urcujuceho koniec spravy
|
||||||
|
//ukonci nacitanie spravy
|
||||||
|
else if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie && (znak == koniec_spravy[0]) &&
|
||||||
|
(koniec_spravy_pozicia == 3))
|
||||||
{
|
{
|
||||||
//ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka,
|
|
||||||
//ktora urcuje ze prebieha nacitanie spravy
|
|
||||||
prebieha_nacitanie = 0;
|
prebieha_nacitanie = 0;
|
||||||
koniec_spravy_pozicia = 0;
|
koniec_spravy_pozicia = 0;
|
||||||
//koniec_spravy_pozicia = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//inak prebieha nacitanie, cize zapis aktualny znak (bajt) do suboru
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(prebieha_nacitanie)
|
if(prebieha_nacitanie && !prebieha_nacitanie_velkosti_spravy)
|
||||||
{
|
{
|
||||||
fwrite((char*)&znak, 1, uspech, f);
|
fwrite((char*)&znak, 1, uspech, f);
|
||||||
nacitane_data += uspech;
|
nacitane_data += uspech;
|
||||||
@ -120,24 +155,36 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|||||||
nacitane_data = 0;
|
nacitane_data = 0;
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
//nacitanie dat zo suboru do buffera
|
//nacitanie dat zo suboru do buffera pre desifrovanie
|
||||||
uspech = 0;
|
uspech = 0;
|
||||||
while(uspech <= 0)
|
while(uspech <= 0)
|
||||||
uspech = read(rs232_prijat, buf, sz);
|
uspech = read(rs232_prijat, buf, sz);
|
||||||
aktualne_data -= uspech;
|
aktualne_data -= uspech;
|
||||||
|
|
||||||
return uspech;
|
return uspech;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
||||||
{
|
{
|
||||||
int uspech = 0;
|
int uspech = 0;
|
||||||
|
|
||||||
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
||||||
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
||||||
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
||||||
|
|
||||||
|
//vytvorenie bajtov ktore budu niest informaciu o velkosti posielanej spravy
|
||||||
|
unsigned char* velkost_spravy = calloc(4, sizeof(unsigned char));
|
||||||
|
velkost_spravy[0] = (sz >> 24) & 0xFF;
|
||||||
|
velkost_spravy[1] = (sz >> 16) & 0xFF;
|
||||||
|
velkost_spravy[2] = (sz >> 8) & 0xFF;
|
||||||
|
velkost_spravy[3] = sz & 0xFF;
|
||||||
|
|
||||||
|
//odoslanie kontrolnych vzorov, bajtov s velkostou spravy a samotnych dat na seriove rozhranie
|
||||||
RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, sizeof(zaciatok_spravy));
|
RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, sizeof(zaciatok_spravy));
|
||||||
|
RS232_SendBuf(cislo_rozhrania, (unsigned char*)velkost_spravy, 4);
|
||||||
uspech = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, sz);
|
uspech = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, sz);
|
||||||
RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, sizeof(koniec_spravy));
|
RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, sizeof(koniec_spravy));
|
||||||
RS232_flushTX(cislo_rozhrania);
|
free(velkost_spravy);
|
||||||
|
|
||||||
return uspech;
|
return uspech;
|
||||||
}
|
}
|
||||||
@ -154,6 +201,7 @@ int main(int argc, char const *argv[])
|
|||||||
int nacitanie_zo_suboru = 0;
|
int nacitanie_zo_suboru = 0;
|
||||||
int generovanie_certifikatu = 0;
|
int generovanie_certifikatu = 0;
|
||||||
nastavenia_aplikacie nastavenia;
|
nastavenia_aplikacie nastavenia;
|
||||||
|
RS232_flushRXTX(cislo_rozhrania);
|
||||||
|
|
||||||
rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
|
rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
|
||||||
|
|
||||||
@ -212,14 +260,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);
|
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);
|
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);
|
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);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
|
||||||
|
|
||||||
@ -245,16 +293,18 @@ 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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
|
||||||
if(generovat_rsa_certifikat(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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
|
||||||
if(generovat_ecc_certifikat(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
|
||||||
{
|
{
|
||||||
@ -282,13 +332,13 @@ int main(int argc, char const *argv[])
|
|||||||
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");
|
||||||
//wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
|
||||||
|
|
||||||
|
//nastavenie vlastnych I/O funkcii
|
||||||
wolfSSL_SetIOSend(ctx, rs232_zapis);
|
wolfSSL_SetIOSend(ctx, rs232_zapis);
|
||||||
wolfSSL_SetIORecv(ctx, rs232_citanie);
|
wolfSSL_SetIORecv(ctx, rs232_citanie);
|
||||||
|
|
||||||
|
//pokus o vytvorenie novej wolfSSL relacie
|
||||||
if ((ssl = wolfSSL_new(ctx)) == NULL)
|
if ((ssl = wolfSSL_new(ctx)) == NULL)
|
||||||
{
|
{
|
||||||
printf("Nepodarilo sa vytvorit ssl relaciu\n");
|
printf("Nepodarilo sa vytvorit ssl relaciu\n");
|
||||||
@ -296,9 +346,11 @@ int main(int argc, char const *argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//priradenie file descriptora suboru ako I/O pre TLS spojenie
|
||||||
wolfSSL_set_fd(ssl, rs232_prijat);
|
wolfSSL_set_fd(ssl, rs232_prijat);
|
||||||
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
|
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
|
||||||
|
|
||||||
|
//pokus o inizicalizaciu TLS handshaku so serverom
|
||||||
uspech = wolfSSL_connect(ssl);
|
uspech = wolfSSL_connect(ssl);
|
||||||
if(uspech != SSL_SUCCESS)
|
if(uspech != SSL_SUCCESS)
|
||||||
{
|
{
|
||||||
@ -307,18 +359,21 @@ int main(int argc, char const *argv[])
|
|||||||
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
||||||
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
||||||
printf("Skontrolujte certifikaty.\n");
|
printf("Skontrolujte certifikaty.\n");
|
||||||
|
free(popis_chyby);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
zobraz_sifru(ssl);
|
zobraz_sifru(ssl);
|
||||||
zobraz_certifikat(ssl);
|
zobraz_certifikat(ssl);
|
||||||
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
|
nastav_funkciu(&nastavenia, "crc", ziadna);
|
||||||
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) return -1;
|
poslat_subor(ssl, ctx, subor, &nastavenia);
|
||||||
ukoncit_spojenie(ssl, ctx);
|
|
||||||
|
|
||||||
RS232_CloseComport(cislo_rozhrania);
|
|
||||||
|
|
||||||
|
//ukoncenie spojenia, vymazanie komunikacneho suboru
|
||||||
|
//a vycistenie serioveho buffera
|
||||||
|
ukoncit_spojenie(ssl, ctx);
|
||||||
|
RS232_flushRXTX(cislo_rozhrania);
|
||||||
|
RS232_CloseComport(cislo_rozhrania);
|
||||||
close(rs232_prijat);
|
close(rs232_prijat);
|
||||||
close(open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY));
|
fclose(fopen(KOMUNIKACNY_SUBOR, "wb"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
0
rs232_kanal/klient/klient.txt
Normal file
0
rs232_kanal/klient/klient.txt
Normal file
@ -3,14 +3,14 @@
|
|||||||
:: Meno studenta: Tomas Lukac ::
|
:: Meno studenta: Tomas Lukac ::
|
||||||
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
||||||
:: Skola: KEMT FEI TUKE ::
|
:: Skola: KEMT FEI TUKE ::
|
||||||
:: Datum poslednej upravy: 6.4.2020 ::
|
:: Datum poslednej upravy: 15.4.2020 ::
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
:: Program je mozne spustit s prepinacmi:
|
:: Program je mozne spustit s prepinacmi:
|
||||||
:: -port seriove_rozhranie
|
:: -port seriove_rozhranie
|
||||||
:: -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
|
||||||
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat (este nie je)
|
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat
|
||||||
|
|
||||||
::Priklady spustenia:
|
::Priklady spustenia:
|
||||||
klient -port 4 -n rsa -s nieco.txt
|
klient -port 4 -n rsa -s nieco.txt
|
Binary file not shown.
45
rs232_kanal/server/Makefile
Normal file
45
rs232_kanal/server/Makefile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
##################################################
|
||||||
|
## Bakalarska praca ##
|
||||||
|
## Meno studenta: Tomas Lukac ##
|
||||||
|
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||||
|
## Skola: KEMT FEI TUKE ##
|
||||||
|
## Datum poslednej upravy: 15.4.2020 ##
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
#prekladac
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
#prepinace pre prekladac
|
||||||
|
CFLAGS = -Wcpp -Werror -I./../../wolfssl/
|
||||||
|
SOURCES = $(wildcard ../../kniznica/*.c) \
|
||||||
|
$(wildcard *.c)
|
||||||
|
OBJECTS = $(SOURCES:.c=.o)
|
||||||
|
EXECUTABLE = server
|
||||||
|
|
||||||
|
ifeq ($(OS), Windows_NT)
|
||||||
|
CLEAN += del *.o *.exe
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
||||||
|
ARCH += -m64
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
|
||||||
|
ARCH += -m32
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S), Linux)
|
||||||
|
LDFLAGS += -lwolfssl
|
||||||
|
CLEAN += rm *.o $(EXECUTABLE)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(EXECUTABLE)
|
||||||
|
|
||||||
|
$(EXECUTABLE): $(OBJECTS)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(CLEAN)
|
@ -3,7 +3,7 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -23,93 +23,127 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../kniznica/kryptografia.h"
|
#include "../../kniznica/kryptografia.h"
|
||||||
#include "../kniznica/komunikacia.h"
|
#include "../../kniznica/komunikacia.h"
|
||||||
#include "../kniznica/rs232.h"
|
#include "../../kniznica/rs232.h"
|
||||||
|
|
||||||
#define RSA_VELKOST 2048
|
#define RSA_VELKOST 2048
|
||||||
#define ECC_VELKOST 32
|
#define ECC_VELKOST 32
|
||||||
#define RSA_EXPONENT 65537
|
#define RSA_EXPONENT 65537
|
||||||
|
|
||||||
//cesty ku suborom
|
//cesty ku suborom
|
||||||
#define RSA_KLUC "../certifikaty/server/server_rsa.key"
|
#define RSA_KLUC "../../certifikaty/server/server_rsa.key"
|
||||||
#define RSA_CERTIFIKAT "../certifikaty/server/server_rsa.pem"
|
#define RSA_CERTIFIKAT "../../certifikaty/server/server_rsa.pem"
|
||||||
#define ECC_KLUC "../certifikaty/server/server_ecc.key"
|
#define ECC_KLUC "../../certifikaty/server/server_ecc.key"
|
||||||
#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 KOMUNIKACNY_SUBOR "server.txt"
|
#define KOMUNIKACNY_SUBOR "server.txt"
|
||||||
|
|
||||||
int rs232_prijat;
|
int rs232_prijat;
|
||||||
int cislo_rozhrania = 0;
|
int cislo_rozhrania = 0;
|
||||||
int prebieha_nacitanie = 0;
|
|
||||||
int aktualne_data = 0;
|
int aktualne_data = 0;
|
||||||
|
|
||||||
|
|
||||||
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
||||||
{
|
{
|
||||||
int uspech = 0;
|
int uspech = 0;
|
||||||
|
int prebieha_nacitanie = 0;
|
||||||
|
int prebieha_nacitanie_velkosti_spravy = 0;
|
||||||
|
unsigned char znak;
|
||||||
|
|
||||||
|
|
||||||
//ziskanie dat zo serioveho rozhrania
|
//ziskanie dat zo serioveho rozhrania
|
||||||
if(aktualne_data == 0)
|
if(aktualne_data == 0)
|
||||||
{
|
{
|
||||||
FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab");
|
//otvorenie suboru do ktoreho sa zapisuju prijate binarne data
|
||||||
|
//ktore sa nasledne nacitaju do buffera (buf) pre desifrovanie
|
||||||
|
FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab+");
|
||||||
|
|
||||||
|
//mnozstvo nacitanych dat
|
||||||
int nacitane_data = 0;
|
int nacitane_data = 0;
|
||||||
unsigned char znak;
|
//velkost spravy, ktora sa bude prijmat
|
||||||
|
int velkost_spravy = 0;
|
||||||
|
//urcuje kolko bajtov z informacie o velkosti spravy
|
||||||
|
//uz bolo prijatych z celkoveho poctu (4)
|
||||||
|
int velkost_spravy_bajt = 0;
|
||||||
|
int velkost_spravy_pocet_bajtov = 4;
|
||||||
|
|
||||||
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
||||||
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
||||||
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
||||||
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
||||||
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
|
||||||
|
int velkost_kontrolneho_vzoru = sizeof(zaciatok_spravy)/sizeof(zaciatok_spravy[0]);
|
||||||
|
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
|
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
|
||||||
if(uspech > 0)
|
if(uspech > 0)
|
||||||
{
|
{
|
||||||
if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2))
|
//ak nacitanie spravy este nezacalo, ale bol najdeny bajt, ktory je sucastou kontrolneho vzoru,
|
||||||
|
//ktory urcuje zaciatok spravy, posun sa v kontrolnom vzore o jednu poziciu a cakaj ci nebudu
|
||||||
|
//prichadzat dalsie bajty z tohto kontrolneho vzoru
|
||||||
|
if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) &&
|
||||||
|
(zaciatok_spravy_pozicia < velkost_kontrolneho_vzoru - 1))
|
||||||
{
|
{
|
||||||
zaciatok_spravy_pozicia++;
|
zaciatok_spravy_pozicia++;
|
||||||
}
|
}
|
||||||
else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia == 3))
|
//ak prebehlo nacitanie vsetkych bajtov, ktore su sucastou kontrolneho vzoru urcujuceho zaciatok spravy
|
||||||
|
//ocakavaj prichod bajtov, ktore budu niest informaciu o velkosti spravy
|
||||||
|
else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) &&
|
||||||
|
(zaciatok_spravy_pozicia == velkost_kontrolneho_vzoru - 1))
|
||||||
{
|
{
|
||||||
//ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka,
|
prebieha_nacitanie_velkosti_spravy = 1;
|
||||||
//ktora urcuje ze prebieha nacitavanie spravy
|
|
||||||
prebieha_nacitanie = 1;
|
|
||||||
zaciatok_spravy_pozicia = 0;
|
zaciatok_spravy_pozicia = 0;
|
||||||
//zaciatok_spravy_pozicia = 0;
|
|
||||||
}
|
}
|
||||||
else if((prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia <= 2)))
|
//pokracuj v nacitavani bajtov urcujucich velkost spravy, dokym nie su vsetky nacitane
|
||||||
|
//a po nacitani vsetkych bajtov moze zacat nacitanie spravy
|
||||||
|
else if(!prebieha_nacitanie && prebieha_nacitanie_velkosti_spravy)
|
||||||
|
{
|
||||||
|
velkost_spravy_bajt++;
|
||||||
|
if(velkost_spravy_bajt == velkost_spravy_pocet_bajtov)
|
||||||
|
{
|
||||||
|
prebieha_nacitanie = 1;
|
||||||
|
prebieha_nacitanie_velkosti_spravy = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//ak prebieha nacitanie a bol najdeny bajt, ktory je sucastou kontrolneho vzoru, ktory urcuje koniec spravy,
|
||||||
|
//posun sa v kontrolnom vzore o jednu poziciu a cakaj ci nebudu prichadzat dalsie bajty z tohto kontrolneho vzoru
|
||||||
|
else if((prebieha_nacitanie && (znak == koniec_spravy[koniec_spravy_pozicia]) &&
|
||||||
|
(koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[koniec_spravy_pozicia]) &&
|
||||||
|
(koniec_spravy_pozicia < velkost_kontrolneho_vzoru - 1)))
|
||||||
{
|
{
|
||||||
koniec_spravy_pozicia++;
|
koniec_spravy_pozicia++;
|
||||||
prebieha_nacitanie = 0;
|
prebieha_nacitanie = 0;
|
||||||
}
|
}
|
||||||
else if(!prebieha_nacitanie && znak != koniec_spravy[0])
|
//v pripade ak zacalo nacitanie kontrolneho vzoru, ktory urcuje koniec spravy, ale nebol najdeny posledny znak z tohto vzoru
|
||||||
|
//nacitaj do suboru docasne nezapisane znaky, ktore su sucastou kontrolneho vzoru a zaroven nacitaj aktualny znak
|
||||||
|
else if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie && znak != koniec_spravy[koniec_spravy_pozicia])
|
||||||
{
|
{
|
||||||
for(int i = 0; i < koniec_spravy_pozicia; i++)
|
for(int i = 0; i < koniec_spravy_pozicia; i++)
|
||||||
{
|
{
|
||||||
fwrite((char*)&koniec_spravy[i], 1, uspech, f);
|
fwrite((char*)&koniec_spravy[i], 1, uspech, f);
|
||||||
nacitane_data += uspech;
|
nacitane_data += uspech;
|
||||||
}
|
}
|
||||||
|
|
||||||
fwrite((char*)&znak, 1, uspech, f);
|
fwrite((char*)&znak, 1, uspech, f);
|
||||||
nacitane_data += uspech;
|
nacitane_data += uspech;
|
||||||
|
|
||||||
koniec_spravy_pozicia = 0;
|
koniec_spravy_pozicia = 0;
|
||||||
prebieha_nacitanie = 1;
|
prebieha_nacitanie = 1;
|
||||||
}
|
}
|
||||||
else if(!prebieha_nacitanie && (znak == koniec_spravy[0]) && (koniec_spravy_pozicia == 3))
|
//ak prebehlo nacitanie vsetkych bajtov, ktore su sucastou kontrolneho vzoru urcujuceho koniec spravy
|
||||||
|
//ukonci nacitanie spravy
|
||||||
|
else if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie && (znak == koniec_spravy[0]) &&
|
||||||
|
(koniec_spravy_pozicia == 3))
|
||||||
{
|
{
|
||||||
//ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka,
|
|
||||||
//ktora urcuje ze prebieha nacitanie spravy
|
|
||||||
prebieha_nacitanie = 0;
|
prebieha_nacitanie = 0;
|
||||||
koniec_spravy_pozicia = 0;
|
koniec_spravy_pozicia = 0;
|
||||||
//koniec_spravy_pozicia = 0;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
//inak prebieha nacitanie, cize zapis aktualny znak (bajt) do suboru
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(prebieha_nacitanie)
|
if(prebieha_nacitanie && !prebieha_nacitanie_velkosti_spravy)
|
||||||
{
|
{
|
||||||
fwrite((char*)&znak, 1, uspech, f);
|
fwrite((char*)&znak, 1, uspech, f);
|
||||||
nacitane_data += uspech;
|
nacitane_data += uspech;
|
||||||
@ -118,14 +152,15 @@ int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
aktualne_data = nacitane_data;
|
aktualne_data = nacitane_data;
|
||||||
nacitane_data = 0;
|
nacitane_data = 0;
|
||||||
fclose(f);
|
fclose(f);
|
||||||
}
|
}
|
||||||
//nacitanie dat zo suboru do buffera
|
//nacitanie dat zo suboru do buffera pre desifrovanie
|
||||||
uspech = 0;
|
uspech = 0;
|
||||||
while(uspech <= 0)
|
while(uspech <= 0)
|
||||||
uspech = read(rs232_prijat, buf, sz);
|
uspech = read(rs232_prijat, buf, sz);
|
||||||
aktualne_data -= uspech;
|
aktualne_data -= uspech;
|
||||||
|
|
||||||
return uspech;
|
return uspech;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,13 +171,23 @@ int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
|
|||||||
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
|
||||||
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
|
||||||
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
|
||||||
|
|
||||||
|
//vytvorenie bajtov ktore budu niest informaciu o velkosti posielanej spravy
|
||||||
|
unsigned char* velkost_spravy = calloc(4, sizeof(unsigned char));
|
||||||
|
velkost_spravy[0] = (sz >> 24) & 0xFF;
|
||||||
|
velkost_spravy[1] = (sz >> 16) & 0xFF;
|
||||||
|
velkost_spravy[2] = (sz >> 8) & 0xFF;
|
||||||
|
velkost_spravy[3] = sz & 0xFF;
|
||||||
|
|
||||||
|
//odoslanie kontrolnych vzorov, bajtov s velkostou spravy a samotnych dat na seriove rozhranie
|
||||||
|
RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, sizeof(zaciatok_spravy));
|
||||||
|
RS232_SendBuf(cislo_rozhrania, (unsigned char*)velkost_spravy, 4);
|
||||||
|
uspech = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, sz);
|
||||||
|
RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, sizeof(koniec_spravy));
|
||||||
|
free(velkost_spravy);
|
||||||
|
|
||||||
RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, 4);
|
|
||||||
uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, sz);
|
|
||||||
RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, 4);
|
|
||||||
RS232_flushTX(cislo_rozhrania);
|
|
||||||
return uspech;
|
return uspech;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char const *argv[])
|
int main(int argc, char const *argv[])
|
||||||
{
|
{
|
||||||
@ -154,6 +199,7 @@ int main(int argc, char const *argv[])
|
|||||||
int generovanie_certifikatu = 0;
|
int generovanie_certifikatu = 0;
|
||||||
int nacitanie_zo_suboru = 0;
|
int nacitanie_zo_suboru = 0;
|
||||||
nastavenia_aplikacie nastavenia;
|
nastavenia_aplikacie nastavenia;
|
||||||
|
RS232_flushRXTX(cislo_rozhrania);
|
||||||
|
|
||||||
rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
|
rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
|
||||||
|
|
||||||
@ -199,15 +245,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);
|
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);
|
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);
|
||||||
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);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
|
||||||
|
|
||||||
@ -233,14 +278,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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
|
||||||
if(generovat_rsa_certifikat(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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
|
||||||
if(generovat_ecc_certifikat(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;
|
||||||
}
|
}
|
||||||
@ -266,44 +311,46 @@ int main(int argc, char const *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
|
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
|
||||||
//wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
|
||||||
|
//nastavenie vlastnych I/O funkcii
|
||||||
wolfSSL_SetIOSend(ctx, rs232_zapis);
|
wolfSSL_SetIOSend(ctx, rs232_zapis);
|
||||||
wolfSSL_SetIORecv(ctx, rs232_citanie);
|
wolfSSL_SetIORecv(ctx, rs232_citanie);
|
||||||
|
|
||||||
while(1)
|
//pokus o vytvorenie novej wolfSSL relacie
|
||||||
|
if ((ssl = wolfSSL_new(ctx)) == NULL)
|
||||||
{
|
{
|
||||||
printf("------------\n");
|
printf("Nepodarilo sa vytvorit ssl relaciu\n");
|
||||||
if ((ssl = wolfSSL_new(ctx)) == NULL)
|
wolfSSL_CTX_free(ctx);
|
||||||
{
|
return -1;
|
||||||
printf("Nepodarilo sa vytvorit ssl relaciu\n");
|
|
||||||
wolfSSL_CTX_free(ctx);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
wolfSSL_set_fd(ssl, rs232_prijat);
|
|
||||||
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
|
|
||||||
|
|
||||||
uspech = wolfSSL_accept(ssl);
|
|
||||||
if(uspech != SSL_SUCCESS)
|
|
||||||
{
|
|
||||||
char* popis_chyby = calloc(100, sizeof(char));
|
|
||||||
int chyba = wolfSSL_get_error(ssl, 0);
|
|
||||||
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
|
||||||
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
|
||||||
printf("Skontrolujte certifikaty.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
zobraz_sifru(ssl);
|
|
||||||
zobraz_certifikat(ssl);
|
|
||||||
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
|
|
||||||
prijat_subor(ssl, ctx, &nastavenia);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//priradenie file descriptora suboru ako I/O pre TLS spojenie
|
||||||
|
wolfSSL_set_fd(ssl, rs232_prijat);
|
||||||
|
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
|
||||||
|
|
||||||
|
//cakanie na inicializaciu TLS handshaku klientom
|
||||||
|
uspech = wolfSSL_accept(ssl);
|
||||||
|
if(uspech != SSL_SUCCESS)
|
||||||
|
{
|
||||||
|
char* popis_chyby = calloc(100, sizeof(char));
|
||||||
|
int chyba = wolfSSL_get_error(ssl, 0);
|
||||||
|
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
||||||
|
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
||||||
|
printf("Skontrolujte certifikaty.\n");
|
||||||
|
free(popis_chyby);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
zobraz_sifru(ssl);
|
||||||
|
zobraz_certifikat(ssl);
|
||||||
|
nastav_funkciu(&nastavenia, "crc", ziadna);
|
||||||
|
prijat_subor(ssl, ctx, &nastavenia);
|
||||||
|
|
||||||
|
//ukoncenie spojenia, vymazanie komunikacneho suboru
|
||||||
|
//a vycistenie serioveho buffera
|
||||||
|
ukoncit_spojenie(ssl, ctx);
|
||||||
|
RS232_flushRXTX(cislo_rozhrania);
|
||||||
RS232_CloseComport(cislo_rozhrania);
|
RS232_CloseComport(cislo_rozhrania);
|
||||||
|
|
||||||
close(rs232_prijat);
|
close(rs232_prijat);
|
||||||
close(open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY));
|
fclose(fopen(KOMUNIKACNY_SUBOR, "wb"));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
0
rs232_kanal/server/server.txt
Normal file
0
rs232_kanal/server/server.txt
Normal file
@ -3,17 +3,12 @@
|
|||||||
:: Meno studenta: Tomas Lukac ::
|
:: Meno studenta: Tomas Lukac ::
|
||||||
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
||||||
:: Skola: KEMT FEI TUKE ::
|
:: Skola: KEMT FEI TUKE ::
|
||||||
:: Datum poslednej upravy: 6.4.2020 ::
|
:: Datum poslednej upravy: 15.4.2020 ::
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
:: Program server je mozne spustit s prepinacmi:
|
:: Program je mozne spustit s prepinacmi:
|
||||||
:: -port seriove_rozhranie
|
:: -port seriove_rozhranie
|
||||||
:: -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
|
||||||
|
|
||||||
del klient.txt
|
|
||||||
del server.txt
|
|
||||||
type nul >klient.txt
|
|
||||||
type nul >server.txt
|
|
||||||
|
|
||||||
server -port 5 -n rsa
|
server -port 5 -n rsa
|
@ -1,59 +0,0 @@
|
|||||||
##################################################
|
|
||||||
## Bakalarska praca ##
|
|
||||||
## Meno studenta: Tomas Lukac ##
|
|
||||||
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
|
||||||
## Skola: KEMT FEI TUKE ##
|
|
||||||
## Datum poslednej upravy: 6.4.2020 ##
|
|
||||||
##################################################
|
|
||||||
|
|
||||||
#prekladac
|
|
||||||
CC = gcc
|
|
||||||
|
|
||||||
#prepinace pre prekladac
|
|
||||||
CFLAGS = -Wcpp -Werror -I./../wolfssl/
|
|
||||||
LIB =
|
|
||||||
|
|
||||||
ifeq ($(OS), Windows_NT)
|
|
||||||
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
|
||||||
LIB += -L./../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32 -m64
|
|
||||||
endif
|
|
||||||
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
|
|
||||||
LIB += -L./../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32 -Os
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
UNAME_S := $(shell uname -s)
|
|
||||||
ifeq ($(UNAME_S), Linux)
|
|
||||||
LIB += -lwolfssl
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
all: klient server
|
|
||||||
|
|
||||||
klient: klient.o kryptografia.o komunikacia.o rs232.o
|
|
||||||
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o rs232.o $(LIB)
|
|
||||||
|
|
||||||
server: server.o kryptografia.o komunikacia.o rs232.o
|
|
||||||
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o rs232.o $(LIB)
|
|
||||||
|
|
||||||
klient.o: klient.c
|
|
||||||
$(CC) $(CFLAGS) -c klient.c $(LIB)
|
|
||||||
|
|
||||||
server.o: server.c
|
|
||||||
$(CC) $(CFLAGS) -c server.c $(LIB)
|
|
||||||
|
|
||||||
kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h
|
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/kryptografia.c $(LIB)
|
|
||||||
|
|
||||||
komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h
|
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB)
|
|
||||||
|
|
||||||
rs232.o: ../kniznica/rs232.c ../kniznica/rs232.h
|
|
||||||
$(CC) $(CFLAGS) -c ../kniznica/rs232.c $(LIB)
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
|
|
||||||
clean-linux:
|
|
||||||
rm *.o -f klient server
|
|
||||||
|
|
||||||
clean-win:
|
|
||||||
del *.o klient.exe server.exe
|
|
45
tcpip_kanal/klient/Makefile
Normal file
45
tcpip_kanal/klient/Makefile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
##################################################
|
||||||
|
## Bakalarska praca ##
|
||||||
|
## Meno studenta: Tomas Lukac ##
|
||||||
|
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||||
|
## Skola: KEMT FEI TUKE ##
|
||||||
|
## Datum poslednej upravy: 15.4.2020 ##
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
#prekladac
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
#prepinace pre prekladac
|
||||||
|
CFLAGS = -Wcpp -Werror -I./../../wolfssl/
|
||||||
|
SOURCES = $(wildcard ../../kniznica/*.c) \
|
||||||
|
$(wildcard *.c)
|
||||||
|
OBJECTS = $(SOURCES:.c=.o)
|
||||||
|
EXECUTABLE = klient
|
||||||
|
|
||||||
|
ifeq ($(OS), Windows_NT)
|
||||||
|
CLEAN += del *.o *.exe
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
||||||
|
ARCH += -m64
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
|
||||||
|
ARCH += -m32
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S), Linux)
|
||||||
|
LDFLAGS += -lwolfssl
|
||||||
|
CLEAN += rm *.o $(EXECUTABLE)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(EXECUTABLE)
|
||||||
|
|
||||||
|
$(EXECUTABLE): $(OBJECTS)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(CLEAN)
|
@ -3,11 +3,11 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "../kniznica/kryptografia.h"
|
#include "../../kniznica/kryptografia.h"
|
||||||
#include "../kniznica/komunikacia.h"
|
#include "../../kniznica/komunikacia.h"
|
||||||
|
|
||||||
#include <wolfssl/ssl.h>
|
#include <wolfssl/ssl.h>
|
||||||
|
|
||||||
@ -16,12 +16,12 @@
|
|||||||
#define RSA_EXPONENT 65537
|
#define RSA_EXPONENT 65537
|
||||||
|
|
||||||
//cesty ku suborom
|
//cesty ku suborom
|
||||||
#define RSA_KLUC "../certifikaty/klient/klient_rsa.key"
|
#define RSA_KLUC "../../certifikaty/klient/klient_rsa.key"
|
||||||
#define RSA_CERTIFIKAT "../certifikaty/klient/klient_rsa.pem"
|
#define RSA_CERTIFIKAT "../../certifikaty/klient/klient_rsa.pem"
|
||||||
#define ECC_KLUC "../certifikaty/klient/klient_ecc.key"
|
#define ECC_KLUC "../../certifikaty/klient/klient_ecc.key"
|
||||||
#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"
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
@ -112,12 +112,12 @@ 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);
|
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);
|
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
|
||||||
@ -136,14 +136,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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita_rsa.pem", NULL);
|
||||||
if(generovat_rsa_certifikat(RSA_VELKOST, RSA_EXPONENT, CTC_SHA256wRSA, "SR", "Kosice", "local.dev", "klient@klient.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);
|
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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
|
||||||
if(generovat_ecc_certifikat(ECC_VELKOST, ECC_SECP256R1, CTC_SHAwECDSA, "SR", "Kosice", "local.dev", "klient@klient.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);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
|
||||||
@ -179,15 +179,20 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
//umoznuje vybrat sifry ktore sa budu nachadzat v sifrovacom subore
|
//umoznuje vybrat sifry ktore sa budu nachadzat v sifrovacom subore
|
||||||
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
|
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
|
||||||
|
|
||||||
cislo_soketu = pripojit_na_server(ip_adresa, cislo_portu, 10);
|
//pokus o inicializaciu TCP/IP prenosoveho kanala
|
||||||
|
cislo_soketu = pripojit_na_server(ip_adresa, cislo_portu, 500);
|
||||||
|
|
||||||
if(!cislo_soketu) return -1;
|
if(!cislo_soketu) return -1;
|
||||||
|
|
||||||
|
//pokus o vytvorenie novej wolfSSL relacie
|
||||||
ssl = wolfSSL_new(ctx);
|
ssl = wolfSSL_new(ctx);
|
||||||
wolfSSL_set_fd(ssl, cislo_soketu);
|
|
||||||
int uspech = wolfSSL_connect(ssl);
|
|
||||||
|
|
||||||
|
//priradenie file descriptora soketu ako I/O pre TLS spojenie
|
||||||
|
wolfSSL_set_fd(ssl, cislo_soketu);
|
||||||
|
|
||||||
|
//pokus o inizicalizaciu TLS handshaku so serverom
|
||||||
|
uspech = wolfSSL_connect(ssl);
|
||||||
if(uspech != SSL_SUCCESS)
|
if(uspech != SSL_SUCCESS)
|
||||||
{
|
{
|
||||||
char* popis_chyby = calloc(100, sizeof(char));
|
char* popis_chyby = calloc(100, sizeof(char));
|
||||||
@ -195,11 +200,12 @@ int main(int argc, char** argv)
|
|||||||
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
||||||
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
||||||
printf("Skontrolujte certifikaty.\n");
|
printf("Skontrolujte certifikaty.\n");
|
||||||
|
free(popis_chyby);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
zobraz_sifru(ssl);
|
zobraz_sifru(ssl);
|
||||||
zobraz_certifikat(ssl);
|
zobraz_certifikat(ssl);
|
||||||
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
|
nastav_funkciu(&nastavenia, "crc", ziadna);
|
||||||
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) return -1;
|
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) return -1;
|
||||||
ukoncit_spojenie(ssl, ctx);
|
ukoncit_spojenie(ssl, ctx);
|
||||||
}
|
}
|
1
tcpip_kanal/klient/nieco.txt
Normal file
1
tcpip_kanal/klient/nieco.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
janooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
|
@ -3,7 +3,7 @@
|
|||||||
:: Meno studenta: Tomas Lukac ::
|
:: Meno studenta: Tomas Lukac ::
|
||||||
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
||||||
:: Skola: KEMT FEI TUKE ::
|
:: Skola: KEMT FEI TUKE ::
|
||||||
:: Datum poslednej upravy: 6.4.2020 ::
|
:: Datum poslednej upravy: 15.4.2020 ::
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
:: Program je mozne spustit s prepinacmi:
|
:: Program je mozne spustit s prepinacmi:
|
||||||
@ -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
|
klient -ip 127.0.0.1 -port 8080 -g rsa -s nieco.txt
|
45
tcpip_kanal/server/Makefile
Normal file
45
tcpip_kanal/server/Makefile
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
##################################################
|
||||||
|
## Bakalarska praca ##
|
||||||
|
## Meno studenta: Tomas Lukac ##
|
||||||
|
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||||
|
## Skola: KEMT FEI TUKE ##
|
||||||
|
## Datum poslednej upravy: 15.4.2020 ##
|
||||||
|
##################################################
|
||||||
|
|
||||||
|
#prekladac
|
||||||
|
CC = gcc
|
||||||
|
|
||||||
|
#prepinace pre prekladac
|
||||||
|
CFLAGS = -Wcpp -Werror -I./../../wolfssl/
|
||||||
|
SOURCES = $(wildcard ../../kniznica/*.c) \
|
||||||
|
$(wildcard *.c)
|
||||||
|
OBJECTS = $(SOURCES:.c=.o)
|
||||||
|
EXECUTABLE = server
|
||||||
|
|
||||||
|
ifeq ($(OS), Windows_NT)
|
||||||
|
CLEAN += del *.o *.exe
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
|
||||||
|
ARCH += -m64
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
|
||||||
|
ARCH += -m32
|
||||||
|
CFLAGS += $(ARCH)
|
||||||
|
LDFLAGS += -L./../../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S), Linux)
|
||||||
|
LDFLAGS += -lwolfssl
|
||||||
|
CLEAN += rm *.o $(EXECUTABLE)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
all: $(EXECUTABLE)
|
||||||
|
|
||||||
|
$(EXECUTABLE): $(OBJECTS)
|
||||||
|
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
$(CLEAN)
|
1
tcpip_kanal/server/nieco.txt
Normal file
1
tcpip_kanal/server/nieco.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
janooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
|
@ -3,11 +3,11 @@
|
|||||||
// Meno studenta: Tomas Lukac //
|
// Meno studenta: Tomas Lukac //
|
||||||
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
||||||
// Skola: KEMT FEI TUKE //
|
// Skola: KEMT FEI TUKE //
|
||||||
// Datum poslednej upravy: 6.4.2020 //
|
// Datum poslednej upravy: 15.4.2020 //
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "../kniznica/kryptografia.h"
|
#include "../../kniznica/kryptografia.h"
|
||||||
#include "../kniznica/komunikacia.h"
|
#include "../../kniznica/komunikacia.h"
|
||||||
|
|
||||||
#include <wolfssl/ssl.h>
|
#include <wolfssl/ssl.h>
|
||||||
|
|
||||||
@ -16,12 +16,12 @@
|
|||||||
#define RSA_EXPONENT 65537
|
#define RSA_EXPONENT 65537
|
||||||
|
|
||||||
//cesty ku suborom
|
//cesty ku suborom
|
||||||
#define RSA_KLUC "../certifikaty/server/server_rsa.key"
|
#define RSA_KLUC "../../certifikaty/server/server_rsa.key"
|
||||||
#define RSA_CERTIFIKAT "../certifikaty/server/server_rsa.pem"
|
#define RSA_CERTIFIKAT "../../certifikaty/server/server_rsa.pem"
|
||||||
#define ECC_KLUC "../certifikaty/server/server_ecc.key"
|
#define ECC_KLUC "../../certifikaty/server/server_ecc.key"
|
||||||
#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"
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -82,7 +82,7 @@ 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);
|
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);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ int main(int argc, char **argv)
|
|||||||
else if(!strcmp(argv[i+1], "ecc"))
|
else if(!strcmp(argv[i+1], "ecc"))
|
||||||
{
|
{
|
||||||
printf("jo\n");
|
printf("jo\n");
|
||||||
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita/autorita_ecc.pem", NULL);
|
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);
|
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
|
||||||
|
|
||||||
@ -116,14 +116,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/autorita_rsa.pem", NULL);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_rsa.pem", NULL);
|
||||||
if(generovat_rsa_certifikat(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);
|
wolfSSL_CTX_load_verify_locations(ctx, "../../certifikaty/autorita/autorita_ecc.pem", NULL);
|
||||||
if(generovat_ecc_certifikat(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;
|
||||||
}
|
}
|
||||||
@ -150,33 +150,38 @@ int main(int argc, char **argv)
|
|||||||
//umoznuje vybrat sifry ktore sa budu nachadzat v sifrovacom subore
|
//umoznuje vybrat sifry ktore sa budu nachadzat v sifrovacom subore
|
||||||
//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
|
||||||
cislo_soketu = cakat_na_komunikaciu(cislo_portu);
|
cislo_soketu = cakat_na_komunikaciu(cislo_portu);
|
||||||
|
|
||||||
while(1)
|
struct sockaddr_in adresa;
|
||||||
|
WOLFSSL* ssl;
|
||||||
|
int velkost = sizeof(adresa);
|
||||||
|
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));
|
||||||
|
|
||||||
|
//pokus o vytvorenie novej wolfSSL relacie
|
||||||
|
ssl = wolfSSL_new(ctx);
|
||||||
|
|
||||||
|
//priradenie file descriptora soketu ako I/O pre TLS spojenie
|
||||||
|
wolfSSL_set_fd(ssl, cislo_soketu_klienta);
|
||||||
|
|
||||||
|
//cakanie na inicializaciu TLS handshaku klientom
|
||||||
|
int uspech;
|
||||||
|
if(wolfSSL_accept(ssl) != SSL_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("------------\n");
|
char* popis_chyby = calloc(100, sizeof(char));
|
||||||
struct sockaddr_in adresa;
|
int chyba = wolfSSL_get_error(ssl, 0);
|
||||||
WOLFSSL* ssl;
|
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
||||||
int velkost = sizeof(adresa);
|
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
||||||
int cislo_soketu_klienta = accept(cislo_soketu, (struct sockaddr*)&adresa, &velkost);
|
printf("Skontrolujte certifikaty.\n");
|
||||||
printf("Spojenie [%s:%d]\n", inet_ntoa(adresa.sin_addr), ntohs(adresa.sin_port));
|
free(popis_chyby);
|
||||||
ssl = wolfSSL_new(ctx);
|
return -1;
|
||||||
wolfSSL_set_fd(ssl, cislo_soketu_klienta);
|
|
||||||
int uspech;
|
|
||||||
if(wolfSSL_accept(ssl) != SSL_SUCCESS)
|
|
||||||
{
|
|
||||||
char* popis_chyby = calloc(100, sizeof(char));
|
|
||||||
int chyba = wolfSSL_get_error(ssl, 0);
|
|
||||||
wolfSSL_ERR_error_string(chyba, popis_chyby);
|
|
||||||
fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
|
|
||||||
printf("Skontrolujte certifikaty.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
zobraz_sifru(ssl);
|
|
||||||
zobraz_certifikat(ssl);
|
|
||||||
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
|
|
||||||
prijat_subor(ssl, ctx, &nastavenia);
|
|
||||||
}
|
}
|
||||||
|
zobraz_sifru(ssl);
|
||||||
|
zobraz_certifikat(ssl);
|
||||||
|
nastav_funkciu(&nastavenia, "crc", ziadna);
|
||||||
|
if(prijat_subor(ssl, ctx, &nastavenia) == -1) return -1;
|
||||||
|
ukoncit_spojenie(ssl, ctx);
|
||||||
}
|
}
|
||||||
ukoncit_soket(cislo_soketu);
|
ukoncit_soket(cislo_soketu);
|
||||||
return 0;
|
return 0;
|
@ -3,7 +3,7 @@
|
|||||||
:: Meno studenta: Tomas Lukac ::
|
:: Meno studenta: Tomas Lukac ::
|
||||||
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
|
||||||
:: Skola: KEMT FEI TUKE ::
|
:: Skola: KEMT FEI TUKE ::
|
||||||
:: Datum poslednej upravy: 6.4.2020 ::
|
:: Datum poslednej upravy: 15.4.2020 ::
|
||||||
::::::::::::::::::::::::::::::::::::::::::::::::::
|
::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
:: Program server je mozne spustit s prepinacmi:
|
:: Program server je mozne spustit s prepinacmi:
|
||||||
@ -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 -g rsa
|
||||||
::server -port 8080 -g ecc
|
::server -port 8080 -g ecc
|
Loading…
Reference in New Issue
Block a user