liboqs
Toggle main menu visibility
Loading...
Searching...
No Matches
common.h
Go to the documentation of this file.
1
7
8
#ifndef OQS_COMMON_H
9
#define OQS_COMMON_H
10
11
#include <limits.h>
12
#include <stdint.h>
13
#include <stdio.h>
14
#include <stdlib.h>
15
16
#include <oqs/oqsconfig.h>
17
18
#if defined(__cplusplus)
19
extern
"C"
{
20
#endif
21
22
#if defined(__GNUC__) || defined(__clang__)
28
#define IGNORE_UNUSED_FUNC __attribute__((unused))
29
#else
35
#define IGNORE_UNUSED_FUNC
36
#endif
37
38
#if defined(OQS_DISABLE_MEM_BLACK_BOX)
39
40
#warning "DANGER: OQS_DISABLE_MEM_BLACK_BOX is for internal testing only"
41
#warning "disabling optimization barrier may introduce side channels"
47
#define OQS_MEM_BLACK_BOX(v) (void)v
48
49
#elif defined(__GNUC__) || defined(__clang__)
50
57
#define OQS_MEM_BLACK_BOX(v) \
58
do { \
59
__asm__ volatile("" : "+r"(v) :); \
60
} while (0)
61
62
#else
63
64
#pragma message("WARNING: non-GNUC/Clang toolchain detected. liboqs cannot \
65
guarantee optimization barrier on unsupported platforms. \
66
Compiler may introduce non-constant-time behaviors. Please \
67
verify generated assembly and proceed with caution.")
74
#define OQS_MEM_BLACK_BOX(v) (void)v
75
#endif
76
81
#define OQS_EXIT_IF_NULLPTR(x, loc) \
82
do { \
83
if ((x) == (void *)0) { \
84
fprintf(stderr, "Unexpected NULL returned from %s API. Exiting.\n", \
85
loc); \
86
exit(EXIT_FAILURE); \
87
} \
88
} while (0)
89
101
#ifdef OQS_USE_OPENSSL
102
#ifdef OPENSSL_NO_STDIO
103
#define OQS_OPENSSL_GUARD(x) \
104
do { \
105
if (1 != (x)) { \
106
fprintf(stderr, "Error return value from OpenSSL API: %d. Exiting.\n", \
107
x); \
108
exit(EXIT_FAILURE); \
109
} \
110
} while (0)
111
#else
// OPENSSL_NO_STDIO
112
#define OQS_OPENSSL_GUARD(x) \
113
do { \
114
if (1 != (x)) { \
115
fprintf(stderr, "Error return value from OpenSSL API: %d. Exiting.\n", \
116
x); \
117
OSSL_FUNC(ERR_print_errors_fp)(stderr); \
118
exit(EXIT_FAILURE); \
119
} \
120
} while (0)
121
#endif
// OPENSSL_NO_STDIO
122
#endif
// OQS_USE_OPENSSL
123
130
#define SIZE_T_TO_INT_OR_EXIT(size_t_var_name, int_var_name) \
131
int int_var_name = 0; \
132
if (size_t_var_name <= INT_MAX) { \
133
int_var_name = (int)size_t_var_name; \
134
} else { \
135
exit(EXIT_FAILURE); \
136
}
137
146
#if defined(_WIN32)
147
#define OQS_API __declspec(dllexport)
148
#else
149
#define OQS_API __attribute__((visibility("default")))
150
#endif
151
152
#if defined(OQS_SYS_UEFI)
153
#undef OQS_API
154
#define OQS_API
155
#endif
156
171
typedef
enum
{
173
OQS_ERROR
= -1,
175
OQS_SUCCESS
= 0,
177
OQS_EXTERNAL_LIB_ERROR_OPENSSL
= 50,
178
}
OQS_STATUS
;
179
183
typedef
enum
{
184
OQS_CPU_EXT_INIT,
/* Must be first */
185
/* Start extension list */
186
OQS_CPU_EXT_ADX,
187
OQS_CPU_EXT_AES,
188
OQS_CPU_EXT_AVX,
189
OQS_CPU_EXT_AVX2,
190
OQS_CPU_EXT_AVX512,
191
OQS_CPU_EXT_BMI1,
192
OQS_CPU_EXT_BMI2,
193
OQS_CPU_EXT_PCLMULQDQ,
194
OQS_CPU_EXT_VPCLMULQDQ,
195
OQS_CPU_EXT_POPCNT,
196
OQS_CPU_EXT_SSE,
197
OQS_CPU_EXT_SSE2,
198
OQS_CPU_EXT_SSE3,
199
OQS_CPU_EXT_ARM_AES,
200
OQS_CPU_EXT_ARM_SHA2,
201
OQS_CPU_EXT_ARM_SHA3,
202
OQS_CPU_EXT_ARM_NEON,
203
/* End extension list */
204
OQS_CPU_EXT_COUNT,
/* Must be last */
205
}
OQS_CPU_EXT
;
206
212
OQS_API
int
OQS_CPU_has_extension
(
OQS_CPU_EXT
ext);
213
218
OQS_API
void
OQS_init
(
void
);
219
226
OQS_API
void
OQS_thread_stop
(
void
);
227
231
OQS_API
void
OQS_destroy
(
void
);
232
236
OQS_API
const
char
*
OQS_version
(
void
);
237
245
251
OQS_API
void
*
OQS_MEM_malloc
(
size_t
size);
252
259
OQS_API
void
*
OQS_MEM_calloc
(
size_t
num_elements,
size_t
element_size);
260
266
OQS_API
char
*
OQS_MEM_strdup
(
const
char
*str);
267
277
OQS_API
int
OQS_MEM_secure_bcmp
(
const
void
*a,
const
void
*b,
size_t
len);
278
289
OQS_API
void
OQS_MEM_cleanse
(
void
*ptr,
size_t
len);
290
303
OQS_API
void
OQS_MEM_secure_free
(
void
*ptr,
size_t
len);
304
314
OQS_API
void
OQS_MEM_insecure_free
(
void
*ptr);
315
325
void
*
OQS_MEM_aligned_alloc
(
size_t
alignment,
size_t
size);
326
330
void
OQS_MEM_aligned_free
(
void
*ptr);
331
335
void
OQS_MEM_aligned_secure_free
(
void
*ptr,
size_t
len);
336
337
#if defined(__cplusplus)
338
}
// extern "C"
339
#endif
340
341
#endif
// OQS_COMMON_H
OQS_MEM_cleanse
OQS_API void OQS_MEM_cleanse(void *ptr, size_t len)
OQS_version
OQS_API const char * OQS_version(void)
OQS_CPU_EXT
OQS_CPU_EXT
Definition
common.h:183
OQS_MEM_aligned_alloc
void * OQS_MEM_aligned_alloc(size_t alignment, size_t size)
OQS_CPU_has_extension
OQS_API int OQS_CPU_has_extension(OQS_CPU_EXT ext)
OQS_MEM_secure_free
OQS_API void OQS_MEM_secure_free(void *ptr, size_t len)
OQS_MEM_secure_bcmp
OQS_API int OQS_MEM_secure_bcmp(const void *a, const void *b, size_t len)
OQS_MEM_aligned_free
void OQS_MEM_aligned_free(void *ptr)
OQS_API
#define OQS_API
Definition
common.h:149
OQS_STATUS
OQS_STATUS
Definition
common.h:171
OQS_EXTERNAL_LIB_ERROR_OPENSSL
@ OQS_EXTERNAL_LIB_ERROR_OPENSSL
Definition
common.h:177
OQS_ERROR
@ OQS_ERROR
Definition
common.h:173
OQS_SUCCESS
@ OQS_SUCCESS
Definition
common.h:175
OQS_MEM_malloc
OQS_API void * OQS_MEM_malloc(size_t size)
Memory allocation and deallocation functions.
OQS_init
OQS_API void OQS_init(void)
OQS_MEM_calloc
OQS_API void * OQS_MEM_calloc(size_t num_elements, size_t element_size)
OQS_thread_stop
OQS_API void OQS_thread_stop(void)
OQS_MEM_strdup
OQS_API char * OQS_MEM_strdup(const char *str)
OQS_destroy
OQS_API void OQS_destroy(void)
OQS_MEM_insecure_free
OQS_API void OQS_MEM_insecure_free(void *ptr)
OQS_MEM_aligned_secure_free
void OQS_MEM_aligned_secure_free(void *ptr, size_t len)
src
common
common.h
Generated by
1.17.0