aboutsummaryrefslogtreecommitdiff
path: root/src/or/routerkeys.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-08-07 15:22:23 -0400
committerNick Mathewson <nickm@torproject.org>2015-08-19 13:36:50 -0400
commit76ec8915721fa825e019821a4b045359156f8cc5 (patch)
tree0099613b871a7b42441a1263d6213c54292ba05e /src/or/routerkeys.c
parent5d76acfcb302619dd97f6f2519889752bfa60e2e (diff)
downloadtor-76ec8915721fa825e019821a4b045359156f8cc5.tar.gz
tor-76ec8915721fa825e019821a4b045359156f8cc5.zip
When we infer the master key from the certificate, save it to disk.
Diffstat (limited to 'src/or/routerkeys.c')
-rw-r--r--src/or/routerkeys.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/or/routerkeys.c b/src/or/routerkeys.c
index 125fe7545d..2b967dd893 100644
--- a/src/or/routerkeys.c
+++ b/src/or/routerkeys.c
@@ -697,11 +697,20 @@ load_ed_keys(const or_options_t *options, time_t now)
FAIL("Missing identity key");
} else {
log_warn(LD_OR, "Master public key was absent; inferring from "
- "public key in signing certificate");
+ "public key in signing certificate and saving to disk.");
tor_assert(check_signing_cert);
id = tor_malloc_zero(sizeof(*id));
memcpy(&id->pubkey, &check_signing_cert->signing_key,
sizeof(ed25519_public_key_t));
+ fname = options_get_datadir_fname2(options, "keys",
+ "ed25519_master_id_public_key");
+ if (ed25519_pubkey_write_to_file(&id->pubkey, fname, "type0") < 0) {
+ log_warn(LD_OR, "Error while attempting to write master public key "
+ "to disk");
+ tor_free(fname);
+ goto err;
+ }
+ tor_free(fname);
}
}
if (tor_mem_is_zero((char*)id->seckey.seckey, sizeof(id->seckey)))