19#ifndef MCUX_CSSL_FLOW_PROTECTION_SECURE_COUNTER_LOCAL_H_
20#define MCUX_CSSL_FLOW_PROTECTION_SECURE_COUNTER_LOCAL_H_
45#define MCUX_CSSL_FP_PROTECTED_TYPE_IMPL(resultType) \
62#define MCUX_CSSL_FP_FUNCTION_ENTRY_IMPLn(function, ...) \
64 MCUX_CSSL_FP_FUNCTION_ID_ENTRY_PART(function) \
65 - (MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__)) \
80#define MCUX_CSSL_FP_FUNCTION_ENTRY_IMPL1(function) \
81 MCUX_CSSL_FP_FUNCTION_ENTRY_IMPLn(function, 0u)
100#define MCUX_CSSL_FP_FUNCTION_ENTRY_IMPL(...) \
101 MCUX_CSSL_CPP_OVERLOADED1(MCUX_CSSL_FP_FUNCTION_ENTRY_IMPL, __VA_ARGS__)
122#define MCUX_CSSL_FP_FUNCTION_EXIT_IMPLn(id, result, ...) \
124 MCUX_CSSL_FP_FUNCTION_ID_EXIT_PART(id) \
125 - MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) \
127 return (MCUX_CSSL_FP_RESULT_VALUE(result) \
128 | MCUX_CSSL_FP_PROTECTION_TOKEN_VALUE(MCUX_CSSL_FP_COUNTER_COMPRESSED()))
144#define MCUX_CSSL_FP_FUNCTION_EXIT_IMPL1(id) \
145 MCUX_CSSL_FP_FUNCTION_EXIT_IMPLn(id, 0u, 0u)
163#define MCUX_CSSL_FP_FUNCTION_EXIT_IMPL2(id, result) \
164 MCUX_CSSL_FP_FUNCTION_EXIT_IMPLn(id, result, 0u)
188#define MCUX_CSSL_FP_FUNCTION_EXIT_IMPL(...) \
189 MCUX_CSSL_CPP_OVERLOADED2(MCUX_CSSL_FP_FUNCTION_EXIT_IMPL, __VA_ARGS__)
216#define MCUX_CSSL_FP_FUNCTION_EXIT_WITH_CHECK_IMPLn(id, pass, fail, ...) \
218 MCUX_CSSL_FP_FUNCTION_ID_EXIT_PART(id) \
219 - MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__) \
221 return (MCUX_CSSL_FP_RESULT_VALUE( \
222 (MCUX_CSSL_SC_CHECK_PASSED == \
223 MCUX_CSSL_SC_CHECK(MCUX_CSSL_FP_FUNCTION_VALUE(id))) \
225 | MCUX_CSSL_FP_PROTECTION_TOKEN_VALUE(MCUX_CSSL_FP_COUNTER_COMPRESSED()))
248#define MCUX_CSSL_FP_FUNCTION_EXIT_WITH_CHECK_IMPL3(id, pass, fail) \
249 MCUX_CSSL_FP_FUNCTION_EXIT_WITH_CHECK_IMPLn(id, pass, fail, 0u)
278#define MCUX_CSSL_FP_FUNCTION_EXIT_WITH_CHECK_IMPL(...) \
279 MCUX_CSSL_CPP_OVERLOADED3(MCUX_CSSL_FP_FUNCTION_EXIT_WITH_CHECK_IMPL, __VA_ARGS__)
290#define MCUX_CSSL_FP_FUNCTION_EXIT_VOID_IMPL1(id) \
291 MCUX_CSSL_FP_FUNCTION_EXIT_IMPL(id, 0U)
304#define MCUX_CSSL_FP_FUNCTION_EXIT_VOID_IMPLn(id, ...) \
305 MCUX_CSSL_FP_FUNCTION_EXIT_IMPL(id, 0U, __VA_ARGS__)
318#define MCUX_CSSL_FP_FUNCTION_EXIT_VOID_IMPL(...) \
319 MCUX_CSSL_CPP_OVERLOADED1(MCUX_CSSL_FP_FUNCTION_EXIT_VOID_IMPL, __VA_ARGS__)
330#define MCUX_CSSL_FP_FUNCTION_CALL_IMPL3(type, result, call) \
331 const uint64_t MCUX_CSSL_CPP_CAT(result, _protected) = (call); \
332 MCUX_CSSL_SC_ADD_ON_CALL( \
333 MCUX_CSSL_FP_PROTECTION_TOKEN(MCUX_CSSL_CPP_CAT(result, _protected))); \
334 type const result = MCUX_CSSL_FP_RESULT(type, \
335 MCUX_CSSL_CPP_CAT(result, _protected))
345#define MCUX_CSSL_FP_FUNCTION_CALL_IMPL2(result, call) \
346 MCUX_CSSL_FP_FUNCTION_CALL_IMPL3(uint32_t, result, call)
360#define MCUX_CSSL_FP_FUNCTION_CALL_IMPL(...) \
361 MCUX_CSSL_CPP_OVERLOADED3(MCUX_CSSL_FP_FUNCTION_CALL_IMPL, __VA_ARGS__)
373#define MCUX_CSSL_FP_FUNCTION_CALL_VOID_IMPL(call) \
375 const uint64_t MCUX_CSSL_CPP_CAT(result, _protected) = (call); \
376 MCUX_CSSL_SC_ADD_ON_CALL( \
377 MCUX_CSSL_FP_PROTECTION_TOKEN(MCUX_CSSL_CPP_CAT(result, _protected))); \
391#define MCUX_CSSL_FP_FUNCTION_CALL_PROTECTED_IMPL(result, token, call) \
392 const uint64_t MCUX_CSSL_CPP_CAT(result, _protected) = (call); \
393 const uint32_t token = MCUX_CSSL_FP_PROTECTION_TOKEN( \
394 MCUX_CSSL_CPP_CAT(result, _protected)); \
395 const uint32_t result = MCUX_CSSL_FP_RESULT( \
396 MCUX_CSSL_CPP_CAT(result, _protected))
408#define MCUX_CSSL_FP_FUNCTION_CALL_VOID_PROTECTED_IMPL(token, call) \
409 const uint64_t MCUX_CSSL_CPP_CAT(token, _protected) = (call); \
410 const uint32_t token = MCUX_CSSL_FP_PROTECTION_TOKEN( \
411 MCUX_CSSL_CPP_CAT(token, _protected));
425#define MCUX_CSSL_FP_FUNCTION_CALL_BEGIN_IMPL(result, token, call) \
428 MCUX_CSSL_FP_FUNCTION_CALL_PROTECTED_IMPL(result, token, call)
436#define MCUX_CSSL_FP_FUNCTION_CALL_END_IMPL() \
450#define MCUX_CSSL_FP_FUNCTION_CALL_VOID_BEGIN_IMPL(token, call) \
453 MCUX_CSSL_FP_FUNCTION_CALL_VOID_PROTECTED_IMPL(token, call)
461#define MCUX_CSSL_FP_FUNCTION_CALL_VOID_END_IMPL() \
484#define MCUX_CSSL_FP_ASSERT_IMPL(...) \
485 if (MCUX_CSSL_SC_CHECK_PASSED != \
486 MCUX_CSSL_SC_CHECK(MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__))) \
488 MCUX_CSSL_FP_ASSERT_CALLBACK(); \
490 else if (MCUX_CSSL_SC_CHECK_PASSED != \
491 MCUX_CSSL_SC_CHECK(MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__))) \
493 MCUX_CSSL_FP_ASSERT_CALLBACK(); \
The default implementation is based on standard C preprocessor functionality.
Provides the API for the CSSL secure counter mechanism.