xref: /arm-trusted-firmware/plat/arm/board/tc/rotpk_test.c (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2023, Arm Limited. All rights reserved.
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #include <stdint.h>
8*91f16700Schasinglulu #include <stdio.h>
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #include <drivers/arm/rss_comms.h>
11*91f16700Schasinglulu #include <plat/common/platform.h>
12*91f16700Schasinglulu #include <rss_platform_api.h>
13*91f16700Schasinglulu #include <tc_plat.h>
14*91f16700Schasinglulu 
15*91f16700Schasinglulu static void print_hex(const char *key_id_name, size_t key_size, const uint8_t *key_buf)
16*91f16700Schasinglulu {
17*91f16700Schasinglulu 	printf("%s = ", key_id_name);
18*91f16700Schasinglulu 	for (int i = 0; i < key_size; i++) {
19*91f16700Schasinglulu 		printf("%02x", key_buf[i]);
20*91f16700Schasinglulu 	}
21*91f16700Schasinglulu 	printf("\n\n");
22*91f16700Schasinglulu }
23*91f16700Schasinglulu 
24*91f16700Schasinglulu int rotpk_test(void)
25*91f16700Schasinglulu {
26*91f16700Schasinglulu 	psa_status_t status;
27*91f16700Schasinglulu 	uint8_t key_buf[128];
28*91f16700Schasinglulu 	size_t key_size;
29*91f16700Schasinglulu 
30*91f16700Schasinglulu 	struct key_id_info key_ids[3] = {
31*91f16700Schasinglulu 	       {.key_id = RSS_BUILTIN_KEY_ID_HOST_S_ROTPK,  .key_id_name = "Secure-ROTPK"},
32*91f16700Schasinglulu 	       {.key_id = RSS_BUILTIN_KEY_ID_HOST_NS_ROTPK,  .key_id_name = "NS-ROTPK"},
33*91f16700Schasinglulu 	       {.key_id = RSS_BUILTIN_KEY_ID_HOST_CCA_ROTPK,  .key_id_name = "CCA-ROTPK"}
34*91f16700Schasinglulu 	};
35*91f16700Schasinglulu 
36*91f16700Schasinglulu 	status = rss_comms_init(PLAT_RSS_AP_SND_MHU_BASE, PLAT_RSS_AP_RCV_MHU_BASE);
37*91f16700Schasinglulu 	if (status != PSA_SUCCESS) {
38*91f16700Schasinglulu 		printf("Failed to initialize RSS communication channel - psa_status = %d\n", status);
39*91f16700Schasinglulu 		return -1;
40*91f16700Schasinglulu 	}
41*91f16700Schasinglulu 
42*91f16700Schasinglulu 	for (int i = 0; i < ARRAY_SIZE(key_ids); i++) {
43*91f16700Schasinglulu 		status = rss_platform_key_read(key_ids[i].key_id, key_buf,
44*91f16700Schasinglulu 			       sizeof(key_buf), &key_size);
45*91f16700Schasinglulu 		if (status != PSA_SUCCESS) {
46*91f16700Schasinglulu 			printf("Failed to retrieve %s - psa_status = %d\n", key_ids[i].key_id_name, status);
47*91f16700Schasinglulu 			return -1;
48*91f16700Schasinglulu 		}
49*91f16700Schasinglulu 		print_hex(key_ids[i].key_id_name, key_size, key_buf);
50*91f16700Schasinglulu 	}
51*91f16700Schasinglulu 
52*91f16700Schasinglulu 	printf("Passed rotpk_test\n");
53*91f16700Schasinglulu 
54*91f16700Schasinglulu 	return 0;
55*91f16700Schasinglulu }
56