summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--curve.c2
-rw-r--r--curvetun/Makefile1
-rw-r--r--taia.c27
-rw-r--r--taia.h7
4 files changed, 36 insertions, 1 deletions
diff --git a/curve.c b/curve.c
index b7d5b4f..e45c529 100644
--- a/curve.c
+++ b/curve.c
@@ -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 \
diff --git a/taia.c b/taia.c
new file mode 100644
index 0000000..4d02dd9
--- /dev/null
+++ b/taia.c
@@ -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;
+}
diff --git a/taia.h b/taia.h
index 227321d..7440418 100644
--- a/taia.h
+++ b/taia.h
@@ -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 */