aboutsummaryrefslogtreecommitdiff
path: root/test_vectors/format_test_vectors.py
diff options
context:
space:
mode:
Diffstat (limited to 'test_vectors/format_test_vectors.py')
-rw-r--r--test_vectors/format_test_vectors.py218
1 files changed, 61 insertions, 157 deletions
diff --git a/test_vectors/format_test_vectors.py b/test_vectors/format_test_vectors.py
index a49b34b..1389711 100644
--- a/test_vectors/format_test_vectors.py
+++ b/test_vectors/format_test_vectors.py
@@ -60,82 +60,6 @@ P256_GY = 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5
P384_GX = 0xaa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7
P384_GY = 0x3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f
-
-#
-# get part of string between two markers
-#
-#def string_between(s, s_left, s_right):
-# s_begin = s.index(s_left) + len(s_left)
-# s_end = s.index(s_right, s_begin)
-# return s[s_begin:s_end]
-
-#
-# load message from file
-#
-#def read_message(key):
-# with open(key + ".txt", "r") as f:
-# return f.readlines()[0]
-#
-#
-# read modulus from file
-#
-#def read_modulus(key):
-# openssl_command = ["openssl", "rsa", "-in", key + ".key", "-noout", "-modulus"]
-# openssl_stdout = subprocess.check_output(openssl_command).decode("utf-8")
-# return openssl_stdout.strip().split("=")[1]
-
-#
-# read private exponent from file
-#
-#def read_secret(key):
-# openssl_command = ["openssl", "rsa", "-in", key + ".key", "-noout", "-text"]
-# openssl_stdout = subprocess.check_output(openssl_command).decode("utf-8")
-# openssl_secret = string_between(openssl_stdout, "privateExponent", "prime1")
-# openssl_secret = openssl_secret.replace(":", "")
-# openssl_secret = openssl_secret.replace("\n", "")
-# openssl_secret = openssl_secret.replace(" ", "")
-# return openssl_secret
-
-#
-# read part of private key from file
-#
-#def read_prime1(key):
-# openssl_command = ["openssl", "rsa", "-in", key + ".key", "-noout", "-text"]
-# openssl_stdout = subprocess.check_output(openssl_command).decode("utf-8")
-# openssl_secret = string_between(openssl_stdout, "prime1", "prime2")
-# openssl_secret = openssl_secret.replace(":", "")
-# openssl_secret = openssl_secret.replace("\n", "")
-# openssl_secret = openssl_secret.replace(" ", "")
-# return openssl_secret
-#def read_prime2(key):
-# openssl_command = ["openssl", "rsa", "-in", key + ".key", "-noout", "-text"]
-# openssl_stdout = subprocess.check_output(openssl_command).decode("utf-8")
-# openssl_secret = string_between(openssl_stdout, "prime2", "exponent1")
-# openssl_secret = openssl_secret.replace(":", "")
-# openssl_secret = openssl_secret.replace("\n", "")
-# openssl_secret = openssl_secret.replace(" ", "")
-# return openssl_secret
-
-#
-# read prive exponent from file
-#
-#def read_exponent1(key):
-# openssl_command = ["openssl", "rsa", "-in", key + ".key", "-noout", "-text"]
-# openssl_stdout = subprocess.check_output(openssl_command).decode("utf-8")
-# openssl_secret = string_between(openssl_stdout, "exponent1", "exponent2")
-# openssl_secret = openssl_secret.replace(":", "")
-# openssl_secret = openssl_secret.replace("\n", "")
-# openssl_secret = openssl_secret.replace(" ", "")
-# return openssl_secret
-#def read_exponent2(key):
-# openssl_command = ["openssl", "rsa", "-in", key + ".key", "-noout", "-text"]
-# openssl_stdout = subprocess.check_output(openssl_command).decode("utf-8")
-# openssl_secret = string_between(openssl_stdout, "exponent2", "coefficient")
-# openssl_secret = openssl_secret.replace(":", "")
-# openssl_secret = openssl_secret.replace("\n", "")
-# openssl_secret = openssl_secret.replace(" ", "")
-# return openssl_secret
-
#
# format one test vector
#
@@ -156,49 +80,30 @@ def format_c_header(f, curve, da, qax, qay, db, qbx, qby, sx, sy):
format_c_array(f, sx, "#define " + curve_str + "_S_X" + " \\\n")
format_c_array(f, sy, "#define " + curve_str + "_S_Y" + " \\\n")
-
#
# format one test vector
#
-#def format_verilog_include(f, key, n, m, d, s, p, q, dp, dq, mp, mq):
-#
-# # calculate factor to bring message into Montgomery domain
-# factor = calc_montgomery_factor(int(key), n)
-# factor_p = calc_montgomery_factor(int(key)//2, p);
-# factor_q = calc_montgomery_factor(int(key)//2, q);
-#
-# # calculate helper coefficients for Montgomery multiplication
-# n_coeff = calc_montgomery_n_coeff(int(key), n)
-# p_coeff = calc_montgomery_n_coeff(int(key)//2, p)
-# q_coeff = calc_montgomery_n_coeff(int(key)//2, q)
-#
-# # calculate the extra coefficient Montgomery multiplication brings in
-# coeff = modinv(1 << int(key), n)
-#
-# # convert m into Montgomery representation
-# m_factor = (m * factor * coeff) % n
-#
-# # write all numbers
-# format_verilog_concatenation(f, m, "localparam [" + str(int(key)-1) + ":0] M_" + key + " =\n")
-# format_verilog_concatenation(f, n, "localparam [" + str(int(key)-1) + ":0] N_" + key + " =\n")
-# format_verilog_concatenation(f, n_coeff, "localparam [" + str(int(key)-1) + ":0] N_COEFF_" + key + " =\n")
-# format_verilog_concatenation(f, factor, "localparam [" + str(int(key)-1) + ":0] FACTOR_" + key + " =\n")
-# format_verilog_concatenation(f, coeff, "localparam [" + str(int(key)-1) + ":0] COEFF_" + key + " =\n")
-# format_verilog_concatenation(f, m_factor, "localparam [" + str(int(key)-1) + ":0] M_FACTOR_" + key + " =\n")
-# format_verilog_concatenation(f, d, "localparam [" + str(int(key)-1) + ":0] D_" + key + " =\n")
-# format_verilog_concatenation(f, s, "localparam [" + str(int(key)-1) + ":0] S_" + key + " =\n")
-#
-# format_verilog_concatenation(f, p, "localparam [" + str(int(key)//2-1) + ":0] P_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, q, "localparam [" + str(int(key)//2-1) + ":0] Q_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, p_coeff, "localparam [" + str(int(key)//2-1) + ":0] P_COEFF_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, q_coeff, "localparam [" + str(int(key)//2-1) + ":0] Q_COEFF_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, factor_p, "localparam [" + str(int(key)//2-1) + ":0] FACTOR_P_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, factor_q, "localparam [" + str(int(key)//2-1) + ":0] FACTOR_Q_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, dp, "localparam [" + str(int(key)//2-1) + ":0] DP_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, dq, "localparam [" + str(int(key)//2-1) + ":0] DQ_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, mp, "localparam [" + str(int(key)//2-1) + ":0] MP_" + str(int(key)//2) + " =\n")
-# format_verilog_concatenation(f, mq, "localparam [" + str(int(key)//2-1) + ":0] MQ_" + str(int(key)//2) + " =\n")
+def format_verilog_include(f, curve, da, qax, qay, db, qbx, qby, sx, sy):
+ if curve == CURVE_P256:
+ curve_str = "P_256"
+ msb_index = "255"
+
+ if curve == CURVE_P384:
+ curve_str = "P_384"
+ msb_index = "383"
+
+ # write all numbers in vector
+ format_verilog_concatenation(f, da, "localparam [" + msb_index + ":0] " + curve_str + "_DA" + " \\\n")
+ format_verilog_concatenation(f, qax, "localparam [" + msb_index + ":0] " + curve_str + "_QA_X" + " \\\n")
+ format_verilog_concatenation(f, qay, "localparam [" + msb_index + ":0] " + curve_str + "_QA_Y" + " \\\n")
+
+ format_verilog_concatenation(f, db, "localparam [" + msb_index + ":0] " + curve_str + "_DB" + " \\\n")
+ format_verilog_concatenation(f, qbx, "localparam [" + msb_index + ":0] " + curve_str + "_QB_X" + " \\\n")
+ format_verilog_concatenation(f, qby, "localparam [" + msb_index + ":0] " + curve_str + "_QB_Y" + " \\\n")
+
+ format_verilog_concatenation(f, sx, "localparam [" + msb_index + ":0] " + curve_str + "_S_X" + " \\\n")
+ format_verilog_concatenation(f, sy, "localparam [" + msb_index + ":0] " + curve_str + "_S_Y" + " \\\n")
#
# nicely format multi-word integer into C array initializer
@@ -247,44 +152,43 @@ def format_c_array(f, n, s):
# write final newline
f.write("\n")
+def format_verilog_concatenation(f, n, s):
-#def format_verilog_concatenation(f, n, s):
-#
-# # print 'localparam ZZZ ='
-# f.write(s)
-#
-# # convert number to hex string and prepend it with zeroes if necessary
-# n_hex = hex(n).split("0x")[1]
-# while (len(n_hex) % 8) > 0:
-# n_hex = "0" + n_hex
-#
-# # get number of 32-bit words
-# num_words = len(n_hex) // 8
-#
-# # print all words in n
-# w = 0
-# while w < num_words:
-#
-# n_part = ""
-#
-# if w == 0:
-# n_part += "\t{"
-# elif (w % 4) == 0:
-# n_part += "\t "
-#
-# n_part += "32'h" + n_hex[8 * w : 8 * (w + 1)]
-#
-# if (w + 1) == num_words:
-# n_part += "};\n"
-# else:
-# n_part += ", "
-# if (w % 4) == 3:
-# n_part += "\n"
-# w += 1
-#
-# f.write(n_part)
-#
-# f.write("\n")
+ # print 'localparam ZZZ ='
+ f.write(s)
+
+ # convert number to hex string and prepend it with zeroes if necessary
+ n_hex = hex(n).split("0x")[1]
+ while (len(n_hex) % 8) > 0:
+ n_hex = "0" + n_hex
+
+ # get number of 32-bit words
+ num_words = len(n_hex) // 8
+
+ # print all words in n
+ w = 0
+ while w < num_words:
+
+ n_part = ""
+
+ if w == 0:
+ n_part += "\t{"
+ elif (w % 4) == 0:
+ n_part += "\t "
+
+ n_part += "32'h" + n_hex[8 * w : 8 * (w + 1)]
+
+ if (w + 1) == num_words:
+ n_part += "};\n"
+ else:
+ n_part += ", "
+ if (w % 4) == 3:
+ n_part += "\n"
+ w += 1
+
+ f.write(n_part)
+
+ f.write("\n")
#
@@ -402,12 +306,12 @@ if __name__ == "__main__":
curves = [CURVE_P256, CURVE_P384]
# open output files
- file_h = open('ecdsa_fpga_model_ecdh_vectors.h', 'w')
-# file_v = open('modexp_fpga_model_vectors.v', 'w')
+ file_h = open('ecdh_test_vectors.h', 'w')
+ file_v = open('ecdh_test_vectors.v', 'w')
# write headers
file_h.write("/* Generated automatically, do not edit. */\n\n")
-# file_v.write("/* Generated automatically, do not edit. */\n\n")
+ file_v.write("/* Generated automatically, do not edit. */\n\n")
# process all the keys
for curve in curves:
@@ -436,11 +340,11 @@ if __name__ == "__main__":
# format numbers and write to file
format_c_header(file_h, curve, da, qax, qay, db, qbx, qby, QAB.x, QBA.y)
-# format_verilog_include(file_v, key, modulus, message, secret, signature, prime1, prime2, exponent1, exponent2, message1, message2)
+ format_verilog_include(file_v, curve, da, qax, qay, db, qbx, qby, QAB.x, QBA.y)
# done
file_h.close()
-# file_v.close()
+ file_v.close()
# everything went just fine
print("Test vectors formatted.")