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