diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2013-10-18 17:28:39 -0500 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2013-10-18 18:02:20 -0500 |
commit | 69e0652b1a48815c7d61fed8b625264419ac2796 (patch) | |
tree | ace44cc14dabe10ab7e83d0522a47130ffc86043 /tests/utils.py | |
parent | 4e542de6f58b55b1324e70c213c0d43f9aee319c (diff) | |
download | cryptography-69e0652b1a48815c7d61fed8b625264419ac2796.tar.gz cryptography-69e0652b1a48815c7d61fed8b625264419ac2796.tar.bz2 cryptography-69e0652b1a48815c7d61fed8b625264419ac2796.zip |
hash vector loader and tests
Diffstat (limited to 'tests/utils.py')
-rw-r--r-- | tests/utils.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/utils.py b/tests/utils.py index 6b1cfd79..cf255334 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -119,3 +119,38 @@ def load_openssl_vectors(vector_data): "ciphertext": vector[4].encode("ascii"), }) return vectors + + +def load_hash_vectors(vector_data): + vectors = [] + + for line in vector_data: + line = line.strip() + + if not line or line.startswith("#"): + continue + + if line.startswith("Len"): + length = int(line.split(" = ")[1]) + elif line.startswith("Msg"): + """ + In the NIST vectors they have chosen to represent an empty + string as hex 00, which is of course not actually an empty + string. So we parse the provided length and catch this edge case. + """ + msg = line.split(" = ")[1].encode("ascii") if length > 0 else b"" + elif line.startswith("MD"): + md = line.split(" = ")[1] + # after MD is found the Msg+MD tuple is complete + vectors.append((msg, md)) + else: + raise ValueError("Unknown line in hash vector") + return vectors + + +def load_hash_vectors_from_file(filename): + base = os.path.join( + os.path.dirname(__file__), "primitives", "vectors" + ) + with open(os.path.join(base, filename), "r") as vector_file: + return load_hash_vectors(vector_file) |