Software APIs
keymgr_key_derivation_test.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 <stdint.h>
6 
7 #include "sw/device/lib/testing/keymgr_testutils.h"
9 
10 OTTF_DEFINE_TEST_CONFIG();
11 
12 bool test_main(void) {
13  dif_keymgr_t keymgr;
14  dif_kmac_t kmac;
15 
16  // Initialize keymgr and advance to the state specified by the loaded ROM.
17  CHECK_STATUS_OK(keymgr_testutils_initialize(&keymgr, &kmac));
18 
19  const char *state_name;
20  CHECK_STATUS_OK(keymgr_testutils_state_string_get(&keymgr, &state_name));
21 
22  LOG_INFO("Keymgr entered %s State", state_name);
23 
24  CHECK_STATUS_OK(keymgr_testutils_generate_identity(
25  &keymgr,
27  LOG_INFO("Keymgr generated identity at %s State", state_name);
28 
29  dif_keymgr_versioned_key_params_t sideload_params = kKeyVersionedParams;
30 
31  // Get the maximum key version supported by the keymgr in its current state.
32  uint32_t max_key_version;
33  CHECK_STATUS_OK(
34  keymgr_testutils_max_key_version_get(&keymgr, &max_key_version));
35 
36  if (sideload_params.version > max_key_version) {
37  LOG_INFO("Key version %d is greater than the maximum key version %d",
38  sideload_params.version, max_key_version);
39  LOG_INFO("Setting key version to the maximum key version %d",
40  max_key_version);
41  sideload_params.version = max_key_version;
42  }
43 
44  // Generate sw versioned key.
45  CHECK_STATUS_OK(
46  keymgr_testutils_generate_versioned_key(&keymgr, sideload_params));
47  LOG_INFO("Keymgr generated SW output at %s State", state_name);
48 
49  // Generate sideload keys for 3 HW interfaces - Kmac, Aes, Otbn.
50  sideload_params.dest = kDifKeymgrVersionedKeyDestKmac;
51  CHECK_STATUS_OK(
52  keymgr_testutils_generate_versioned_key(&keymgr, sideload_params));
53  LOG_INFO("Keymgr generated HW output for Kmac at %s State", state_name);
54 
55  sideload_params.dest = kDifKeymgrVersionedKeyDestAes;
56  CHECK_STATUS_OK(
57  keymgr_testutils_generate_versioned_key(&keymgr, sideload_params));
58  LOG_INFO("Keymgr generated HW output for Aes at %s State", state_name);
59 
60  sideload_params.dest = kDifKeymgrVersionedKeyDestOtbn;
61  CHECK_STATUS_OK(
62  keymgr_testutils_generate_versioned_key(&keymgr, sideload_params));
63  LOG_INFO("Keymgr generated HW output for Otbn at %s State", state_name);
64 
65  CHECK_STATUS_OK(keymgr_testutils_disable(&keymgr));
66  CHECK_STATUS_OK(
67  keymgr_testutils_check_state(&keymgr, kDifKeymgrStateDisabled));
68  LOG_INFO("Keymgr entered Disabled state");
69 
70  return true;
71 }