From da5dca8a92dfe8e01c5f88c67fd78d37cd6a7d22 Mon Sep 17 00:00:00 2001 From: Terry Chia Date: Sun, 27 Jul 2014 12:27:52 +0800 Subject: Added entry_points. --- cryptography/hazmat/backends/__init__.py | 29 ++++++++++++++++------------- setup.py | 16 +++++++++++++++- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/cryptography/hazmat/backends/__init__.py b/cryptography/hazmat/backends/__init__.py index ae78822c..663d1f55 100644 --- a/cryptography/hazmat/backends/__init__.py +++ b/cryptography/hazmat/backends/__init__.py @@ -13,13 +13,9 @@ from __future__ import absolute_import, division, print_function +import pkg_resources + from cryptography.hazmat.backends.multibackend import MultiBackend -from cryptography.hazmat.bindings.commoncrypto.binding import ( - Binding as CommonCryptoBinding -) -from cryptography.hazmat.bindings.openssl.binding import ( - Binding as OpenSSLBinding -) _available_backends_list = None @@ -31,16 +27,23 @@ def _available_backends(): if _available_backends_list is None: _available_backends_list = [] - if CommonCryptoBinding.is_available(): - from cryptography.hazmat.backends import commoncrypto - _available_backends_list.append(commoncrypto.backend) + for backend in pkg_resources.iter_entry_points( + "cryptography.hazmat.backends" + ): + is_backend_available = pkg_resources.get_entry_info( + backend.dist, + "cryptography.hazmat.is_backend_available", + backend.name + ) - if OpenSSLBinding.is_available(): - from cryptography.hazmat.backends import openssl - _available_backends_list.append(openssl.backend) + if is_backend_available is not None: + is_backend_available = is_backend_available.load(require=False) + if not is_backend_available(): + continue - return _available_backends_list + _available_backends_list.append(backend.load(require=False)) + return _available_backends_list _default_backend = None diff --git a/setup.py b/setup.py index f73394ee..30146b71 100644 --- a/setup.py +++ b/setup.py @@ -32,13 +32,15 @@ with open(os.path.join(base_dir, "cryptography", "__about__.py")) as f: exec(f.read(), about) +SETUPTOOLS_DEPENDENCY = "setuptools" CFFI_DEPENDENCY = "cffi>=0.8" SIX_DEPENDENCY = "six>=1.4.1" VECTORS_DEPENDENCY = "cryptography_vectors=={0}".format(about['__version__']) requirements = [ CFFI_DEPENDENCY, - SIX_DEPENDENCY + SIX_DEPENDENCY, + SETUPTOOLS_DEPENDENCY ] # If you add a new dep here you probably need to add it in the tox.ini as well @@ -173,5 +175,17 @@ setup( "build": CFFIBuild, "install": CFFIInstall, "test": PyTest, + }, + + entry_points={ + "cryptography.hazmat.backends": [ + "commoncrypto = cryptography.hazmat.backends.commoncrypto:backend", + "openssl = cryptography.hazmat.backends.openssl:backend" + ], + + "cryptography.hazmat.is_backend_available": [ + "commoncrypto = cryptography.hazmat.bindings.commoncrypto." + "binding:Binding.is_available" + ] } ) -- cgit v1.2.3 From 361545d874dce498461b5586cfdf45249c07ebbe Mon Sep 17 00:00:00 2001 From: Terry Chia Date: Mon, 28 Jul 2014 12:06:54 +0800 Subject: Removed need for Binding entry_point --- cryptography/hazmat/backends/__init__.py | 21 ++++------------ .../hazmat/bindings/commoncrypto/binding.py | 8 ------- cryptography/hazmat/bindings/openssl/binding.py | 6 ----- setup.py | 28 ++++++++++++++-------- 4 files changed, 23 insertions(+), 40 deletions(-) diff --git a/cryptography/hazmat/backends/__init__.py b/cryptography/hazmat/backends/__init__.py index 663d1f55..b0f663fe 100644 --- a/cryptography/hazmat/backends/__init__.py +++ b/cryptography/hazmat/backends/__init__.py @@ -25,23 +25,12 @@ def _available_backends(): global _available_backends_list if _available_backends_list is None: - _available_backends_list = [] - - for backend in pkg_resources.iter_entry_points( - "cryptography.hazmat.backends" - ): - is_backend_available = pkg_resources.get_entry_info( - backend.dist, - "cryptography.hazmat.is_backend_available", - backend.name + _available_backends_list = [ + backend.load(require=False) + for backend in pkg_resources.iter_entry_points( + "cryptography.backends" ) - - if is_backend_available is not None: - is_backend_available = is_backend_available.load(require=False) - if not is_backend_available(): - continue - - _available_backends_list.append(backend.load(require=False)) + ] return _available_backends_list diff --git a/cryptography/hazmat/bindings/commoncrypto/binding.py b/cryptography/hazmat/bindings/commoncrypto/binding.py index ee7378ad..ee09bebd 100644 --- a/cryptography/hazmat/bindings/commoncrypto/binding.py +++ b/cryptography/hazmat/bindings/commoncrypto/binding.py @@ -13,9 +13,6 @@ from __future__ import absolute_import, division, print_function -import platform -import sys - from cryptography.hazmat.bindings.utils import build_ffi @@ -53,8 +50,3 @@ class Binding(object): modules=cls._modules, extra_link_args=["-framework", "Security"] ) - - @classmethod - def is_available(cls): - return sys.platform == "darwin" and list(map( - int, platform.mac_ver()[0].split("."))) >= [10, 8, 0] diff --git a/cryptography/hazmat/bindings/openssl/binding.py b/cryptography/hazmat/bindings/openssl/binding.py index 4cbe3c5b..37891f6b 100644 --- a/cryptography/hazmat/bindings/openssl/binding.py +++ b/cryptography/hazmat/bindings/openssl/binding.py @@ -115,12 +115,6 @@ class Binding(object): res = cls.lib.Cryptography_add_osrandom_engine() assert res != 0 - @classmethod - def is_available(cls): - # For now, OpenSSL is considered our "default" binding, so we treat it - # as always available. - return True - @classmethod def init_static_locks(cls): with cls._lock_init_lock: diff --git a/setup.py b/setup.py index 30146b71..6a7642ff 100644 --- a/setup.py +++ b/setup.py @@ -14,6 +14,7 @@ from __future__ import absolute_import, division, print_function import os +import platform import subprocess import sys from distutils.command.build import build @@ -57,6 +58,21 @@ if not os.path.exists(os.path.join(base_dir, "vectors/setup.py")): test_requirements.append(VECTORS_DEPENDENCY) +def cc_is_available(): + return sys.platform == "darwin" and list(map( + int, platform.mac_ver()[0].split("."))) >= [10, 8, 0] + + +backends = [ + "openssl = cryptography.hazmat.backends.openssl:backend" +] + +if cc_is_available(): + backends.append( + "commoncrypto = cryptography.hazmat.backends.commoncrypto:backend", + ) + + def get_ext_modules(): from cryptography.hazmat.bindings.commoncrypto.binding import ( Binding as CommonCryptoBinding @@ -71,7 +87,7 @@ def get_ext_modules(): constant_time._ffi.verifier.get_extension(), padding._ffi.verifier.get_extension() ] - if CommonCryptoBinding.is_available(): + if cc_is_available(): ext_modules.append(CommonCryptoBinding().ffi.verifier.get_extension()) return ext_modules @@ -178,14 +194,6 @@ setup( }, entry_points={ - "cryptography.hazmat.backends": [ - "commoncrypto = cryptography.hazmat.backends.commoncrypto:backend", - "openssl = cryptography.hazmat.backends.openssl:backend" - ], - - "cryptography.hazmat.is_backend_available": [ - "commoncrypto = cryptography.hazmat.bindings.commoncrypto." - "binding:Binding.is_available" - ] + "cryptography.backends": backends, } ) -- cgit v1.2.3 From 55971ba2331d5f3b907b1b0b80c0034f5ee11df7 Mon Sep 17 00:00:00 2001 From: Terry Chia Date: Mon, 28 Jul 2014 16:56:10 +0800 Subject: Fix test failures --- tests/hazmat/backends/test_commoncrypto.py | 5 +++-- tests/hazmat/bindings/test_commoncrypto.py | 4 +++- tests/hazmat/bindings/test_openssl.py | 3 --- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/hazmat/backends/test_commoncrypto.py b/tests/hazmat/backends/test_commoncrypto.py index e2c6f4a0..28d1a6ca 100644 --- a/tests/hazmat/backends/test_commoncrypto.py +++ b/tests/hazmat/backends/test_commoncrypto.py @@ -17,7 +17,7 @@ import pytest from cryptography import utils from cryptography.exceptions import InternalError, _Reasons -from cryptography.hazmat.bindings.commoncrypto.binding import Binding +from cryptography.hazmat.backends import _available_backends from cryptography.hazmat.primitives import interfaces from cryptography.hazmat.primitives.ciphers.algorithms import AES from cryptography.hazmat.primitives.ciphers.base import Cipher @@ -32,7 +32,8 @@ class DummyCipher(object): block_size = 128 -@pytest.mark.skipif(not Binding.is_available(), +@pytest.mark.skipif("commoncrypto" not in + [i.name for i in _available_backends()], reason="CommonCrypto not available") class TestCommonCrypto(object): def test_supports_cipher(self): diff --git a/tests/hazmat/bindings/test_commoncrypto.py b/tests/hazmat/bindings/test_commoncrypto.py index 0332674b..71c832ef 100644 --- a/tests/hazmat/bindings/test_commoncrypto.py +++ b/tests/hazmat/bindings/test_commoncrypto.py @@ -15,10 +15,12 @@ from __future__ import absolute_import, division, print_function import pytest +from cryptography.hazmat.backends import _available_backends from cryptography.hazmat.bindings.commoncrypto.binding import Binding -@pytest.mark.skipif(not Binding.is_available(), +@pytest.mark.skipif("commoncrypto" not in + [i.name for i in _available_backends()], reason="CommonCrypto not available") class TestCommonCrypto(object): def test_binding_loads(self): diff --git a/tests/hazmat/bindings/test_openssl.py b/tests/hazmat/bindings/test_openssl.py index d22c4fd2..ca6e9ab0 100644 --- a/tests/hazmat/bindings/test_openssl.py +++ b/tests/hazmat/bindings/test_openssl.py @@ -27,9 +27,6 @@ class TestOpenSSL(object): assert binding.lib assert binding.ffi - def test_is_available(self): - assert Binding.is_available() is True - def test_crypto_lock_init(self): b = Binding() b.init_static_locks() -- cgit v1.2.3