diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2014-02-22 11:59:04 -0600 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2014-02-22 12:04:38 -0600 |
commit | bee60012bf6ab7c67648595e4c316c259882bfbb (patch) | |
tree | cac19687ccd1b9abc145290ca93b863b143c540d | |
parent | 6a364d5262905d00ae422d24d91af822b87e899d (diff) | |
download | cryptography-bee60012bf6ab7c67648595e4c316c259882bfbb.tar.gz |
add_osrandom_engine should be safe to call multiple times
-rw-r--r-- | cryptography/hazmat/bindings/openssl/binding.py | 2 | ||||
-rw-r--r-- | cryptography/hazmat/bindings/openssl/osrandom_engine.py | 13 | ||||
-rw-r--r-- | tests/hazmat/bindings/test_openssl.py | 6 |
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 + |