From aa47e11471325056b4489e7326f857c6db9d0a95 Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 10 Nov 2016 21:44:40 -0500 Subject: [PATCH] fixed race condition --- Crypto.cpp | 20 +++----------------- Crypto.h | 5 ++--- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/Crypto.cpp b/Crypto.cpp index c70b62ef..f9478646 100644 --- a/Crypto.cpp +++ b/Crypto.cpp @@ -224,7 +224,7 @@ namespace crypto // DH - DHKeys::DHKeys (): m_IsUpdated (true) + DHKeys::DHKeys () { m_DH = DH_new (); DH_set0_pqg (m_DH, BN_dup (elgp), NULL, BN_dup (elgg)); @@ -236,7 +236,7 @@ namespace crypto DH_free (m_DH); } - void DHKeys::GenerateKeys (uint8_t * priv, uint8_t * pub) + void DHKeys::GenerateKeys () { BIGNUM * priv_key = NULL, * pub_key = NULL; #if !defined(__x86_64__) // use short exponent for non x64 @@ -261,21 +261,7 @@ namespace crypto DH_get0_key (m_DH, (const BIGNUM **)&pub_key, (const BIGNUM **)&priv_key); } - if (priv) bn2buf (priv_key, priv, 256); - if (pub) bn2buf (pub_key, pub, 256); - m_IsUpdated = true; - } - - const uint8_t * DHKeys::GetPublicKey () - { - if (m_IsUpdated) - { - // TODO: seems race condition here - bn2buf (m_DH->pub_key, m_PublicKey, 256); - BN_free (m_DH->pub_key); m_DH->pub_key = NULL; - m_IsUpdated= false; - } - return m_PublicKey; + bn2buf (pub_key, m_PublicKey, 256); } void DHKeys::Agree (const uint8_t * pub, uint8_t * shared) diff --git a/Crypto.h b/Crypto.h index 115fefda..476d2a26 100644 --- a/Crypto.h +++ b/Crypto.h @@ -36,15 +36,14 @@ namespace crypto DHKeys (); ~DHKeys (); - void GenerateKeys (uint8_t * priv = nullptr, uint8_t * pub = nullptr); - const uint8_t * GetPublicKey (); + void GenerateKeys (); + const uint8_t * GetPublicKey () const { return m_PublicKey; }; void Agree (const uint8_t * pub, uint8_t * shared); private: DH * m_DH; uint8_t m_PublicKey[256]; - bool m_IsUpdated; }; // ElGamal