blob: 452a13aaef4542fbf08ee7e772b3e7a66ca3156c [file] [log] [blame]
// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0
#ifndef OPENTITAN_SW_DEVICE_LIB_BASE_HARDENED_STATUS_H_
#define OPENTITAN_SW_DEVICE_LIB_BASE_HARDENED_STATUS_H_
/**
* @file
* @brief Hardened handling of status codes.
*/
#include "sw/device/lib/base/hardened.h"
#include "sw/device/lib/base/status.h"
#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
/**
* Hardened variant of `OK_STATUS` .
*
* This passes `kHardenedBoolTrue` as the status code argument, for extra bits
* of redundancy in `HARDENED_TRY` and others.
*/
#define HARDENED_OK_STATUS ((status_t){.value = kHardenedBoolTrue})
/**
* Hardened version of the `TRY` macro from `status.h`.
*
* @param expr_ An expression that evaluates to a `status_t`.
* @return The enclosed OK value.
*/
#define HARDENED_TRY(expr_) \
({ \
status_t status_ = expr_; \
if (hardened_status_ok(status_) != kHardenedBoolTrue) { \
return status_; \
} \
HARDENED_CHECK_EQ(status_.value, kHardenedBoolTrue); \
status_.value; \
})
/**
* Hardened version of `status_ok`.
*
* Returns `kHardenedBoolTrue` if the status is OK with an argument code of
* `kHardenedBoolTrue` (i.e. equal to `HARDENED_OK_STATUS`), and
* `kHardenedBoolFalse` otherwise.
*
* @param s The status code.
* @return True if the status represents Ok.
*/
hardened_bool_t hardened_status_ok(status_t s);
#ifdef __cplusplus
} // extern "C"
#endif // __cplusplus
#endif // OPENTITAN_SW_DEVICE_LIB_BASE_HARDENED_STATUS_H_