내 응용 프로그램에서 빠른 갈루아 필드 연산을 수행해야합니다. 내 플랫폼, MSP430 마이크로 컨트롤러에 최적화 된 어셈블리로 작성된 곱셈 함수가 있습니다. 이 함수는 두 개의 큰 임의의 크기의 곱을 계산하지만 각 숫자는 16 비트 정수의 배열로 표시되어야합니다. 그러나, 내 프로젝트에서 갈로아 필드 요소는 16 64 비트 정수의 배열로 표현됩니다. 16
저는 16 * 16 몽고메리 승수를 설계했습니다. 이 코드는 16 * 16 배수를 사용하여 세 배의 곱셈을 수행합니다. 곱셈은 동일한 곱셈기를 사용하여 차례로 수행되고 각 곱셈의 결과는 레지스터에 저장됩니다. 단일 16 * 16 승산기는 약 1550 MHz의 주파수에서 수행되지만 3 회의 승수가 직렬로 수행 될 때 Montgomery 승수 (단일 16
저는 몽고메리 곱셈 알고리즘을 파이썬 3.x에서 사용하려고합니다. 코드는 올바른 결과를 제공하지 않습니다, #!/usr/bin/python3
N = 41
A = 13
B = 17
n = N.bit_length()
R = 0
for i in range(0, n):
q = int(R + (A & (1 << i) != 0) * B)