aboutsummaryrefslogtreecommitdiffstats
path: root/tests/utils.py
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2013-09-15 12:05:43 -0500
committerPaul Kehrer <paul.l.kehrer@gmail.com>2013-09-15 12:05:43 -0500
commit1951bf6444d4d5cdaaf0eee1b89a462c32b92b38 (patch)
tree612c8aabc39b8942d96b9d5c6486a43daa5407db /tests/utils.py
parent85dfb96c479ccf1279394c5354580b3195c8ac8a (diff)
downloadcryptography-1951bf6444d4d5cdaaf0eee1b89a462c32b92b38.tar.gz
cryptography-1951bf6444d4d5cdaaf0eee1b89a462c32b92b38.tar.bz2
cryptography-1951bf6444d4d5cdaaf0eee1b89a462c32b92b38.zip
add cryptrec and openssl test vector loaders + tests
Diffstat (limited to 'tests/utils.py')
-rw-r--r--tests/utils.py83
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/utils.py b/tests/utils.py
index 9362464e..bbb4843f 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -59,3 +59,86 @@ def load_nist_vectors_from_file(filename, op, fields):
)
with open(os.path.join(base, filename), "r") as vector_file:
return load_nist_vectors(vector_file, op, fields)
+
+
+def load_cryptrec_vectors_from_file(filename):
+ base = os.path.join(
+ os.path.dirname(__file__), "primitives", "vectors", "CRYPTREC",
+ )
+ with open(os.path.join(base, filename), "r") as vector_file:
+ return load_cryptrec_vectors(vector_file)
+
+
+def load_cryptrec_vectors(vector_data):
+ keys, data = [], {}
+
+ for line in vector_data:
+ line = line.strip()
+
+ # Blank lines and comments are ignored
+ if not line or line.startswith("#"):
+ continue
+
+ if line.startswith("K"):
+ keys.append(line.split(" : ")[1].replace(" ", ""))
+ # create an array under the key to hold all the P+C pairs
+ data[keys[-1]] = []
+ elif line.startswith("P"):
+ # create a new dict to hold the next P+C pair
+ data[keys[-1]].append({})
+ data[keys[-1]][-1]["P"] = line.split(" : ")[1].replace(" ", "")
+ elif line.startswith("C"):
+ data[keys[-1]][-1]["C"] = line.split(" : ")[1].replace(" ", "")
+
+ cryptrec_list = []
+ for key, value in data.items():
+ for pair in value:
+ cryptrec_list.append(
+ (key.encode("ascii"),
+ pair["P"].encode("ascii"),
+ pair["C"].encode("ascii"))
+ )
+
+ return cryptrec_list
+
+
+def load_openssl_vectors_from_file(filename, op):
+ 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)
+
+
+def load_openssl_vectors(vector_data, op):
+ encrypt, decrypt = [], []
+
+ for line in vector_data:
+ line = line.strip()
+
+ # Blank lines and comments are ignored
+ if not line or line.startswith("#"):
+ continue
+
+ vector = line.split(":")
+ args_list = (vector[1].encode("ascii"),
+ vector[2].encode("ascii"),
+ vector[3].encode("ascii"),
+ vector[4].encode("ascii"))
+ # some OpenSSL vectors have a final field
+ # 0 for decrypt, 1 for encrypt
+ if len(vector) == 6:
+ if int(vector[5]) == 0:
+ decrypt.append(args_list)
+ else:
+ encrypt.append(args_list)
+ 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(args_list)
+ decrypt.append(args_list)
+
+ if op == "ENCRYPT":
+ return encrypt
+ else:
+ return decrypt