DPE: Add index field to layer_context_t

Both layer_ctx and layer_idx are used throughout and passed
as input to various functions. Add index field to the
layer_ctx so that only pointer to context is required
to pass and implementation stays consistent.

Signed-off-by: Maulik Patel <maulik.patel@arm.com>
Change-Id: I1603c82ef1c11d558e7f0bafecb1e2eecfe09885
diff --git a/partitions/dice_protection_environment/dpe_context_mngr.c b/partitions/dice_protection_environment/dpe_context_mngr.c
index 02e5feb..bebe779 100644
--- a/partitions/dice_protection_environment/dpe_context_mngr.c
+++ b/partitions/dice_protection_environment/dpe_context_mngr.c
@@ -80,6 +80,7 @@
 
 static void invalidate_layer(int i)
 {
+    layer_ctx_array[i].idx = i;
     layer_ctx_array[i].state = LAYER_STATE_CLOSED;
     layer_ctx_array[i].parent_layer_idx = INVALID_LAYER_IDX;
     layer_ctx_array[i].is_cdi_to_be_exported = false;
@@ -207,7 +208,7 @@
     return PSA_SUCCESS;
 }
 
-static psa_status_t compute_layer_cdi_attest_input(uint16_t curr_layer_idx)
+static psa_status_t compute_layer_cdi_attest_input(struct layer_context_t *layer_ctx)
 {
     psa_status_t status;
     uint8_t component_ctx_data[CONTEXT_DATA_MAX_SIZE];
@@ -227,7 +228,7 @@
      * and hash it.
      */
     for (idx = 0; idx < MAX_NUM_OF_COMPONENTS; idx++) {
-        if (component_ctx_array[idx].linked_layer_idx == curr_layer_idx) {
+        if (component_ctx_array[idx].linked_layer_idx == layer_ctx->idx) {
             /* This component belongs to current layer */
             /* Concatenate all context data for this component */
             status = get_component_data_for_attest_cdi(component_ctx_data,
@@ -248,8 +249,8 @@
     }
 
     status = psa_hash_finish(&hash_op,
-                             &layer_ctx_array[curr_layer_idx].attest_cdi_hash_input[0],
-                             sizeof(layer_ctx_array[curr_layer_idx].attest_cdi_hash_input),
+                             &layer_ctx->attest_cdi_hash_input[0],
+                             sizeof(layer_ctx->attest_cdi_hash_input),
                              &hash_len);
 
     assert(hash_len == DPE_HASH_ALG_SIZE);
@@ -289,14 +290,14 @@
     return DPE_NO_ERROR;
 }
 
-static dpe_error_t prepare_layer_certificate(uint16_t layer_idx)
+static dpe_error_t prepare_layer_certificate(struct layer_context_t *layer_ctx)
 {
-    uint16_t parent_layer_idx;
+    uint16_t layer_idx, parent_layer_idx;
     psa_status_t status;
-    struct layer_context_t *layer_ctx, *parent_layer_ctx;
+    struct layer_context_t *parent_layer_ctx;
 
+    layer_idx = layer_ctx->idx;
     assert(layer_idx < MAX_NUM_OF_LAYERS);
-    layer_ctx = &layer_ctx_array[layer_idx];
     parent_layer_idx = layer_ctx->parent_layer_idx;
     assert(parent_layer_idx < MAX_NUM_OF_LAYERS);
     parent_layer_ctx = &layer_ctx_array[parent_layer_idx];
@@ -307,7 +308,7 @@
 
         /* Except for RoT Layer with no external public key supplied */
 
-        status = compute_layer_cdi_attest_input(layer_idx);
+        status = compute_layer_cdi_attest_input(layer_ctx);
         if (status != PSA_SUCCESS) {
             return DPE_INTERNAL_ERROR;
         }
@@ -656,14 +657,14 @@
 
         /* Finalise the layer */
         layer_ctx->state = LAYER_STATE_FINALISED;
-        err = prepare_layer_certificate(linked_layer_idx);
+        err = prepare_layer_certificate(layer_ctx);
         if (err != DPE_NO_ERROR) {
             return err;
         }
 
         if (return_certificate) {
             /* Encode and return generated layer certificate */
-            err = encode_layer_certificate(linked_layer_idx,
+            err = encode_layer_certificate(layer_ctx,
                                            new_certificate_buf,
                                            new_certificate_buf_size,
                                            new_certificate_actual_size);
@@ -846,12 +847,12 @@
      * derive context command
      */
     /* Create leaf certificate */
-    err = prepare_layer_certificate(input_layer_idx);
+    err = prepare_layer_certificate(layer_ctx);
     if (err != DPE_NO_ERROR) {
         return err;
     }
 
-    err = encode_layer_certificate(input_layer_idx,
+    err = encode_layer_certificate(layer_ctx,
                                    certificate_buf,
                                    certificate_buf_size,
                                    certificate_actual_size);
@@ -935,7 +936,7 @@
         return DPE_INVALID_ARGUMENT;
     }
 
-    err = get_certificate_chain(input_layer_idx,
+    err = get_certificate_chain(layer_ctx,
                                 certificate_chain_buf,
                                 certificate_chain_buf_size,
                                 certificate_chain_actual_size);