diff options
Diffstat (limited to 'tests/utils.py')
-rw-r--r-- | tests/utils.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/utils.py b/tests/utils.py index b97c7f7b..00f8353e 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -339,3 +339,58 @@ def load_rsa_nist_vectors(vector_data): test_data[name.lower()] = value.encode("ascii") return data + + +def load_fips_dsa_key_pair_vectors(vector_data): + """ + Loads data out of the FIPS DSA KeyPair vector files. + """ + vectors = [] + # When the flag is "on" it tells the loader to continue constructing + # dictionaries. We turn the flag to "off" during the blocks of the + # vectors of N=224 because we don't support it. + flag = "on" + for line in vector_data: + line = line.strip() + + if not line or line.startswith("#"): + continue + if line.startswith("[mod = L=1024"): + continue + if line.startswith("[mod = L=2048, N=224"): + flag = "off" + continue + if line.startswith("[mod = L=2048, N=256"): + flag = "on" + continue + if line.startswith("[mod = L=3072"): + continue + + if flag == "off": + continue + + if flag == "on": + if line.startswith("P"): + vectors.append({'p': int(line.split("=")[1], 16)}) + continue + if line.startswith("Q"): + vectors[-1]['q'] = int(line.split("=")[1], 16) + continue + if line.startswith("G"): + vectors[-1]['g'] = int(line.split("=")[1], 16) + continue + if line.startswith("X") and 'x' not in vectors[-1]: + vectors[-1]['x'] = int(line.split("=")[1], 16) + continue + if line.startswith("X") and 'x' in vectors[-1]: + vectors.append({'p': vectors[-1]['p'], + 'q': vectors[-1]['q'], + 'g': vectors[-1]['g'], + 'x': int(line.split("=")[1], 16) + }) + continue + if line.startswith("Y"): + vectors[-1]['y'] = int(line.split("=")[1], 16) + continue + + return vectors |