aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cryptography/hazmat/bindings/utils.py12
-rw-r--r--tests/hazmat/bindings/test_utils.py28
2 files changed, 36 insertions, 4 deletions
diff --git a/cryptography/hazmat/bindings/utils.py b/cryptography/hazmat/bindings/utils.py
index 1d07cd97..3da0412e 100644
--- a/cryptography/hazmat/bindings/utils.py
+++ b/cryptography/hazmat/bindings/utils.py
@@ -71,7 +71,11 @@ def build_ffi(module_prefix, modules, pre_include, post_include, libraries):
)
lib = ffi.verify(
source=source,
- modulename=create_modulename(ffi, source),
+ modulename=_create_modulename(
+ ffi, source,
+ sys.version,
+ sys.version_info
+ ),
libraries=libraries,
ext_package="cryptography",
)
@@ -87,7 +91,7 @@ def build_ffi(module_prefix, modules, pre_include, post_include, libraries):
return ffi, lib
-def create_modulename(ffi, source):
+def _create_modulename(ffi, source, sys_version, sys_version_info):
"""
cffi creates a modulename internally that incorporates the cffi version.
This will cause cryptography's wheels to break when the version of cffi
@@ -95,8 +99,8 @@ def create_modulename(ffi, source):
resolve this we build our own modulename that uses most of the same code
from cffi but elides the version key.
"""
- key = '\x00'.join([sys.version[:3], source] + ffi._cdefsources)
- if sys.version_info >= (3,):
+ key = '\x00'.join([sys_version[:3], source] + ffi._cdefsources)
+ if sys_version_info >= (3,):
key = key.encode('utf-8')
k1 = hex(binascii.crc32(key[0::2]) & 0xffffffff)
k1 = k1.lstrip('0x').rstrip('L')
diff --git a/tests/hazmat/bindings/test_utils.py b/tests/hazmat/bindings/test_utils.py
new file mode 100644
index 00000000..d458972e
--- /dev/null
+++ b/tests/hazmat/bindings/test_utils.py
@@ -0,0 +1,28 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from __future__ import absolute_import, division, print_function
+
+import sys
+
+import pretend
+
+from cryptography.hazmat.bindings import utils
+
+
+def test_create_modulename():
+ pretend_ffi = pretend.stub(_cdefsources=["cdef sources go here"])
+ source = "source code"
+ name = utils._create_modulename(pretend_ffi, source, sys.version,
+ sys.version_info)
+ assert name == "_cffi_bcba7f4bx4a14b588"