[sw/silicon_creator] Remove dedicated OTBN error type. Replace otbn_error_t with a few new cases in rom_error_t. Signed-off-by: Jade Philipoom <jadep@google.com>
diff --git a/sw/device/silicon_creator/lib/drivers/otbn.c b/sw/device/silicon_creator/lib/drivers/otbn.c index c2aae71..908894c 100644 --- a/sw/device/silicon_creator/lib/drivers/otbn.c +++ b/sw/device/silicon_creator/lib/drivers/otbn.c
@@ -47,14 +47,14 @@ /** * Ensures that `offset_bytes` and `len` are valid for a given `mem_size`. */ -static otbn_error_t check_offset_len(uint32_t offset_bytes, size_t num_words, - size_t mem_size) { +static rom_error_t check_offset_len(uint32_t offset_bytes, size_t num_words, + size_t mem_size) { if (offset_bytes + num_words * sizeof(uint32_t) < num_words * sizeof(uint32_t) || offset_bytes + num_words * sizeof(uint32_t) > mem_size) { - return kOtbnErrorBadOffsetLen; + return kErrorOtbnBadOffsetLen; } - return kOtbnErrorOk; + return kErrorOk; } void otbn_execute(void) { @@ -70,9 +70,9 @@ *err_bits = abs_mmio_read32(kBase + OTBN_ERR_BITS_REG_OFFSET); } -otbn_error_t otbn_imem_write(uint32_t offset_bytes, const uint32_t *src, - size_t num_words) { - OTBN_RETURN_IF_ERROR( +rom_error_t otbn_imem_write(uint32_t offset_bytes, const uint32_t *src, + size_t num_words) { + RETURN_IF_ERROR( check_offset_len(offset_bytes, num_words, kOtbnIMemSizeBytes)); for (size_t i = 0; i < num_words; ++i) { @@ -81,12 +81,12 @@ src[i]); } - return kOtbnErrorOk; + return kErrorOk; } -otbn_error_t otbn_dmem_write(uint32_t offset_bytes, const uint32_t *src, - size_t num_words) { - OTBN_RETURN_IF_ERROR( +rom_error_t otbn_dmem_write(uint32_t offset_bytes, const uint32_t *src, + size_t num_words) { + RETURN_IF_ERROR( check_offset_len(offset_bytes, num_words, kOtbnDMemSizeBytes)); for (size_t i = 0; i < num_words; ++i) { @@ -95,12 +95,12 @@ src[i]); } - return kOtbnErrorOk; + return kErrorOk; } -otbn_error_t otbn_dmem_read(uint32_t offset_bytes, uint32_t *dest, - size_t num_words) { - OTBN_RETURN_IF_ERROR( +rom_error_t otbn_dmem_read(uint32_t offset_bytes, uint32_t *dest, + size_t num_words) { + RETURN_IF_ERROR( check_offset_len(offset_bytes, num_words, kOtbnDMemSizeBytes)); for (size_t i = 0; i < num_words; ++i) { @@ -108,7 +108,7 @@ i * sizeof(uint32_t)); } - return kOtbnErrorOk; + return kErrorOk; } void otbn_zero_dmem(void) { @@ -117,7 +117,7 @@ } } -otbn_error_t otbn_set_ctrl_software_errs_fatal(bool enable) { +rom_error_t otbn_set_ctrl_software_errs_fatal(bool enable) { // Only one bit in the CTRL register so no need to read current value. uint32_t new_ctrl; @@ -129,8 +129,8 @@ abs_mmio_write32(kBase + OTBN_CTRL_REG_OFFSET, new_ctrl); if (abs_mmio_read32(kBase + OTBN_CTRL_REG_OFFSET) != new_ctrl) { - return kOtbnErrorUnavailable; + return kErrorOtbnUnavailable; } - return kOtbnErrorOk; + return kErrorOk; }
diff --git a/sw/device/silicon_creator/lib/drivers/otbn.h b/sw/device/silicon_creator/lib/drivers/otbn.h index 46b7d53..a4cb2c3 100644 --- a/sw/device/silicon_creator/lib/drivers/otbn.h +++ b/sw/device/silicon_creator/lib/drivers/otbn.h
@@ -9,6 +9,8 @@ #include <stddef.h> #include <stdint.h> +#include "sw/device/silicon_creator/lib/error.h" + #ifdef __cplusplus extern "C" { #endif @@ -44,35 +46,6 @@ } otbn_status_t; /** - * Error codes for the OTBN driver. - */ -typedef enum otbn_error_t { - /** No errors. */ - kOtbnErrorOk = 0, - /** Invalid argument provided to OTBN interface function. */ - kOtbnErrorInvalidArgument = 1, - /** Invalid offset provided. */ - kOtbnErrorBadOffsetLen = 2, - /** OTBN internal error; use otbn_get_err_bits for specific error codes. */ - kOtbnErrorExecutionFailed = 3, - /** Attempt to interact with OTBN while it was unavailable. */ - kOtbnErrorUnavailable = 4, -} otbn_error_t; - -/** - * Evaluate an expression and return if the result is an error. - * - * @param expr_ An expression which results in an otbn_error_t. - */ -#define OTBN_RETURN_IF_ERROR(expr_) \ - do { \ - otbn_error_t local_error_ = expr_; \ - if (local_error_ != kOtbnErrorOk) { \ - return local_error_; \ - } \ - } while (0) - -/** * Start the execution of the application loaded into OTBN. */ void otbn_execute(void); @@ -136,11 +109,11 @@ * @param offset_bytes the byte offset in IMEM the first word is written to * @param src the main memory location to start reading from. * @param len number of words to copy. - * @return `kOtbnErrorBadOffset` if `offset_bytes` isn't word aligned, - * `kOtbnErrorBadOffsetLen` if `len` is invalid , `kOtbnErrorOk` otherwise. + * @return `kErrorOtbnBadOffset` if `offset_bytes` isn't word aligned, + * `kErrorOtbnBadOffsetLen` if `len` is invalid , `kErrorOk` otherwise. */ -otbn_error_t otbn_imem_write(uint32_t offset_bytes, const uint32_t *src, - size_t len); +rom_error_t otbn_imem_write(uint32_t offset_bytes, const uint32_t *src, + size_t len); /** * Write to OTBN's data memory (DMEM) @@ -150,11 +123,11 @@ * @param offset_bytes the byte offset in DMEM the first word is written to * @param src the main memory location to start reading from. * @param len number of words to copy. - * @return `kOtbnErrorBadOffset` if `offset_bytes` isn't word aligned, - * `kOtbnErrorBadOffsetLen` if `len` is invalid , `kOtbnErrorOk` otherwise. + * @return `kErrorOtbnBadOffset` if `offset_bytes` isn't word aligned, + * `kErrorOtbnBadOffsetLen` if `len` is invalid , `kErrorOk` otherwise. */ -otbn_error_t otbn_dmem_write(uint32_t offset_bytes, const uint32_t *src, - size_t len); +rom_error_t otbn_dmem_write(uint32_t offset_bytes, const uint32_t *src, + size_t len); /** * Read from OTBN's data memory (DMEM) @@ -164,10 +137,10 @@ * @param offset_bytes the byte offset in DMEM the first word is read from * @param[out] dest the main memory location to copy the data to (preallocated) * @param len number of words to copy. - * @return `kOtbnErrorBadOffset` if `offset_bytes` isn't word aligned, - * `kOtbnErrorBadOffsetLen` if `len` is invalid , `kOtbnErrorOk` otherwise. + * @return `kErrorOtbnBadOffset` if `offset_bytes` isn't word aligned, + * `kErrorOtbnBadOffsetLen` if `len` is invalid , `kErrorOk` otherwise. */ -otbn_error_t otbn_dmem_read(uint32_t offset_bytes, uint32_t *dest, size_t len); +rom_error_t otbn_dmem_read(uint32_t offset_bytes, uint32_t *dest, size_t len); /** * Zero out the contents of OTBN's data memory (DMEM). @@ -181,10 +154,10 @@ * changed when the OTBN status is IDLE. * * @param enable Enable or disable whether software errors are fatal. - * @return `kOtbnErrorUnavailable` if the requested change cannot be made or - * `kOtbnErrorOk` otherwise. + * @return `kErrorOtbnUnavailable` if the requested change cannot be made or + * `kErrorOk` otherwise. */ -otbn_error_t otbn_set_ctrl_software_errs_fatal(bool enable); +rom_error_t otbn_set_ctrl_software_errs_fatal(bool enable); #ifdef __cplusplus }
diff --git a/sw/device/silicon_creator/lib/drivers/otbn_unittest.cc b/sw/device/silicon_creator/lib/drivers/otbn_unittest.cc index 25165a0..8b11735 100644 --- a/sw/device/silicon_creator/lib/drivers/otbn_unittest.cc +++ b/sw/device/silicon_creator/lib/drivers/otbn_unittest.cc
@@ -60,14 +60,14 @@ std::array<uint32_t, 2> test_data = {0}; EXPECT_EQ(otbn_imem_write(OTBN_IMEM_SIZE_BYTES, test_data.data(), 1), - kOtbnErrorBadOffsetLen); + kErrorOtbnBadOffsetLen); } TEST_F(ImemWriteTest, BadAddressIntegerOverflow) { std::array<uint32_t, 4> test_data = {0}; EXPECT_EQ(otbn_imem_write(0xFFFFFFFC, test_data.data(), 1), - kOtbnErrorBadOffsetLen); + kErrorOtbnBadOffsetLen); } TEST_F(ImemWriteTest, SuccessWithoutOffset) { @@ -79,7 +79,7 @@ EXPECT_ABS_WRITE32(base_ + OTBN_IMEM_REG_OFFSET, test_data[0]); EXPECT_ABS_WRITE32(base_ + OTBN_IMEM_REG_OFFSET + 4, test_data[1]); - EXPECT_EQ(otbn_imem_write(0, test_data.data(), 2), kOtbnErrorOk); + EXPECT_EQ(otbn_imem_write(0, test_data.data(), 2), kErrorOk); } TEST_F(ImemWriteTest, SuccessWithOffset) { @@ -91,7 +91,7 @@ EXPECT_ABS_WRITE32(base_ + OTBN_IMEM_REG_OFFSET + 4, test_data[0]); EXPECT_ABS_WRITE32(base_ + OTBN_IMEM_REG_OFFSET + 8, test_data[1]); - EXPECT_EQ(otbn_imem_write(4, test_data.data(), 2), kOtbnErrorOk); + EXPECT_EQ(otbn_imem_write(4, test_data.data(), 2), kErrorOk); } class DmemWriteTest : public OtbnTest {}; @@ -105,7 +105,7 @@ EXPECT_ABS_WRITE32(base_ + OTBN_DMEM_REG_OFFSET, test_data[0]); EXPECT_ABS_WRITE32(base_ + OTBN_DMEM_REG_OFFSET + 4, test_data[1]); - EXPECT_EQ(otbn_dmem_write(0, test_data.data(), 2), kOtbnErrorOk); + EXPECT_EQ(otbn_dmem_write(0, test_data.data(), 2), kErrorOk); } TEST_F(DmemWriteTest, SuccessWithOffset) { @@ -117,7 +117,7 @@ EXPECT_ABS_WRITE32(base_ + OTBN_DMEM_REG_OFFSET + 4, test_data[0]); EXPECT_ABS_WRITE32(base_ + OTBN_DMEM_REG_OFFSET + 8, test_data[1]); - EXPECT_EQ(otbn_dmem_write(4, test_data.data(), 2), kOtbnErrorOk); + EXPECT_EQ(otbn_dmem_write(4, test_data.data(), 2), kErrorOk); } class DmemReadTest : public OtbnTest {}; @@ -132,7 +132,7 @@ std::array<uint32_t, 2> test_data = {0}; - EXPECT_EQ(otbn_dmem_read(0, test_data.data(), 2), kOtbnErrorOk); + EXPECT_EQ(otbn_dmem_read(0, test_data.data(), 2), kErrorOk); EXPECT_THAT(test_data, ElementsAre(0x12345678, 0xabcdef01)); } @@ -145,7 +145,7 @@ std::array<uint32_t, 2> test_data = {0}; - EXPECT_EQ(otbn_dmem_read(4, test_data.data(), 2), kOtbnErrorOk); + EXPECT_EQ(otbn_dmem_read(4, test_data.data(), 2), kErrorOk); EXPECT_THAT(test_data, ElementsAre(0x12345678, 0xabcdef01)); } @@ -155,14 +155,14 @@ EXPECT_ABS_WRITE32(base_ + OTBN_CTRL_REG_OFFSET, 0x1); EXPECT_ABS_READ32(base_ + OTBN_CTRL_REG_OFFSET, 0x1); - EXPECT_EQ(otbn_set_ctrl_software_errs_fatal(true), kOtbnErrorOk); + EXPECT_EQ(otbn_set_ctrl_software_errs_fatal(true), kErrorOk); } // namespace TEST_F(ControlSoftwareErrorsFatalTest, Failure) { EXPECT_ABS_WRITE32(base_ + OTBN_CTRL_REG_OFFSET, 0x0); EXPECT_ABS_READ32(base_ + OTBN_CTRL_REG_OFFSET, 0x1); - EXPECT_EQ(otbn_set_ctrl_software_errs_fatal(false), kOtbnErrorUnavailable); + EXPECT_EQ(otbn_set_ctrl_software_errs_fatal(false), kErrorOtbnUnavailable); } } // namespace
diff --git a/sw/device/silicon_creator/lib/error.h b/sw/device/silicon_creator/lib/error.h index 5213bd0..7c61843 100644 --- a/sw/device/silicon_creator/lib/error.h +++ b/sw/device/silicon_creator/lib/error.h
@@ -91,7 +91,10 @@ X(kErrorInterrupt, ERROR_(0, kModuleInterrupt, kUnknown)), \ X(kErrorEpmpBadCheck, ERROR_(1, kModuleEpmp, kInternal)), \ X(kErrorOtpBadAlignment, ERROR_(1, kModuleOtp, kInvalidArgument)), \ - X(kErrorOtbnInternal, ERROR_(1, kModuleOtbn, kInternal)), \ + X(kErrorOtbnInvalidArgument, ERROR_(1, kModuleOtbn, kInvalidArgument)), \ + X(kErrorOtbnBadOffsetLen, ERROR_(2, kModuleOtbn, kInvalidArgument)), \ + X(kErrorOtbnExecutionFailed, ERROR_(3, kModuleOtbn, kInternal)), \ + X(kErrorOtbnUnavailable, ERROR_(4, kModuleOtbn, kInternal)), \ X(kErrorFlashCtrlDataRead, ERROR_(1, kModuleFlashCtrl, kInternal)), \ X(kErrorFlashCtrlInfoRead, ERROR_(2, kModuleFlashCtrl, kInternal)), \ X(kErrorFlashCtrlDataWrite, ERROR_(3, kModuleFlashCtrl, kInternal)), \
diff --git a/sw/device/silicon_creator/lib/otbn_util.c b/sw/device/silicon_creator/lib/otbn_util.c index 4970228..2751ee9 100644 --- a/sw/device/silicon_creator/lib/otbn_util.c +++ b/sw/device/silicon_creator/lib/otbn_util.c
@@ -22,7 +22,7 @@ }; } -otbn_error_t otbn_busy_wait_for_done(otbn_t *ctx) { +rom_error_t otbn_busy_wait_for_done(otbn_t *ctx) { while (otbn_is_busy()) { } @@ -30,9 +30,9 @@ otbn_get_err_bits(&err_bits); if (err_bits != kOtbnErrBitsNoError) { ctx->error_bits = err_bits; - return kOtbnErrorExecutionFailed; + return kErrorOtbnExecutionFailed; } - return kOtbnErrorOk; + return kErrorOk; } /** @@ -58,9 +58,9 @@ return true; } -otbn_error_t otbn_load_app(otbn_t *ctx, const otbn_app_t app) { +rom_error_t otbn_load_app(otbn_t *ctx, const otbn_app_t app) { if (!check_app_address_ranges(&app)) { - return kOtbnErrorInvalidArgument; + return kErrorOtbnInvalidArgument; } const size_t imem_num_words = app.imem_end - app.imem_start; @@ -68,38 +68,37 @@ ctx->app_is_loaded = false; - OTBN_RETURN_IF_ERROR(otbn_imem_write(0, app.imem_start, imem_num_words)); + RETURN_IF_ERROR(otbn_imem_write(0, app.imem_start, imem_num_words)); otbn_zero_dmem(); if (data_num_words > 0) { - OTBN_RETURN_IF_ERROR( - otbn_dmem_write(0, app.dmem_data_start, data_num_words)); + RETURN_IF_ERROR(otbn_dmem_write(0, app.dmem_data_start, data_num_words)); } ctx->app = app; ctx->app_is_loaded = true; - return kOtbnErrorOk; + return kErrorOk; } -otbn_error_t otbn_execute_app(otbn_t *ctx) { +rom_error_t otbn_execute_app(otbn_t *ctx) { if (!ctx->app_is_loaded) { - return kOtbnErrorInvalidArgument; + return kErrorOtbnInvalidArgument; } otbn_execute(); - return kOtbnErrorOk; + return kErrorOk; } -otbn_error_t otbn_copy_data_to_otbn(otbn_t *ctx, size_t len, - const uint32_t *src, otbn_addr_t dest) { - OTBN_RETURN_IF_ERROR(otbn_dmem_write(dest, src, len)); +rom_error_t otbn_copy_data_to_otbn(otbn_t *ctx, size_t len, const uint32_t *src, + otbn_addr_t dest) { + RETURN_IF_ERROR(otbn_dmem_write(dest, src, len)); - return kOtbnErrorOk; + return kErrorOk; } -otbn_error_t otbn_copy_data_from_otbn(otbn_t *ctx, size_t len_bytes, - otbn_addr_t src, uint32_t *dest) { - OTBN_RETURN_IF_ERROR(otbn_dmem_read(src, dest, len_bytes)); +rom_error_t otbn_copy_data_from_otbn(otbn_t *ctx, size_t len_bytes, + otbn_addr_t src, uint32_t *dest) { + RETURN_IF_ERROR(otbn_dmem_read(src, dest, len_bytes)); - return kOtbnErrorOk; + return kErrorOk; }
diff --git a/sw/device/silicon_creator/lib/otbn_util.h b/sw/device/silicon_creator/lib/otbn_util.h index e9f027a..c56a7fd 100644 --- a/sw/device/silicon_creator/lib/otbn_util.h +++ b/sw/device/silicon_creator/lib/otbn_util.h
@@ -195,7 +195,7 @@ * @param app The application to load into OTBN. * @return The result of the operation. */ -otbn_error_t otbn_load_app(otbn_t *ctx, const otbn_app_t app); +rom_error_t otbn_load_app(otbn_t *ctx, const otbn_app_t app); /** * Start the OTBN application. @@ -205,7 +205,7 @@ * @param ctx The context object. * @return The result of the operation. */ -otbn_error_t otbn_execute_app(otbn_t *ctx); +rom_error_t otbn_execute_app(otbn_t *ctx); /** * Busy waits for OTBN to be done with its operation. @@ -213,7 +213,7 @@ * @param ctx The context object. * @return The result of the operation. */ -otbn_error_t otbn_busy_wait_for_done(otbn_t *ctx); +rom_error_t otbn_busy_wait_for_done(otbn_t *ctx); /** * Copies data from the CPU memory to OTBN data memory. @@ -224,8 +224,8 @@ * @param src Source of the data to copy. * @return The result of the operation. */ -otbn_error_t otbn_copy_data_to_otbn(otbn_t *ctx, size_t len, - const uint32_t *src, otbn_addr_t dest); +rom_error_t otbn_copy_data_to_otbn(otbn_t *ctx, size_t len, const uint32_t *src, + otbn_addr_t dest); /** * Copies data from OTBN's data memory to CPU memory. @@ -237,22 +237,8 @@ * (preallocated). * @return The result of the operation. */ -otbn_error_t otbn_copy_data_from_otbn(otbn_t *ctx, size_t len, - const otbn_addr_t src, uint32_t *dest); - -/** - * Evaluate an expression and return a mask ROM error if the result is an - * OTBN error. - * - * @param expr_ An expression which results in an otbn_error_t. - */ -#define FOLD_OTBN_ERROR(expr_) \ - do { \ - otbn_error_t local_error_ = expr_; \ - if (local_error_ != kOtbnErrorOk) { \ - return kErrorOtbnInternal; \ - } \ - } while (0) +rom_error_t otbn_copy_data_from_otbn(otbn_t *ctx, size_t len, + const otbn_addr_t src, uint32_t *dest); #ifdef __cplusplus }
diff --git a/sw/device/silicon_creator/lib/sigverify_mod_exp_otbn.c b/sw/device/silicon_creator/lib/sigverify_mod_exp_otbn.c index 40ae288..64816e9 100644 --- a/sw/device/silicon_creator/lib/sigverify_mod_exp_otbn.c +++ b/sw/device/silicon_creator/lib/sigverify_mod_exp_otbn.c
@@ -4,7 +4,6 @@ #include "sw/device/lib/base/macros.h" #include "sw/device/lib/base/memory.h" - #include "sw/device/silicon_creator/lib/drivers/otbn.h" #include "sw/device/silicon_creator/lib/error.h" #include "sw/device/silicon_creator/lib/otbn_util.h" @@ -47,8 +46,9 @@ * @param dst Address of the destination in OTBN's data memory. * @return The result of the operation. */ -static otbn_error_t write_rsa_3072_int_to_otbn( - otbn_t *otbn, const sigverify_rsa_buffer_t *src, otbn_addr_t dst) { +static rom_error_t write_rsa_3072_int_to_otbn(otbn_t *otbn, + const sigverify_rsa_buffer_t *src, + otbn_addr_t dst) { return otbn_copy_data_to_otbn(otbn, kSigVerifyRsaNumWords, src->data, dst); } @@ -60,13 +60,13 @@ * @param dst The destination of the copied data in main memory (preallocated). * @return The result of the operation. */ -static otbn_error_t read_rsa_3072_int_from_otbn(otbn_t *otbn, - const otbn_addr_t src, - sigverify_rsa_buffer_t *dst) { +static rom_error_t read_rsa_3072_int_from_otbn(otbn_t *otbn, + const otbn_addr_t src, + sigverify_rsa_buffer_t *dst) { return otbn_copy_data_from_otbn(otbn, kSigVerifyRsaNumWords, src, dst->data); } -otbn_error_t run_otbn_rsa_3072_modexp( +rom_error_t run_otbn_rsa_3072_modexp( const sigverify_rsa_key_t *public_key, const sigverify_rsa_buffer_t *signature, sigverify_rsa_buffer_t *recovered_message) { @@ -74,35 +74,35 @@ // Initialize OTBN and load the RSA app. otbn_init(&otbn); - OTBN_RETURN_IF_ERROR(otbn_load_app(&otbn, kOtbnAppRsa)); + RETURN_IF_ERROR(otbn_load_app(&otbn, kOtbnAppRsa)); // Set the exponent (e). - OTBN_RETURN_IF_ERROR(otbn_copy_data_to_otbn(&otbn, 1, &public_key->exponent, - kOtbnVarRsaInExp)); + RETURN_IF_ERROR(otbn_copy_data_to_otbn(&otbn, 1, &public_key->exponent, + kOtbnVarRsaInExp)); // Set the modulus (n). - OTBN_RETURN_IF_ERROR( + RETURN_IF_ERROR( write_rsa_3072_int_to_otbn(&otbn, &public_key->n, kOtbnVarRsaInMod)); // Set the signature. - OTBN_RETURN_IF_ERROR( + RETURN_IF_ERROR( write_rsa_3072_int_to_otbn(&otbn, signature, kOtbnVarRsaInBuf)); // Set the precomputed constant m0_inv. - OTBN_RETURN_IF_ERROR(otbn_copy_data_to_otbn( - &otbn, kOtbnWideWordNumWords, public_key->n0_inv, kOtbnVarRsaM0Inv)); + RETURN_IF_ERROR(otbn_copy_data_to_otbn(&otbn, kOtbnWideWordNumWords, + public_key->n0_inv, kOtbnVarRsaM0Inv)); // Start the OTBN routine. - OTBN_RETURN_IF_ERROR(otbn_execute_app(&otbn)); + RETURN_IF_ERROR(otbn_execute_app(&otbn)); // Spin here waiting for OTBN to complete. - OTBN_RETURN_IF_ERROR(otbn_busy_wait_for_done(&otbn)); + RETURN_IF_ERROR(otbn_busy_wait_for_done(&otbn)); // Read recovered message out of OTBN dmem. - OTBN_RETURN_IF_ERROR( + RETURN_IF_ERROR( read_rsa_3072_int_from_otbn(&otbn, kOtbnVarRsaOutBuf, recovered_message)); - return kOtbnErrorOk; + return kErrorOk; } rom_error_t sigverify_mod_exp_otbn(const sigverify_rsa_key_t *key, @@ -112,8 +112,8 @@ return kErrorSigverifyBadExponent; } - // Run OTBN application, and convert the OTBN error to a ROM error if needed. - FOLD_OTBN_ERROR(run_otbn_rsa_3072_modexp(key, sig, result)); + // Run OTBN application. + RETURN_IF_ERROR(run_otbn_rsa_3072_modexp(key, sig, result)); return kErrorOk; }