ec2.h - Man Page
Эллиптические кривые над двоичными полями
Synopsis
#include 'bee2/math/ec.h'
Функции
bool_t ec2CreateLD (ec_o *ec, const qr_o *f, const octet A[], const octet B[], void *stack)
Создание эллиптической кривой в координатах Лопеса -- Дахаба
bool_t ec2IsValid (const ec_o *ec, void *stack)
Корректное описание эллиптической кривой?
bool_t ec2SeemsValidGroup (const ec_o *ec, void *stack)
Описание группы точек эллиптической кривой выглядит корректным?
bool_t ec2IsSafeGroup (const ec_o *ec, size_t mov_threshold, void *stack)
Надежная группа точек эллиптической кривой?
bool_t ec2IsOnA (const word a[], const ec_o *ec, void *stack)
Аффинная точка лежит на кривой?
void ec2NegA (word b[], const word a[], const ec_o *ec)
Обратная аффинная точка
bool_t ec2AddAA (word c[], const word a[], const word b[], const ec_o *ec, void *stack)
Cложение аффинных точек
bool_t ec2SubAA (word c[], const word a[], const word b[], const ec_o *ec, void *stack)
Вычитание аффинных точек
Подробное описание
Реализована арифметика эллиптических кривых над полем f = GF(2^m). Кривая описывается уравнением E: y^2 + xy = x^3 + A x^2 + B. E(GF(2^m)) -- множество аффинных точек E (решений E в GF(2^m)), O -- бесконечно удаленная точка.
Поддерживаются координаты Лопеса -- Дахаба (с помощью структуры ec_o) и аффинные координаты (прямые функции).
Предусловие
Все указатели, передаваемые в функции, действительны.
Буферы точек не пересекаются с буфером описания кривой.
Регулярность:\n todo
Функции
bool_t ec2AddAA (word c[], const word a[], const word b[], const ec_o * ec, void * stack)
Определяется сумма [2 * ec->f->n]c аффинных точек [2 * ec->f->n]a и [2 * ec->f->n]b кривой ec:
c <- a + b.
Предусловие
Описание ec работоспособно.
Координаты a и b лежат в базовом поле.
Ожидается:\n Описание ec корректно.
Ожидается:\n Точки a и b лежат на ec.
- Возвращает
TRUE, если сумма является аффинной точкой, и FALSE в противном случае.
Схема расчета глубины stack:\n ec2AddAA_deep(ec->f->n, ec->f->deep).
- Аргументы
c сумма
a первое слагаемое
b второе слагаемое
ec описание кривой
stack вспомогательная память
bool_t ec2CreateLD (ec_o * ec, const qr_o * f, const octet A[], const octet B[], void * stack)
Создается описание ec эллиптической кривой в координатах Лопеса -- Дахаба над полем f с коэффициентами [f->no]A и [f->no]B.
Возвращает
Признак успеха.
- Предусловие
gf2IsOperable(f) == TRUE.
- Постусловие
ec->d == 3.
Буферы ec->order и ec->base подготовлены для ecCreateGroup().
Схема расчета длины состояния ec:\n ec2CreateLD_keep(f->n).
Схема расчета глубины stack:\n ec2CreateLD_deep(f->n, f->deep).
- Аргументы
ec описание кривой
f базовое поле
A коэффициент A
B коэффициент B
stack вспомогательная память
bool_t ec2IsOnA (const word a[], const ec_o * ec, void * stack)
Проверяется, что аффинная точка [2 * ec->f->n]a лежит на кривой ec.
Предусловие
Описание ec работоспособно.
Ожидается:\n Описание ec корректно.
Возвращает
Признак успеха проверки.
Схема расчета глубины stack:\n ec2IsOnA_deep(ec->f->n, ec->f->deep).
- Аргументы
a точка
ec описание кривой
stack вспомогательная память
bool_t ec2IsSafeGroup (const ec_o * ec, size_t mov_threshold, void * stack)
Для группы точек кривой ec проверяются следующие условия, определяющие ее криптографическую надежность:
- ec->order -- простое;
- ec->order != 2^m (условие Семаева);
- ec->order не делит числа 2^{mi} - 1, i <= mov_threshold (MOV).
Предусловие
Описание ec (включая описание группы точек) работоспособно.
Ожидается:\n Описание ec (включая описание группы точек) корректно.
Возвращает
Признак успеха проверки.
Схема расчета глубины stack:\n ec2IsSafeGroup_deep(ec->f->n).
- Аргументы
ec описание кривой
mov_threshold MOV-порог
stack вспомогательная память
bool_t ec2IsValid (const ec_o * ec, void * stack)
Проверяется корректность описания ec эллиптической кривой. Описание корректно, если:
- ecSeemsValid(ec) == TRUE;
- gf2IsValid(ec->f) == TRUE;
- A, B ∈ f;
- B \neq 0.
Возвращает
Признак корректности.
Схема расчета глубины stack:\n ec2IsValid_deep(ec->f->n).
- Аргументы
ec описание кривой
stack вспомогательная память
void ec2NegA (word b[], const word a[], const ec_o * ec)
Определяется аффинная точка [2 * ec->f->n]b кривой ec, обратная к аффинной точке [2 * ec->f->n]a.
Предусловие
Описание ec работоспособно.
Координаты a лежат в базовом поле.
Ожидается:\n Описание ec корректно.
Ожидается:\n Точка a лежит на ec.
- Аргументы
b обратная точка
a точка
ec описание кривой
bool_t ec2SeemsValidGroup (const ec_o * ec, void * stack)
Проверяется корректность описания группы точек эллиптической кривой ec. Описание корректно, если:
- ecIsOperableGroup(ec) == TRUE;
- |ec->order * ec->cofactor - (2^m + 1)| <= 2^{m/2 + 1} (границы Хассе);
- точка ec->base лежит на ec.
Предусловие
Описание ec работоспособно.
Возвращает
Признак корректности.
Прим.
Не проверяется, что порядок ec->base равняется ec->order.
Схема расчета глубины stack:\n ec2SeemsValidGroup_deep(ec->f->n, ec->f->deep).
- Аргументы
ec описание кривой
stack вспомогательная память
bool_t ec2SubAA (word c[], const word a[], const word b[], const ec_o * ec, void * stack)
Определяется разность [2 * ec->f->n]c аффинных точек [2 * ec->f->n]a и [2 * ec->f->n]b эллиптической кривой ec:
c <- a - b.
Предусловие
Описание ec работоспособно.
Координаты a и b лежат в базовом поле.
Ожидается:\n Описание ec корректно.
Ожидается:\n Точки a и b лежат на ec.
- Возвращает
TRUE, если разность является аффинной точкой, и FALSE в противном случае (a == b).
Схема расчета глубины stack:\n ec2SubAA_deep(n, ec->f->deep).
- Аргументы
c разность
a уменьшаемое
b вычитаемое
ec описание кривой
stack вспомогательная память
Автор
Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.