TA-REF
tee_api_defines.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2014, STMicroelectronics International N.V.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25 * POSSIBILITY OF SUCH DAMAGE.
26 */
27
28/* Based on GP TEE Internal Core API Specification Version 1.1 */
29
30#ifndef TEE_API_DEFINES_H
31#define TEE_API_DEFINES_H
32
33#ifndef DOXYGEN_SHOULD_SKIP_THIS
34#define TEE_INT_CORE_API_SPEC_VERSION 0x0000000A
35
36#define TEE_HANDLE_NULL 0
37
38#define TEE_TIMEOUT_INFINITE 0xFFFFFFFF
39
40/* API Error Codes */
41#define TEE_SUCCESS 0x00000000
42#define TEE_ERROR_CORRUPT_OBJECT 0xF0100001
43#define TEE_ERROR_CORRUPT_OBJECT_2 0xF0100002
44#define TEE_ERROR_STORAGE_NOT_AVAILABLE 0xF0100003
45#define TEE_ERROR_STORAGE_NOT_AVAILABLE_2 0xF0100004
46#define TEE_ERROR_GENERIC 0xFFFF0000
47#define TEE_ERROR_ACCESS_DENIED 0xFFFF0001
48#define TEE_ERROR_CANCEL 0xFFFF0002
49#define TEE_ERROR_ACCESS_CONFLICT 0xFFFF0003
50#define TEE_ERROR_EXCESS_DATA 0xFFFF0004
51#define TEE_ERROR_BAD_FORMAT 0xFFFF0005
52#define TEE_ERROR_BAD_PARAMETERS 0xFFFF0006
53#define TEE_ERROR_BAD_STATE 0xFFFF0007
54#define TEE_ERROR_ITEM_NOT_FOUND 0xFFFF0008
55#define TEE_ERROR_NOT_IMPLEMENTED 0xFFFF0009
56#define TEE_ERROR_NOT_SUPPORTED 0xFFFF000A
57#define TEE_ERROR_NO_DATA 0xFFFF000B
58#define TEE_ERROR_OUT_OF_MEMORY 0xFFFF000C
59#define TEE_ERROR_BUSY 0xFFFF000D
60#define TEE_ERROR_COMMUNICATION 0xFFFF000E
61#define TEE_ERROR_SECURITY 0xFFFF000F
62#define TEE_ERROR_SHORT_BUFFER 0xFFFF0010
63#define TEE_ERROR_EXTERNAL_CANCEL 0xFFFF0011
64#define TEE_ERROR_OVERFLOW 0xFFFF300F
65#define TEE_ERROR_TARGET_DEAD 0xFFFF3024
66#define TEE_ERROR_STORAGE_NO_SPACE 0xFFFF3041
67#define TEE_ERROR_MAC_INVALID 0xFFFF3071
68#define TEE_ERROR_SIGNATURE_INVALID 0xFFFF3072
69#define TEE_ERROR_TIME_NOT_SET 0xFFFF5000
70#define TEE_ERROR_TIME_NEEDS_RESET 0xFFFF5001
71
72/* Parameter Type Constants */
73#define TEE_PARAM_TYPE_NONE 0
74#define TEE_PARAM_TYPE_VALUE_INPUT 1
75#define TEE_PARAM_TYPE_VALUE_OUTPUT 2
76#define TEE_PARAM_TYPE_VALUE_INOUT 3
77#define TEE_PARAM_TYPE_MEMREF_INPUT 5
78#define TEE_PARAM_TYPE_MEMREF_OUTPUT 6
79#define TEE_PARAM_TYPE_MEMREF_INOUT 7
80
81/* Login Type Constants */
82#define TEE_LOGIN_PUBLIC 0x00000000
83#define TEE_LOGIN_USER 0x00000001
84#define TEE_LOGIN_GROUP 0x00000002
85#define TEE_LOGIN_APPLICATION 0x00000004
86#define TEE_LOGIN_APPLICATION_USER 0x00000005
87#define TEE_LOGIN_APPLICATION_GROUP 0x00000006
88#define TEE_LOGIN_TRUSTED_APP 0xF0000000
89
90/* Origin Code Constants */
91#define TEE_ORIGIN_API 0x00000001
92#define TEE_ORIGIN_COMMS 0x00000002
93#define TEE_ORIGIN_TEE 0x00000003
94#define TEE_ORIGIN_TRUSTED_APP 0x00000004
95
96/* Property Sets pseudo handles */
97#define TEE_PROPSET_TEE_IMPLEMENTATION (TEE_PropSetHandle)0xFFFFFFFD
98#define TEE_PROPSET_CURRENT_CLIENT (TEE_PropSetHandle)0xFFFFFFFE
99#define TEE_PROPSET_CURRENT_TA (TEE_PropSetHandle)0xFFFFFFFF
100
101/* Memory Access Rights Constants */
102#define TEE_MEMORY_ACCESS_READ 0x00000001
103#define TEE_MEMORY_ACCESS_WRITE 0x00000002
104#define TEE_MEMORY_ACCESS_ANY_OWNER 0x00000004
105
106/* Memory Management Constant */
107#define TEE_MALLOC_FILL_ZERO 0x00000000
108
109/* Other constants */
110#define TEE_STORAGE_PRIVATE 0x00000001
111
112#define TEE_DATA_FLAG_ACCESS_READ 0x00000001
113#define TEE_DATA_FLAG_ACCESS_WRITE 0x00000002
114#define TEE_DATA_FLAG_ACCESS_WRITE_META 0x00000004
115#define TEE_DATA_FLAG_SHARE_READ 0x00000010
116#define TEE_DATA_FLAG_SHARE_WRITE 0x00000020
117#define TEE_DATA_FLAG_OVERWRITE 0x00000400
118#define TEE_DATA_MAX_POSITION 0xFFFFFFFF
119#define TEE_OBJECT_ID_MAX_LEN 64
120#define TEE_USAGE_EXTRACTABLE 0x00000001
121#define TEE_USAGE_ENCRYPT 0x00000002
122#define TEE_USAGE_DECRYPT 0x00000004
123#define TEE_USAGE_MAC 0x00000008
124#define TEE_USAGE_SIGN 0x00000010
125#define TEE_USAGE_VERIFY 0x00000020
126#define TEE_USAGE_DERIVE 0x00000040
127#define TEE_HANDLE_FLAG_PERSISTENT 0x00010000
128#define TEE_HANDLE_FLAG_INITIALIZED 0x00020000
129#define TEE_HANDLE_FLAG_KEY_SET 0x00040000
130#define TEE_HANDLE_FLAG_EXPECT_TWO_KEYS 0x00080000
131#define TEE_OPERATION_CIPHER 1
132#define TEE_OPERATION_MAC 3
133#define TEE_OPERATION_AE 4
134#define TEE_OPERATION_DIGEST 5
135#define TEE_OPERATION_ASYMMETRIC_CIPHER 6
136#define TEE_OPERATION_ASYMMETRIC_SIGNATURE 7
137#define TEE_OPERATION_KEY_DERIVATION 8
138#define TEE_OPERATION_STATE_INITIAL 0x00000000
139#define TEE_OPERATION_STATE_ACTIVE 0x00000001
140
141/* Algorithm Identifiers */
142#define TEE_ALG_AES_ECB_NOPAD 0x10000010
143#define TEE_ALG_AES_CBC_NOPAD 0x10000110
144#define TEE_ALG_AES_CTR 0x10000210
145#define TEE_ALG_AES_CTS 0x10000310
146#define TEE_ALG_AES_XTS 0x10000410
147#define TEE_ALG_AES_CBC_MAC_NOPAD 0x30000110
148#define TEE_ALG_AES_CBC_MAC_PKCS5 0x30000510
149#define TEE_ALG_AES_CMAC 0x30000610
150#define TEE_ALG_AES_CCM 0x40000710
151#define TEE_ALG_AES_GCM 0x40000810
152#define TEE_ALG_DES_ECB_NOPAD 0x10000011
153#define TEE_ALG_DES_CBC_NOPAD 0x10000111
154#define TEE_ALG_DES_CBC_MAC_NOPAD 0x30000111
155#define TEE_ALG_DES_CBC_MAC_PKCS5 0x30000511
156#define TEE_ALG_DES3_ECB_NOPAD 0x10000013
157#define TEE_ALG_DES3_CBC_NOPAD 0x10000113
158#define TEE_ALG_DES3_CBC_MAC_NOPAD 0x30000113
159#define TEE_ALG_DES3_CBC_MAC_PKCS5 0x30000513
160#define TEE_ALG_RSASSA_PKCS1_V1_5_MD5 0x70001830
161#define TEE_ALG_RSASSA_PKCS1_V1_5_SHA1 0x70002830
162#define TEE_ALG_RSASSA_PKCS1_V1_5_SHA224 0x70003830
163#define TEE_ALG_RSASSA_PKCS1_V1_5_SHA256 0x70004830
164#define TEE_ALG_RSASSA_PKCS1_V1_5_SHA384 0x70005830
165#define TEE_ALG_RSASSA_PKCS1_V1_5_SHA512 0x70006830
166#define TEE_ALG_RSASSA_PKCS1_V1_5_MD5SHA1 0x7000F830
167#define TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1 0x70212930
168#define TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224 0x70313930
169#define TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256 0x70414930
170#define TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384 0x70515930
171#define TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512 0x70616930
172#define TEE_ALG_RSAES_PKCS1_V1_5 0x60000130
173#define TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1 0x60210230
174#define TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA224 0x60310230
175#define TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256 0x60410230
176#define TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA384 0x60510230
177#define TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA512 0x60610230
178#define TEE_ALG_RSA_NOPAD 0x60000030
179#define TEE_ALG_DSA_SHA1 0x70002131
180#define TEE_ALG_DSA_SHA224 0x70003131
181#define TEE_ALG_DSA_SHA256 0x70004131
182#define TEE_ALG_DH_DERIVE_SHARED_SECRET 0x80000032
183#define TEE_ALG_MD5 0x50000001
184#define TEE_ALG_SHA1 0x50000002
185#define TEE_ALG_SHA224 0x50000003
186#define TEE_ALG_SHA256 0x50000004
187#define TEE_ALG_SHA384 0x50000005
188#define TEE_ALG_SHA512 0x50000006
189#define TEE_ALG_MD5SHA1 0x5000000F
190#define TEE_ALG_HMAC_MD5 0x30000001
191#define TEE_ALG_HMAC_SHA1 0x30000002
192#define TEE_ALG_HMAC_SHA224 0x30000003
193#define TEE_ALG_HMAC_SHA256 0x30000004
194#define TEE_ALG_HMAC_SHA384 0x30000005
195#define TEE_ALG_HMAC_SHA512 0x30000006
196/*
197 * Fix GP Internal Core API v1.1
198 * "Table 6-12: Structure of Algorithm Identifier"
199 * indicates ECDSA have the algorithm "0x41" and ECDH "0x42"
200 * whereas
201 * "Table 6-11: List of Algorithm Identifiers" defines
202 * TEE_ALG_ECDSA_P192 as 0x70001042
203 *
204 * We chose to define TEE_ALG_ECDSA_P192 as 0x70001041 (conform to table 6-12)
205 */
206#define TEE_ALG_ECDSA_P192 0x70001041
207#define TEE_ALG_ECDSA_P224 0x70002041
208#define TEE_ALG_ECDSA_P256 0x70003041
209#define TEE_ALG_ECDSA_P384 0x70004041
210#define TEE_ALG_ECDSA_P521 0x70005041
211#define TEE_ALG_ECDH_P192 0x80001042
212#define TEE_ALG_ECDH_P224 0x80002042
213#define TEE_ALG_ECDH_P256 0x80003042
214#define TEE_ALG_ECDH_P384 0x80004042
215#define TEE_ALG_ECDH_P521 0x80005042
216
217/* Object Types */
218
219#define TEE_TYPE_AES 0xA0000010
220#define TEE_TYPE_DES 0xA0000011
221#define TEE_TYPE_DES3 0xA0000013
222#define TEE_TYPE_HMAC_MD5 0xA0000001
223#define TEE_TYPE_HMAC_SHA1 0xA0000002
224#define TEE_TYPE_HMAC_SHA224 0xA0000003
225#define TEE_TYPE_HMAC_SHA256 0xA0000004
226#define TEE_TYPE_HMAC_SHA384 0xA0000005
227#define TEE_TYPE_HMAC_SHA512 0xA0000006
228#define TEE_TYPE_RSA_PUBLIC_KEY 0xA0000030
229#define TEE_TYPE_RSA_KEYPAIR 0xA1000030
230#define TEE_TYPE_DSA_PUBLIC_KEY 0xA0000031
231#define TEE_TYPE_DSA_KEYPAIR 0xA1000031
232#define TEE_TYPE_DH_KEYPAIR 0xA1000032
233#define TEE_TYPE_ECDSA_PUBLIC_KEY 0xA0000041
234#define TEE_TYPE_ECDSA_KEYPAIR 0xA1000041
235#define TEE_TYPE_ECDH_PUBLIC_KEY 0xA0000042
236#define TEE_TYPE_ECDH_KEYPAIR 0xA1000042
237#define TEE_TYPE_GENERIC_SECRET 0xA0000000
238#define TEE_TYPE_CORRUPTED_OBJECT 0xA00000BE
239#define TEE_TYPE_DATA 0xA00000BF
240
241/* List of Object or Operation Attributes */
242
243#define TEE_ATTR_SECRET_VALUE 0xC0000000
244#define TEE_ATTR_RSA_MODULUS 0xD0000130
245#define TEE_ATTR_RSA_PUBLIC_EXPONENT 0xD0000230
246#define TEE_ATTR_RSA_PRIVATE_EXPONENT 0xC0000330
247#define TEE_ATTR_RSA_PRIME1 0xC0000430
248#define TEE_ATTR_RSA_PRIME2 0xC0000530
249#define TEE_ATTR_RSA_EXPONENT1 0xC0000630
250#define TEE_ATTR_RSA_EXPONENT2 0xC0000730
251#define TEE_ATTR_RSA_COEFFICIENT 0xC0000830
252#define TEE_ATTR_DSA_PRIME 0xD0001031
253#define TEE_ATTR_DSA_SUBPRIME 0xD0001131
254#define TEE_ATTR_DSA_BASE 0xD0001231
255#define TEE_ATTR_DSA_PUBLIC_VALUE 0xD0000131
256#define TEE_ATTR_DSA_PRIVATE_VALUE 0xC0000231
257#define TEE_ATTR_DH_PRIME 0xD0001032
258#define TEE_ATTR_DH_SUBPRIME 0xD0001132
259#define TEE_ATTR_DH_BASE 0xD0001232
260#define TEE_ATTR_DH_X_BITS 0xF0001332
261#define TEE_ATTR_DH_PUBLIC_VALUE 0xD0000132
262#define TEE_ATTR_DH_PRIVATE_VALUE 0xC0000232
263#define TEE_ATTR_RSA_OAEP_LABEL 0xD0000930
264#define TEE_ATTR_RSA_PSS_SALT_LENGTH 0xF0000A30
265#define TEE_ATTR_ECC_PUBLIC_VALUE_X 0xD0000141
266#define TEE_ATTR_ECC_PUBLIC_VALUE_Y 0xD0000241
267#define TEE_ATTR_ECC_PRIVATE_VALUE 0xC0000341
268#define TEE_ATTR_ECC_CURVE 0xF0000441
269
270#define TEE_ATTR_BIT_PROTECTED (1 << 28)
271#define TEE_ATTR_BIT_VALUE (1 << 29)
272
273/* List of Supported ECC Curves */
274#define TEE_ECC_CURVE_NIST_P192 0x00000001
275#define TEE_ECC_CURVE_NIST_P224 0x00000002
276#define TEE_ECC_CURVE_NIST_P256 0x00000003
277#define TEE_ECC_CURVE_NIST_P384 0x00000004
278#define TEE_ECC_CURVE_NIST_P521 0x00000005
279
280
281/* Panicked Functions Identification */
282/* TA Interface */
283#define TEE_PANIC_ID_TA_CLOSESESSIONENTRYPOINT 0x00000101
284#define TEE_PANIC_ID_TA_CREATEENTRYPOINT 0x00000102
285#define TEE_PANIC_ID_TA_DESTROYENTRYPOINT 0x00000103
286#define TEE_PANIC_ID_TA_INVOKECOMMANDENTRYPOINT 0x00000104
287#define TEE_PANIC_ID_TA_OPENSESSIONENTRYPOINT 0x00000105
288/* Property Access */
289#define TEE_PANIC_ID_TEE_ALLOCATEPROPERTYENUMERATOR 0x00000201
290#define TEE_PANIC_ID_TEE_FREEPROPERTYENUMERATOR 0x00000202
291#define TEE_PANIC_ID_TEE_GETNEXTPROPERTY 0x00000203
292#define TEE_PANIC_ID_TEE_GETPROPERTYASBINARYBLOCK 0x00000204
293#define TEE_PANIC_ID_TEE_GETPROPERTYASBOOL 0x00000205
294#define TEE_PANIC_ID_TEE_GETPROPERTYASIDENTITY 0x00000206
295#define TEE_PANIC_ID_TEE_GETPROPERTYASSTRING 0x00000207
296#define TEE_PANIC_ID_TEE_GETPROPERTYASU32 0x00000208
297#define TEE_PANIC_ID_TEE_GETPROPERTYASUUID 0x00000209
298#define TEE_PANIC_ID_TEE_GETPROPERTYNAME 0x0000020A
299#define TEE_PANIC_ID_TEE_RESETPROPERTYENUMERATOR 0x0000020B
300#define TEE_PANIC_ID_TEE_STARTPROPERTYENUMERATOR 0x0000020C
301/* Panic Function */
302#define TEE_PANIC_ID_TEE_PANIC 0x00000301
303/* Internal Client API */
304#define TEE_PANIC_ID_TEE_CLOSETASESSION 0x00000401
305#define TEE_PANIC_ID_TEE_INVOKETACOMMAND 0x00000402
306#define TEE_PANIC_ID_TEE_OPENTASESSION 0x00000403
307/* Cancellation */
308#define TEE_PANIC_ID_TEE_GETCANCELLATIONFLAG 0x00000501
309#define TEE_PANIC_ID_TEE_MASKCANCELLATION 0x00000502
310#define TEE_PANIC_ID_TEE_UNMASKCANCELLATION 0x00000503
311/* Memory Management */
312#define TEE_PANIC_ID_TEE_CHECKMEMORYACCESSRIGHTS 0x00000601
313#define TEE_PANIC_ID_TEE_FREE 0x00000602
314#define TEE_PANIC_ID_TEE_GETINSTANCEDATA 0x00000603
315#define TEE_PANIC_ID_TEE_MALLOC 0x00000604
316#define TEE_PANIC_ID_TEE_MEMCOMPARE 0x00000605
317#define TEE_PANIC_ID_TEE_MEMFILL 0x00000606
318#define TEE_PANIC_ID_TEE_MEMMOVE 0x00000607
319#define TEE_PANIC_ID_TEE_REALLOC 0x00000608
320#define TEE_PANIC_ID_TEE_SETINSTANCEDATA 0x00000609
321/* Generic Object */
322#define TEE_PANIC_ID_TEE_CLOSEOBJECT 0x00000701
323#define TEE_PANIC_ID_TEE_GETOBJECTBUFFERATTRIBUTE 0x00000702
324/* deprecated */
325#define TEE_PANIC_ID_TEE_GETOBJECTINFO 0x00000703
326#define TEE_PANIC_ID_TEE_GETOBJECTVALUEATTRIBUTE 0x00000704
327/* deprecated */
328#define TEE_PANIC_ID_TEE_RESTRICTOBJECTUSAGE 0x00000705
329#define TEE_PANIC_ID_TEE_GETOBJECTINFO1 0x00000706
330#define TEE_PANIC_ID_TEE_RESTRICTOBJECTUSAGE1 0x00000707
331/* Transient Object */
332#define TEE_PANIC_ID_TEE_ALLOCATETRANSIENTOBJECT 0x00000801
333/* deprecated */
334#define TEE_PANIC_ID_TEE_COPYOBJECTATTRIBUTES 0x00000802
335#define TEE_PANIC_ID_TEE_FREETRANSIENTOBJECT 0x00000803
336#define TEE_PANIC_ID_TEE_GENERATEKEY 0x00000804
337#define TEE_PANIC_ID_TEE_INITREFATTRIBUTE 0x00000805
338#define TEE_PANIC_ID_TEE_INITVALUEATTRIBUTE 0x00000806
339#define TEE_PANIC_ID_TEE_POPULATETRANSIENTOBJECT 0x00000807
340#define TEE_PANIC_ID_TEE_RESETTRANSIENTOBJECT 0x00000808
341#define TEE_PANIC_ID_TEE_COPYOBJECTATTRIBUTES1 0x00000809
342/* Persistent Object */
343/* deprecated */
344#define TEE_PANIC_ID_TEE_CLOSEANDDELETEPERSISTENTOBJECT 0x00000901
345#define TEE_PANIC_ID_TEE_CREATEPERSISTENTOBJECT 0x00000902
346#define TEE_PANIC_ID_TEE_OPENPERSISTENTOBJECT 0x00000903
347#define TEE_PANIC_ID_TEE_RENAMEPERSISTENTOBJECT 0x00000904
348#define TEE_PANIC_ID_TEE_CLOSEANDDELETEPERSISTENTOBJECT1 0x00000905
349/* Persistent Object Enumeration */
350#define TEE_PANIC_ID_TEE_ALLOCATEPERSISTENTOBJECTENUMERATOR 0x00000A01
351#define TEE_PANIC_ID_TEE_FREEPERSISTENTOBJECTENUMERATOR 0x00000A02
352#define TEE_PANIC_ID_TEE_GETNEXTPERSISTENTOBJECT 0x00000A03
353#define TEE_PANIC_ID_TEE_RESETPERSISTENTOBJECTENUMERATOR 0x00000A04
354#define TEE_PANIC_ID_TEE_STARTPERSISTENTOBJECTENUMERATOR 0x00000A05
355/* Data Stream Access */
356#define TEE_PANIC_ID_TEE_READOBJECTDATA 0x00000B01
357#define TEE_PANIC_ID_TEE_SEEKOBJECTDATA 0x00000B02
358#define TEE_PANIC_ID_TEE_TRUNCATEOBJECTDATA 0x00000B03
359#define TEE_PANIC_ID_TEE_WRITEOBJECTDATA 0x00000B04
360/* Generic Operation */
361#define TEE_PANIC_ID_TEE_ALLOCATEOPERATION 0x00000C01
362#define TEE_PANIC_ID_TEE_COPYOPERATION 0x00000C02
363#define TEE_PANIC_ID_TEE_FREEOPERATION 0x00000C03
364#define TEE_PANIC_ID_TEE_GETOPERATIONINFO 0x00000C04
365#define TEE_PANIC_ID_TEE_RESETOPERATION 0x00000C05
366#define TEE_PANIC_ID_TEE_SETOPERATIONKEY 0x00000C06
367#define TEE_PANIC_ID_TEE_SETOPERATIONKEY2 0x00000C07
368#define TEE_PANIC_ID_TEE_GETOPERATIONINFOMULTIPLE 0x00000C08
369/* Message Digest */
370#define TEE_PANIC_ID_TEE_DIGESTDOFINAL 0x00000D01
371#define TEE_PANIC_ID_TEE_DIGESTUPDATE 0x00000D02
372/* Symmetric Cipher */
373#define TEE_PANIC_ID_TEE_CIPHERDOFINAL 0x00000E01
374#define TEE_PANIC_ID_TEE_CIPHERINIT 0x00000E02
375#define TEE_PANIC_ID_TEE_CIPHERUPDATE 0x00000E03
376/* MAC */
377#define TEE_PANIC_ID_TEE_MACCOMPAREFINAL 0x00000F01
378#define TEE_PANIC_ID_TEE_MACCOMPUTEFINAL 0x00000F02
379#define TEE_PANIC_ID_TEE_MACINIT 0x00000F03
380#define TEE_PANIC_ID_TEE_MACUPDATE 0x00000F04
381/* Authenticated Encryption */
382#define TEE_PANIC_ID_TEE_AEDECRYPTFINAL 0x00001001
383#define TEE_PANIC_ID_TEE_AEENCRYPTFINAL 0x00001002
384#define TEE_PANIC_ID_TEE_AEINIT 0x00001003
385#define TEE_PANIC_ID_TEE_AEUPDATE 0x00001004
386#define TEE_PANIC_ID_TEE_AEUPDATEAAD 0x00001005
387/* Asymmetric */
388#define TEE_PANIC_ID_TEE_ASYMMETRICDECRYPT 0x00001101
389#define TEE_PANIC_ID_TEE_ASYMMETRICENCRYPT 0x00001102
390#define TEE_PANIC_ID_TEE_ASYMMETRICSIGNDIGEST 0x00001103
391#define TEE_PANIC_ID_TEE_ASYMMETRICVERIFYDIGEST 0x00001104
392/* Key Derivation */
393#define TEE_PANIC_ID_TEE_DERIVEKEY 0x00001201
394/* Random Data Generation */
395#define TEE_PANIC_ID_TEE_GENERATERANDOM 0x00001301
396/* Time */
397#define TEE_PANIC_ID_TEE_GETREETIME 0x00001401
398#define TEE_PANIC_ID_TEE_GETSYSTEMTIME 0x00001402
399#define TEE_PANIC_ID_TEE_GETTAPERSISTENTTIME 0x00001403
400#define TEE_PANIC_ID_TEE_SETTAPERSISTENTTIME 0x00001404
401#define TEE_PANIC_ID_TEE_WAIT 0x00001405
402/* Memory Allocation and Size of Objects */
403#define TEE_PANIC_ID_TEE_BIGINTFMMCONTEXTSIZEINU32 0x00001501
404#define TEE_PANIC_ID_TEE_BIGINTFMMSIZEINU32 0x00001502
405/* Initialization */
406#define TEE_PANIC_ID_TEE_BIGINTINIT 0x00001601
407#define TEE_PANIC_ID_TEE_BIGINTINITFMM 0x00001602
408#define TEE_PANIC_ID_TEE_BIGINTINITFMMCONTEXT 0x00001603
409/* Converter */
410#define TEE_PANIC_ID_TEE_BIGINTCONVERTFROMOCTETSTRING 0x00001701
411#define TEE_PANIC_ID_TEE_BIGINTCONVERTFROMS32 0x00001702
412#define TEE_PANIC_ID_TEE_BIGINTCONVERTTOOCTETSTRING 0x00001703
413#define TEE_PANIC_ID_TEE_BIGINTCONVERTTOS32 0x00001704
414/* Logical Operation */
415#define TEE_PANIC_ID_TEE_BIGINTCMP 0x00001801
416#define TEE_PANIC_ID_TEE_BIGINTCMPS32 0x00001802
417#define TEE_PANIC_ID_TEE_BIGINTGETBIT 0x00001803
418#define TEE_PANIC_ID_TEE_BIGINTGETBITCOUNT 0x00001804
419#define TEE_PANIC_ID_TEE_BIGINTSHIFTRIGHT 0x00001805
420/* Basic Arithmetic */
421#define TEE_PANIC_ID_TEE_BIGINTADD 0x00001901
422#define TEE_PANIC_ID_TEE_BIGINTDIV 0x00001902
423#define TEE_PANIC_ID_TEE_BIGINTMUL 0x00001903
424#define TEE_PANIC_ID_TEE_BIGINTNEG 0x00001904
425#define TEE_PANIC_ID_TEE_BIGINTSQUARE 0x00001905
426#define TEE_PANIC_ID_TEE_BIGINTSUB 0x00001906
427/* Modular Arithmetic */
428#define TEE_PANIC_ID_TEE_BIGINTADDMOD 0x00001A01
429#define TEE_PANIC_ID_TEE_BIGINTINVMOD 0x00001A02
430#define TEE_PANIC_ID_TEE_BIGINTMOD 0x00001A03
431#define TEE_PANIC_ID_TEE_BIGINTMULMOD 0x00001A04
432#define TEE_PANIC_ID_TEE_BIGINTSQUAREMOD 0x00001A05
433#define TEE_PANIC_ID_TEE_BIGINTSUBMOD 0x00001A06
434/* Other Arithmetic */
435#define TEE_PANIC_ID_TEE_BIGINTCOMPUTEEXTENDEDGCD 0x00001B01
436#define TEE_PANIC_ID_TEE_BIGINTISPROBABLEPRIME 0x00001B02
437#define TEE_PANIC_ID_TEE_BIGINTRELATIVEPRIME 0x00001B03
438/* Fast Modular Multiplication */
439#define TEE_PANIC_ID_TEE_BIGINTCOMPUTEFMM 0x00001C01
440#define TEE_PANIC_ID_TEE_BIGINTCONVERTFROMFMM 0x00001C02
441#define TEE_PANIC_ID_TEE_BIGINTCONVERTTOFMM 0x00001C03
442
443/*
444 * The macro TEE_PARAM_TYPES can be used to construct a value that you can
445 * compare against an incoming paramTypes to check the type of all the
446 * parameters in one comparison, like in the following example:
447 * if (paramTypes != TEE_PARAM_TYPES(TEE_PARAM_TYPE_MEMREF_INPUT,
448 * TEE_PARAM_TYPE_MEMREF_OUPUT,
449 * TEE_PARAM_TYPE_NONE, TEE_PARAM_TYPE_NONE)) {
450 * return TEE_ERROR_BAD_PARAMETERS;
451 * }
452 */
453#define TEE_PARAM_TYPES(t0,t1,t2,t3) \
454 ((t0) | ((t1) << 4) | ((t2) << 8) | ((t3) << 12))
455
456/*
457 * The macro TEE_PARAM_TYPE_GET can be used to extract the type of a given
458 * parameter from paramTypes if you need more fine-grained type checking.
459 */
460#define TEE_PARAM_TYPE_GET(t, i) ((((uint32_t)t) >> ((i)*4)) & 0xF)
461
462/*
463 * The macro TEE_PARAM_TYPE_SET can be used to load the type of a given
464 * parameter from paramTypes without specifying all types (TEE_PARAM_TYPES)
465 */
466#define TEE_PARAM_TYPE_SET(t, i) (((uint32_t)(t) & 0xF) << ((i)*4))
467
468/* Not specified in the standard */
469#define TEE_NUM_PARAMS 4
470
471/* TEE Arithmetical APIs */
472
473#define TEE_BigIntSizeInU32(n) ((((n)+31)/32)+2)
474
475#endif /*DOXYGEN_SHOULD_SKIP_THIS*/
476#endif /* TEE_API_DEFINES_H */