Software APIs
sigverify_keys_ecdsa_p256.c
1 // Copyright lowRISC contributors (OpenTitan project).
2 // Licensed under the Apache License, Version 2.0, see LICENSE for details.
3 // SPDX-License-Identifier: Apache-2.0
4 
5 #include "sw/device/silicon_creator/rom/sigverify_keys_ecdsa_p256.h"
6 
7 #include "sw/device/silicon_creator/rom/sigverify_otp_keys.h"
8 
9 #include "otp_ctrl_regs.h"
10 
11 rom_error_t sigverify_ecdsa_p256_key_get(
12  const sigverify_otp_key_ctx_t *sigverify_ctx, uint32_t key_id,
13  lifecycle_state_t lc_state, const ecdsa_p256_public_key_t **key) {
14  *key = NULL;
15  rom_error_t error = kErrorSigverifyBadEcdsaKey;
16 
17  const sigverify_rom_key_header_t *rom_key = NULL;
18  error = sigverify_otp_keys_get(
20  .key_id = key_id,
21  .lc_state = lc_state,
22  .key_array =
23  (const sigverify_rom_key_header_t *)(sigverify_ctx->keys.ecdsa),
24  .key_cnt = kSigVerifyOtpKeysEcdsaCount,
25  .key_size = sizeof(sigverify_rom_ecdsa_p256_key_t),
26  .key_states = (uint32_t *)&sigverify_ctx->states.ecdsa[0],
27  },
28  &rom_key);
29  if (error == kErrorOk) {
30  *key = &((const sigverify_rom_ecdsa_p256_key_t *)rom_key)->entry.key;
31  }
32 
33  if (error != kErrorOk) {
34  return kErrorSigverifyBadEcdsaKey;
35  }
36  return error;
37 }