CA側でのcmd id文字列の出力:
const char* get_command(uint32_t command_id)
{
switch(command_id) {
case KM_GENERATE_KEY:
return "KM_GENERATE_KEY";
case KM_BEGIN_OPERATION:
return "KM_BEGIN_OPERATION";
case KM_UPDATE_OPERATION:
return "KM_UPDATE_OPERATION";
case KM_FINISH_OPERATION:
return "KM_FINISH_OPERATION";
case KM_ABORT_OPERATION:
return "KM_ABORT_OPERATION";
case KM_IMPORT_KEY:
return "KM_IMPORT_KEY";
case KM_EXPORT_KEY:
return "KM_EXPORT_KEY";
case KM_GET_VERSION:
return "KM_GET_VERSION";
case KM_ADD_RNG_ENTROPY:
return "KM_ADD_RNG_ENTROPY";
case KM_ATTEST_KEY:
return "KM_ATTEST_KEY";
case KM_UPGRADE_KEY:
return "KM_UPGRADE_KEY";
case KM_CONFIGURE:
return "KM_CONFIGURE";
case KM_COMPUTE_SHARED_HMAC:
return "KM_COMPUTE_SHARED_HMAC";
case KM_GET_HMAC_SHARING_PARAMETERS:
return "KM_GET_HMAC_SHARING_PARAMETERS";
case KM_VERIFY_AUTHORIZATION:
return "KM_VERIFY_AUTHORIZATION";
case KM_DELETE_KEY:
return "KM_DELETE_KEY";
case KM_DELETE_ALL_KEYS:
return "KM_DELETE_ALL_KEYS";
default:
return "UNKNOWN_COMMAND";
}
}
TA側でのparam tag文字列の出力:
ta_ca_defs.hに配置可能:
static inline const char * get_tag_string(keymaster_tag_t tag) {
switch(tag) {
case KM_TAG_INVALID:
return "KM_TAG_INVALID";
case KM_TAG_PURPOSE:
return "KM_TAG_PURPOSE";
case KM_TAG_ALGORITHM:
return "KM_TAG_ALGORITHM";
case KM_TAG_KEY_SIZE:
return "KM_TAG_KEY_SIZE";
case KM_TAG_BLOCK_MODE:
return "KM_TAG_BLOCK_MODE";
case KM_TAG_DIGEST:
return "KM_TAG_DIGEST";
case KM_TAG_PADDING:
return "KM_TAG_PADDING";
case KM_TAG_CALLER_NONCE:
return "KM_TAG_CALLER_NONCE";
case KM_TAG_MIN_MAC_LENGTH:
return "KM_TAG_MIN_MAC_LENGTH";
case KM_TAG_KDF:
return "KM_TAG_KDF";
case KM_TAG_EC_CURVE:
return "KM_TAG_EC_CURVE";
case KM_TAG_RSA_PUBLIC_EXPONENT:
return "KM_TAG_RSA_PUBLIC_EXPONENT";
case KM_TAG_ECIES_SINGLE_HASH_MODE:
return "KM_TAG_ECIES_SINGLE_HASH_MODE";
case KM_TAG_INCLUDE_UNIQUE_ID:
return "KM_TAG_INCLUDE_UNIQUE_ID";
case KM_TAG_BLOB_USAGE_REQUIREMENTS:
return "KM_TAG_BLOB_USAGE_REQUIREMENTS";
case KM_TAG_BOOTLOADER_ONLY:
return "KM_TAG_BOOTLOADER_ONLY";
case KM_TAG_ACTIVE_DATETIME:
return "KM_TAG_ACTIVE_DATETIME";
case KM_TAG_ORIGINATION_EXPIRE_DATETIME:
return "KM_TAG_ORIGINATION_EXPIRE_DATETIME";
case KM_TAG_USAGE_EXPIRE_DATETIME:
return "KM_TAG_USAGE_EXPIRE_DATETIME";
case KM_TAG_MIN_SECONDS_BETWEEN_OPS:
return "KM_TAG_MIN_SECONDS_BETWEEN_OPS";
case KM_TAG_MAX_USES_PER_BOOT:
return "KM_TAG_MAX_USES_PER_BOOT";
case KM_TAG_ALL_USERS:
return "KM_TAG_ALL_USERS";
case KM_TAG_USER_ID:
return "KM_TAG_USER_ID";
case KM_TAG_USER_SECURE_ID:
return "KM_TAG_USER_SECURE_ID";
case KM_TAG_NO_AUTH_REQUIRED:
return "KM_TAG_NO_AUTH_REQUIRED";
case KM_TAG_USER_AUTH_TYPE:
return "KM_TAG_USER_AUTH_TYPE";
case KM_TAG_AUTH_TIMEOUT:
return "KM_TAG_AUTH_TIMEOUT";
case KM_TAG_ALLOW_WHILE_ON_BODY:
return "KM_TAG_ALLOW_WHILE_ON_BODY";
case KM_TAG_ALL_APPLICATIONS:
return "KM_TAG_ALL_APPLICATIONS";
case KM_TAG_APPLICATION_ID:
return "KM_TAG_APPLICATION_ID";
case KM_TAG_EXPORTABLE:
return "KM_TAG_EXPORTABLE";
case KM_TAG_APPLICATION_DATA:
return "KM_TAG_APPLICATION_DATA";
case KM_TAG_CREATION_DATETIME:
return "KM_TAG_CREATION_DATETIME";
case KM_TAG_ORIGIN:
return "KM_TAG_ORIGIN";
case KM_TAG_ROLLBACK_RESISTANT:
return "KM_TAG_ROLLBACK_RESISTANT";
case KM_TAG_ROOT_OF_TRUST:
return "KM_TAG_ROOT_OF_TRUST";
case KM_TAG_OS_VERSION:
return "KM_TAG_OS_VERSION";
case KM_TAG_OS_PATCHLEVEL:
return "KM_TAG_OS_PATCHLEVEL";
case KM_TAG_UNIQUE_ID:
return "KM_TAG_UNIQUE_ID";
case KM_TAG_ATTESTATION_CHALLENGE:
return "KM_TAG_ATTESTATION_CHALLENGE";
case KM_TAG_ATTESTATION_APPLICATION_ID:
return "KM_TAG_ATTESTATION_APPLICATION_ID";
case KM_TAG_ATTESTATION_ID_BRAND:
return "KM_TAG_ATTESTATION_ID_BRAND";
case KM_TAG_ATTESTATION_ID_DEVICE:
return "KM_TAG_ATTESTATION_ID_DEVICE";
case KM_TAG_ATTESTATION_ID_PRODUCT:
return "KM_TAG_ATTESTATION_ID_PRODUCT";
case KM_TAG_ATTESTATION_ID_SERIAL:
return "KM_TAG_ATTESTATION_ID_SERIAL";
case KM_TAG_ATTESTATION_ID_IMEI:
return "KM_TAG_ATTESTATION_ID_IMEI";
case KM_TAG_ATTESTATION_ID_MEID:
return "KM_TAG_ATTESTATION_ID_MEID";
case KM_TAG_ATTESTATION_ID_MANUFACTURER:
return "KM_TAG_ATTESTATION_ID_MANUFACTURER";
case KM_TAG_ATTESTATION_ID_MODEL:
return "KM_TAG_ATTESTATION_ID_MODEL";
case KM_TAG_ASSOCIATED_DATA:
return "KM_TAG_ASSOCIATED_DATA";
case KM_TAG_NONCE:
return "KM_TAG_NONCE";
case KM_TAG_AUTH_TOKEN:
return "KM_TAG_AUTH_TOKEN";
case KM_TAG_MAC_LENGTH:
return "KM_TAG_MAC_LENGTH";
case KM_TAG_RESET_SINCE_ID_ROTATION:
return "KM_TAG_RESET_SINCE_ID_ROTATION";
default:
return "default value";
}
}
TAで配列をダンプする:
通常、CAからのリクエストデータの分析のために使用されます。
#include <tee_internal_api_extensions.h>
#include "log.h"
void dump_hex_array(uint8_t *data, uint32_t data_length)
{
char buffer[128];
int n = 0;
int size = 0;
int count = data_length / 16;
if (data_length % 16 != 0) {
count++;
}
DMSG("dump hex data: data_length = %u, count = %d\n", data_length, count);
for (uint32_t i = 0; i < count; i++) {
n = 0;
size = snprintf(&buffer[n], sizeof(buffer) - n, "[%03x]", i);
n += size;
uint32_t count_j = 16;
if (i == count - 1 && data_length % 16 != 0) {
count_j = data_length % 16;
}
for (uint32_t j = 0; j < count_j; j++) {
size = snprintf(&buffer[n], sizeof(buffer) - n, " %02x", data[16 * i + j]);
n += size;
}
buffer[n] = '\0';
DMSG("%s\n", buffer);
}
}