From d70c98d28effdc410d5ac773e0e461fb548a40e0 Mon Sep 17 00:00:00 2001 From: Glyph Date: Fri, 26 Jun 2015 23:09:46 -0700 Subject: pointer shenanigans apparently (?) ENGINE_by_id treats its ID as an opaque *pointer* key and not actually as a string, and while CPython's CFFI support seems to manage to preserve the pointer identity when using the same Python string, PyPy doesn't. Fix things to use a cffi-wrapped pointer again and tests pass on PyPy. --- src/cryptography/hazmat/bindings/openssl/binding.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/cryptography/hazmat/bindings/openssl/binding.py b/src/cryptography/hazmat/bindings/openssl/binding.py index 8e80aa60..eda23959 100644 --- a/src/cryptography/hazmat/bindings/openssl/binding.py +++ b/src/cryptography/hazmat/bindings/openssl/binding.py @@ -22,8 +22,8 @@ class Binding(object): _rand_method = None _init_lock = threading.Lock() _lock_init_lock = threading.Lock() - _osrandom_engine_id = b"osrandom" - _osrandom_engine_name = b"osrandom_engine" + _osrandom_engine_id = ffi.new("const char[]", b"osrandom") + _osrandom_engine_name = ffi.new("const char[]", b"osrandom_engine") _retained = [] def __init__(self): @@ -98,6 +98,7 @@ class Binding(object): and cls.lib.ENGINE_add(e)) if not cls.lib.ENGINE_free(e): return 0 + assert cls.lib.ENGINE_by_id(cls._osrandom_engine_id) != cls.ffi.NULL return result @classmethod -- cgit v1.2.3