summaryrefslogtreecommitdiff
path: root/node/IncomingPacket.hpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-07 13:35:46 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-10-07 13:35:46 -0700
commite5f168f599ba053ee5e6029387dd7ad4b95a7d28 (patch)
treecb395791a3689ebe8d39691663e8fb9870348f5c /node/IncomingPacket.hpp
parent7d62dbe9f7fa620982c71f44089d319120023e26 (diff)
downloadinfinitytier-e5f168f599ba053ee5e6029387dd7ad4b95a7d28.tar.gz
infinitytier-e5f168f599ba053ee5e6029387dd7ad4b95a7d28.zip
Add proof of work request for future DDOS mitigation use.
Diffstat (limited to 'node/IncomingPacket.hpp')
-rw-r--r--node/IncomingPacket.hpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/node/IncomingPacket.hpp b/node/IncomingPacket.hpp
index 06220c4b..fd7a06c0 100644
--- a/node/IncomingPacket.hpp
+++ b/node/IncomingPacket.hpp
@@ -107,6 +107,27 @@ public:
*/
inline uint64_t receiveTime() const throw() { return _receiveTime; }
+ /**
+ * Compute the Salsa20/12+SHA512 proof of work function
+ *
+ * @param difficulty Difficulty in bits (max: 64)
+ * @param challenge Challenge string
+ * @param challengeLength Length of challenge in bytes (max allowed: ZT_PROTO_MAX_PACKET_LENGTH)
+ * @param result Buffer to fill with 16-byte result
+ */
+ static void computeSalsa2012Sha512ProofOfWork(unsigned int difficulty,const void *challenge,unsigned int challengeLength,unsigned char result[16]);
+
+ /**
+ * Verify the result of Salsa20/12+SHA512 proof of work
+ *
+ * @param difficulty Difficulty in bits (max: 64)
+ * @param challenge Challenge bytes
+ * @param challengeLength Length of challenge in bytes (max allowed: ZT_PROTO_MAX_PACKET_LENGTH)
+ * @param proposedResult Result supplied by client
+ * @return True if result is valid
+ */
+ static bool testSalsa2012Sha512ProofOfWorkResult(unsigned int difficulty,const void *challenge,unsigned int challengeLength,const unsigned char proposedResult[16]);
+
private:
// These are called internally to handle packet contents once it has
// been authenticated, decrypted, decompressed, and classified.
@@ -126,6 +147,7 @@ private:
bool _doPUSH_DIRECT_PATHS(const RuntimeEnvironment *RR,const SharedPtr<Peer> &peer);
bool _doCIRCUIT_TEST(const RuntimeEnvironment *RR,const SharedPtr<Peer> &peer);
bool _doCIRCUIT_TEST_REPORT(const RuntimeEnvironment *RR,const SharedPtr<Peer> &peer);
+ bool _doREQUEST_PROOF_OF_WORK(const RuntimeEnvironment *RR,const SharedPtr<Peer> &peer);
// Send an ERROR_NEED_MEMBERSHIP_CERTIFICATE to a peer indicating that an updated cert is needed to communicate
void _sendErrorNeedCertificate(const RuntimeEnvironment *RR,const SharedPtr<Peer> &peer,uint64_t nwid);