liboqs
|
Utility functions for use in liboqs. More...
#include <limits.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdio.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_destroy (void) |
OQS_API const char * | OQS_version (void) |
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) |
void * | OQS_MEM_checked_malloc (size_t len) |
void * | OQS_MEM_checked_aligned_alloc (size_t alignment, size_t size) |
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.
OQS_MEM_aligned_free
when it is no longer needed. void OQS_MEM_aligned_free | ( | void * | ptr | ) |
Free memory allocated with OQS_MEM_aligned_alloc.
void * OQS_MEM_checked_aligned_alloc | ( | size_t | alignment, |
size_t | size ) |
Allocates memory of a specified size and alignment and checks for successful allocation.
This function attempts to allocate a block of memory with the specified size and alignment. If the allocation is successful, it returns a pointer to the memory block. If the allocation fails, it prints an error message to stderr and terminates the program.
Alignment must be a power of two and a multiple of sizeof(void *).
[in] | alignment | The alignment of the memory block to allocate. |
[in] | size | The size of the memory block to allocate, in bytes. |
OQS_MEM_aligned_free
when it is no longer needed. void * OQS_MEM_checked_malloc | ( | size_t | len | ) |
Allocates memory of a specified size and checks for successful allocation.
This function attempts to allocate a block of memory of the specified size. If the allocation is successful, it returns a pointer to the beginning of the memory block. If the allocation fails, it prints an error message to stderr and terminates the program.
[in] | len | The size of the memory block to allocate, in bytes. |
free
function when it is no longer needed. 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 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 const char * OQS_version | ( | void | ) |
Return library version string.