summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--toxcore/TCP_server.c8
-rw-r--r--toxencryptsave/toxencryptsave.c7
-rw-r--r--toxencryptsave/toxencryptsave.h3
3 files changed, 12 insertions, 6 deletions
diff --git a/toxcore/TCP_server.c b/toxcore/TCP_server.c
index e85a506d..d7401de8 100644
--- a/toxcore/TCP_server.c
+++ b/toxcore/TCP_server.c
@@ -1187,7 +1187,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1187 1187
1188 for (n = 0; n < nfds; ++n) { 1188 for (n = 0; n < nfds; ++n) {
1189 sock_t sock = events[n].data.u64 & 0xFFFFFFFF; 1189 sock_t sock = events[n].data.u64 & 0xFFFFFFFF;
1190 int status = (events[n].data.u64 >> 32) & 0xFFFF, index = (events[n].data.u64 >> 48); 1190 int status = (events[n].data.u64 >> 32) & 0xFF, index = (events[n].data.u64 >> 40);
1191 1191
1192 if ((events[n].events & EPOLLERR) || (events[n].events & EPOLLHUP) || (events[n].events & EPOLLRDHUP)) { 1192 if ((events[n].events & EPOLLERR) || (events[n].events & EPOLLHUP) || (events[n].events & EPOLLRDHUP)) {
1193 switch (status) { 1193 switch (status) {
@@ -1241,7 +1241,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1241 1241
1242 struct epoll_event ev = { 1242 struct epoll_event ev = {
1243 .events = EPOLLIN | EPOLLET | EPOLLRDHUP, 1243 .events = EPOLLIN | EPOLLET | EPOLLRDHUP,
1244 .data.u64 = sock_new | ((uint64_t)TCP_SOCKET_INCOMING << 32) | ((uint64_t)index_new << 48) 1244 .data.u64 = sock_new | ((uint64_t)TCP_SOCKET_INCOMING << 32) | ((uint64_t)index_new << 40)
1245 }; 1245 };
1246 1246
1247 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_ADD, sock_new, &ev) == -1) { 1247 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_ADD, sock_new, &ev) == -1) {
@@ -1258,7 +1258,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1258 1258
1259 if ((index_new = do_incoming(TCP_server, index)) != -1) { 1259 if ((index_new = do_incoming(TCP_server, index)) != -1) {
1260 events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP; 1260 events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP;
1261 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_UNCONFIRMED << 32) | ((uint64_t)index_new << 48); 1261 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_UNCONFIRMED << 32) | ((uint64_t)index_new << 40);
1262 1262
1263 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) { 1263 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) {
1264 kill_TCP_connection(&TCP_server->unconfirmed_connection_queue[index_new]); 1264 kill_TCP_connection(&TCP_server->unconfirmed_connection_queue[index_new]);
@@ -1274,7 +1274,7 @@ static void do_TCP_epoll(TCP_Server *TCP_server)
1274 1274
1275 if ((index_new = do_unconfirmed(TCP_server, index)) != -1) { 1275 if ((index_new = do_unconfirmed(TCP_server, index)) != -1) {
1276 events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP; 1276 events[n].events = EPOLLIN | EPOLLET | EPOLLRDHUP;
1277 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_CONFIRMED << 32) | ((uint64_t)index_new << 48); 1277 events[n].data.u64 = sock | ((uint64_t)TCP_SOCKET_CONFIRMED << 32) | ((uint64_t)index_new << 40);
1278 1278
1279 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) { 1279 if (epoll_ctl(TCP_server->efd, EPOLL_CTL_MOD, sock, &events[n]) == -1) {
1280 //remove from confirmed connections 1280 //remove from confirmed connections
diff --git a/toxencryptsave/toxencryptsave.c b/toxencryptsave/toxencryptsave.c
index b38209a4..e2f28a58 100644
--- a/toxencryptsave/toxencryptsave.c
+++ b/toxencryptsave/toxencryptsave.c
@@ -82,7 +82,8 @@ bool tox_get_salt(const uint8_t *data, uint8_t *salt)
82 * 82 *
83 * returns true on success 83 * returns true on success
84 */ 84 */
85bool tox_derive_key_from_pass(uint8_t *passphrase, size_t pplength, TOX_PASS_KEY *out_key, TOX_ERR_KEY_DERIVATION *error) 85bool tox_derive_key_from_pass(uint8_t *passphrase, size_t pplength, TOX_PASS_KEY *out_key,
86 TOX_ERR_KEY_DERIVATION *error)
86{ 87{
87 uint8_t salt[crypto_pwhash_scryptsalsa208sha256_SALTBYTES]; 88 uint8_t salt[crypto_pwhash_scryptsalsa208sha256_SALTBYTES];
88 randombytes(salt, sizeof salt); 89 randombytes(salt, sizeof salt);
@@ -212,10 +213,12 @@ bool tox_pass_key_decrypt(const uint8_t *data, size_t length, const TOX_PASS_KEY
212 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_INVALID_LENGTH); 213 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_INVALID_LENGTH);
213 return 0; 214 return 0;
214 } 215 }
216
215 if (!data || !key || !out) { 217 if (!data || !key || !out) {
216 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_NULL); 218 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_NULL);
217 return 0; 219 return 0;
218 } 220 }
221
219 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) { 222 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) {
220 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT); 223 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT);
221 return 0; 224 return 0;
@@ -256,10 +259,12 @@ bool tox_pass_decrypt(const uint8_t *data, size_t length, uint8_t *passphrase, s
256 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_INVALID_LENGTH); 259 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_INVALID_LENGTH);
257 return 0; 260 return 0;
258 } 261 }
262
259 if (!data || !passphrase || !out) { 263 if (!data || !passphrase || !out) {
260 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_NULL); 264 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_NULL);
261 return 0; 265 return 0;
262 } 266 }
267
263 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) { 268 if (memcmp(data, TOX_ENC_SAVE_MAGIC_NUMBER, TOX_ENC_SAVE_MAGIC_LENGTH) != 0) {
264 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT); 269 SET_ERROR_PARAMETER(error, TOX_ERR_DECRYPTION_BAD_FORMAT);
265 return 0; 270 return 0;
diff --git a/toxencryptsave/toxencryptsave.h b/toxencryptsave/toxencryptsave.h
index 078bd879..c077d899 100644
--- a/toxencryptsave/toxencryptsave.h
+++ b/toxencryptsave/toxencryptsave.h
@@ -183,7 +183,8 @@ typedef struct {
183 * 183 *
184 * returns true on success 184 * returns true on success
185 */ 185 */
186bool tox_derive_key_from_pass(uint8_t *passphrase, size_t pplength, TOX_PASS_KEY *out_key, TOX_ERR_KEY_DERIVATION *error); 186bool tox_derive_key_from_pass(uint8_t *passphrase, size_t pplength, TOX_PASS_KEY *out_key,
187 TOX_ERR_KEY_DERIVATION *error);
187 188
188/* Same as above, except use the given salt for deterministic key derivation. 189/* Same as above, except use the given salt for deterministic key derivation.
189 * The salt must be TOX_PASS_SALT_LENGTH bytes in length. 190 * The salt must be TOX_PASS_SALT_LENGTH bytes in length.