Пытаюсь реализовать расширенный алгоритм Лемьера(поиск gcd и коэффициентов Безу) из книги Handbook of Elliptic and Hyperelliptic Curve Cryptography.
Вот ссылка
https://books.google.ru/books?id=w6b0yhURTkQC&pg=PA192&lpg=PA192&dq=lemher+extended+gcd&source=bl&ots=0VIvhEbVIR&sig=EEIGwCORnNIq6ktef6c-Z0x1OIY&hl=ru&sa=X&ved=0ahUKEwj0m-TeiZPUAhVGOJoKHTRDCs0Q6AEIQjAD#v=onepage&q=lemher%20extended%20gcd&f=falseМне кажется, в этом алгоритме ошибка, вот пример:
Код:
For example, take numbers:
x = 0x3 3333 3333 3333 3333
N = 0xA AAAA AAAA AAAA AAAA
Platform is x64, so l = 64
A = 0xA AAAA AAAA AAAA AAAA, B = 0x3 3333 3333 3333 3333, Ua = 0, Ub = 1
A^ = 0xAAAA AAAA AAAA AAAA, B^ = 0x3333 3333 3333 3333, alpha = 1, beta = 0, alpha' = 0, beta' = 1
B^ != 0, so q <- [A^/B^] = 3, T <- A^ mod B^ = 0x1111 1111 1111 1111
T >= 2^(l/2), so q' <- [B^/T] = 3, T' <- B^ mod T = 0
T' < 2^(l/2), so break;
beta == 0, so alpha = 0, beta = 1, alpha' = 1, beta' = -[A/B] = -3
return {alpha, beta, alpha', beta'} = {0,1,1,-3}
[A] = [alpha beta]*[A] = [0 1] [0xA AAAA AAAA AAAA AAAA] = [0x3 3333 3333 3333 3333]
[B] [alpha' beta'] [B] [1 -3][0x3 3333 3333 3333 3333] [0x1 1111 1111 1111 1111]
[Ua] = [alpha beta]*[Ua] = [0 1] [0] = [1]
[Ub] [alpha' beta'] [Ub] [1 -3][1] [-3]
A = 0x3 3333 3333 3333 3333, B = 0x1 1111 1111 1111 1111, Ua = 1, Ub = -3
A^ = 0xCCCC CCCC CCCC CCCC, B^ = 0x4444 4444 4444 4444, alpha = 1, beta = 0, alpha' = 0, beta' = 1
B^ != 0, so q <- [A^/B^] = 3, T <- A^ mod B^ = 0
T' < 2^(l/2), so
beta == 0, so alpha = 0, beta = 1, alpha' = 1, beta' = -[A/B] = -3
return {alpha, beta, alpha', beta'} = {0,1,1,-3}
[A] = [alpha beta]*[A] = [0 1] [0x3 3333 3333 3333 3333] = [0x1 1111 1111 1111 1111]
[B] [alpha' beta'] [B] [1 -3][0x1 1111 1111 1111 1111] [0]
[Ua] = [alpha beta]*[Ua] = [0 1] [1] = [-3]
[Ub] [alpha' beta'] [Ub] [1 -3][-3] [10]
A = 0x1 1111 1111 1111 1111, B = 0, Ua = -3, Ub = 10
Next step we must compute (u, v, d) by Algorithm 10.42 with arguments A and B, but B is zero and algorithm 10.42 crushes at line 3
q <- [A/B]
In description to algorithm 10.42 says: INPUT: Two POSITIVE integers, but it called with B = 0 in algorithm 10.45
Мой вопрос в следующем
1)действительно ли ошибка в книге или это я ошибаюсь в своих выкладках
2)если ошибка в книге, что нужно изменить в алгоритме, чтобы он заработал
Спасибо
i |
Deggial: код оформлен тегом code. Оформляйте им код, а формулы - ом. |