Me preguntaba si alguien me podría decir cómo poner en práctica la línea 45 de la siguiente pseudocódigo.
Require: the polynomial to invert a(x), N, and q.
1: k = 0
2: b = 1
3: c = 0
4: f = a
5: g = 0 {Steps 5-7 set g(x) = x^N - 1.}
6: g[0] = -1
7: g[N] = 1
8: loop
9: while f[0] = 0 do
10: for i = 1 to N do
11: f[i - 1] = f[i] {f(x) = f(x)/x}
12: c[N + 1 - i] = c[N - i] {c(x) = c(x) * x}
13: end for
14: f[N] = 0
15: c[0] = 0
16: k = k + 1
17: end while
18: if deg(f) = 0 then
19: goto Step 32
20: end if
21: if deg(f) < deg(g) then
22: temp = f {Exchange f and g}
23: f = g
24: g = temp
25: temp = b {Exchange b and c}
26: b = c
27: c = temp
28: end if
29: f = f XOR g
30: b = b XOR c
31: end loop
32: j = 0
33: k = k mod N
34: for i = N - 1 downto 0 do
35: j = i - k
36: if j < 0 then
37: j = j + N
38: end if
39: Fq[j] = b[i]
40: end for
41: v = 2
42: while v < q do
43: v = v * 2
44: StarMultiply(a; Fq; temp;N; v)
45: temp = 2 - temp mod v
46: StarMultiply(Fq; temp; Fq;N; v)
47: end while
48: for i = N - 1 downto 0 do
49: if Fq[i] < 0 then
50: Fq[i] = Fq[i] + q
51: end if
52: end for
53: {Inverse Poly Fq returns the inverse polynomial, Fq, through the argument list.}
La función StarMultiplydevuelve un polinomio (array) almacenado en la variable temp. Básicamente Temp es un polinomio (Estoy representando como una matriz) y v es un número entero (por ejemplo 4 u 8), por lo que se hace exactamente lo temp = 2-temp mod vequiparan en el lenguaje normal? ¿Cómo debo poner en práctica esa línea en mi código. Alguien me puede dar un ejemplo.
El algoritmo anterior es para el cálculo de polinomios inversa para la generación de claves NTRUEncrypt. El pseudo-código se puede encontrar en la página 28 de este documento . Gracias por adelantado.













