diff options
-rw-r--r-- | src/cryptography/x509/extensions.py | 8 | ||||
-rw-r--r-- | tests/x509/test_x509_ext.py | 26 |
2 files changed, 34 insertions, 0 deletions
diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index f6957b9d..0bfe6f92 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -554,6 +554,11 @@ class PolicyConstraints(object): 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 @@ class Extension(object): 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 62ce9050..db805aa6 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -91,6 +91,25 @@ class TestExtension(object): 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 @@ class TestPolicyConstraints(object): 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) |