diff --git a/lattice-scripts/fast_script.py b/lattice-scripts/fast_script.py new file mode 100644 index 000000000..75073187b --- /dev/null +++ b/lattice-scripts/fast_script.py @@ -0,0 +1,124 @@ +def n(sd): + return (sd - (2.98154318414599))/-0.02659946234310527 + + +def ternary_search(params_in, sds): + + out = [] + + for sd in sds: + i = len(out) + try: + n_new = out[i-1][0] + except: + n_new = ceil(n(-1 * sd)) + params_in = params_in.updated(q = 2**64) + params_in = params_in.updated(Xs = ND.UniformMod(3)) + params_in = params_in.updated(Xe = ND.DiscreteGaussian(2**sd)) + params_in = params_in.updated(n = n_new) + print(params_in) + sec = LWE.dual_hybrid(params_in, red_cost_model = RC.BDGL16) + + if sec["rop"] < 2**128: + while sec["rop"] < 2**128: + n_new += 16 + params_in = params_in.updated(n = n_new) + print(params_in) + sec = LWE.dual_hybrid(params_in, red_cost_model = RC.BDGL16) + print(sec) + print((n_new, log(sec["rop"],2))) + + # go back one + params_in = params_in.updated(n = params_in.n - 16) + n_new = params_in.n - 16 + sec = LWE.dual_hybrid(params_in, red_cost_model = RC.BDGL16) + + if sec["rop"] > 2**128: + while sec["rop"] > 2**128: + n_new -= 16 + params_in = params_in.updated(n = n_new) + print(params_in) + sec = LWE.dual_hybrid(params_in, red_cost_model = RC.BDGL16) + print(sec) + print((n_new, log(sec["rop"],2))) + + # go forward one + params_in = params_in.updated(n = params_in.n + 16) + n_new = params_in.n + 16 + sec = LWE.dual_hybrid(params_in, red_cost_model = RC.BDGL16) + + out.append((n_new, sd - 64, log(sec["rop"],2))) + print(out) + + return out + +# 64-bit ternary curve for Sam +''' +[(2295, -60, 127.078792588350), + (2311, -59, 128.488776992617), + (2279, -58, 128.781019631495), + (2231, -57, 128.157136569127), + (2199, -56, 128.531273681268), + (2167, -55, 128.979204294054), + (2119, -54, 128.360786677986), + (2087, -53, 128.661165611356), + (2039, -52, 128.020440828915), + (2007, -51, 128.402419628669), + (1975, -50, 128.850613930224), + (1927, -49, 128.220332344556), + (1895, -48, 128.532995642188), + (1863, -47, 129.053763770276), + (1815, -46, 128.261111640544), + (1783, -45, 128.724652308223), + (1751, -44, 129.256346567269), + (1703, -43, 128.427087467079), + (1671, -42, 128.925719697154), + (1623, -41, 128.104646125358), + (1591, -40, 128.626307377402), + (1559, -39, 129.177132132841), + (1511, -38, 128.293676843984), + (1479, -37, 128.867977371216), + (1447, -36, 129.552753258365), + (1399, -35, 128.535541064053), + (1367, -34, 129.184274172714), + (1319, -33, 128.156821623523), + (1287, -32, 128.821384214969), + (1255, -31, 129.488413893293), + (1207, -30, 128.435582359883), + (1175, -29, 129.139486913799), + (1127, -28, 128.021991050731), + (1095, -27, 128.743656738640), + (1063, -26, 129.556303276407), + (1015, -25, 128.299295159324), + (983, -24, 129.160867181381), + (951, -23, 130.126980330861), + (903, -22, 128.712531288012), + (871, -21, 129.716764897387), + (823, -20, 128.186625256950), + (791, -19, 129.278809944079), + (759, -18, 130.451246885528), + (711, -17, 128.735276164873), + (679, -16, 130.020905694739), + (631, -15, 128.097491424244), + (599, -14, 129.533186291015), + (567, -13, 131.148363008945), + (519, -12, 128.887004678722), + (487, -11, 130.683187631311), + (439, -10, 128.123631777833), + (407, -9, 130.148519324464), + (375, -8, 132.566934205073), + (327, -7, 129.405360689035), + (295, -6, 132.265174113146), + (247, -5, 128.418255227156)] + +sage: a +-0.02630290701546356 +sage: b +1.787718073729275 + +def sd(n): + return a * n + b + +sage: sd(1000) +-24.515188941734287 +'''