|
@@ -2003,6 +2003,7 @@ extern "C" void ed25519_amd64_asm_sign(const unsigned char *sk,const unsigned ch
|
|
|
|
|
|
namespace ZeroTier {
|
|
|
|
|
|
+#ifdef ZT_CONTROLLER
|
|
|
struct C25519CacheKey
|
|
|
{
|
|
|
uint64_t messageDigest[4];
|
|
@@ -2019,6 +2020,7 @@ struct C25519CacheValue
|
|
|
static uint64_t _ed25519TimestampCounter = 0;
|
|
|
static Hashtable<C25519CacheKey,C25519CacheValue> _ed25519Cache;
|
|
|
static Mutex _ed25519CacheLock;
|
|
|
+#endif
|
|
|
|
|
|
void C25519::agree(const C25519::Private &mine,const C25519::Public &their,void *keybuf,unsigned int keylen)
|
|
|
{
|
|
@@ -2041,6 +2043,7 @@ void C25519::sign(const C25519::Private &myPrivate,const C25519::Public &myPubli
|
|
|
unsigned char digest[64]; // we sign the first 32 bytes of SHA-512(msg)
|
|
|
SHA512::hash(digest,msg,len);
|
|
|
|
|
|
+#ifdef ZT_CONTROLLER
|
|
|
C25519CacheKey ck;
|
|
|
ZT_FAST_MEMCPY(ck.messageDigest,digest,32);
|
|
|
ZT_FAST_MEMCPY(ck.publicKey,myPublic.data + 32,32);
|
|
@@ -2053,6 +2056,7 @@ void C25519::sign(const C25519::Private &myPrivate,const C25519::Public &myPubli
|
|
|
ZT_FAST_MEMCPY(signature,cv->signature,ZT_C25519_SIGNATURE_LEN);
|
|
|
return;
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
#ifdef ZT_USE_FAST_X64_ED25519
|
|
|
ed25519_amd64_asm_sign(myPrivate.data + 32,myPublic.data + 32,digest,(unsigned char *)signature);
|
|
@@ -2100,13 +2104,7 @@ void C25519::sign(const C25519::Private &myPrivate,const C25519::Public &myPubli
|
|
|
sig[32 + i] = s[i];
|
|
|
#endif
|
|
|
|
|
|
-/*
|
|
|
- Hashtable< Address,SharedPtr<Peer> >::Iterator i(_peers);
|
|
|
- Address *a = (Address *)0;
|
|
|
- SharedPtr<Peer> *p = (SharedPtr<Peer> *)0;
|
|
|
- while (i.next(a,p))
|
|
|
- _savePeer((void *)0,*p);
|
|
|
-*/
|
|
|
+#ifdef ZT_CONTROLLER
|
|
|
C25519CacheValue cvn;
|
|
|
memcpy(cvn.signature,signature,ZT_C25519_SIGNATURE_LEN);
|
|
|
{
|
|
@@ -2126,6 +2124,7 @@ void C25519::sign(const C25519::Private &myPrivate,const C25519::Public &myPubli
|
|
|
cvn.timestamp = ++_ed25519TimestampCounter;
|
|
|
_ed25519Cache.set(ck,cvn);
|
|
|
}
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
bool C25519::verify(const C25519::Public &their,const void *msg,unsigned int len,const void *signature)
|
|
@@ -2136,6 +2135,7 @@ bool C25519::verify(const C25519::Public &their,const void *msg,unsigned int len
|
|
|
if (!Utils::secureEq(sig + 64,digest,32))
|
|
|
return false;
|
|
|
|
|
|
+#ifdef ZT_CONTROLLER
|
|
|
C25519CacheKey ck;
|
|
|
ZT_FAST_MEMCPY(ck.messageDigest,digest,32);
|
|
|
ZT_FAST_MEMCPY(ck.publicKey,their.data + 32,32);
|
|
@@ -2147,6 +2147,7 @@ bool C25519::verify(const C25519::Public &their,const void *msg,unsigned int len
|
|
|
if (cv) {
|
|
|
return Utils::secureEq(cv->signature,signature,ZT_C25519_SIGNATURE_LEN);
|
|
|
}
|
|
|
+#endif
|
|
|
|
|
|
unsigned char t2[32];
|
|
|
ge25519 get1, get2;
|