aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cryptography/hazmat/bindings/utils.py3
-rw-r--r--cryptography/hazmat/primitives/constant_time.py7
-rw-r--r--cryptography/hazmat/primitives/padding.py7
-rw-r--r--setup.py37
4 files changed, 43 insertions, 11 deletions
diff --git a/cryptography/hazmat/bindings/utils.py b/cryptography/hazmat/bindings/utils.py
index 9141c155..40fd07f8 100644
--- a/cryptography/hazmat/bindings/utils.py
+++ b/cryptography/hazmat/bindings/utils.py
@@ -74,7 +74,8 @@ def build_ffi(module_prefix, modules, pre_include, post_include, libraries):
functions +
customizations
),
- libraries=libraries
+ libraries=libraries,
+ ext_package="cryptography",
)
for name in modules:
diff --git a/cryptography/hazmat/primitives/constant_time.py b/cryptography/hazmat/primitives/constant_time.py
index 6502803e..e88a0d95 100644
--- a/cryptography/hazmat/primitives/constant_time.py
+++ b/cryptography/hazmat/primitives/constant_time.py
@@ -23,7 +23,8 @@ _ffi.cdef("""
uint8_t Cryptography_constant_time_bytes_eq(uint8_t *, size_t, uint8_t *,
size_t);
""")
-_lib = _ffi.verify("""
+_lib = _ffi.verify(
+ """
uint8_t Cryptography_constant_time_bytes_eq(uint8_t *a, size_t len_a,
uint8_t *b, size_t len_b) {
size_t i = 0;
@@ -42,7 +43,9 @@ uint8_t Cryptography_constant_time_bytes_eq(uint8_t *a, size_t len_a,
/* Now check the low bit to see if it's set */
return (mismatch & 1) == 0;
}
-""")
+""",
+ ext_package="cryptography",
+)
def bytes_eq(a, b):
diff --git a/cryptography/hazmat/primitives/padding.py b/cryptography/hazmat/primitives/padding.py
index e517dee0..ddb2c63c 100644
--- a/cryptography/hazmat/primitives/padding.py
+++ b/cryptography/hazmat/primitives/padding.py
@@ -23,7 +23,8 @@ _ffi = cffi.FFI()
_ffi.cdef("""
uint8_t Cryptography_check_pkcs7_padding(const uint8_t *, uint8_t);
""")
-_lib = _ffi.verify("""
+_lib = _ffi.verify(
+ """
/* Returns the value of the input with the most-significant-bit copied to all
of the bits. */
static uint8_t Cryptography_DUPLICATE_MSB_TO_ALL(uint8_t a) {
@@ -59,7 +60,9 @@ uint8_t Cryptography_check_pkcs7_padding(const uint8_t *data,
/* Now check the low bit to see if it's set */
return (mismatch & 1) == 0;
}
-""")
+""",
+ ext_package="cryptography",
+)
class PKCS7(object):
diff --git a/setup.py b/setup.py
index 3202f843..feed0cd8 100644
--- a/setup.py
+++ b/setup.py
@@ -11,6 +11,7 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import os
+from distutils.command.build import build
from setuptools import setup, find_packages
@@ -25,14 +26,34 @@ with open(os.path.join(base_dir, "cryptography", "__about__.py")) as f:
CFFI_DEPENDENCY = "cffi>=0.6"
SIX_DEPENDENCY = "six>=1.4.1"
-install_requires = [
+requirements = [
CFFI_DEPENDENCY,
SIX_DEPENDENCY
]
-setup_requires = [
- CFFI_DEPENDENCY,
-]
+
+class cffi_build(build):
+ """
+ This class exists, instead of just providing ``ext_modules=[...]`` directly
+ in ``setup()`` because importing cryptography requires we have several
+ packages installed first.
+
+ By doing the imports here we ensure that packages listed in
+ ``setup_requires`` are already installed.
+ """
+
+ def finalize_options(self):
+ from cryptography.hazmat.bindings.openssl.binding import Binding
+ from cryptography.hazmat.primitives import constant_time, padding
+
+ self.distribution.ext_modules = [
+ Binding().ffi.verifier.get_extension(),
+ constant_time._ffi.verifier.get_extension(),
+ padding._ffi.verifier.get_extension()
+ ]
+
+ build.finalize_options(self)
+
with open(os.path.join(base_dir, "README.rst")) as f:
long_description = f.read()
@@ -74,9 +95,13 @@ setup(
packages=find_packages(exclude=["tests", "tests.*"]),
- install_requires=install_requires,
- setup_requires=setup_requires,
+ install_requires=requirements,
+ setup_requires=requirements,
# for cffi
zip_safe=False,
+ ext_package="cryptography",
+ cmdclass={
+ "build": cffi_build,
+ }
)