add __hash__ to PolicyConstraints and Extension (#3917)

diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py
index f6957b9..0bfe6f9 100644
--- a/src/cryptography/x509/extensions.py
+++ b/src/cryptography/x509/extensions.py
@@ -554,6 +554,11 @@
     def __ne__(self, other):
         return not self == other
 
+    def __hash__(self):
+        return hash(
+            (self.require_explicit_policy, self.inhibit_policy_mapping)
+        )
+
     require_explicit_policy = utils.read_only_property(
         "_require_explicit_policy"
     )
@@ -1063,6 +1068,9 @@
     def __ne__(self, other):
         return not self == other
 
+    def __hash__(self):
+        return hash((self.oid, self.critical, self.value))
+
 
 class GeneralNames(object):
     def __init__(self, general_names):
diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py
index 62ce905..db805aa 100644
--- a/tests/x509/test_x509_ext.py
+++ b/tests/x509/test_x509_ext.py
@@ -91,6 +91,25 @@
         assert ext1 != ext4
         assert ext1 != object()
 
+    def test_hash(self):
+        ext1 = x509.Extension(
+            ExtensionOID.BASIC_CONSTRAINTS,
+            False,
+            x509.BasicConstraints(ca=False, path_length=None)
+        )
+        ext2 = x509.Extension(
+            ExtensionOID.BASIC_CONSTRAINTS,
+            False,
+            x509.BasicConstraints(ca=False, path_length=None)
+        )
+        ext3 = x509.Extension(
+            ExtensionOID.BASIC_CONSTRAINTS,
+            False,
+            x509.BasicConstraints(ca=True, path_length=None)
+        )
+        assert hash(ext1) == hash(ext2)
+        assert hash(ext1) != hash(ext3)
+
 
 class TestTLSFeature(object):
     def test_not_enum_type(self):
@@ -2677,6 +2696,13 @@
         assert pc != pc3
         assert pc != object()
 
+    def test_hash(self):
+        pc = x509.PolicyConstraints(2, 1)
+        pc2 = x509.PolicyConstraints(2, 1)
+        pc3 = x509.PolicyConstraints(2, None)
+        assert hash(pc) == hash(pc2)
+        assert hash(pc) != hash(pc3)
+
 
 @pytest.mark.requires_backend_interface(interface=RSABackend)
 @pytest.mark.requires_backend_interface(interface=X509Backend)