1ecp.h(3) Library Functions Manual ecp.h(3)
2
3
4
6 ecp.h - Эллиптические кривые над простыми полями
7
8
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)