19#ifndef MCUXCSSLDATAINTEGRITY_SECURECOUNTER_H_
20#define MCUXCSSLDATAINTEGRITY_SECURECOUNTER_H_
22#include <mcuxCsslAnalysis.h>
25#if (1 == MCUX_CSSL_SC_USE_SW_LOCAL) && (0 == MCUX_CSSL_FP_USE_SECURE_COUNTER)
26 #error "Local SW SC is not supported for DI when FP does not use this local SW SC, as SC_ALLOC would be missing."
54#define MCUX_CSSL_DI_CHECK_PASSED_IMPL (MCUX_CSSL_SC_CHECK_PASSED)
61#define MCUX_CSSL_DI_CHECK_FAILED_IMPL (MCUX_CSSL_SC_CHECK_FAILED)
68#if (1 == MCUX_CSSL_SC_USE_HW_SCM)
77#define MCUX_CSSL_DI_BACKUP_SC(backupValue) \
78 uint32_t backupValue = MCUX_CSSL_SC_REF_VALUE_IMPL(); \
79 MCUX_CSSL_SC_REF_VALUE_IMPL() = MCUX_CSSL_SC_VALUE()
88#define MCUX_CSSL_DI_RESTORE_SC_REF(reference) \
89 MCUX_CSSL_SC_REF_VALUE_IMPL() = (reference)
99#define MCUX_CSSL_DI_BACKUP_SC(backupValue) \
100 uint32_t backupValue = MCUX_CSSL_SC_VALUE()
109#define MCUX_CSSL_DI_RESTORE_SC_REF(reference)
117#if (1 == MCUX_CSSL_FP_USE_SECURE_COUNTER)
129#define MCUX_CSSL_DI_INIT_IMPL(backupValue) \
130 uint32_t backupValue = 0u
143#define MCUX_CSSL_DI_INIT_IMPL(backupValue) \
144 MCUX_CSSL_DI_BACKUP_SC(backupValue)
161#define MCUX_CSSL_DI_CHECK_IMPL(reference) \
162 MCUX_CSSL_SC_CHECK(reference)
164#if (1 == MCUX_CSSL_FP_USE_SECURE_COUNTER)
176#define MCUX_CSSL_DI_CHECK_EXIT_IMPL(id, reference, fail) \
194#define MCUX_CSSL_DI_CHECK_EXIT_IMPL(id, reference, fail) \
195 if (MCUX_CSSL_DI_CHECK_PASSED != MCUX_CSSL_DI_CHECK(reference)) \
197 MCUX_CSSL_FP_FUNCTION_EXIT(id, fail); \
199 MCUX_CSSL_DI_RESTORE_SC_REF(reference);
221#define MCUX_CSSL_DI_RECORD_IMPL(identifier, value) \
222 MCUX_CSSL_ANALYSIS_START_PATTERN_DI_CAST() \
223 MCUX_CSSL_SC_ADD(value) \
224 MCUX_CSSL_ANALYSIS_STOP_PATTERN_DI_CAST()
234#define MCUX_CSSL_DI_EXPUNGE_IMPL(identifier, value) \
235 MCUX_CSSL_ANALYSIS_START_PATTERN_DI_CAST() \
236 MCUX_CSSL_SC_SUB(value) \
237 MCUX_CSSL_ANALYSIS_STOP_PATTERN_DI_CAST()
Provides the API for the CSSL flow protection mechanism.