Merge pull request #2584 from reaperhulk/asn1-bindings

new asn1 bindings needed for #2582
diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py
index 0eed21b..4681629 100644
--- a/src/cryptography/x509/extensions.py
+++ b/src/cryptography/x509/extensions.py
@@ -235,6 +235,9 @@
     def __ne__(self, other):
         return not self == other
 
+    def __hash__(self):
+        return hash(self.digest)
+
 
 @utils.register_interface(ExtensionType)
 class AuthorityInformationAccess(object):
diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py
index a12a48f..8aaf805 100644
--- a/tests/test_x509_ext.py
+++ b/tests/test_x509_ext.py
@@ -687,6 +687,20 @@
         assert ski != ski2
         assert ski != object()
 
+    def test_hash(self):
+        ski1 = x509.SubjectKeyIdentifier(
+            binascii.unhexlify(b"092384932230498bc980aa8098456f6ff7ff3ac9")
+        )
+        ski2 = x509.SubjectKeyIdentifier(
+            binascii.unhexlify(b"092384932230498bc980aa8098456f6ff7ff3ac9")
+        )
+        ski3 = x509.SubjectKeyIdentifier(
+            binascii.unhexlify(b"aa8098456f6ff7ff3ac9092384932230498bc980")
+        )
+
+        assert hash(ski1) == hash(ski2)
+        assert hash(ski1) != hash(ski3)
+
 
 class TestAuthorityKeyIdentifier(object):
     def test_authority_cert_issuer_not_generalname(self):