1ecp.h(3)                   Library Functions Manual                   ecp.h(3)
2
3
4

NAME

6       ecp.h - Эллиптические кривые над простыми полями
7
8

SYNOPSIS

10       #include 'bee2/math/ec.h'
11
12
13   Функции
14       bool_t ecpCreateJ (ec_o *ec, const qr_o *f, const octet A[], const
15           octet B[], void *stack)
16           Создание эллиптической кривой в якобиановых координатах
17       bool_t ecpIsValid (const ec_o *ec, void *stack)
18           Корректное описание эллиптической кривой?
19       bool_t ecpSeemsValidGroup (const ec_o *ec, void *stack)
20           Описание группы точек эллиптической кривой выглядит корректным?
21       bool_t ecpIsSafeGroup (const ec_o *ec, size_t mov_threshold, void
22           *stack)
23           Надежная группа точек эллиптической кривой?
24       bool_t ecpIsOnA (const word a[], const ec_o *ec, void *stack)
25           Аффинная точка лежит на кривой?
26       void ecpNegA (word b[], const word a[], const ec_o *ec)
27           Обратная аффинная точка
28       bool_t ecpAddAA (word c[], const word a[], const word b[], const ec_o
29           *ec, void *stack)
30           Cложение аффинных точек
31       bool_t ecpSubAA (word c[], const word a[], const word b[], const ec_o
32           *ec, void *stack)
33           Вычитание аффинных точек
34       void ecpSWU (word b[], const word a[], const ec_o *ec, void *stack)
35           Преобразование элемента поля в аффинную точку
36

Подробное описание

38       Реализована арифметика эллиптических кривых над простым полем f =
39       GF(p). Кривая описывается уравнением Вейерштрасса E: y^2 = x^3 + Ax + B
40       (\mod p). E(GF(p)) -- множество аффинных точек E (решений E в GF(p)), O
41       -- бесконечно удаленная точка.
42
43       Поддерживаются якобиановы координаты (с помощью структуры ec_o) и
44       аффинные координаты (прямые функции).
45
46       Предусловие
47           Все указатели, передаваемые в функции, действительны.
48
49           Буферы точек не пересекаются с буфером описания кривой.
50
51       Регулярность
52           todo
53

Функции

55   bool_t ecpAddAA (word c[], const word a[], const word b[], const ec_o * ec,
56       void * stack)
57       Определяется сумма [2 * ec->f->n]c аффинных точек [2 * ec->f->n]a и [2
58       * ec->f->n]b кривой ec:
59
60       c <- a + b.
61
62
63       Предусловие
64           Описание ec работоспособно.
65
66           Координаты a и b лежат в базовом поле.
67
68       Ожидается
69           Описание ec корректно.
70
71       Ожидается
72           Точки a и b лежат на ec.
73
74       Возвращает
75           TRUE, если сумма является аффинной точкой, и FALSE в противном
76           случае.
77
78       Схема расчета глубины stack
79           ecpAddAA_deep(ec->f->n, ec->f->deep).
80
81       Аргументы
82           c сумма
83           a первое слагаемое
84           b второе слагаемое
85           ec описание кривой
86           stack вспомогательная память
87
88   bool_t ecpCreateJ (ec_o * ec, const qr_o * f, const octet A[], const octet
89       B[], void * stack)
90       Создается описание ec эллиптической кривой в якобиановых координатах
91       над полем f с коэффициентами [f->no]A и [f->no]B.
92
93       Возвращает
94           Признак успеха.
95
96       Предусловие
97           gfpIsOperable(f) == TRUE.
98
99       Ожидается [FALSE]
100           f->mod > 3.
101
102       Постусловие
103           ec->d == 3.
104
105           Буферы ec->order и ec->base подготовлены для ecCreateGroup().
106
107       Схема расчета размера состояния ec
108           ecpCreateJ_keep(f->n).
109
110       Схема расчета глубины stack
111           ecpCreateJ_deep(f->n, f->deep).
112
113       Аргументы
114           ec описание кривой
115           f базовое поле
116           A коэффициент A
117           B коэффициент B
118           stack вспомогательная память
119
120   bool_t ecpIsOnA (const word a[], const ec_o * ec, void * stack)
121       Проверяется, что аффинная точка [2 * ec->f->n]a лежит на кривой ec.
122
123       Предусловие
124           Описание ec работоспособно.
125
126       Ожидается
127           Описание ec корректно.
128
129       Возвращает
130           Признак успеха проверки.
131
132       Схема расчета глубины stack
133           ecpIsOnA_deep(ec->f->n, ec->f->deep).
134
135       Аргументы
136           a точка
137           ec описание кривой
138           stack вспомогательная память
139
140   bool_t ecpIsSafeGroup (const ec_o * ec, size_t mov_threshold, void * stack)
141       Для группы точек кривой ec проверяются следующие условия, определяющие
142       ее криптографическую надежность:
143
144       • ec->order -- простое;
145
146       • ec->order != p (условие Семаева);
147
148       • ec->order не делит числа p^i - 1, i <= mov_threshold (MOV).
149
150       Предусловие
151           Описание ec (включая описание группы точек) работоспособно.
152
153       Ожидается
154           Описание ec (включая описание группы точек) корректно.
155
156       Возвращает
157           Признак успеха проверки.
158
159       Схема расчета глубины stack
160           ecpIsSafeGroup_deep(ec->f->n).
161
162       Аргументы
163           ec описание кривой
164           mov_threshold MOV-порог
165           stack вспомогательная память
166
167   bool_t ecpIsValid (const ec_o * ec, void * stack)
168       Проверяется корректность описания ec эллиптической кривой. Описание
169       корректно, если:
170
171       • ecSeemsValid(ec) == TRUE;
172
173       • gfpIsValid(ec->f) == TRUE;
174
175       • ec->f->mod > 3;
176
177       • A, B ∈ f;
178
179       • 4 A^3 + 27 B^2 не делится на p (гладкость).
180
181       Возвращает
182           Признак корректности.
183
184       Схема расчета глубины stack
185           ecpIsValid_deep(ec->f->n, f->deep).
186
187       Аргументы
188           ec описание кривой
189           stack вспомогательная память
190
191   void ecpNegA (word b[], const word a[], const ec_o * ec)
192       Определяется аффинная точка [2 * ec->f->n]b кривой ec, обратная к
193       аффинной точке [2 * ec->f->n]a.
194
195       Предусловие
196           Описание ec работоспособно.
197
198           Координаты a лежат в базовом поле.
199
200       Ожидается
201           Описание ec корректно.
202
203       Ожидается
204           Точка a лежит на ec.
205
206       Аргументы
207           b обратная точка
208           a точка
209           ec описание кривой
210
211   bool_t ecpSeemsValidGroup (const ec_o * ec, void * stack)
212       Проверяется корректность описания группы точек эллиптической кривой ec.
213       Описание корректно, если:
214
215       • ecIsOperableGroup(ec) == TRUE;
216
217       • |ec->order * ec->cofactor - (p + 1)| <= 2 * \sqrt(p) (границы Хассе);
218
219       • точка ec->base лежит на ec.
220
221       Предусловие
222           Описание ec работоспособно.
223
224       Возвращает
225           Признак корректности.
226
227       Прим.
228           Не проверяется, что порядок ec->base равняется ec->order.
229
230       Схема расчета глубины stack
231           ecpSeemsValidGroup_deep(ec->f->n, ec->f->deep).
232
233       Аргументы
234           ec описание кривой
235           stack вспомогательная память
236
237   bool_t ecpSubAA (word c[], const word a[], const word b[], const ec_o * ec,
238       void * stack)
239       Определяется разность [2 * ec->f->n]c аффинных точек [2 * ec->f->n]a и
240       [2 * ec->f->n]b эллиптической кривой ec:
241
242       c <- a - b.
243
244
245       Предусловие
246           Описание ec работоспособно.
247
248           Координаты a и b лежат в базовом поле.
249
250       Ожидается
251           Описание ec корректно.
252
253       Ожидается
254           Точки a и b лежат на ec.
255
256       Возвращает
257           TRUE, если разность является аффинной точкой, и FALSE в противном
258           случае (a == b).
259
260       Схема расчета глубины stack
261           ecpSubAA_deep(n, ec->f->deep).
262
263       Аргументы
264           c разность
265           a уменьшаемое
266           b вычитаемое
267           ec описание кривой
268           stack вспомогательная память
269
270   void ecpSWU (word b[], const word a[], const ec_o * ec, void * stack)
271       Элемент [ec->f->n]a поля ec->f преобразуется в аффинную точку [2 *
272       ec->f->n]b эллиптической кривой ec.
273
274       Предусловие
275           Описание ec работоспособно.
276
277           a ∈ f && p \equiv 3 (\mod 4) && A != 0 && B != 0.
278
279       Ожидается
280           Описание ec корректно.
281
282       Ожидается
283           B -- квадратичный вычет по модулю p. Если это условие нарушается,
284           то точка b не будет лежать на ec для a ∈ {0, p - 1}.
285
286       Прим.
287           Реализован алгоритм SWU в редакции СТБ 34.101.66.
288
289       Схема расчета глубины stack
290           ecpSWU_deep(ec->f->n, ec->f->deep).
291
292       Аргументы
293           b точка
294           a элемент поля
295           ec описание кривой
296           stack вспомогательная память
297

Автор

299       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
300
301
302
303Библиотека Bee2                 Пт 23 Июн 2023                        ecp.h(3)
Impressum