forked from airnavsystems/rbfeeder
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathairnav_sk.c
executable file
·141 lines (121 loc) · 4.22 KB
/
airnav_sk.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
* Copyright (c) 2020 - AirNav Systems
*
* https://www.radarbox.com
*
* More info: https://github.com/AirNav-Systems/rbfeeder
*
*/
#include "airnav_sk.h"
#include "airnav_utils.h"
#include "rbfeeder.pb-c.h"
#include "airnav_net.h"
/*
* Send key and version to server.
*/
int sendKey(void) {
if (airnav_socket == -1) {
airnav_log_level(5, "Socket not created!\n");
return 0;
}
airnav_log_level(3, "Sending key....\n");
ClientType client_type = getClientType();
char *cserial = NULL;
if (client_type == CLIENT_TYPE__RPI || client_type == CLIENT_TYPE__RBLC2 || client_type == CLIENT_TYPE__GENERIC_ARM_32 || client_type == CLIENT_TYPE__GENERIC_ARM_64) {
long long unsigned int cpuserial = getRpiSerial();
if (cpuserial != 0) {
cserial = malloc(60);
memset(cserial, 0, 60);
sprintf(cserial, "%016llx", cpuserial);
} else {
airnav_log("CPU Serial empty.\n");
return 0;
}
} else if (client_type == CLIENT_TYPE__PC_X64 || client_type == CLIENT_TYPE__PC_X86) {
cserial = net_get_mac_address(0);
} else {
airnav_log("Could not get any type of serial for SK validation\n");
return 0;
}
if (cserial == NULL) {
airnav_log("Could not get any type of serial for SK validation\n");
return 0;
} else if (strlen(cserial) < 10) {
airnav_log("Invalid CPU Serial size\n");
return 0;
}
struct prepared_packet *auth = create_packet_AuthFeederRequest(sharing_key, client_type, cserial);
net_send_packet(auth);
if (cserial != NULL) {
free(cserial);
cserial = NULL;
}
airnav_log_level(3, "Step 1 of sending key\n");
// Wait for reply from server
//
int reply = net_waitCmd(SERVER_REPLY__REPLY_STATUS__AUTH_OK, 2);
airnav_log_level(3, "WaitCMD done!\n");
if (reply == SERVER_REPLY__REPLY_STATUS__AUTH_OK) {
airnav_log_level(7, "Got OK from server!\n");
return 1;
} else if (reply == 0) {
airnav_log_level(7, "Got no response from server\n");
return 0;
} else if (reply == 3) {
airnav_log("Could not authenticate sharing key: \n");
return -1;
} else {
airnav_log_level(7, "Got another cmd from server :( (%d)\n", reply);
return -1;
}
airnav_log_level(3, "Something wrong....\n");
return 1;
}
/*
* Send key request
*/
int sendKeyRequest(void) {
if (airnav_socket == -1) {
airnav_log_level(5, "Socket not created!\n");
return 0;
}
airnav_log_level(3, "Requesting new key!\n");
ClientType client_type = getClientType();
// Get CPU Serial
char *cserial = NULL;
if (client_type == CLIENT_TYPE__RPI || client_type == CLIENT_TYPE__RBLC2 || client_type == CLIENT_TYPE__GENERIC_ARM_32 || client_type == CLIENT_TYPE__GENERIC_ARM_64) {
long long unsigned int cpuserial = getRpiSerial();
if (cpuserial != 0) {
cserial = malloc(60);
memset(cserial, 0, 60);
sprintf(cserial, "%016llx", cpuserial);
} else {
airnav_log("CPU Serial empty.\n");
}
} else if (client_type == CLIENT_TYPE__PC_X64 || client_type == CLIENT_TYPE__PC_X86) {
cserial = net_get_mac_address(0);
} else {
airnav_log("Could not get any type of serial for SK request\n");
}
struct prepared_packet *request = create_packet_SK_Request(getClientType(), cserial);
net_send_packet(request);
if (cserial != NULL) {
free(cserial);
cserial = NULL;
}
// Wait for reply from server
int reply = net_waitCmd(SERVER_REPLY__REPLY_STATUS__SK_CREATE_OK, 3);
if (reply == SERVER_REPLY__REPLY_STATUS__SK_CREATE_OK) {
airnav_log_level(3, "SK Created!\n");
return 1;
} else if (reply == 0) {
airnav_log_level(3, "No response from server\n");
return 0;
} else if (reply == 3) {
airnav_log_level(3, "Error creating SK:\n");
return -1;
} else {
airnav_log_level(3, "Another reply from server\n");
return -1;
}
}