From 599e424b5ddc314064a4f35e64f73654c91bb1f1 Mon Sep 17 00:00:00 2001 From: Logan oos Even <46396513+Logan007@users.noreply.github.com> Date: Sat, 19 Dec 2020 17:11:54 +0545 Subject: [PATCH] Revert "changed timer source (#522)" (#536) This reverts commit 0298efa36e637a369b89bac59d7ab91a8f730c7e. --- Makefile.in | 4 ++-- include/n2n.h | 2 +- src/n2n.c | 30 +++++++++--------------------- 3 files changed, 12 insertions(+), 24 deletions(-) diff --git a/Makefile.in b/Makefile.in index 9adacfb..60aaf19 100644 --- a/Makefile.in +++ b/Makefile.in @@ -48,8 +48,8 @@ N2N_LIB=libn2n.a N2N_OBJS=$(patsubst src/%.c, src/%.o, $(wildcard src/*.c)) N2N_DEPS=$(wildcard include/*.h) $(wildcard src/*.c) Makefile $(N2N_LIB) -LIBS_EDGE+=-lrt $(LIBS_EDGE_OPT) -LIBS_SN=-lrt +LIBS_EDGE+=$(LIBS_EDGE_OPT) +LIBS_SN= #For OpenSolaris (Solaris too?) ifeq ($(shell uname), SunOS) diff --git a/include/n2n.h b/include/n2n.h index e38e509..a16e6fd 100644 --- a/include/n2n.h +++ b/include/n2n.h @@ -54,6 +54,7 @@ #define PACKAGE_BUILDDATE (__DATE__ " " __TIME__) +#include #include #include @@ -120,7 +121,6 @@ #define closesocket(a) close(a) #endif /* #ifndef WIN32 */ -#include /* should be included after eventually including unistd.h for _POSIX_TIMERS macro gets correctly defined */ #include "minilzo.h" #include #include diff --git a/src/n2n.c b/src/n2n.c index f3a2828..a3509b2 100644 --- a/src/n2n.c +++ b/src/n2n.c @@ -546,31 +546,19 @@ int gettimeofday(struct timeval *tp, void *tzp) { // returns a time stamp for use with replay protection uint64_t time_stamp (void) { + struct timeval tod; uint64_t micro_seconds; -#if defined (_POSIX_TIMERS) - struct timespec t; - clock_gettime(CLOCK_REALTIME, &t); -#else - struct timeval t; - gettimeofday (&t, NULL); -#endif + gettimeofday (&tod, NULL); /* We will (roughly) calculate the microseconds since 1970 leftbound into the return value. The leading 32 bits are used for tv_sec. The following 20 bits (sufficent as microseconds - fraction never exceeds 1,000,000,) encode the value tv_nsec/1024 ( ~ usec) or tv_usec - respectively. The remaining lowest 12 bits are kept random for use in IV */ - micro_seconds = (uint64_t)(t.tv_sec) << 32; -#if defined (_POSIX_TIMERS) - micro_seconds += (t.tv_nsec >> 10) << 12; -#else - micro_seconds += t.tv_usec << 12; -#endif - micro_seconds |= (uint64_t)n2n_rand() >> 52; - - // to do the following would be more exact but also - // more costly due to the multiplication and divison: - // micro_seconds = (t.tv_sec * 1000000 + t.tv_nsec / 1000) << 12) | ... or - // micro_seconds = (t.tv_sec * 1000000 + t.tv_usec) << 12) | ... + fraction never exceeds 1,000,000,) encode the value tv_usec. The remaining lowest 12 bits + are kept random for use in IV */ + micro_seconds = n2n_rand(); + micro_seconds = ( (((uint64_t)(tod.tv_sec) << 32) + (tod.tv_usec << 12)) + | (micro_seconds >> 52) ); + // more exact but more costly due to the multiplication: + // micro_seconds = (tod.tv_sec * 1000000 + tod.tv_usec) << 12) | ... return (micro_seconds); }