-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathHMAC.c
71 lines (56 loc) · 1.92 KB
/
HMAC.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
65
66
67
68
69
70
#include <stdio.h>
#include <string.h>
#include <openssl/hmac.h>
unsigned char* generate_hmac(unsigned char *key, unsigned char *data) {
unsigned char* hmac;
hmac = HMAC(EVP_sha256(), key, strlen((const char *)key), data, strlen((const char *)data), NULL, NULL);
return hmac;
}
int compare_hmac(unsigned char *key, unsigned char *data, unsigned char *hmac) {
unsigned char* new_hmac;
new_hmac = generate_hmac(key, data);
for(int i = 0; i < 32; i++) {
if (hmac[i] != new_hmac[i]){
return 0;
}
}
return 1;
}
// int main() {
// // Secret key
// char key[] = "012345678";
// // Encrypted data to be hashed using HMAC
// char data[] = "hello world";
// unsigned char *hmac = (unsigned char*)malloc(sizeof(char) * 32);
// unsigned char *old_hmac = (unsigned char*)malloc(sizeof(char) * 32);
// hmac = generate_hmac((unsigned char *)key, (unsigned char *)data);
// //char mdString[32];
// //for(int i = 0; i < 32; i++)
// // sprintf(&mdString[i*2], "%02x", (unsigned int)hmac[i]);
// //printf("HMAC: %s\n", mdString);
// // Compare HMAC
// memcpy(old_hmac, hmac, 32);
// char fkey[] = "000000000";
// char fdata[] = "world hello";
// if(compare_hmac((unsigned char *)key, (unsigned char *)data, old_hmac)){
// printf("CORRECT \n");
// } else {
// printf("WRONG\n");
// }
// if(compare_hmac((unsigned char *)fkey, (unsigned char *)data, old_hmac)){
// printf("WRONG\n");
// } else {
// printf("CORRECT\n");
// }
// if(compare_hmac((unsigned char *)key, (unsigned char *)fdata, old_hmac)){
// printf("WRONG\n");
// } else {
// printf("CORRECT\n");
// }
// if(compare_hmac((unsigned char *)fkey, (unsigned char *)fdata, old_hmac)){
// printf("WRONG\n");
// } else {
// printf("CORRECT\n");
// }
// return 0;
// }