Compare commits
3 Commits
58c3b3fada
...
ccca06e70f
Author | SHA1 | Date |
---|---|---|
Alexander Andreev | ccca06e70f | |
Alexander Andreev | 5174c2685e | |
Alexander Andreev | b225b63cdf |
|
@ -198,5 +198,5 @@ void crypt_session_destroy(crypt_session_t *const s) {
|
||||||
sodium_memzero(s->rx, CRYPT_SESS_KEY_LEN);
|
sodium_memzero(s->rx, CRYPT_SESS_KEY_LEN);
|
||||||
sodium_memzero(s->tx, CRYPT_SESS_KEY_LEN);
|
sodium_memzero(s->tx, CRYPT_SESS_KEY_LEN);
|
||||||
sodium_memzero(s->nonce, CRYPT_NONCE_LEN);
|
sodium_memzero(s->nonce, CRYPT_NONCE_LEN);
|
||||||
crypt_key_destroy(s->remote_key);
|
s->remote_key = NULL;
|
||||||
}
|
}
|
||||||
|
|
59
src/main.c
59
src/main.c
|
@ -4,7 +4,6 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
// #include "audio.h"
|
// #include "audio.h"
|
||||||
#include "crypt.h"
|
#include "crypt.h"
|
||||||
|
@ -20,12 +19,12 @@ int main(int argc, char **argv) {
|
||||||
(void)argv;
|
(void)argv;
|
||||||
(void)argc;
|
(void)argc;
|
||||||
|
|
||||||
crypt_key_t kl, kr;
|
crypt_key_t kl = {0}, kr = {0};
|
||||||
unsigned char *hl, *hr;
|
unsigned char *hl = NULL, *hr = NULL;
|
||||||
unsigned char hlr[CRYPT_HELLO_LEN], hrl[CRYPT_HELLO_LEN];
|
unsigned char hlr[CRYPT_HELLO_LEN], hrl[CRYPT_HELLO_LEN];
|
||||||
unsigned char *nonce;
|
unsigned char *nonce = NULL;
|
||||||
net_t nl, nr;
|
net_t nl = {0}, nr = {0};
|
||||||
crypt_session_t sl, sr;
|
crypt_session_t sl = {0}, sr = {0};
|
||||||
|
|
||||||
const int incom_len = 512;
|
const int incom_len = 512;
|
||||||
char incom[incom_len];
|
char incom[incom_len];
|
||||||
|
@ -78,29 +77,14 @@ int main(int argc, char **argv) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rcvd == CRYPT_HELLO_LEN) {
|
nr.raddr = nr.inaddr;
|
||||||
memcpy(hrl, incom, CRYPT_HELLO_LEN);
|
nr.raddr_len = nr.inaddr_len;
|
||||||
}
|
|
||||||
|
|
||||||
sent = net_send(&nl, (const char *)hl, CRYPT_HELLO_LEN);
|
|
||||||
if (sent == -1) {
|
|
||||||
ret = -1;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
rcvd = net_recv(&nr, incom, incom_len);
|
|
||||||
if (rcvd == -1) {
|
|
||||||
ret = -1;
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
// fprintf(stderr, "%s:%d\n", __FILE__, __LINE__);
|
|
||||||
|
|
||||||
if (rcvd == CRYPT_HELLO_LEN) {
|
if (rcvd == CRYPT_HELLO_LEN) {
|
||||||
memcpy(hrl, incom, CRYPT_HELLO_LEN);
|
memcpy(hrl, incom, CRYPT_HELLO_LEN);
|
||||||
nr.raddr = nr.inaddr;
|
|
||||||
nr.raddr_len = nr.inaddr_len;
|
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "A broken hello packet was received.");
|
fprintf(stderr, "remote: A broken hello packet was received.");
|
||||||
|
net_send(&nr, "FUCKOFF", 7);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
@ -116,28 +100,43 @@ int main(int argc, char **argv) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
// fprintf(stderr, "%s:%d\n", __FILE__, __LINE__);
|
|
||||||
|
|
||||||
if (rcvd == CRYPT_HELLO_LEN) {
|
if (rcvd == CRYPT_HELLO_LEN) {
|
||||||
memcpy(hlr, incom, CRYPT_HELLO_LEN);
|
memcpy(hlr, incom, CRYPT_HELLO_LEN);
|
||||||
nl.raddr = nl.inaddr;
|
|
||||||
nl.raddr_len = nl.inaddr_len;
|
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "A broken hello packet was received.");
|
if (memcmp("FUCKOFF", incom, 7) == 0) {
|
||||||
|
fprintf(stderr, "local: A broken hello packet was sent by me.");
|
||||||
|
} else {
|
||||||
|
fprintf(stderr, "local: A broken hello packet was received.");
|
||||||
|
net_send(&nl, "FUCKOFF", 7);
|
||||||
|
}
|
||||||
|
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crypt_hello_verify(hlr, &kr) == -1) {
|
if (crypt_hello_verify(hlr, &kr) == -1) {
|
||||||
fprintf(stderr, "hello remote -> local: not verified\n");
|
fprintf(stderr, "hello remote -> local: not verified\n");
|
||||||
|
net_send(&nl, "FUCKOFF", 7);
|
||||||
|
ret = -1;
|
||||||
|
goto cleanup;
|
||||||
|
} else {
|
||||||
|
net_send(&nl, "YOU'RE WELCOME", 14);
|
||||||
|
}
|
||||||
|
|
||||||
|
rcvd = net_recv(&nr, incom, incom_len);
|
||||||
|
if (rcvd == -1) {
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (crypt_hello_verify(hrl, &kl) == -1) {
|
if (crypt_hello_verify(hrl, &kl) == -1) {
|
||||||
fprintf(stderr, "hello local -> remote: not verified\n");
|
fprintf(stderr, "hello local -> remote: not verified\n");
|
||||||
|
net_send(&nr, "FUCKOFF", 7);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
} else {
|
||||||
|
net_send(&nr, "YOU'RE WELCOME", 14);
|
||||||
}
|
}
|
||||||
|
|
||||||
nonce = crypt_hello_get_nonce(hl, hlr, true);
|
nonce = crypt_hello_get_nonce(hl, hlr, true);
|
||||||
|
@ -150,6 +149,8 @@ int main(int argc, char **argv) {
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(rn);
|
||||||
|
|
||||||
if (crypt_session_init(&sl, &kl, &kr, nonce, true) == -1) {
|
if (crypt_session_init(&sl, &kl, &kr, nonce, true) == -1) {
|
||||||
fprintf(stderr, "local session init fail\n");
|
fprintf(stderr, "local session init fail\n");
|
||||||
ret = -1;
|
ret = -1;
|
||||||
|
|
|
@ -33,6 +33,7 @@ int net_client_init(net_t *const n, const char *const raddr, const char *const r
|
||||||
|
|
||||||
memset(&n->raddr, 0, sizeof(n->raddr));
|
memset(&n->raddr, 0, sizeof(n->raddr));
|
||||||
memcpy(&n->raddr, cri->ai_addr, sizeof(n->raddr));
|
memcpy(&n->raddr, cri->ai_addr, sizeof(n->raddr));
|
||||||
|
n->raddr_len = sizeof(n->raddr);
|
||||||
|
|
||||||
freeaddrinfo(ri);
|
freeaddrinfo(ri);
|
||||||
|
|
||||||
|
@ -69,9 +70,10 @@ int net_server_init(net_t *const n, const char *const laddr, const char *const l
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&n->inaddr, 0, sizeof(n->inaddr));
|
memset(&n->inaddr, 0, sizeof(n->inaddr));
|
||||||
n->inaddr_len = 0;
|
n->inaddr_len = sizeof(n->inaddr);
|
||||||
|
|
||||||
memset(&n->raddr, 0, sizeof(n->raddr));
|
memset(&n->raddr, 0, sizeof(n->raddr));
|
||||||
|
n->raddr_len = sizeof(n->raddr);
|
||||||
|
|
||||||
memset(&n->laddr, 0, sizeof(n->laddr));
|
memset(&n->laddr, 0, sizeof(n->laddr));
|
||||||
memcpy(&n->laddr, cli->ai_addr, sizeof(n->raddr));
|
memcpy(&n->laddr, cli->ai_addr, sizeof(n->raddr));
|
||||||
|
@ -88,10 +90,10 @@ void net_destroy(net_t *n) {
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(&n->raddr, 0, sizeof(n->raddr));
|
memset(&n->raddr, 0, sizeof(n->raddr));
|
||||||
n->raddr_len = 0;
|
n->raddr_len = sizeof(n->raddr);
|
||||||
memset(&n->laddr, 0, sizeof(n->laddr));
|
memset(&n->laddr, 0, sizeof(n->laddr));
|
||||||
memset(&n->inaddr, 0, sizeof(n->inaddr));
|
memset(&n->inaddr, 0, sizeof(n->inaddr));
|
||||||
n->inaddr_len = 0;
|
n->inaddr_len = sizeof(n->inaddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t net_send(net_t *const n, const char *const buf, int buf_len) {
|
ssize_t net_send(net_t *const n, const char *const buf, int buf_len) {
|
||||||
|
|
Loading…
Reference in New Issue