1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
/*
*******************************************************************************
\file err.h
\brief Errors
\project bee2 [cryptographic library]
\created 2012.07.09
\version 2025.04.18
\copyright The Bee2 authors
\license Licensed under the Apache License, Version 2.0 (see LICENSE.txt).
*******************************************************************************
*/
/*!
*******************************************************************************
\file err.h
\brief Ошибки
*******************************************************************************
*/
#ifndef __BEE2_ERR_H
#define __BEE2_ERR_H
#include "bee2/defs.h"
#ifdef __cplusplus
extern "C" {
#endif
/*!
*******************************************************************************
\file err.h
Обработка ошибок может быть упрощена с помощью макросов ERR_CALL_XXX.
*******************************************************************************
*/
/*! brief Сообщение об ошибке
Формируется строка, которая содержит сообщение об ошибке с кодом code.
\return Строка с сообщением об ошибке, или 0, если ошибка нераспознана.
*/
const char* errMsg(
err_t code /*!< [in] код ошибки */
);
/*
*******************************************************************************
Sys
*******************************************************************************
*/
#define _ERR_REG(err) ((err_t)(err))
/* нераспознанная системная ошибка */
#define ERR_SYS _ERR_REG(101)
/* некорректное устройство */
#define ERR_BAD_UNIT _ERR_REG(102)
/* некорректный файл */
#define ERR_BAD_FILE _ERR_REG(103)
/* некорректный таймер */
#define ERR_BAD_TIMER _ERR_REG(104)
/* некорректная переменная окружения */
#define ERR_BAD_ENV _ERR_REG(105)
/* некорректная функция */
#define ERR_BAD_FUNCTION _ERR_REG(106)
/* некорректная команда */
#define ERR_BAD_COMMAND _ERR_REG(107)
/* некорректная длина */
#define ERR_BAD_LENGTH _ERR_REG(108)
/* некорректные входные данные */
#define ERR_BAD_INPUT _ERR_REG(109)
/* не хватает памяти */
#define ERR_OUTOFMEMORY _ERR_REG(110)
/* переполнение */
#define ERR_OVERFLOW _ERR_REG(111)
/* объект не найден */
#define ERR_NOT_FOUND _ERR_REG(112)
/* объект уже существует */
#define ERR_ALREADY_EXISTS _ERR_REG(113)
/* доступ запрещен */
#define ERR_ACCESS_DENIED _ERR_REG(114)
/* устройство не готово */
#define ERR_NOT_READY _ERR_REG(115)
/* запрашиваемый ресурс занят */
#define ERR_BUSY _ERR_REG(116)
/* таймаут */
#define ERR_TIMEOUT _ERR_REG(117)
/* без результата */
#define ERR_NO_RESULT _ERR_REG(118)
/* не реализовано */
#define ERR_NOT_IMPLEMENTED _ERR_REG(119)
/* последствия предыдущих ошибок */
#define ERR_AFTER _ERR_REG(120)
/*
*******************************************************************************
File
*******************************************************************************
*/
/* ошибка при создании файла */
#define ERR_FILE_CREATE _ERR_REG(201)
/* файл не найден */
#define ERR_FILE_NOT_FOUND _ERR_REG(202)
/* ошибка при открытии файла */
#define ERR_FILE_OPEN _ERR_REG(203)
/* файл уже существует */
#define ERR_FILE_EXISTS _ERR_REG(204)
/* слишком много открытых файлов */
#define ERR_FILE_TOO_MANY_OPEN _ERR_REG(205)
/* ошибка записи в файл */
#define ERR_FILE_WRITE _ERR_REG(206)
/* ошибка чтения из файла */
#define ERR_FILE_READ _ERR_REG(207)
/* достигнут конец файла */
#define ERR_FILE_EOF _ERR_REG(208)
/* некоректный размер файла */
#define ERR_FILE_SIZE _ERR_REG(209)
/* некоректный штамп файла */
#define ERR_FILE_STAMP _ERR_REG(210)
/* один и тот же файл используется разными способами */
#define ERR_FILE_SAME _ERR_REG(211)
/*
*******************************************************************************
Core
*******************************************************************************
*/
/* некорректный идентификатор объекта */
#define ERR_BAD_OID _ERR_REG(301)
/* ошибка при сборе энтропии */
#define ERR_BAD_ENTROPY _ERR_REG(302)
/* недостает энтропии */
#define ERR_NOT_ENOUGH_ENTROPY _ERR_REG(303)
/* ошибка при обращении к генератору случайных чисел */
#define ERR_BAD_RNG _ERR_REG(304)
/* ошибка при обращении к генератору произвольных чисел */
#define ERR_BAD_ANG _ERR_REG(305)
/* неверный формат */
#define ERR_BAD_FORMAT _ERR_REG(306)
/* некорректная отметка времени */
#define ERR_BAD_TIME _ERR_REG(307)
/* некорректная дата */
#define ERR_BAD_DATE _ERR_REG(308)
/* некорректное имя */
#define ERR_BAD_NAME _ERR_REG(309)
/* вне диапазона */
#define ERR_OUTOFRANGE _ERR_REG(310)
/* некорректный перечень прав доступа */
#define ERR_BAD_ACL _ERR_REG(311)
/* некорректная APDU-команда/ответ */
#define ERR_BAD_APDU _ERR_REG(312)
/*
*******************************************************************************
Math
*******************************************************************************
*/
/* некорректная точка эллиптической кривой */
#define ERR_BAD_POINT _ERR_REG(401)
/* нарушена простота */
#define ERR_NOT_PRIME _ERR_REG(402)
/* нарушена взаимная простота */
#define ERR_NOT_COPRIME _ERR_REG(403)
/* многочлен не является неприводимым */
#define ERR_NOT_IRRED _ERR_REG(404)
/*
*******************************************************************************
Crypto
*******************************************************************************
*/
/* некорректный алгоритм */
#define ERR_BAD_ALG _ERR_REG(501)
/* некорректные долговременные параметры */
#define ERR_BAD_PARAMS _ERR_REG(502)
/* некорректный секретный ключ */
#define ERR_BAD_SECKEY _ERR_REG(503)
/* некорректный личный ключ */
#define ERR_BAD_PRIVKEY _ERR_REG(504)
/* некорректный открытый ключ */
#define ERR_BAD_PUBKEY _ERR_REG(505)
/* некорректная пара открытый / личный ключ */
#define ERR_BAD_KEYPAIR _ERR_REG(506)
/* некорректный общий ключ */
#define ERR_BAD_SHAREDKEY _ERR_REG(507)
/* некорректный частичный секрет */
#define ERR_BAD_SHAREKEY _ERR_REG(508)
/* некорректное хэш-значение */
#define ERR_BAD_HASH _ERR_REG(509)
/* некорректная ЭЦП */
#define ERR_BAD_SIG _ERR_REG(510)
/* некорректная имитовставка */
#define ERR_BAD_MAC _ERR_REG(511)
/* некорректная контрольная сумма */
#define ERR_BAD_CRC _ERR_REG(512)
/* некорректный токен ключа */
#define ERR_BAD_KEYTOKEN _ERR_REG(513)
/* некорректный сертификат (открытого ключа) */
#define ERR_BAD_CERT _ERR_REG(514)
/* некорректный якорь сертификатов */
#define ERR_BAD_ANCHOR _ERR_REG(515)
/* некорректное кольцо сертификатов */
#define ERR_BAD_CERTRING _ERR_REG(516)
/* неверная логика (протокола) */
#define ERR_BAD_LOGIC _ERR_REG(517)
/* неверный пароль */
#define ERR_BAD_PWD _ERR_REG(518)
/* ключ не найден */
#define ERR_KEY_NOT_FOUND _ERR_REG(519)
/* отсутствует доверие */
#define ERR_NO_TRUST _ERR_REG(520)
/* ошибка аутентификации */
#define ERR_AUTH _ERR_REG(521)
/* ошибка самотестирования */
#define ERR_SELFTEST _ERR_REG(522)
/* ошибка статистического тестирования */
#define ERR_STATTEST _ERR_REG(523)
/* некорректные затравочные параметры */
#define ERR_BAD_SEED _ERR_REG(524)
/*
*******************************************************************************
Cmd
*******************************************************************************
*/
/* команда не найдена */
#define ERR_CMD_NOT_FOUND _ERR_REG(601)
/* команда уже зарегистрирована */
#define ERR_CMD_EXISTS _ERR_REG(602)
/* неверные параметры команды */
#define ERR_CMD_PARAMS _ERR_REG(603)
/* повтор параметров команды */
#define ERR_CMD_DUPLICATE _ERR_REG(604)
/*
*******************************************************************************
Обработка ошибок
*******************************************************************************
*/
/*! Если код ошибки, заданный в переменной code, совпадает с ERR_OK,
то выполнить f и обновить код ошибки.
*/
#define ERR_CALL(code, f)\
if ((code) == ERR_OK)\
(code) = (f);\
/*! Выйти, если код ошибки, заданный в переменной code, отличается
от ERR_OK.
*/
#define ERR_CALL_CHECK(code)\
if ((code) != ERR_OK)\
return (code);\
/*! Если код ошибки, заданный в переменной code, совпадает с ERR_OK
и выполняется условие cond, то установить новый код ошибки new_code.
*/
#define ERR_CALL_SET(code, new_code, cond)\
if ((code) == ERR_OK && (cond))\
(code) = (new_code);\
/*! Если код ошибки, заданный в переменной code, отличается от ERR_OK,
то выполнить действие op и закончить работу.
*/
#define ERR_CALL_HANDLE(code, op)\
if ((code) != ERR_OK) {\
(op);\
return (code);\
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* __BEE2_ERR_H */