This commit is contained in:
tom_win 2020-04-07 22:11:21 +02:00
parent e532cee113
commit dcc301c745
188 changed files with 741 additions and 366 deletions

View File

@ -1,18 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIC9DCCAl2gAwIBAgIPOFnW4ztFVHh112J1efiUMA0GCSqGSIb3DQEBCwUAMHMx
CzAJBgNVBAYTAlNLMQowCAYDVQQIDAEtMQ8wDQYDVQQHDAZLb3NpY2UxETAPBgNV
BAoMCEF1dG9yaXRhMRIwEAYDVQQDDAlsb2NhbC5kZXYxIDAeBgkqhkiG9w0BCQEW
EWF1dG9yaXRhQHR1a2UuY29tMCIYDzIwMjAwMzE4MTIzMDM3WhgPMjAyNTAzMTgx
MjMwMzdaMHcxCzAJBgNVBAYTAlNSMQowCAYDVQQIDAEtMQ8wDQYDVQQHDAZLb3Np
Y2UxCjAIBgNVBAoMAS0xCjAIBgNVBAsMAS0xEjAQBgNVBAMMCWxvY2FsLmRldjEf
MB0GCSqGSIb3DQEJARYQa2xpZW50QGtsaWVudC5zazCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBANhd9y+QBegPHmVd5/CJmhz4dJjNEqppJkOgxkxK98so
aJa/9DJ5vfBuYS4ghovuCB29kvbMcOcnZK+qE50YVzSRQzoeBOo7vOTzukSdm5Uh
Ja43FDAkUtEt4Z3cGpCMIjaRz+mFKmAyN7EiGeoAeOre1GNc6oqwYDNKQKfshG9Y
HUmO8AenFLTcLCRurwMSsXLTr8OyiLy2ZTuszn7pwisKSEiZFIdGwxSPZdKi5tOF
FxryCaKVD/Hn+NMWTaoX2gBED/4JggftY6YplQMvZyNu1Fz/YCFjq+9sEIfV2595
E+9MuO/0q9k5/9xDlDt5S+PjSd38N1IaxShdxTBU3AECAwEAATANBgkqhkiG9w0B
AQsFAAOBgQB+YyoHZPpNX3Adu4YeKyyoGV7Bjw3vZwZS3qNCioecGOtO1w7KIsQc
idDf1mCY2PUVC7mrEENtbENK8TAFNYRkv3NOM0UD/KcmJpyo7UdTNZXNyvwlIXrf
2mQz1lE5/jXuDdZdCz5SvslB0vj65NiTOjjWt83KsLkpg9sKudkJrA==
-----END CERTIFICATE-----

View File

@ -1,27 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA2F33L5AF6A8eZV3n8ImaHPh0mM0SqmkmQ6DGTEr3yyholr/0
Mnm98G5hLiCGi+4IHb2S9sxw5ydkr6oTnRhXNJFDOh4E6ju85PO6RJ2blSElrjcU
MCRS0S3hndwakIwiNpHP6YUqYDI3sSIZ6gB46t7UY1zqirBgM0pAp+yEb1gdSY7w
B6cUtNwsJG6vAxKxctOvw7KIvLZlO6zOfunCKwpISJkUh0bDFI9l0qLm04UXGvIJ
opUP8ef40xZNqhfaAEQP/gmCB+1jpimVAy9nI27UXP9gIWOr72wQh9Xbn3kT70y4
7/Sr2Tn/3EOUO3lL4+NJ3fw3UhrFKF3FMFTcAQIDAQABAoIBABISdy0P2I5zhNRu
rYrX03mL/yEsL9zv/3Qyn52LvXrIm0PMMLdul8DXV2Kk8NgLP75MMVRP6zZDghNy
H0VF3TLU10qpazutVa/B89L7Xx1rsVwF2bfTsN8r9+ZZlhZwvgLU1wroRovWZfRz
prp246Kqjg7mmeiPptlh4FimVsF98U0Iz132z9KTxFufJ5wcTcGvz+Z+p5lVIeBY
hCdYWWLXXT3mjXVQjFGF13NuY2+CT2AL2EzrwN0/+tcytJMUh/ThBxU2PwPyMnZz
fTVddcJt5Ipg4m3LQfVZZX+XpckpEI8lkbsvOC86Y9Iu5FJmPd43X4qAnXgWLzgp
Cm9GVGECgYEA89vpdqNGYbRQR6TrlZ2kYCMyCMj1Op47jtDpW6zE11iDjszE2VWD
XwkWE55hj0tp073kCnJzPM1Y8CslVhDGzygx5wiNRupKE9vRSkYxwsXaJpF0SfYc
ZiaPvL+6MeRtLMZ0Fkk5HbjpwcTtJP7f2oQH/owxd/sWOGS/kWY5hcUCgYEA4yOo
Ewfde3jZY0OUiERq9OadLpaKI2ADJvkyKxZmWzGFUVJ/PVoTYPR1EQurXi1kLXXI
rDA5H+Lz27R+9gTT8K6u7Faanlhp3P65xPIuCiJ78Nh6TnG5NRt7A2P5XY6UGahT
Zzj5UQc4P796DAgB6CPYCCsn0Gxz+u4R3/gW3Q0CgYBIaNBWDf1kHaqI24uojXq1
oT3GJgXLNhjxO09PjWmVmA7YZC0/a4jqu0P251yItBfka8o+3+Uf9Mmn5ufbOngO
Ix1OQNfSatc8NlVa/KTh9OXl9eLV42JjYqfjn/qlvfI9DWCDDZMMJFAk3VidV6EY
vYOyLeayfbgHXsMTZYtHEQKBgQCw+LkdisVATJpjwuXZfiUvhvb0s4oRod8S4Jn8
BEnfx6euAu7saGAs7IrBqyvsBsXEvb6KmlAHzhZeGjXJjV1sa04TCi8SLKTe8QDg
uCiy8MdMkf5JXEYHYM/phl1mTY6KpyHEjRmDznI/CPsYoKyLqFHLm4Q72iRLYG5A
6NU3iQKBgByzyily3RuiAhC5+fsiZafqpTx7+9Tc6CZnuS0HlGH6WJ9b7fgXWKD9
d252qQyaHGzHAtaF2tjzTwEbI3WIJmFU1y+XOXPDdue32saNNhXd6xF7FD1RK4az
T3hOyo14S4RPvpJp6KITPBLD6kUUQS8r/gcGXLWBDudsTFH1UgJy
-----END RSA PRIVATE KEY-----

View File

@ -3,21 +3,14 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#include "komunikacia.h"
#include "kryptografia.h"
#include "rs232.h"
hashovacia_funkcia h_funkcia;
int rs232_rozhranie;
void nastav_funkciu(hashovacia_funkcia funkcia)
{
h_funkcia = funkcia;
}
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta, nastavenia_aplikacie *nastavenia)
{
int uspech;
@ -73,7 +66,7 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
//generovanie a poslanie kontrolneho suctu serveru pre kontrolu
byte* kontrolny_sucet;
int velkost_kontrolneho_suctu;
kontrolny_sucet = generovat_kontrolny_sucet_suboru(h_funkcia, cesta, &velkost_kontrolneho_suctu);
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia->funkcia, cesta, &velkost_kontrolneho_suctu);
for(int i = 0; i < velkost_kontrolneho_suctu; i++)
{
kontrolny_sucet[i] = (char)kontrolny_sucet[i];
@ -88,7 +81,7 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
}
}
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia)
{
int uspech;
@ -139,7 +132,7 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
//vypocet vlastneho kontrolneho suctu
byte* kontrolny_sucet;
int velkost_kontrolneho_suctu;
kontrolny_sucet = generovat_kontrolny_sucet_suboru(h_funkcia, cesta, &velkost_kontrolneho_suctu);
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia->funkcia, cesta, &velkost_kontrolneho_suctu);
//prijem hashu, ktory vypocital server
char* prijaty_kontrolny_sucet = calloc(velkost_kontrolneho_suctu, sizeof(char));
@ -202,7 +195,11 @@ int pripojit_na_server(char *ip_adresa, int cislo_portu, int pocet_sekund)
uspech = connect(cislo_soketu, (struct sockaddr*)&adresa, sizeof(adresa));
if(uspech < 0)
{
if(errno == EINPROGRESS)
#if defined(_WIN32)
if(errno == WSAEINPROGRESS )
#else
if(errno == EINPROGRESS )
#endif
{
fprintf(stderr, "Nebolo mozne okamzite vytvorit spojenie\n");
do
@ -212,7 +209,11 @@ int pripojit_na_server(char *ip_adresa, int cislo_portu, int pocet_sekund)
FD_ZERO(&sada_soketov);
FD_SET(cislo_soketu, &sada_soketov);
uspech = select(cislo_soketu + 1, NULL, &sada_soketov, NULL, &casovy_interval);
#if defined(_WIN32)
if (uspech < 0 && errno != WSAEINTR)
#else
if (uspech < 0 && errno != EINTR)
#endif
{
fprintf(stderr, "Nastala chyba pri pokuse o vytvorenie spojenia\nCislo chyby: %d\nPopis: %s\n", errno, strerror(errno));
ukoncit_soket(cislo_soketu);
@ -287,15 +288,5 @@ int cakat_na_komunikaciu(int cislo_portu)
return cislo_soketu;
}
int rs232_otvorit_rozhranie(int cislo_rozhrania, int rychlost, const char* rezim, int riadenie_toku_dat)
{
int uspech;
rs232_rozhranie = cislo_rozhrania;
uspech = RS232_OpenComport(cislo_rozhrania, rychlost, rezim, riadenie_toku_dat);
if(uspech == 1)
{
fprintf(stderr, "Nebolo mozne otvorit seriove rozhranie\n");
return -1;
}
}

View File

@ -3,7 +3,7 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#ifndef __KOMUNIKACIA_H__
@ -17,7 +17,6 @@
#include "kryptografia.h"
#include "rs232.h"
#define VELKOST_CESTY 64 //velkost retazca, kt. uklada lokaciu suboru
#define VELKOST_SUBOR 32 //velkost retazca, kt. uklada velkost prenasaneho suboru
@ -31,8 +30,6 @@
#include <ws2tcpip.h>
#define ukoncit_soket closesocket
#define socklen_t int
#define EINPROGRESS WSAEINPROGRESS
#define EINTR WSAEINTR
//hovori visual c prekladacu aby nalinkoval ws2_32 kniznicu
//ak pouzivame minqw pragma sa ignoruje a musime ju zadat pri kompilaci manualne : -lws2_32
@ -79,9 +76,7 @@ int cakat_na_komunikaciu(int cislo_portu);
// RS232 KOMUNIKACNY KANAL //
/////////////////////////////
int rs232_otvorit_rozhranie(int cislo_rozhrania, int rychlost, const char* rezim, int riadenie_toku_dat);
//..
//////////////////////
// PRACA SO SUBORMI //
@ -94,7 +89,7 @@ int rs232_otvorit_rozhranie(int cislo_rozhrania, int rychlost, const char* rezim
* @parameter char* cesta: ukazuje na retazec, ktory reprezentuje cestu k suboru
* @vrati int : operacia bola uspesna(0), neuspesna(-1)
*/
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta);
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta, nastavenia_aplikacie* nastavenia);
/**
* prijat_subor: realizuje prijem suboru
@ -102,14 +97,6 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta);
* @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu
* @vrati int : operacia bola uspesna(0), neuspesna(-1)
*/
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx);
/**
* nastav_funkciu: nastavi hashovaciu funkciu ktora bude pouzita pri vypocte kontrolneho suctu suboru
* @paramater hashovacia_funkcia funkcia : nazov hashovacej funkcie
moznosti: funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160
*/
void nastav_funkciu(hashovacia_funkcia funkcia);
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia);
#endif

View File

@ -3,10 +3,12 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#include "kryptografia.h"
#include <wolfssl/user_settings.h>
WOLFSSL_CTX* nastavit_ctx_klient()
{
@ -42,6 +44,11 @@ void nastav_sifry(WOLFSSL_CTX* ctx, const char* sifry)
wolfSSL_CTX_set_cipher_list(ctx, sifry);
}
void nastav_funkciu(nastavenia_aplikacie* nastavenia, hashovacia_funkcia funkcia)
{
nastavenia->funkcia = funkcia;
}
void zobraz_sifru(WOLFSSL* ssl)
{
printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl));

View File

@ -3,7 +3,7 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#ifndef __KRYPTOGRAFIA_H__
@ -27,7 +27,11 @@
typedef enum hashovacia_funkcia {
funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512,
funkcia_BLAKE2B, funkcia_RIPEMD160
}hashovacia_funkcia;
} hashovacia_funkcia;
typedef struct nastavenia_aplikacie {
hashovacia_funkcia funkcia;
} nastavenia_aplikacie;
/**
* generovat_hash: realizuje vypocet kontrolneho suctu zo suboru, ktoreho lokacia je predana v argumente
@ -106,6 +110,15 @@ void zobraz_sifru(WOLFSSL* ssl);
*/
void nastav_sifry(WOLFSSL_CTX* ctx, const char* sifry);
/**
* nastav_funkciu: nastavi hashovaciu funkciu ktora bude pouzita pri vypocte kontrolneho suctu suboru
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie: server alebo klient
* @paramater hashovacia_funkcia funkcia : nazov hashovacej funkcie
moznosti: funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160
*/
void nastav_funkciu(nastavenia_aplikacie* nastavenia, hashovacia_funkcia funkcia);
/**
* nacitat_certifikaty: realizuje nacitanie certifikatov zo suborov do struktury WOLFSSL_CTX
* @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu

View File

@ -2,18 +2,22 @@ Bakalarska praca
Meno studenta: Tomas Lukac
Veduci BP: prof. Ing. Milos Drutarovsky CSc.
Skola: KEMT FEI TUKE
Datum poslednej upravy: 12.3.2020
Datum poslednej upravy: 6.4.2020
Verzia: 0.1
----------------------------
Zoznam zdrojovych suborov
certifikaty
autorita
|__autorita_ecc.pem
|__autorita_ecc.key
|__autorita_rsa.pem
|__autorita_rsa.key
server
|__server_ecc.pem
|__server_ecc.key
|__server_rsa.pem
|__server_rsa.key
klient
|__klient_ecc.pem
|__klient_ecc.key
|__klient_rsa.pem
@ -23,28 +27,29 @@ Zoznam zdrojovych suborov
|__komunikacia.c
|__kryptografia.h
|__kryptografia.c
|__vstup.h
|__vstup.c
tcpip_kanal
|__klient.c
|__server.c
|__Makefile
rs232_kanal
|__klient.c
|__klient.txt
|__server.c
|__server.txt
|__Makefile
Opis aplikacie
Realizuje zabezpecenu vymenu sprav medzi klientom a serverom a autentizaciu servera klientom vyuzitim kniznice WolfSSL. Ako prvu je
potrebne spustit aplikaciu na strane servera s prepinacom port s hodnotou, ktora urcuje ake bude cislo portu, na ktorom bude server
cakar na prichadzajucu komunikaciu. Dalsim potrebnym prepinacom je bud -n (nacitanie certifikatov z adresaru /certifikaty) alebo
-g (vygenerovanie a podpis certifikatov pomocou certifikatu a kluca autority, ktore sa nachadzaju taktiez v adresari /certifikaty).
Sukromne kluce a certifikaty su ulozene vo formate Privacy-Enhanced Mail (PEM). Nasledne je potrebne spustit aplikaciu na strane
klienta, ktora okrem predchadzajucich parametrov vyzaduje parameter pre ip adresu: -ip adresa. Po vytvoreni zabezpeceneho prenosoveho
kanalu sa klient pokusi odoslat subor, ktoreho lokacia mu bola predana pri spusteni pomocou parametru -s subor. Pred samotnym poslanim
klient najprv vyhotovi kontrolny sucet suboru, ktory odosle po zabezpecenom kanali serveru. Ten po prijati suboru overi ci sa zhoduje
prijaty kontrolny sucet s jeho, ktory vyhotovil po prijati suboru. Ak pri prijati suboru nenastala chyba a kontrolne sucty sa zhoduju
server oznami ze prijem bol uspesny a dalej caka na komunikaciu. Klientsky program po odoslani suboru ukonci svoju cinnost.
cakat na prichadzajucu komunikaciu, v pripade rs232 kanala je potrebne uviest cislo serioveho rozhrania (hodnoty: https://www.teuniz.net/RS-232/).
Dalsim potrebnym prepinacom je bud -n (nacitanie certifikatov z adresaru /certifikaty) alebo -g (vygenerovanie a podpis certifikatov
pomocou certifikatu a kluca autority, ktore sa nachadzaju taktiez v adresari /certifikaty).Sukromne kluce a certifikaty su ulozene vo formate DER.
Nasledne je potrebne spustit aplikaciu na strane klienta, ktora pri pouziti kanalu TCP_IP okrem predchadzajucich parametrov vyzaduje parameter
pre ip adresu: -ip adresa. Po vytvoreni zabezpeceneho prenosoveho kanalu sa klient pokusi odoslat subor, ktoreho lokacia mu bola predana pri
spusteni pomocou parametru -s subor. Pred samotnym poslanim klient najprv vyhotovi kontrolny sucet suboru, ktory odosle po zabezpecenom kanali
serveru. Ten po prijati suboru overi ci sa zhoduje prijaty kontrolny sucet s jeho, ktory vyhotovil po prijati suboru. Ak pri prijati suboru
nenastala chyba a kontrolne sucty sa zhoduju server oznami ze prijem bol uspesny a dalej caka na komunikaciu.
Klientsky program po odoslani suboru ukonci svoju cinnost.
Generovanie certifikatov RSA (OpenSSL)
openssl genrsa -out autorita_rsa.key 2048
@ -80,27 +85,34 @@ Navod na prelozenie a spustenie (Linux)
sudo make install
2. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
make all
3. spustenie
3. spustenie (prenosovy kanal TCP/IP)
./server -port port -n rsa|ecc
./server -port port -g rsa|ecc
./klient -ip 127.0.0.1 -port port -n rsa|ecc -s subor
./klient -ip 127.0.0.1 -port port -g rsa|ecc -s subor
4. spustenie (prenosovy kanal RS232)
./server -port seriove_rozhranie -n rsa|ecc
./server -port seriove_rozhranie -g rsa|ecc
./klient -port seriove_rozhranie -n rsa|ecc -s subor
./klient -port seriove_rozhranie -g rsa|ecc -s subor
Navod na prelozenie a spustenie (Windows)
1. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
mingw32-make all
2. spustenie
1. skopirovanie potrebnych dll z adresara /wolfssl/64bit_kniznice/ , resp. /wolfssl/32bit_kniznice/
do podadresara tcpip_kanal, resp. rs232_kanal
a) wolfssl.dll -> kniznica wolfssl
b) vcruntime140.dll -> visual c++ runtime
c) api-ms-win-crt-runtime-l1-1-0.dll
2. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
make all
3. spustenie (prenosovy kanal TCP/IP)
server -port port -n rsa|ecc
server -port port -g rsa|ecc
klient -ip 127.0.0.1 -port port -n rsa|ecc -s subor
klient -ip 127.0.0.1 -port port -g rsa|ecc -s subor
Zoznam DLL suborov potrebnych pre spustenie (Windows)
1. vcruntime140.dll
2. wolfssl.dll
3. ws2_32.dll
Poznamka:
pre preklad na 64bit architekturach je nutne premennovat subory s koncovkami *_64.dll na nazvy DLLiek uvedenych vyssie
a povodne DLLka premenovat na ine nazvy, najlepsie *_32.dll
4. spustenie (prenosovy kanal RS232)
server -port seriove_rozhranie -n rsa|ecc
server -port seriove_rozhranie -g rsa|ecc
klient -port seriove_rozhranie -n rsa|ecc -s subor
klient -port seriove_rozhranie -g rsa|ecc -s subor

View File

@ -2,28 +2,27 @@
## Meno studenta: Tomas Lukac ##
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
## Skola: KEMT FEI TUKE ##
## Datum poslednej upravy: 12.3.2020 ##
## Datum poslednej upravy: 6.4.2020 ##
##################################################
#prekladac
CC = gcc
#prepinace pre prekladac
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/
LIB = -L. -lwolfssl
CFLAGS = -Wcpp -Werror -I./../wolfssl/
LIB =
ifeq ($(OS), Windows_NT)
LIB += -lws2_32
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
LIB += -m64
LIB += -L./../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32 -m64
endif
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
LIB += -Os
LIB += -L./../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32 -Os
endif
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Linux)
LIB +=
LIB += -lwolfssl
endif
endif

View File

@ -3,7 +3,7 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#include <stdio.h>
@ -17,7 +17,8 @@
#include <Windows.h>
#include <io.h>
#include <fcntl.h>
#define O_NOCTTY 0
#define O_NOCTTY 0x8000
#define O_NDELAY 0x4000
#else
#include <unistd.h>
#endif
@ -26,55 +27,249 @@
#include "../kniznica/komunikacia.h"
#include "../kniznica/rs232.h"
int rs232_poslat;
#define RSA_VELKOST 2048
#define ECC_VELKOST 32
#define RSA_EXPONENT 65537
//cesty ku suborom
#define RSA_KLUC "../certifikaty/klient/klient_rsa.key"
#define RSA_CERTIFIKAT "../certifikaty/klient/klient_rsa.pem"
#define ECC_KLUC "../certifikaty/klient/klient_ecc.key"
#define ECC_CERTIFIKAT "../certifikaty/klient/klient_ecc.pem"
#define VYGENEROVANY_KLUC "../certifikaty/klient/vygenerovany_kluc.key"
#define VYGENEROVANY_CERTIFIKAT "../certifikaty/klient/vygenerovany_certifikat.pem"
#define KOMUNIKACNY_SUBOR "klient.txt"
int rs232_prijat;
int cislo_rozhrania = 4;
int aktualne_data = 0;
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
(void)ssl;
(void)ctx;
int uspech = 0;
while(uspech <= 0)
//ziskanie dat zo serioveho rozhrania
if(aktualne_data == 0)
{
uspech = (int)read(rs232_prijat, buf, (size_t)sz);
FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab");
int nacitane_data = 0;
int prebieha_nacitanie = 0;
unsigned char znak;
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
while(1)
{
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
if(uspech > 0)
{
if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2))
{
zaciatok_spravy_pozicia++;
}
else if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia > 2))
{
//ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka,
//ktora urcuje ze prebieha nacitavanie spravy
prebieha_nacitanie = 1;
zaciatok_spravy_pozicia = 0;
}
else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia <= 2))
{
koniec_spravy_pozicia++;
}
else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia > 2))
{
//ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka,
//ktora urcuje ze prebieha nacitanie spravy
prebieha_nacitanie = 0;
break;
}
else
{
if(prebieha_nacitanie)
{
fwrite((char*)&znak, 1, uspech, f);
nacitane_data += uspech;
}
}
}
}
printf("Nacital som %d dat\n", nacitane_data);
aktualne_data = nacitane_data;
fclose(f);
}
//nacitanie dat zo suboru do buffera
uspech = 0;
while(uspech <= 0)
uspech = read(rs232_prijat, buf, sz);
aktualne_data -= uspech;
return uspech;
}
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
(void)ssl;
(void)ctx;
int uspech = 0;
uspech = (int) write(rs232_poslat, buf, (size_t)sz);
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, sizeof(zaciatok_spravy));
uspech = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)buf, (size_t)sz);
RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, sizeof(koniec_spravy));
printf("Odoslal som %d %d\n", uspech, sz);
return uspech;
}
int main(int argc, char const *argv[])
{
char rezim[]={'8','N','1', 0};
int cislo_rozhrania = 4;
int rychlost = 9600;
WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL;
char* subor = NULL;
int zadane_rozhranie = 0;
int uvedeny_subor = 0;
int nacitanie_zo_suboru = 0;
int generovanie_certifikatu = 0;
nastavenia_aplikacie nastavenia;
rs232_poslat = open("server.txt", O_WRONLY | O_NOCTTY);
rs232_prijat = open("klient.txt", O_RDONLY | O_NOCTTY);
rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
int uspech;
/* uspech = rs232_otvorit_rozhranie(cislo_rozhrania, rychlost, rezim, 0);
if(uspech == -1)
{
return -1;
}*/
if((ctx = nastavit_ctx_klient()) == NULL)
{
return -1;
}
const char* subor_certifikat = "../certifikaty/klient/klient_rsa.pem";
const char* subor_kluc = "../certifikaty/klient/klient_rsa.key";
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
else
{
for(int i = 0; i < argc; i++)
{
if( (!strcmp(argv[i], "-s")) )
{
uvedeny_subor = 1;
if((argv[i+1] == NULL) )
{
printf("Nezadali ste cestu ku suboru\n");
return -1;
}
else
{
subor = argv[i+1];
}
}
if( (!strcmp(argv[i], "-port")) )
{
zadane_rozhranie = 1;
if((argv[i+1] == NULL))
{
printf("Nezadali ste cislo serioveho rozhrania\n");
return -1;
}
else
{
cislo_rozhrania = atoi(argv[i+1]);
if(RS232_OpenComport(cislo_rozhrania, rychlost, rezim, 1))
{
fprintf(stderr, "Nebolo mozne otvorit seriove rozhranie\n");
return -1;
}
}
}
else if( (!strcmp(argv[i], "-n")) )
{
nacitanie_zo_suboru = 1;
if(generovanie_certifikatu)
{
fprintf(stderr, "Nie je mozne zvolit obidve metody nacitania certifikatov naraz\n");
return -1;
}
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu ktory chcete nacitat zo suboru\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita/autorita_rsa.pem", NULL);
if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
}
else if(!strcmp(argv[i+1], "ecc"))
{
printf("jo\n");
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita/autorita_ecc.pem", NULL);
if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
else if( (!strcmp(argv[i], "-g")) )
{
generovanie_certifikatu = 1;
if(nacitanie_zo_suboru)
{
fprintf(stderr, "Nie je mozne zvolit obidve metody nacitania certifikatov naraz\n");
return -1;
}
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu ktory chcete vygenerovat\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
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(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
}
else if(!strcmp(argv[i+1], "ecc"))
{
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(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
}
}
if(!zadane_rozhranie)
{
fprintf(stderr, "Nebol urcene seriove rozhranie\n");
return -1;
}
else if(!generovanie_certifikatu && !nacitanie_zo_suboru)
{
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n");
return -1;
}
else if(!uvedeny_subor)
{
fprintf(stderr, "Nebola uvedena cesta ku suboru na odoslanie\n");
return -1;
}
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
//wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
wolfSSL_SetIOSend(ctx, rs232_zapis);
wolfSSL_SetIORecv(ctx, rs232_citanie);
@ -89,27 +284,26 @@ int main(int argc, char const *argv[])
wolfSSL_set_fd(ssl, rs232_prijat);
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
printf("bol som tu\n");
while(uspech != SSL_SUCCESS)
{
uspech |= wolfSSL_connect(ssl);
printf("bol sss\n");
uspech = wolfSSL_connect(ssl);
if(uspech != SSL_SUCCESS)
{
printf("Nepodarilo sa pripojit%d\n", uspech);
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;
}
else
{
printf("oukej\n");
}
}
printf("bol som aj tu tu\n");
wolfSSL_write(ssl, "nieco", 10);
zobraz_sifru(ssl);
zobraz_certifikat(ssl);
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) return -1;
ukoncit_spojenie(ssl, ctx);
RS232_CloseComport(cislo_rozhrania);
close(rs232_prijat);
close(open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY));
return 0;
}

Binary file not shown.

1
rs232_kanal/nieco.txt Normal file
View File

@ -0,0 +1 @@
jano

View File

@ -3,7 +3,7 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#include <stdio.h>
@ -17,7 +17,8 @@
#include <Windows.h>
#include <io.h>
#include <fcntl.h>
#define O_NOCTTY 0
#define O_NOCTTY 0x8000
#define O_NDELAY 0x4000
#else
#include <unistd.h>
#endif
@ -26,23 +27,104 @@
#include "../kniznica/komunikacia.h"
#include "../kniznica/rs232.h"
int rs232_poslat;
#define RSA_VELKOST 2048
#define ECC_VELKOST 32
#define RSA_EXPONENT 65537
//cesty ku suborom
#define RSA_KLUC "../certifikaty/server/server_rsa.key"
#define RSA_CERTIFIKAT "../certifikaty/server/server_rsa.pem"
#define ECC_KLUC "../certifikaty/server/server_ecc.key"
#define ECC_CERTIFIKAT "../certifikaty/server/server_ecc.pem"
#define VYGENEROVANY_KLUC "../certifikaty/server/vygenerovany_kluc.key"
#define VYGENEROVANY_CERTIFIKAT "../certifikaty/server/vygenerovany_certifikat.pem"
#define KOMUNIKACNY_SUBOR "server.txt"
int rs232_prijat;
int cislo_rozhrania = 0;
int aktualne_data = 0;
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
int uspech = 0;
while(uspech <= 0)
//ziskanie dat zo serioveho rozhrania
if(aktualne_data == 0)
{
uspech = read(rs232_prijat, buf, sz);
FILE* f = fopen(KOMUNIKACNY_SUBOR, "ab");
int nacitane_data = 0;
int prebieha_nacitanie = 0;
unsigned char znak;
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore
while(1)
{
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
if(uspech > 0)
{
//ak bol najdeny koniec kontrolneho vzoru, tak je zapnuta znacka,
//ktora urcuje ze prebieha nacitavanie spravy
if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia <= 2))
{
zaciatok_spravy_pozicia++;
}
else if((znak == zaciatok_spravy[zaciatok_spravy_pozicia]) && (zaciatok_spravy_pozicia > 2))
{
prebieha_nacitanie = 1;
zaciatok_spravy_pozicia = 0;
}
else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia <= 2))
{
koniec_spravy_pozicia++;
}
//ak bol najdeny koniec kontrolneho vzoru, tak je vypnuta znacka,
//ktora urcuje ze prebieha nacitanie spravy
else if((prebieha_nacitanie) && (znak == koniec_spravy[koniec_spravy_pozicia]) && (koniec_spravy_pozicia > 2))
{
prebieha_nacitanie = 0;
break;
}
else
{
if(prebieha_nacitanie)
{
fwrite((char*)&znak, 1, uspech, f);
nacitane_data += uspech;
}
}
}
}
aktualne_data = nacitane_data;
printf("Nacital som %d dat\n", nacitane_data);
fclose(f);
}
//nacitanie dat zo suboru do buffera
uspech = 0;
while(uspech <= 0)
uspech = read(rs232_prijat, buf, sz);
aktualne_data -= uspech;
return uspech;
}
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
int uspech = 0;
uspech = write(rs232_poslat, buf, sz);
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA};
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
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);
printf("Odoslal som %d %d\n", uspech, sz);
return uspech;
}
@ -50,34 +132,132 @@ int main(int argc, char const *argv[])
{
WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL;
int cislo_rozhrania = 5;
int rychlost = 9600;
char rezim[]={'8','N','1', 0};
int zadane_rozhranie = 0;
int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0;
nastavenia_aplikacie nastavenia;
rs232_poslat = open("klient.txt", O_WRONLY | O_NOCTTY);
printf("%d\n", rs232_poslat);
rs232_prijat = open("server.txt", O_RDONLY | O_NOCTTY);
printf("%d\n", rs232_prijat);
rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
int uspech;
/* uspech = rs232_otvorit_rozhranie(cislo_rozhrania, rychlost, rezim, 0);
if(uspech == -1)
{
return -1;
}
*/
if((ctx = nastavit_ctx_server()) == NULL)
{
return -1;
}
const char* subor_certifikat = "../certifikaty/server/server_rsa.pem";
const char* subor_kluc = "../certifikaty/server/server_rsa.key";
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
else
{
for(int i = 0; i < argc; i++)
{
if( (!strcmp(argv[i], "-port")) )
{
zadane_rozhranie = 1;
if((argv[i+1] == NULL))
{
printf("Nezadali ste cislo serioveho rozhrania\n");
return -1;
}
else
{
cislo_rozhrania = atoi(argv[i+1]);
if(RS232_OpenComport(cislo_rozhrania, rychlost, rezim, 1))
{
fprintf(stderr, "Nebolo mozne otvorit seriove rozhranie\n");
return -1;
}
}
}
else if( (!strcmp(argv[i], "-n")) )
{
nacitanie_zo_suboru = 1;
if(generovanie_certifikatu)
{
fprintf(stderr, "Nie je mozne zvolit obidve metody nacitania certifikatov naraz\n");
return -1;
}
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu ktory chcete nacitat zo suboru\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita/autorita_rsa.pem", NULL);
if(nacitat_certifikaty(ctx, RSA_CERTIFIKAT, RSA_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
}
else if(!strcmp(argv[i+1], "ecc"))
{
printf("jo\n");
wolfSSL_CTX_load_verify_locations(ctx, "../certifikaty/autorita/autorita_ecc.pem", NULL);
if(nacitat_certifikaty(ctx, ECC_CERTIFIKAT, ECC_KLUC) == -1) return -1;
wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, 0);
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
else if( (!strcmp(argv[i], "-g")) )
{
generovanie_certifikatu = 1;
if(nacitanie_zo_suboru)
{
fprintf(stderr, "Nie je mozne zvolit obidve metody nacitania certifikatov naraz\n");
return -1;
}
if((argv[i+1] == NULL) || (i == argc-1))
{
printf("Nezadali ste typ certifikatu ktory chcete vygenerovat\n");
return -1;
}
else if(!strcmp(argv[i+1], "rsa"))
{
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(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
}
else if(!strcmp(argv[i+1], "ecc"))
{
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(nacitat_certifikaty(ctx, VYGENEROVANY_CERTIFIKAT, VYGENEROVANY_KLUC) == -1) return -1;
}
else
{
printf("Zadali ste nespravny typ certifikatu\n");
return -1;
}
}
}
}
if(!zadane_rozhranie)
{
fprintf(stderr, "Nebol urcene seriove rozhranie\n");
return -1;
}
else if(!generovanie_certifikatu && !nacitanie_zo_suboru)
{
fprintf(stderr, "Nebola zvolena metoda nacitania certifikatov\n");
printf("Zadajde prepinac -g (generovanie), alebo -n (nacitanie_zo_suboru) s parametrom rsa alebo ecc\n");
return -1;
}
//nastav_sifry(ctx, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256");
//wolfSSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, 0);
wolfSSL_SetIOSend(ctx, rs232_zapis);
wolfSSL_SetIORecv(ctx, rs232_citanie);
while(1)
{
printf("------------\n");
if ((ssl = wolfSSL_new(ctx)) == NULL)
{
printf("Nepodarilo sa vytvorit ssl relaciu\n");
@ -88,20 +268,26 @@ int main(int argc, char const *argv[])
wolfSSL_set_fd(ssl, rs232_prijat);
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
printf("bol som tu\n");
while(uspech != SSL_SUCCESS)
{
uspech = wolfSSL_accept(ssl);
printf("%d\n", uspech);
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);
}
printf("bol som aj tu tu\n");
char sprava[100];
wolfSSL_read(ssl, sprava, 10);
printf("%s\n", sprava);
RS232_CloseComport(cislo_rozhrania);
close(rs232_prijat);
close(open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY));
return 0;
}

Binary file not shown.

View File

@ -0,0 +1,16 @@
::::::::::::::::::::::::::::::::::::::::::::::::::
:: Bakalarska praca ::
:: Meno studenta: Tomas Lukac ::
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
:: Skola: KEMT FEI TUKE ::
:: Datum poslednej upravy: 6.4.2020 ::
::::::::::::::::::::::::::::::::::::::::::::::::::
:: Program je mozne spustit s prepinacmi:
:: -port seriove_rozhranie
:: -g rsa|ecc sluzi na generovanie certifikatu
:: -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)
::Priklady spustenia:
klient -port 4 -n rsa -s nieco.txt

View File

@ -0,0 +1,19 @@
::::::::::::::::::::::::::::::::::::::::::::::::::
:: Bakalarska praca ::
:: Meno studenta: Tomas Lukac ::
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
:: Skola: KEMT FEI TUKE ::
:: Datum poslednej upravy: 6.4.2020 ::
::::::::::::::::::::::::::::::::::::::::::::::::::
:: Program server je mozne spustit s prepinacmi:
:: -port seriove_rozhranie
:: -g rsa|ecc sluzi na generovanie certifikatu
:: -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

Binary file not shown.

Binary file not shown.

View File

@ -3,38 +3,37 @@
## Meno studenta: Tomas Lukac ##
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
## Skola: KEMT FEI TUKE ##
## Datum poslednej upravy: 12.3.2020 ##
## Datum poslednej upravy: 6.4.2020 ##
##################################################
#prekladac
CC = gcc
#prepinace pre prekladac
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/
LIB = -L. -lwolfssl
CFLAGS = -Wcpp -Werror -I./../wolfssl/
LIB =
ifeq ($(OS), Windows_NT)
LIB += -lws2_32
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
LIB += -m64
LIB += -L./../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32 -m64
endif
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
LIB += -Os
LIB += -L./../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32 -Os
endif
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Linux)
LIB +=
LIB += -lwolfssl
endif
endif
all: klient server
klient: klient.o kryptografia.o komunikacia.o
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o $(LIB)
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
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.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)
@ -48,6 +47,9 @@ kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h
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:

View File

@ -3,7 +3,7 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#include "../kniznica/kryptografia.h"
@ -31,6 +31,7 @@ int main(int argc, char** argv)
int uvedeny_subor = 0;
int ip = 0;
int port = 0;
nastavenia_aplikacie nastavenia;
#if defined (_WIN32)
WSADATA d;
@ -45,8 +46,6 @@ int main(int argc, char** argv)
int cislo_portu = 0;
char* ip_adresa = NULL;
char* subor = NULL;
const char *subor_certifikat = NULL;
const char *subor_kluc = NULL;
WOLFSSL *ssl; WOLFSSL_CTX *ctx;
if((ctx = nastavit_ctx_klient()) == NULL)
@ -200,8 +199,8 @@ int main(int argc, char** argv)
}
zobraz_sifru(ssl);
zobraz_certifikat(ssl);
nastav_funkciu(funkcia_BLAKE2B);
if(poslat_subor(ssl, ctx, subor) == -1) return -1;
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) return -1;
ukoncit_spojenie(ssl, ctx);
}

View File

@ -3,7 +3,7 @@
// Meno studenta: Tomas Lukac //
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
// Skola: KEMT FEI TUKE //
// Datum poslednej upravy: 12.3.2020 //
// Datum poslednej upravy: 6.4.2020 //
//////////////////////////////////////////////////
#include "../kniznica/kryptografia.h"
@ -25,11 +25,11 @@
int main(int argc, char **argv)
{
int autentizacia_klienta = 0;
int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0;
int port = 0;
nastavenia_aplikacie nastavenia;
#if defined (_WIN32)
WSADATA d;
@ -174,8 +174,8 @@ int main(int argc, char **argv)
}
zobraz_sifru(ssl);
zobraz_certifikat(ssl);
nastav_funkciu(funkcia_BLAKE2B);
prijat_subor(ssl, ctx);
nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
prijat_subor(ssl, ctx, &nastavenia);
}
}
ukoncit_soket(cislo_soketu);

View File

@ -3,13 +3,13 @@
:: Meno studenta: Tomas Lukac ::
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
:: Skola: KEMT FEI TUKE ::
:: Datum poslednej upravy: 9.3.2020 ::
:: Datum poslednej upravy: 6.4.2020 ::
::::::::::::::::::::::::::::::::::::::::::::::::::
:: Program je mozne spustit s prepinacmi:
:: -g rsa|ecc sluzi na generovanie certifikatu
:: -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:
klient -ip 127.0.0.1 -port 8080 -n rsa

View File

@ -3,7 +3,7 @@
:: Meno studenta: Tomas Lukac ::
:: Veduci BP: prof. Ing. Milos Drutarovsky CSc. ::
:: Skola: KEMT FEI TUKE ::
:: Datum poslednej upravy: 9.3.2020 ::
:: Datum poslednej upravy: 6.4.2020 ::
::::::::::::::::::::::::::::::::::::::::::::::::::
:: Program server je mozne spustit s prepinacmi:

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,19 +0,0 @@
seriove rozhranie
- prenasa data po jednom bite
vyhody: lacnejsie kable a mensie konektory
- vacsinou myslime rozhrania vyuzivajuce asynchronne seriove protokoly, napr. rs232 rozhranie , rozhrania na vstavanych
zariadeniach, a ine
- vacsina seriovych rozhrani su obojsmerne: mozu prijimat aj posielat data
- vyhody
1. mozu si medzi sebou vymienat rozne typy informacii
aplikacie vyuzivajuce seriove rozhrania casto zahrnuju citacie senzory, prepinace alebo ine vstupy
riadenie motoru, rele, displeje a ine vystupy
2. lacny a dostupny HW
ak nie je k dispozicii seriovy port, existuje usb/serial konvertor
3. okrem start, stop a paritnych bitov pridanych do kazdeho prenasaneho bajtu, seriove rozhrania
nepridavaju ziadne informacie ku prenasanym datam, narozdiel od usb, ethernet, kt. pouzivaju sofistikovane protokoly
ktore definuju format prenasanych dat. hardware a firmware musia implementovat tieto protokoly, co pridava komplexnost
kt. niektore aplikacie nepotrebuju
4. kable mzou byt dlhe
5. jednotlive os poskytuju ovladace pre pristup k seriovym rozhraniam
program. jazyky poskytuju triedy, kniznice alebo ine nastroje na seriovu komunikaciu

Binary file not shown.

Binary file not shown.

View File

@ -25,6 +25,12 @@
#ifndef WOLFSSL_OPTIONS_H
#define WOLFSSL_OPTIONS_H
#ifdef __cplusplus
extern "C" {
#endif
#undef HAVE_FFDHE_2048
#define HAVE_FFDHE_2048
@ -276,10 +282,6 @@
#undef HAVE___UINT128_T
#define HAVE___UINT128_T
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}

View File

@ -0,0 +1,40 @@
/* options.h.in
*
* Copyright (C) 2006-2019 wolfSSL Inc.
*
* This file is part of wolfSSL.
*
* wolfSSL is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* wolfSSL is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*/
/* default blank options for autoconf */
#ifndef WOLFSSL_OPTIONS_H
#define WOLFSSL_OPTIONS_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
}
#endif
#endif /* WOLFSSL_OPTIONS_H */

View File

@ -0,0 +1,25 @@
#ifndef _WIN_USER_SETTINGS_H_
#define _WIN_USER_SETTINGS_H_
/* Verify this is Windows */
#ifndef _WIN32
#error This user_settings.h header is only designed for Windows
#endif
#define OPENSSL_EXTRA
#define WOLFSSL_RIPEMD
#define HAVE_TLS_EXTENSIONS
#define WOLFSSL_CERT_GEN
#define WOLFSSL_KEY_GEN
#define WOLFSSL_CERT_REQ
#define HAVE_AESGCM
#define WOLFSSL_SHA384
#define WOLFSSL_SHA512
#define WOLFSSL_SHA224
#define HAVE_BLAKE2
#define HAVE_BLAKE2B
#define HAVE_SUPPORTED_CURVES
#define HAVE_ECC
#define ECC_TIMING_RESISTANT
#define WC_RSA_BLINDING
#endif /* _WIN_USER_SETTINGS_H_ */

View File

@ -232,6 +232,8 @@ typedef struct WOLFSSL_ASN1_INTEGER {
#endif
#endif /* WOLFSSL_CERT_GEN || WOLFSSL_CERT_EXT */
#ifdef WOLFSSL_CERT_GEN
#ifdef WOLFSSL_MULTI_ATTRIB
#ifndef CTC_MAX_ATTRIB
#define CTC_MAX_ATTRIB 4
@ -344,10 +346,12 @@ WOLFSSL_API int wc_MakeCert_ex(Cert* cert, byte* derBuffer, word32 derSz,
int keyType, void* key, WC_RNG* rng);
WOLFSSL_API int wc_MakeCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
ecc_key*, WC_RNG*);
#ifdef WOLFSSL_CERT_REQ
WOLFSSL_API int wc_MakeCertReq_ex(Cert*, byte* derBuffer, word32 derSz,
int, void*);
WOLFSSL_API int wc_MakeCertReq(Cert*, byte* derBuffer, word32 derSz,
RsaKey*, ecc_key*);
#endif
WOLFSSL_API int wc_SignCert_ex(int requestSz, int sType, byte* buffer,
word32 buffSz, int keyType, void* key,
WC_RNG* rng);
@ -427,6 +431,8 @@ WOLFSSL_API int wc_SetExtKeyUsageOID(Cert *cert, const char *oid, word32 sz,
WC_RNG*);
#endif
#endif /* WOLFSSL_CERT_GEN */
WOLFSSL_API int wc_GetDateInfo(const byte* certDate, int certDateSz,
const byte** date, byte* format, int* length);
#ifndef NO_ASN_TIME
@ -486,6 +492,7 @@ WOLFSSL_API void wc_FreeDer(DerBuffer** pDer);
WOLFSSL_API int wc_RsaPublicKeyDerSize(RsaKey* key, int with_header);
#endif
#ifdef HAVE_ECC
/* private key helpers */
WOLFSSL_API int wc_EccPrivateKeyDecode(const byte*, word32*,
ecc_key*, word32);
@ -501,6 +508,7 @@ WOLFSSL_API void wc_FreeDer(DerBuffer** pDer);
WOLFSSL_API int wc_EccPublicKeyToDer(ecc_key*, byte* output,
word32 inLen, int with_AlgCurve);
WOLFSSL_API int wc_EccPublicKeyDerSize(ecc_key*, int with_AlgCurve);
#endif
#ifdef HAVE_ED25519
/* private key helpers */

Some files were not shown because too many files have changed in this diff Show More