summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2014-02-22 11:59:04 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2014-02-22 12:04:38 -0600
commitbee60012bf6ab7c67648595e4c316c259882bfbb (patch)
treecac19687ccd1b9abc145290ca93b863b143c540d
parent6a364d5262905d00ae422d24d91af822b87e899d (diff)
downloadcryptography-bee60012bf6ab7c67648595e4c316c259882bfbb.tar.gz
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.py13
-rw-r--r--tests/hazmat/bindings/test_openssl.py6
3 files changed, 19 insertions, 2 deletions
diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py
index 714ecc077..0469a1ead 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 23f2e17a6..0903a4bfe 100644
--- a/cryptography/hazmat/bindings/openssl/osrandom_engine.py
+++ b/cryptography/hazmat/bindings/openssl/osrandom_engine.py
@@ -174,8 +174,19 @@ static RAND_METHOD osrandom_rand = {
osrandom_rand_status,
};
+/* Returns 1 if successfully added, 2 if engine has previously been added,
+ and 0 for error. */
int Cryptography_add_osrandom_engine(void) {
- ENGINE *e = ENGINE_new();
+ ENGINE *e;
+ e = ENGINE_by_id(Cryptography_osrandom_engine_id);
+ if (e != NULL) {
+ ENGINE_free(e);
+ return 2;
+ } else {
+ ERR_clear_error();
+ }
+
+ e = ENGINE_new();
if (e == NULL) {
return 0;
}
diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py
index 35eb7e8d2..25c0ba5e4 100644
--- a/tests/hazmat/bindings/test_openssl.py
+++ b/tests/hazmat/bindings/test_openssl.py
@@ -96,3 +96,9 @@ class TestOpenSSL(object):
# unlocked
assert lock.acquire(False)
lock.release()
+
+ def test_add_engine_more_than_once(self):
+ b = Binding()
+ res = b.lib.Cryptography_add_osrandom_engine()
+ assert res == 2
+