////////////////////////////////////////////////// // Bakalarska praca // // Meno studenta: Tomas Lukac // // Veduci BP: prof. Ing. Milos Drutarovsky CSc. // // Skola: KEMT FEI TUKE // // Datum poslednej upravy: 15.4.2020 // ////////////////////////////////////////////////// #ifndef __KRYPTOGRAFIA_H__ #define __KRYPTOGRAFIA_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define VELKOST_BUFFERA 4096 typedef enum hashovacia_funkcia { funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160, ziadna } hashovacia_funkcia; typedef struct nastavenia_aplikacie { hashovacia_funkcia funkcia; char typ_vypoctu[32]; } nastavenia_aplikacie; /** * generovat_hash: realizuje vypocet kontrolneho suctu zo suboru, ktoreho lokacia je predana v argumente * @parameter char* funkcia : nazov funkcie pre vypocet kontrolneho suctu * @parameter char* cesta : lokacia suboru * @parameter int* velkost : uklada velkost kontrolneho suctu, ktoreho hodnota sa dynamicky priradi * na zaklade nazvu funkcie uvedenom v prvom argumente * @vrati smernik na vygenerovany hash */ byte* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int* velkost); /** * generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority, * vygenerovanie a podpis ecc certifikatu pomocou sukromneho kluca a certifikatu autority * @parameter int pocet_bitov : velkost kluca * @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca * @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov * @vrati int: operacia bola uspesna(0), neuspesna(-1) */ int generovat_ecc_certifikat(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email); /** * generovat_rsa_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority, * vygenerovanie a podpis rsa certifikatu pomocou sukromneho kluca a certifikatu autority * @parameter int pocet_bitov : velkost kluca * @parameter int exponent : hodnota exponentu * @parameter int algoritmus : kod algoritmu, sluziaceho na vymenu klucov * @vrati int : operacia bola uspesna(0), neuspesna(-1) */ int generovat_rsa_certifikat(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email); /** * generovat_rsa_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti * @parameter int pocet_bitov : velkost kluca * @parameter int exponent : hodnota exponentu * @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov * @vrati int: operacia bola uspesna(0), neuspesna(-1) */ int generovat_rsa_ziadost(int pocet_bitov, int exponent, int algoritmus, char* krajina, char* mesto, char* domena, char* email); /** * generovat_ecc_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti * @parameter int pocet_bitov : velkost kluca * @parameter ecc-curve_id kluc_krivka: kod krivky pre generovanie sukromneho kluca * @parameter int algoritmus: kod algoritmu, sluziaceho na vymenu klucov * @vrati int: operacia bola uspesna(0), neuspesna(-1) */ int generovat_ecc_ziadost(int pocet_bitov, ecc_curve_id kluc_krivka, int algoritmus, char* krajina, char* mesto, char* domena, char* email); /** * nastav_ctx_klient : realizuje vytvorenie a inicializaciu CTX struktury * na zaklade verzie tls (client method) * @vrati smernik na ctx strukturu */ WOLFSSL_CTX* nastavit_ctx_klient(); /** * nastav_ctx_server: realizuje vytvorenie a inicializaciu CTX struktury * na zaklade verzie tls (server method) * @vrati smernik na ctx strukturu */ WOLFSSL_CTX* nastavit_ctx_server(); /** * Zobrazi sifru na ktorej sa strany dohodli * @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu */ void zobraz_sifru(WOLFSSL* ssl); /** * nastav_sifry: umoznuje manualne nastavit sifrovaci subor * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu * @parameter const char* sifry : retazec, ktory sa sklada z nazvov sifier oddelenych pomocou znak ":" * vyber sifry zakazeme vlozenim znaku "!" pred danu sifru */ 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 * @parameter char* typ_vypoctu : umoznuje vyber medzi "crc" a "hash" kontrolnym suctom moznosti: funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160 */ void nastav_funkciu(nastavenia_aplikacie* nastavenia, char* typ_vypoctu, hashovacia_funkcia funkcia); /** * nacitat_certifikaty: realizuje nacitanie certifikatov zo suborov do struktury WOLFSSL_CTX * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu * @parameter const char* subor_certifikat : absolutna cesta ku suboru s certifikatom vo formate PEM * @parameter const char* subor_kluc : absolutna cesta ku suboru so sukromnym klucom vo formate PEM * @vrati int : operacia bola uspesna(0), neuspesna(-1) */ int nacitat_certifikaty(WOLFSSL_CTX* ctx, const char* subor_certifikat, const char* subor_kluc); /** * zobraz_certifikat: realizuje vypis udajov extrahovanych z prijateho certifikatu * @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu */ void zobraz_certifikat(WOLFSSL* ssl); /** * ukoncit_spojenie: realizuje ukoncenie zabezpeceneho tls prenosoveho kanalu * @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu * @parameter WOLFSSL_CTX* ctx : ukazuje na WOLFSSL_CTX strukturu */ void ukoncit_spojenie(WOLFSSL *ssl, WOLFSSL_CTX *ctx); #endif