Make shit less weird
This commit is contained in:
+20
-226
@@ -192,143 +192,17 @@ local function fe_mul121666(f)
|
||||
end
|
||||
|
||||
local function fe_mul(f, g)
|
||||
local g2_19 = 19 * g[2]
|
||||
local g3_19 = 19 * g[3]
|
||||
local g4_19 = 19 * g[4]
|
||||
local g5_19 = 19 * g[5]
|
||||
local g6_19 = 19 * g[6]
|
||||
local g7_19 = 19 * g[7]
|
||||
local g8_19 = 19 * g[8]
|
||||
local g9_19 = 19 * g[9]
|
||||
local g10_19 = 19 * g[10]
|
||||
|
||||
local f2_2 = 2 * f[2]
|
||||
local f4_2 = 2 * f[4]
|
||||
local f6_2 = 2 * f[6]
|
||||
local f8_2 = 2 * f[8]
|
||||
local f10_2 = 2 * f[10]
|
||||
|
||||
local f1g1 = f[1] * g[1]
|
||||
local f1g2 = f[1] * g[2]
|
||||
local f1g3 = f[1] * g[3]
|
||||
local f1g4 = f[1] * g[4]
|
||||
local f1g5 = f[1] * g[5]
|
||||
local f1g6 = f[1] * g[6]
|
||||
local f1g7 = f[1] * g[7]
|
||||
local f1g8 = f[1] * g[8]
|
||||
local f1g9 = f[1] * g[9]
|
||||
local f1g10 = f[1] * g[10]
|
||||
|
||||
local f2g1 = f[2] * g[1]
|
||||
local f2g2_2 = f2_2 * g[2]
|
||||
local f2g3 = f[2] * g[3]
|
||||
local f2g4_2 = f2_2 * g[4]
|
||||
local f2g5 = f[2] * g[5]
|
||||
local f2g6_2 = f2_2 * g[6]
|
||||
local f2g7 = f[2] * g[7]
|
||||
local f2g8_2 = f2_2 * g[8]
|
||||
local f2g9 = f[2] * g[9]
|
||||
local f2g10_38 = f2_2 * g10_19
|
||||
|
||||
local f3g1 = f[3] * g[1]
|
||||
local f3g2 = f[3] * g[2]
|
||||
local f3g3 = f[3] * g[3]
|
||||
local f3g4 = f[3] * g[4]
|
||||
local f3g5 = f[3] * g[5]
|
||||
local f3g6 = f[3] * g[6]
|
||||
local f3g7 = f[3] * g[7]
|
||||
local f3g8 = f[3] * g[8]
|
||||
local f3g9_19 = f[3] * g9_19
|
||||
local f3g10_19 = f[3] * g10_19
|
||||
|
||||
local f4g1 = f[4] * g[1]
|
||||
local f4g2_2 = f4_2 * g[2]
|
||||
local f4g3 = f[4] * g[3]
|
||||
local f4g4_2 = f4_2 * g[4]
|
||||
local f4g5 = f[4] * g[5]
|
||||
local f4g6_2 = f4_2 * g[6]
|
||||
local f4g7 = f[4] * g[7]
|
||||
local f4g8_38 = f4_2 * g8_19
|
||||
local f4g9_19 = f[4] * g9_19
|
||||
local f4g10_38 = f4_2 * g10_19
|
||||
|
||||
local f5g1 = f[5] * g[1]
|
||||
local f5g2 = f[5] * g[2]
|
||||
local f5g3 = f[5] * g[3]
|
||||
local f5g4 = f[5] * g[4]
|
||||
local f5g5 = f[5] * g[5]
|
||||
local f5g6 = f[5] * g[6]
|
||||
local f5g7_19 = f[5] * g7_19
|
||||
local f5g8_19 = f[5] * g8_19
|
||||
local f5g9_19 = f[5] * g9_19
|
||||
local f5g10_19 = f[5] * g10_19
|
||||
|
||||
local f6g1 = f[6] * g[1]
|
||||
local f6g2_2 = f6_2 * g[2]
|
||||
local f6g3 = f[6] * g[3]
|
||||
local f6g4_2 = f6_2 * g[4]
|
||||
local f6g5 = f[6] * g[5]
|
||||
local f6g6_38 = f6_2 * g6_19
|
||||
local f6g7_19 = f[6] * g7_19
|
||||
local f6g8_38 = f6_2 * g8_19
|
||||
local f6g9_19 = f[6] * g9_19
|
||||
local f6g10_38 = f6_2 * g10_19
|
||||
|
||||
local f7g1 = f[7] * g[1]
|
||||
local f7g2 = f[7] * g[2]
|
||||
local f7g3 = f[7] * g[3]
|
||||
local f7g4 = f[7] * g[4]
|
||||
local f7g5_19 = f[7] * g5_19
|
||||
local f7g6_19 = f[7] * g6_19
|
||||
local f7g7_19 = f[7] * g7_19
|
||||
local f7g8_19 = f[7] * g8_19
|
||||
local f7g9_19 = f[7] * g9_19
|
||||
local f7g10_19 = f[7] * g10_19
|
||||
|
||||
local f8g1 = f[8] * g[1]
|
||||
local f8g2_2 = f8_2 * g[2]
|
||||
local f8g3 = f[8] * g[3]
|
||||
local f8g4_38 = f8_2 * g4_19
|
||||
local f8g5_19 = f[8] * g5_19
|
||||
local f8g6_38 = f8_2 * g6_19
|
||||
local f8g7_19 = f[8] * g7_19
|
||||
local f8g8_38 = f8_2 * g8_19
|
||||
local f8g9_19 = f[8] * g9_19
|
||||
local f8g10_38 = f8_2 * g10_19
|
||||
|
||||
local f9g1 = f[9] * g[1]
|
||||
local f9g2 = f[9] * g[2]
|
||||
local f9g3_19 = f[9] * g3_19
|
||||
local f9g4_19 = f[9] * g4_19
|
||||
local f9g5_19 = f[9] * g5_19
|
||||
local f9g6_19 = f[9] * g6_19
|
||||
local f9g7_19 = f[9] * g7_19
|
||||
local f9g8_19 = f[9] * g8_19
|
||||
local f9g9_19 = f[9] * g9_19
|
||||
local f9g10_19 = f[9] * g10_19
|
||||
|
||||
local f10g1 = f[10] * g[1]
|
||||
local f10g2_38 = f10_2 * g2_19
|
||||
local f10g3_19 = f[10] * g3_19
|
||||
local f10g4_38 = f10_2 * g4_19
|
||||
local f10g5_19 = f[10] * g5_19
|
||||
local f10g6_38 = f10_2 * g6_19
|
||||
local f10g7_19 = f[10] * g7_19
|
||||
local f10g8_38 = f10_2 * g8_19
|
||||
local f10g9_19 = f[10] * g9_19
|
||||
local f10g10_38 = f10_2 * g10_19
|
||||
|
||||
local h = {
|
||||
f1g1 + f2g10_38 + f3g9_19 + f4g8_38 + f5g7_19 + f6g6_38 + f7g5_19 + f8g4_38 + f9g3_19 + f10g2_38,
|
||||
f1g2 + f2g1 + f3g10_19 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19 + f10g3_19,
|
||||
f1g3 + f2g2_2 + f3g1 + f4g10_38 + f5g9_19 + f6g8_38 + f7g7_19 + f8g6_38 + f9g5_19 + f10g4_38,
|
||||
f1g4 + f2g3 + f3g2 + f4g1 + f5g10_19 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19 + f10g5_19,
|
||||
f1g5 + f2g4_2 + f3g3 + f4g2_2 + f5g1 + f6g10_38 + f7g9_19 + f8g8_38 + f9g7_19 + f10g6_38,
|
||||
f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g10_19 + f8g9_19 + f9g8_19 + f10g7_19,
|
||||
f1g7 + f2g6_2 + f3g5 + f4g4_2 + f5g3 + f6g2_2 + f7g1 + f8g10_38 + f9g9_19 + f10g8_38,
|
||||
f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g10_19 + f10g9_19,
|
||||
f1g9 + f2g8_2 + f3g7 + f4g6_2 + f5g5 + f6g4_2 + f7g3 + f8g2_2 + f9g1 + f10g10_38,
|
||||
f1g10 + f2g9 + f3g8 + f4g7 + f5g6 + f6g5 + f7g4 + f8g3 + f9g2 + f10g1
|
||||
f[1] * g[1] + f[2] * g[10] * 38 + f[3] * g[9] * 19 + f[4] * g[8] * 38 + f[5] * g[7] * 19 + f[6] * g[6] * 38 + f[7] * g[5] * 19 + f[8] * g[4] * 38 + f[9] * g[3] * 19 + f[10] * g[2] * 38,
|
||||
f[1] * g[2] + f[2] * g[1] + f[3] * g[10] * 19 + f[4] * g[9] * 19 + f[5] * g[8] * 19 + f[6] & g[7] * 19 + f[7] * g[6] * 19 + f[8] * g[5] * 19 + f[9] * g[4] * 19 + f[10] * g[3] * 19,
|
||||
f[1] * g[3] + f[2] * g[2] * 2 + f[3] * g[1] + f[4] * g[10] * 38 + f[5] * g[9] * 19 + f[6] * g[8] * 38 + f[7] * g[7] * 19 + f[8] * g[6] * 38 + f[9] * g[5] * 19 + f[10] * g[4] * 38,
|
||||
f[1] * g[4] + f[2] * g[3] + f[3] * g[2] + f[4] * g[1] + f[5] * g[10] * 19 + f[6] * g[9] * 19 + f[7] * g[8] * 19 + f[8] * g[7] * 19 + f[9] * g[6] * 19 + f[10] * g[5] * 19,
|
||||
f[1] * g[5] + f[2] * g[4] * 2 + f[3] * g[3] + f[4] * g[2] * 2 + f[5] * g[1] + f[6] * g[10] * 38 + f[7] * g[9] * 19 + f[8] * g[8] * 38 + f[9] * g[7] * 19 + f[10] * g[6] * 38,
|
||||
f[1] * g[6] + f[2] * g[5] + f[3] * g[4] + f[4] * g[3] + f[5] * g[2] + f[6] * g[1] + f[7] * g[10] * 19 + f[8] * g[9] * 19 + f[9] * g[8] * 19 + f[10] * g[7] * 19,
|
||||
f[1] * g[7] + f[2] * g[6] * 2 + f[3] * g[5] + f[4] * g[4] * 2 + f[5] * g[3] + f[6] * g[2] * 2 + f[7] * g[1] + f[8] * g[10] * 38 + f[9] * g[9] * 19 + f[10] * g[8] * 38,
|
||||
f[1] * g[8] + f[2] * g[7] + f[3] * g[6] + f[4] * g[5] + f[5] * g[4] + f[6] * g[3] + f[7] * g[2] + f[8] * g[1] + f[9] * g[10] * 19 + f[10] * g[9] * 19,
|
||||
f[1] * g[9] + f[2] * g[8] * 2 + f[3] * g[7] + f[4] * g[6] * 2 + f[5] * g[5] + f[6] * g[4] * 2 + f[7] * g[3] + f[8] * g[2] * 2 + f[9] * g[1] + f[10] * g[10] * 38,
|
||||
f[1] * g[10] + f[2] * g[9] + f[3] * g[8] + f[4] * g[7] + f[5] * g[6] + f[6] * g[5] + f[7] * g[4] + f[8] * g[3] + f[9] * g[2] + f[10] * g[1]
|
||||
}
|
||||
local carry
|
||||
carry = h[1] + (1 << 25); h[2] = h[2] + arshift(carry, 26); h[1] = h[1] - (carry & kTop38Bits)
|
||||
@@ -347,97 +221,17 @@ local function fe_mul(f, g)
|
||||
end
|
||||
|
||||
local function fe_sq(f)
|
||||
local f1_2 = 2 * f[1]
|
||||
local f2_2 = 2 * f[2]
|
||||
local f3_2 = 2 * f[3]
|
||||
local f4_2 = 2 * f[4]
|
||||
local f5_2 = 2 * f[5]
|
||||
local f6_2 = 2 * f[6]
|
||||
local f7_2 = 2 * f[7]
|
||||
local f8_2 = 2 * f[8]
|
||||
|
||||
local f6_38 = 38 * f[6]
|
||||
local f7_19 = 19 * f[7]
|
||||
local f8_38 = 38 * f[8]
|
||||
local f9_19 = 19 * f[9]
|
||||
local f10_38 = 38 * f[10]
|
||||
|
||||
local f1f1 = f[1] * f[1]
|
||||
local f1f2_2 = f1_2 * f[2]
|
||||
local f1f3_2 = f1_2 * f[3]
|
||||
local f1f4_2 = f1_2 * f[4]
|
||||
local f1f5_2 = f1_2 * f[5]
|
||||
local f1f6_2 = f1_2 * f[6]
|
||||
local f1f7_2 = f1_2 * f[7]
|
||||
local f1f8_2 = f1_2 * f[8]
|
||||
local f1f9_2 = f1_2 * f[9]
|
||||
local f1f10_2 = f1_2 * f[10]
|
||||
|
||||
local f2f2_2 = f2_2 * f[2]
|
||||
local f2f3_2 = f2_2 * f[3]
|
||||
local f2f4_4 = f2_2 * f4_2
|
||||
local f2f5_2 = f2_2 * f[5]
|
||||
local f2f6_4 = f2_2 * f6_2
|
||||
local f2f7_2 = f2_2 * f[7]
|
||||
local f2f8_4 = f2_2 * f8_2
|
||||
local f2f9_2 = f2_2 * f[9]
|
||||
local f2f10_76 = f2_2 * f10_38
|
||||
|
||||
local f3f3 = f[3] * f[3]
|
||||
local f3f4_2 = f3_2 * f[4]
|
||||
local f3f5_2 = f3_2 * f[5]
|
||||
local f3f6_2 = f3_2 * f[6]
|
||||
local f3f7_2 = f3_2 * f[7]
|
||||
local f3f8_2 = f3_2 * f[8]
|
||||
local f3f9_38 = f3_2 * f9_19
|
||||
local f3f10_38 = f[3] * f10_38
|
||||
|
||||
local f4f4_2 = f4_2 * f[4]
|
||||
local f4f5_2 = f4_2 * f[5]
|
||||
local f4f6_4 = f4_2 * f6_2
|
||||
local f4f7_2 = f4_2 * f[7]
|
||||
local f4f8_76 = f4_2 * f8_38
|
||||
local f4f9_38 = f4_2 * f9_19
|
||||
local f4f10_76 = f4_2 * f10_38
|
||||
|
||||
local f5f5 = f[5] * f[5]
|
||||
local f5f6_2 = f5_2 * f[6]
|
||||
local f5f7_38 = f5_2 * f7_19
|
||||
local f5f8_38 = f[5] * f8_38
|
||||
local f5f9_38 = f5_2 * f9_19
|
||||
local f5f10_38 = f[5] * f10_38
|
||||
|
||||
local f6f6_38 = f[6] * f6_38
|
||||
local f6f7_38 = f6_2 * f7_19
|
||||
local f6f8_76 = f6_2 * f8_38
|
||||
local f6f9_38 = f6_2 * f9_19
|
||||
local f6f10_76 = f6_2 * f10_38
|
||||
|
||||
local f7f7_19 = f[7] * f7_19
|
||||
local f7f8_38 = f[7] * f8_38
|
||||
local f7f9_38 = f7_2 * f9_19
|
||||
local f7f10_38 = f[7] * f10_38
|
||||
|
||||
local f8f8_38 = f[8] * f8_38
|
||||
local f8f9_38 = f8_2 * f9_19
|
||||
local f8f10_76 = f8_2 * f10_38
|
||||
|
||||
local f9f9_19 = f[9] * f9_19
|
||||
local f9f10_38 = f[9] * f10_38
|
||||
|
||||
local f10f10_38 = f[10] * f10_38
|
||||
|
||||
local h = {
|
||||
f1f1 + f2f10_76 + f3f9_38 + f4f8_76 + f5f7_38 + f6f6_38,
|
||||
f1f2_2 + f3f10_38 + f4f9_38 + f5f8_38 + f6f7_38,
|
||||
f1f3_2 + f2f2_2 + f4f10_76 + f5f9_38 + f6f8_76 + f7f7_19,
|
||||
f1f4_2 + f2f3_2 + f5f10_38 + f6f9_38 + f7f8_38,
|
||||
f1f5_2 + f2f4_4 + f3f3 + f6f10_76 + f7f9_38 + f8f8_38,
|
||||
f1f6_2 + f2f5_2 + f3f4_2 + f7f10_38 + f8f9_38,
|
||||
f1f7_2 + f2f6_4 + f3f5_2 + f4f4_2 + f8f10_76 + f9f9_19,
|
||||
f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2 + f9f10_38,
|
||||
f1f9_2 + f2f8_4 + f3f7_2 + f4f6_4 + f5f5 + f10f10_38,
|
||||
f1f10_2 + f2f9_2 + f3f8_2 + f4f7_2 + f5f6_2
|
||||
f[1] * f[1] + f[2] * f[10] * 76 + f[3] * f[9] * 38 + f[4] * f[8] * 76 + f[5] * f[7] * 38 + f[6] * f[6] * 38,
|
||||
f[1] * f[2] * 2 + f[3] * f[10] * 38 + f[4] * f[9] * 38 + f[5] * f[8] * 38 + f[6] * f[7] * 38,
|
||||
f[1] * f[3] * 2 + f[2] * f[2] * 2 + f[4] * f[10] * 76 + f[5] * f[9] * 38 + f[6] * f[8] * 76 + f[7] * f[7] * 19,
|
||||
f[1] * f[4] * 2 + f[2] * f[3] * 2 + f[5] * f[10] * 38 + f[6] * f[9] * 38 + f[7] * f[8] * 38,
|
||||
f[1] * f[5] * 2 + f[2] * f[4] * 4 + f[3] * f[3] + f[6] * f[10] * 76 + f[7] * f[9] * 38 + f[8] * f[8] * 38,
|
||||
f[1] * f[6] * 2 + f[2] * f[5] * 2 + f[3] * f[4] * 2 + f[7] * f[10] * 38 + f[8] * f[9] * 38,
|
||||
f[1] * f[7] * 2 + f[2] * f[6] * 4 + f[3] * f[5] * 2 + f[4] * f[4] * 2 + f[8] * f[10] * 76 + f[9] * f[9] * 19,
|
||||
f[1] * f[8] * 2 + f[2] * f[7] * 2 + f[3] * f[6] * 2 + f[4] * f[5] * 2 + f[9] * f[10] * 38,
|
||||
f[1] * f[9] * 2 + f[2] * f[8] * 4 + f[3] * f[7] * 2 + f[4] * f[6] * 4 + f[5] * f[5] + f[10] * f[10] * 38,
|
||||
f[1] * f[10] * 2 + f[2] * f[9] * 2 + f[3] * f[8] * 2 + f[4] * f[7] * 2 + f[5] * f[6] * 2
|
||||
}
|
||||
local carry
|
||||
carry = h[1] + (1 << 25); h[2] = h[2] + arshift(carry, 26); h[1] = h[1] - (carry & kTop38Bits)
|
||||
|
||||
Reference in New Issue
Block a user