2020-03-11 21:01:54 +00:00
|
|
|
//////////////////////////////////////////////////
|
|
|
|
// Bakalarska praca //
|
|
|
|
// Meno studenta: Tomas Lukac //
|
|
|
|
// Veduci BP: prof. Ing. Milos Drutarovsky CSc. //
|
|
|
|
// Skola: KEMT FEI TUKE //
|
2020-05-06 10:46:52 +00:00
|
|
|
// Datum poslednej upravy: 5.6.2020 //
|
2020-03-11 21:01:54 +00:00
|
|
|
//////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#ifndef __KRYPTOGRAFIA_H__
|
|
|
|
#define __KRYPTOGRAFIA_H__
|
|
|
|
|
|
|
|
#include <wolfssl/ssl.h>
|
|
|
|
#include <wolfssl/wolfcrypt/settings.h>
|
|
|
|
#include <wolfssl/wolfcrypt/random.h>
|
|
|
|
#include <wolfssl/wolfcrypt/ecc.h>
|
|
|
|
#include <wolfssl/wolfcrypt/rsa.h>
|
|
|
|
#include <wolfssl/wolfcrypt/asn_public.h>
|
|
|
|
#include <wolfssl/wolfcrypt/error-crypt.h>
|
2020-03-12 16:22:08 +00:00
|
|
|
#include <wolfssl/wolfcrypt/sha.h>
|
2020-03-19 12:55:34 +00:00
|
|
|
#include <wolfssl/wolfcrypt/sha256.h>
|
|
|
|
#include <wolfssl/wolfcrypt/sha512.h>
|
|
|
|
#include <wolfssl/wolfcrypt/ripemd.h>
|
|
|
|
#include <wolfssl/wolfcrypt/blake2.h>
|
2020-05-06 10:46:52 +00:00
|
|
|
#include "../externe_kniznice/zlib/zlib.h"
|
2020-03-11 21:01:54 +00:00
|
|
|
|
2020-04-16 09:25:05 +00:00
|
|
|
#include <stddef.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
|
2020-03-12 16:22:08 +00:00
|
|
|
#define VELKOST_BUFFERA 4096
|
2020-05-06 10:46:52 +00:00
|
|
|
#define VELKOST_SUBORU 10000
|
|
|
|
#define CRC32_VELKOST 10
|
|
|
|
#define BLAKE2B_VELKOST 64
|
2020-03-12 16:22:08 +00:00
|
|
|
|
2020-05-06 10:46:52 +00:00
|
|
|
/**
|
|
|
|
* enum typ_aplikacie: obsahuje mozne typy aplikacie
|
|
|
|
*/
|
|
|
|
typedef enum typ_aplikacie {
|
|
|
|
klient, server
|
|
|
|
} typ_aplikacie;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* enum hashovacia_funkcia: obsahuje mozne hashovacie funkcie na vypocet kontrolneho suctu suboru
|
|
|
|
*/
|
2020-03-19 12:55:34 +00:00
|
|
|
typedef enum hashovacia_funkcia {
|
|
|
|
funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512,
|
2020-05-06 10:46:52 +00:00
|
|
|
funkcia_BLAKE2B, funkcia_RIPEMD160
|
2020-04-07 20:11:21 +00:00
|
|
|
} hashovacia_funkcia;
|
|
|
|
|
2020-05-06 10:46:52 +00:00
|
|
|
/*
|
|
|
|
* enum crc_funkcia: obsahuje mozne crc funkcie na vypocet kontrolneho suctu suboru
|
|
|
|
*/
|
|
|
|
typedef enum crc_funkcia {
|
|
|
|
funkcia_CRC32
|
|
|
|
} crc_funkcia;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* struct nastavenia_aplikacie: struktura, ktora uchovava nastavenia nastavene pocas behu aplikacie
|
|
|
|
*/
|
2020-04-07 20:11:21 +00:00
|
|
|
typedef struct nastavenia_aplikacie {
|
2020-05-06 10:46:52 +00:00
|
|
|
typ_aplikacie typ_a;
|
2020-04-16 09:25:05 +00:00
|
|
|
char typ_vypoctu[32];
|
2020-05-06 10:46:52 +00:00
|
|
|
hashovacia_funkcia h_funkcia;
|
|
|
|
crc_funkcia c_funkcia;
|
|
|
|
//Pozn.
|
|
|
|
//Dalej rozsiritelne o napr. ukladanie bezpecnostnych parametrov
|
|
|
|
//(certifikaty, kluce, resp. vypocitane crc, mac kody a podobne)
|
2020-04-07 20:11:21 +00:00
|
|
|
} nastavenia_aplikacie;
|
2020-03-19 12:55:34 +00:00
|
|
|
|
2020-03-12 16:22:08 +00:00
|
|
|
/**
|
2020-05-06 10:46:52 +00:00
|
|
|
* generovat_kontrolny_sucet_suboru: realizuje vypocet kontrolneho suctu zo suboru, ktoreho lokacia je predana v argumente
|
2020-03-19 12:55:34 +00:00
|
|
|
* @parameter char* funkcia : nazov funkcie pre vypocet kontrolneho suctu
|
2020-03-12 16:22:08 +00:00
|
|
|
* @parameter char* cesta : lokacia suboru
|
2020-03-19 12:55:34 +00:00
|
|
|
* @parameter int* velkost : uklada velkost kontrolneho suctu, ktoreho hodnota sa dynamicky priradi
|
|
|
|
* na zaklade nazvu funkcie uvedenom v prvom argumente
|
2020-05-06 10:46:52 +00:00
|
|
|
* @vrati smernik na vygenerovany kontrolny sucet
|
|
|
|
* Poznamka:
|
|
|
|
* funkcia dynamicky alokuje pamat o velkosti, ktora zavisi od nastavenej crc/hash funkcie v nastaveniach,
|
|
|
|
* takze tuto pamat je nutne nasledne dealokovat manualne
|
2020-03-12 16:22:08 +00:00
|
|
|
*/
|
2020-05-06 10:46:52 +00:00
|
|
|
unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int* velkost);
|
2020-03-12 16:22:08 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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);
|
2020-03-11 21:01:54 +00:00
|
|
|
|
2020-03-19 12:55:34 +00:00
|
|
|
/**
|
|
|
|
* generovat_rsa_ziadost: realizuje vygenerovania sukromneho kluca, vygenerovanie a podpis ziadosti
|
|
|
|
* @parameter int pocet_bitov : velkost kluca
|
2020-04-16 09:25:05 +00:00
|
|
|
* @parameter int exponent : hodnota exponentu
|
2020-03-19 12:55:34 +00:00
|
|
|
* @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);
|
|
|
|
|
2020-03-11 21:01:54 +00:00
|
|
|
/**
|
|
|
|
* 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);
|
|
|
|
|
2020-05-06 10:46:52 +00:00
|
|
|
/**
|
|
|
|
* nastav_typ_aplikacie: umoznuje nastavit typ aplikacie
|
|
|
|
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie
|
|
|
|
* @parameter typ_aplikacie typ: umoznuje nastavit typ aplikacie
|
|
|
|
moznosti: klient, server
|
|
|
|
*/
|
|
|
|
void nastav_typ_aplikacie(nastavenia_aplikacie* nastavenia, typ_aplikacie typ);
|
2020-04-07 20:11:21 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* nastav_funkciu: nastavi hashovaciu funkciu ktora bude pouzita pri vypocte kontrolneho suctu suboru
|
2020-05-06 10:46:52 +00:00
|
|
|
* @parameter nastavenia_aplikacie* nastavenia: reprezentuje nastavenia aplikacie
|
2020-04-16 09:25:05 +00:00
|
|
|
* @parameter char* typ_vypoctu : umoznuje vyber medzi "crc" a "hash" kontrolnym suctom
|
2020-05-06 10:46:52 +00:00
|
|
|
* @paramater hashovacia_funkcia h_funkcia : nazov hashovacej funkcie
|
2020-04-07 20:11:21 +00:00
|
|
|
moznosti: funkcia_SHA, funkcia_SHA224, funkcia_SHA256, funkcia_SHA384, funkcia_SHA512, funkcia_BLAKE2B, funkcia_RIPEMD160
|
2020-05-06 10:46:52 +00:00
|
|
|
* @parameter crc_funkcia c_funkcia : nazov crc funkcie
|
|
|
|
moznosti: funkcia_CRC32
|
2020-04-07 20:11:21 +00:00
|
|
|
*/
|
2020-05-06 10:46:52 +00:00
|
|
|
void nastav_funkciu(nastavenia_aplikacie* nastavenia, char* typ_vypoctu, hashovacia_funkcia h_funkcia, crc_funkcia c_funkcia);
|
2020-04-07 20:11:21 +00:00
|
|
|
|
2020-03-11 21:01:54 +00:00
|
|
|
/**
|
|
|
|
* 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
|