14bca302aSIgor Opaniuk /* SPDX-License-Identifier: BSD-2-Clause */ 24bca302aSIgor Opaniuk /* 3b5b6225fSJens Wiklander * Copyright (c) 2018-2019, Linaro Limited 4*e4ad5ccdSAleksandr Anisimov * Copyright (c) 2020, Open Mobile Platform LLC 54bca302aSIgor Opaniuk */ 64bca302aSIgor Opaniuk #ifndef __PTA_SYSTEM_H 74bca302aSIgor Opaniuk #define __PTA_SYSTEM_H 84bca302aSIgor Opaniuk 9b5b6225fSJens Wiklander #include <util.h> 10b5b6225fSJens Wiklander 114bca302aSIgor Opaniuk /* 124bca302aSIgor Opaniuk * Interface to the pseudo TA, which is provides misc. auxiliary services, 134bca302aSIgor Opaniuk * extending existing GlobalPlatform Core API 144bca302aSIgor Opaniuk */ 154bca302aSIgor Opaniuk 164bca302aSIgor Opaniuk #define PTA_SYSTEM_UUID { 0x3a2f8978, 0x5dc0, 0x11e8, { \ 174bca302aSIgor Opaniuk 0x9c, 0x2d, 0xfa, 0x7a, 0xe0, 0x1b, 0xbe, 0xbc } } 184bca302aSIgor Opaniuk 194bca302aSIgor Opaniuk /* 20a30ddda9SJoakim Bech * Having keys with too few bits impose a potential security risk, hence set a 21a30ddda9SJoakim Bech * lower bound of 128 bits. 22a30ddda9SJoakim Bech */ 23a30ddda9SJoakim Bech #define TA_DERIVED_KEY_MIN_SIZE 16 24a30ddda9SJoakim Bech 25a30ddda9SJoakim Bech /* Same value as max in huk_subkey_derive */ 26a30ddda9SJoakim Bech #define TA_DERIVED_KEY_MAX_SIZE 32 27a30ddda9SJoakim Bech 28a30ddda9SJoakim Bech #define TA_DERIVED_EXTRA_DATA_MAX_SIZE 1024 29a30ddda9SJoakim Bech 30a30ddda9SJoakim Bech /* 314bca302aSIgor Opaniuk * Add (re-seed) caller-provided entropy to the RNG pool. Keymaster 324bca302aSIgor Opaniuk * implementations need to securely mix the provided entropy into their pool, 334bca302aSIgor Opaniuk * which also must contain internally-generated entropy from a hardware random 344bca302aSIgor Opaniuk * number generator. 354bca302aSIgor Opaniuk * 364bca302aSIgor Opaniuk * [in] memref[0]: entropy input data 374bca302aSIgor Opaniuk */ 384bca302aSIgor Opaniuk #define PTA_SYSTEM_ADD_RNG_ENTROPY 0 394bca302aSIgor Opaniuk 40a30ddda9SJoakim Bech /* 41a30ddda9SJoakim Bech * Derives a device and TA unique key. The caller can also provide extra data 42a30ddda9SJoakim Bech * that will be mixed together with existing device unique properties. If no 43a30ddda9SJoakim Bech * extra data is provided, then the derived key will only use device unique 44a30ddda9SJoakim Bech * properties and caller TA UUID. 45a30ddda9SJoakim Bech * 46a30ddda9SJoakim Bech * [in] params[0].memref.buffer Buffer for extra data 47a30ddda9SJoakim Bech * [in] params[0].memref.size Size of extra data (max 1024 bytes) 48a30ddda9SJoakim Bech * [out] params[1].memref.buffer Buffer for the derived key 49a30ddda9SJoakim Bech * [out] params[1].memref.size Size of the derived key (16 to 32 bytes) 50a30ddda9SJoakim Bech */ 51a30ddda9SJoakim Bech #define PTA_SYSTEM_DERIVE_TA_UNIQUE_KEY 1 52a30ddda9SJoakim Bech 53b5b6225fSJens Wiklander /* Memory can be shared with other TAs */ 54b5b6225fSJens Wiklander #define PTA_SYSTEM_MAP_FLAG_SHAREABLE BIT32(0) 550b414d3fSJens Wiklander /* Read/write memory */ 560b414d3fSJens Wiklander #define PTA_SYSTEM_MAP_FLAG_WRITEABLE BIT32(1) 570b414d3fSJens Wiklander /* Executable memory */ 580b414d3fSJens Wiklander #define PTA_SYSTEM_MAP_FLAG_EXECUTABLE BIT32(2) 59b5b6225fSJens Wiklander 60b5b6225fSJens Wiklander /* 61b5b6225fSJens Wiklander * Map zero initialized memory 62b5b6225fSJens Wiklander * 63b5b6225fSJens Wiklander * [in] value[0].a: Number of bytes 64b5b6225fSJens Wiklander * [in] value[0].b: Flags, 0 or PTA_SYSTEM_MAP_FLAG_SHAREABLE 65b5b6225fSJens Wiklander * [out] value[1].a: Address upper 32-bits 66b5b6225fSJens Wiklander * [out] value[1].b: Address lower 32-bits 67b5b6225fSJens Wiklander * [in] value[2].a: Extra pad before memory range 68b5b6225fSJens Wiklander * [in] value[2].b: Extra pad after memory range 69b5b6225fSJens Wiklander */ 70b5b6225fSJens Wiklander #define PTA_SYSTEM_MAP_ZI 2 71b5b6225fSJens Wiklander 72b5b6225fSJens Wiklander /* 73b5b6225fSJens Wiklander * Unmap memory 74b5b6225fSJens Wiklander * 75b5b6225fSJens Wiklander * [in] value[0].a: Number of bytes 76b5b6225fSJens Wiklander * [in] value[0].b: Must be 0 77b5b6225fSJens Wiklander * [in] value[1].a: Address upper 32-bits 78b5b6225fSJens Wiklander * [in] value[1].b: Address lower 32-bits 79b5b6225fSJens Wiklander */ 80b5b6225fSJens Wiklander #define PTA_SYSTEM_UNMAP 3 81b5b6225fSJens Wiklander 820b414d3fSJens Wiklander /* 830b414d3fSJens Wiklander * Find and opens an TA binary and return a handle 840b414d3fSJens Wiklander * 850b414d3fSJens Wiklander * [in] memref[0]: UUID of TA binary 860b414d3fSJens Wiklander * [out] value[1].a: Handle to TA binary 870b414d3fSJens Wiklander * [out] value[1].b: 0 880b414d3fSJens Wiklander */ 890b414d3fSJens Wiklander #define PTA_SYSTEM_OPEN_TA_BINARY 4 900b414d3fSJens Wiklander 910b414d3fSJens Wiklander /* 920b414d3fSJens Wiklander * Close an TA binary handle 930b414d3fSJens Wiklander * 940b414d3fSJens Wiklander * When a TA is done mapping new parts of an TA binary it closes the handle 950b414d3fSJens Wiklander * to free resources, established mappings remains. 960b414d3fSJens Wiklander * 970b414d3fSJens Wiklander * [in] value[1].a: Handle to TA binary 980b414d3fSJens Wiklander * [in] value[1].b: Must be 0 990b414d3fSJens Wiklander * 1000b414d3fSJens Wiklander * Returns TEE_SUCCESS if the TA binary was verified successfully. 1010b414d3fSJens Wiklander */ 1020b414d3fSJens Wiklander #define PTA_SYSTEM_CLOSE_TA_BINARY 5 1030b414d3fSJens Wiklander 1040b414d3fSJens Wiklander /* 1050b414d3fSJens Wiklander * Map segment of TA binary 1060b414d3fSJens Wiklander * 1070b414d3fSJens Wiklander * Different parts of an TA binary file needs different permissions. 1080b414d3fSJens Wiklander * Read-write mapped parts are private to the TA, while read-only (which 1090b414d3fSJens Wiklander * includes execute) mapped parts are shared with other TAs. This is 1100b414d3fSJens Wiklander * transparent to the TA. If the supplied address in value[3] is 0 a 1110b414d3fSJens Wiklander * suitable address is selected, else it will either be mapped at that 1120b414d3fSJens Wiklander * address of an error is returned. 1130b414d3fSJens Wiklander * 1140b414d3fSJens Wiklander * [in] value[0].a: Handle to TA binary 1150b414d3fSJens Wiklander * [in] value[0].b: Flags, PTA_SYSTEM_MAP_FLAG_* 1160b414d3fSJens Wiklander * [in] value[1].a: Offset into TA binary, must be page aligned 1170b414d3fSJens Wiklander * [in] value[1].b: Number of bytes, the last page will be zero 1180b414d3fSJens Wiklander * extended if not page aligned 1190b414d3fSJens Wiklander * [in/out] value[2].a: Address upper 32-bits 1200b414d3fSJens Wiklander * [in/out] value[2].b: Address lower 32-bits 1210b414d3fSJens Wiklander * [in] value[3].a: Extra pad before memory range 1220b414d3fSJens Wiklander * [in] value[3].b: Extra pad after memory range 1230b414d3fSJens Wiklander */ 1240b414d3fSJens Wiklander #define PTA_SYSTEM_MAP_TA_BINARY 6 1250b414d3fSJens Wiklander 1260b414d3fSJens Wiklander /* 1270b414d3fSJens Wiklander * Copy a memory range from TA binary 1280b414d3fSJens Wiklander * 1290b414d3fSJens Wiklander * [in] value[0].a: Handle to TA binary 1300b414d3fSJens Wiklander * [in] value[0].b: Offset into TA binary 1310b414d3fSJens Wiklander * [out] memref[1]: Destination 1320b414d3fSJens Wiklander */ 1330b414d3fSJens Wiklander #define PTA_SYSTEM_COPY_FROM_TA_BINARY 7 1340b414d3fSJens Wiklander 1350a563c6fSJens Wiklander /* 1360a563c6fSJens Wiklander * Set memory protection 1370a563c6fSJens Wiklander * 1380a563c6fSJens Wiklander * [in] value[0].a: Number of bytes 1390a563c6fSJens Wiklander * [in] value[0].b: Flags, PTA_SYSTEM_MAP_FLAG_* 1400a563c6fSJens Wiklander * [in] value[1].a: Address upper 32-bits 1410a563c6fSJens Wiklander * [in] value[1].b: Address lower 32-bits 1420a563c6fSJens Wiklander */ 1430a563c6fSJens Wiklander #define PTA_SYSTEM_SET_PROT 8 1440a563c6fSJens Wiklander 14534db7172SJens Wiklander /* 14634db7172SJens Wiklander * Remap a segment of a TA mapping 14734db7172SJens Wiklander * 14834db7172SJens Wiklander * Moves an already mapped segment of a TA to a new address. If the 14934db7172SJens Wiklander * supplied new address is 0 a suitable address is selected, else it will 15034db7172SJens Wiklander * either be mapped at that address or an error is returned. 15134db7172SJens Wiklander * 15234db7172SJens Wiklander * [in] value[0].a: Number of bytes, must match length rounded up to 15334db7172SJens Wiklander * closest page of original mapping 15434db7172SJens Wiklander * [in] value[0].b: Must be 0 15534db7172SJens Wiklander * [in] value[1].a: Old address upper 32-bits 15634db7172SJens Wiklander * [in] value[1].b: Old address lower 32-bits 15734db7172SJens Wiklander * [in/out] value[2].a: New address upper 32-bits 15834db7172SJens Wiklander * [in/out] value[2].b: New address lower 32-bits 15934db7172SJens Wiklander * [in] value[3].a: Extra pad before memory range 16034db7172SJens Wiklander * [in] value[3].b: Extra pad after memory range 16134db7172SJens Wiklander */ 16234db7172SJens Wiklander #define PTA_SYSTEM_REMAP 9 16334db7172SJens Wiklander 164ebef121cSJerome Forissier /* 165ebef121cSJerome Forissier * Load a shared library 166ebef121cSJerome Forissier * 167ebef121cSJerome Forissier * [in] memref[0]: the UUID of the shared library (@filename) 168ebef121cSJerome Forissier * [in] value[1].a: @flags, must be (RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE) 169ebef121cSJerome Forissier * 170ebef121cSJerome Forissier * Used by: (libdl) dlopen(const char *filename, int flags) 171ebef121cSJerome Forissier */ 172ebef121cSJerome Forissier #define PTA_SYSTEM_DLOPEN 10 173ebef121cSJerome Forissier 174ebef121cSJerome Forissier /* 175ebef121cSJerome Forissier * Resolve a symbol in a previously loaded shared library or in the whole TA 176ebef121cSJerome Forissier * 177ebef121cSJerome Forissier * [in] memref[0]: the UUID of the shared library, or the nil UUID to 178ebef121cSJerome Forissier * search the whole TA 179ebef121cSJerome Forissier * [in] memref[1]: symbol name (@symbol) 180ebef121cSJerome Forissier * [out] value[2]: address of the symbol or NULL 181ebef121cSJerome Forissier * 182ebef121cSJerome Forissier * Used by: (libdl) dlsym(void *handle, const char *symbol) 183ebef121cSJerome Forissier */ 184ebef121cSJerome Forissier #define PTA_SYSTEM_DLSYM 11 185ebef121cSJerome Forissier 186dd333f03SJavier Almansa Sobrino /* 187dd333f03SJavier Almansa Sobrino * Retrieves a copy of the TPM Event log held in secure memory. 188dd333f03SJavier Almansa Sobrino * 189dd333f03SJavier Almansa Sobrino * [out] memref[0]: Pointer to the buffer where to store the event log. 190dd333f03SJavier Almansa Sobrino */ 191dd333f03SJavier Almansa Sobrino #define PTA_SYSTEM_GET_TPM_EVENT_LOG 12 192dd333f03SJavier Almansa Sobrino 193*e4ad5ccdSAleksandr Anisimov /* 194*e4ad5ccdSAleksandr Anisimov * Invoke a tee-supplicant's plugin 195*e4ad5ccdSAleksandr Anisimov * 196*e4ad5ccdSAleksandr Anisimov * [in] memref[0] uuid of the plugin (TEE_UUID) 197*e4ad5ccdSAleksandr Anisimov * [in] value[1].a command for the plugin 198*e4ad5ccdSAleksandr Anisimov * [in] value[1].b sub_command for the plugin 199*e4ad5ccdSAleksandr Anisimov * [in/out] memref[2] additional data for the plugin 200*e4ad5ccdSAleksandr Anisimov * [out] value[3].a output length of data 201*e4ad5ccdSAleksandr Anisimov */ 202*e4ad5ccdSAleksandr Anisimov #define PTA_SYSTEM_SUPP_PLUGIN_INVOKE 13 203*e4ad5ccdSAleksandr Anisimov 2044bca302aSIgor Opaniuk #endif /* __PTA_SYSTEM_H */ 205