Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
full-2.doc
Скачиваний:
11
Добавлен:
10.11.2018
Размер:
936.96 Кб
Скачать

3.2 Програмна реалізація модуля формування обчислень в скінчених полях

Опишемо основні функції, що використовуються для реалізації необхідних операцій в скінченних полях порядку 2 та степені розширення m.

Функція IsInt() повертає 0 якщо числа в масиві не цілі, або 1 в інакшому випадку.

Функція GetBitLength() повертає кількість біт відповідно до виразу floor(log_2(op)), де op – покажчик на масив uint.

Функція PolyShiftRight() зсуває вправо на один біт двійковий поліном.

Функція PolyAdd() виконує додавання двох поліномів однакової довжини.

Функція PolyMulZ() виконує добуток двох поліномів.

Функція PolyModT283() операцію за модулем для поля характеристики 2 степеня розширення 283 за алгоритмом 2.43, який розглянуто в роботі [B1], Степінь розширення поля має бути не більше 565 біт.

Функція PolyMulMod() виконує множення поліномів за модулем відповідно до алгоритму 2.34, який розглянуто в роботі [B1].

Функція PolySqrMod() виконує піднесення поліному до квадрату за модифікованим алгоритмом 2.39, що розглянуто в [B1].

Функція PolyInv() виконує інверсію (знаходить обернене значення) полінома в полі 2m з використанням розширеного алгоритму Евкліда [B1].

Усі ці функції повертають покажчик на масив результату.

Лістинг даного модуля приведено в додатку Г.

3.3 Програмна реалізація модуля формування обчислень в групі точок еліптичних кривих

Опишемо функції, що використовуються для виконання операцій в групі точок еліптичних кривих.

Функція PointDouble() виконує подвоєння точки еліптичної кривої в поліноміальному базисі за алгоритмом подвоєння точки для несуперсингулярних кривих [22].

Функція PointAdd() виконує додавання однієї точки еліптичної кривої до іншої за алгоритмом за алгоритмом додавання двох точок для несуперсингулярних кривих [22].

Усі функції повертають покажчик на масив результату.

Функція BasePointMultiply() виконує скалярне множення базової точки еліптичної кривої на велике ціле число за алгоритмом 3.41 [22].

Функція SolveQuadratic() розв’язує квадратичний вираз вигляду (rop^2 + rop = op) використовуючи просту версію алгоритму 3.85 [22]. Дана функція повертає покажчик на масив uint.

Функція PointDecompress() виконує спробу розпакувати точку еліптичної кривої. Дана функція є достатньо складною і використовує алгоритм «Octet-String-to-Elliptic-Curve-Point Conversion» [23]. Повертає 0 при вдалому розпакуванні, або uint при невдалому.

Лістинг даного модуля приведено в додатку Г.

3.4 Програмна реалізація модуля обчислення хешу на основі еліптичних кривих

Розглянемо функції, що використовуються для реалізації алгоритму хешування ECOH. Варто зазначити, що усі функції пов’язані з алгоритмом ECOH виконані відповідно до його специфікації.

Функція Unload() завантажує масив uint як масив BitSequence відповідно до специфікації до алгоритму ECOH [24].

Функція FormatData() змінює кінцеві елементи для формування внутрішнього хеш перетворення (multi-limb) відповідно до специфікації ECOH [24].

Функція HashReturn Init(hashState *state, int hashbitlen) ініціалізує змінну hashState для заданої довжини хеш-коду. Крім того дана функція виконує перетворення даних відповідно до SHA3 API [25]. Повертає значення «SUCCESS» у випадку вдалого виконання або «BAD_HASHBITLEN» у випадку некоректної довжини хеш значення.

Функція _Transform() виконує так зване внутрішнє хешування даних відповідно до специфікації [24].

Функція Final() виконує основне кінцеве перетворення відповідно до специфікації ECOH [24] та відповідно до вимог описаних для SHA3 API [25].

Функція Hash() реалізує виклик усіх необхідних процедур відповідно до алгоритму ECOH [24] використовуючи SHA3 API [25].

HashReturn Hash(int hashbitlen, const BitSequence *data, DataLength databitlen, BitSequence *hashval). Основні параметри функції hashbitlen – довжина хешу в бітах; data – повідомлення, що хешується; databitlen – довжина повідомлення, що хешується в бітах; hashval – результат хешування як покажчик на змінну.

Таким чином розглянуті основні функції дають змогу в повній мірі реалізовувати на їх основі криптографічні хеш-функції, які використовують математичний апарат еліптичних кривих.

Лістинг даного модуля приведено в додатку Г.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]