import gmpy2 from gmpy2 import mpz def xor_custom(a, b): """ Wykonuje operację bitowego XOR na dwóch liczbach typu mpz reprezentujących bajty. Args: a (mpz): Pierwszy bajt (0-255) jako mpz. b (mpz): Drugi bajt (0-255) jako mpz. Returns: mpz: Wynik operacji XOR (0-255) jako mpz. """ if not isinstance(a, mpz) or not isinstance(b, mpz): raise TypeError("Oba argumenty muszą być typu mpz.") result = mpz(0) for i in range(8): bit_a = (a >> i) & 1 # Pobiera i-ty bit z a bit_b = (b >> i) & 1 # Pobiera i-ty bit z b bit_result = bit_a ^ bit_b # XOR bitów result |= (bit_result << i) # Ustawia wynikowy bit w odpowiedniej pozycji return result if __name__ == "__main__": # Przykład użycia a = gmpy2.mpz(0x57) b = gmpy2.mpz(0x83) wynik = xor_custom(a, b) print(f"xor_custom({hex(int(a))}, {hex(int(b))}) = {hex(int(wynik))}")