diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-08-23 11:57:56 -0700 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2016-08-23 11:57:56 -0700 |
commit | 70368312039f37d08ba687b07a5caad1c57cd8de (patch) | |
tree | a366fd60b020ce212a1ce45af022e7e1c0b31b95 | |
parent | 68b4ca9b3181e69108bb4120c1c4230e3d09293b (diff) | |
download | infinitytier-70368312039f37d08ba687b07a5caad1c57cd8de.tar.gz infinitytier-70368312039f37d08ba687b07a5caad1c57cd8de.zip |
Sign Dictionary in doNETWORK_CONFIG_REQUEST.
-rw-r--r-- | node/Dictionary.hpp | 2 | ||||
-rw-r--r-- | node/Identity.hpp | 13 | ||||
-rw-r--r-- | node/IncomingPacket.cpp | 1 |
3 files changed, 15 insertions, 1 deletions
diff --git a/node/Dictionary.hpp b/node/Dictionary.hpp index 5d453fd9..eab2b162 100644 --- a/node/Dictionary.hpp +++ b/node/Dictionary.hpp @@ -454,7 +454,7 @@ public: { this->erase(sigKey); C25519::Signature sig(C25519::sign(kp,this->data(),this->sizeBytes())); - this->add(sigKey,sig.data,ZT_C25519_SIGNATURE_LEN); + this->add(sigKey,reinterpret_cast<const char *>(sig.data),ZT_C25519_SIGNATURE_LEN); } /** diff --git a/node/Identity.hpp b/node/Identity.hpp index ef7f2d77..e4522732 100644 --- a/node/Identity.hpp +++ b/node/Identity.hpp @@ -288,6 +288,19 @@ public: inline const C25519::Public &publicKey() const { return _publicKey; } /** + * @return C25519 key pair (only returns valid pair if private key is present in this Identity object) + */ + inline const C25519::Pair privateKeyPair() const + { + C25519::Pair pair; + pair.pub = _publicKey; + if (_privateKey) + pair.priv = *_privateKey; + else memset(pair.priv.data,0,ZT_C25519_PRIVATE_KEY_LEN); + return pair; + } + + /** * @return True if this identity contains something */ inline operator bool() const throw() { return (_address); } diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp index e188784a..139661db 100644 --- a/node/IncomingPacket.cpp +++ b/node/IncomingPacket.cpp @@ -749,6 +749,7 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons Dictionary<ZT_NETWORKCONFIG_DICT_CAPACITY> *dconf = new Dictionary<ZT_NETWORKCONFIG_DICT_CAPACITY>(); try { if (netconf->toDictionary(*dconf,metaData.getUI(ZT_NETWORKCONFIG_REQUEST_METADATA_KEY_VERSION,0) < 6)) { + dconf->wrapWithSignature(ZT_NETWORKCONFIG_DICT_KEY_SIGNATURE,RR->identity.privateKeyPair()); const unsigned int totalSize = dconf->sizeBytes(); unsigned int chunkIndex = 0; while (chunkIndex < totalSize) { |