hsw-nbt 1.2.0
OPTIGA Authenticate NBT Host Library for C
ifx-utils.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) 2024-2026 Infineon Technologies AG
2// SPDX-License-Identifier: MIT
3
8#ifndef IFX_UTILS_H
9#define IFX_UTILS_H
10
11#include <stdint.h>
12
13#include "ifx-utils-lib.h"
14
15#if !defined(IFX_MEMCPY) || !defined(IFX_MEMCMP) || !defined(IFX_MEMSET) || \
16 (!defined(IFX_FREE))
17#include <string.h>
18#endif
19
20#ifndef IFX_MEMCPY
25#define IFX_MEMCPY(dest, src, size) \
26 memcpy(dest, src, size) /* flawfinder: ignore*/
27
28#endif
29
30#ifndef IFX_MEMCMP
35#define IFX_MEMCMP(first_memory, second_memory, size) \
36 memcmp(first_memory, second_memory, size)
37#endif
38
39#ifndef IFX_MEMSET
44#define IFX_MEMSET(buffer, value, size) memset(buffer, value, size)
45#endif
46
47#ifndef IFX_FREE
52#define IFX_FREE(buffer) free(buffer)
53#endif
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
62#define IFX_UNUSED_VARIABLE(var) (void) var
63
64/* Function identifiers */
65
69#define IFX_UTILS_CONCAT UINT8_C(0x01)
70
74#define IFX_ENABLE UINT8_C(0x01)
75
79#define IFX_DISABLE UINT8_C(0x00)
80
84#define IFX_LITTLE_ENDIAN IFX_ENABLE
85
89#define IFX_VALIDATE_NULL_PTR IFX_ENABLE
90
94#define IFX_VALIDATE_NULL_PTR_BLOB(blob) (blob == NULL || blob->buffer == NULL)
95
99#define IFX_VALIDATE_NULL_PTR_MEMORY(data) (data == NULL)
100
101#if IFX_LITTLE_ENDIAN
102/*#warning "Little Endian Compiler" */
103
107#define IFX_GET_LOWER_BYTE(p1_value, p2_value) \
108 (p1_value) = ((p2_value) & 0x00FF);
109
113#define IFX_GET_UPPER_BYTE(p1_value, p2_value) \
114 (p1_value) = (((p2_value) & 0xFF00) >> 8);
115
120#define IFX_READ_U16(buffer, value) \
121 { \
122 value = (((*(uint8_t *) buffer) << 8) | (*(uint8_t *) (buffer + 1))); \
123 }
124
129#define IFX_UPDATE_U16(buffer, value) \
130 { \
131 *(uint8_t *) buffer = (uint8_t) ((value >> 8) & 0x00FF); \
132 *(uint8_t *) (buffer + 1) = (uint8_t) (value); \
133 }
134
135#else
136/*#warning "Big Endian Compiler"*/
137
141#define IFX_GET_LOWER_BYTE(p1_value, p2_value) \
142 (p1_value) = (((p2_value) & 0xff00) >> 8);
143
147#define IFX_GET_UPPER_BYTE(p1_value, p2_value) \
148 (p1_value) = ((p2_value) & 0x00FF);
149#endif
150
159#define IFX_READ_U32(buffer, u32value) \
160 { \
161 u32value = ((((*(uint8_t *) (buffer)) << 24) & 0XFF000000) | \
162 (((*(uint8_t *) (buffer + 1)) << 16) & 0X00FF0000) | \
163 (((*(uint8_t *) (buffer + 2)) << 8) & 0X0000FF00) | \
164 (((*(uint8_t *) (buffer + 3)) & 0X000000FF))); \
165 }
166
176#define IFX_UPDATE_U32(buffer, u32value) \
177 { \
178 *(uint8_t *) buffer = (uint8_t) ((u32value >> 24) & 0xFF); \
179 *(uint8_t *) (buffer + 1) = (uint8_t) ((u32value >> 16) & 0xFF); \
180 *(uint8_t *) (buffer + 2) = (uint8_t) ((u32value >> 8) & 0xFF); \
181 *(uint8_t *) (buffer + 3) = (uint8_t) (u32value); \
182 }
183
188typedef struct
189{
191 uint32_t length;
192
194 uint8_t *buffer;
195} ifx_blob_t;
196
214 ifx_blob_t *result);
215
216#ifdef __cplusplus
217}
218
219#endif /* __cplusplus */
220#endif /* IFX_UTILS_H */
uint32_t ifx_status_t
Custom return code type used by all Infineon host software libraries.
Definition ifx-error.h:91
Provides the module, method and error identifiers of the library.
ifx_status_t ifx_utils_concat(const ifx_blob_t *append_data, ifx_blob_t *result)
Concatenates the buffers of two ifx_blob_t type data structures. Buffer field of append_data will be ...
Data storage for data and data length where both are required as parameters.
Definition ifx-utils.h:189
uint8_t * buffer
Definition ifx-utils.h:194
uint32_t length
Definition ifx-utils.h:191