diff options
-rw-r--r-- | curve.c | 2 | ||||
-rw-r--r-- | curvetun/Makefile | 1 | ||||
-rw-r--r-- | taia.c | 27 | ||||
-rw-r--r-- | taia.h | 7 |
4 files changed, 36 insertions, 1 deletions
@@ -254,7 +254,7 @@ ssize_t curve25519_decode(struct curve25519_struct *curve, struct curve25519_pro } taia_unpack(chipertext + crypto_box_boxzerobytes - NONCE_LENGTH, &packet_taia); - if (is_good_taia(arrival_taia, &packet_taia) == 0) { + if (taia_looks_good(arrival_taia, &packet_taia) == 0) { syslog(LOG_ERR, "Bad packet time! Dropping connection!\n"); done = 0; goto out; diff --git a/curvetun/Makefile b/curvetun/Makefile index f13c8c7..aebc642 100644 --- a/curvetun/Makefile +++ b/curvetun/Makefile @@ -12,6 +12,7 @@ curvetun-objs = xmalloc.o \ patricia.o \ corking.o \ trie.o \ + taia.o \ hash.o \ rnd.o \ curve.o \ @@ -0,0 +1,27 @@ +#include <stdbool.h> + +#include "taia.h" + +static const struct taia tolerance_taia = { + .sec.x = 0, + .nano = 700000000ULL, + .atto = 0, +}; + +bool taia_looks_good(struct taia *arr_taia, struct taia *pkt_taia) +{ + bool good = false; + struct taia tmp; + + if (taia_less(arr_taia, pkt_taia)) { + taia_sub(&tmp, pkt_taia, arr_taia); + if (taia_less(&tmp, &tolerance_taia)) + good = true; + } else { + taia_sub(&tmp, arr_taia, pkt_taia); + if (taia_less(&tmp, &tolerance_taia)) + good = true; + } + + return good; +} @@ -2,6 +2,11 @@ #define TAIA_H #include <stdint.h> +#include <stdbool.h> +#include <stdio.h> +#include <sys/time.h> + +#include "rnd.h" struct tai { uint64_t x; @@ -156,4 +161,6 @@ static inline int taia_less(const struct taia *t, const struct taia *u) return t->atto < u->atto; } +extern bool taia_looks_good(struct taia *arr_taia, struct taia *pkt_taia); + #endif /* TAIA_H */ |