-
This commit is contained in:
parent
676912ea1a
commit
e532cee113
@ -10,6 +10,7 @@
|
||||
#include "kryptografia.h"
|
||||
|
||||
hashovacia_funkcia h_funkcia;
|
||||
int rs232_rozhranie;
|
||||
|
||||
void nastav_funkciu(hashovacia_funkcia funkcia)
|
||||
{
|
||||
@ -285,3 +286,16 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,8 @@
|
||||
#include <wolfssl/ssl.h>
|
||||
|
||||
#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
|
||||
@ -38,11 +40,17 @@
|
||||
#else
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/file.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <termios.h>
|
||||
#include <fcntl.h>
|
||||
#include <limits.h>
|
||||
#define ukoncit_soket close
|
||||
#endif
|
||||
|
||||
@ -71,26 +79,9 @@ int cakat_na_komunikaciu(int cislo_portu);
|
||||
// RS232 KOMUNIKACNY KANAL //
|
||||
/////////////////////////////
|
||||
|
||||
/**
|
||||
* 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);
|
||||
int rs232_otvorit_rozhranie(int cislo_rozhrania, int rychlost, const char* rezim, int riadenie_toku_dat);
|
||||
|
||||
|
||||
/**
|
||||
* 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 //
|
||||
|
@ -860,14 +860,3 @@ int RS232_GetPortnr(const char *devname)
|
||||
|
||||
return -1; /* device not found */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
##################################################
|
||||
## Bakalarska praca ##
|
||||
## Meno studenta: Tomas Lukac ##
|
||||
## Veduci BP: prof. Ing. Milos Drutarovsky CSc. ##
|
||||
@ -11,31 +10,45 @@ CC = gcc
|
||||
|
||||
#prepinace pre prekladac
|
||||
CFLAGS = -Wcpp -I./../wolfssl_hlavickove_subory/
|
||||
LIB32 = -L. -lwolfssl -lws2_32 -Os
|
||||
LIB64 = -L. -lwolfssl -lws2_32 -m64
|
||||
LIB = -L. -lwolfssl
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
$(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
|
||||
$(CC) -c klient.c $(LIB32)
|
||||
$(CC) $(CFLAGS) -c klient.c $(LIB)
|
||||
|
||||
server.o: server.c
|
||||
$(CC) -c server.c $(LIB32)
|
||||
$(CC) $(CFLAGS) -c server.c $(LIB)
|
||||
|
||||
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
|
||||
$(CC) -c ../kniznica/komunikacia.c $(LIB32)
|
||||
$(CC) $(CFLAGS) -c ../kniznica/komunikacia.c $(LIB)
|
||||
|
||||
rs232.o: ../kniznica/rs232.c ../kniznica/rs232.h
|
||||
$(CC) -c ../kniznica/rs232.c $(LIB32)
|
||||
$(CC) $(CFLAGS) -c ../kniznica/rs232.c $(LIB)
|
||||
|
||||
.PHONY: clean
|
||||
|
||||
|
@ -9,46 +9,76 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
#include <wolfssl/certs_test.h>
|
||||
#include <wolfssl/wolfcrypt/types.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#define O_NOCTTY 0
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "../kniznica/kryptografia.h"
|
||||
#include "../kniznica/komunikacia.h"
|
||||
#include "../kniznica/rs232.h"
|
||||
|
||||
int cislo_portu = 2;
|
||||
int baud_frekvencia = 9600;
|
||||
char rezim[]={'8','N','1', 0};
|
||||
int rs232_poslat;
|
||||
int rs232_prijat;
|
||||
|
||||
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[])
|
||||
{
|
||||
char rezim[]={'8','N','1', 0};
|
||||
int cislo_rozhrania = 4;
|
||||
int rychlost = 9600;
|
||||
WOLFSSL *ssl;
|
||||
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)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
const char* subor_certifikat = "../certifikaty/klient.pem";
|
||||
const char* subor_kluc = "../certifikaty/klient.key";
|
||||
if(!nacitat_certifikaty(ctx, subor_certifikat, subor_kluc)) 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;
|
||||
|
||||
wolfSSL_SetIOSend(ctx, rs232_zapis);
|
||||
wolfSSL_SetIORecv(ctx, rs232_citanie);
|
||||
|
||||
|
||||
if ((ssl = wolfSSL_new(ctx)) == NULL)
|
||||
{
|
||||
printf("Nepodarilo sa vytvorit ssl relaciu\n");
|
||||
@ -56,16 +86,30 @@ int main(int argc, char const *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
wolfSSL_set_fd(ssl, *(int*)ctx);
|
||||
wolfSSL_set_using_nonblock(ssl, *(int*)ctx);
|
||||
wolfSSL_set_fd(ssl, rs232_prijat);
|
||||
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
|
||||
|
||||
int uspech = 0;
|
||||
if(wolfSSL_connect(ssl) != SSL_SUCCESS)
|
||||
printf("bol som tu\n");
|
||||
|
||||
while(uspech != SSL_SUCCESS)
|
||||
{
|
||||
uspech |= wolfSSL_connect(ssl);
|
||||
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;
|
||||
}
|
BIN
rs232_kanal/klient.txt
Normal file
BIN
rs232_kanal/klient.txt
Normal file
Binary file not shown.
@ -9,42 +9,71 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wolfssl/wolfcrypt/settings.h>
|
||||
#include <wolfssl/ssl.h>
|
||||
#include <wolfssl/certs_test.h>
|
||||
#include <wolfssl/wolfcrypt/types.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#include <io.h>
|
||||
#include <fcntl.h>
|
||||
#define O_NOCTTY 0
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include "../kniznica/kryptografia.h"
|
||||
#include "../kniznica/komunikacia.h"
|
||||
#include "../kniznica/rs232.h"
|
||||
|
||||
int cislo_portu = 3;
|
||||
int baud_frekvencia = 9600;
|
||||
char rezim[]={'8','N','1', 0};
|
||||
int rs232_poslat;
|
||||
int rs232_prijat;
|
||||
|
||||
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[])
|
||||
{
|
||||
WOLFSSL *ssl;
|
||||
WOLFSSL_CTX *ctx = NULL;
|
||||
int cislo_rozhrania = 5;
|
||||
int rychlost = 9600;
|
||||
char rezim[]={'8','N','1', 0};
|
||||
|
||||
//otvorenie portu pre citanie
|
||||
if(RS232_OpenComport(cislo_portu, baud_frekvencia, rezim, 1))
|
||||
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);
|
||||
|
||||
|
||||
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)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
const char* subor_certifikat = "../certifikaty/klient.pem";
|
||||
const char* subor_kluc = "../certifikaty/klient.key";
|
||||
if(!nacitat_certifikaty(ctx, subor_certifikat, subor_kluc)) 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;
|
||||
|
||||
wolfSSL_SetIOSend(ctx, rs232_zapis);
|
||||
wolfSSL_SetIORecv(ctx, rs232_citanie);
|
||||
@ -56,13 +85,23 @@ int main(int argc, char const *argv[])
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ret;
|
||||
if(wolfSSL_accept(ssl) == -1)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
wolfSSL_set_fd(ssl, rs232_prijat);
|
||||
wolfSSL_set_using_nonblock(ssl, rs232_prijat);
|
||||
|
||||
RS232_CloseComport(cislo_portu);
|
||||
printf("bol som tu\n");
|
||||
while(uspech != SSL_SUCCESS)
|
||||
{
|
||||
uspech = wolfSSL_accept(ssl);
|
||||
printf("%d\n", uspech);
|
||||
}
|
||||
printf("bol som aj tu tu\n");
|
||||
|
||||
|
||||
char sprava[100];
|
||||
wolfSSL_read(ssl, sprava, 10);
|
||||
printf("%s\n", sprava);
|
||||
|
||||
RS232_CloseComport(cislo_rozhrania);
|
||||
|
||||
return 0;
|
||||
}
|
BIN
rs232_kanal/server.txt
Normal file
BIN
rs232_kanal/server.txt
Normal file
Binary file not shown.
Binary file not shown.
BIN
rs232_kanal/wolfssl_32.dll
Normal file
BIN
rs232_kanal/wolfssl_32.dll
Normal file
Binary file not shown.
Binary file not shown.
19
teoria/serial.txt
Normal file
19
teoria/serial.txt
Normal 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
|
Loading…
Reference in New Issue
Block a user