5 #ifndef OPENTITAN_SW_DEVICE_LIB_BASE_HARDENED_H_
6 #define OPENTITAN_SW_DEVICE_LIB_BASE_HARDENED_H_
10 #include "sw/device/lib/base/hardened_asm.h"
194 inline uint32_t launder32(uint32_t val) {
245 #if OT_BUILD_FOR_STATIC_ANALYZER
252 asm volatile(
"" :
"+r"(val));
267 asm volatile(
"" :
"+r"(val));
358 inline void barrier32(uint32_t val) {
asm volatile(
"" ::
"r"(val)); }
367 inline void barrierw(uintptr_t val) {
asm volatile(
"" ::
"r"(val)); }
472 return (launder32(c) & a) | (launder32(~c) & b);
548 #ifdef OT_PLATFORM_RV32
551 #define HARDENED_UNIMP_SEQUENCE_() "unimp; unimp; unimp;"
553 #define HARDENED_CHECK_OP_EQ_ "beq"
554 #define HARDENED_CHECK_OP_NE_ "bne"
555 #define HARDENED_CHECK_OP_LT_ "bltu"
556 #define HARDENED_CHECK_OP_GT_ "bgtu"
557 #define HARDENED_CHECK_OP_LE_ "bleu"
558 #define HARDENED_CHECK_OP_GE_ "bgeu"
561 #define HARDENED_CHECK_(op_, a_, b_) \
563 op_ " %0, %1, .L_HARDENED_%=;" \
564 HARDENED_UNIMP_SEQUENCE_() \
569 #define HARDENED_TRAP_() \
571 asm volatile(HARDENED_UNIMP_SEQUENCE_()); \
573 #else // OT_PLATFORM_RV32
576 #define HARDENED_CHECK_OP_EQ_ ==
577 #define HARDENED_CHECK_OP_NE_ !=
578 #define HARDENED_CHECK_OP_LT_ <
579 #define HARDENED_CHECK_OP_GT_ >
580 #define HARDENED_CHECK_OP_LE_ <=
581 #define HARDENED_CHECK_OP_GE_ >=
583 #define HARDENED_CHECK_(op_, a_, b_) assert((uint64_t)(a_)op_(uint64_t)(b_))
585 #define HARDENED_TRAP_() __builtin_trap()
586 #endif // OT_PLATFORM_RV32
592 #define HARDENED_TRAP() HARDENED_TRAP_()
618 #define HARDENED_CHECK_EQ(a_, b_) HARDENED_CHECK_(HARDENED_CHECK_OP_EQ_, a_, b_)
619 #define HARDENED_CHECK_NE(a_, b_) HARDENED_CHECK_(HARDENED_CHECK_OP_NE_, a_, b_)
620 #define HARDENED_CHECK_LT(a_, b_) HARDENED_CHECK_(HARDENED_CHECK_OP_LT_, a_, b_)
621 #define HARDENED_CHECK_GT(a_, b_) HARDENED_CHECK_(HARDENED_CHECK_OP_GT_, a_, b_)
622 #define HARDENED_CHECK_LE(a_, b_) HARDENED_CHECK_(HARDENED_CHECK_OP_LE_, a_, b_)
623 #define HARDENED_CHECK_GE(a_, b_) HARDENED_CHECK_(HARDENED_CHECK_OP_GE_, a_, b_)
627 #endif // __cplusplus
629 #endif // OPENTITAN_SW_DEVICE_LIB_BASE_HARDENED_H_