This commit is contained in:
tom_win 2020-03-30 03:32:44 +02:00
parent 676912ea1a
commit e532cee113
12 changed files with 183 additions and 74 deletions

View File

@ -10,6 +10,7 @@
#include "kryptografia.h" #include "kryptografia.h"
hashovacia_funkcia h_funkcia; hashovacia_funkcia h_funkcia;
int rs232_rozhranie;
void nastav_funkciu(hashovacia_funkcia funkcia) void nastav_funkciu(hashovacia_funkcia funkcia)
{ {
@ -285,3 +286,16 @@ 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

@ -15,6 +15,8 @@
#include <wolfssl/ssl.h> #include <wolfssl/ssl.h>
#include "kryptografia.h" #include "kryptografia.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
@ -38,11 +40,17 @@
#else #else
#include <sys/types.h> #include <sys/types.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/file.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h> #include <netdb.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <termios.h>
#include <fcntl.h>
#include <limits.h>
#define ukoncit_soket close #define ukoncit_soket close
#endif #endif
@ -71,26 +79,9 @@ 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);
* rs232_zapis: umoznuje zapis dat do serialoveho portu
* @parameter WOLSSL* ssl : ukazuje na aktualnu relaciu
* @parameter char* buf : ukazuje na buffer, do kt. zapise wolfssl zasifrovany text na odoslanie
* @parameter int sz : velkost buffera
* @parameter void* ctx : ukazuje na WOLFSSL_CTX strukturu
* @vrati int
*/
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx);
/**
* rs232_citanie: umoznuje citanie dat zo serialoveho portu
* @parameter WOLFSSL* ssl : ukazuje na aktualnu relaciu
* @parameter char* buf : ukazuje na buffer, kde prichadzajuci zasifrovany text by mal byt nakopirovany
* aby ho wolfssl mohla odsifrovat
* @parameter int sz : velkost buffera
* @parameter void* ctx : ukazuje na WOLFSSL_CTX strukturu
* @vrati int
*/
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx);
////////////////////// //////////////////////
// PRACA SO SUBORMI // // PRACA SO SUBORMI //

View File

@ -859,15 +859,4 @@ int RS232_GetPortnr(const char *devname)
} }
return -1; /* device not found */ return -1; /* device not found */
} }

View File

@ -1,4 +1,3 @@
##################################################
## Bakalarska praca ## ## Bakalarska praca ##
## Meno studenta: Tomas Lukac ## ## Meno studenta: Tomas Lukac ##
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ## ## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
@ -11,31 +10,45 @@ CC = gcc
#prepinace pre prekladac #prepinace pre prekladac
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/ CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/
LIB32 = -L. -lwolfssl -lws2_32 -Os LIB = -L. -lwolfssl
LIB64 = -L. -lwolfssl -lws2_32 -m64
ifeq ($(OS), Windows_NT)
LIB += -lws2_32
ifeq ($(PROCESSOR_ARCHITECTURE), AMD64)
LIB += -m64
endif
ifeq ($(PROCESSOR_ARCHITECTURE), x86)
LIB += -Os
endif
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S), Linux)
LIB +=
endif
endif
all: klient server all: klient server
klient: klient.o kryptografia.o komunikacia.o rs232.o klient: klient.o kryptografia.o komunikacia.o rs232.o
$(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o rs232.o $(LIB32) $(CC) $(CFLAGS) -o klient klient.o kryptografia.o komunikacia.o rs232.o $(LIB)
server: server.o kryptografia.o komunikacia.o rs232.o server: server.o kryptografia.o komunikacia.o rs232.o
$(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o rs232.o $(LIB32) $(CC) $(CFLAGS) -o server server.o kryptografia.o komunikacia.o rs232.o $(LIB)
klient.o: klient.c klient.o: klient.c
$(CC) -c klient.c $(LIB32) $(CC) $(CFLAGS) -c klient.c $(LIB)
server.o: server.c server.o: server.c
$(CC) -c server.c $(LIB32) $(CC) $(CFLAGS) -c server.c $(LIB)
kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h kryptografia.o: ../kniznica/kryptografia.c ../kniznica/kryptografia.h
$(CC) -c ../kniznica/kryptografia.c $(LIB32) $(CC) $(CFLAGS) -c ../kniznica/kryptografia.c $(LIB)
komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h komunikacia.o: ../kniznica/komunikacia.c ../kniznica/komunikacia.h
$(CC) -c ../kniznica/komunikacia.c $(LIB32) $(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB)
rs232.o: ../kniznica/rs232.c ../kniznica/rs232.h rs232.o: ../kniznica/rs232.c ../kniznica/rs232.h
$(CC) -c ../kniznica/rs232.c $(LIB32) $(CC) $(CFLAGS) -c ../kniznica/rs232.c $(LIB)
.PHONY: clean .PHONY: clean

View File

@ -9,45 +9,75 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/ssl.h> #include <wolfssl/ssl.h>
#include <wolfssl/certs_test.h> #include <wolfssl/certs_test.h>
#include <wolfssl/wolfcrypt/types.h> #include <wolfssl/wolfcrypt/types.h>
#ifdef _WIN32 #ifdef _WIN32
#include <Windows.h> #include <Windows.h>
#include <io.h>
#include <fcntl.h>
#define O_NOCTTY 0
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
#include "../kniznica/kryptografia.h" #include "../kniznica/kryptografia.h"
#include "../kniznica/komunikacia.h"
#include "../kniznica/rs232.h" #include "../kniznica/rs232.h"
int cislo_portu = 2; int rs232_poslat;
int baud_frekvencia = 9600; int rs232_prijat;
char rezim[]={'8','N','1', 0};
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
(void)ssl;
(void)ctx;
int uspech = 0;
while(uspech <= 0)
{
uspech = (int)read(rs232_prijat, buf, (size_t)sz);
}
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);
return uspech;
}
int main(int argc, char const *argv[]) int main(int argc, char const *argv[])
{ {
char rezim[]={'8','N','1', 0};
int cislo_rozhrania = 4;
int rychlost = 9600;
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; WOLFSSL_CTX *ctx = NULL;
if(RS232_OpenComport(cislo_portu, baud_frekvencia, rezim, 1)) rs232_poslat = open("server.txt", O_WRONLY | O_NOCTTY);
rs232_prijat = open("klient.txt", O_RDONLY | O_NOCTTY);
int uspech;
/* uspech = rs232_otvorit_rozhranie(cislo_rozhrania, rychlost, rezim, 0);
if(uspech == -1)
{ {
printf("Nebolo mozne otvorit serialovy port\n"); return -1;
} }*/
if((ctx = nastavit_ctx_klient()) == NULL) if((ctx = nastavit_ctx_klient()) == NULL)
{ {
return -1; return -1;
} }
const char* subor_certifikat = "../certifikaty/klient.pem"; const char* subor_certifikat = "../certifikaty/klient/klient_rsa.pem";
const char* subor_kluc = "../certifikaty/klient.key"; const char* subor_kluc = "../certifikaty/klient/klient_rsa.key";
if(!nacitat_certifikaty(ctx, subor_certifikat, subor_kluc)) return -1; if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
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) if ((ssl = wolfSSL_new(ctx)) == NULL)
{ {
@ -56,16 +86,30 @@ int main(int argc, char const *argv[])
return -1; return -1;
} }
wolfSSL_set_fd(ssl, *(int*)ctx); wolfSSL_set_fd(ssl, rs232_prijat);
wolfSSL_set_using_nonblock(ssl, *(int*)ctx); wolfSSL_set_using_nonblock(ssl, rs232_prijat);
int uspech = 0; printf("bol som tu\n");
if(wolfSSL_connect(ssl) != SSL_SUCCESS)
while(uspech != SSL_SUCCESS)
{ {
printf("Nepodarilo sa pripojit%d\n", uspech); uspech |= wolfSSL_connect(ssl);
return -1; printf("bol sss\n");
if(uspech != SSL_SUCCESS)
{
printf("Nepodarilo sa pripojit%d\n", uspech);
return -1;
}
else
{
printf("oukej\n");
}
} }
printf("bol som aj tu tu\n");
RS232_CloseComport(cislo_portu);
wolfSSL_write(ssl, "nieco", 10);
RS232_CloseComport(cislo_rozhrania);
return 0; return 0;
} }

BIN
rs232_kanal/klient.txt Normal file

Binary file not shown.

View File

@ -9,42 +9,71 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <wolfssl/wolfcrypt/settings.h>
#include <wolfssl/ssl.h> #include <wolfssl/ssl.h>
#include <wolfssl/certs_test.h> #include <wolfssl/certs_test.h>
#include <wolfssl/wolfcrypt/types.h> #include <wolfssl/wolfcrypt/types.h>
#ifdef _WIN32 #ifdef _WIN32
#include <Windows.h> #include <Windows.h>
#include <io.h>
#include <fcntl.h>
#define O_NOCTTY 0
#else #else
#include <unistd.h> #include <unistd.h>
#endif #endif
#include "../kniznica/kryptografia.h" #include "../kniznica/kryptografia.h"
#include "../kniznica/komunikacia.h"
#include "../kniznica/rs232.h" #include "../kniznica/rs232.h"
int cislo_portu = 3; int rs232_poslat;
int baud_frekvencia = 9600; int rs232_prijat;
char rezim[]={'8','N','1', 0};
int rs232_citanie(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
int uspech = 0;
while(uspech <= 0)
{
uspech = read(rs232_prijat, buf, sz);
}
return uspech;
}
int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
{
int uspech = 0;
uspech = write(rs232_poslat, buf, sz);
return uspech;
}
int main(int argc, char const *argv[]) 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;
char rezim[]={'8','N','1', 0};
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);
//otvorenie portu pre citanie
if(RS232_OpenComport(cislo_portu, baud_frekvencia, rezim, 1)) int uspech;
/* uspech = rs232_otvorit_rozhranie(cislo_rozhrania, rychlost, rezim, 0);
if(uspech == -1)
{ {
printf("Nebolo mozne otvorit serialovy port\n"); return -1;
} }
*/
if((ctx = nastavit_ctx_server()) == NULL) if((ctx = nastavit_ctx_server()) == NULL)
{ {
return -1; return -1;
} }
const char* subor_certifikat = "../certifikaty/klient.pem"; const char* subor_certifikat = "../certifikaty/server/server_rsa.pem";
const char* subor_kluc = "../certifikaty/klient.key"; const char* subor_kluc = "../certifikaty/server/server_rsa.key";
if(!nacitat_certifikaty(ctx, subor_certifikat, subor_kluc)) return -1; if(nacitat_certifikaty(ctx, subor_certifikat, subor_kluc) == -1) return -1;
wolfSSL_SetIOSend(ctx, rs232_zapis); wolfSSL_SetIOSend(ctx, rs232_zapis);
wolfSSL_SetIORecv(ctx, rs232_citanie); wolfSSL_SetIORecv(ctx, rs232_citanie);
@ -56,13 +85,23 @@ int main(int argc, char const *argv[])
return -1; return -1;
} }
int ret; wolfSSL_set_fd(ssl, rs232_prijat);
if(wolfSSL_accept(ssl) == -1) wolfSSL_set_using_nonblock(ssl, rs232_prijat);
printf("bol som tu\n");
while(uspech != SSL_SUCCESS)
{ {
return -1; uspech = wolfSSL_accept(ssl);
printf("%d\n", uspech);
} }
printf("bol som aj tu tu\n");
RS232_CloseComport(cislo_portu);
char sprava[100];
wolfSSL_read(ssl, sprava, 10);
printf("%s\n", sprava);
RS232_CloseComport(cislo_rozhrania);
return 0; return 0;
} }

BIN
rs232_kanal/server.txt Normal file

Binary file not shown.

Binary file not shown.

BIN
rs232_kanal/wolfssl_32.dll Normal file

Binary file not shown.

Binary file not shown.

19
teoria/serial.txt Normal file
View File

@ -0,0 +1,19 @@
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