Browse Source

little stuff

Adam Ierymenko 5 years ago
parent
commit
27ab88db1e
2 changed files with 12 additions and 15 deletions
  1. 9 8
      node/Identity.hpp
  2. 3 7
      node/MAC.hpp

+ 9 - 8
node/Identity.hpp

@@ -58,6 +58,11 @@ public:
 		P384 = ZT_CRYPTO_ALG_P384      // Type 1 -- NIST P-384 with linked Curve25519/Ed25519 secondaries (2.x+)
 		P384 = ZT_CRYPTO_ALG_P384      // Type 1 -- NIST P-384 with linked Curve25519/Ed25519 secondaries (2.x+)
 	};
 	};
 
 
+	/**
+	 * 384-bit full hash of identity's public key(s)
+	 */
+	typedef Hash<384> Fingerprint;
+
 	/**
 	/**
 	 * A nil/empty identity instance
 	 * A nil/empty identity instance
 	 */
 	 */
@@ -113,7 +118,7 @@ public:
 	ZT_ALWAYS_INLINE bool hasPrivate() const noexcept { return _hasPrivate; }
 	ZT_ALWAYS_INLINE bool hasPrivate() const noexcept { return _hasPrivate; }
 
 
 	/**
 	/**
-	 * Get hash of this identity's public key(s)
+	 * Get a 384-bit hash of this identity's public key(s)
 	 *
 	 *
 	 * The hash returned by this function differs by identity type. For C25519 (type 0)
 	 * The hash returned by this function differs by identity type. For C25519 (type 0)
 	 * identities this returns a simple SHA384 of the public key, which is NOT the same
 	 * identities this returns a simple SHA384 of the public key, which is NOT the same
@@ -122,13 +127,9 @@ public:
 	 * and address computation. This difference is because the v0 hash is expensive while
 	 * and address computation. This difference is because the v0 hash is expensive while
 	 * the v1 hash is fast.
 	 * the v1 hash is fast.
 	 *
 	 *
-	 * While addresses can technically collide (though this is rare and hard to create),
-	 * the full hash of an identity's keys is unique to within cryptographic strength
-	 * bounds of the keys themselves.
-	 *
-	 * @return 384-bit/48-byte hash
+	 * @return Hash of public key(s)
 	 */
 	 */
-	ZT_ALWAYS_INLINE const Hash<384> &fingerprint() const noexcept { return _hash; }
+	ZT_ALWAYS_INLINE const Fingerprint &fingerprint() const noexcept { return _hash; }
 
 
 	/**
 	/**
 	 * Compute a hash of this identity's public and private keys.
 	 * Compute a hash of this identity's public and private keys.
@@ -218,6 +219,7 @@ public:
 		}
 		}
 		return false;
 		return false;
 	}
 	}
+	ZT_ALWAYS_INLINE bool operator!=(const Identity &id) const noexcept { return !(*this == id); }
 	ZT_ALWAYS_INLINE bool operator<(const Identity &id) const noexcept
 	ZT_ALWAYS_INLINE bool operator<(const Identity &id) const noexcept
 	{
 	{
 		if (_address < id._address)
 		if (_address < id._address)
@@ -235,7 +237,6 @@ public:
 		}
 		}
 		return false;
 		return false;
 	}
 	}
-	ZT_ALWAYS_INLINE bool operator!=(const Identity &id) const noexcept { return !(*this == id); }
 	ZT_ALWAYS_INLINE bool operator>(const Identity &id) const noexcept { return (id < *this); }
 	ZT_ALWAYS_INLINE bool operator>(const Identity &id) const noexcept { return (id < *this); }
 	ZT_ALWAYS_INLINE bool operator<=(const Identity &id) const noexcept { return !(id < *this); }
 	ZT_ALWAYS_INLINE bool operator<=(const Identity &id) const noexcept { return !(id < *this); }
 	ZT_ALWAYS_INLINE bool operator>=(const Identity &id) const noexcept { return !(*this < id); }
 	ZT_ALWAYS_INLINE bool operator>=(const Identity &id) const noexcept { return !(*this < id); }

+ 3 - 7
node/MAC.hpp

@@ -33,7 +33,7 @@ class MAC : public TriviallyCopyable
 public:
 public:
 	ZT_ALWAYS_INLINE MAC() noexcept : _m(0ULL) {}
 	ZT_ALWAYS_INLINE MAC() noexcept : _m(0ULL) {}
 	ZT_ALWAYS_INLINE MAC(const uint8_t a,const uint8_t b,const uint8_t c,const uint8_t d,const uint8_t e,const uint8_t f) noexcept : _m( (((uint64_t)a) << 40U) | (((uint64_t)b) << 32U) | (((uint64_t)c) << 24U) | (((uint64_t)d) << 16U) | (((uint64_t)e) << 8U) | ((uint64_t)f) ) {}
 	ZT_ALWAYS_INLINE MAC(const uint8_t a,const uint8_t b,const uint8_t c,const uint8_t d,const uint8_t e,const uint8_t f) noexcept : _m( (((uint64_t)a) << 40U) | (((uint64_t)b) << 32U) | (((uint64_t)c) << 24U) | (((uint64_t)d) << 16U) | (((uint64_t)e) << 8U) | ((uint64_t)f) ) {}
-	explicit ZT_ALWAYS_INLINE MAC(const uint64_t m) noexcept : _m(m & 0xffffffffffffULL) {}
+	explicit ZT_ALWAYS_INLINE MAC(const uint64_t m) noexcept : _m(m) {}
 	explicit ZT_ALWAYS_INLINE MAC(const uint8_t b[6]) noexcept { setTo(b); }
 	explicit ZT_ALWAYS_INLINE MAC(const uint8_t b[6]) noexcept { setTo(b); }
 	ZT_ALWAYS_INLINE MAC(const Address &ztaddr,uint64_t nwid) noexcept { fromAddress(ztaddr,nwid); }
 	ZT_ALWAYS_INLINE MAC(const Address &ztaddr,uint64_t nwid) noexcept { fromAddress(ztaddr,nwid); }
 
 
@@ -78,7 +78,7 @@ public:
 	/**
 	/**
 	 * @return True if this is broadcast (all 0xff)
 	 * @return True if this is broadcast (all 0xff)
 	 */
 	 */
-	ZT_ALWAYS_INLINE bool isBroadcast() const noexcept { return (_m == 0xffffffffffffULL); }
+	ZT_ALWAYS_INLINE bool isBroadcast() const noexcept { return _m; }
 
 
 	/**
 	/**
 	 * @return True if this is a multicast MAC
 	 * @return True if this is a multicast MAC
@@ -167,11 +167,7 @@ public:
 		return buf;
 		return buf;
 	}
 	}
 
 
-	ZT_ALWAYS_INLINE MAC &operator=(const uint64_t m) noexcept
-	{
-		_m = m & 0xffffffffffffULL;
-		return *this;
-	}
+	ZT_ALWAYS_INLINE MAC &operator=(const uint64_t m) noexcept { _m = m; return *this; }
 
 
 	ZT_ALWAYS_INLINE bool operator==(const MAC &m) const noexcept { return (_m == m._m); }
 	ZT_ALWAYS_INLINE bool operator==(const MAC &m) const noexcept { return (_m == m._m); }
 	ZT_ALWAYS_INLINE bool operator!=(const MAC &m) const noexcept { return (_m != m._m); }
 	ZT_ALWAYS_INLINE bool operator!=(const MAC &m) const noexcept { return (_m != m._m); }