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