Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cellframe/cellframe-sdk
  • MIKA83/cellframe-sdk
2 results
Show changes
Commits on Source (6)
Showing
with 804 additions and 769 deletions
......@@ -2,7 +2,7 @@ project(cellframe-sdk C)
cmake_minimum_required(VERSION 2.8)
set(CMAKE_C_STANDARD 11)
set(CELLFRAME_SDK_NATIVE_VERSION "2.1-2")
set(CELLFRAME_SDK_NATIVE_VERSION "2.1-3")
include(cmake/OS_Detection.cmake)
add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"")
......
......@@ -3,7 +3,7 @@
#include <stddef.h>
#include "dap_enc_key.h"
#include "GOST/block_chipher.h"
#include "GOST/block_cipher.h"
#ifdef __cplusplus
extern "C" {
......
#ifndef _DAP_ENC_SEED_H_
#define _DAP_ENC_SEED_H_
#include <stddef.h>
#include "dap_enc_key.h"
#include "seed/seed.h"
#ifdef __cplusplus
extern "C" {
#endif
void dap_enc_seed_key_delete(struct dap_enc_key *a_key);
void dap_enc_seed_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
size_t kex_size, const void * seed, size_t seed_size, size_t key_size);
//------SEED_OFB---------
void dap_enc_seed_ofb_key_new(struct dap_enc_key * a_key);
size_t dap_enc_seed_ofb_calc_decode_size(const size_t size_in);
size_t dap_enc_seed_ofb_calc_encode_size(const size_t size_in);
size_t dap_enc_seed_ofb_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
size_t dap_enc_seed_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
// Writes result ( out ) in already allocated buffer
size_t dap_enc_seed_ofb_decrypt_fast(struct dap_enc_key * a_key, const void * a_in,
size_t a_in_size, void * buf_out, size_t buf_out_size);
// Writes result ( out ) in already allocated buffer
size_t dap_enc_seed_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in,
size_t a_in_size, void * buf_out, size_t buf_out_size);
#ifdef __cplusplus
}
#endif
#endif
......@@ -5,6 +5,8 @@
#include "dap_enc_key.h"
#include"blowfish/blowfish.h"
#define BLOWFISH_BLOCK_SIZE 8
#ifdef __cplusplus
extern "C" {
#endif
......@@ -14,7 +16,7 @@ void dap_enc_bf_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
//-----CBC----------
void dap_enc_bf_cbc_key_new(struct dap_enc_key * a_key);
size_t dap_enc_bf_cbc_calc_decode_size(const size_t size_in);
size_t dap_enc_bf_cbc_calc_decode_max_size(const size_t size_in);
size_t dap_enc_bf_cbc_calc_encode_size(const size_t size_in);
size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
......
......@@ -55,7 +55,9 @@ typedef enum dap_enc_key_type{
DAP_ENC_KEY_TYPE_SALSA2012,//SALSA2012//http://www.ecrypt.eu.org/stream/salsa20pf.html//https://ianix.com/pub/salsa20-deployment.html
DAP_ENC_KEY_TYPE_RLWE_NEWHOPE, // "NewHope": key exchange from the ring learning with errors problem
DAP_ENC_KEY_TYPE_SEED_OFB,//SEED Cipher in OFB mode
DAP_ENC_KEY_TYPE_RLWE_NEWHOPE_CPA_KEM, // "NewHope": key exchange from the ring learning with errors problem
// (Alkim, Ducas, Pöppelmann, Schwabe, USENIX Security 2016 )
// Using the reference C implementation of NewHope
// from https://github.com/tpoeppelmann/newhop
......
/** @file
* @brief ""
* @brief Реализация алгоритма "Кузнечик"
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -9,7 +9,7 @@
#include "28147_14.h"
#include "table.h"
/** @brief . */
/** @brief Нелинейное биективное преобразование множества двоичных векторов. */
static const unsigned char kPi[256] =
{
252, 238, 221, 17, 207, 110, 49, 22, 251, 196, 250, 218, 35, 197, 4, 77,
......@@ -30,7 +30,7 @@ static const unsigned char kPi[256] =
89, 166, 116, 210, 230, 244, 180, 192, 209, 102, 175, 194, 57, 75, 99, 182
};
/** @brief . */
/** @brief Обратное нелинейное биективное преобразование множества двоичных векторов. */
static const unsigned char kReversePi[256] =
{
0xa5,0x2d,0x32,0x8f,0x0e,0x30,0x38,0xc0,0x54,0xe6,0x9e,0x39,0x55,0x7e,0x52,0x91,
......@@ -51,7 +51,7 @@ static const unsigned char kReversePi[256] =
0x12,0x1a,0x48,0x68,0xf5,0x81,0x8b,0xc7,0xd6,0x20,0x0a,0x08,0x00,0x4c,0xd7,0x74
};
/** @brief l */
/** @brief Коэффициенты умножения в преобразовании l */
static const unsigned char kB[16] = {148, 32, 133, 16, 194, 192, 1, 251, 1, 192, 194, 16, 133, 32, 148, 1};
int DLL_IMPORT funcX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print)
......
/** @file
* @brief ""
* @brief Объявление функций реализующих преобразования из алгоритма "Кузнечик"
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -15,153 +15,153 @@
extern "C" {
#endif
/** @brief X
/** @brief Преобразование X
*
* @param[in] a
* @param[in] b
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] a входной параметр преобразования
* @param[in] b входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print);
/** @brief S
/** @brief Преобразование S
*
* @param[in] indata
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] indata входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcS(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
/** @brief S
/** @brief Преобразование обратное к преобразованию S
*
* @param[in] indata
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] indata входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcReverseS(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
/** @brief R
/** @brief Преобразование R
*
* @param[in] indata
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] indata входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcR(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
/** @brief R
/** @brief Преобразование обратное к преобразованию R
*
* @param[in] indata
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] indata входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcReverseR(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
/** @brief L
/** @brief Преобразование L
*
* @param[in] indata
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] indata входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcL(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
/** @brief L
/** @brief Преобразование обратное к преобразованию L
*
* @param[in] indata
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] indata входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcReverseL(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
/** @brief LSX
/** @brief Преобразование LSX
*
* @param[in] a
* @param[in] b
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] a входной параметр преобразования
* @param[in] b входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcLSX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print);
/** @brief LSX
/** @brief Преобразование обратное к преобразованию LSX
*
* @param[in] a
* @param[in] b
* @param[out] outdata
* @param[in] print
* @return 0
* @return -1
* @param[in] a входной параметр преобразования
* @param[in] b входной параметр преобразования
* @param[out] outdata результат параметр преобразования
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcReverseLSX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print);
/** @brief F
/** @brief Преобразование F
*
* @param[in] inputKey
* @param[in] inputKeySecond
* @param[in] iterationConst
* @param[out] outputKey
* @param[out] outputKeySecond
* @param[in] print
* @return 0
* @return -1
* @param[in] inputKey Первый ключ из пары ключей полученной в предедущей итерации
* @param[in] inputKeySecond Второй ключ из пары ключей полученной в предедущей итерации
* @param[in] iterationConst Итерационная константа
* @param[out] outputKey Первый ключ
* @param[out] outputKeySecond Второй ключ
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcF(unsigned char* inputKey, unsigned char* inputKeySecond, unsigned char* iterationConst, unsigned char* outputKey, unsigned char* outputKeySecond, printout_byte_array print);
/** @brief
/** @brief Вычисление итерационной константы С
*
* @param[in] number
* @param[out] output
* @param[in] print
* @return 0
* @return -1
* @param[in] number номер константы
* @param[out] output итерационная константа
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT funcC(unsigned char number, unsigned char* output, printout_byte_array print);
/** @brief
/** @brief Развертка ключа
*
* @param[in] masterKey
* @param[out] keys
* @param[in] print
* @return 0
* @return -1
* @param[in] masterKey Мастер ключ
* @param[out] keys массив развернутых ключей
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT ExpandKey(unsigned char* masterKey, unsigned char* keys, printout_byte_array print);
/** @brief
/** @brief Выполнение зашифрования блока
*
* @param[in] plainText
* @param[out] chipherText
* @param[in] keys
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
* @param[in] plainText Исходный блок
* @param[out] chipherText Зашифрованный блок
* @param[in] keys Развернутые ключи
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT Encrypt_14(unsigned char* plainText, unsigned char* chipherText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
/** @brief
/** @brief Выполение расшифрования блока
*
* @param[in] chipherText
* @param[out] plainText
* @param[in] keys
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
* @param[in] chipherText Зашифрованный блок
* @param[out] plainText Расшифрованный блок
* @param[in] keys Развернутые ключи
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT Decrypt_14(unsigned char* chipherText, unsigned char* plainText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
......
/** @file
* @brief 28147-89
* @brief Реализация алгоритма 28147-89
*
* @copyright InfoTeCS. All rights reserved.
*/
#include "28147_89.h"
/** @brief int32
/** @brief Конвертирует массив байт в int32
*
* @param[in] input 4
* @return int32
* @param[in] input массив из 4 байт
* @return int32 число
*/
static unsigned int uint8ToUint32(unsigned char* input)
{
......@@ -17,10 +17,10 @@ static unsigned int uint8ToUint32(unsigned char* input)
return r;
}
/** @brief int32
/** @brief Конвертирует int32 в массив байт
*
* @param[in] input int32
* @param[out] output 4
* @param[in] input int32 число
* @param[out] output массив из 4 байт
*/
static void uint32ToUint8(unsigned int input, unsigned char* output)
{
......@@ -32,7 +32,7 @@ static void uint32ToUint8(unsigned int input, unsigned char* output)
}
/** @brief id-tc26-gost-28147-param-Z OID: 1.2.643.7.1.2.5.1.1 */
/** @brief Таблица подстановки id-tc26-gost-28147-param-Z OID: 1.2.643.7.1.2.5.1.1 */
unsigned char p[8][16] =
{
{0xc, 0x4, 0x6, 0x2, 0xa, 0x5, 0xb, 0x9, 0xe, 0x8, 0xd, 0x7, 0x0, 0x3, 0xf, 0x1},
......@@ -46,13 +46,13 @@ unsigned char p[8][16] =
};
/** @brief */
/** @brief используемый байт ключа при шифровании */
unsigned char kEncRoundKey[32] =
{
0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12, 16, 20, 24, 28, 28, 24, 20, 16, 12, 8, 4, 0
};
/** @brief */
/** @brief используемый байт ключа при расшифровании */
unsigned char kDecRoundKey[32] =
{
0, 4, 8, 12, 16, 20, 24, 28, 28, 24, 20, 16, 12, 8, 4, 0, 28, 24, 20, 16, 12, 8, 4, 0, 28, 24, 20, 16, 12, 8, 4, 0
......
/** @file
* @brief "28147-89"
* @brief Объявление функций реализующих преобразования из алгоритма "28147-89"
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -14,96 +14,96 @@
extern "C" {
#endif
/** @brief
/** @brief Функция подстановки
*
* @param[in] a
* @param[in] print
* @return
* @param[in] a входной параметр преобразования
* @param[in] print функция логирования
* @return результат преобразования
*/
unsigned int DLL_IMPORT funcT(unsigned int a, printout_uint_array print);
/** @brief g
/** @brief Преобразование g Из стандарта
*
* @param[in] a
* @param[in] k
* @param[in] print
* @return
* @param[in] a входной параметр преобразования
* @param[in] k ключ
* @param[in] print функция логирования
* @return результат преобразования
*/
unsigned int DLL_IMPORT funcG(unsigned int a, unsigned int k, printout_uint_array print);
/** @brief G
/** @brief Преобразование G Из стандарта
*
* @param[out] a1 ,
* @param[out] a0 ,
* @param[in] k
* @param[in] print
* @param[out] a1 указатель на буфер, где хранятся данные и куда будет записан результат
* @param[out] a0 указатель на буфер, где хранятся данные и куда будет записан результат
* @param[in] k ключ
* @param[in] print функция логирования
*/
void DLL_IMPORT Round(unsigned int* a1, unsigned int* a0, unsigned int k, printout_uint_array print);
/** @brief G ( 1 0 )
/** @brief Преобразование G Из стандарта ( не меняя блоки а1 и а0 местами )
*
* @param[out] a1 ,
* @param[out] a0 ,
* @param[in] k
* @param[in] print
* @param[out] a1 указатель на буфер, где хранятся данные и куда будет записан результат
* @param[out] a0 указатель на буфер, где хранятся данные и куда будет записан результат
* @param[in] k ключ
* @param[in] print функция логирования
*/
void DLL_IMPORT RoundShtrih(unsigned int *a1, unsigned int *a0, unsigned int k, printout_uint_array print);
/** @brief
/** @brief Базовое криптографическое преобразование
*
* @param[in] input -
* @param[out] output -
* @param[in] key
* @param[in] keySequence
* @param[in] print
* @return 0
* @return -1
* @param[in] input - сообщение с длиною равной длине блока данных
* @param[out] output - результат операции
* @param[in] key ключ
* @param[in] keySequence последовательность применения ключей
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT CryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, unsigned char* keySequence, printout_uint_array print);
/** @brief
/** @brief Шифруем блок данных
*
* @param[in] input -
* @param[out] output -
* @param[in] key
* @param[in] print
* @return 0
* @return -1
* @param[in] input - блок данных открытый текст
* @param[out] output - зашифрованный блок данных
* @param[in] key ключ
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT EncryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, printout_uint_array print);
/** @brief
/** @brief Расшифровываем блок данных
*
* @param[in] input -
* @param[out] output -
* @param[in] key
* @param[in] print
* @return 0
* @return -1
* @param[in] input - зашифрованный блок данных
* @param[out] output - расшифрованный блок данных
* @param[in] key ключ
* @param[in] print функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT DecryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, printout_uint_array print);
/** @brief
/** @brief Шифруем блок данных
*
* @param[in] input -
* @param[out] output -
* @param[in] key
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
* @param[in] input - блок данных открытый текст
* @param[out] output - зашифрованный блок данных
* @param[in] key ключ
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT Encrypt_89(unsigned char* input, unsigned char* output, unsigned char* key, printout_byte_array print, printout_uint_array print_uint);
/** @brief
/** @brief Расшифровываем блок данных
*
* @param[in] input -
* @param[out] output -
* @param[in] key
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
* @param[in] input - зашифрованный блок данных
* @param[out] output - расшифрованный блок данных
* @param[in] key ключ
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT Decrypt_89(unsigned char* input, unsigned char* output, unsigned char* key, printout_byte_array print, printout_uint_array print_uint);
......
......@@ -7,10 +7,10 @@ HEADERS += $$PWD/28147_14.h \
$$PWD/print_data.h \
$$PWD/table.h \
$$PWD/test_data.inc \
$$PWD/block_chipher.h
$$PWD/block_cipher.h
SOURCES += $$PWD/28147_14.c \
$$PWD/28147_89.c \
$$PWD/block_chipher.c \
$$PWD/block_cipher.c \
$$PWD/print_data.c \
$$PWD/testgost.c
/** @file
* @brief
*
* @copyright InfoTeCS. All rights reserved.
*/
#ifndef BLOCK_CHIPHER_H
#define BLOCK_CHIPHER_H
#include "dll_import.h"
#include "callback_print.h"
/** @brief ECB "" */
#define kEcb14ContextLen 0x38
/** @brief ECB 28147-89 */
#define kEcb89ContextLen 0x38
/** @brief CBC "" */
#define kCbc14ContextLen 0x60
/** @brief CBC 28147-89 */
#define kCbc89ContextLen 0x60
/** @brief CTR "" */
#define kCtr14ContextLen 0x48
/** @brief CTR 28147-89 */
#define kCtr89ContextLen 0x48
/** @brief OFB "" */
#define kOfb14ContextLen 0x60
/** @brief OFB 28147-89 */
#define kOfb89ContextLen 0x60
/** @brief CFB "" */
#define kCfb14ContextLen 0x60
/** @brief CFB 28147-89 */
#define kCfb89ContextLen 0x60
/** @brief "" */
#define kImit14ContextLen 0x88
/** @brief 28147-89 */
#define kImit89ContextLen 0x88
/** @brief "" */
#define kBlockLen14 16
/** @brief 28147-89 */
#define kBlockLen89 8
/** @brief "" */
#define kKeyLen14 32
/** @brief 28147-89 */
#define kKeyLen89 32
#ifdef __cplusplus
extern "C" {
#endif
/* *** ***
*
*
*/
/** @brief ECB ""
*
* @param[in] key
* @param[out] ctx cbc
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_ecb_14(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief ECB 28147-89
*
* @param[in] key
* @param[out] ctx cbc
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_ecb_89(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief ecb
*
* @param[in] ctx ecb
* @return 0
* @return -1
*/
void DLL_IMPORT free_ecb(void* ctx);
/** @brief CBC ""
*
* @param[in] key
* @param[out] ctx cbc
* @param[in] iv
* @param[in] ivLength
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_cbc_14(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief CBC 28147-89
*
* @param[in] key
* @param[out] ctx cbc
* @param[in] iv
* @param[in] ivLength
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_cbc_89(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief cbc
*
* @param[in] ctx cbc
* @return 0
* @return -1
*/
void DLL_IMPORT free_cbc(void* ctx);
/** @brief CTR ""
*
* @param[in] key
* @param[out] ctx ctr
* @param[in] iv
* @param[in] length
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_ctr_14(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief CTR 28147-89
*
* @param[in] key
* @param[out] ctx ctr
* @param[in] iv
* @param[in] length
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_ctr_89(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief ctr
*
* @param[in] ctx ctr
* @return 0
* @return -1
*/
void DLL_IMPORT free_ctr(void* ctx);
/** @brief OFB ""
*
* @param[in] key
* @param[out] ctx ofb
* @param[in] s S
* @param[in] iv
* @param[in] ivLength
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief OFB 28147-89
*
* @param[in] key
* @param[out] ctx ofb
* @param[in] s S
* @param[in] iv
* @param[in] ivLength
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_ofb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief ofb
*
* @param[in] ctx ofb
* @return 0
* @return -1
*/
void DLL_IMPORT free_ofb(void* ctx);
/** @brief CFB ""
*
* @param[in] key
* @param[out] ctx cfb
* @param[in] s S
* @param[in] iv
* @param[in] ivLength
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_cfb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief CFB 28147-89
*
* @param[in] key
* @param[out] ctx cfb
* @param[in] s S
* @param[in] iv
* @param[in] ivLength
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_cfb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief cfb
*
* @param[in] ctx cfb
* @return 0
* @return -1
*/
void DLL_IMPORT free_cfb(void* ctx);
/** @brief ""
*
* @param[out] ctx
* @param[in] key
* @param[in] s S
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_imit_14(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief 28147-89
*
* @param[in] key
* @param[in] s S
* @param[out] ctx
* @param[in] print
* @param[in] print_uint
* @return 0
* @return -1
*/
int DLL_IMPORT init_imit_89(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief
*
* @param[in] ctx
* @return 0
* @return -1
*/
void DLL_IMPORT free_imit(void* ctx);
/** @brief
*
* @param[in] ctx ECB
* @param[in] indata
* @param[out] outdata
* @param[in] length
* @return 0
* @return -1
*/
int DLL_IMPORT encrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief
*
* @param[in] ctx ECB
* @param[in] indata
* @param[out] outdata
* @param[in] length
* @return 0
* @return -1
*/
int DLL_IMPORT decrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief
*
* @param[in] ctx CBC
* @param[in] indata
* @param[out] outdata
* @param[in] length
* @return 0
* @return -1
*/
int DLL_IMPORT encrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief
*
* @param[in] ctx CBC
* @param[in] indata
* @param[out] outdata
* @param[in] length
* @return 0
* @return -1
*/
int DLL_IMPORT decrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief ( )
* @details ,
*
* @param[in] ctx CTR
* @param[in] indata
* @param[out] outdata
* @param[in] length
* @return 0
* @return -1
*/
int DLL_IMPORT crypt_ctr(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief
* @details ,
*
* @param[in] ctx OFB
* @param[in] indata
* @param[out] outdata
* @param[in] inlength
* @return 0
* @return -1
*/
int DLL_IMPORT crypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief
*
* @param[in] ctx OFB
* @param[in] indata
* @param[out] outdata
* @param[in] inlength
* @return 0
* @return -1
*/
int DLL_IMPORT encrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief
*
* @param[in] ctx OFB
* @param[in] indata
* @param[out] outdata
* @param[in] inlength
* @return 0
* @return -1
*/
int DLL_IMPORT decrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief
* @details ,
*
* @param[in] ctx CFB
* @param[in] indata
* @param[out] outdata
* @param[in] inlength
* @return 0
* @return -1
*/
int DLL_IMPORT encrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief
* @details ,
*
* @param[in] ctx CFB
* @param[in] indata
* @param[out] outdata
* @param[in] inlength
* @return 0
* @return -1
*/
int DLL_IMPORT decrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief
*
* @param[in] ctx
* @param[in] indata
* @param[in] length
* @return 0
* @return -1
*/
int DLL_IMPORT imit(void *ctx, unsigned char *indata, size_t length);
/** @brief
*
* @param[in] ctx
* @param[out] value
* @return 0
* @return -1
*/
int DLL_IMPORT done_imit(void *ctx, unsigned char *value);
/** @brief .
*
* @param[in] data . data .
* @param[in] length
* @param[in] blockLen
* @return
*/
size_t DLL_IMPORT padd(unsigned char *data, size_t length, size_t blockLen);
/** @brief . -1
*
* @param[in] data
* @param[in] length
* @return
*/
size_t DLL_IMPORT unpadd(unsigned char *data, size_t length);
#ifdef __cplusplus
}
#endif
#endif
/** @file
* @brief
* @brief Реализация режимов работы блочных алгоритмов
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -11,164 +11,164 @@
#include "28147_14.h"
#include "28147_89.h"
#include "block_chipher.h"
#include "block_cipher.h"
/** @brief */
/** @brief определение внутреннего ассерта */
#define INFOTECS_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
/** @brief "" */
/** @brief размер тестовых данных для алгоритма "кузнечик" */
#define textLen14 sizeof(kSeltTestGost14PlainText)/sizeof(kSeltTestGost14PlainText[0])
/** @brief 28147-89 */
/** @brief размер тестовых данных для алгоритма 28147-89 */
#define textLen89 sizeof(kSeltTestGost89PlainText)/sizeof(kSeltTestGost89PlainText[0])
/** @brief "" */
/** @brief Признак алгоритма "Кузнечик" */
const unsigned char kAlg14 = 1;
/** @brief 28147-89 */
/** @brief Признак алгоритма 28147-89 */
const unsigned char kAlg89 = 2;
/** @brief */
/** @brief указатель на функцию шифрования */
typedef int (DLL_IMPORT *pEncrypt)(unsigned char* plainText, unsigned char* chipherText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
/** @brief */
/** @brief указатель на функцию расшифрования */
typedef int (DLL_IMPORT *pDecrypt)(unsigned char* chipherText, unsigned char* plainText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
/** @brief ECB */
/** @brief Функция самотестирования режима ECB */
static int SelfTestGost14Ecb();
/** @brief ECB */
/** @brief Функция самотестирования режима ECB */
static int SelfTestGost89Ecb();
/** @brief CTR */
/** @brief Функция самотестирования режима CTR */
static int SelfTestGost14Ctr();
/** @brief CTR */
/** @brief Функция самотестирования режима CTR */
static int SelfTestGost89Ctr();
/** @brief OFB */
/** @brief Функция самотестирования режима OFB */
static int SelfTestGost14Ofb();
/** @brief OFB */
/** @brief Функция самотестирования режима OFB */
static int SelfTestGost89Ofb();
/** @brief CBC */
/** @brief Функция самотестирования режима CBC */
static int SelfTestGost14Cbc();
/** @brief CBC */
/** @brief Функция самотестирования режима CBC */
static int SelfTestGost89Cbc();
/** @brief CFB */
/** @brief Функция самотестирования режима CFB */
static int SelfTestGost14Cfb();
/** @brief CFB */
/** @brief Функция самотестирования режима CFB */
static int SelfTestGost89Cfb();
/** @brief */
/** @brief Функция самотестирования режима имитовставки */
static int SelfTestGost14Imit();
/** @brief */
/** @brief Функция самотестирования режима имитовставки */
static int SelfTestGost89Imit();
/** @brief 1 */
/** @brief Сдвиг влево на 1 бит */
static void ShifttLeftOne(unsigned char *r, size_t length);
/** @brief ECB */
/** @brief Контекст ECB */
typedef struct
{
unsigned char Alg; /**< */
unsigned char* Keys; /**< */
unsigned int BlockLen; /**< */
printout_byte_array PrintByteArray; /**< */
printout_uint_array PrintUIntArray; /**< */
pEncrypt EncryptFunc; /**< */
pDecrypt DecryptFunc; /**< */
unsigned char Alg; /**< идентификатор алгоритма */
unsigned char* Keys; /**< ключ */
unsigned int BlockLen; /**< размер блока */
printout_byte_array PrintByteArray; /**< функция логирования */
printout_uint_array PrintUIntArray; /**< функция логирования */
pEncrypt EncryptFunc; /**< функция шифрования */
pDecrypt DecryptFunc; /**< функция расшифрования */
} Context_ecb;
/** @brief CTR */
/** @brief Контекст CTR */
typedef struct
{
unsigned char Alg; /**< */
unsigned char* Counter; /**< */
unsigned char* Keys; /**< */
size_t S; /**< */
size_t BlockLen; /**< */
printout_byte_array PrintByteArray; /**< */
printout_uint_array PrintUIntArray; /**< */
pEncrypt EncryptFunc; /**< */
unsigned char *tmpblock; /**< */
unsigned char Alg; /**< идентификатор алгоритма */
unsigned char* Counter; /**< счетчик */
unsigned char* Keys; /**< ключ */
size_t S; /**< размер синхропосылки */
size_t BlockLen; /**< размер блока */
printout_byte_array PrintByteArray; /**< функция логирования */
printout_uint_array PrintUIntArray; /**< функция логирования */
pEncrypt EncryptFunc; /**< функция шифрования */
unsigned char *tmpblock; /**< временный блок */
} Context_ctr;
/** @brief OFB */
/** @brief Контекст OFB */
typedef struct
{
unsigned char Alg; /**< */
unsigned char* IV; /**< */
unsigned char* Keys; /**< */
size_t M; /**< */
size_t S; /**< S */
size_t BlockLen; /**< */
printout_byte_array PrintByteArray; /**< */
printout_uint_array PrintUIntArray; /**< */
pEncrypt EncryptFunc; /**< */
pDecrypt DecryptFunc; /**< */
unsigned char *tmpblock; /**< */
unsigned char* nextIV; /**< */
unsigned char Alg; /**< идентификатор алгоритма */
unsigned char* IV; /**< синхропосылка */
unsigned char* Keys; /**< ключ */
size_t M; /**< размер синхрпосылки */
size_t S; /**< параметр S */
size_t BlockLen; /**< размер блока */
printout_byte_array PrintByteArray; /**< функция логирования */
printout_uint_array PrintUIntArray; /**< функция логирования */
pEncrypt EncryptFunc; /**< функция шифрования */
pDecrypt DecryptFunc; /**< функция расшифрования */
unsigned char *tmpblock; /**< временный блок */
unsigned char* nextIV; /**< синхропосылка для следующего блока */
} Context_ofb;
/** @brief CFB */
/** @brief Контекст CFB */
typedef struct
{
unsigned char Alg; /**< */
unsigned char* IV; /**< */
unsigned char* Keys; /**< */
size_t M; /**< */
size_t S; /**< S */
size_t BlockLen; /**< */
printout_byte_array PrintByteArray; /**< */
printout_uint_array PrintUIntArray; /**< */
pEncrypt EncryptFunc; /**< */
pDecrypt DecryptFunc; /**< */
unsigned char *tmpblock; /**< */
unsigned char* nextIV; /**< */
unsigned char Alg; /**< идентификатор алгоритма */
unsigned char* IV; /**< синхропосылка */
unsigned char* Keys; /**< ключ */
size_t M; /**< размер синхрпосылки */
size_t S; /**< параметр S */
size_t BlockLen; /**< размер блока */
printout_byte_array PrintByteArray; /**< функция логирования */
printout_uint_array PrintUIntArray; /**< функция логирования */
pEncrypt EncryptFunc; /**< функция шифрования */
pDecrypt DecryptFunc; /**< функция расшифрования */
unsigned char *tmpblock; /**< временный блок */
unsigned char* nextIV; /**< синхропосылка для следующего блока */
} Context_cfb;
/** @brief CBC */
/** @brief Контекст CBC */
typedef struct
{
unsigned char Alg; /**< */
unsigned char* IV; /**< */
unsigned char* Keys; /**< */
size_t BlockLen; /**< */
size_t M; /**< */
printout_byte_array PrintByteArray; /**< */
printout_uint_array PrintUIntArray; /**< */
pEncrypt EncryptFunc; /**< */
pDecrypt DecryptFunc; /**< */
unsigned char* nextIV; /**< */
unsigned char* tempIV; /**< */
unsigned char *tmpblock; /**< */
unsigned char Alg; /**< идентификатор алгоритма */
unsigned char* IV; /**< синхропосылка */
unsigned char* Keys; /**< ключ */
size_t BlockLen; /**< размер блока */
size_t M; /**< размер синхрпосылки */
printout_byte_array PrintByteArray; /**< функция логирования */
printout_uint_array PrintUIntArray; /**< функция логирования */
pEncrypt EncryptFunc; /**< функция шифрования */
pDecrypt DecryptFunc; /**< функция расшифрования */
unsigned char* nextIV; /**< синхропосылка для следующего блока */
unsigned char* tempIV; /**< для временного хранения значения синхропосылки */
unsigned char *tmpblock; /**< временный блок */
} Context_cbc;
/** @brief */
/** @brief Контекст имитовставки */
typedef struct
{
unsigned char Alg; /**< */
unsigned char* Keys; /**< */
unsigned char* K1; /**< K1 */
unsigned char* K2; /**< K2 */
unsigned char* B; /**< B */
unsigned char* R; /**< R */
unsigned char* C; /**< C */
unsigned char* LastBlock; /**< */
size_t S; /**< S */
size_t BlockLen; /**< */
size_t LastBlockSize; /**< */
int isFistBlock; /**< */
printout_byte_array PrintByteArray; /**< */
printout_uint_array PrintUIntArray; /**< */
pEncrypt EncryptFunc; /**< */
unsigned char *tmpblock; /**< */
unsigned char *resimit; /**< */
unsigned char Alg; /**< идентификатор алгоритма */
unsigned char* Keys; /**< ключ */
unsigned char* K1; /**< вспомогательный параметр K1 */
unsigned char* K2; /**< вспомогательный параметр K2 */
unsigned char* B; /**< вспомогательный параметр B */
unsigned char* R; /**< вспомогательный параметр R */
unsigned char* C; /**< вспомогательный параметр C */
unsigned char* LastBlock; /**< предыдущий блок */
size_t S; /**< параметр S */
size_t BlockLen; /**< размер блока */
size_t LastBlockSize; /**< размер предыдущего блока */
int isFistBlock; /**< идентификатор первого блока */
printout_byte_array PrintByteArray; /**< функция логирования */
printout_uint_array PrintUIntArray; /**< функция логирования */
pEncrypt EncryptFunc; /**< функция шифрования */
unsigned char *tmpblock; /**< временный блок */
unsigned char *resimit; /**< имитовставка */
} Context_imit;
static int init_ecb_14_impl(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint)
......@@ -535,7 +535,7 @@ static int init_ofb_14_impl(unsigned char *key, void *ctx, size_t s, unsigned ch
return 0;
}
int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint)
int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, const unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint)
{
if(SelfTestGost14Ofb())
return -1;
......@@ -1331,7 +1331,7 @@ static void ShifttLeftOne(unsigned char *r, size_t length)
r[length -1] &= 0xfe;
}
int DLL_IMPORT imit(void *ctx, unsigned char *indata, size_t length)
int DLL_IMPORT imit(void *ctx, const unsigned char *indata, size_t length)
{
Context_imit* context;
size_t i, j;
......
/** @file
* @brief Объявление функций реализующих режимы работы блочных алгоритмов
*
* @copyright InfoTeCS. All rights reserved.
*/
#ifndef BLOCK_CHIPHER_H
#define BLOCK_CHIPHER_H
#include "dll_import.h"
#include "callback_print.h"
/** @brief Размер контекста для режима шифрования ECB алгоритма "кузнечик" */
#define kEcb14ContextLen 0x38
/** @brief Размер контекста для режима шифрования ECB алгоритма 28147-89 */
#define kEcb89ContextLen 0x38
/** @brief Размер контекста для режима шифрования CBC алгоритма "кузнечик" */
#define kCbc14ContextLen 0x60
/** @brief Размер контекста для режима шифрования CBC алгоритма 28147-89 */
#define kCbc89ContextLen 0x60
/** @brief Размер контекста для режима шифрования CTR алгоритма "кузнечик" */
#define kCtr14ContextLen 0x48
/** @brief Размер контекста для режима шифрования CTR алгоритма 28147-89 */
#define kCtr89ContextLen 0x48
/** @brief Размер контекста для режима шифрования OFB алгоритма "кузнечик" */
#define kOfb14ContextLen 0x60
/** @brief Размер контекста для режима шифрования OFB алгоритма 28147-89 */
#define kOfb89ContextLen 0x60
/** @brief Размер контекста для режима шифрования CFB алгоритма "кузнечик" */
#define kCfb14ContextLen 0x60
/** @brief Размер контекста для режима шифрования CFB алгоритма 28147-89 */
#define kCfb89ContextLen 0x60
/** @brief Размер контекста для режима формирования имитовставки алгоритма "кузнечик" */
#define kImit14ContextLen 0x88
/** @brief Размер контекста для режима формирования имитовставки алгоритма 28147-89 */
#define kImit89ContextLen 0x88
/** @brief Размер блока алгоритма "кузнечик" */
#define kBlockLen14 16
/** @brief Размер блока алгоритма 28147-89 */
#define kBlockLen89 8
/** @brief Размер ключа алгоритма 28147-89 */
#define kKeyLen89 32
#ifdef __cplusplus
extern "C" {
#endif
/* *** Режимы шифрования ***
* Режимы шифрования работают с использованием базового
* криптографического преобразования
*/
/** @brief Инициализация контекста шифрования в режиме ECB для алгоритма "кузнечик"
*
* @param[in] key ключ
* @param[out] ctx контекст cbc
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_ecb_14(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief Инициализация контекста шифрования в режиме ECB для алгоритма 28147-89
*
* @param[in] key ключ
* @param[out] ctx контекст cbc
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_ecb_89(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief Удаление контекста ecb
*
* @param[in] ctx контекст ecb
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
void DLL_IMPORT free_ecb(void* ctx);
/** @brief Инициализация контекста шифрования в режиме CBC для алгоритма "кузнечик"
*
* @param[in] key ключ
* @param[out] ctx контекст cbc
* @param[in] iv синхропосылка
* @param[in] ivLength длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_cbc_14(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief Инициализация контекста шифрования в режиме CBC для алгоритма 28147-89
*
* @param[in] key ключ
* @param[out] ctx контекст cbc
* @param[in] iv синхропосылка
* @param[in] ivLength длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_cbc_89(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief Удаление контекста cbc
*
* @param[in] ctx контекст cbc
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
void DLL_IMPORT free_cbc(void* ctx);
/** @brief Инициализация контекста шифрования в режиме CTR для алгоритма "кузнечик"
*
* @param[in] key ключ
* @param[out] ctx контекст ctr
* @param[in] iv синхропосылка
* @param[in] length длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_ctr_14(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief Инициализация контекста шифрования в режиме CTR для алгоритма 28147-89
*
* @param[in] key ключ
* @param[out] ctx контекст ctr
* @param[in] iv синхропосылка
* @param[in] length длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_ctr_89(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief Удаление контекста ctr
*
* @param[in] ctx контекст ctr
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
void DLL_IMPORT free_ctr(void* ctx);
/** @brief Инициализация контекста шифрования в режиме OFB для алгоритма "кузнечик"
*
* @param[in] key ключ
* @param[out] ctx контекст ofb
* @param[in] s параметр S
* @param[in] iv синхропосылка
* @param[in] ivLength длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, const unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief Инициализация контекста шифрования в режиме OFB для алгоритма 28147-89
*
* @param[in] key ключ
* @param[out] ctx контекст ofb
* @param[in] s параметр S
* @param[in] iv синхропосылка
* @param[in] ivLength длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_ofb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief Удаление контекста ofb
*
* @param[in] ctx контекст ofb
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
void DLL_IMPORT free_ofb(void* ctx);
/** @brief Инициализация контекста шифрования в режиме CFB для алгоритма "кузнечик"
*
* @param[in] key ключ
* @param[out] ctx контекст cfb
* @param[in] s параметр S
* @param[in] iv синхропосылка
* @param[in] ivLength длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_cfb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief Инициализация контекста шифрования в режиме CFB для алгоритма 28147-89
*
* @param[in] key ключ
* @param[out] ctx контекст cfb
* @param[in] s параметр S
* @param[in] iv синхропосылка
* @param[in] ivLength длина синхропосылки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_cfb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
/** @brief Удаление контекста cfb
*
* @param[in] ctx контекст cfb
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
void DLL_IMPORT free_cfb(void* ctx);
/** @brief Инициализация контекста имтовставки для алгоритма "кузнечик"
*
* @param[out] ctx контекст имитовставки
* @param[in] key ключ
* @param[in] s параметр S
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_imit_14(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief Инициализация контекста имтовставки для алгоритма 28147-89
*
* @param[in] key ключ
* @param[in] s параметр S
* @param[out] ctx контекст имитовставки
* @param[in] print функция логирования
* @param[in] print_uint функция логирования
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT init_imit_89(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
/** @brief Удаление контекста имитовставки
*
* @param[in] ctx контекст имитовставки
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
void DLL_IMPORT free_imit(void* ctx);
/** @brief Выполнение зашифрования информации в режиме простой замены для данных кратных размеру блока
*
* @param[in] ctx контекст ECB
* @param[in] indata открытый текст
* @param[out] outdata зашифрованный текст
* @param[in] length длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT encrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief Выполнение расшифрования информации в режиме простой замены для данных кратных размеру блока
*
* @param[in] ctx контекст ECB
* @param[in] indata открытый текст
* @param[out] outdata зашифрованный текст
* @param[in] length длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT decrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief Выполнение зашифрования информации в режиме простой замены с зацеплением для данных кратных размеру блока
*
* @param[in] ctx контекст CBC
* @param[in] indata открытый текст
* @param[out] outdata зашифрованный текст
* @param[in] length длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT encrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief Выполнение рсшифрования информации в режиме простой замены с зацеплением для данных кратных размеру блока
*
* @param[in] ctx контекст CBC
* @param[in] indata зашифрованный текст
* @param[out] outdata расшифрованный текст
* @param[in] length длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT decrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief Выполнение шифрования (зашифрования или расшифрования) в режиме гаммирования
* @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
*
* @param[in] ctx контекст CTR
* @param[in] indata входное сообщение
* @param[out] outdata результат
* @param[in] length длина сообщения
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT crypt_ctr(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
/** @brief Выполнение шаговой шифрования информации в режиме гаммирования с обратной связью
* @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
*
* @param[in] ctx контекст OFB
* @param[in] indata входной блок
* @param[out] outdata результат преобразования
* @param[in] inlength длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT crypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief Выполнение зашифрования информации в режиме гаммирования с обратной связью
*
* @param[in] ctx контекст OFB
* @param[in] indata открытый текст
* @param[out] outdata зашифрованный текст
* @param[in] inlength длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT encrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief Выполнение расшифрования информации в режиме гаммирования с обратной связью
*
* @param[in] ctx контекст OFB
* @param[in] indata зашифрованный текст
* @param[out] outdata расшифрованный текст
* @param[in] inlength длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT decrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief Выполнение зашифрования информации в режиме гаммирования с обратной связью по шифртексту
* @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
*
* @param[in] ctx контекст CFB
* @param[in] indata открытый текст
* @param[out] outdata зашифрованный текст
* @param[in] inlength длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT encrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief Выполнение расшифрования информации в режиме гаммирования с обратной связью по шифртексту
* @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
*
* @param[in] ctx контекст CFB
* @param[in] indata зашифрованный текст
* @param[out] outdata расшифрованный текст
* @param[in] inlength длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT decrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
/** @brief Выполнение вычисления имитовставки по данным кратным размеру блока
*
* @param[in] ctx контекст имитовставки
* @param[in] indata открытый текст
* @param[in] length длина текста
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT imit(void *ctx, const unsigned char *indata, size_t length);
/** @brief Завершение выроботки имитовставки
*
* @param[in] ctx контекст имитовставки
* @param[out] value
* @return 0 если все преобразование прошло успешно
* @return -1 если произошла ошибка
*/
int DLL_IMPORT done_imit(void *ctx, unsigned char *value);
/** @brief Дополнение данных до размера блока.
*
* @param[in] data сообщение. Память под данные data должна быть выделена достаточная для дополнения.
* @param[in] length размер сообщения
* @param[in] blockLen длина блока
* @return размер сообщения
*/
size_t DLL_IMPORT padd(unsigned char *data, size_t length, size_t blockLen);
/** @brief Удаление дополненных данных. При ошибках возвращается значение -1
*
* @param[in] data сообщение
* @param[in] length размер сообщения
* @return размер сообщения
*/
size_t DLL_IMPORT unpadd(unsigned char *data, size_t length);
#ifdef __cplusplus
}
#endif
#endif
/** @file
* @brief callback
* @brief Объявление callback функций реализующих вывод информации
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -9,10 +9,10 @@
#include "dll_import.h"
/** @brief callback byte */
/** @brief callback для вывода массива byte */
typedef void (DLL_IMPORT *printout_byte_array)(const char* text, unsigned char* value, unsigned int valueSize);
/** @brief callback unsigned int32 */
/** @brief callback для вывода массива unsigned int32 */
typedef void (DLL_IMPORT *printout_uint_array)(const char* text, unsigned int* value, unsigned int valueSize);
#endif
/** @file
* @brief ""
* @brief Объявление функций реализующих преобразования из алгоритма "Кузнечик"
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -10,7 +10,7 @@
#ifdef WIN32
#define DLL_IMPORT __stdcall
#define DLL_IMPORT __stdcall//__fastcall//
#else
#define DLL_IMPORT
#endif
......
/** @file
* @brief
* @brief Реализация функций вывода информации на экран
*
* @copyright InfoTeCS. All rights reserved.
*/
......
/** @file
* @brief
* @brief Объявление функций вывода информации на экран
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -9,68 +9,68 @@
#include "dll_import.h"
/** @brief */
/** @brief ширина выводимой строки в символах */
#define LINE_WIDTH 60
/** @brief */
/** @brief длина табуляции в символах */
#define TAB_WIDTH 4
/** @brief
/** @brief Выводит результаты теста
*
* @param[in] caption
* @param[in] result
* @param[in] caption заголовок теста
* @param[in] result результат теста
*/
int PrintTest(const char* caption, int result);
/** @brief */
/** @brief Выводит символ */
void PrintCharSingle(char c);
/** @brief c count */
/** @brief Выводит повторяющий символ c count раз */
void PrintChar(char c, size_t count);
/** @brief */
/** @brief Выводит строку заканчивающуюся нулем */
void PrintStr(const char* s);
/** @brief */
/** @brief Выводит строку заканчивающуюся нулем дополняя ее пробелами до заданнной ширины */
void PrintStrAlign(const char* s, size_t width);
/** @brief */
/** @brief Выводит строку заканчивающуюся нулем и переводит коретку на следующую строку */
void PrintLine(const char* line);
/** @brief */
/** @brief Переводит коретку на следующую строку */
void PrintEmptyLine();
/** @brief */
/** @brief Выводит строку смещяя начало строки в право на заданное количество позиций */
void PrintLineLeft(const char* label);
/** @brief */
/** @brief Выводит строку разделитель */
void PrintSplitLine();
/** @brief , */
/** @brief Выводит разделитель, строку и переводит коретку на следующую строку */
void PrintLabel(const char* label);
/** @brief HEX */
/** @brief Выводит один байт в HEX представлении */
void PrintHex(unsigned char value);
/** @brief HEX */
/** @brief Выводит массив байт в HEX представлении */
void PrintHexArray(unsigned char* value, size_t size);
/** @brief int32 HEX */
/** @brief Выводит int32 число в HEX представлении */
void PrintUInt32(unsigned int d);
/** @brief */
/** @brief Выводит блок данных */
void PrintBlock(const char* label, unsigned char* value, size_t valueSize, size_t blockSize);
/** @brief */
/** @brief Выводит блок данных */
void PrintBlockInt(const char* label, unsigned int value);
/** @brief */
/** @brief Выводит блок данных */
void PrintBlockLeft(const char* label, unsigned int value);
/** @brief callback byte */
/** @brief callback для вывода массива byte */
void DLL_IMPORT print_array(const char* label, unsigned char* value, unsigned int valueSize);
/** @brief callback unsigned int32 */
/** @brief callback для вывода массива unsigned int32 */
void DLL_IMPORT print_uint_array(const char* label, unsigned int* value, unsigned int valueSize);
#endif
#ifndef TABLE_H
#define TABLE_H
 
/** @brief */
/** @brief таблица для умножения */
static const unsigned char multTable[] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
......
/*----------------------------------------------------------------------
*
* тестовые значения для алгоритма кузнечик из стандарта
*/
/* S */
/* тестовые значения преобразования S */
unsigned char kSData[5][kBlockLen14] =
{
{0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00},
......@@ -12,7 +12,7 @@ unsigned char kSData[5][kBlockLen14] =
{0x23, 0xae, 0x65, 0x63, 0x3f, 0x84, 0x2d, 0x29, 0xc5, 0xdf, 0x52, 0x9c, 0x13, 0xf5, 0xac, 0xda}
};
/* R */
/* тестовые значения преобразования R */
unsigned char kRData[5][kBlockLen14] =
{
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00},
......@@ -22,7 +22,7 @@ unsigned char kRData[5][kBlockLen14] =
{0x0d, 0x64, 0xa5, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
};
/* L */
/* тестовые значения преобразования L */
unsigned char kLData[5][kBlockLen14] =
{
{0x64, 0xa5, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
......@@ -32,7 +32,7 @@ unsigned char kLData[5][kBlockLen14] =
{0xe6, 0xa8, 0x09, 0x4f, 0xee, 0x0a, 0xa2, 0x04, 0xfd, 0x97, 0xbc, 0xb0, 0xb4, 0x4b, 0x85, 0x80}
};
/* */
/* тестовые значения развернутых ключей */
static const unsigned char kKData[10][kBlockLen14] =
{
{0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77},
......@@ -47,34 +47,34 @@ static const unsigned char kKData[10][kBlockLen14] =
{0x72, 0xe9, 0xdd, 0x74, 0x16, 0xbc, 0xf4, 0x5b, 0x75, 0x5d, 0xba, 0xa8, 0x8e, 0x4a, 0x40, 0x43},
};
/* - */
/* тестовые значения мастер-ключа */
unsigned char kMasterKeyData[32] =
{
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,0x77,
0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
};
/* */
/* значение открытого текста */
unsigned char kPlainTextData[] =
{
0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88
};
/* */
/* значение шифротекста */
unsigned char kChipherTextData[] =
{
0x7f, 0x67, 0x9d, 0x90, 0xbe, 0xbc, 0x24, 0x30, 0x5a, 0x46, 0x8d, 0x42, 0xb9, 0xd4, 0xed, 0xcd
};
/* L */
/* тестовые значения обратного преобразования L */
unsigned char kReverseLData[2][kBlockLen14] =
{
{0x0d, 0x8e, 0x40, 0xe4, 0xa8, 0x00, 0xd0, 0x6b, 0x2f, 0x1b, 0x37, 0xea, 0x37, 0x9e, 0xad, 0x8e},
{0x8a, 0x6b, 0x93, 0x0a, 0x52, 0x21, 0x1b, 0x45, 0xc5, 0xba, 0xa4, 0x3f, 0xf8, 0xb9, 0x13, 0x19},
};
/* LSX */
/* тестовые значения обратного преобразования LSX */
unsigned char kReverseLSXData[10][kBlockLen14] =
{
{0x8a, 0x6b, 0x93, 0x0a, 0x52, 0x21, 0x1b, 0x45, 0xc5, 0xba, 0xa4, 0x3f, 0xf8, 0xb9, 0x13, 0x19},
......@@ -184,7 +184,7 @@ unsigned char kMasterKeyGost89[] =
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
};
/* 89 */
/* тестовые значения из стандарты для алгоритма 89го года */
unsigned char kGost89StandartPlainText[] =
{
0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
......@@ -195,13 +195,13 @@ unsigned char kGost89StandartEncrText[] =
0x4e, 0xe9, 0x01, 0xe5, 0xc2, 0xd8, 0xca, 0x3d
};
/* t, */
/* тестовые значения для преобразования t, описанного в стандарте */
unsigned int kTData[5] =
{
0xfdb97531, 0x2a196f34, 0xebd9f03a, 0xb039bb3d, 0x68695433
};
/* g, */
/* тестовые значения для преобразования g, описанного в стандарте */
unsigned int kgData[4][3] =
{
{0x87654321, 0xfedcba98, 0xfdcbc20c},
......
/** @file
* @brief "" 28147-89.
* @brief Реализация функций тестирования алгоритмов "кузнечик" и 28147-89. А также режимов работы блочных шифров
*
* @copyright InfoTeCS. All rights reserved.
*/
......@@ -7,18 +7,18 @@
#include <memory.h>
#include "28147_14.h"
#include "block_chipher.h"
#include "block_cipher.h"
#include "28147_89.h"
#include "test_data.inc"
#include "print_data.h"
/** @brief "" */
/** @brief размер тестовых данных для алгоритма "кузнечик" */
#define textLen14 sizeof(kGost14PlainText)
/** @brief "28147-89" */
/** @brief размер тестовых данных для алгоритма "28147-89" */
#define textLen89 sizeof(kGost89PlaintText)
/** @brief S "" */
/** @brief тестирование преобразования S из алгоритма "кузнечик" */
int testS()
{
unsigned char tmp[kBlockLen14];
......@@ -45,7 +45,7 @@ int testS()
return 0;
}
/** @brief R "" */
/** @brief тестирование преобразования R из алгоритма "кузнечик" */
int testR()
{
unsigned char tmp[kBlockLen14];
......@@ -73,7 +73,7 @@ int testR()
return 0;
}
/** @brief L "" */
/** @brief тестирование преобразования L из алгоритма "кузнечик" */
int testL()
{
unsigned char tmp[kBlockLen14];
......@@ -100,7 +100,7 @@ int testL()
return 0;
}
/** @brief "" */
/** @brief тестирование разворачивания ключа из алгоритма "кузнечик" */
int testExpandKey()
{
const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]);
......@@ -128,7 +128,7 @@ int testExpandKey()
return 0;
}
/** @brief "" */
/** @brief тестирование шифрования по алгоритму "кузнечик" */
int testEncrypt()
{
const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]);
......@@ -159,7 +159,7 @@ int testEncrypt()
return 0;
}
/** @brief "" */
/** @brief тестирование расшифрования по алгоритму "кузнечик" */
int testDecrypt()
{
const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]);
......@@ -192,7 +192,7 @@ int testDecrypt()
return 0;
}
/** @brief ecb "" */
/** @brief тестирование шифроавание в режиме ecb по алгоритму "кузнечик" */
int gost14_ECB_test()
{
unsigned char ctx[kEcb14ContextLen];
......@@ -244,7 +244,7 @@ int gost14_ECB_test()
return 0;
}
/** @brief ctr "" */
/** @brief тестирование режима ctr алгоритма "кузнечик" */
int gost14_CTR_test()
{
const size_t svLen = sizeof(kGost14CtrSV);
......@@ -276,7 +276,7 @@ int gost14_CTR_test()
return memcmp(outText, kGost14CtrC, textLen14);
}
/** @brief ofb "" */
/** @brief тестирование режима ofb алгоритма "кузнечик" */
int gost14_OFB_test()
{
const size_t svLen = sizeof(kGost14OfbSV);
......@@ -308,7 +308,7 @@ int gost14_OFB_test()
return memcmp(outText, kGost14OfbC, textLen14);
}
/** @brief cbc "" */
/** @brief тестирование режима cbc алгоритма "кузнечик" */
int gost14_CBC_test()
{
const size_t svLen = sizeof(kGost14CbcSV);
......@@ -363,7 +363,7 @@ int gost14_CBC_test()
return memcmp(outText, kGost14CbcC, textLen14);
}
/** @brief cfb "" */
/** @brief тестирование режима cfb алгоритма "кузнечик" */
int gost14_CFB_test()
{
const size_t svLen = sizeof(kGost14CfbSV);
......@@ -421,7 +421,7 @@ int gost14_CFB_test()
return 0;
}
/** @brief "" */
/** @brief тестирование режима имитовставки алгоритма "кузнечик" */
int gost14_imita_test()
{
const size_t imitLen = sizeof(kGost14ImitS);
......@@ -450,7 +450,7 @@ int gost14_imita_test()
return memcmp(outText, kGost14ImitS, imitLen);
}
/** @brief ecb 28147-89 */
/** @brief тестирование режима ecb алгоритма 28147-89 */
int gost89_ECB_test()
{
unsigned char ctx[kEcb89ContextLen];
......@@ -493,7 +493,7 @@ int gost89_ECB_test()
return 0;
}
/** @brief ctr 28147-89 */
/** @brief тестирование режима ctr алгоритма 28147-89 */
int gost89_CTR_test()
{
const size_t SvLen = sizeof(kGost89CtrSV);
......@@ -525,7 +525,7 @@ int gost89_CTR_test()
return memcmp(outText, kGost89CtrC, textLen89);
}
/** @brief ofb 28147-89 */
/** @brief тестирование режима ofb алгоритма 28147-89 */
int gost89_OFB_test()
{
const size_t SvLen = sizeof(kGost89OfbSV);
......@@ -557,7 +557,7 @@ int gost89_OFB_test()
return memcmp(outText, kGost89OfbC, textLen89);
}
/** @brief cbc 28147-89 */
/** @brief тестирование режима cbc алгоритма 28147-89 */
int gost89_CBC_test()
{
const size_t SvLen = sizeof(kGost89CbcSV);
......@@ -601,7 +601,7 @@ int gost89_CBC_test()
return memcmp(outText, kGost89CbcC, textLen89);
}
/** @brief 28147-89 */
/** @brief Тестирование криптографического преобразования алгоритма 28147-89 */
int standart_89_encr_test()
{
const size_t textLen = sizeof(kGost89StandartPlainText);
......@@ -647,7 +647,7 @@ int standart_89_encr_test()
return 0;
}
/** @brief cfb 28147-89 */
/** @brief тестирование режима cfb алгоритма 28147-89 */
int gost89_CFB_test()
{
const size_t SvLen = sizeof(kGost89CfbSV);
......@@ -694,7 +694,7 @@ int gost89_CFB_test()
return 0;
}
#include<stdio.h>
/** @brief 28147-89 */
/** @brief тестирование режима имтовставки алгоритма 28147-89 */
int gost89_imita_test()
{
const size_t imitLen = sizeof(kGost89ImitS);
......@@ -726,7 +726,7 @@ int gost89_imita_test()
return memcmp(outText, kGost89ImitS, imitLen);
}
/** @brief */
/** @brief тестирование дополнения сообщения */
int testPadding()
{
const size_t len = sizeof(kPaddingText)/sizeof(kPaddingText[0]);
......@@ -761,7 +761,7 @@ int testPadding()
return 0;
}
/** @brief */
/** @brief тестирование снятия дополнения сообщения */
int testCut()
{
size_t rLen, rLen2;
......@@ -798,7 +798,7 @@ int testCut()
return 0;
}
/** @brief t 28147-89 */
/** @brief Тестирование преобразования t алгоритма 28147-89 */
int testFuncT()
{
int i;
......@@ -822,7 +822,7 @@ int testFuncT()
return 0;
}
/** @brief g 28147-89 */
/** @brief Тестирование преобразования g алгоритма 28147-89 */
int testG()
{
int i;
......@@ -847,7 +847,7 @@ int testG()
return 0;
}
/** @brief */
/** @brief точка входа */
int main_gost_test()
{
int testRes = 0;
......