aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2014-02-20 21:11:41 -0800
committerAlex Gaynor <alex.gaynor@gmail.com>2014-02-20 21:11:41 -0800
commit26084d8c15fe631febf5d58691eb2b7f1533460f (patch)
tree3739e8e75ade5a7849faf6838c0aeb459c4b9662
parent3c0de81384cf5a176a412aac3663ed054ea446da (diff)
parent3d487a6f46be93331dff0d55002003b3d2c4fc00 (diff)
downloadcryptography-26084d8c15fe631febf5d58691eb2b7f1533460f.tar.gz
cryptography-26084d8c15fe631febf5d58691eb2b7f1533460f.tar.bz2
cryptography-26084d8c15fe631febf5d58691eb2b7f1533460f.zip
Merge pull request #660 from reaperhulk/osrandom-more-robust
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.py13
-rw-r--r--tests/hazmat/bindings/test_openssl.py5
3 files changed, 18 insertions, 2 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..0903a4bf 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 35eb7e8d..c476390b 100644
--- a/tests/hazmat/bindings/test_openssl.py
+++ b/tests/hazmat/bindings/test_openssl.py
@@ -96,3 +96,8 @@ 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