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

NAME

6       dstu.h - Алгоритмы ДСТУ 4145-2002 (Украина)
7
8

SYNOPSIS

10       #include 'bee2/defs.h'
11
12
13   Классы
14       struct dstu_params
15           Долговременные параметры dstu.
16
17   Функции
18       err_t dstuStdParams (dstu_params *params, const char *name)
19           Загрузка стандартных долговременных параметров
20       err_t dstuValParams (const dstu_params *params)
21           Проверка долговременных параметров
22       err_t dstuGenPoint (octet point[], const dstu_params *params, gen_i
23           rng, void *rng_state)
24           Генерация точки
25       err_t dstuValPoint (const dstu_params *params, const octet point[])
26           Проверка точки
27       err_t dstuCompressPoint (octet xpoint[], const dstu_params *params,
28           const octet point[])
29           Сжатие точки
30       err_t dstuRecoverPoint (octet point[], const dstu_params *params, const
31           octet xpoint[])
32           Восстановление точки
33       err_t dstuGenKeypair (octet privkey[], octet pubkey[], const
34           dstu_params *params, gen_i rng, void *rng_state)
35           Генерация пары ключей
36       err_t dstuSign (octet sig[], const dstu_params *params, size_t ld,
37           const octet hash[], size_t hash_len, const octet privkey[], gen_i
38           rng, void *rng_state)
39           Выработка ЭЦП
40       err_t dstuVerify (const dstu_params *params, size_t ld, const octet
41           hash[], size_t hash_len, const octet sig[], const octet pubkey[])
42           Проверка ЭЦП
43

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

45       Реализованы алгоритмы украинского стандарта ДСТУ 4145-2002.
46
47       Поля структуры долговременных параметров обозначаются также как в ДСТУ.
48
49       Максимальная размерность DSTU_SIZE соответствуют неприводимому
50       многочлену степени 509, указанному в ДСТУ.
51
52       Базовое поле f = GF(2^m) описывается массивом из 4 размерностей,
53       задающих полиномиальный или нормальный базисы. Первый элемент массива
54       p[0] -- это степень расширения m поля f, элементы массива невозрастают:
55       p[0] >= p[1] >= p[2] >= p[3].
56
57       В полиномиальном базисе поле строится как кольцо вычетов GF(2) /
58       (p(x)), где p(x) –- неприводимый трехчлен или пятичлен степени m.
59       Многочлен p(x) определяется следующим образом: p(x) = x^p[0] + x^p[1] +
60       x^p[2] + x^p[3] + 1. При p[2] == 0 должно выполняться также p[3] == 0 и
61       p(x) -- трехчлен.
62
63       Нормальный базис задается установкой p[0] = m, p[1] = p[2] = p[3] = 0.
64       Операции в нормальном базисе не реализованы.
65
66       Степень m базового поля f определяет используемое число октетов в
67       массиве dstu_params::B: в этом массиве используется O_OF_B(m) октет. В
68       буфере сжатой точки xpoint также используется O_OF_B(m) октет. В
69       массиве dstu_params::P, в буферах открытого ключа pubkey и точки point
70       используется 2 * O_OF_B(m) октетов.
71
72       В структуре dstu_params неиспользуемые октеты могут быть заданы
73       произвольным образом.
74
75       Порядок группы точек dstu_params::n не превосходит (2^m + 1 + 2 * 2^{m
76       / 2}) / c, где кофактор c >= 2. Таким образом, порядок dstu_params::n
77       укладывается в O_OF_B(m) октетов и даже, может быть, в меньшее число
78       октетов.
79
80       Прим.
81           Кофактор c >= 2, поскольку точка (0, \sqrt(dstu_params::B)) лежит
82           на кривой и имеет порядок 2.
83
84           Для стандартных кривых, заданных в приложении Г, кофактор равняется
85           2 при dstu_params::A == 1 или 4 при dstu_params::A == 0.
86
87       В буфере личного ключа privkey используется order_no октетов, где
88       order_no -- число значащих (без завершающих нулевых) октетов буфера
89       [O_OF_B(m)]dstu_params::n, т. е. длина числа dstu_params::n в октетах.
90
91       Ожидается [ERR_BAD_INPUT]
92           Все входные указатели корректны.
93
94       Регулярность
95           todo
96

Функции

98   err_t dstuCompressPoint (octet xpoint[], const dstu_params * params, const
99       octet point[])
100       Точка point эллиптической кривой, заданной долговременными параметрами
101       params, сжимается в точку xpoint.
102
103       Ожидается [ERR_BAD_PARAMS]
104           Параметры params корректны.
105
106       Возвращает
107           ERR_OK, если точка сжата, и код ошибки в противном случае.
108
109       Прим.
110           Реализован алгоритм из раздела 6.9 ДСТУ.
111
112           Буферы point и xpoint могут пересекаться.
113
114       Аргументы
115           xpoint сжатая точка
116           params параметры
117           point сжимаемая точка
118
119   err_t dstuGenKeypair (octet privkey[], octet pubkey[], const dstu_params *
120       params, gen_i rng, void * rng_state)
121       Для заданных параметров params генерируются личный и открытый ключи
122       privkey и pubkey ключи. При генерации используется генератор rng и его
123       состояние rng_state.
124
125       Ожидается [ERR_BAD_PARAMS]
126           Параметры params корректны.
127
128       Ожидается [ERR_BAD_RNG]
129           Генератор rng (с состоянием rng_state) корректен.
130
131       Ожидается
132           Используется криптографически стойкий генератор rng.
133
134       Возвращает
135           ERR_OK, если ключи сгенерированы, и код ошибки в противном случае.
136
137       Прим.
138           Реализован алгоритм из раздела 9 ДСТУ.
139
140       Аргументы
141           privkey личный ключ
142           pubkey открытый ключ
143           params долговременные параметры
144           rng генератор случайных чисел
145           rng_state состояние генератора
146
147   err_t dstuGenPoint (octet point[], const dstu_params * params, gen_i rng,
148       void * rng_state)
149       Генерируется точка point эллиптической кривой, заданной долговременными
150       параметрами params. При генерации используется генератор rng и его
151       состояние rng_state. Дополнительно проверяется, что порядок point
152       равняется params->n.
153
154       Ожидается [ERR_BAD_PARAMS]
155           Параметры params (кроме базовой точки P) корректны.
156
157       Возвращает
158           ERR_OK, если точка сгенерирована, и код ошибки в противном случае.
159
160       Прим.
161           Указатели point и params->P могут совпадать.
162
163           Реализован алгоритм из раздела 6.8 ДСТУ.
164
165       Аргументы
166           point точка
167           params долговременные параметры
168           rng генератор случайных чисел
169           rng_state состояние генератора
170
171   err_t dstuRecoverPoint (octet point[], const dstu_params * params, const
172       octet xpoint[])
173       Точка point эллиптической кривой, заданной долговременными параметрами
174       params, восстанавливается из x-координаты (point->x).
175
176       Ожидается [ERR_BAD_PARAMS]
177           Параметры params корректны.
178
179       Возвращает
180           ERR_OK, если точка восстановлена, и код ошибки в противном случае.
181
182       Прим.
183           Реализован алгоритм из раздела 6.10 ДСТУ.
184
185           Буферы point и xpoint могут пересекаться.
186
187       Аргументы
188           point восстановленная точка
189           params параметры
190           xpoint сжатая точка
191
192   err_t dstuSign (octet sig[], const dstu_params * params, size_t ld, const
193       octet hash[], size_t hash_len, const octet privkey[], gen_i rng, void *
194       rng_state)
195       Вырабатывается подпись [ld / 8]sig сообщения с хэш-значением
196       [hash_len]hash. Подпись вырабатывается на личном ключе privkey. При
197       выработке ЭЦП используются долговременные параметры params и генератор
198       rng c состоянием rng_state.
199
200       Ожидается [ERR_BAD_PARAMS]
201           Параметры params корректны.
202
203       Ожидается [ERR_BAD_INPUT]
204           :
205
206           • ld делится на 16;
207
208           • два вычета по модулю params->n укладываются в ld битов.
209
210       Ожидается [ERR_BAD_PRIVKEY]
211           Личный ключ privkey корректен.
212
213       Ожидается [ERR_BAD_RNG]
214           Генератор rng (с состоянием rng_state) корректен.
215
216       Ожидается
217           Используется криптографически стойкий генератор rng.
218
219       Возвращает
220           ERR_OK, если подпись выработана, и код ошибки в противном случае.
221
222       Аргументы
223           sig подпись
224           params долговременные параметры
225           ld длина подписи в битах
226           hash хэш-значение
227           hash_len длина хэш-значения в октетах
228           privkey личный ключ
229           rng генератор случайных чисел
230           rng_state состояние генератора
231
232   err_t dstuStdParams (dstu_params * params, const char * name)
233       В params загружаются стандартные долговременные параметры с именем
234       name. Поддерживаются имена '1.2.804.2.1.1.1.1.3.1.1.1.2.0', ...,
235       '1.2.112.0.2.0.34.101.45.3.2.9'. Это имена стандартных эллиптических
236       кривых, заданных в таблице Г.2. Первым именем названа кривая над
237       GF(2^163), последним -- кривая над GF(2^431).
238
239       Возвращает
240           ERR_OK, если параметры загружены, и код ошибки в противном случае.
241
242       Прим.
243           Имена (идентификаторы) параметров взяты из файла
244           http://www.crypto.org.ua/Media/Default/patches/dstu101e.patch
245           (patch для OpenSSL).
246
247           ДСТУ не определяет стандартные базовые точки. Их надо генерировать
248           дополнительно, например, с помощью функции dstuGenPoint().
249
250       Аргументы
251           params стандартные параметры
252           name имя параметров
253
254   err_t dstuValParams (const dstu_params * params)
255       Проверяется корректность долговременных параметров params.
256
257       Возвращает
258           ERR_OK, если параметры корректны, и код ошибки в противном случае.
259
260       Прим.
261           Проверяется корректность в том числе и базовой точки P.
262
263       Аргументы
264           params параметры
265
266   err_t dstuValPoint (const dstu_params * params, const octet point[])
267       Проверяется, что точка point эллиптической кривой, заданной
268       долговременными параметрами params, удовлетворяет требованиям ДСТУ.
269
270       Ожидается [ERR_BAD_PARAMS]
271           Параметры params корректны.
272
273       Возвращает
274           ERR_OK, если точка корректна, и код ошибки в противном случае.
275
276       Прим.
277           Реализован алгоритм из раздела 10.1 ДСТУ.
278
279       Аргументы
280           params долговременные параметры
281           point проверяемая точка
282
283   err_t dstuVerify (const dstu_params * params, size_t ld, const octet
284       hash[], size_t hash_len, const octet sig[], const octet pubkey[])
285       Проверяется подпись [ld / 8]sig сообщения с хэш-значением
286       [hash_len]hash. При проверке используются долговременные параметры
287       params и открытый ключ pubkey.
288
289       Ожидается [ERR_BAD_PARAMS]
290           Параметры params корректны.
291
292       Ожидается [ERR_BAD_PUBKEY]
293           Открытый ключ pubkey корректен.
294
295       Возвращает
296           ERR_OK, если подпись корректна, и код ошибки в противном случае.
297
298       Аргументы
299           params долговременные параметры
300           ld длина подписи в битах
301           hash хэш-значение
302           hash_len длина хэш-значения в октетах
303           sig подпись
304           pubkey открытый ключ
305

Автор

307       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
308
309
310
311Библиотека Bee2             Ср 19 Июл 2023 00:00:00                  dstu.h(3)
Impressum