aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel V. Shatov (Meister) <meisterpaul1@yandex.ru>2017-08-10 15:58:05 +0300
committerPavel V. Shatov (Meister) <meisterpaul1@yandex.ru>2017-08-10 15:58:05 +0300
commitd16d1a541233ab2c950ec1b534a447636aaf44c1 (patch)
treed8f46d8f0d751203c739d7a6e1edb1bbafad9c16
parent91cdd1b39e10a604719a030c98a2339ab3164941 (diff)
Generate additional quantities required for testing of CRT in hardware.
-rw-r--r--test/format_test_vectors.py37
-rw-r--r--test/modexp_fpga_model_vectors.v80
2 files changed, 106 insertions, 11 deletions
diff --git a/test/format_test_vectors.py b/test/format_test_vectors.py
index c56fe18..f9e4ba8 100644
--- a/test/format_test_vectors.py
+++ b/test/format_test_vectors.py
@@ -194,13 +194,17 @@ def calc_montgomery_n_coeff(k, n):
#
# format one test vector
#
-def format_verilog_include(f, key, n, m, d, s):
+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 coefficient for Montgomery multiplication
+ # 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)
@@ -209,14 +213,25 @@ def format_verilog_include(f, key, n, m, d, s):
m_factor = (m * factor * coeff) % n
# write all numbers
- format_verilog_concatenation(f, m, "localparam [" + str(int(key)-1) + ":0] M_" + str(key) + " =\n")
- format_verilog_concatenation(f, n, "localparam [" + str(int(key)-1) + ":0] N_" + str(key) + " =\n")
- format_verilog_concatenation(f, n_coeff, "localparam [" + str(int(key)-1) + ":0] N_COEFF_" + str(key) + " =\n")
- format_verilog_concatenation(f, factor, "localparam [" + str(int(key)-1) + ":0] FACTOR_" + str(key) + " =\n")
- format_verilog_concatenation(f, coeff, "localparam [" + str(int(key)-1) + ":0] COEFF_" + str(key) + " =\n")
- format_verilog_concatenation(f, m_factor, "localparam [" + str(int(key)-1) + ":0] M_FACTOR_" + str(key) + " =\n")
- format_verilog_concatenation(f, d, "localparam [" + str(int(key)-1) + ":0] D_" + str(key) + " =\n")
- format_verilog_concatenation(f, s, "localparam [" + str(int(key)-1) + ":0] S_" + str(key) + " =\n")
+ 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")
#
@@ -359,7 +374,7 @@ if __name__ == "__main__":
# format numbers and write to file
format_c_header(file_h, key, modulus, message, secret, signature, prime1, prime2, exponent1, exponent2, message1, message2)
- format_verilog_include(file_v, key, modulus, message, secret, signature)
+ format_verilog_include(file_v, key, modulus, message, secret, signature, prime1, prime2, exponent1, exponent2, message1, message2)
# done
diff --git a/test/modexp_fpga_model_vectors.v b/test/modexp_fpga_model_vectors.v
index d5284c9..c86f7ba 100644
--- a/test/modexp_fpga_model_vectors.v
+++ b/test/modexp_fpga_model_vectors.v
@@ -40,6 +40,46 @@ localparam [383:0] S_384 =
32'ha76b945b, 32'h49a3f645, 32'h76801499, 32'hb98e6a16,
32'hd2467b6a, 32'h75b7d614, 32'h0fff0fde, 32'hb31d1819};
+localparam [191:0] P_192 =
+ {32'he9ac4cf6, 32'h03b2d80a, 32'h7f1d091e, 32'h49d5f1a0,
+ 32'hac2ae4ff, 32'hbf9bf375};
+
+localparam [191:0] Q_192 =
+ {32'hc1468f3e, 32'hc6909231, 32'h5a4d74ba, 32'h477b303f,
+ 32'h4b2e10d1, 32'h1f44e815};
+
+localparam [191:0] P_COEFF_192 =
+ {32'h8ba8d46c, 32'hb4ed830d, 32'hfbb97c6e, 32'h72d150d3,
+ 32'h72d21392, 32'h70d2fb23};
+
+localparam [191:0] Q_COEFF_192 =
+ {32'hd863905a, 32'hc1541c8a, 32'h25952b0e, 32'ha62b0348,
+ 32'h837f149f, 32'hd6cc58c3};
+
+localparam [191:0] FACTOR_P_192 =
+ {32'h886bad59, 32'h9bf7a46e, 32'h482ed232, 32'he55164cf,
+ 32'hcb46a9e8, 32'he9bd888b};
+
+localparam [191:0] FACTOR_Q_192 =
+ {32'h324b776e, 32'h3734d186, 32'h73dc8796, 32'h9e1aba2c,
+ 32'h4d5df285, 32'he97656b7};
+
+localparam [191:0] DP_192 =
+ {32'h69b6c286, 32'h95fbc613, 32'h51988034, 32'h8cb0d684,
+ 32'h9aff38e4, 32'h9ef9ddb5};
+
+localparam [191:0] DQ_192 =
+ {32'h1eda82b7, 32'h84bf4377, 32'h39712ff7, 32'h24be179f,
+ 32'ha302c190, 32'h80ab6159};
+
+localparam [191:0] MP_192 =
+ {32'h9e163bb5, 32'h35e718cb, 32'hcde52b7b, 32'h5db8552b,
+ 32'h46a300e0, 32'h34f91e6b};
+
+localparam [191:0] MQ_192 =
+ {32'h7b01a724, 32'h90f0d5f9, 32'h9e237ce5, 32'h6d31fd28,
+ 32'h4ecb9dad, 32'h58bf366a};
+
localparam [511:0] M_512 =
{32'h005536b6, 32'h43ea651f, 32'h2fd3c70a, 32'ha83659cb,
32'hd0c1f47b, 32'ha8033730, 32'h29c6b082, 32'h6db48613,
@@ -88,3 +128,43 @@ localparam [511:0] S_512 =
32'hfd1e029d, 32'hfe887387, 32'h4312635f, 32'hb2b54b8d,
32'h5d3b379e, 32'h161eaa4f, 32'hedfd932b, 32'h780f0203};
+localparam [255:0] P_256 =
+ {32'hfedea889, 32'h97cfdb79, 32'hcca87074, 32'he5abcda1,
+ 32'h3be201c4, 32'hc416fd15, 32'hf2130931, 32'h61ff5937};
+
+localparam [255:0] Q_256 =
+ {32'hf0889147, 32'h5aa60f93, 32'hb9927d86, 32'h8f795c5c,
+ 32'h8e98dcf2, 32'had3aad74, 32'h9441583a, 32'h967dce41};
+
+localparam [255:0] P_COEFF_256 =
+ {32'h7af63ffc, 32'h428d9408, 32'h86e79fb9, 32'h018dad77,
+ 32'h4ff704df, 32'h93effb1e, 32'h265d181a, 32'h47ae5379};
+
+localparam [255:0] Q_COEFF_256 =
+ {32'hd27f8aa0, 32'h9f2b9800, 32'h2dfd2392, 32'h4f868b9d,
+ 32'h0fc51e1d, 32'h022de65b, 32'ha55f9ad1, 32'h0676be3f};
+
+localparam [255:0] FACTOR_P_256 =
+ {32'h1a5f27a1, 32'h8d16b0cb, 32'h8c2751b8, 32'h106a099c,
+ 32'ha6efbadd, 32'hcb313a5f, 32'hf530eeb6, 32'hbbc7d8f5};
+
+localparam [255:0] FACTOR_Q_256 =
+ {32'h6794987c, 32'h932203a6, 32'h8c5b1e68, 32'h18d458e6,
+ 32'h6737f12a, 32'h664d4187, 32'hc4ec03ba, 32'h4bd3d0c2};
+
+localparam [255:0] DP_256 =
+ {32'h2504d437, 32'hfffbe9e5, 32'hfc0aef22, 32'h9b8563bd,
+ 32'haa83fe3b, 32'hc53b8d91, 32'h15731c5f, 32'hb6db2eeb};
+
+localparam [255:0] DQ_256 =
+ {32'hd3265fba, 32'h2eb65638, 32'h4d106ec7, 32'h000dfe69,
+ 32'h75f87505, 32'h47d299d0, 32'h1c115cdd, 32'h599ca8c1};
+
+localparam [255:0] MP_256 =
+ {32'h23359955, 32'hcad299b6, 32'h049bb248, 32'h3828b6a5,
+ 32'h74c85825, 32'h7dd8e109, 32'h07edbda9, 32'h4980c2c9};
+
+localparam [255:0] MQ_256 =
+ {32'h8578120b, 32'h91f4ca9e, 32'h371d3e70, 32'h0005bb89,
+ 32'hd31ed864, 32'h477bd9cf, 32'h65a1f03b, 32'h606d3bc8};
+