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 // // 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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#include "komunikacia.h" #include "komunikacia.h"
#include "kryptografia.h" #include "kryptografia.h"
#include "rs232.h"
hashovacia_funkcia h_funkcia; int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta, nastavenia_aplikacie *nastavenia)
int rs232_rozhranie;
void nastav_funkciu(hashovacia_funkcia funkcia)
{
h_funkcia = funkcia;
}
int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
{ {
int uspech; int uspech;
@ -73,7 +66,7 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, char* cesta)
//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(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++) for(int i = 0; i < velkost_kontrolneho_suctu; i++)
{ {
kontrolny_sucet[i] = (char)kontrolny_sucet[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; int uspech;
@ -139,7 +132,7 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx)
//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(h_funkcia, cesta, &velkost_kontrolneho_suctu); kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia->funkcia, 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));
@ -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)); uspech = connect(cislo_soketu, (struct sockaddr*)&adresa, sizeof(adresa));
if(uspech < 0) 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"); fprintf(stderr, "Nebolo mozne okamzite vytvorit spojenie\n");
do do
@ -212,7 +209,11 @@ int pripojit_na_server(char *ip_adresa, int cislo_portu, int pocet_sekund)
FD_ZERO(&sada_soketov); FD_ZERO(&sada_soketov);
FD_SET(cislo_soketu, &sada_soketov); FD_SET(cislo_soketu, &sada_soketov);
uspech = select(cislo_soketu + 1, NULL, &sada_soketov, NULL, &casovy_interval); 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) if (uspech < 0 && errno != EINTR)
#endif
{ {
fprintf(stderr, "Nastala chyba pri pokuse o vytvorenie spojenia\nCislo chyby: %d\nPopis: %s\n", errno, strerror(errno)); fprintf(stderr, "Nastala chyba pri pokuse o vytvorenie spojenia\nCislo chyby: %d\nPopis: %s\n", errno, strerror(errno));
ukoncit_soket(cislo_soketu); ukoncit_soket(cislo_soketu);
@ -287,15 +288,5 @@ int cakat_na_komunikaciu(int cislo_portu)
return cislo_soketu; 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 // // 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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#ifndef __KOMUNIKACIA_H__ #ifndef __KOMUNIKACIA_H__
@ -17,7 +17,6 @@
#include "kryptografia.h" #include "kryptografia.h"
#include "rs232.h" #include "rs232.h"
#define VELKOST_CESTY 64 //velkost retazca, kt. uklada lokaciu suboru #define VELKOST_CESTY 64 //velkost retazca, kt. uklada lokaciu suboru
#define VELKOST_SUBOR 32 //velkost retazca, kt. uklada velkost prenasaneho suboru #define VELKOST_SUBOR 32 //velkost retazca, kt. uklada velkost prenasaneho suboru
@ -31,8 +30,6 @@
#include <ws2tcpip.h> #include <ws2tcpip.h>
#define ukoncit_soket closesocket #define ukoncit_soket closesocket
#define socklen_t int #define socklen_t int
#define EINPROGRESS WSAEINPROGRESS
#define EINTR WSAEINTR
//hovori visual c prekladacu aby nalinkoval ws2_32 kniznicu //hovori visual c prekladacu aby nalinkoval ws2_32 kniznicu
//ak pouzivame minqw pragma sa ignoruje a musime ju zadat pri kompilaci manualne : -lws2_32 //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 // // RS232 KOMUNIKACNY KANAL //
///////////////////////////// /////////////////////////////
int rs232_otvorit_rozhranie(int cislo_rozhrania, int rychlost, const char* rezim, int riadenie_toku_dat); //..
////////////////////// //////////////////////
// PRACA SO SUBORMI // // 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 * @parameter char* cesta: ukazuje na retazec, ktory reprezentuje cestu k suboru
* @vrati int : operacia bola uspesna(0), neuspesna(-1) * @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 * 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 * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu
* @vrati int : operacia bola uspesna(0), neuspesna(-1) * @vrati int : operacia bola uspesna(0), neuspesna(-1)
*/ */
int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx); int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastavenia);
/**
* 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);
#endif #endif

View File

@ -3,10 +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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#include "kryptografia.h" #include "kryptografia.h"
#include <wolfssl/user_settings.h>
WOLFSSL_CTX* nastavit_ctx_klient() 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); wolfSSL_CTX_set_cipher_list(ctx, sifry);
} }
void nastav_funkciu(nastavenia_aplikacie* nastavenia, hashovacia_funkcia funkcia)
{
nastavenia->funkcia = funkcia;
}
void zobraz_sifru(WOLFSSL* ssl) void zobraz_sifru(WOLFSSL* ssl)
{ {
printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl)); printf ("Pouzita sifra: %s\n", wolfSSL_get_cipher(ssl));

View File

@ -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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#ifndef __KRYPTOGRAFIA_H__ #ifndef __KRYPTOGRAFIA_H__
@ -27,7 +27,11 @@
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
}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 * 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); 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 * nacitat_certifikaty: realizuje nacitanie certifikatov zo suborov do struktury WOLFSSL_CTX
* @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu

View File

@ -2,49 +2,54 @@ 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: 12.3.2020 Datum poslednej upravy: 6.4.2020
Verzia: 0.1
---------------------------- ----------------------------
Zoznam zdrojovych suborov Zoznam zdrojovych suborov
certifikaty certifikaty
|__autorita_ecc.pem autorita
|__autorita_ecc.key |__autorita_ecc.pem
|__autorita_rsa.pem |__autorita_ecc.key
|__autorita_rsa.key |__autorita_rsa.pem
|__server_ecc.pem |__autorita_rsa.key
|__server_ecc.key server
|__server_rsa.pem |__server_ecc.pem
|__server_rsa.key |__server_ecc.key
|__klient_ecc.pem |__server_rsa.pem
|__klient_ecc.key |__server_rsa.key
|__klient_rsa.pem klient
|__klient_rsa.key |__klient_ecc.pem
|__klient_ecc.key
|__klient_rsa.pem
|__klient_rsa.key
kniznica kniznica
|__komunikacia.h |__komunikacia.h
|__komunikacia.c |__komunikacia.c
|__kryptografia.h |__kryptografia.h
|__kryptografia.c |__kryptografia.c
|__vstup.h
|__vstup.c
tcpip_kanal tcpip_kanal
|__klient.c |__klient.c
|__server.c |__server.c
|__Makefile |__Makefile
rs232_kanal rs232_kanal
|__klient.c |__klient.c
|__klient.txt
|__server.c |__server.c
|__server.txt
|__Makefile |__Makefile
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
potrebne spustit aplikaciu na strane servera s prepinacom port s hodnotou, ktora urcuje ake bude cislo portu, na ktorom bude server 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 cakat na prichadzajucu komunikaciu, v pripade rs232 kanala je potrebne uviest cislo serioveho rozhrania (hodnoty: https://www.teuniz.net/RS-232/).
-g (vygenerovanie a podpis certifikatov pomocou certifikatu a kluca autority, ktore sa nachadzaju taktiez v adresari /certifikaty). Dalsim potrebnym prepinacom je bud -n (nacitanie certifikatov z adresaru /certifikaty) alebo -g (vygenerovanie a podpis certifikatov
Sukromne kluce a certifikaty su ulozene vo formate Privacy-Enhanced Mail (PEM). Nasledne je potrebne spustit aplikaciu na strane pomocou certifikatu a kluca autority, ktore sa nachadzaju taktiez v adresari /certifikaty).Sukromne kluce a certifikaty su ulozene vo formate DER.
klienta, ktora okrem predchadzajucich parametrov vyzaduje parameter pre ip adresu: -ip adresa. Po vytvoreni zabezpeceneho prenosoveho Nasledne je potrebne spustit aplikaciu na strane klienta, ktora pri pouziti kanalu TCP_IP okrem predchadzajucich parametrov vyzaduje parameter
kanalu sa klient pokusi odoslat subor, ktoreho lokacia mu bola predana pri spusteni pomocou parametru -s subor. Pred samotnym poslanim pre ip adresu: -ip adresa. Po vytvoreni zabezpeceneho prenosoveho kanalu sa klient pokusi odoslat subor, ktoreho lokacia mu bola predana pri
klient najprv vyhotovi kontrolny sucet suboru, ktory odosle po zabezpecenom kanali serveru. Ten po prijati suboru overi ci sa zhoduje spusteni pomocou parametru -s subor. Pred samotnym poslanim klient najprv vyhotovi kontrolny sucet suboru, ktory odosle po zabezpecenom kanali
prijaty kontrolny sucet s jeho, ktory vyhotovil po prijati suboru. Ak pri prijati suboru nenastala chyba a kontrolne sucty sa zhoduju serveru. Ten po prijati suboru overi ci sa zhoduje prijaty kontrolny sucet s jeho, ktory vyhotovil po prijati suboru. Ak pri prijati suboru
server oznami ze prijem bol uspesny a dalej caka na komunikaciu. Klientsky program po odoslani suboru ukonci svoju cinnost. 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) Generovanie certifikatov RSA (OpenSSL)
openssl genrsa -out autorita_rsa.key 2048 openssl genrsa -out autorita_rsa.key 2048
@ -80,27 +85,34 @@ Navod na prelozenie a spustenie (Linux)
sudo make install sudo make install
2. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal) 2. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
make all make all
3. spustenie 3. spustenie (prenosovy kanal TCP/IP)
./server -port port -n rsa|ecc ./server -port port -n rsa|ecc
./server -port port -g 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 -n rsa|ecc -s subor
./klient -ip 127.0.0.1 -port port -g 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) Navod na prelozenie a spustenie (Windows)
1. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal) 1. skopirovanie potrebnych dll z adresara /wolfssl/64bit_kniznice/ , resp. /wolfssl/32bit_kniznice/
mingw32-make all do podadresara tcpip_kanal, resp. rs232_kanal
2. spustenie a) wolfssl.dll -> kniznica wolfssl
server -port port -n rsa|ecc b) vcruntime140.dll -> visual c++ runtime
server -port port -g rsa|ecc c) api-ms-win-crt-runtime-l1-1-0.dll
klient -ip 127.0.0.1 -port port -n rsa|ecc -s subor 2. prelozenie programov (v podadresari tcpip_kanal alebo rs232_kanal)
klient -ip 127.0.0.1 -port port -g rsa|ecc -s subor make all
3. spustenie (prenosovy kanal TCP/IP)
Zoznam DLL suborov potrebnych pre spustenie (Windows) server -port port -n rsa|ecc
1. vcruntime140.dll server -port port -g rsa|ecc
2. wolfssl.dll klient -ip 127.0.0.1 -port port -n rsa|ecc -s subor
3. ws2_32.dll klient -ip 127.0.0.1 -port port -g rsa|ecc -s subor
Poznamka: 4. spustenie (prenosovy kanal RS232)
pre preklad na 64bit architekturach je nutne premennovat subory s koncovkami *_64.dll na nazvy DLLiek uvedenych vyssie server -port seriove_rozhranie -n rsa|ecc
a povodne DLLka premenovat na ine nazvy, najlepsie *_32.dll 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 ## ## 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: 12.3.2020 ## ## Datum poslednej upravy: 6.4.2020 ##
################################################## ##################################################
#prekladac #prekladac
CC = gcc CC = gcc
#prepinace pre prekladac #prepinace pre prekladac
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/ CFLAGS = -Wcpp -Werror -I./../wolfssl/
LIB = -L. -lwolfssl LIB =
ifeq ($(OS), Windows_NT) ifeq ($(OS), Windows_NT)
LIB += -lws2_32
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64) ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
LIB += -m64 LIB += -L./../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32 -m64
endif endif
ifeq ($(PROCESSOR_ARCHITECTURE), x86) ifeq ($(PROCESSOR_ARCHITECTURE), x86)
LIB += -Os LIB += -L./../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32 -Os
endif endif
else else
UNAME_S := $(shell uname -s) UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Linux) ifeq ($(UNAME_S), Linux)
LIB += LIB += -lwolfssl
endif endif
endif endif

View File

@ -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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#include <stdio.h> #include <stdio.h>
@ -17,7 +17,8 @@
#include <Windows.h> #include <Windows.h>
#include <io.h> #include <io.h>
#include <fcntl.h> #include <fcntl.h>
#define O_NOCTTY 0 #define O_NOCTTY 0x8000
#define O_NDELAY 0x4000
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -26,55 +27,249 @@
#include "../kniznica/komunikacia.h" #include "../kniznica/komunikacia.h"
#include "../kniznica/rs232.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 rs232_prijat;
int cislo_rozhrania = 4;
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)
{ {
(void)ssl;
(void)ctx;
int uspech = 0; 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; return uspech;
} }
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx) int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{ {
(void)ssl;
(void)ctx;
int uspech = 0; 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; return uspech;
} }
int main(int argc, char const *argv[]) int main(int argc, char const *argv[])
{ {
char rezim[]={'8','N','1', 0}; char rezim[]={'8','N','1', 0};
int cislo_rozhrania = 4;
int rychlost = 9600; int rychlost = 9600;
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; 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(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
rs232_prijat = open("klient.txt", O_RDONLY | O_NOCTTY);
int uspech; int uspech;
/* uspech = rs232_otvorit_rozhranie(cislo_rozhrania, rychlost, rezim, 0);
if(uspech == -1)
{
return -1;
}*/
if((ctx = nastavit_ctx_klient()) == NULL) if((ctx = nastavit_ctx_klient()) == NULL)
{ {
return -1; return -1;
} }
const char* subor_certifikat = "../certifikaty/klient/klient_rsa.pem"; else
const char* subor_kluc = "../certifikaty/klient/klient_rsa.key"; {
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1; 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_SetIOSend(ctx, rs232_zapis);
wolfSSL_SetIORecv(ctx, rs232_citanie); wolfSSL_SetIORecv(ctx, rs232_citanie);
@ -89,27 +284,26 @@ int main(int argc, char const *argv[])
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);
printf("bol som tu\n"); uspech = wolfSSL_connect(ssl);
if(uspech != SSL_SUCCESS)
while(uspech != SSL_SUCCESS)
{ {
uspech |= wolfSSL_connect(ssl); char* popis_chyby = calloc(100, sizeof(char));
printf("bol sss\n"); int chyba = wolfSSL_get_error(ssl, 0);
if(uspech != SSL_SUCCESS) wolfSSL_ERR_error_string(chyba, popis_chyby);
{ fprintf(stderr, "Nastala chyba v spojeni.\nCislo chyby: %d\nDovod chyby: %s\n", chyba, popis_chyby);
printf("Nepodarilo sa pripojit%d\n", uspech); printf("Skontrolujte certifikaty.\n");
return -1; return -1;
}
else
{
printf("oukej\n");
}
} }
printf("bol som aj tu tu\n");
zobraz_sifru(ssl);
wolfSSL_write(ssl, "nieco", 10); 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); RS232_CloseComport(cislo_rozhrania);
close(rs232_prijat);
close(open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY));
return 0; 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 // // 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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#include <stdio.h> #include <stdio.h>
@ -17,7 +17,8 @@
#include <Windows.h> #include <Windows.h>
#include <io.h> #include <io.h>
#include <fcntl.h> #include <fcntl.h>
#define O_NOCTTY 0 #define O_NOCTTY 0x8000
#define O_NDELAY 0x4000
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -26,23 +27,104 @@
#include "../kniznica/komunikacia.h" #include "../kniznica/komunikacia.h"
#include "../kniznica/rs232.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 rs232_prijat;
int cislo_rozhrania = 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;
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; 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;
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; return uspech;
} }
@ -50,58 +132,162 @@ int main(int argc, char const *argv[])
{ {
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; WOLFSSL_CTX *ctx = NULL;
int cislo_rozhrania = 5;
int rychlost = 9600; int rychlost = 9600;
char rezim[]={'8','N','1', 0}; 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); rs232_prijat = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
printf("%d\n", rs232_poslat);
rs232_prijat = open("server.txt", O_RDONLY | O_NOCTTY);
printf("%d\n", rs232_prijat);
int uspech; int uspech;
/* uspech = rs232_otvorit_rozhranie(cislo_rozhrania, rychlost, rezim, 0);
if(uspech == -1)
{
return -1;
}
*/
if((ctx = nastavit_ctx_server()) == NULL) if((ctx = nastavit_ctx_server()) == NULL)
{ {
return -1; return -1;
} }
const char* subor_certifikat = "../certifikaty/server/server_rsa.pem"; else
const char* subor_kluc = "../certifikaty/server/server_rsa.key"; {
if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1; 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_SetIOSend(ctx, rs232_zapis);
wolfSSL_SetIORecv(ctx, rs232_citanie); wolfSSL_SetIORecv(ctx, rs232_citanie);
if ((ssl = wolfSSL_new(ctx)) == NULL) while(1)
{ {
printf("Nepodarilo sa vytvorit ssl relaciu\n"); printf("------------\n");
wolfSSL_CTX_free(ctx); if ((ssl = wolfSSL_new(ctx)) == NULL)
return -1; {
} printf("Nepodarilo sa vytvorit ssl relaciu\n");
wolfSSL_CTX_free(ctx);
return -1;
}
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);
printf("bol som tu\n");
while(uspech != SSL_SUCCESS)
{
uspech = wolfSSL_accept(ssl); 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); RS232_CloseComport(cislo_rozhrania);
close(rs232_prijat);
close(open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY));
return 0; 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 ## ## 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: 12.3.2020 ## ## Datum poslednej upravy: 6.4.2020 ##
################################################## ##################################################
#prekladac #prekladac
CC = gcc CC = gcc
#prepinace pre prekladac #prepinace pre prekladac
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/ CFLAGS = -Wcpp -Werror -I./../wolfssl/
LIB = -L. -lwolfssl LIB =
ifeq ($(OS), Windows_NT) ifeq ($(OS), Windows_NT)
LIB += -lws2_32
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64) ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
LIB += -m64 LIB += -L./../wolfssl/64bit_kniznice/ -lwolfssl -lws2_32 -m64
endif endif
ifeq ($(PROCESSOR_ARCHITECTURE), x86) ifeq ($(PROCESSOR_ARCHITECTURE), x86)
LIB += -Os LIB += -L./../wolfssl/32bit_kniznice/ -lwolfssl -lws2_32 -Os
endif endif
else else
UNAME_S := $(shell uname -s) UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Linux) ifeq ($(UNAME_S), Linux)
LIB += LIB += -lwolfssl
endif endif
endif endif
all: klient server all: klient server
klient: klient.o kryptografia.o komunikacia.o klient: klient.o kryptografia.o komunikacia.o rs232.o
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o $(LIB) $(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o rs232.o $(LIB)
server: server.o kryptografia.o komunikacia.o server: server.o kryptografia.o komunikacia.o rs232.o
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o $(LIB) $(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o rs232.o $(LIB)
klient.o: klient.c klient.o: klient.c
$(CC) $(CFLAGS) -c klient.c $(LIB) $(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 komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h
$(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB) $(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB)
rs232.o: ../kniznica/rs232.c ../kniznica/rs232.h
$(CC) $(CFLAGS) -c ../kniznica/rs232.c $(LIB)
.PHONY: clean .PHONY: clean
clean-linux: clean-linux:

View File

@ -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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#include "../kniznica/kryptografia.h" #include "../kniznica/kryptografia.h"
@ -31,6 +31,7 @@ int main(int argc, char** argv)
int uvedeny_subor = 0; int uvedeny_subor = 0;
int ip = 0; int ip = 0;
int port = 0; int port = 0;
nastavenia_aplikacie nastavenia;
#if defined (_WIN32) #if defined (_WIN32)
WSADATA d; WSADATA d;
@ -45,8 +46,6 @@ int main(int argc, char** argv)
int cislo_portu = 0; int cislo_portu = 0;
char* ip_adresa = NULL; char* ip_adresa = NULL;
char* subor = NULL; char* subor = NULL;
const char *subor_certifikat = NULL;
const char *subor_kluc = NULL;
WOLFSSL *ssl; WOLFSSL_CTX *ctx; WOLFSSL *ssl; WOLFSSL_CTX *ctx;
if((ctx = nastavit_ctx_klient()) == NULL) if((ctx = nastavit_ctx_klient()) == NULL)
@ -200,8 +199,8 @@ int main(int argc, char** argv)
} }
zobraz_sifru(ssl); zobraz_sifru(ssl);
zobraz_certifikat(ssl); zobraz_certifikat(ssl);
nastav_funkciu(funkcia_BLAKE2B); nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
if(poslat_subor(ssl, ctx, subor) == -1) return -1; if(poslat_subor(ssl, ctx, subor, &nastavenia) == -1) return -1;
ukoncit_spojenie(ssl, ctx); ukoncit_spojenie(ssl, ctx);
} }

View File

@ -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: 12.3.2020 // // Datum poslednej upravy: 6.4.2020 //
////////////////////////////////////////////////// //////////////////////////////////////////////////
#include "../kniznica/kryptografia.h" #include "../kniznica/kryptografia.h"
@ -25,11 +25,11 @@
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
int autentizacia_klienta = 0; int autentizacia_klienta = 0;
int generovanie_certifikatu = 0; int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0; int nacitanie_zo_suboru = 0;
int port = 0; int port = 0;
nastavenia_aplikacie nastavenia;
#if defined (_WIN32) #if defined (_WIN32)
WSADATA d; WSADATA d;
@ -174,8 +174,8 @@ int main(int argc, char **argv)
} }
zobraz_sifru(ssl); zobraz_sifru(ssl);
zobraz_certifikat(ssl); zobraz_certifikat(ssl);
nastav_funkciu(funkcia_BLAKE2B); nastav_funkciu(&nastavenia, funkcia_BLAKE2B);
prijat_subor(ssl, ctx); prijat_subor(ssl, ctx, &nastavenia);
} }
} }
ukoncit_soket(cislo_soketu); ukoncit_soket(cislo_soketu);

View File

@ -3,13 +3,13 @@
:: 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: 9.3.2020 :: :: Datum poslednej upravy: 6.4.2020 ::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::
:: Program je mozne spustit s prepinacmi: :: Program je mozne spustit s prepinacmi:
:: -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 -ip 127.0.0.1 -port 8080 -n rsa klient -ip 127.0.0.1 -port 8080 -n rsa

View File

@ -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: 9.3.2020 :: :: Datum poslednej upravy: 6.4.2020 ::
:::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::
:: Program server je mozne spustit s prepinacmi: :: 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 #ifndef WOLFSSL_OPTIONS_H
#define WOLFSSL_OPTIONS_H #define WOLFSSL_OPTIONS_H
#ifdef __cplusplus
extern "C" {
#endif
#undef HAVE_FFDHE_2048 #undef HAVE_FFDHE_2048
#define HAVE_FFDHE_2048 #define HAVE_FFDHE_2048
@ -276,10 +282,6 @@
#undef HAVE___UINT128_T #undef HAVE___UINT128_T
#define HAVE___UINT128_T #define HAVE___UINT128_T
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus #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
#endif /* WOLFSSL_CERT_GEN || WOLFSSL_CERT_EXT */ #endif /* WOLFSSL_CERT_GEN || WOLFSSL_CERT_EXT */
#ifdef WOLFSSL_CERT_GEN
#ifdef WOLFSSL_MULTI_ATTRIB #ifdef WOLFSSL_MULTI_ATTRIB
#ifndef CTC_MAX_ATTRIB #ifndef CTC_MAX_ATTRIB
#define CTC_MAX_ATTRIB 4 #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); int keyType, void* key, WC_RNG* rng);
WOLFSSL_API int wc_MakeCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*, WOLFSSL_API int wc_MakeCert(Cert*, byte* derBuffer, word32 derSz, RsaKey*,
ecc_key*, WC_RNG*); ecc_key*, WC_RNG*);
#ifdef WOLFSSL_CERT_REQ
WOLFSSL_API int wc_MakeCertReq_ex(Cert*, byte* derBuffer, word32 derSz, WOLFSSL_API int wc_MakeCertReq_ex(Cert*, byte* derBuffer, word32 derSz,
int, void*); int, void*);
WOLFSSL_API int wc_MakeCertReq(Cert*, byte* derBuffer, word32 derSz, WOLFSSL_API int wc_MakeCertReq(Cert*, byte* derBuffer, word32 derSz,
RsaKey*, ecc_key*); RsaKey*, ecc_key*);
#endif
WOLFSSL_API int wc_SignCert_ex(int requestSz, int sType, byte* buffer, WOLFSSL_API int wc_SignCert_ex(int requestSz, int sType, byte* buffer,
word32 buffSz, int keyType, void* key, word32 buffSz, int keyType, void* key,
WC_RNG* rng); WC_RNG* rng);
@ -427,6 +431,8 @@ WOLFSSL_API int wc_SetExtKeyUsageOID(Cert *cert, const char *oid, word32 sz,
WC_RNG*); WC_RNG*);
#endif #endif
#endif /* WOLFSSL_CERT_GEN */
WOLFSSL_API int wc_GetDateInfo(const byte* certDate, int certDateSz, WOLFSSL_API int wc_GetDateInfo(const byte* certDate, int certDateSz,
const byte** date, byte* format, int* length); const byte** date, byte* format, int* length);
#ifndef NO_ASN_TIME #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); WOLFSSL_API int wc_RsaPublicKeyDerSize(RsaKey* key, int with_header);
#endif #endif
#ifdef HAVE_ECC
/* private key helpers */ /* private key helpers */
WOLFSSL_API int wc_EccPrivateKeyDecode(const byte*, word32*, WOLFSSL_API int wc_EccPrivateKeyDecode(const byte*, word32*,
ecc_key*, word32); ecc_key*, word32);
@ -501,6 +508,7 @@ WOLFSSL_API void wc_FreeDer(DerBuffer** pDer);
WOLFSSL_API int wc_EccPublicKeyToDer(ecc_key*, byte* output, WOLFSSL_API int wc_EccPublicKeyToDer(ecc_key*, byte* output,
word32 inLen, int with_AlgCurve); word32 inLen, int with_AlgCurve);
WOLFSSL_API int wc_EccPublicKeyDerSize(ecc_key*, int with_AlgCurve); WOLFSSL_API int wc_EccPublicKeyDerSize(ecc_key*, int with_AlgCurve);
#endif
#ifdef HAVE_ED25519 #ifdef HAVE_ED25519
/* private key helpers */ /* private key helpers */

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