aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2014-02-20 21:21:47 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2014-02-20 21:21:47 -0600
commit7f25030b5308eef4cb8a276f1e91ca1647a80d8e (patch)
treedd95e5012c3785c7f646a4822c3664e36fa24abb
parentd2f24580aa9e5f90c1011c2cfc7720077b74cd4d (diff)
downloadcryptography-7f25030b5308eef4cb8a276f1e91ca1647a80d8e.tar.gz
cryptography-7f25030b5308eef4cb8a276f1e91ca1647a80d8e.tar.bz2
cryptography-7f25030b5308eef4cb8a276f1e91ca1647a80d8e.zip
Cryptography_add_osrandom_engine should be safe to call multiple times
-rw-r--r--cryptography/hazmat/bindings/openssl/binding.py2
-rw-r--r--cryptography/hazmat/bindings/openssl/osrandom_engine.py7
2 files changed, 8 insertions, 1 deletions
diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py
index 714ecc07..0469a1ea 100644
--- a/cryptography/hazmat/bindings/openssl/binding.py
+++ b/cryptography/hazmat/bindings/openssl/binding.py
@@ -98,7 +98,7 @@ class Binding(object):
_OSX_PRE_INCLUDE, _OSX_POST_INCLUDE,
libraries)
res = cls.lib.Cryptography_add_osrandom_engine()
- assert res == 1
+ assert res != 0
@classmethod
def is_available(cls):
diff --git a/cryptography/hazmat/bindings/openssl/osrandom_engine.py b/cryptography/hazmat/bindings/openssl/osrandom_engine.py
index 23f2e17a..bbb3d642 100644
--- a/cryptography/hazmat/bindings/openssl/osrandom_engine.py
+++ b/cryptography/hazmat/bindings/openssl/osrandom_engine.py
@@ -175,6 +175,13 @@ static RAND_METHOD osrandom_rand = {
};
int Cryptography_add_osrandom_engine(void) {
+ ENGINE *engine = ENGINE_by_id(Cryptography_osrandom_engine_id);
+ if (engine != NULL) {
+ // The engine has already been added,
+ ENGINE_free(engine);
+ return 2;
+ }
+
ENGINE *e = ENGINE_new();
if (e == NULL) {
return 0;