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

NAME

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

SYNOPSIS

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)
Impressum