kryptografia/3/iloczyn.py

34 lines
899 B
Python
Raw Normal View History

2024-11-18 00:14:03 +01:00
import gmpy2
from gmpy2 import mpz
from xor import xor_custom
from xtime import xtime
def iloczyn(a, b):
"""
Mnoży dwa elementy w F_{2^8} za pomocą algorytmu "Russian peasant".
Args:
a (mpz): Pierwszy element w F_{2^8}.
b (mpz): Drugi element w F_{2^8}.
Returns:
mpz: Wynik mnożenia w F_{2^8}.
"""
if not isinstance(a, mpz) or not isinstance(b, mpz):
raise TypeError("Oba argumenty muszą być typu mpz.")
result = gmpy2.mpz(0)
while b > 0:
if b & 1:
result = xor_custom(result, a)
a = xtime(a)
b = b >> 1
return result
if __name__ == "__main__":
# Przykład użycia
xy_H = gmpy2.mpz(0x57) # Przykładowy element
uw_H = gmpy2.mpz(0x83) # Przykładowy element
wynik = iloczyn(xy_H, uw_H)
print(f"iloczyn({hex(int(xy_H))}, {hex(int(uw_H))}) = {hex(int(wynik))}")