aboutsummaryrefslogtreecommitdiffstats
path: root/cryptography
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 /cryptography
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
Diffstat (limited to 'cryptography')
-rw-r--r--cryptography/hazmat/bindings/openssl/binding.py2
-rw-r--r--cryptography/hazmat/bindings/openssl/osrandom_engine.py13
2 files changed, 13 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;
}