From 918fc8884b142452e350ff32beb90b34bbd442c1 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 30 Apr 2015 15:31:01 -0700 Subject: [PATCH] Update mktopology so it works again and can easily be used to create test dictionaries. --- root-topology/Makefile | 2 +- root-topology/mktopology.cpp | 47 ++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/root-topology/Makefile b/root-topology/Makefile index 58226fd0e..3ddd916f0 100644 --- a/root-topology/Makefile +++ b/root-topology/Makefile @@ -1,5 +1,5 @@ all: FORCE - g++ -o mktopology mktopology.cpp ../node/Utils.cpp ../node/Identity.cpp ../node/C25519.cpp ../node/Salsa20.cpp ../node/Dictionary.cpp ../node/SHA512.cpp + g++ -o mktopology mktopology.cpp ../osdep/OSUtils.cpp ../node/Utils.cpp ../node/InetAddress.cpp ../node/Identity.cpp ../node/C25519.cpp ../node/Salsa20.cpp ../node/Dictionary.cpp ../node/SHA512.cpp gcc -o bin2c bin2c.c official: FORCE diff --git a/root-topology/mktopology.cpp b/root-topology/mktopology.cpp index 2a551cf73..00ada7b76 100644 --- a/root-topology/mktopology.cpp +++ b/root-topology/mktopology.cpp @@ -6,7 +6,7 @@ #include #include -#include "../node/Utils.hpp" +#include "../osdep/OSUtils.hpp" #include "../node/Identity.hpp" #include "../node/Dictionary.hpp" @@ -17,47 +17,48 @@ int main(int argc,char **argv) std::string buf; // Read root-topology-authority.secret signing authority, must be symlinked and online - if (!Utils::readFile("root-topology-authority.secret",buf)) { - std::cerr << "Cannot read root-topology-authority.secret" << std::endl; - return 1; - } - Identity topologyAuthority(buf); + Identity topologyAuthority; + if (OSUtils::readFile("root-topology-authority.secret",buf)) + topologyAuthority.fromString(buf); + else std::cerr << "Warning: root-topology-authority.secret not found, creating unsigned topology." << std::endl; Dictionary topology; // Read template.dict to populate default fields in root topology // if this file exists. Otherwise we just start empty. buf.clear(); - if (Utils::readFile("template.dict",buf)) + if (OSUtils::readFile("template.dict",buf)) topology.fromString(buf); // Read all entries in supernodes/ that correspond to supernode entry dictionaries // and add them to topology under supernodes/ subkey. Dictionary supernodes; - std::map supernodeDictionaries(Utils::listDirectory("supernodes")); - for(std::map::iterator sn(supernodeDictionaries.begin());sn!=supernodeDictionaries.end();++sn) { - if ((sn->first.length() == 10)&&(!sn->second)) { + std::vector supernodeDictionaries(OSUtils::listDirectory("supernodes")); + for(std::vector::const_iterator sn(supernodeDictionaries.begin());sn!=supernodeDictionaries.end();++sn) { + if (sn->length() == 10) { buf.clear(); - if (!Utils::readFile((std::string("supernodes/")+sn->first).c_str(),buf)) { - std::cerr << "Cannot read supernodes/" << sn->first << std::endl; + if (!OSUtils::readFile((std::string("supernodes/")+(*sn)).c_str(),buf)) { + std::cerr << "Cannot read supernodes/" << *sn << std::endl; return 1; } - supernodes[sn->first] = buf; + supernodes[*sn] = buf; } } topology["supernodes"] = supernodes.toString(); - // Sign topology with root-topology-authority.secret - if (!topology.sign(topologyAuthority)) { - std::cerr << "Unable to sign!" << std::endl; - return 1; - } + if ((topologyAuthority)&&(topologyAuthority.hasPrivate())) { + // Sign topology with root-topology-authority.secret + if (!topology.sign(topologyAuthority,OSUtils::now())) { + std::cerr << "Unable to sign!" << std::endl; + return 1; + } - // Test signature to make sure signing worked - Dictionary test(topology.toString()); - if (!test.verify(topologyAuthority)) { - std::cerr << "Test verification of signed dictionary failed!" << std::endl; - return 1; + // Test signature to make sure signing worked + Dictionary test(topology.toString()); + if (!test.verify(topologyAuthority)) { + std::cerr << "Test verification of signed dictionary failed!" << std::endl; + return 1; + } } // Output to stdout