From 7f25030b5308eef4cb8a276f1e91ca1647a80d8e Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 20 Feb 2014 21:21:47 -0600 Subject: Cryptography_add_osrandom_engine should be safe to call multiple times --- cryptography/hazmat/bindings/openssl/binding.py | 2 +- cryptography/hazmat/bindings/openssl/osrandom_engine.py | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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; -- cgit v1.2.3