1ec2.h(3) Library Functions Manual ec2.h(3)
2
3
4
6 ec2.h - Эллиптические кривые над двоичными полями
7
8
10 #include 'bee2/math/ec.h'
11
12
13 Функции
14 bool_t ec2CreateLD (ec_o *ec, const qr_o *f, const octet A[], const
15 octet B[], void *stack)
16 Создание эллиптической кривой в координатах Лопеса -- Дахаба
17 bool_t ec2IsValid (const ec_o *ec, void *stack)
18 Корректное описание эллиптической кривой?
19 bool_t ec2SeemsValidGroup (const ec_o *ec, void *stack)
20 Описание группы точек эллиптической кривой выглядит корректным?
21 bool_t ec2IsSafeGroup (const ec_o *ec, size_t mov_threshold, void
22 *stack)
23 Надежная группа точек эллиптической кривой?
24 bool_t ec2IsOnA (const word a[], const ec_o *ec, void *stack)
25 Аффинная точка лежит на кривой?
26 void ec2NegA (word b[], const word a[], const ec_o *ec)
27 Обратная аффинная точка
28 bool_t ec2AddAA (word c[], const word a[], const word b[], const ec_o
29 *ec, void *stack)
30 Cложение аффинных точек
31 bool_t ec2SubAA (word c[], const word a[], const word b[], const ec_o
32 *ec, void *stack)
33 Вычитание аффинных точек
34
36 Реализована арифметика эллиптических кривых над полем f = GF(2^m).
37 Кривая описывается уравнением E: y^2 + xy = x^3 + A x^2 + B. E(GF(2^m))
38 -- множество аффинных точек E (решений E в GF(2^m)), O -- бесконечно
39 удаленная точка.
40
41 Поддерживаются координаты Лопеса -- Дахаба (с помощью структуры ec_o) и
42 аффинные координаты (прямые функции).
43
44 Предусловие
45 Все указатели, передаваемые в функции, действительны.
46
47 Буферы точек не пересекаются с буфером описания кривой.
48
49 Регулярность
50 todo
51
53 bool_t ec2AddAA (word c[], const word a[], const word b[], const ec_o * ec,
54 void * stack)
55 Определяется сумма [2 * ec->f->n]c аффинных точек [2 * ec->f->n]a и [2
56 * ec->f->n]b кривой ec:
57
58 c <- a + b.
59
60
61 Предусловие
62 Описание ec работоспособно.
63
64 Координаты a и b лежат в базовом поле.
65
66 Ожидается
67 Описание ec корректно.
68
69 Ожидается
70 Точки a и b лежат на ec.
71
72 Возвращает
73 TRUE, если сумма является аффинной точкой, и FALSE в противном
74 случае.
75
76 Схема расчета глубины stack
77 ec2AddAA_deep(ec->f->n, ec->f->deep).
78
79 Аргументы
80 c сумма
81 a первое слагаемое
82 b второе слагаемое
83 ec описание кривой
84 stack вспомогательная память
85
86 bool_t ec2CreateLD (ec_o * ec, const qr_o * f, const octet A[], const octet
87 B[], void * stack)
88 Создается описание ec эллиптической кривой в координатах Лопеса --
89 Дахаба над полем f с коэффициентами [f->no]A и [f->no]B.
90
91 Возвращает
92 Признак успеха.
93
94 Предусловие
95 gf2IsOperable(f) == TRUE.
96
97 Постусловие
98 ec->d == 3.
99
100 Буферы ec->order и ec->base подготовлены для ecCreateGroup().
101
102 Схема расчета размера состояния ec
103 ec2CreateLD_keep(f->n).
104
105 Схема расчета глубины stack
106 ec2CreateLD_deep(f->n, f->deep).
107
108 Аргументы
109 ec описание кривой
110 f базовое поле
111 A коэффициент A
112 B коэффициент B
113 stack вспомогательная память
114
115 bool_t ec2IsOnA (const word a[], const ec_o * ec, void * stack)
116 Проверяется, что аффинная точка [2 * ec->f->n]a лежит на кривой ec.
117
118 Предусловие
119 Описание ec работоспособно.
120
121 Ожидается
122 Описание ec корректно.
123
124 Возвращает
125 Признак успеха проверки.
126
127 Схема расчета глубины stack
128 ec2IsOnA_deep(ec->f->n, ec->f->deep).
129
130 Аргументы
131 a точка
132 ec описание кривой
133 stack вспомогательная память
134
135 bool_t ec2IsSafeGroup (const ec_o * ec, size_t mov_threshold, void * stack)
136 Для группы точек кривой ec проверяются следующие условия, определяющие
137 ее криптографическую надежность:
138
139 • ec->order -- простое;
140
141 • ec->order != 2^m (условие Семаева);
142
143 • ec->order не делит числа 2^{mi} - 1, i <= mov_threshold (MOV).
144
145 Предусловие
146 Описание ec (включая описание группы точек) работоспособно.
147
148 Ожидается
149 Описание ec (включая описание группы точек) корректно.
150
151 Возвращает
152 Признак успеха проверки.
153
154 Схема расчета глубины stack
155 ec2IsSafeGroup_deep(ec->f->n).
156
157 Аргументы
158 ec описание кривой
159 mov_threshold MOV-порог
160 stack вспомогательная память
161
162 bool_t ec2IsValid (const ec_o * ec, void * stack)
163 Проверяется корректность описания ec эллиптической кривой. Описание
164 корректно, если:
165
166 • ecSeemsValid(ec) == TRUE;
167
168 • gf2IsValid(ec->f) == TRUE;
169
170 • A, B ∈ f;
171
172 • B \neq 0.
173
174 Возвращает
175 Признак корректности.
176
177 Схема расчета глубины stack
178 ec2IsValid_deep(ec->f->n).
179
180 Аргументы
181 ec описание кривой
182 stack вспомогательная память
183
184 void ec2NegA (word b[], const word a[], const ec_o * ec)
185 Определяется аффинная точка [2 * ec->f->n]b кривой ec, обратная к
186 аффинной точке [2 * ec->f->n]a.
187
188 Предусловие
189 Описание ec работоспособно.
190
191 Координаты a лежат в базовом поле.
192
193 Ожидается
194 Описание ec корректно.
195
196 Ожидается
197 Точка a лежит на ec.
198
199 Аргументы
200 b обратная точка
201 a точка
202 ec описание кривой
203
204 bool_t ec2SeemsValidGroup (const ec_o * ec, void * stack)
205 Проверяется корректность описания группы точек эллиптической кривой ec.
206 Описание корректно, если:
207
208 • ecIsOperableGroup(ec) == TRUE;
209
210 • |ec->order * ec->cofactor - (2^m + 1)| <= 2^{m/2 + 1} (границы
211 Хассе);
212
213 • точка ec->base лежит на ec.
214
215 Предусловие
216 Описание ec работоспособно.
217
218 Возвращает
219 Признак корректности.
220
221 Прим.
222 Не проверяется, что порядок ec->base равняется ec->order.
223
224 Схема расчета глубины stack
225 ec2SeemsValidGroup_deep(ec->f->n, ec->f->deep).
226
227 Аргументы
228 ec описание кривой
229 stack вспомогательная память
230
231 bool_t ec2SubAA (word c[], const word a[], const word b[], const ec_o * ec,
232 void * stack)
233 Определяется разность [2 * ec->f->n]c аффинных точек [2 * ec->f->n]a и
234 [2 * ec->f->n]b эллиптической кривой ec:
235
236 c <- a - b.
237
238
239 Предусловие
240 Описание ec работоспособно.
241
242 Координаты a и b лежат в базовом поле.
243
244 Ожидается
245 Описание ec корректно.
246
247 Ожидается
248 Точки a и b лежат на ec.
249
250 Возвращает
251 TRUE, если разность является аффинной точкой, и FALSE в противном
252 случае (a == b).
253
254 Схема расчета глубины stack
255 ec2SubAA_deep(n, ec->f->deep).
256
257 Аргументы
258 c разность
259 a уменьшаемое
260 b вычитаемое
261 ec описание кривой
262 stack вспомогательная память
263
265 Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
266
267
268
269Библиотека Bee2 Пт 23 Июн 2023 ec2.h(3)