Browse Source

Ed25519 per thread

pull/306/head
orignal 9 years ago
parent
commit
3c8e331809
  1. 24
      Signature.cpp

24
Signature.cpp

@ -395,12 +395,26 @@ namespace crypto
// Bi16[0][0] = B, base point // Bi16[0][0] = B, base point
}; };
static std::unique_ptr<Ed25519> g_Ed25519; static std::shared_ptr<Ed25519> g_Ed25519;
std::unique_ptr<Ed25519>& GetEd25519 () #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) // gcc 4.8 and higer
static thread_local std::shared_ptr<Ed25519> g_Ed25519ThisThread;
#else
static std::shared_ptr<Ed25519> g_Ed25519ThisThread;
#endif
std::shared_ptr<Ed25519>& GetEd25519 ()
{ {
if (!g_Ed25519) // TODO: implement it better
g_Ed25519.reset (new Ed25519 ()); if (!g_Ed25519ThisThread)
return g_Ed25519; {
if (!g_Ed25519)
{
g_Ed25519 = std::make_shared<Ed25519>();
g_Ed25519ThisThread = g_Ed25519;
}
else
g_Ed25519ThisThread = std::make_shared<Ed25519>(*g_Ed25519);
}
return g_Ed25519ThisThread;
} }

Loading…
Cancel
Save