refaktorizacia rs232 i/o a posielanie velkych suborov

This commit is contained in:
tom_win 2020-05-10 12:09:08 +02:00
parent cebf6f43af
commit e82eace59d
12 changed files with 216 additions and 124 deletions

View File

@ -58,6 +58,11 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_a
//nastavi ukazovatel na zaciatok suboru //nastavi ukazovatel na zaciatok suboru
//a nacita data zo suboru do pola //a nacita data zo suboru do pola
unsigned char* pole = calloc(velkost, sizeof(unsigned char)); unsigned char* pole = calloc(velkost, sizeof(unsigned char));
if(pole == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre pole\n");
return -1;
}
fseek(subor, 0, SEEK_SET); fseek(subor, 0, SEEK_SET);
fread((unsigned char*)pole, 1, velkost, subor); fread((unsigned char*)pole, 1, velkost, subor);
@ -65,7 +70,7 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_a
uspech = 0; uspech = 0;
while(uspech < velkost) while(uspech < velkost)
{ {
uspech = wolfSSL_write(ssl, (unsigned char*)pole, velkost); uspech = wolfSSL_write(ssl, pole, velkost);
if(uspech <= 0) if(uspech <= 0)
{ {
fprintf(stderr, "Nastala chyba pri posielani suboru.\n"); fprintf(stderr, "Nastala chyba pri posielani suboru.\n");
@ -75,23 +80,17 @@ int poslat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, const char* cesta, nastavenia_a
printf("Subor bol uspesne odoslany.\n"); printf("Subor bol uspesne odoslany.\n");
//generovanie a poslanie kontrolneho suctu serveru pre kontrolu //generovanie a poslanie kontrolneho suctu serveru pre kontrolu
byte* kontrolny_sucet; unsigned char* kontrolny_sucet;
int velkost_kontrolneho_suctu; int velkost_kontrolneho_suctu;
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, &velkost_kontrolneho_suctu); kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, velkost, &velkost_kontrolneho_suctu);
uspech = 0; uspech = 0;
while(uspech < velkost_kontrolneho_suctu) while(uspech < velkost_kontrolneho_suctu)
{ {
uspech = wolfSSL_write(ssl, kontrolny_sucet, velkost_kontrolneho_suctu); uspech = wolfSSL_write(ssl, kontrolny_sucet, velkost_kontrolneho_suctu);
if(uspech <= 0)
{
fprintf(stderr, "Nastala chyba pri posielani kontrolneho suctu.\n");
return -1;
}
} }
free(kontrolny_sucet); free(kontrolny_sucet);
fclose(subor); fclose(subor);
free(pole);
return 0; return 0;
} }
} }
@ -141,27 +140,36 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
//prijem jednotlivych bajtov //prijem jednotlivych bajtov
unsigned char* pole = calloc(velkost, sizeof(unsigned char)); unsigned char* pole = calloc(velkost, sizeof(unsigned char));
uspech = 0; if(pole == NULL)
while(uspech < velkost)
{ {
uspech = wolfSSL_read(ssl, (unsigned char*)pole, velkost); fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre pole\n");
return -1;
}
unsigned char* pole_uk = pole;
uspech = 0;
for(int i = 0; i < (velkost/16384) + 1; ++i)
{
uspech = wolfSSL_read(ssl, pole_uk, velkost);
pole_uk += 16384;
if(uspech <= 0) if(uspech <= 0)
{ {
fprintf(stderr, "Nastala chyba pri prijatii suboru.\n"); fprintf(stderr, "Nastala chyba pri posielani suboru.\n");
return -1; return -1;
} }
} }
printf("Subor bol uspesne prijaty.\n"); printf("Subor bol uspesne prijaty.\n");
//vypocet vlastneho kontrolneho suctu //vypocet vlastneho kontrolneho suctu
byte* kontrolny_sucet; unsigned char* kontrolny_sucet;
int velkost_kontrolneho_suctu; int velkost_kontrolneho_suctu;
FILE *subor = fopen(cesta, "wb+"); FILE *subor = fopen(cesta, "wb+");
int n = fwrite((unsigned char*)pole, 1, velkost, subor); int n = fwrite((unsigned char*)pole, 1, velkost, subor);
fclose(subor); fclose(subor);
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, &velkost_kontrolneho_suctu);
kontrolny_sucet = generovat_kontrolny_sucet_suboru(nastavenia, cesta, velkost, &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));
@ -189,11 +197,7 @@ int prijat_subor(WOLFSSL* ssl, WOLFSSL_CTX* ctx, nastavenia_aplikacie* nastaveni
printf("Subor neprisiel v poriadku alebo neboli pouzite rovnake funkcie.\n"); printf("Subor neprisiel v poriadku alebo neboli pouzite rovnake funkcie.\n");
return -1; return -1;
} }
char*data = calloc(100, sizeof(char));
uspech = wolfSSL_read(ssl, data, 100);
free(data);
free(cesta); free(cesta);
free(velkost_suboru); free(velkost_suboru);
free(kontrolny_sucet); free(kontrolny_sucet);
@ -345,8 +349,7 @@ int rs232_odoslat_spravu(int cislo_rozhrania, char* sprava, int velkost_spravy)
int odoslane_data = 0; int odoslane_data = 0;
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy //kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA}; unsigned char kontrolny_vzor[] = {0xAA, 0xAA, 0xAA, 0xAA};
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB};
//vytvorenie bajtov ktore budu niest informaciu o velkosti posielanej spravy //vytvorenie bajtov ktore budu niest informaciu o velkosti posielanej spravy
unsigned char* velkost_spravy_hex = calloc(4, sizeof(unsigned char)); unsigned char* velkost_spravy_hex = calloc(4, sizeof(unsigned char));
@ -354,30 +357,60 @@ int rs232_odoslat_spravu(int cislo_rozhrania, char* sprava, int velkost_spravy)
velkost_spravy_hex[1] = (velkost_spravy >> 16) & 0xFF; velkost_spravy_hex[1] = (velkost_spravy >> 16) & 0xFF;
velkost_spravy_hex[2] = (velkost_spravy >> 8) & 0xFF; velkost_spravy_hex[2] = (velkost_spravy >> 8) & 0xFF;
velkost_spravy_hex[3] = velkost_spravy & 0xFF; velkost_spravy_hex[3] = velkost_spravy & 0xFF;
//vypocet kontrolneho suctu spravy
unsigned int kontrolny_sucet = crc32(0L, Z_NULL, 0);
if(velkost_spravy < 10)
{
kontrolny_sucet = crc32(kontrolny_sucet, (char*)sprava, velkost_spravy);
}
else
{
kontrolny_sucet = crc32(kontrolny_sucet, (char*)sprava, 10);
}
//vytvorenie bajtov ktore budu niest informaciu s kontrolnym suctom posielanej spravy
unsigned char* kontrolny_sucet_hex = calloc(4, sizeof(unsigned char));
kontrolny_sucet_hex[0] = (kontrolny_sucet >> 24) & 0xFF;
kontrolny_sucet_hex[1] = (kontrolny_sucet >> 16) & 0xFF;
kontrolny_sucet_hex[2] = (kontrolny_sucet >> 8) & 0xFF;
kontrolny_sucet_hex[3] = kontrolny_sucet & 0xFF;
//odoslanie kontrolnych vzorov, bajtov s velkostou spravy a samotnych dat na seriove rozhranie //odoslanie kontrolneho vzoru
uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)zaciatok_spravy, sizeof(zaciatok_spravy)); uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)kontrolny_vzor, 4);
if(uspech <= 0) if(uspech <= 0)
{ {
fprintf(stderr, "Nastala chyba pri odoslani kontrolneho vzoru\n"); fprintf(stderr, "Nastala chyba pri odoslani kontrolneho vzoru\n");
return -1; return -1;
} }
//odoslanie velkosti spravy
uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)velkost_spravy_hex, 4); uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)velkost_spravy_hex, 4);
if(uspech <= 0) if(uspech <= 0)
{ {
fprintf(stderr, "Nastala chyba pri odoslani kontrolneho vzoru\n"); fprintf(stderr, "Nastala chyba pri odoslani velkosti spravy\n");
return -1; return -1;
} }
odoslane_data = (int)RS232_SendBuf(cislo_rozhrania, (unsigned char*)sprava, velkost_spravy);
RS232_SendBuf(cislo_rozhrania, (unsigned char*)koniec_spravy, sizeof(koniec_spravy)); //odoslanie kontrolneho suctu
uspech = RS232_SendBuf(cislo_rozhrania, (unsigned char*)kontrolny_sucet_hex, 4);
if(uspech <= 0) if(uspech <= 0)
{ {
fprintf(stderr, "Nastala chyba pri odoslani kontrolneho vzoru\n"); fprintf(stderr, "Nastala chyba pri odoslani kontrolneho suctu\n");
return -1;
}
//odoslanie dat
odoslane_data = RS232_SendBuf(cislo_rozhrania, (unsigned char*)sprava, velkost_spravy);
if(odoslane_data <= 0 || odoslane_data != velkost_spravy)
{
fprintf(stderr, "Nastala chyba pri odoslani dat\n");
return -1; return -1;
} }
free(velkost_spravy_hex); free(velkost_spravy_hex);
free(kontrolny_sucet_hex);
return odoslane_data; return odoslane_data;
} }
int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor) int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor)
@ -387,103 +420,124 @@ int rs232_prijat_spravu(int cislo_rozhrania, const char* komunikacny_subor)
FILE* subor = fopen(komunikacny_subor, "ab+"); FILE* subor = fopen(komunikacny_subor, "ab+");
int uspech = 0; int uspech = 0;
int prebieha_nacitanie = 0;
int prebieha_nacitanie_velkosti_spravy = 0; int prebieha_nacitanie_velkosti_spravy = 0;
int prebieha_nacitanie_kontrolneho_suctu = 0;
int prebieha_nacitanie_dat = 0;
unsigned char znak; unsigned char znak;
//mnozstvo nacitanych dat //mnozstvo nacitanych dat
int nacitane_data = 0; int nacitane_data = 0;
//velkost spravy, ktora sa bude prijmat //velkost spravy, ktora sa bude prijmat
int velkost_spravy = 0; int velkost_spravy = 0;
unsigned char velkost_spravy_hex[4];
//urcuje kolko bajtov z informacie o velkosti spravy //urcuje kolko bajtov z informacie o velkosti spravy
//uz bolo prijatych z celkoveho poctu (4) //uz bolo prijatych z celkoveho poctu (4)
int velkost_spravy_bajt = 0; int velkost_spravy_pozicia = 0;
int velkost_spravy_pocet_bajtov = 4;
//kontrolne vzory, ktore jednoznacne identifikuju zaciatok a koniec spravy //kontrolny sucet, ktory sa bude prijimat
unsigned char zaciatok_spravy[] = {0xAA, 0xAA, 0xAA, 0xAA}; int kontrolny_sucet = 0;
int zaciatok_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore unsigned char kontrolny_sucet_hex[4];
unsigned char koniec_spravy[] = {0xBB, 0xBB, 0xBB, 0xBB}; //urcuje kolko bajtov z kontrolneho suctu
int koniec_spravy_pozicia = 0; //aktualna pozicia v kontrolnom vzore //uz bolo prijatych z celkoveho poctu (4)
int velkost_kontrolneho_vzoru = sizeof(zaciatok_spravy)/sizeof(zaciatok_spravy[0]); int kontrolny_sucet_pozicia = 0;
unsigned char* prijate_data;
//kontrolny vzor ktory jednoznacne identifikuje zaciatok spravy
unsigned char kontrolny_vzor[] = {0xAA, 0xAA, 0xAA, 0xAA};
int kontrolny_vzor_pozicia = 0; //aktualna pozicia v kontrolnom vzore
int velkost_kontrolneho_vzoru = sizeof(kontrolny_vzor)/sizeof(kontrolny_vzor[0]);
while(1) while(1)
{ {
uspech = RS232_PollComport(cislo_rozhrania, &znak, 1); uspech = RS232_PollComport(cislo_rozhrania, &znak, 1);
if(uspech > 0) if(uspech > 0)
{ {
//ak nacitanie spravy este nezacalo, ale bol najdeny bajt, ktory je sucastou kontrolneho vzoru, //nacitanie kontrolneho vzoru
//ktory urcuje zaciatok spravy, posun sa v kontrolnom vzore o jednu poziciu a cakaj ci nebudu if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie_dat && !prebieha_nacitanie_kontrolneho_suctu &&
//prichadzat dalsie bajty z tohto kontrolneho vzoru znak == kontrolny_vzor[kontrolny_vzor_pozicia])
if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) &&
(zaciatok_spravy_pozicia < velkost_kontrolneho_vzoru - 1))
{ {
zaciatok_spravy_pozicia++; kontrolny_vzor_pozicia++;
} if(kontrolny_vzor_pozicia == 4)
//ak prebehlo nacitanie vsetkych bajtov, ktore su sucastou kontrolneho vzoru urcujuceho zaciatok spravy
//ocakavaj prichod bajtov, ktore budu niest informaciu o velkosti spravy
else if(!prebieha_nacitanie && (znak == zaciatok_spravy[zaciatok_spravy_pozicia]) &&
(zaciatok_spravy_pozicia == velkost_kontrolneho_vzoru - 1))
{
prebieha_nacitanie_velkosti_spravy = 1;
zaciatok_spravy_pozicia = 0;
}
//pokracuj v nacitavani bajtov urcujucich velkost spravy, dokym nie su vsetky nacitane
//a po nacitani vsetkych bajtov moze zacat nacitanie spravy
else if(!prebieha_nacitanie && prebieha_nacitanie_velkosti_spravy)
{
velkost_spravy_bajt++;
if(velkost_spravy_bajt == velkost_spravy_pocet_bajtov)
{ {
prebieha_nacitanie = 1; prebieha_nacitanie_velkosti_spravy = 1;
kontrolny_vzor_pozicia = 0;
}
}
//nacitanie velkosti spravy
else if(!prebieha_nacitanie_dat && prebieha_nacitanie_velkosti_spravy)
{
velkost_spravy_hex[velkost_spravy_pozicia] = znak;
velkost_spravy_pozicia++;
if(velkost_spravy_pozicia == 4)
{
velkost_spravy = (uint32_t)velkost_spravy_hex[0] << 24 | (uint32_t)velkost_spravy_hex[1] << 16 |
(uint32_t)velkost_spravy_hex[2] << 8 | (uint32_t)velkost_spravy_hex[3];
prebieha_nacitanie_kontrolneho_suctu = 1;
prebieha_nacitanie_velkosti_spravy = 0;
prijate_data = calloc(velkost_spravy, sizeof(unsigned char));
if(prijate_data == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre prijate_data\n");
return -1;
}
}
}
//nacitanie kontrolneho vzoru
else if(!prebieha_nacitanie_dat && prebieha_nacitanie_kontrolneho_suctu)
{
kontrolny_sucet_hex[kontrolny_sucet_pozicia] = znak;
kontrolny_sucet_pozicia++;
if(kontrolny_sucet_pozicia == 4)
{
kontrolny_sucet = (uint32_t)kontrolny_sucet_hex[0] << 24 | (uint32_t)kontrolny_sucet_hex[1] << 16 |
(uint32_t)kontrolny_sucet_hex[2] << 8 | (uint32_t)kontrolny_sucet_hex[3];
prebieha_nacitanie_dat = 1;
prebieha_nacitanie_velkosti_spravy = 0; prebieha_nacitanie_velkosti_spravy = 0;
} }
} }
//ak prebieha nacitanie a bol najdeny bajt, ktory je sucastou kontrolneho vzoru, ktory urcuje koniec spravy, //nacitanie dat
//posun sa v kontrolnom vzore o jednu poziciu a cakaj ci nebudu prichadzat dalsie bajty z tohto kontrolneho vzoru
else if((prebieha_nacitanie && (znak == koniec_spravy[koniec_spravy_pozicia]) &&
(koniec_spravy_pozicia == 0)) || (!prebieha_nacitanie && (znak == koniec_spravy[koniec_spravy_pozicia]) &&
(koniec_spravy_pozicia < velkost_kontrolneho_vzoru - 1)))
{
koniec_spravy_pozicia++;
prebieha_nacitanie = 0;
}
//v pripade ak zacalo nacitanie kontrolneho vzoru, ktory urcuje koniec spravy, ale nebol najdeny posledny znak z tohto vzoru
//nacitaj do suboru docasne nezapisane znaky, ktore su sucastou kontrolneho vzoru a zaroven nacitaj aktualny znak
else if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie && znak != koniec_spravy[koniec_spravy_pozicia])
{
for(int i = 0; i < koniec_spravy_pozicia; i++)
{
fwrite((char*)&koniec_spravy[i], 1, uspech, subor);
nacitane_data += uspech;
}
fwrite((char*)&znak, 1, uspech, subor);
nacitane_data += uspech;
koniec_spravy_pozicia = 0;
prebieha_nacitanie = 1;
}
//ak prebehlo nacitanie vsetkych bajtov, ktore su sucastou kontrolneho vzoru urcujuceho koniec spravy
//ukonci nacitanie spravy
else if(!prebieha_nacitanie_velkosti_spravy && !prebieha_nacitanie && (znak == koniec_spravy[0]) &&
(koniec_spravy_pozicia == 3))
{
prebieha_nacitanie = 0;
koniec_spravy_pozicia = 0;
break;
}
//inak prebieha nacitanie, cize zapis aktualny znak (bajt) do suboru
else else
{ {
if(prebieha_nacitanie && !prebieha_nacitanie_velkosti_spravy) if(prebieha_nacitanie_dat)
{ {
fwrite((char*)&znak, 1, uspech, subor); prijate_data[nacitane_data] = znak;
nacitane_data += uspech; nacitane_data += uspech;
if(nacitane_data == velkost_spravy) break;
} }
} }
} }
} }
//kontrola integrity prijatej spravy
//vypocet kontrolneho suctu prijatej spravy
unsigned int kontrolny_sucet_ps = crc32(0L, Z_NULL, 0);
if(velkost_spravy < 10)
{
kontrolny_sucet_ps = crc32(kontrolny_sucet_ps, (char*)prijate_data, velkost_spravy);
}
else
{
kontrolny_sucet_ps = crc32(kontrolny_sucet_ps, (char*)prijate_data, 10);
}
//porovnanie kontrolnych suctov
if(kontrolny_sucet_ps == kontrolny_sucet)
{
//ak sprava prisla v poriadku zapis nacitane data do suboru
fwrite((char*)prijate_data, 1, nacitane_data, subor);
}
else
{
printf("Sprava neprisla v poriadku");
return -1;
}
free(prijate_data);
fclose(subor); fclose(subor);
return nacitane_data; return nacitane_data;
} }

View File

@ -559,12 +559,12 @@ void zobraz_certifikat(WOLFSSL* ssl)
X509_free(certifikat); X509_free(certifikat);
} }
unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int* velkost) unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int velkost_suboru, int* velkost)
{ {
int pocet_bajtov; int pocet_bajtov;
FILE* subor = fopen(cesta, "rb"); FILE* subor = fopen(cesta, "rb");
unsigned char data[VELKOST_SUBORU]; unsigned char data[velkost_suboru];
memset(data, 0, VELKOST_SUBORU); memset(data, 0, velkost_suboru);
unsigned char* vysledok; unsigned char* vysledok;
if(!strcmp(nastavenia->typ_vypoctu, "crc")) if(!strcmp(nastavenia->typ_vypoctu, "crc"))
{ {
@ -572,6 +572,11 @@ unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia
{ {
*velkost = CRC32_VELKOST; *velkost = CRC32_VELKOST;
vysledok = calloc(CRC32_VELKOST, sizeof(unsigned char)); vysledok = calloc(CRC32_VELKOST, sizeof(unsigned char));
if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
unsigned int crc = crc32(0L, Z_NULL, 0); unsigned int crc = crc32(0L, Z_NULL, 0);
crc = crc32(crc, data, 10); crc = crc32(crc, data, 10);
sprintf(vysledok, "%u", crc); sprintf(vysledok, "%u", crc);
@ -588,9 +593,14 @@ unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia
{ {
*velkost = SHA_DIGEST_SIZE; *velkost = SHA_DIGEST_SIZE;
vysledok = calloc(SHA_DIGEST_SIZE, sizeof(unsigned char)); vysledok = calloc(SHA_DIGEST_SIZE, sizeof(unsigned char));
if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
Sha sha; Sha sha;
wc_InitSha(&sha); wc_InitSha(&sha);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_ShaUpdate(&sha, data, pocet_bajtov); wc_ShaUpdate(&sha, data, pocet_bajtov);
wc_ShaFinal(&sha, vysledok); wc_ShaFinal(&sha, vysledok);
} }
@ -598,9 +608,14 @@ unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia
{ {
*velkost = SHA224_DIGEST_SIZE; *velkost = SHA224_DIGEST_SIZE;
vysledok = calloc(SHA224_DIGEST_SIZE, sizeof(unsigned char)); vysledok = calloc(SHA224_DIGEST_SIZE, sizeof(unsigned char));
if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
Sha224 sha; Sha224 sha;
wc_InitSha224(&sha); wc_InitSha224(&sha);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_Sha224Update(&sha, data, pocet_bajtov); wc_Sha224Update(&sha, data, pocet_bajtov);
wc_Sha224Final(&sha, vysledok); wc_Sha224Final(&sha, vysledok);
} }
@ -608,49 +623,70 @@ unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia
{ {
*velkost = SHA256_DIGEST_SIZE; *velkost = SHA256_DIGEST_SIZE;
vysledok = calloc(SHA256_DIGEST_SIZE, sizeof(unsigned char)); vysledok = calloc(SHA256_DIGEST_SIZE, sizeof(unsigned char));
if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
Sha256 sha; Sha256 sha;
wc_InitSha256(&sha); wc_InitSha256(&sha);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_Sha256Update(&sha, data, pocet_bajtov); wc_Sha256Update(&sha, data, pocet_bajtov);
wc_Sha256Final(&sha, vysledok); wc_Sha256Final(&sha, vysledok);
} }
else if(nastavenia->h_funkcia == funkcia_SHA384) else if(nastavenia->h_funkcia == funkcia_SHA384)
{ {
*velkost = SHA384_DIGEST_SIZE; *velkost = SHA384_DIGEST_SIZE;
vysledok = calloc(SHA384_DIGEST_SIZE, sizeof(unsigned char)); if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
Sha384 sha; Sha384 sha;
wc_InitSha384(&sha); wc_InitSha384(&sha);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_Sha384Update(&sha, data, pocet_bajtov); wc_Sha384Update(&sha, data, pocet_bajtov);
wc_Sha384Final(&sha, vysledok); wc_Sha384Final(&sha, vysledok);
} }
else if(nastavenia->h_funkcia == funkcia_SHA512) else if(nastavenia->h_funkcia == funkcia_SHA512)
{ {
*velkost = WC_SHA512_DIGEST_SIZE; *velkost = WC_SHA512_DIGEST_SIZE;
vysledok = calloc(WC_SHA512_DIGEST_SIZE, sizeof(unsigned char)); if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
wc_Sha512 sha; wc_Sha512 sha;
wc_InitSha512(&sha); wc_InitSha512(&sha);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_Sha512Update(&sha, data, pocet_bajtov); wc_Sha512Update(&sha, data, pocet_bajtov);
wc_Sha512Final(&sha, vysledok); wc_Sha512Final(&sha, vysledok);
} }
else if(nastavenia->h_funkcia == funkcia_BLAKE2B) else if(nastavenia->h_funkcia == funkcia_BLAKE2B)
{ {
*velkost = BLAKE2B_VELKOST; *velkost = BLAKE2B_VELKOST;
vysledok = calloc(BLAKE2B_VELKOST, sizeof(unsigned char)); if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
Blake2b b2b; Blake2b b2b;
wc_InitBlake2b(&b2b, BLAKE2B_VELKOST); wc_InitBlake2b(&b2b, BLAKE2B_VELKOST);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_Blake2bUpdate(&b2b, data, pocet_bajtov); wc_Blake2bUpdate(&b2b, data, pocet_bajtov);
wc_Blake2bFinal(&b2b, vysledok, BLAKE2B_VELKOST); wc_Blake2bFinal(&b2b, vysledok, BLAKE2B_VELKOST);
} }
else if(nastavenia->h_funkcia == funkcia_RIPEMD160) else if(nastavenia->h_funkcia == funkcia_RIPEMD160)
{ {
*velkost = RIPEMD_DIGEST_SIZE; *velkost = RIPEMD_DIGEST_SIZE;
vysledok = calloc(RIPEMD_DIGEST_SIZE, sizeof(unsigned char)); if(vysledok == NULL)
{
fprintf(stderr, "Nepodarilo sa dynamicky alokovat pamat pre vysledok\n");
return NULL;
}
RipeMd ripemd; RipeMd ripemd;
wc_InitRipeMd(&ripemd); wc_InitRipeMd(&ripemd);
while ((pocet_bajtov = fread (data, 1, VELKOST_SUBORU, subor)) != 0) while ((pocet_bajtov = fread (data, 1, velkost_suboru, subor)) != 0)
wc_RipeMdUpdate(&ripemd, data, pocet_bajtov); wc_RipeMdUpdate(&ripemd, data, pocet_bajtov);
wc_RipeMdFinal(&ripemd, vysledok); wc_RipeMdFinal(&ripemd, vysledok);
} }

View File

@ -27,7 +27,6 @@
#include <stdint.h> #include <stdint.h>
#define VELKOST_BUFFERA 4096 #define VELKOST_BUFFERA 4096
#define VELKOST_SUBORU 10000
#define CRC32_VELKOST 10 #define CRC32_VELKOST 10
#define BLAKE2B_VELKOST 64 #define BLAKE2B_VELKOST 64
@ -70,14 +69,15 @@ typedef struct nastavenia_aplikacie {
* generovat_kontrolny_sucet_suboru: realizuje vypocet kontrolneho suctu zo suboru, ktoreho lokacia je predana v argumente * generovat_kontrolny_sucet_suboru: realizuje vypocet kontrolneho suctu zo suboru, ktoreho lokacia je predana v argumente
* @parameter char* funkcia : nazov funkcie pre vypocet kontrolneho suctu * @parameter char* funkcia : nazov funkcie pre vypocet kontrolneho suctu
* @parameter char* cesta : lokacia suboru * @parameter char* cesta : lokacia suboru
* @parameter int* velkost : uklada velkost kontrolneho suctu, ktoreho hodnota sa dynamicky priradi * @parameter int velkost_suboru : velkost suboru
* @parameter int* velkost_suctu : uklada velkost kontrolneho suctu, ktoreho hodnota sa dynamicky priradi
* na zaklade nazvu funkcie uvedenom v prvom argumente * na zaklade nazvu funkcie uvedenom v prvom argumente
* @vrati smernik na vygenerovany kontrolny sucet * @vrati smernik na vygenerovany kontrolny sucet
* Poznamka: * Poznamka:
* funkcia dynamicky alokuje pamat o velkosti, ktora zavisi od nastavenej crc/hash funkcie v nastaveniach, * funkcia dynamicky alokuje pamat o velkosti, ktora zavisi od nastavenej crc/hash funkcie v nastaveniach,
* takze tuto pamat je nutne nasledne dealokovat manualne * takze tuto pamat je nutne nasledne dealokovat manualne
*/ */
unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int* velkost); unsigned char* generovat_kontrolny_sucet_suboru(nastavenia_aplikacie* nastavenia, const char* cesta, int velkost_suboru, int* velkost_suctu);
/** /**
* generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority, * generovat_ecc_certifikat: realizuje vygenerovania sukromneho kluca, nacitanie sukromneho kluca autority,

View File

@ -65,7 +65,7 @@ Externe kniznice
Pouzita verzia: 4.4.0 Pouzita verzia: 4.4.0
Viac informacii: https://www.wolfssl.com Viac informacii: https://www.wolfssl.com
3. ZLIB 3. ZLIB
Kniznica napisana v jazyku C, umoznujuca kompresiu a dekompresiu dat. Je to volny software Kniznica napisana v jazyku C, umoznujuca kompresiu a dekompresiu dat. Je to volny softver
s otvorenym zdrojovym kodom. V SSL/TLS knizniciach je casto vyuzivana na kompresiu TLS spojeni, s otvorenym zdrojovym kodom. V SSL/TLS knizniciach je casto vyuzivana na kompresiu TLS spojeni,
ale v mojej kniznici som ju pouzil na vypocet CRC32 kontrolneho suctu. ale v mojej kniznici som ju pouzil na vypocet CRC32 kontrolneho suctu.
Pouzita verzia: 1.2.11 Pouzita verzia: 1.2.11

View File

@ -82,7 +82,7 @@ int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
//poslanie dat na seriove rozhranie //poslanie dat na seriove rozhranie
odoslane_data = rs232_odoslat_spravu(cislo_rozhrania, buf, sz); odoslane_data = rs232_odoslat_spravu(cislo_rozhrania, buf, sz);
if(odoslane_data < 1) if(odoslane_data <= 0)
{ {
fprintf(stderr, "Nastala chyba pri posielani dat\n"); fprintf(stderr, "Nastala chyba pri posielani dat\n");
return -1; return -1;
@ -98,7 +98,7 @@ int main(int argc, char const *argv[])
char rezim[]={'8','N','1', 0}; char rezim[]={'8','N','1', 0};
//nastavenie rychlosti rozhrania v baudoch //nastavenie rychlosti rozhrania v baudoch
int rychlost = 9600; int rychlost = 128000;
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; WOLFSSL_CTX *ctx = NULL;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -13,4 +13,4 @@
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat :: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat
::Priklady spustenia: ::Priklady spustenia:
klient -port 4 -n rsa -s obr.jpg klient -port 4 -n rsa -s document.pdf

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -80,7 +80,7 @@ int rs232_zapis(WOLFSSL *ssl, char *buf, int sz, void *ctx)
//poslanie dat na seriove rozhranie //poslanie dat na seriove rozhranie
odoslane_data = rs232_odoslat_spravu(cislo_rozhrania, buf, sz); odoslane_data = rs232_odoslat_spravu(cislo_rozhrania, buf, sz);
if(odoslane_data < 1) if(odoslane_data <= 0)
{ {
fprintf(stderr, "Nastala chyba pri posielani dat\n"); fprintf(stderr, "Nastala chyba pri posielani dat\n");
return -1; return -1;
@ -96,7 +96,7 @@ int main(int argc, char const *argv[])
char rezim[]={'8','N','1', 0}; char rezim[]={'8','N','1', 0};
//nastavenie rychlosti rozhrania v baudoch //nastavenie rychlosti rozhrania v baudoch
int rychlost = 9600; int rychlost = 128000;
WOLFSSL *ssl; WOLFSSL *ssl;
WOLFSSL_CTX *ctx = NULL; WOLFSSL_CTX *ctx = NULL;
@ -104,8 +104,9 @@ int main(int argc, char const *argv[])
int generovanie_certifikatu = 0; int generovanie_certifikatu = 0;
int nacitanie_zo_suboru = 0; int nacitanie_zo_suboru = 0;
nastavenia_aplikacie nastavenia; nastavenia_aplikacie nastavenia;
k_subor = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY); k_subor = open(KOMUNIKACNY_SUBOR, O_RDWR | O_NOCTTY | O_NDELAY);
int uspech; int uspech;
if((ctx = nastavit_ctx_server()) == NULL) if((ctx = nastavit_ctx_server()) == NULL)
@ -259,6 +260,7 @@ int main(int argc, char const *argv[])
fclose(fopen(KOMUNIKACNY_SUBOR, "wb")); fclose(fopen(KOMUNIKACNY_SUBOR, "wb"));
return -1; return -1;
} }
cas = clock() - cas; cas = clock() - cas;
printf("Cas prenosu suboru: %f sekund\n", (double)cas/CLOCKS_PER_SEC); printf("Cas prenosu suboru: %f sekund\n", (double)cas/CLOCKS_PER_SEC);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@ -12,4 +12,4 @@
:: -s cesta-ku-suboru sluzi na nacitanie cesty k suboru, ktory chceme odoslat :: -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 -s obr.jpg klient -ip 127.0.0.1 -port 8080 -n rsa -s document.pdf

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB