move mem_bio creation/reading to backend
diff --git a/src/cryptography/hazmat/backends/openssl/backend.py b/src/cryptography/hazmat/backends/openssl/backend.py
index 19d149b..10341fa 100644
--- a/src/cryptography/hazmat/backends/openssl/backend.py
+++ b/src/cryptography/hazmat/backends/openssl/backend.py
@@ -447,6 +447,28 @@
 
         return _MemoryBIO(self._ffi.gc(bio, self._lib.BIO_free), data_char_p)
 
+    def _create_mem_bio(self):
+        """
+        Creates an empty memory BIO.
+        """
+        bio_method = self._lib.BIO_s_mem()
+        assert bio_method != self._ffi.NULL
+        bio = self._lib.BIO_new(bio_method)
+        assert bio != self._ffi.NULL
+        bio = self._ffi.gc(bio, self._lib.BIO_free)
+        return bio
+
+    def _read_mem_bio(self, bio):
+        """
+        Reads a memory BIO. This only works on memory BIOs.
+        """
+        buf = self._ffi.new("char **")
+        buf_len = self._lib.BIO_get_mem_data(bio, buf)
+        assert buf_len > 0
+        assert buf[0] != self._ffi.NULL
+        bio_data = self._ffi.buffer(buf[0], buf_len)[:]
+        return bio_data
+
     def _evp_pkey_to_private_key(self, evp_pkey):
         """
         Return the appropriate type of PrivateKey given an evp_pkey cdata
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index a348630..532785a 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -25,30 +25,14 @@
         self._backend = backend
         self._x509 = x509
 
-    def _create_bio(self):
-        bio_method = self._backend._lib.BIO_s_mem()
-        assert bio_method != self._backend._ffi.NULL
-        bio = self._backend._lib.BIO_new(bio_method)
-        assert bio != self._backend._ffi.NULL
-        bio = self._backend._ffi.gc(bio, self._backend._lib.BIO_free)
-        return bio
-
-    def _read_bio(self, bio):
-        buf = self._backend._ffi.new("char **")
-        buf_len = self._backend._lib.BIO_get_mem_data(bio, buf)
-        assert buf_len > 0
-        assert buf[0] != self._backend._ffi.NULL
-        bio_data = self._backend._ffi.buffer(buf[0], buf_len)[:]
-        return bio_data
-
     def fingerprint(self, algorithm):
         h = hashes.Hash(algorithm, self._backend)
-        bio = self._create_bio()
+        bio = self._backend._create_mem_bio()
         res = self._backend._lib.i2d_X509_bio(
             bio, self._x509
         )
         assert res == 1
-        der = self._read_bio(bio)
+        der = self._backend._read_mem_bio(bio)
         h.update(der)
         return h.finalize()