summaryrefslogtreecommitdiff
path: root/node/Identity.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'node/Identity.cpp')
-rw-r--r--node/Identity.cpp19
1 files changed, 16 insertions, 3 deletions
diff --git a/node/Identity.cpp b/node/Identity.cpp
index e897a42c..7ef83ade 100644
--- a/node/Identity.cpp
+++ b/node/Identity.cpp
@@ -36,6 +36,8 @@
#include "Salsa20.hpp"
#include "Utils.hpp"
+#define ZT_IDENTITY_SHA_BYTE1_MASK 0xf8
+
namespace ZeroTier {
/*
@@ -51,7 +53,7 @@ struct _Identity_generate_cond
{
SHA512::hash(sha512buf,kp.pub.data,kp.pub.size());
- if ((!sha512buf[0])&&(!(sha512buf[1] & 0xf0)))
+ if ((!sha512buf[0])&&(!(sha512buf[1] & ZT_IDENTITY_SHA_BYTE1_MASK)))
return true;
return false;
@@ -76,9 +78,20 @@ void Identity::generate()
*_privateKey = kp.priv;
}
-bool Identity::locallyValidate(bool doAddressDerivationCheck) const
+bool Identity::locallyValidate() const
{
- return true;
+ char sha512buf[64];
+ char addrb[5];
+ _address.copyTo(addrb,5);
+ SHA512::hash(sha512buf,_publicKey.data,_publicKey.size());
+ return (
+ (!sha512buf[0])&&
+ (!(sha512buf[1] & ZT_IDENTITY_SHA_BYTE1_MASK))&&
+ (sha512buf[59] == addrb[0])&&
+ (sha512buf[60] == addrb[1])&&
+ (sha512buf[61] == addrb[2])&&
+ (sha512buf[62] == addrb[3])&&
+ (sha512buf[63] == addrb[4]));
}
std::string Identity::toString(bool includePrivate) const