1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2018-2019, Linaro Limited 4 */ 5 #ifndef __PTA_SYSTEM_H 6 #define __PTA_SYSTEM_H 7 8 #include <util.h> 9 10 /* 11 * Interface to the pseudo TA, which is provides misc. auxiliary services, 12 * extending existing GlobalPlatform Core API 13 */ 14 15 #define PTA_SYSTEM_UUID { 0x3a2f8978, 0x5dc0, 0x11e8, { \ 16 0x9c, 0x2d, 0xfa, 0x7a, 0xe0, 0x1b, 0xbe, 0xbc } } 17 18 /* 19 * Having keys with too few bits impose a potential security risk, hence set a 20 * lower bound of 128 bits. 21 */ 22 #define TA_DERIVED_KEY_MIN_SIZE 16 23 24 /* Same value as max in huk_subkey_derive */ 25 #define TA_DERIVED_KEY_MAX_SIZE 32 26 27 #define TA_DERIVED_EXTRA_DATA_MAX_SIZE 1024 28 29 /* 30 * Add (re-seed) caller-provided entropy to the RNG pool. Keymaster 31 * implementations need to securely mix the provided entropy into their pool, 32 * which also must contain internally-generated entropy from a hardware random 33 * number generator. 34 * 35 * [in] memref[0]: entropy input data 36 */ 37 #define PTA_SYSTEM_ADD_RNG_ENTROPY 0 38 39 /* 40 * Derives a device and TA unique key. The caller can also provide extra data 41 * that will be mixed together with existing device unique properties. If no 42 * extra data is provided, then the derived key will only use device unique 43 * properties and caller TA UUID. 44 * 45 * [in] params[0].memref.buffer Buffer for extra data 46 * [in] params[0].memref.size Size of extra data (max 1024 bytes) 47 * [out] params[1].memref.buffer Buffer for the derived key 48 * [out] params[1].memref.size Size of the derived key (16 to 32 bytes) 49 */ 50 #define PTA_SYSTEM_DERIVE_TA_UNIQUE_KEY 1 51 52 /* Memory can be shared with other TAs */ 53 #define PTA_SYSTEM_MAP_FLAG_SHAREABLE BIT32(0) 54 55 /* 56 * Map zero initialized memory 57 * 58 * [in] value[0].a: Number of bytes 59 * [in] value[0].b: Flags, 0 or PTA_SYSTEM_MAP_FLAG_SHAREABLE 60 * [out] value[1].a: Address upper 32-bits 61 * [out] value[1].b: Address lower 32-bits 62 * [in] value[2].a: Extra pad before memory range 63 * [in] value[2].b: Extra pad after memory range 64 */ 65 #define PTA_SYSTEM_MAP_ZI 2 66 67 /* 68 * Unmap memory 69 * 70 * [in] value[0].a: Number of bytes 71 * [in] value[0].b: Must be 0 72 * [in] value[1].a: Address upper 32-bits 73 * [in] value[1].b: Address lower 32-bits 74 */ 75 #define PTA_SYSTEM_UNMAP 3 76 77 #endif /* __PTA_SYSTEM_H */ 78