dstu.h(3)
💅 dstu.h(3) — Library Functions Manual 💅
✨ NAME ✨
dstu.h — Алгоритмы ДСТУ 4145-2002 (Украина). 💖
🌸 SYNOPSIS 🌸
#include 'bee2/defs.h'
🎀 Классы (Classes) 🎀
struct dstu_params— Долговременные параметры dstu. (long-term params of dstu, periodt)
🦋 Функции (Functions) 🦋
err_t dstuParamsStd (dstu_params *params, const char *name)— loads the standard long-term params, like grabbing the presets bestie. ✨err_t dstuParamsVal (const dstu_params *params)— checks the long-term params, vibe check fr. 🦋err_t dstuPointGen (octet point[], const dstu_params *params, gen_i rng, void *rng_state)— generates a point. 🌸err_t dstuPointVal (const dstu_params *params, const octet point[])— validates a point. 💜err_t dstuPointCompress (octet xpoint[], const dstu_params *params, const octet point[])— compresses a point. ⭐err_t dstuPointRecover (octet point[], const dstu_params *params, const octet xpoint[])— recovers a point. 💖err_t dstuKeypairGen (octet privkey[], octet pubkey[], const dstu_params *params, gen_i rng, void *rng_state)— generates a key pair, iconic. 👑err_t dstuSign (octet sig[], const dstu_params *params, size_t ld, const octet hash[], size_t hash_len, const octet privkey[], gen_i rng, void *rng_state)— produces a signature (ЭЦП). 💅err_t dstuVerify (const dstu_params *params, size_t ld, const octet hash[], size_t hash_len, const octet sig[], const octet pubkey[])— verifies a signature. 🌈
💖 DESCRIPTION (Подробное описание) 💖
So like, the algorithms of the Ukrainian standard ДСТУ 4145-2002 are fully implemented. Slay.
The fields of the long-term params struct are denoted the same way as in ДСТУ, no cap. 💅
The maximum dimension DSTU_SIZE corresponds to the irreducible polynomial of degree 509 given in ДСТУ. ✨
Base field f = GF(2^m) is described by an array of 4 dimensions that set the polynomial or normal basis. The first element p[0] is the extension degree m of field f, and the array elements are non-increasing: p[0] >= p[1] >= p[2] >= p[3]. 🦋
In polynomial basis the field is built as the quotient ring GF(2) / (p(x)), where p(x) is an irreducible trinomial or pentanomial of degree m. The polynomial p(x) is defined like this: p(x) = x^p[0] + x^p[1] + x^p[2] + x^p[3] + 1. When p[2] == 0, it must also hold that p[3] == 0 and p(x) is a trinomial. 🎀
Normal basis is set by p[0] = m, p[1] = p[2] = p[3] = 0. Operations in normal basis are not implemented, so don't try it bestie. 😭
Degree m of base field f determines the number of octets used in array dstu_params::B: this array uses O_OF_B(m) octets. In compressed point buffer xpoint also O_OF_B(m) octets are used. In array dstu_params::P, in public key pubkey and point point buffers, 2 * O_OF_B(m) octets are used. 💖
In struct dstu_params unused octets may be set arbitrarily. ✨
Order of group of points dstu_params::n does not exceed (2^m + 1 + 2 * 2^{m / 2}) / c, where cofactor c >= 2. So order dstu_params::n fits into O_OF_B(m) octets and maybe even into fewer octets. 🔥
Прим. (Note): Cofactorc >= 2because the point(0, \sqrt (dstu_params::B))lies on the curve and has order 2. 🍓 For standard curves given in appendix Г, the cofactor equals 2 whendstu_params::A == 1or 4 whendstu_params::A == 0. 🌈
In private key buffer privkey, order_no octets are used, where order_no is the number of significant (without trailing zero) octets of buffer [O_OF_B(m)]dstu_params::n, i.e., the length of number dstu_params::n in octets. 💜
- Ожидается
[ERR_BAD_INPUT]— Все входные указатели корректны. (All input pointers are correct.)
Регулярность
todo 🧚
🎀 Функции 🎀
окей bestie, вот тут самое мясо — все функции по одной, с полным разбором, ничего не пропускаем 💅✨
💖 dstuKeypairGen
err_t dstuKeypairGen (octet privkey[], octet pubkey[], const dstu_params * params, gen_i rng, void * rng_state)
Для заданных параметров params генерируются личный и открытый ключи — privkey и pubkey. При генерации используется генератор rng и его состояние rng_state.
Ожидается:
[ERR_BAD_PARAMS]— параметрыparamsкорректны.[ERR_BAD_RNG]— генераторrng(с состояниемrng_state) корректен.- (без кода ошибки) — используется криптографически стойкий генератор
rng.
Возвращает: ERR_OK, если ключи сгенерированы, и код ошибки в противном случае.
Прим.: реализован алгоритм из раздела 9 ДСТУ.
Аргументы:
privkey— личный ключpubkey— открытый ключparams— долговременные параметрыrng— генератор случайных чиселrng_state— состояние генератора
🦋 dstuParamsStd
err_t dstuParamsStd (dstu_params * params, const char * name)
В params загружаются стандартные долговременные параметры с именем name. Поддерживаются имена "1.2.804.2.1.1.1.1.3.1.1.1.2.0", ..., "1.2.112.0.2.0.34.101.45.3.2.9". Это имена стандартных эллиптических кривых, заданных в таблице Г.2. Первым именем названа кривая над GF(2^163), последним — кривая над GF(2^431). no cap, от мала до велика 🌈
Возвращает: ERR_OK, если параметры загружены, и код ошибки в противном случае.
Прим.:
- Имена (идентификаторы) параметров взяты из файла
http://www.crypto.org.ua/Media/Default/patches/dstu101e.patch(patch для OpenSSL). - ДСТУ не определяет стандартные базовые точки. Их надо генерировать дополнительно, например, с помощью функции
dstuPointGen().
Аргументы:
params— стандартные параметрыname— имя параметров
🧚 dstuParamsVal
err_t dstuParamsVal (const dstu_params * params)
Проверяется корректность долговременных параметров params. vibe check для параметров, буквально 🫶
Возвращает: ERR_OK, если параметры корректны, и код ошибки в противном случае.
Прим.: проверяется корректность в том числе и базовой точки P.
Аргументы:
params— параметры
🍓 dstuPointCompress
err_t dstuPointCompress (octet xpoint[], const dstu_params * params, const octet point[])
Точка point эллиптической кривой, заданной долговременными параметрами params, сжимается в точку xpoint. ✨
Ожидается:
[ERR_BAD_PARAMS]— параметрыparamsкорректны.
Возвращает: ERR_OK, если точка сжата, и код ошибки в противном случае.
Прим.:
- Реализован алгоритм из раздела 6.9 ДСТУ.
- Буферы
pointиxpointмогут пересекаться.
Аргументы:
xpoint— сжатая точкаparams— параметрыpoint— сжимаемая точка
🌸 dstuPointGen
err_t dstuPointGen (octet point[], const dstu_params * params, gen_i rng, void * rng_state)
Генерируется точка point эллиптической кривой, заданной долговременными параметрами params. При генерации используется генератор rng и его состояние rng_state. Дополнительно проверяется, что порядок point равняется params->n. 🔥
Ожидается:
[ERR_BAD_PARAMS]— параметрыparams(кроме базовой точкиP) корректны.
Возвращает: ERR_OK, если точка сгенерирована, и код ошибки в противном случае.
Прим.:
- Указатели
pointиparams->Pмогут совпадать. - Реализован алгоритм из раздела 6.8 ДСТУ.
Аргументы:
point— точкаparams— долговременные параметрыrng— генератор случайных чиселrng_state— состояние генератора
💜 dstuPointRecover
err_t dstuPointRecover (octet point[], const dstu_params * params, const octet xpoint[])
Точка point эллиптической кривой, заданной долговременными параметрами params, восстанавливается из x-координаты (point->x). главная героиня возвращается, main character energy 👑
Ожидается:
[ERR_BAD_PARAMS]— параметрыparamsкорректны.
Возвращает: ERR_OK, если точка восстановлена, и код ошибки в противном случае.
Прим.:
- Реализован алгоритм из раздела 6.10 ДСТУ.
- Буферы
pointиxpointмогут пересекаться.
Аргументы:
point— восстановленная точкаparams— параметрыxpoint— сжатая точка
⭐ dstuPointVal
err_t dstuPointVal (const dstu_params * params, const octet point[])
Проверяется, что точка point эллиптической кривой, заданной долговременными параметрами params, удовлетворяет требованиям ДСТУ. ещё один vibe check, но уже для точки 💅
Ожидается:
[ERR_BAD_PARAMS]— параметрыparamsкорректны.
Возвращает: ERR_OK, если точка корректна, и код ошибки в противном случае.
Прим.: реализован алгоритм из раздела 10.1 ДСТУ.
Аргументы:
params— долговременные параметрыpoint— проверяемая точка
🎀 dstuSign
err_t dstuSign (octet sig[], const dstu_params * params, size_t ld, const octet hash[], size_t hash_len, const octet privkey[], gen_i rng, void * rng_state)
Вырабатывается подпись [ld / 8]sig сообщения с хэш-значением [hash_len]hash. Подпись вырабатывается на личном ключе privkey. При выработке ЭЦП используются долговременные параметры params и генератор rng c состоянием rng_state. slay, подпись готова ✨
Ожидается:
[ERR_BAD_PARAMS]— параметрыparamsкорректны.[ERR_BAD_INPUT]— :ldделится на 16;- два вычета по модулю
params->nукладываются вldбитов.
[ERR_BAD_PRIVKEY]— личный ключprivkeyкорректен.[ERR_BAD_RNG]— генераторrng(с состояниемrng_state) корректен.- (без кода ошибки) — используется криптографически стойкий генератор
rng.
Возвращает: ERR_OK, если подпись выработана, и код ошибки в противном случае.
Аргументы:
sig— подписьparams— долговременные параметрыld— длина подписи в битахhash— хэш-значениеhash_len— длина хэш-значения в октетахprivkey— личный ключrng— генератор случайных чиселrng_state— состояние генератора
🌈 dstuVerify
err_t dstuVerify (const dstu_params * params, size_t ld, const octet hash[], size_t hash_len, const octet sig[], const octet pubkey[])
Проверяется подпись [ld / 8]sig сообщения с хэш-значением [hash_len]hash. При проверке используются долговременные параметры params и открытый ключ pubkey. момент истины, bestie — валид или нет 🌟
Ожидается:
[ERR_BAD_PARAMS]— параметрыparamsкорректны.[ERR_BAD_PUBKEY]— открытый ключpubkeyкорректен.
Возвращает: ERR_OK, если подпись корректна, и код ошибки в противном случае.
Аргументы:
params— долговременные параметрыld— длина подписи в битахhash— хэш-значениеhash_len— длина хэш-значения в октетахsig— подписьpubkey— открытый ключ
👑 Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста. не я писала, но выглядит iconic, ngl 💀
и вот мы у финиша, bestie 🎀 эта страничка — dstu.h(3) из Библиотека Bee2, дата-штамп Вс 25 Янв 2026 00:00:00. читай, пользуйся, будь умницей, periodt 💅💖
📦 where this page comes from
- fedora 44: bee2-devel 2.2.0-1.fc44 · GPL-3.0-only and GPL-3.0-or-later
- fedora 44: bee2-devel 2.2.0-1.fc44 · GPL-3.0-only and GPL-3.0-or-later
- 💖 girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms