diff --git a/sw/device/lib/dif/dif_aes.c b/sw/device/lib/dif/dif_aes.c
index 9a1acdf..e37199d 100644
--- a/sw/device/lib/dif/dif_aes.c
+++ b/sw/device/lib/dif/dif_aes.c
@@ -134,12 +134,12 @@
  * @param cipher_mode_val Cipher Mode register write value.
  * @return `dif_aes_start_result_t`.
  */
-static dif_aes_start_result_t configure(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    aes_mode_field_val_t cipher_mode_val) {
+static dif_aes_result_t configure(const dif_aes_t *aes,
+                                  const dif_aes_transaction_t *transaction,
+                                  aes_mode_field_val_t cipher_mode_val) {
   aes_key_field_val_t key_len_val = key_to_field(transaction->key_len);
   if (key_len_val == kAesKeyFieldValInvalid) {
-    return kDifAesStartError;
+    return kDifAesError;
   }
 
   uint32_t reg =
@@ -172,7 +172,7 @@
 
   aes_shadowed_write(aes->params.base_addr, AES_CTRL_SHADOWED_REG_OFFSET, reg);
 
-  return kDifAesStartOk;
+  return kDifAesOk;
 }
 
 /**
@@ -202,9 +202,9 @@
   return kDifAesOk;
 }
 
-dif_aes_reset_result_t dif_aes_reset(const dif_aes_t *aes) {
+dif_aes_result_t dif_aes_reset(const dif_aes_t *aes) {
   if (aes == NULL) {
-    return kDifAesResetBadArg;
+    return kDifAesBadArg;
   }
 
   aes_clear_internal_state(aes);
@@ -221,23 +221,22 @@
 
   aes_shadowed_write(aes->params.base_addr, AES_CTRL_SHADOWED_REG_OFFSET, reg);
 
-  return kDifAesResetOk;
+  return kDifAesOk;
 }
 
-dif_aes_start_result_t dif_aes_start_ecb(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    dif_aes_key_share_t key) {
+dif_aes_result_t dif_aes_start_ecb(const dif_aes_t *aes,
+                                   const dif_aes_transaction_t *transaction,
+                                   dif_aes_key_share_t key) {
   if (aes == NULL || transaction == NULL) {
-    return kDifAesStartBadArg;
+    return kDifAesBadArg;
   }
 
   if (!aes_idle(aes)) {
-    return kDifAesStartBusy;
+    return kDifAesBusy;
   }
 
-  dif_aes_start_result_t result =
-      configure(aes, transaction, kAesModeFieldValEcb);
-  if (result != kDifAesStartOk) {
+  dif_aes_result_t result = configure(aes, transaction, kAesModeFieldValEcb);
+  if (result != kDifAesOk) {
     return result;
   }
 
@@ -247,23 +246,22 @@
   aes_set_multireg(aes, &key.share1[0], AES_KEY_SHARE1_MULTIREG_COUNT,
                    AES_KEY_SHARE1_0_REG_OFFSET);
 
-  return kDifAesStartOk;
+  return kDifAesOk;
 }
 
-dif_aes_start_result_t dif_aes_start_cbc(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    dif_aes_key_share_t key, dif_aes_iv_t iv) {
+dif_aes_result_t dif_aes_start_cbc(const dif_aes_t *aes,
+                                   const dif_aes_transaction_t *transaction,
+                                   dif_aes_key_share_t key, dif_aes_iv_t iv) {
   if (aes == NULL || transaction == NULL) {
-    return kDifAesStartBadArg;
+    return kDifAesBadArg;
   }
 
   if (!aes_idle(aes)) {
-    return kDifAesStartBusy;
+    return kDifAesBusy;
   }
 
-  dif_aes_start_result_t result =
-      configure(aes, transaction, kAesModeFieldValCbc);
-  if (result != kDifAesStartOk) {
+  dif_aes_result_t result = configure(aes, transaction, kAesModeFieldValCbc);
+  if (result != kDifAesOk) {
     return result;
   }
 
@@ -275,23 +273,22 @@
 
   aes_set_multireg(aes, &iv.iv[0], AES_IV_MULTIREG_COUNT, AES_IV_0_REG_OFFSET);
 
-  return kDifAesStartOk;
+  return kDifAesOk;
 }
 
-dif_aes_start_result_t dif_aes_start_ctr(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    dif_aes_key_share_t key, dif_aes_iv_t iv) {
+dif_aes_result_t dif_aes_start_ctr(const dif_aes_t *aes,
+                                   const dif_aes_transaction_t *transaction,
+                                   dif_aes_key_share_t key, dif_aes_iv_t iv) {
   if (aes == NULL || transaction == NULL) {
-    return kDifAesStartBadArg;
+    return kDifAesBadArg;
   }
 
   if (!aes_idle(aes)) {
-    return kDifAesStartBusy;
+    return kDifAesBusy;
   }
 
-  dif_aes_start_result_t result =
-      configure(aes, transaction, kAesModeFieldValCtr);
-  if (result != kDifAesStartOk) {
+  dif_aes_result_t result = configure(aes, transaction, kAesModeFieldValCtr);
+  if (result != kDifAesOk) {
     return result;
   }
 
@@ -303,47 +300,47 @@
 
   aes_set_multireg(aes, &iv.iv[0], AES_IV_MULTIREG_COUNT, AES_IV_0_REG_OFFSET);
 
-  return kDifAesStartOk;
+  return kDifAesOk;
 }
 
-dif_aes_end_result_t dif_aes_end(const dif_aes_t *aes) {
+dif_aes_result_t dif_aes_end(const dif_aes_t *aes) {
   if (aes == NULL) {
-    return kDifAesEndBadArg;
+    return kDifAesBadArg;
   }
 
   if (!aes_idle(aes)) {
-    return kDifAesEndBusy;
+    return kDifAesBusy;
   }
 
   aes_clear_internal_state(aes);
 
-  return kDifAesEndOk;
+  return kDifAesOk;
 }
 
-dif_aes_load_data_result_t dif_aes_load_data(const dif_aes_t *aes,
-                                             const dif_aes_data_t data) {
+dif_aes_result_t dif_aes_load_data(const dif_aes_t *aes,
+                                   const dif_aes_data_t data) {
   if (aes == NULL) {
-    return kDifAesLoadDataBadArg;
+    return kDifAesBadArg;
   }
 
   if (!aes_input_ready(aes)) {
-    return kDifAesLoadDataBusy;
+    return kDifAesBusy;
   }
 
   aes_set_multireg(aes, &data.data[0], AES_DATA_IN_MULTIREG_COUNT,
                    AES_DATA_IN_0_REG_OFFSET);
 
-  return kDifAesLoadDataOk;
+  return kDifAesOk;
 }
 
-dif_aes_read_output_result_t dif_aes_read_output(const dif_aes_t *aes,
-                                                 dif_aes_data_t *data) {
+dif_aes_result_t dif_aes_read_output(const dif_aes_t *aes,
+                                     dif_aes_data_t *data) {
   if (aes == NULL || data == NULL) {
-    return kDifAesReadOutputBadArg;
+    return kDifAesBadArg;
   }
 
   if (!aes_output_valid(aes)) {
-    return kDifAesReadOutputInvalid;
+    return kDifAesOutputInvalid;
   }
 
   for (int i = 0; i < AES_DATA_OUT_MULTIREG_COUNT; ++i) {
@@ -352,7 +349,7 @@
     data->data[i] = mmio_region_read32(aes->params.base_addr, offset);
   }
 
-  return kDifAesReadOutputOk;
+  return kDifAesOk;
 }
 
 dif_aes_result_t dif_aes_trigger(const dif_aes_t *aes,
diff --git a/sw/device/lib/dif/dif_aes.h b/sw/device/lib/dif/dif_aes.h
index 968d3f1..bca4e5f 100644
--- a/sw/device/lib/dif/dif_aes.h
+++ b/sw/device/lib/dif/dif_aes.h
@@ -5,11 +5,6 @@
 #ifndef OPENTITAN_SW_DEVICE_LIB_DIF_DIF_AES_H_
 #define OPENTITAN_SW_DEVICE_LIB_DIF_DIF_AES_H_
 
-/**
- * @file
- * @brief <a href="/hw/ip/aes/doc/">AES</a> Device Interface Functions
- */
-
 #include <stdbool.h>
 #include <stdint.h>
 
@@ -21,6 +16,10 @@
 #endif  // __cplusplus
 
 /**
+ *
+ * @file
+ * @brief <a href="/hw/ip/aes/doc/">AES</a> Device Interface Functions
+ *
  * This API assumes transactional nature of work, where the peripheral is
  * configured once per message (data consisting of 1..N 128-bit blocks), and
  * then "de-initialised" when this message has been fully encrypted/decrypted.
@@ -212,6 +211,14 @@
    * When this value is returned, no hardware operations occurred.
    */
   kDifAesBadArg = 2,
+  /**
+   * Device is busy, and cannot perform the requested operation.
+   */
+  kDifAesBusy,
+  /**
+   * The AES unit has no valid output.
+   */
+  kDifAesOutputInvalid,
 } dif_aes_result_t;
 
 /**
@@ -227,31 +234,6 @@
 dif_aes_result_t dif_aes_init(dif_aes_params_t params, dif_aes_t *aes);
 
 /**
- * The result of a AES reset operation.
- */
-typedef enum dif_aes_reset_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifAesResetOk = kDifAesOk,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifAesResetError = kDifAesError,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifAesResetBadArg = kDifAesBadArg,
-  /**
-   * Device is busy, and cannot perform the requested operation.
-   */
-  kDifAesResetBusy,
-} dif_aes_reset_result_t;
-
-/**
  * Resets an instance of AES.
  *
  * Clears the internal state along with the interface registers.
@@ -260,32 +242,7 @@
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_reset_result_t dif_aes_reset(const dif_aes_t *aes);
-
-/**
- * The result of a AES start operation.
- */
-typedef enum dif_aes_start_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifAesStartOk = kDifAesOk,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifAesStartError = kDifAesError,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifAesStartBadArg = kDifAesBadArg,
-  /**
-   * Device is busy, and cannot perform the requested operation.
-   */
-  kDifAesStartBusy,
-} dif_aes_start_result_t;
+dif_aes_result_t dif_aes_reset(const dif_aes_t *aes);
 
 /**
  * Begins an AES transaction in ECB mode.
@@ -299,18 +256,17 @@
  * Note: it is discouraged to use this cipher mode, due to inpractical amount
  *       of different keys required to encrypt/decrypt multi-block messages.
  *
- * The peripheral must be in IDLE state for this operation to take
- * effect, and will return `kDifAesStartBusy` if this condition is not
- * met.
+ * The peripheral must be in IDLE state for this operation to take effect, and
+ * will return `kDifAesBusy` if this condition is not met.
  *
  * @param aes AES state data.
  * @param transaction Configuration data.
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_start_result_t dif_aes_start_ecb(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    dif_aes_key_share_t key);
+dif_aes_result_t dif_aes_start_ecb(const dif_aes_t *aes,
+                                   const dif_aes_transaction_t *transaction,
+                                   dif_aes_key_share_t key);
 
 /**
  * Begins an AES transaction in CBC mode.
@@ -335,9 +291,9 @@
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_start_result_t dif_aes_start_cbc(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    dif_aes_key_share_t key, dif_aes_iv_t iv);
+dif_aes_result_t dif_aes_start_cbc(const dif_aes_t *aes,
+                                   const dif_aes_transaction_t *transaction,
+                                   dif_aes_key_share_t key, dif_aes_iv_t iv);
 
 /**
  * Begins an AES transaction in CTR mode.
@@ -360,34 +316,9 @@
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_start_result_t dif_aes_start_ctr(
-    const dif_aes_t *aes, const dif_aes_transaction_t *transaction,
-    dif_aes_key_share_t key, dif_aes_iv_t iv);
-
-/**
- * The result of an AES end operation.
- */
-typedef enum dif_aes_end_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifAesEndOk = kDifAesOk,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifAesEndError = kDifAesError,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifAesEndBadArg = kDifAesBadArg,
-  /**
-   * Device is busy, and cannot perform the requested operation.
-   */
-  kDifAesEndBusy,
-} dif_aes_end_result_t;
+dif_aes_result_t dif_aes_start_ctr(const dif_aes_t *aes,
+                                   const dif_aes_transaction_t *transaction,
+                                   dif_aes_key_share_t key, dif_aes_iv_t iv);
 
 /**
  * Ends an AES transaction.
@@ -402,32 +333,7 @@
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_end_result_t dif_aes_end(const dif_aes_t *aes);
-
-/**
- * The result of an AES load data operation.
- */
-typedef enum dif_aes_load_data_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifAesLoadDataOk = kDifAesOk,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifAesLoadDataError = kDifAesError,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifAesLoadDataBadArg = kDifAesBadArg,
-  /**
-   * Device is busy, and cannot perform the requested operation.
-   */
-  kDifAesLoadDataBusy,
-} dif_aes_load_data_result_t;
+dif_aes_result_t dif_aes_end(const dif_aes_t *aes);
 
 /**
  * Loads AES Input Data.
@@ -443,33 +349,8 @@
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_load_data_result_t dif_aes_load_data(const dif_aes_t *aes,
-                                             const dif_aes_data_t data);
-
-/**
- * The result of an AES data read operation.
- */
-typedef enum dif_aes_read_data_result {
-  /**
-   * Indicates that the operation succeeded.
-   */
-  kDifAesReadOutputOk = kDifAesOk,
-  /**
-   * Indicates some unspecified failure.
-   */
-  kDifAesReadOutputError = kDifAesError,
-  /**
-   * Indicates that some parameter passed into a function failed a
-   * precondition.
-   *
-   * When this value is returned, no hardware operations occurred.
-   */
-  kDifAesReadOutputBadArg = kDifAesBadArg,
-  /**
-   * The AES unit has no valid output.
-   */
-  kDifAesReadOutputInvalid,
-} dif_aes_read_output_result_t;
+dif_aes_result_t dif_aes_load_data(const dif_aes_t *aes,
+                                   const dif_aes_data_t data);
 
 /**
  * Reads AES Output Data.
@@ -483,8 +364,8 @@
  * @return The result of the operation.
  */
 DIF_WARN_UNUSED_RESULT
-dif_aes_read_output_result_t dif_aes_read_output(const dif_aes_t *aes,
-                                                 dif_aes_data_t *data);
+dif_aes_result_t dif_aes_read_output(const dif_aes_t *aes,
+                                     dif_aes_data_t *data);
 
 /**
  * AES Trigger flags.
diff --git a/sw/device/tests/dif/dif_aes_smoketest.c b/sw/device/tests/dif/dif_aes_smoketest.c
index 318c09c..4daf33b 100644
--- a/sw/device/tests/dif/dif_aes_smoketest.c
+++ b/sw/device/tests/dif/dif_aes_smoketest.c
@@ -83,7 +83,7 @@
       .base_addr = mmio_region_from_addr(TOP_EARLGREY_AES_BASE_ADDR),
   };
   CHECK(dif_aes_init(params, &aes) == kDifAesOk);
-  CHECK(dif_aes_reset(&aes) == kDifAesResetOk);
+  CHECK(dif_aes_reset(&aes) == kDifAesOk);
 
   // Mask the key. Note that this should not be done manually. Software is
   // expected to get the key in two shares right from the beginning.
@@ -103,7 +103,7 @@
       .mode = kDifAesModeEncrypt,
       .operation = kDifAesOperationAuto,
   };
-  CHECK(dif_aes_start_ecb(&aes, &transaction, key) == kDifAesStartOk);
+  CHECK(dif_aes_start_ecb(&aes, &transaction, key) == kDifAesOk);
 
   // "Convert" plain data byte arrays to `dif_aes_data_t`.
   dif_aes_data_t in_data_plain;
@@ -112,16 +112,16 @@
   // Load the plain text to trigger the encryption operation.
   while (!aes_input_ready(&aes)) {
   }
-  CHECK(dif_aes_load_data(&aes, in_data_plain) == kDifAesLoadDataOk);
+  CHECK(dif_aes_load_data(&aes, in_data_plain) == kDifAesOk);
 
   // Read out the produced cipher text.
   dif_aes_data_t out_data_cipher;
   while (!aes_output_valid(&aes)) {
   }
-  CHECK(dif_aes_read_output(&aes, &out_data_cipher) == kDifAesReadOutputOk);
+  CHECK(dif_aes_read_output(&aes, &out_data_cipher) == kDifAesOk);
 
   // Finish the ECB encryption transaction.
-  CHECK(dif_aes_end(&aes) == kDifAesEndOk);
+  CHECK(dif_aes_end(&aes) == kDifAesOk);
 
   // Check the produced cipher text against the reference.
   uint32_t cipher_text_gold_words[TEXT_LENGTH_IN_WORDS];
@@ -134,22 +134,22 @@
 
   // Setup ECB decryption transaction.
   transaction.mode = kDifAesModeDecrypt;
-  CHECK(dif_aes_start_ecb(&aes, &transaction, key) == kDifAesStartOk);
+  CHECK(dif_aes_start_ecb(&aes, &transaction, key) == kDifAesOk);
 
   // Load the previously produced cipher text to start the decryption operation.
   while (!aes_input_ready(&aes)) {
   }
-  CHECK(dif_aes_load_data(&aes, out_data_cipher) == kDifAesLoadDataOk);
+  CHECK(dif_aes_load_data(&aes, out_data_cipher) == kDifAesOk);
 
   // Read out the produced plain text.
 
   dif_aes_data_t out_data_plain;
   while (!aes_output_valid(&aes)) {
   }
-  CHECK(dif_aes_read_output(&aes, &out_data_plain) == kDifAesReadOutputOk);
+  CHECK(dif_aes_read_output(&aes, &out_data_plain) == kDifAesOk);
 
   // Finish the ECB encryption transaction.
-  CHECK(dif_aes_end(&aes) == kDifAesEndOk);
+  CHECK(dif_aes_end(&aes) == kDifAesOk);
 
   // Check the produced plain text against the reference.
   uint32_t plain_text_gold_words[TEXT_LENGTH_IN_WORDS];
