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__) 333 #define MCUX_CSSL_FP_FUNCTION_CALL_IMPL(result, call) \ 334 const uint64_t MCUX_CSSL_CPP_CAT(result, _protected) = (call); \ 335 MCUX_CSSL_SC_ADD_ON_CALL( \ 336 MCUX_CSSL_FP_PROTECTION_TOKEN(MCUX_CSSL_CPP_CAT(result, _protected))); \ 337 const uint32_t result = MCUX_CSSL_FP_RESULT( \ 338 MCUX_CSSL_CPP_CAT(result, _protected)) 350 #define MCUX_CSSL_FP_FUNCTION_CALL_VOID_IMPL(call) \ 352 const uint64_t MCUX_CSSL_CPP_CAT(result, _protected) = (call); \ 353 MCUX_CSSL_SC_ADD_ON_CALL( \ 354 MCUX_CSSL_FP_PROTECTION_TOKEN(MCUX_CSSL_CPP_CAT(result, _protected))); \ 368 #define MCUX_CSSL_FP_FUNCTION_CALL_PROTECTED_IMPL(result, token, call) \ 369 const uint64_t MCUX_CSSL_CPP_CAT(result, _protected) = (call); \ 370 const uint32_t token = MCUX_CSSL_FP_PROTECTION_TOKEN( \ 371 MCUX_CSSL_CPP_CAT(result, _protected)); \ 372 const uint32_t result = MCUX_CSSL_FP_RESULT( \ 373 MCUX_CSSL_CPP_CAT(result, _protected)) 385 #define MCUX_CSSL_FP_FUNCTION_CALL_VOID_PROTECTED_IMPL(token, call) \ 386 const uint64_t MCUX_CSSL_CPP_CAT(token, _protected) = (call); \ 387 const uint32_t token = MCUX_CSSL_FP_PROTECTION_TOKEN( \ 388 MCUX_CSSL_CPP_CAT(token, _protected)); 402 #define MCUX_CSSL_FP_FUNCTION_CALL_BEGIN_IMPL(result, token, call) \ 405 MCUX_CSSL_FP_FUNCTION_CALL_PROTECTED_IMPL(result, token, call) 413 #define MCUX_CSSL_FP_FUNCTION_CALL_END_IMPL() \ 427 #define MCUX_CSSL_FP_FUNCTION_CALL_VOID_BEGIN_IMPL(token, call) \ 430 MCUX_CSSL_FP_FUNCTION_CALL_VOID_PROTECTED_IMPL(token, call) 438 #define MCUX_CSSL_FP_FUNCTION_CALL_VOID_END_IMPL() \ 461 #define MCUX_CSSL_FP_ASSERT_IMPL(...) \ 462 if (MCUX_CSSL_SC_CHECK_PASSED != \ 463 MCUX_CSSL_SC_CHECK(MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__))) \ 465 MCUX_CSSL_FP_ASSERT_CALLBACK(); \ 467 else if (MCUX_CSSL_SC_CHECK_PASSED != \ 468 MCUX_CSSL_SC_CHECK(MCUX_CSSL_FP_EXPECTATIONS(__VA_ARGS__))) \ 470 MCUX_CSSL_FP_ASSERT_CALLBACK(); \ The default implementation is based on standard C preprocessor functionality.
Provides the API for the CSSL secure counter mechanism.