little stuff

This commit is contained in:
Adam Ierymenko 2020-02-25 16:21:51 -08:00
parent 1b71b6d01a
commit 27ab88db1e
No known key found for this signature in database
GPG key ID: C8877CF2D7A5D7F3
2 changed files with 12 additions and 15 deletions

View file

@ -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), * @return Hash of public key(s)
* 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
*/ */
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); }

View file

@ -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 ZT_ALWAYS_INLINE MAC &operator=(const uint64_t m) noexcept { _m = m; return *this; }
{
_m = m & 0xffffffffffffULL;
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); }