-
Notifications
You must be signed in to change notification settings - Fork 0
/
Util.c
64 lines (46 loc) · 1.7 KB
/
Util.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "Util.h"
#include "md5.h"
#include "main.h"
#include "FileReader.h"
BYTE *getChecksumOfString(char *chars, long amount) {
MD5_CTX *ctx = malloc(sizeof(MD5_CTX));
md5_init(ctx);
if (!ctx) { // Avslutter om ctx-objekt er NULL
printf("ctx var NULL \n");
exit(1);
}
md5_update(ctx, (const BYTE *) chars, amount); // Lager Hash av fil
BYTE *hashBytes = malloc(16 * sizeof(BYTE));
md5_final(ctx, hashBytes);
free(ctx);
return hashBytes;
}
void printHash(BYTE *hash) {
int i;
for (i = 0; i < 16; i++)
printf("%02x", hash[i]);
printf("\n");
}
bool checkIfChecksumInEndOfFile(char *filename, char *lastPartOfFile) {
FILE *fr;
fr = fopen(filename, "r"); // åpner fil for å bli lest
long sizeOfHash = sizeof(lastPartOfFile)*4+1; // finner størrelsen av hashen som er
long sizeOfUnhashedFile = getSizeOfFile(filename) - sizeOfHash; //Kalkuler egen hash fra resten av filen
char *buffer;
buffer = (char *) malloc((sizeOfUnhashedFile + 1) * sizeof(BYTE)); // Allokerer nok minne for filen og \0
fread(buffer, sizeOfUnhashedFile, 1, fr); // Legger inn filen i det allokerte minnet
BYTE *ownHash;
ownHash = getChecksumOfString(buffer, sizeOfUnhashedFile);
free(buffer);
fclose(fr);
//Lagrer string representasjon av hash i variabel
char ownHashAsString[33];
for(int i =0; i<16; i++) {
sprintf(ownHashAsString+(i*2), "%02x", ownHash[i]);
}
ownHashAsString[33] = "\0";
if (strcmp(ownHashAsString, lastPartOfFile) == 0) {
return true;
}
return false;
}