diff options
| author | Alex Gaynor <alex.gaynor@gmail.com> | 2014-02-20 21:11:41 -0800 |
|---|---|---|
| committer | Alex Gaynor <alex.gaynor@gmail.com> | 2014-02-20 21:11:41 -0800 |
| commit | 26084d8c15fe631febf5d58691eb2b7f1533460f (patch) | |
| tree | 3739e8e75ade5a7849faf6838c0aeb459c4b9662 /cryptography | |
| parent | 3c0de81384cf5a176a412aac3663ed054ea446da (diff) | |
| parent | 3d487a6f46be93331dff0d55002003b3d2c4fc00 (diff) | |
| download | cryptography-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.py | 2 | ||||
| -rw-r--r-- | cryptography/hazmat/bindings/openssl/osrandom_engine.py | 13 |
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; } |
