From cf58451a8ba03e869a805f973ef5b5f3f6d82b6b Mon Sep 17 00:00:00 2001 From: George Kadianakis Date: Mon, 24 Jul 2017 13:31:17 +0300 Subject: [PATCH] prop224: Refactor hs_get_time_period_num() to not use absolute time. Instead use the SRV protocol duration to calculate the rotation offset that was previously hardcoded to 12 hours. --- src/or/hs_common.c | 13 +++++++++---- src/or/hs_common.h | 2 -- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/or/hs_common.c b/src/or/hs_common.c index 0d81063cf7..0ae196d93e 100644 --- a/src/or/hs_common.c +++ b/src/or/hs_common.c @@ -196,13 +196,18 @@ uint64_t hs_get_time_period_num(time_t now) { uint64_t time_period_num; + + /* Start by calculating minutes since the epoch */ uint64_t time_period_length = get_time_period_length(); uint64_t minutes_since_epoch = now / 60; - /* Now subtract half a day to fit the prop224 time period schedule (see - * section [TIME-PERIODS]). */ - tor_assert(minutes_since_epoch > HS_TIME_PERIOD_ROTATION_OFFSET); - minutes_since_epoch -= HS_TIME_PERIOD_ROTATION_OFFSET; + /* Apply the rotation offset as specified by prop224 (section + * [TIME-PERIODS]), so that new time periods synchronize nicely with SRV + * publication */ + unsigned int time_period_rotation_offset = sr_state_get_phase_duration(); + time_period_rotation_offset /= 60; /* go from seconds to minutes */ + tor_assert(minutes_since_epoch > time_period_rotation_offset); + minutes_since_epoch -= time_period_rotation_offset; /* Calculate the time period */ time_period_num = minutes_since_epoch / time_period_length; diff --git a/src/or/hs_common.h b/src/or/hs_common.h index 519485d576..268a69bb52 100644 --- a/src/or/hs_common.h +++ b/src/or/hs_common.h @@ -52,8 +52,6 @@ #define HS_TIME_PERIOD_LENGTH_MIN 30 /* minutes */ /* The minimum time period length as seen in prop224 section [TIME-PERIODS] */ #define HS_TIME_PERIOD_LENGTH_MAX (60 * 24 * 10) /* 10 days or 14400 minutes */ -/* The time period rotation offset as seen in prop224 section [TIME-PERIODS] */ -#define HS_TIME_PERIOD_ROTATION_OFFSET (12 * 60) /* minutes */ /* Prefix of the onion address checksum. */ #define HS_SERVICE_ADDR_CHECKSUM_PREFIX ".onion checksum"