aboutsummaryrefslogtreecommitdiff
path: root/src/or/routerkeys.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-06-05 09:51:57 -0400
committerNick Mathewson <nickm@torproject.org>2017-06-05 09:51:57 -0400
commitbe741d7e63b06fe103caab3db4b64ada45bd6bae (patch)
treee50e4aaffe2131589e8322be1f810aa92484822a /src/or/routerkeys.c
parent1763aa058b08a1c594b378ba2314fc5c6eaadb34 (diff)
parent41ed9e978b77080c027e50ed831370efbeeeac37 (diff)
downloadtor-be741d7e63b06fe103caab3db4b64ada45bd6bae.tar.gz
tor-be741d7e63b06fe103caab3db4b64ada45bd6bae.zip
Merge branch 'maint-0.3.0'
Diffstat (limited to 'src/or/routerkeys.c')
-rw-r--r--src/or/routerkeys.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/or/routerkeys.c b/src/or/routerkeys.c
index 01f5e98bd1..0bff8daad5 100644
--- a/src/or/routerkeys.c
+++ b/src/or/routerkeys.c
@@ -668,6 +668,7 @@ static tor_cert_t *auth_key_cert = NULL;
static uint8_t *rsa_ed_crosscert = NULL;
static size_t rsa_ed_crosscert_len = 0;
+static time_t rsa_ed_crosscert_expiration = 0;
/**
* Running as a server: load, reload, or refresh our ed25519 keys and
@@ -699,8 +700,10 @@ load_ed_keys(const or_options_t *options, time_t now)
tor_cert_free(cert); \
cert = (newval); \
} while (0)
+#define HAPPENS_SOON(when, interval) \
+ ((when) < now + (interval))
#define EXPIRES_SOON(cert, interval) \
- (!(cert) || (cert)->valid_until < now + (interval))
+ (!(cert) || HAPPENS_SOON((cert)->valid_until, (interval)))
/* XXXX support encrypted identity keys fully */
@@ -899,14 +902,19 @@ load_ed_keys(const or_options_t *options, time_t now)
if (options->command == CMD_KEYGEN)
goto end;
- if (!rsa_ed_crosscert && server_mode(options)) {
+ if (server_mode(options) &&
+ (!rsa_ed_crosscert ||
+ HAPPENS_SOON(rsa_ed_crosscert_expiration, 30*86400))) {
uint8_t *crosscert;
+ time_t expiration = now+6*30*86400; /* 6 months in the future. */
ssize_t crosscert_len = tor_make_rsa_ed25519_crosscert(&id->pubkey,
get_server_identity_key(),
- now+10*365*86400,/*XXXX*/
+ expiration,
&crosscert);
+ tor_free(rsa_ed_crosscert);
rsa_ed_crosscert_len = crosscert_len;
rsa_ed_crosscert = crosscert;
+ rsa_ed_crosscert_expiration = expiration;
}
if (!current_auth_key ||
@@ -1038,6 +1046,7 @@ should_make_new_ed_keys(const or_options_t *options, const time_t now)
}
#undef EXPIRES_SOON
+#undef HAPPENS_SOON
#ifdef TOR_UNIT_TESTS
/* Helper for unit tests: populate the ed25519 keys without saving or