Don't compare cffi version using strings (#3524)

diff --git a/setup.py b/setup.py
index 70ea551..7c23b00 100644
--- a/setup.py
+++ b/setup.py
@@ -36,7 +36,6 @@
 requirements = [
     "idna>=2.1",
     "asn1crypto>=0.21.0",
-    "packaging",
     "six>=1.4.1",
     "setuptools>=20.5",
 ]
diff --git a/src/cryptography/hazmat/primitives/ciphers/base.py b/src/cryptography/hazmat/primitives/ciphers/base.py
index 502d980..e9d55a1 100644
--- a/src/cryptography/hazmat/primitives/ciphers/base.py
+++ b/src/cryptography/hazmat/primitives/ciphers/base.py
@@ -147,7 +147,7 @@
 
     # cffi 1.7 supports from_buffer on bytearray, which is required. We can
     # remove this check in the future when we raise our minimum PyPy version.
-    if utils._version_check(cffi.__version__, "1.7"):
+    if cffi.__version_info__ >= (1, 7):
         def update_into(self, data, buf):
             if self._ctx is None:
                 raise AlreadyFinalized("Context was already finalized.")
@@ -195,7 +195,7 @@
 
     # cffi 1.7 supports from_buffer on bytearray, which is required. We can
     # remove this check in the future when we raise our minimum PyPy version.
-    if utils._version_check(cffi.__version__, "1.7"):
+    if cffi.__version_info__ >= (1, 7):
         def update_into(self, data, buf):
             self._check_limit(len(data))
             return self._ctx.update_into(data, buf)
diff --git a/src/cryptography/utils.py b/src/cryptography/utils.py
index 40359c6..bec56d5 100644
--- a/src/cryptography/utils.py
+++ b/src/cryptography/utils.py
@@ -10,8 +10,6 @@
 import sys
 import warnings
 
-from packaging.version import parse
-
 
 # Several APIs were deprecated with no specific end-of-life date because of the
 # ubiquity of their use. They should not be removed until we agree on when that
@@ -104,11 +102,6 @@
         return len(bin(x)) - (2 + (x <= 0))
 
 
-def _version_check(version, required_version):
-    # This is used to check if we support update_into on CipherContext.
-    return parse(version) >= parse(required_version)
-
-
 class _DeprecatedValue(object):
     def __init__(self, value, message, warning_class):
         self.value = value
diff --git a/tests/hazmat/primitives/test_block.py b/tests/hazmat/primitives/test_block.py
index 11a7019..4c6ad18 100644
--- a/tests/hazmat/primitives/test_block.py
+++ b/tests/hazmat/primitives/test_block.py
@@ -17,7 +17,6 @@
 from cryptography.hazmat.primitives.ciphers import (
     Cipher, algorithms, base, modes
 )
-from cryptography.utils import _version_check
 
 from .utils import (
     generate_aead_exception_test, generate_aead_tag_exception_test
@@ -74,7 +73,7 @@
             decryptor.finalize()
 
     @pytest.mark.skipif(
-        not _version_check(cffi.__version__, '1.7'),
+        cffi.__version_info__ < (1, 7),
         reason="cffi version too old"
     )
     def test_use_update_into_after_finalize(self, backend):
diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py
index 83952a8..7f51576 100644
--- a/tests/hazmat/primitives/test_ciphers.py
+++ b/tests/hazmat/primitives/test_ciphers.py
@@ -18,7 +18,6 @@
 from cryptography.hazmat.primitives.ciphers.algorithms import (
     AES, ARC4, Blowfish, CAST5, Camellia, IDEA, SEED, TripleDES
 )
-from cryptography.utils import _version_check
 
 from ...utils import (
     load_nist_vectors, load_vectors_from_file, raises_unsupported_algorithm
@@ -143,7 +142,7 @@
 
 
 @pytest.mark.skipif(
-    not _version_check(cffi.__version__, '1.7'),
+    cffi.__version_info__ < (1, 7),
     reason="cffi version too old"
 )
 @pytest.mark.supported(
@@ -241,7 +240,7 @@
 
 
 @pytest.mark.skipif(
-    _version_check(cffi.__version__, '1.7'),
+    cffi.__version_info__ >= (1, 7),
     reason="cffi version too new"
 )
 @pytest.mark.requires_backend_interface(interface=CipherBackend)