ark-curves-cherry-picked/bls12_381/scripts/scalar_field.sage
bls12_381/scripts/scalar_field.sageRaw
1modulus = 52435875175126190479447740508185965837690552500527637822603658699938581184513
2
3assert(modulus.is_prime())
4
5Fp = GF(modulus)
6
7generator = Fp(0);
8for i in range(0, 20):
9 i = Fp(i);
10 neg_i = Fp(-i)
11 if not(i.is_primitive_root() or neg_i.is_primitive_root()):
12 continue
13 elif i.is_primitive_root():
14 assert(i.is_primitive_root());
15 print("Generator: %d" % i)
16 generator = i
17 break
18 else:
19 assert(neg_i.is_primitive_root());
20 print("Generator: %d" % neg_i)
21 generator = neg_i
22 break
23
24
25two_adicity = valuation(modulus - 1, 2);
26trace = (modulus - 1) / 2**two_adicity;
27two_adic_root_of_unity = generator^trace
28print("2-adic Root of Unity: %d " % two_adic_root_of_unity)