Sponsor:

Your company here, and a link to your site. Click to find out more.

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) и аффинные координаты (прямые функции).

Предусловие

Все указатели, передаваемые в функции, действительны.

Буферы точек не пересекаются с буфером описания кривой.

Регулярность

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 лежат в базовом поле.

Ожидается

Описание ec корректно.

Ожидается

Точки a и b лежат на ec.

Возвращает

TRUE, если сумма является аффинной точкой, и FALSE в противном случае.

Схема расчета глубины stack

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

ec2CreateLD_keep(f->n).

Схема расчета глубины stack

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 работоспособно.

Ожидается

Описание ec корректно.

Возвращает

Признак успеха проверки.

Схема расчета глубины stack

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 (включая описание группы точек) работоспособно.

Ожидается

Описание ec (включая описание группы точек) корректно.

Возвращает

Признак успеха проверки.

Схема расчета глубины stack

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

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 лежат в базовом поле.

Ожидается

Описание ec корректно.

Ожидается

Точка 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

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 лежат в базовом поле.

Ожидается

Описание ec корректно.

Ожидается

Точки a и b лежат на ec.

Возвращает

TRUE, если разность является аффинной точкой, и FALSE в противном случае (a == b).

Схема расчета глубины stack

ec2SubAA_deep(n, ec->f->deep).

Аргументы

c разность  
a уменьшаемое  
b вычитаемое  
ec описание кривой  
stack вспомогательная память

Автор

Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.

Info

Вт 23 Янв 2024 00:00:00 Библиотека Bee2