mirror of
https://github.com/ZeroTier/ZeroTierOne
synced 2025-07-05 20:41:44 -07:00
clang-format
This commit is contained in:
parent
d45f280cb7
commit
ba2a4a605c
140 changed files with 19214 additions and 17403 deletions
|
@ -18,20 +18,28 @@
|
|||
|
||||
namespace ZeroTier {
|
||||
|
||||
#define ZT_C25519_PUBLIC_KEY_LEN 64
|
||||
#define ZT_C25519_PUBLIC_KEY_LEN 64
|
||||
#define ZT_C25519_PRIVATE_KEY_LEN 64
|
||||
#define ZT_C25519_SIGNATURE_LEN 96
|
||||
#define ZT_C25519_SIGNATURE_LEN 96
|
||||
|
||||
/**
|
||||
* A combined Curve25519 ECDH and Ed25519 signature engine
|
||||
*/
|
||||
class C25519
|
||||
{
|
||||
public:
|
||||
struct Public { uint8_t data[ZT_C25519_PUBLIC_KEY_LEN]; };
|
||||
struct Private { uint8_t data[ZT_C25519_PRIVATE_KEY_LEN]; };
|
||||
struct Signature { uint8_t data[ZT_C25519_SIGNATURE_LEN]; };
|
||||
struct Pair { Public pub; Private priv; };
|
||||
class C25519 {
|
||||
public:
|
||||
struct Public {
|
||||
uint8_t data[ZT_C25519_PUBLIC_KEY_LEN];
|
||||
};
|
||||
struct Private {
|
||||
uint8_t data[ZT_C25519_PRIVATE_KEY_LEN];
|
||||
};
|
||||
struct Signature {
|
||||
uint8_t data[ZT_C25519_SIGNATURE_LEN];
|
||||
};
|
||||
struct Pair {
|
||||
Public pub;
|
||||
Private priv;
|
||||
};
|
||||
|
||||
/**
|
||||
* Generate a C25519 elliptic curve key pair
|
||||
|
@ -39,7 +47,7 @@ public:
|
|||
static inline Pair generate()
|
||||
{
|
||||
Pair kp;
|
||||
Utils::getSecureRandom(kp.priv.data,ZT_C25519_PRIVATE_KEY_LEN);
|
||||
Utils::getSecureRandom(kp.priv.data, ZT_C25519_PRIVATE_KEY_LEN);
|
||||
_calcPubDH(kp);
|
||||
_calcPubED(kp);
|
||||
return kp;
|
||||
|
@ -58,18 +66,17 @@ public:
|
|||
* @return Key pair where cond(kp) returns true
|
||||
* @tparam F Type of 'cond'
|
||||
*/
|
||||
template<typename F>
|
||||
static inline Pair generateSatisfying(F cond)
|
||||
template <typename F> static inline Pair generateSatisfying(F cond)
|
||||
{
|
||||
Pair kp;
|
||||
void *const priv = (void *)kp.priv.data;
|
||||
Utils::getSecureRandom(priv,ZT_C25519_PRIVATE_KEY_LEN);
|
||||
_calcPubED(kp); // do Ed25519 key -- bytes 32-63 of pub and priv
|
||||
void* const priv = (void*)kp.priv.data;
|
||||
Utils::getSecureRandom(priv, ZT_C25519_PRIVATE_KEY_LEN);
|
||||
_calcPubED(kp); // do Ed25519 key -- bytes 32-63 of pub and priv
|
||||
do {
|
||||
++(((uint64_t *)priv)[1]);
|
||||
--(((uint64_t *)priv)[2]);
|
||||
_calcPubDH(kp); // keep regenerating bytes 0-31 until satisfied
|
||||
} while (!cond(kp));
|
||||
++(((uint64_t*)priv)[1]);
|
||||
--(((uint64_t*)priv)[2]);
|
||||
_calcPubDH(kp); // keep regenerating bytes 0-31 until satisfied
|
||||
} while (! cond(kp));
|
||||
return kp;
|
||||
}
|
||||
|
||||
|
@ -84,8 +91,11 @@ public:
|
|||
* @param keybuf Buffer to fill
|
||||
* @param keylen Number of key bytes to generate
|
||||
*/
|
||||
static void agree(const Private &mine,const Public &their,void *keybuf,unsigned int keylen);
|
||||
static inline void agree(const Pair &mine,const Public &their,void *keybuf,unsigned int keylen) { agree(mine.priv,their,keybuf,keylen); }
|
||||
static void agree(const Private& mine, const Public& their, void* keybuf, unsigned int keylen);
|
||||
static inline void agree(const Pair& mine, const Public& their, void* keybuf, unsigned int keylen)
|
||||
{
|
||||
agree(mine.priv, their, keybuf, keylen);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign a message with a sender's key pair
|
||||
|
@ -106,8 +116,11 @@ public:
|
|||
* @param len Length of message in bytes
|
||||
* @param signature Buffer to fill with signature -- MUST be 96 bytes in length
|
||||
*/
|
||||
static void sign(const Private &myPrivate,const Public &myPublic,const void *msg,unsigned int len,void *signature);
|
||||
static inline void sign(const Pair &mine,const void *msg,unsigned int len,void *signature) { sign(mine.priv,mine.pub,msg,len,signature); }
|
||||
static void sign(const Private& myPrivate, const Public& myPublic, const void* msg, unsigned int len, void* signature);
|
||||
static inline void sign(const Pair& mine, const void* msg, unsigned int len, void* signature)
|
||||
{
|
||||
sign(mine.priv, mine.pub, msg, len, signature);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sign a message with a sender's key pair
|
||||
|
@ -118,16 +131,16 @@ public:
|
|||
* @param len Length of message in bytes
|
||||
* @return Signature
|
||||
*/
|
||||
static inline Signature sign(const Private &myPrivate,const Public &myPublic,const void *msg,unsigned int len)
|
||||
static inline Signature sign(const Private& myPrivate, const Public& myPublic, const void* msg, unsigned int len)
|
||||
{
|
||||
Signature sig;
|
||||
sign(myPrivate,myPublic,msg,len,sig.data);
|
||||
sign(myPrivate, myPublic, msg, len, sig.data);
|
||||
return sig;
|
||||
}
|
||||
static inline Signature sign(const Pair &mine,const void *msg,unsigned int len)
|
||||
static inline Signature sign(const Pair& mine, const void* msg, unsigned int len)
|
||||
{
|
||||
Signature sig;
|
||||
sign(mine.priv,mine.pub,msg,len,sig.data);
|
||||
sign(mine.priv, mine.pub, msg, len, sig.data);
|
||||
return sig;
|
||||
}
|
||||
|
||||
|
@ -140,7 +153,7 @@ public:
|
|||
* @param signature 96-byte signature
|
||||
* @return True if signature is valid and the message is authentic and unmodified
|
||||
*/
|
||||
static bool verify(const Public &their,const void *msg,unsigned int len,const void *signature);
|
||||
static bool verify(const Public& their, const void* msg, unsigned int len, const void* signature);
|
||||
|
||||
/**
|
||||
* Verify a message's signature
|
||||
|
@ -151,21 +164,21 @@ public:
|
|||
* @param signature 96-byte signature
|
||||
* @return True if signature is valid and the message is authentic and unmodified
|
||||
*/
|
||||
static inline bool verify(const Public &their,const void *msg,unsigned int len,const Signature &signature)
|
||||
static inline bool verify(const Public& their, const void* msg, unsigned int len, const Signature& signature)
|
||||
{
|
||||
return verify(their,msg,len,signature.data);
|
||||
return verify(their, msg, len, signature.data);
|
||||
}
|
||||
|
||||
private:
|
||||
private:
|
||||
// derive first 32 bytes of kp.pub from first 32 bytes of kp.priv
|
||||
// this is the ECDH key
|
||||
static void _calcPubDH(Pair &kp);
|
||||
static void _calcPubDH(Pair& kp);
|
||||
|
||||
// derive 2nd 32 bytes of kp.pub from 2nd 32 bytes of kp.priv
|
||||
// this is the Ed25519 sign/verify key
|
||||
static void _calcPubED(Pair &kp);
|
||||
static void _calcPubED(Pair& kp);
|
||||
};
|
||||
|
||||
} // namespace ZeroTier
|
||||
} // namespace ZeroTier
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue