1cb1b1ecdSJorge Ramirez-Ortiz // SPDX-License-Identifier: BSD-3-Clause
2cb1b1ecdSJorge Ramirez-Ortiz /*
3cb1b1ecdSJorge Ramirez-Ortiz * Copyright (C) Foundries Ltd. 2020 - All Rights Reserved
4cb1b1ecdSJorge Ramirez-Ortiz * Author: Jorge Ramirez <jorge@foundries.io>
5cb1b1ecdSJorge Ramirez-Ortiz */
6cb1b1ecdSJorge Ramirez-Ortiz
7*ff0c5d42SJorge Ramirez-Ortiz #include <crypto/crypto_se.h>
8cb1b1ecdSJorge Ramirez-Ortiz #include <kernel/pseudo_ta.h>
9*ff0c5d42SJorge Ramirez-Ortiz #include <pta_scp03.h>
10cb1b1ecdSJorge Ramirez-Ortiz
11*ff0c5d42SJorge Ramirez-Ortiz #define PTA_NAME "pta.scp03"
12cb1b1ecdSJorge Ramirez-Ortiz
invoke_command(void * session_context __unused,uint32_t command_id,uint32_t pt,TEE_Param params[TEE_NUM_PARAMS])13*ff0c5d42SJorge Ramirez-Ortiz static TEE_Result invoke_command(void *session_context __unused,
14*ff0c5d42SJorge Ramirez-Ortiz uint32_t command_id, uint32_t pt,
15cb1b1ecdSJorge Ramirez-Ortiz TEE_Param params[TEE_NUM_PARAMS])
16cb1b1ecdSJorge Ramirez-Ortiz {
17cb1b1ecdSJorge Ramirez-Ortiz const uint32_t exp_pt = TEE_PARAM_TYPES(TEE_PARAM_TYPE_VALUE_INPUT,
18cb1b1ecdSJorge Ramirez-Ortiz TEE_PARAM_TYPE_NONE,
19cb1b1ecdSJorge Ramirez-Ortiz TEE_PARAM_TYPE_NONE,
20cb1b1ecdSJorge Ramirez-Ortiz TEE_PARAM_TYPE_NONE);
21*ff0c5d42SJorge Ramirez-Ortiz bool rotate_keys = false;
22cb1b1ecdSJorge Ramirez-Ortiz
23cb1b1ecdSJorge Ramirez-Ortiz FMSG("command entry point for pseudo-TA \"%s\"", PTA_NAME);
24cb1b1ecdSJorge Ramirez-Ortiz
25cb1b1ecdSJorge Ramirez-Ortiz if (pt != exp_pt)
26cb1b1ecdSJorge Ramirez-Ortiz return TEE_ERROR_BAD_PARAMETERS;
27cb1b1ecdSJorge Ramirez-Ortiz
28*ff0c5d42SJorge Ramirez-Ortiz switch (command_id) {
29cb1b1ecdSJorge Ramirez-Ortiz case PTA_CMD_ENABLE_SCP03:
30*ff0c5d42SJorge Ramirez-Ortiz if (params[0].value.a == PTA_SCP03_SESSION_ROTATE_KEYS)
31*ff0c5d42SJorge Ramirez-Ortiz rotate_keys = true;
32*ff0c5d42SJorge Ramirez-Ortiz
33*ff0c5d42SJorge Ramirez-Ortiz return crypto_se_enable_scp03(rotate_keys);
34cb1b1ecdSJorge Ramirez-Ortiz default:
35cb1b1ecdSJorge Ramirez-Ortiz break;
36cb1b1ecdSJorge Ramirez-Ortiz }
37cb1b1ecdSJorge Ramirez-Ortiz
38cb1b1ecdSJorge Ramirez-Ortiz return TEE_ERROR_NOT_IMPLEMENTED;
39cb1b1ecdSJorge Ramirez-Ortiz }
40cb1b1ecdSJorge Ramirez-Ortiz
41cb1b1ecdSJorge Ramirez-Ortiz pseudo_ta_register(.uuid = PTA_SCP03_UUID, .name = PTA_NAME,
42cb1b1ecdSJorge Ramirez-Ortiz .flags = PTA_DEFAULT_FLAGS,
43cb1b1ecdSJorge Ramirez-Ortiz .invoke_command_entry_point = invoke_command);
44