1f7d7fcd9SEtienne Carriere // SPDX-License-Identifier: BSD-2-Clause 2f7d7fcd9SEtienne Carriere /* 3f7d7fcd9SEtienne Carriere * Copyright (c) 2018-2020, Linaro Limited 4f7d7fcd9SEtienne Carriere */ 5f7d7fcd9SEtienne Carriere 6f7d7fcd9SEtienne Carriere #include <pkcs11_ta.h> 7f7d7fcd9SEtienne Carriere #include <string.h> 8f7d7fcd9SEtienne Carriere #include <tee_internal_api.h> 9f7d7fcd9SEtienne Carriere #include <util.h> 10f7d7fcd9SEtienne Carriere 11f7d7fcd9SEtienne Carriere #include "pkcs11_helpers.h" 12f7d7fcd9SEtienne Carriere 13f7d7fcd9SEtienne Carriere static const char __maybe_unused unknown[] = "<unknown-identifier>"; 14f7d7fcd9SEtienne Carriere 15f7d7fcd9SEtienne Carriere struct any_id { 16f7d7fcd9SEtienne Carriere uint32_t id; 17f7d7fcd9SEtienne Carriere #if CFG_TEE_TA_LOG_LEVEL > 0 18f7d7fcd9SEtienne Carriere const char *string; 19f7d7fcd9SEtienne Carriere #endif 20f7d7fcd9SEtienne Carriere }; 21f7d7fcd9SEtienne Carriere 22f7d7fcd9SEtienne Carriere /* 23f7d7fcd9SEtienne Carriere * Macro PKCS11_ID() can be used to define cells in ID list arrays 24f7d7fcd9SEtienne Carriere * or ID/string conversion arrays. 25f7d7fcd9SEtienne Carriere */ 26f7d7fcd9SEtienne Carriere #if CFG_TEE_TA_LOG_LEVEL > 0 27f7d7fcd9SEtienne Carriere #define PKCS11_ID(_id) { .id = _id, .string = #_id } 28f7d7fcd9SEtienne Carriere #else 29f7d7fcd9SEtienne Carriere #define PKCS11_ID(_id) { .id = _id } 30f7d7fcd9SEtienne Carriere #endif 31f7d7fcd9SEtienne Carriere 32f7d7fcd9SEtienne Carriere #define ID2STR(id, table, prefix) \ 33f7d7fcd9SEtienne Carriere id2str(id, table, ARRAY_SIZE(table), prefix) 34f7d7fcd9SEtienne Carriere 3560290f69SEtienne Carriere #if CFG_TEE_TA_LOG_LEVEL > 0 36f7d7fcd9SEtienne Carriere /* Convert a PKCS11 ID into its label string */ 3760290f69SEtienne Carriere static const char *id2str(uint32_t id, const struct any_id *table, 38f7d7fcd9SEtienne Carriere size_t count, const char *prefix) 39f7d7fcd9SEtienne Carriere { 40f7d7fcd9SEtienne Carriere size_t n = 0; 41f7d7fcd9SEtienne Carriere const char *str = NULL; 42f7d7fcd9SEtienne Carriere 43f7d7fcd9SEtienne Carriere for (n = 0; n < count; n++) { 44f7d7fcd9SEtienne Carriere if (id != table[n].id) 45f7d7fcd9SEtienne Carriere continue; 46f7d7fcd9SEtienne Carriere 47f7d7fcd9SEtienne Carriere str = table[n].string; 48f7d7fcd9SEtienne Carriere 49f7d7fcd9SEtienne Carriere /* Skip prefix provided matches found */ 50f7d7fcd9SEtienne Carriere if (prefix && !TEE_MemCompare(str, prefix, strlen(prefix))) 51f7d7fcd9SEtienne Carriere str += strlen(prefix); 52f7d7fcd9SEtienne Carriere 53f7d7fcd9SEtienne Carriere return str; 54f7d7fcd9SEtienne Carriere } 55f7d7fcd9SEtienne Carriere 56f7d7fcd9SEtienne Carriere return unknown; 57f7d7fcd9SEtienne Carriere } 5860290f69SEtienne Carriere #endif /* CFG_TEE_TA_LOG_LEVEL > 0 */ 59f7d7fcd9SEtienne Carriere 60f7d7fcd9SEtienne Carriere /* 61f7d7fcd9SEtienne Carriere * TA command IDs: used only as ID/string conversion for debug trace support 62f7d7fcd9SEtienne Carriere */ 63f7d7fcd9SEtienne Carriere static const struct any_id __maybe_unused string_ta_cmd[] = { 64f7d7fcd9SEtienne Carriere PKCS11_ID(PKCS11_CMD_PING), 65f7d7fcd9SEtienne Carriere }; 66f7d7fcd9SEtienne Carriere 67*d34f3266SEtienne Carriere static const struct any_id __maybe_unused string_rc[] = { 68*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_OK), 69*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_GENERAL_ERROR), 70*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_DEVICE_MEMORY), 71*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_ARGUMENTS_BAD), 72*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_BUFFER_TOO_SMALL), 73*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_FUNCTION_FAILED), 74*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SIGNATURE_INVALID), 75*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_ATTRIBUTE_TYPE_INVALID), 76*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_ATTRIBUTE_VALUE_INVALID), 77*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_OBJECT_HANDLE_INVALID), 78*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_KEY_HANDLE_INVALID), 79*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_MECHANISM_INVALID), 80*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SESSION_HANDLE_INVALID), 81*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SLOT_ID_INVALID), 82*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_MECHANISM_PARAM_INVALID), 83*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_TEMPLATE_INCONSISTENT), 84*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_TEMPLATE_INCOMPLETE), 85*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_PIN_INCORRECT), 86*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_PIN_LOCKED), 87*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_PIN_EXPIRED), 88*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_PIN_INVALID), 89*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_PIN_LEN_RANGE), 90*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SESSION_EXISTS), 91*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SESSION_READ_ONLY), 92*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SESSION_READ_WRITE_SO_EXISTS), 93*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_OPERATION_ACTIVE), 94*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_KEY_FUNCTION_NOT_PERMITTED), 95*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_OPERATION_NOT_INITIALIZED), 96*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_TOKEN_WRITE_PROTECTED), 97*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_TOKEN_NOT_PRESENT), 98*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_TOKEN_NOT_RECOGNIZED), 99*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_ACTION_PROHIBITED), 100*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_ATTRIBUTE_READ_ONLY), 101*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_PIN_TOO_WEAK), 102*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_CURVE_NOT_SUPPORTED), 103*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_DOMAIN_PARAMS_INVALID), 104*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_USER_ALREADY_LOGGED_IN), 105*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_USER_ANOTHER_ALREADY_LOGGED_IN), 106*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_USER_NOT_LOGGED_IN), 107*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_USER_PIN_NOT_INITIALIZED), 108*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_USER_TOO_MANY_TYPES), 109*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_USER_TYPE_INVALID), 110*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_CKR_SESSION_READ_ONLY_EXISTS), 111*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_RV_NOT_FOUND), 112*d34f3266SEtienne Carriere PKCS11_ID(PKCS11_RV_NOT_IMPLEMENTED), 113*d34f3266SEtienne Carriere }; 114*d34f3266SEtienne Carriere 115f7d7fcd9SEtienne Carriere #if CFG_TEE_TA_LOG_LEVEL > 0 116*d34f3266SEtienne Carriere const char *id2str_rc(uint32_t id) 117*d34f3266SEtienne Carriere { 118*d34f3266SEtienne Carriere return ID2STR(id, string_rc, "PKCS11_CKR_"); 119*d34f3266SEtienne Carriere } 120*d34f3266SEtienne Carriere 121f7d7fcd9SEtienne Carriere const char *id2str_ta_cmd(uint32_t id) 122f7d7fcd9SEtienne Carriere { 123f7d7fcd9SEtienne Carriere return ID2STR(id, string_ta_cmd, NULL); 124f7d7fcd9SEtienne Carriere } 125f7d7fcd9SEtienne Carriere #endif /*CFG_TEE_TA_LOG_LEVEL*/ 126