In \(\textbf{GF}(2^n)\) moet je een element kunnen vermenigvuldiging met \(\alpha = (00\cdots 010)\). Hierbij is \(\alpha\) de imaginaire wortel van de voortbrengende monische veelterm \(h(x) = x^n + c_{n-1} x^{n - 1} + \cdots + c_0\). Je moet dus \(\alpha^{n}\) vervangen door het element \((c_{n-1} \cdots c_0)\).
Omdat \(c_i = 0\) of \(c_i = 1\) wordt de veelterm \(h(x)\) in de Python-code voorgesteld als bitstring “\(1 c_{n-1} \cdots c_0\)”.
Schrijf de functie maal_alfa(g: int, h: str) -> int
die een element g
vermenigvuldigt met \(\alpha\) in \(\textbf{GF}(2^n)\).
De parameter h
bevat de coëfficienten van de monische veelterm \(h(x)\), voorgesteld als bitstring.
Tip: Gebruik de operator ^
voor de optelling en de operator <<
voor de left-shift.
Voorbeelden
\(h(x) = x^4 + x + 1\) wordt voorgesteld als “\(10011\)”. Hier is \(n = 4\) en \(\alpha^4 = \alpha + 1\), dus wordt \(\alpha^4 = (10000)\) vervangen door \(\alpha+1 = (0011)\).
Merk op dat \((\alpha^2 + \alpha) \cdot \alpha = \alpha^3 + \alpha^2\) of in bitnotatie:
\((110) \cdot \alpha = (1100)\) -> dit is een left-shift
>>> maal_alfa(6, "10011")
12
Merk op dat \((\alpha^3+\alpha^2 + \alpha+1) \cdot \alpha = \alpha^4+\alpha^3 + \alpha^2 + \alpha = (\alpha + 1) + \alpha^3 + \alpha^2 + \alpha\) of in bitnotatie:
\((1111) \cdot \alpha = (11110) = (10000) \oplus(1110) = (0011) \oplus(1110) = (1101)\) ->left-shift + vervangen \(\alpha^4\)
>>> maal_alfa(15, "10011")
13