bee2-rs 0.2.3

Bindings for cryptographic library Bee2
Documentation
/*
*******************************************************************************
\file safe.h
\brief Safe (regular) calculations
\project bee2 [cryptographic library]
\created 2013.10.07
\version 2025.04.25
\copyright The Bee2 authors
\license Licensed under the Apache License, Version 2.0 (see LICENSE.txt).
*******************************************************************************
*/

/*!
*******************************************************************************
\file safe.h
\brief Регулярные вычисления
*******************************************************************************
*/

#ifndef __BEE2_SAFE_H
#define __BEE2_SAFE_H

#ifdef __cplusplus
extern "C" {
#endif


/*!
*******************************************************************************
\file safe.h

Если в криптографических программах имеются условные переходы и условия этих 
переходов определяются обрабатываемыми данными (но не их размерностями), 
то эти программы подвержены атакам, основанным на замерах времени или питания.
Даже если условных переходов нет, флуктуации времени выполнения могут быть 
индуцированы различными задержками при загрузке данных из массивов в связи с
логикой работы кэш-памяти современных процессоров.

Регулярные вычисления -- это "равномерные" вычисления, всегда одни и те же 
при обработке различных данных определенных размерностей. 

Комментарии о регулярности даются в окружении \\safe. В этом окружении 
указываются источники нерегулярности и причины, по которым регулярность 
подерржать невозмножно / нецелесообразно:
-	условные переходы (условия определяются входными данными);
-	цикл с переменным числом шагов (условие выхода из цикла определяется 
	входными данными);
-	нерегулярные композиционные блоки (например, вызываемые функции);
-	обрабатываемыt данные не могут быть секретными;
-	логика работы функции противоречит регулярности (например, функция
	рассчитывает характеристики данных).
.

Функция f() может быть представлена в двух редакциях: регулярной и ускоренной 
нерегулярной. Имена редакциям назначаются с помощью макросов SAFE и FAST 
соответственно: если директива SAFE_FAST не включена, то
	SAFE(f) == f && FAST(f) == f_fast,
если включена, то
	SAFE(f) == f_safe && FAST(f) == f.
Базовое имя f всегда поддержано и является именем по умолчанию.

Директива SAFE_FAST дополнительно используется для нерегулярного ускорения обычных
(одноредакционных) функций. Основное назначение директивы -- анализ падения 
производительности при регуляризации. Директиву следует включать только тогда, 
когда регулярность библиотеки не имеет значения.

\warning Директива включена вплоть до завершения регуляризации bee2.

\remark Длины строк, размерности массивов не считаются критическими данными.

\remark Флуктуации при загрузке данных из массивов пока не считаются факторами
нерегулярности.

\remark Отладочные версии заведомо нерегулярны.
*******************************************************************************
*/

#ifdef SAFE_FAST
	#define SAFE(tag) tag##_safe
	#define FAST(tag) tag
#else
	#define SAFE(tag) tag
	#define FAST(tag) tag##_fast
#endif

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* __BEE2_SAFE_H */