def run_test(a, b):
|
|
print("\nnew test:")
|
|
print(a)
|
|
print(b)
|
|
c = a*b
|
|
print(c)
|
|
print(c.list())
|
|
|
|
|
|
|
|
n_iters = 100
|
|
Q= 65537
|
|
print(Q)
|
|
N=4
|
|
F = GF(Q)
|
|
R = QuotientRing(F[x], x^N + 1, names="X")
|
|
print(R)
|
|
|
|
a = R([4,2,1,0])
|
|
b = R([1,2,3,4])
|
|
run_test(a,b)
|
|
|
|
|
|
# print("Elements of the polynomial ring:")
|
|
# for e in R:
|
|
# print(e)
|
|
|
|
|
|
# Other:
|
|
# ======
|
|
#
|
|
# t = R.gen()
|
|
# a = 0 + t + 2*t^2 + 3*t^3 + 4*t^4 + 5*t^5
|
|
# b = 5 + 4*t + 3*t^2 + 2*t^3 + 1*t^4 + 0*t^5
|
|
# print("add", a+b)
|
|
# print("sub", a-b)
|
|
# print("mul", a*b)
|
|
# a = 0 + t + 2*t^2 + 3*t^3 + 4*t^4 + 5*t^5
|
|
|
|
# print("ring elem mul testvectors")
|
|
#
|
|
#
|
|
# def randvec(size=N):return [int(random()*(Q-1)) for t in range(size)]
|
|
#
|
|
# a_vecs = [None]*n_iters
|
|
# b_vecs = [None]*n_iters
|
|
# c_vecs = [None]*n_iters
|
|
#
|
|
# for i in range(n_iters):
|
|
# a_vec = randvec()
|
|
# b_vec = randvec()
|
|
# a_pol = R(a_vec)
|
|
# b_pol = R(b_vec)
|
|
#
|
|
# c_pol = a_pol*b_pol
|
|
#
|
|
# a_vecs[i] = a_pol.list()
|
|
# b_vecs[i] = b_pol.list()
|
|
# c_vecs[i] = c_pol.list()
|
|
#
|
|
# print("let a_vecs = vec!{};\n".format(a_vecs))
|
|
# print("let b_vecs = vec!{};\n".format(b_vecs))
|
|
# print("let c_vecs = vec!{};".format(c_vecs))
|
|
|
|
|
|
# # cyclotomic
|
|
#
|
|
# Q= 65537
|
|
# print(Q)
|
|
# N=4
|
|
# F = GF(Q)
|
|
# R = QuotientRing(F[x], x^N - 1, names="X")
|
|
# print(R)
|
|
#
|
|
# a = R([1,0,0,2])
|
|
# b = R([0,0,0,2])
|
|
# run_test(a, b)
|