Initial working state
diff --git a/cryptography/bindings/openssl/api.py b/cryptography/bindings/openssl/api.py
index 7d189d6..3d92c14 100644
--- a/cryptography/bindings/openssl/api.py
+++ b/cryptography/bindings/openssl/api.py
@@ -19,7 +19,7 @@
 import cffi
 
 from cryptography.primitives import interfaces
-from cryptography.primitives.block.ciphers import AES, Camellia
+from cryptography.primitives.block.ciphers import AES, Camellia, TripleDES
 from cryptography.primitives.block.modes import CBC, CTR, ECB, OFB, CFB
 
 
@@ -135,6 +135,12 @@
                 mode_cls,
                 GetCipherByName("{cipher.name}-{cipher.key_size}-{mode.name}")
             )
+        for mode_cls in [CBC, CFB, OFB]:
+            self.register_cipher_adapter(
+                TripleDES,
+                mode_cls,
+                GetCipherByName("des-ede3-{mode.name}")
+            )
 
     def create_block_cipher_context(self, cipher, mode):
         ctx = self.lib.EVP_CIPHER_CTX_new()
diff --git a/cryptography/primitives/block/ciphers.py b/cryptography/primitives/block/ciphers.py
index f10a349..5d32772 100644
--- a/cryptography/primitives/block/ciphers.py
+++ b/cryptography/primitives/block/ciphers.py
@@ -63,6 +63,10 @@
 
     def __init__(self, key):
         super(TripleDES, self).__init__()
+        if len(key) == 8:
+            key += key + key
+        elif len(key) == 16:
+            key += key[:8]
         self.key = key
 
         # Verify that the key size matches the expected key size
diff --git a/tests/primitives/test_nist.py b/tests/primitives/test_nist.py
index 8c8a381..117764b 100644
--- a/tests/primitives/test_nist.py
+++ b/tests/primitives/test_nist.py
@@ -27,12 +27,18 @@
 
 
 def load_3des_nist_vectors_from_file(path, op):
-    vectors = load_nist_vectors_from_file(path, op)
-    for vector in vectors:
-        vector["ciphertext"] = vector["ciphertext3"]
-        del vector["ciphertext1"]
-        del vector["ciphertext2"]
-        del vector["ciphertext3"]
+    vectors = []
+    for vector in load_nist_vectors_from_file(path, op):
+        for i in xrange(1, 4):
+            plaintext = vector.get("plaintext{0}".format(i))
+            if plaintext is None:
+                plaintext = vector["plaintext"]
+            vectors.append({
+                "key": vector["keys"],
+                "iv": vector["iv{0}".format(i)],
+                "ciphertext": vector["ciphertext{0}".format(i)],
+                "plaintext": plaintext,
+            })
     return vectors
 
 
@@ -188,7 +194,7 @@
             "TCBCvartext.rsp",
         ],
         lambda keys, iv: ciphers.TripleDES(binascii.unhexlify(keys)),
-        lambda keys, iv: modes.CBC(iv),
+        lambda keys, iv: modes.CBC(binascii.unhexlify(iv)),
     )
 
     test_KAT2 = generate_encrypt_test(
@@ -200,18 +206,18 @@
             "TCBCIvarkey.rsp",
             "TCBCIvartext.rsp",
         ],
-        lambda keys, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(keys)),
-        lambda keys, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3),
+        lambda key, iv: ciphers.TripleDES(binascii.unhexlify(key)),
+        lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
     )
 
     test_KAT3 = generate_encrypt_test(
-        lambda path: load_nist_vectors_from_file(path, "ENCRYPT"),
+        lambda path: load_3des_nist_vectors_from_file(path, "ENCRYPT"),
         os.path.join("3DES", "KAT"),
         [
             "TCBCIinvperm.rsp",
         ],
-        lambda keys, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(keys)),
-        lambda keys, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3),
+        lambda key, iv: ciphers.TripleDES(binascii.unhexlify(key)),
+        lambda key, iv: modes.CBC(binascii.unhexlify(iv)),
     )
 
     test_MMT1 = generate_encrypt_test(
@@ -223,7 +229,7 @@
             "TCBCIMMT3.rsp",
         ],
         lambda key1, key2, key3, iv1, iv2, iv3: ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)),
-        lambda key1, key2, key3, iv1, iv2, iv3: modes.CBC(iv1 + iv2 + iv3),
+        lambda key1, key2, key3, iv1, iv2, iv3: modes.CBC(binascii.unhexlify(iv1 + iv2 + iv3)),
     )
 
     test_MMT1 = generate_encrypt_test(
@@ -235,5 +241,5 @@
             "TCBCMMT3.rsp",
         ],
         lambda key1, key2, key3, iv: ciphers.TripleDES(binascii.unhexlify(key1 + key2 + key3)),
-        lambda key1, key2, key3, iv: modes.CBC(iv),
+        lambda key1, key2, key3, iv: modes.CBC(binascii.unhexlify(iv)),
     )