diff --git a/cryptography/bindings/openssl/api.py b/cryptography/bindings/openssl/api.py
index fdac4e9..fc61c4b 100644
--- a/cryptography/bindings/openssl/api.py
+++ b/cryptography/bindings/openssl/api.py
@@ -208,4 +208,5 @@
         assert res != 0
         return copied_ctx
 
+
 api = API()
diff --git a/cryptography/primitives/block/base.py b/cryptography/primitives/block/base.py
index b6f4577..adade3c 100644
--- a/cryptography/primitives/block/base.py
+++ b/cryptography/primitives/block/base.py
@@ -44,37 +44,39 @@
         self.cipher = cipher
         self.mode = mode
         self._api = api
-        if isinstance(self, _BlockCipherEncryptionContext):
-            ctx_method = self._api.create_block_cipher_encrypt_context
-        else:
-            ctx_method = self._api.create_block_cipher_decrypt_context
-        self._ctx = ctx_method(self.cipher, self.mode)
 
-    def finalize(self):
+    def _check_ctx(self):
         if self._ctx is None:
             raise ValueError("Context was already finalized")
 
-        if isinstance(self, _BlockCipherEncryptionContext):
-            result = self._api.finalize_encrypt_context(self._ctx)
-        else:
-            result = self._api.finalize_decrypt_context(self._ctx)
-
-        self._ctx = None
-        return result
-
-    def update(self, data):
-        if self._ctx is None:
-            raise ValueError("Context was already finalized")
-
-        if isinstance(self, _BlockCipherEncryptionContext):
-            return self._api.update_encrypt_context(self._ctx, data)
-        else:
-            return self._api.update_decrypt_context(self._ctx, data)
-
 
 class _BlockCipherEncryptionContext(_BlockCipherContext):
-    pass
+    def __init__(self, cipher, mode, api):
+        super(_BlockCipherEncryptionContext, self).__init__(cipher, mode, api)
+        self._ctx = self._api.create_block_cipher_encrypt_context(cipher, mode)
+
+    def update(self, data):
+        self._check_ctx()
+        return self._api.update_encrypt_context(self._ctx, data)
+
+    def finalize(self):
+        self._check_ctx()
+        data = self._api.finalize_encrypt_context(self._ctx)
+        self._ctx = None
+        return data
 
 
 class _BlockCipherDecryptionContext(_BlockCipherContext):
-    pass
+    def __init__(self, cipher, mode, api):
+        super(_BlockCipherDecryptionContext, self).__init__(cipher, mode, api)
+        self._ctx = self._api.create_block_cipher_decrypt_context(cipher, mode)
+
+    def update(self, data):
+        self._check_ctx()
+        return self._api.update_decrypt_context(self._ctx, data)
+
+    def finalize(self):
+        self._check_ctx()
+        data = self._api.finalize_decrypt_context(self._ctx)
+        self._ctx = None
+        return data
