Merge pull request #111 from reaperhulk/abc-decorators

change abstract base class registration to use a decorator in modes
diff --git a/cryptography/primitives/block/modes.py b/cryptography/primitives/block/modes.py
index 221e739..4363180 100644
--- a/cryptography/primitives/block/modes.py
+++ b/cryptography/primitives/block/modes.py
@@ -16,6 +16,14 @@
 from cryptography.primitives import interfaces
 
 
+def register(iface):
+    def register_decorator(klass):
+        iface.register(klass)
+        return klass
+    return register_decorator
+
+
+@register(interfaces.ModeWithInitializationVector)
 class CBC(object):
     name = "CBC"
 
@@ -28,6 +36,7 @@
     name = "ECB"
 
 
+@register(interfaces.ModeWithInitializationVector)
 class OFB(object):
     name = "OFB"
 
@@ -36,6 +45,7 @@
         self.initialization_vector = initialization_vector
 
 
+@register(interfaces.ModeWithInitializationVector)
 class CFB(object):
     name = "CFB"
 
@@ -44,15 +54,10 @@
         self.initialization_vector = initialization_vector
 
 
+@register(interfaces.ModeWithNonce)
 class CTR(object):
     name = "CTR"
 
     def __init__(self, nonce):
         super(CTR, self).__init__()
         self.nonce = nonce
-
-
-interfaces.ModeWithInitializationVector.register(CBC)
-interfaces.ModeWithInitializationVector.register(OFB)
-interfaces.ModeWithInitializationVector.register(CFB)
-interfaces.ModeWithNonce.register(CTR)