From 7c625e57d8bf86196fa434fa2343c50582cdbc9e Mon Sep 17 00:00:00 2001 From: Nakidai Date: Wed, 9 Jul 2025 18:17:21 +0300 Subject: Add code --- common.h | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 common.h (limited to 'common.h') diff --git a/common.h b/common.h new file mode 100644 index 0000000..2059d81 --- /dev/null +++ b/common.h @@ -0,0 +1,83 @@ +/* common (not config, need code patch after change) */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "shorttypes.h" +#include "crypto-sponge.h" + +#define ERRDIE(a, b) if ((a) == -1) perror((b)), exit(1) + +#define NONCE_SZ 16 +#define HMAC_SZ 16 + +#define MIN_PKT_SZ NONCE_SZ + HMAC_SZ + 4 + 4 + 8 + 1 +#if MAX_PKT_SZ < MIN_PKT_SZ +#error "MAX_PKT_SZ < MIN_PKT_SZ" +#endif + +#define CONNECT (u16)32 +#define PING (u16)4 +#define SSTATE (u16)8 + +u8 key[32]; +u8 password[PASSWORD_BUF_SZ]; +u32 prng_state[14]; + + +static void send_pkt +(s32 skt, void *buf, u16 sz, struct sockaddr_storage *addr){ + ssize_t res; + u8 *nonce, *tag; + + /* nonce, tag */ + nonce = (u8*)buf + sz; + tag = nonce + NONCE_SZ; + duplex257_prng_rand16(prng_state, nonce); + + /* encrypt */ + duplex257_ae_encrypt(key, nonce, tag, buf, sz); + sz += NONCE_SZ + HMAC_SZ; + + /* send */ + res = sendto(skt, buf, sz, 0,(struct sockaddr*)addr, sizeof(*addr)); + ERRDIE(res, "sendto"); + return; +} + +static s32 recv_pkt +(s32 skt, void *buf, u16 sz, struct sockaddr_storage *addr){ + socklen_t skl; + s32 res; + u8 *nonce, *rtag; + u8 tag[HMAC_SZ]; + + /* recv */ + skl = sizeof(*addr); + res = recvfrom(skt, buf, sz, 0, (struct sockaddr*)addr, &skl); + ERRDIE(res, "recvfrom"); + + /* drop packet if it too small */ + if (res < 4 + NONCE_SZ + HMAC_SZ) return -1; + + /* nonce, recieved tag */ + rtag = buf + res - HMAC_SZ; + nonce = rtag - NONCE_SZ; + + /* decrypt */ + res -= NONCE_SZ + HMAC_SZ; + duplex257_ae_decrypt(key, nonce, tag, buf, res); + if (0 != memcmp(tag, rtag, HMAC_SZ)) return -1; + + return res; +} + -- cgit 1.4.1