diff --git a/tests/test_utils.py b/tests/test_utils.py
index 56edb3a..73394a5 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -286,7 +286,7 @@
     assert len(test_set) == 1280
 
 
-def test_load_openssl_vectors_encrypt():
+def test_load_openssl_vectors():
     vector_data = textwrap.dedent(
         """
         # We don't support CFB{1,8}-CAMELLIAxxx.{En,De}crypt
@@ -309,7 +309,19 @@
         "A53D28BB82DF741103EA4F921A44880B:0"
     ).splitlines()
 
-    assert load_openssl_vectors(vector_data, "ENCRYPT") == [
+    assert load_openssl_vectors(vector_data) == [
+        (
+            b"2B7E151628AED2A6ABF7158809CF4F3C",
+            b"000102030405060708090A0B0C0D0E0F",
+            b"6BC1BEE22E409F96E93D7E117393172A",
+            b"14F7646187817EB586599146B82BD719",
+        ),
+        (
+            b"2B7E151628AED2A6ABF7158809CF4F3C",
+            b"14F7646187817EB586599146B82BD719",
+            b"AE2D8A571E03AC9C9EB76FAC45AF8E51",
+            b"A53D28BB82DF741103EA4F921A44880B",
+        ),
         (
             b"2B7E151628AED2A6ABF7158809CF4F3C",
             b"000102030405060708090A0B0C0D0E0F",
@@ -325,51 +337,9 @@
     ]
 
 
-def test_load_openssl_vectors_decrypt():
-    vector_data = textwrap.dedent(
-        """
-        # We don't support CFB{1,8}-CAMELLIAxxx.{En,De}crypt
-        # For all CFB128 encrypts and decrypts, the transformed sequence is
-        #   CAMELLIA-bits-CFB:key:IV/ciphertext':plaintext:ciphertext:encdec
-        # CFB128-CAMELLIA128.Encrypt
-        """
-        "CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:"
-        "000102030405060708090A0B0C0D0E0F:6BC1BEE22E409F96E93D7E117393172A:"
-        "14F7646187817EB586599146B82BD719:1\n"
-        "CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:"
-        "14F7646187817EB586599146B82BD719:AE2D8A571E03AC9C9EB76FAC45AF8E51:"
-        "A53D28BB82DF741103EA4F921A44880B:1\n\n"
-        "# CFB128-CAMELLIA128.Decrypt\n"
-        "CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:"
-        "A53D28BB82DF741103EA4F921A44880B:30C81C46A35CE411E5FBC1191A0A52EF:"
-        "9C2157A664626D1DEF9EA420FDE69B96:0\n"
-        "CAMELLIA-128-CFB:2B7E151628AED2A6ABF7158809CF4F3C:"
-        "9C2157A664626D1DEF9EA420FDE69B96:F69F2445DF4F9B17AD2B417BE66C3710:"
-        "742A25F0542340C7BAEF24CA8482BB09:0\n"
-    ).splitlines()
-
-    assert load_openssl_vectors(vector_data, "DECRYPT") == [
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"A53D28BB82DF741103EA4F921A44880B",
-            b"30C81C46A35CE411E5FBC1191A0A52EF",
-            b"9C2157A664626D1DEF9EA420FDE69B96",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"9C2157A664626D1DEF9EA420FDE69B96",
-            b"F69F2445DF4F9B17AD2B417BE66C3710",
-            b"742A25F0542340C7BAEF24CA8482BB09",
-        ),
-    ]
-
-
-def test_load_openssl_vectors_from_file_encrypt():
-    test_list = load_openssl_vectors_from_file(
-        "Camellia/camellia-ofb.txt",
-        "ENCRYPT"
-    )
-    assert len(test_list) == 12
+def test_load_openssl_vectors_from_file():
+    test_list = load_openssl_vectors_from_file("Camellia/camellia-ofb.txt")
+    assert len(test_list) == 24
     assert test_list[:4] == [
         (
             b"2B7E151628AED2A6ABF7158809CF4F3C",
@@ -396,71 +366,3 @@
             b"D776379BE0E50825E681DA1A4C980E8E",
         ),
     ]
-
-
-def test_load_openssl_vectors_from_file_decrypt():
-    test_list = load_openssl_vectors_from_file(
-        "Camellia/camellia-ofb.txt",
-        "DECRYPT"
-    )
-    assert len(test_list) == 12
-    assert test_list[:4] == [
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"000102030405060708090A0B0C0D0E0F",
-            b"6BC1BEE22E409F96E93D7E117393172A",
-            b"14F7646187817EB586599146B82BD719",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"50FE67CC996D32B6DA0937E99BAFEC60",
-            b"AE2D8A571E03AC9C9EB76FAC45AF8E51",
-            b"25623DB569CA51E01482649977E28D84",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"D9A4DADA0892239F6B8B3D7680E15674",
-            b"30C81C46A35CE411E5FBC1191A0A52EF",
-            b"C776634A60729DC657D12B9FCA801E98",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"A78819583F0308E7A6BF36B1386ABF23",
-            b"F69F2445DF4F9B17AD2B417BE66C3710",
-            b"D776379BE0E50825E681DA1A4C980E8E",
-        ),
-    ]
-
-
-def test_load_openssl_vectors_from_file_no_enc_dec_flag():
-    test_list = load_openssl_vectors_from_file(
-        "Camellia/camellia-cbc.txt",
-        "ENCRYPT"
-    )
-    assert len(test_list) == 12
-    assert test_list[:4] == [
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"000102030405060708090A0B0C0D0E0F",
-            b"6BC1BEE22E409F96E93D7E117393172A",
-            b"1607CF494B36BBF00DAEB0B503C831AB",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"1607CF494B36BBF00DAEB0B503C831AB",
-            b"AE2D8A571E03AC9C9EB76FAC45AF8E51",
-            b"A2F2CF671629EF7840C5A5DFB5074887",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"A2F2CF671629EF7840C5A5DFB5074887",
-            b"30C81C46A35CE411E5FBC1191A0A52EF",
-            b"0F06165008CF8B8B5A63586362543E54",
-        ),
-        (
-            b"2B7E151628AED2A6ABF7158809CF4F3C",
-            b"36A84CDAFD5F9A85ADA0F0A993D6D577",
-            b"F69F2445DF4F9B17AD2B417BE66C3710",
-            b"74C64268CDB8B8FAF5B34E8AF3732980",
-        ),
-    ]
diff --git a/tests/utils.py b/tests/utils.py
index 62dfda2..48a32eb 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -105,16 +105,16 @@
     return cryptrec_list
 
 
-def load_openssl_vectors_from_file(filename, op):
+def load_openssl_vectors_from_file(filename):
     base = os.path.join(
         os.path.dirname(__file__), "primitives", "vectors", "OpenSSL",
     )
     with open(os.path.join(base, filename), "r") as vector_file:
-        return load_openssl_vectors(vector_file, op)
+        return load_openssl_vectors(vector_file)
 
 
-def load_openssl_vectors(vector_data, op):
-    encrypt, decrypt = [], []
+def load_openssl_vectors(vector_data):
+    vectors = []
 
     for line in vector_data:
         line = line.strip()
@@ -130,18 +130,5 @@
                   vector[4].encode("ascii"))  # plaintext
         # some OpenSSL vectors have a final field
         # 0 for decrypt, 1 for encrypt
-        if len(vector) == 6:
-            if int(vector[5]) == 0:
-                decrypt.append(params)
-            else:
-                encrypt.append(params)
-        else:
-            # if they don't have 1 or 0 they are meant for both enc & dec
-            # and should be added to both the encrypt and decrypt list
-            encrypt.append(params)
-            decrypt.append(params)
-
-    if op == "ENCRYPT":
-        return encrypt
-    else:
-        return decrypt
+        vectors.append(params)
+    return vectors
