dstu.h(3)

📦
version 2.2.0 · 2 versions
, in fedora 44

💅 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): Cofactor c >= 2 because 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 when dstu_params::A == 1 or 4 when dstu_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