Je crois que t'étais pas loin
Les opérations que t'as écrites peuvent se faire plus simplement en convertissant ton string en int et en utilisant les opérateurs binaires de Python, je pense que c'est ce que ton prof essayait d'indiquer dans le NB3
Comme ça tu peux directement faire un XOR pour l'opération add, décalage d'un bit à gauche pour la multiplication par X, et d'un bit à droite pour la division par X
Ensuite faut pas oublier que le modulo renvoie l'entrée inchangée si son degré est inférieur à celui du diviseur (ici 8)
Et enfin, faut penser à tronquer le résultat du modulo, pour que ça reste bien dans F{2^8}
J'ai essayé ça, ça a l'air de marcher
def modulo(a):
if a & (2**8):
a ^= int("100011011", 2)
return a
def truncate(a, nbits):
return a & (2**nbits - 1)
def mult(a, b):
res = 0
a = int(a, 2)
b = int(b, 2)
while b != 0:
if bin(b)[-1] == "1":
res = res ^ a
b = b ^ 1
a = truncate(modulo(a << 1), 8)
b = b >> 1
return bin(res)[2:]