liboqs
|
Utility functions for use in liboqs. More...
#include <limits.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <oqs/oqsconfig.h>
Go to the source code of this file.
Macros | |
#define | OQS_EXIT_IF_NULLPTR(x, loc) |
#define | SIZE_T_TO_INT_OR_EXIT(size_t_var_name, int_var_name) |
#define | OQS_API __attribute__((visibility("default"))) |
Enumerations | |
enum | OQS_STATUS { OQS_ERROR = -1 , OQS_SUCCESS = 0 , OQS_EXTERNAL_LIB_ERROR_OPENSSL = 50 } |
enum | OQS_CPU_EXT { OQS_CPU_EXT_INIT , OQS_CPU_EXT_ADX , OQS_CPU_EXT_AES , OQS_CPU_EXT_AVX , OQS_CPU_EXT_AVX2 , OQS_CPU_EXT_AVX512 , OQS_CPU_EXT_BMI1 , OQS_CPU_EXT_BMI2 , OQS_CPU_EXT_PCLMULQDQ , OQS_CPU_EXT_VPCLMULQDQ , OQS_CPU_EXT_POPCNT , OQS_CPU_EXT_SSE , OQS_CPU_EXT_SSE2 , OQS_CPU_EXT_SSE3 , OQS_CPU_EXT_ARM_AES , OQS_CPU_EXT_ARM_SHA2 , OQS_CPU_EXT_ARM_SHA3 , OQS_CPU_EXT_ARM_NEON , OQS_CPU_EXT_COUNT } |
Functions | |
OQS_API int | OQS_CPU_has_extension (OQS_CPU_EXT ext) |
OQS_API void | OQS_init (void) |
OQS_API void | OQS_thread_stop (void) |
OQS_API void | OQS_destroy (void) |
OQS_API const char * | OQS_version (void) |
OQS_API void * | OQS_MEM_malloc (size_t size) |
Memory allocation and deallocation functions. | |
OQS_API void * | OQS_MEM_calloc (size_t num_elements, size_t element_size) |
OQS_API char * | OQS_MEM_strdup (const char *str) |
OQS_API int | OQS_MEM_secure_bcmp (const void *a, const void *b, size_t len) |
OQS_API void | OQS_MEM_cleanse (void *ptr, size_t len) |
OQS_API void | OQS_MEM_secure_free (void *ptr, size_t len) |
OQS_API void | OQS_MEM_insecure_free (void *ptr) |
void * | OQS_MEM_aligned_alloc (size_t alignment, size_t size) |
void | OQS_MEM_aligned_free (void *ptr) |
Utility functions for use in liboqs.
SPDX-License-Identifier: MIT
#define OQS_API __attribute__((visibility("default"))) |
Defines which functions should be exposed outside the LibOQS library
By default the visibility of all the symbols is defined to "hidden" Only the library API should be marked as default
Example: OQS_API return_value function_name(void);
#define OQS_EXIT_IF_NULLPTR | ( | x, | |
loc ) |
Macro for terminating the program if x is a null pointer.
#define SIZE_T_TO_INT_OR_EXIT | ( | size_t_var_name, | |
int_var_name ) |
This macro is intended to replace those assert()s involving side-effecting statements in aes/aes_ossl.c.
assert() becomes a no-op when -DNDEBUG is defined, which causes compilation failures when the statement being checked also results in side-effects.
This is a temporary workaround until a better error handling strategy is developed. Certain functions (such as OQS_randombytes_openssl in src/rand/rand.c) take in a size_t parameter, but can only handle values up to INT_MAX for those parameters. This macro is a temporary workaround for such functions.
enum OQS_CPU_EXT |
CPU runtime detection flags
enum OQS_STATUS |
Represents return values from functions.
Callers should compare with the symbol rather than the individual value. For example,
ret = OQS_KEM_encaps(...); if (ret == OQS_SUCCESS) { ... }
rather than
if (!OQS_KEM_encaps(...) { ... }
OQS_API int OQS_CPU_has_extension | ( | OQS_CPU_EXT | ext | ) |
Checks if the CPU supports a given extension
OQS_API void OQS_destroy | ( | void | ) |
This function frees prefetched OpenSSL objects
OQS_API void OQS_init | ( | void | ) |
This currently sets the values in the OQS_CPU_EXTENSIONS and prefetches the OpenSSL objects if necessary.
void * OQS_MEM_aligned_alloc | ( | size_t | alignment, |
size_t | size ) |
Internal implementation of C11 aligned_alloc to work around compiler quirks.
Allocates size bytes of uninitialized memory with a base pointer that is a multiple of alignment. Alignment must be a power of two and a multiple of sizeof(void *). Size must be a multiple of alignment.
void OQS_MEM_aligned_free | ( | void * | ptr | ) |
Free memory allocated with OQS_MEM_aligned_alloc.
OQS_API void * OQS_MEM_calloc | ( | size_t | num_elements, |
size_t | element_size ) |
Allocates memory for an array of elements of a given size.
num_elements | The number of elements to allocate. |
element_size | The size of each element in bytes. |
OQS_API void OQS_MEM_cleanse | ( | void * | ptr, |
size_t | len ) |
Zeros out len bytes of memory starting at ptr.
Designed to be protected against optimizing compilers which try to remove "unnecessary" operations. Should be used for all buffers containing secret data.
[in] | ptr | The start of the memory to zero out. |
[in] | len | The number of bytes to zero out. |
OQS_API void OQS_MEM_insecure_free | ( | void * | ptr | ) |
Frees ptr.
Can be called with ptr = NULL, in which case no operation is performed.
Should only be used on non-secret data.
[in] | ptr | The start of the memory to free. |
OQS_API void * OQS_MEM_malloc | ( | size_t | size | ) |
Memory allocation and deallocation functions.
These functions provide a unified interface for memory operations, using OpenSSL functions when OQS_USE_OPENSSL is defined, and standard C library functions otherwise. Allocates memory of a given size.
size | The size of the memory to be allocated in bytes. |
OQS_API int OQS_MEM_secure_bcmp | ( | const void * | a, |
const void * | b, | ||
size_t | len ) |
Constant time comparison of byte sequences a and b of length len. Returns 0 if the byte sequences are equal or if len=0. Returns 1 otherwise.
[in] | a | A byte sequence of length at least len. |
[in] | b | A byte sequence of length at least len. |
[in] | len | The number of bytes to compare. |
OQS_API void OQS_MEM_secure_free | ( | void * | ptr, |
size_t | len ) |
Zeros out len bytes of memory starting at ptr, then frees ptr.
Can be called with ptr = NULL, in which case no operation is performed.
Designed to be protected against optimizing compilers which try to remove "unnecessary" operations. Should be used for all buffers containing secret data.
[in] | ptr | The start of the memory to zero out and free. |
[in] | len | The number of bytes to zero out. |
OQS_API char * OQS_MEM_strdup | ( | const char * | str | ) |
Duplicates a string.
str | The string to be duplicated. |
OQS_API void OQS_thread_stop | ( | void | ) |
This function stops OpenSSL threads, which allows resources to be cleaned up in the correct order.
OQS_API const char * OQS_version | ( | void | ) |
Return library version string.