Ich frage mich, ob mir jemand sagen könnte, wie Linie 45 des folgenden Pseudo-Code zu implementieren.
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.}
Die Funktion StarMultiplygibt ein Polynom (Array) in den Variablen gespeichert temp. Grundsätzlich Temp ein Polynom (I es als Array bin darstellt) , und v eine ganze Zahl (z.B. 4 oder 8), was genau so ist temp = 2-temp mod vgleichzusetzen in normaler Sprache? Wie soll ich diese Zeile in meinem Code implementieren. Kann mir jemand ein Beispiel geben.
Der obige Algorithmus zum Berechnen Inverse Polynome für Ntruencrypt Schlüsselerzeugung. Der Pseudo-Code kann auf Seite 28 von zu finden diesem Dokument . Danke im Voraus.













