1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//   http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.

use super::tee_api_types::*;
use core::ptr::null;

pub const TEE_CORE_API_MAJOR_VERSION: u32 = 0x00000001;
pub const TEE_CORE_API_MINOR_VERSION: u32 = 0x00000003;
pub const TEE_CORE_API_MAINTENANCE_VERSION: u32 = 0x00000001;

pub const TEE_HANDLE_NULL: *const u32 = null();

pub const TEE_TIMEOUT_INFINITE: u32 = 0xFFFFFFFF;

// API Error Codes
pub const TEE_SUCCESS: u32 = 0x00000000;
pub const TEE_ERROR_CORRUPT_OBJECT: u32 = 0xF0100001;
pub const TEE_ERROR_CORRUPT_OBJECT_2: u32 = 0xF0100002;
pub const TEE_ERROR_STORAGE_NOT_AVAILABLE: u32 = 0xF0100003;
pub const TEE_ERROR_STORAGE_NOT_AVAILABLE_2: u32 = 0xF0100004;
pub const TEE_ERROR_UNSUPPORTED_VERSION: u32 = 0xF0100005;
pub const TEE_ERROR_CIPHERTEXT_INVALID: u32 = 0xF0100006;
pub const TEE_ERROR_GENERIC: u32 = 0xFFFF0000;
pub const TEE_ERROR_ACCESS_DENIED: u32 = 0xFFFF0001;
pub const TEE_ERROR_CANCEL: u32 = 0xFFFF0002;
pub const TEE_ERROR_ACCESS_CONFLICT: u32 = 0xFFFF0003;
pub const TEE_ERROR_EXCESS_DATA: u32 = 0xFFFF0004;
pub const TEE_ERROR_BAD_FORMAT: u32 = 0xFFFF0005;
pub const TEE_ERROR_BAD_PARAMETERS: u32 = 0xFFFF0006;
pub const TEE_ERROR_BAD_STATE: u32 = 0xFFFF0007;
pub const TEE_ERROR_ITEM_NOT_FOUND: u32 = 0xFFFF0008;
pub const TEE_ERROR_NOT_IMPLEMENTED: u32 = 0xFFFF0009;
pub const TEE_ERROR_NOT_SUPPORTED: u32 = 0xFFFF000A;
pub const TEE_ERROR_NO_DATA: u32 = 0xFFFF000B;
pub const TEE_ERROR_OUT_OF_MEMORY: u32 = 0xFFFF000C;
pub const TEE_ERROR_BUSY: u32 = 0xFFFF000D;
pub const TEE_ERROR_COMMUNICATION: u32 = 0xFFFF000E;
pub const TEE_ERROR_SECURITY: u32 = 0xFFFF000F;
pub const TEE_ERROR_SHORT_BUFFER: u32 = 0xFFFF0010;
pub const TEE_ERROR_EXTERNAL_CANCEL: u32 = 0xFFFF0011;
pub const TEE_ERROR_TIMEOUT: u32 = 0xFFFF3001;
pub const TEE_ERROR_OVERFLOW: u32 = 0xFFFF300F;
pub const TEE_ERROR_TARGET_DEAD: u32 = 0xFFFF3024;
pub const TEE_ERROR_STORAGE_NO_SPACE: u32 = 0xFFFF3041;
pub const TEE_ERROR_MAC_INVALID: u32 = 0xFFFF3071;
pub const TEE_ERROR_SIGNATURE_INVALID: u32 = 0xFFFF3072;
pub const TEE_ERROR_TIME_NOT_SET: u32 = 0xFFFF5000;
pub const TEE_ERROR_TIME_NEEDS_RESET: u32 = 0xFFFF5001;

// Parameter Type Constants
pub const TEE_PARAM_TYPE_NONE: u32 = 0;
pub const TEE_PARAM_TYPE_VALUE_INPUT: u32 = 1;
pub const TEE_PARAM_TYPE_VALUE_OUTPUT: u32 = 2;
pub const TEE_PARAM_TYPE_VALUE_INOUT: u32 = 3;
pub const TEE_PARAM_TYPE_MEMREF_INPUT: u32 = 5;
pub const TEE_PARAM_TYPE_MEMREF_OUTPUT: u32 = 6;
pub const TEE_PARAM_TYPE_MEMREF_INOUT: u32 = 7;

// Login Type Constants
pub const TEE_LOGIN_PUBLIC: u32 = 0x00000000;
pub const TEE_LOGIN_USER: u32 = 0x00000001;
pub const TEE_LOGIN_GROUP: u32 = 0x00000002;
pub const TEE_LOGIN_APPLICATION: u32 = 0x00000004;
pub const TEE_LOGIN_APPLICATION_USER: u32 = 0x00000005;
pub const TEE_LOGIN_APPLICATION_GROUP: u32 = 0x00000006;
pub const TEE_LOGIN_TRUSTED_APP: u32 = 0xF0000000;

// Origin Code Constants
pub const TEE_ORIGIN_API: u32 = 0x00000001;
pub const TEE_ORIGIN_COMMS: u32 = 0x00000002;
pub const TEE_ORIGIN_TEE: u32 = 0x00000003;
pub const TEE_ORIGIN_TRUSTED_APP: u32 = 0x00000004;

// Property Sets pseudo handles
pub const TEE_PROPSET_TEE_IMPLEMENTATION: TEE_PropSetHandle = 0xFFFFFFFD as *mut _;
pub const TEE_PROPSET_CURRENT_CLIENT: TEE_PropSetHandle = 0xFFFFFFFE as *mut _;
pub const TEE_PROPSET_CURRENT_TA: TEE_PropSetHandle = 0xFFFFFFFF as *mut _;

// Memory Access Rights Constants
pub const TEE_MEMORY_ACCESS_READ: u32 = 0x00000001;
pub const TEE_MEMORY_ACCESS_WRITE: u32 = 0x00000002;
pub const TEE_MEMORY_ACCESS_ANY_OWNER: u32 = 0x00000004;

// Memory Management Constants
pub const TEE_MALLOC_FILL_ZERO: u32 = 0x00000000;
pub const TEE_MALLOC_NO_FILL: u32 = 0x00000001;
pub const TEE_MALLOC_NO_SHARE: u32 = 0x00000002;

// TEE_Whence Constants
pub const TEE_DATA_SEEK_SET: u32 = 0x00000000;
pub const TEE_DATA_SEEK_CUR: u32 = 0x00000001;
pub const TEE_DATA_SEEK_END: u32 = 0x00000002;
pub const TEE_WHENCE_ILLEGAL_VALUE: u32 = 0x7FFFFFFF;

// TEE_OperationMode Values
pub const TEE_MODE_ENCRYPT: u32 = 0x00000000;
pub const TEE_MODE_DECRYPT: u32 = 0x00000001;
pub const TEE_MODE_SIGN: u32 = 0x00000002;
pub const TEE_MODE_VERIFY: u32 = 0x00000003;
pub const TEE_MODE_MAC: u32 = 0x00000004;
pub const TEE_MODE_DIGEST: u32 = 0x00000005;
pub const TEE_MODE_DERIVE: u32 = 0x00000006;
pub const TEE_MODE_ILLEGAL_VALUE: u32 = 0x7FFFFFFF;

// Other constants
pub const TEE_STORAGE_PRIVATE: u32 = 0x00000001;

pub const TEE_DATA_FLAG_ACCESS_READ: u32 = 0x00000001;
pub const TEE_DATA_FLAG_ACCESS_WRITE: u32 = 0x00000002;
pub const TEE_DATA_FLAG_ACCESS_WRITE_META: u32 = 0x00000004;
pub const TEE_DATA_FLAG_SHARE_READ: u32 = 0x00000010;
pub const TEE_DATA_FLAG_SHARE_WRITE: u32 = 0x00000020;
pub const TEE_DATA_FLAG_OVERWRITE: u32 = 0x00000400;
pub const TEE_DATA_MAX_POSITION: u32 = 0xFFFFFFFF;
pub const TEE_OBJECT_ID_MAX_LEN: u32 = 64;
pub const TEE_USAGE_EXTRACTABLE: u32 = 0x00000001;
pub const TEE_USAGE_ENCRYPT: u32 = 0x00000002;
pub const TEE_USAGE_DECRYPT: u32 = 0x00000004;
pub const TEE_USAGE_MAC: u32 = 0x00000008;
pub const TEE_USAGE_SIGN: u32 = 0x00000010;
pub const TEE_USAGE_VERIFY: u32 = 0x00000020;
pub const TEE_USAGE_DERIVE: u32 = 0x00000040;
pub const TEE_HANDLE_FLAG_PERSISTENT: u32 = 0x00010000;
pub const TEE_HANDLE_FLAG_INITIALIZED: u32 = 0x00020000;
pub const TEE_HANDLE_FLAG_KEY_SET: u32 = 0x00040000;
pub const TEE_HANDLE_FLAG_EXPECT_TWO_KEYS: u32 = 0x00080000;
pub const TEE_HANDLE_FLAG_EXTRACTING: u32 = 0x00100000;
pub const TEE_OPERATION_CIPHER: u32 = 1;
pub const TEE_OPERATION_MAC: u32 = 3;
pub const TEE_OPERATION_AE: u32 = 4;
pub const TEE_OPERATION_DIGEST: u32 = 5;
pub const TEE_OPERATION_ASYMMETRIC_CIPHER: u32 = 6;
pub const TEE_OPERATION_ASYMMETRIC_SIGNATURE: u32 = 7;
pub const TEE_OPERATION_KEY_DERIVATION: u32 = 8;
pub const TEE_OPERATION_STATE_INITIAL: u32 = 0x00000000;
pub const TEE_OPERATION_STATE_ACTIVE: u32 = 0x00000001;
pub const TEE_OPERATION_STATE_EXTRACTING: u32 = 0x00000002;

// below constants are not updated to 1.3.1
// Algorithm Identifiers
pub const TEE_ALG_AES_ECB_NOPAD: u32 = 0x10000010;
pub const TEE_ALG_AES_CBC_NOPAD: u32 = 0x10000110;
pub const TEE_ALG_AES_CTR: u32 = 0x10000210;
pub const TEE_ALG_AES_CTS: u32 = 0x10000310;
pub const TEE_ALG_AES_XTS: u32 = 0x10000410;
pub const TEE_ALG_AES_CBC_MAC_NOPAD: u32 = 0x30000110;
pub const TEE_ALG_AES_CBC_MAC_PKCS5: u32 = 0x30000510;
pub const TEE_ALG_AES_CMAC: u32 = 0x30000610;
pub const TEE_ALG_AES_CCM: u32 = 0x40000710;
pub const TEE_ALG_AES_GCM: u32 = 0x40000810;
pub const TEE_ALG_DES_ECB_NOPAD: u32 = 0x10000011;
pub const TEE_ALG_DES_CBC_NOPAD: u32 = 0x10000111;
pub const TEE_ALG_DES_CBC_MAC_NOPAD: u32 = 0x30000111;
pub const TEE_ALG_DES_CBC_MAC_PKCS5: u32 = 0x30000511;
pub const TEE_ALG_DES3_ECB_NOPAD: u32 = 0x10000013;
pub const TEE_ALG_DES3_CBC_NOPAD: u32 = 0x10000113;
pub const TEE_ALG_DES3_CBC_MAC_NOPAD: u32 = 0x30000113;
pub const TEE_ALG_DES3_CBC_MAC_PKCS5: u32 = 0x30000513;
pub const TEE_ALG_SM4_ECB_NOPAD: u32 = 0x10000014;
pub const TEE_ALG_SM4_CBC_NOPAD: u32 = 0x10000114;
pub const TEE_ALG_SM4_CTR: u32 = 0x10000214;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_MD5: u32 = 0x70001830;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_SHA1: u32 = 0x70002830;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_SHA224: u32 = 0x70003830;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_SHA256: u32 = 0x70004830;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_SHA384: u32 = 0x70005830;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_SHA512: u32 = 0x70006830;
pub const TEE_ALG_RSASSA_PKCS1_V1_5_MD5SHA1: u32 = 0x7000F830;
pub const TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA1: u32 = 0x70212930;
pub const TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA224: u32 = 0x70313930;
pub const TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA256: u32 = 0x70414930;
pub const TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA384: u32 = 0x70515930;
pub const TEE_ALG_RSASSA_PKCS1_PSS_MGF1_SHA512: u32 = 0x70616930;
pub const TEE_ALG_RSAES_PKCS1_V1_5: u32 = 0x60000130;
pub const TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA1: u32 = 0x60210230;
pub const TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA224: u32 = 0x60310230;
pub const TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA256: u32 = 0x60410230;
pub const TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA384: u32 = 0x60510230;
pub const TEE_ALG_RSAES_PKCS1_OAEP_MGF1_SHA512: u32 = 0x60610230;
pub const TEE_ALG_RSA_NOPAD: u32 = 0x60000030;
pub const TEE_ALG_DSA_SHA1: u32 = 0x70002131;
pub const TEE_ALG_DSA_SHA224: u32 = 0x70003131;
pub const TEE_ALG_DSA_SHA256: u32 = 0x70004131;
pub const TEE_ALG_SM2_DSA_SM3: u32 = 0x70006045;
pub const TEE_ALG_DH_DERIVE_SHARED_SECRET: u32 = 0x80000032;
pub const TEE_ALG_SM2_KEP: u32 = 0x60000045;
pub const TEE_ALG_MD5: u32 = 0x50000001;
pub const TEE_ALG_SHA1: u32 = 0x50000002;
pub const TEE_ALG_SHA224: u32 = 0x50000003;
pub const TEE_ALG_SHA256: u32 = 0x50000004;
pub const TEE_ALG_SHA384: u32 = 0x50000005;
pub const TEE_ALG_SHA512: u32 = 0x50000006;
pub const TEE_ALG_MD5SHA1: u32 = 0x5000000F;
pub const TEE_ALG_HMAC_MD5: u32 = 0x30000001;
pub const TEE_ALG_HMAC_SHA1: u32 = 0x30000002;
pub const TEE_ALG_HMAC_SHA224: u32 = 0x30000003;
pub const TEE_ALG_HMAC_SHA256: u32 = 0x30000004;
pub const TEE_ALG_HMAC_SHA384: u32 = 0x30000005;
pub const TEE_ALG_HMAC_SHA512: u32 = 0x30000006;
pub const TEE_ALG_HMAC_SM3: u32 = 0x30000007;
pub const TEE_ALG_ECDSA_P192: u32 = 0x70001041;
pub const TEE_ALG_ECDSA_P224: u32 = 0x70002041;
pub const TEE_ALG_ECDSA_P256: u32 = 0x70003041;
pub const TEE_ALG_ECDSA_P384: u32 = 0x70004041;
pub const TEE_ALG_ECDSA_P521: u32 = 0x70005041;
pub const TEE_ALG_ECDH_P192: u32 = 0x80001042;
pub const TEE_ALG_ECDH_P224: u32 = 0x80002042;
pub const TEE_ALG_ECDH_P256: u32 = 0x80003042;
pub const TEE_ALG_ECDH_P384: u32 = 0x80004042;
pub const TEE_ALG_ECDH_P521: u32 = 0x80005042;
pub const TEE_ALG_SM2_PKE: u32 = 0x80000045;
pub const TEE_ALG_SM3: u32 = 0x50000007;
pub const TEE_ALG_ILLEGAL_VALUE: u32 = 0xEFFFFFFF;

// Object Types
pub const TEE_TYPE_AES: u32 = 0xA0000010;
pub const TEE_TYPE_DES: u32 = 0xA0000011;
pub const TEE_TYPE_DES3: u32 = 0xA0000013;
pub const TEE_TYPE_SM4: u32 = 0xA0000014;
pub const TEE_TYPE_HMAC_MD5: u32 = 0xA0000001;
pub const TEE_TYPE_HMAC_SHA1: u32 = 0xA0000002;
pub const TEE_TYPE_HMAC_SHA224: u32 = 0xA0000003;
pub const TEE_TYPE_HMAC_SHA256: u32 = 0xA0000004;
pub const TEE_TYPE_HMAC_SHA384: u32 = 0xA0000005;
pub const TEE_TYPE_HMAC_SHA512: u32 = 0xA0000006;
pub const TEE_TYPE_HMAC_SM3: u32 = 0xA0000007;
pub const TEE_TYPE_RSA_PUBLIC_KEY: u32 = 0xA0000030;
pub const TEE_TYPE_RSA_KEYPAIR: u32 = 0xA1000030;
pub const TEE_TYPE_DSA_PUBLIC_KEY: u32 = 0xA0000031;
pub const TEE_TYPE_DSA_KEYPAIR: u32 = 0xA1000031;
pub const TEE_TYPE_DH_KEYPAIR: u32 = 0xA1000032;
pub const TEE_TYPE_ECDSA_PUBLIC_KEY: u32 = 0xA0000041;
pub const TEE_TYPE_ECDSA_KEYPAIR: u32 = 0xA1000041;
pub const TEE_TYPE_ECDH_PUBLIC_KEY: u32 = 0xA0000042;
pub const TEE_TYPE_ECDH_KEYPAIR: u32 = 0xA1000042;
pub const TEE_TYPE_SM2_DSA_PUBLIC_KEY: u32 = 0xA0000045;
pub const TEE_TYPE_SM2_DSA_KEYPAIR: u32 = 0xA1000045;
pub const TEE_TYPE_SM2_KEP_PUBLIC_KEY: u32 = 0xA0000046;
pub const TEE_TYPE_SM2_KEP_KEYPAIR: u32 = 0xA1000046;
pub const TEE_TYPE_SM2_PKE_PUBLIC_KEY: u32 = 0xA0000047;
pub const TEE_TYPE_SM2_PKE_KEYPAIR: u32 = 0xA1000047;
pub const TEE_TYPE_GENERIC_SECRET: u32 = 0xA0000000;
pub const TEE_TYPE_CORRUPTED_OBJECT: u32 = 0xA00000BE;
pub const TEE_TYPE_DATA: u32 = 0xA00000BF;

// List of Object or Operation Attributes
pub const TEE_ATTR_SECRET_VALUE: u32 = 0xC0000000;
pub const TEE_ATTR_RSA_MODULUS: u32 = 0xD0000130;
pub const TEE_ATTR_RSA_PUBLIC_EXPONENT: u32 = 0xD0000230;
pub const TEE_ATTR_RSA_PRIVATE_EXPONENT: u32 = 0xC0000330;
pub const TEE_ATTR_RSA_PRIME1: u32 = 0xC0000430;
pub const TEE_ATTR_RSA_PRIME2: u32 = 0xC0000530;
pub const TEE_ATTR_RSA_EXPONENT1: u32 = 0xC0000630;
pub const TEE_ATTR_RSA_EXPONENT2: u32 = 0xC0000730;
pub const TEE_ATTR_RSA_COEFFICIENT: u32 = 0xC0000830;
pub const TEE_ATTR_DSA_PRIME: u32 = 0xD0001031;
pub const TEE_ATTR_DSA_SUBPRIME: u32 = 0xD0001131;
pub const TEE_ATTR_DSA_BASE: u32 = 0xD0001231;
pub const TEE_ATTR_DSA_PUBLIC_VALUE: u32 = 0xD0000131;
pub const TEE_ATTR_DSA_PRIVATE_VALUE: u32 = 0xC0000231;
pub const TEE_ATTR_DH_PRIME: u32 = 0xD0001032;
pub const TEE_ATTR_DH_SUBPRIME: u32 = 0xD0001132;
pub const TEE_ATTR_DH_BASE: u32 = 0xD0001232;
pub const TEE_ATTR_DH_X_BITS: u32 = 0xF0001332;
pub const TEE_ATTR_DH_PUBLIC_VALUE: u32 = 0xD0000132;
pub const TEE_ATTR_DH_PRIVATE_VALUE: u32 = 0xC0000232;
pub const TEE_ATTR_RSA_OAEP_LABEL: u32 = 0xD0000930;
pub const TEE_ATTR_RSA_PSS_SALT_LENGTH: u32 = 0xF0000A30;
pub const TEE_ATTR_ECC_PUBLIC_VALUE_X: u32 = 0xD0000141;
pub const TEE_ATTR_ECC_PUBLIC_VALUE_Y: u32 = 0xD0000241;
pub const TEE_ATTR_ECC_PRIVATE_VALUE: u32 = 0xC0000341;
pub const TEE_ATTR_ECC_CURVE: u32 = 0xF0000441;
pub const TEE_ATTR_SM2_ID_INITIATOR: u32 = 0xD0000446;
pub const TEE_ATTR_SM2_ID_RESPONDER: u32 = 0xD0000546;
pub const TEE_ATTR_SM2_KEP_USER: u32 = 0xF0000646;
pub const TEE_ATTR_SM2_KEP_CONFIRMATION_IN: u32 = 0xD0000746;
pub const TEE_ATTR_SM2_KEP_CONFIRMATION_OUT: u32 = 0xD0000846;
pub const TEE_ATTR_ECC_EPHEMERAL_PUBLIC_VALUE_X: u32 = 0xD0000946;
pub const TEE_ATTR_ECC_EPHEMERAL_PUBLIC_VALUE_Y: u32 = 0xD0000A46;
pub const TEE_ATTR_FLAG_PUBLIC: u32 = 1 << 28;
pub const TEE_ATTR_FLAG_VALUE: u32 = 1 << 29;
// Deprecated, but kept for backwards compatibility
pub const TEE_ATTR_BIT_PROTECTED: u32 = 1 << 28;
pub const TEE_ATTR_BIT_VALUE: u32 = 1 << 29;

// List of Supported ECC Curves
pub const TEE_CRYPTO_ELEMENT_NONE: u32 = 0x00000000;
pub const TEE_ECC_CURVE_NIST_P192: u32 = 0x00000001;
pub const TEE_ECC_CURVE_NIST_P224: u32 = 0x00000002;
pub const TEE_ECC_CURVE_NIST_P256: u32 = 0x00000003;
pub const TEE_ECC_CURVE_NIST_P384: u32 = 0x00000004;
pub const TEE_ECC_CURVE_NIST_P521: u32 = 0x00000005;
pub const TEE_ECC_CURVE_SM2: u32 = 0x00000300;

// Panicked Functions Identification
// TA Interface
pub const TEE_PANIC_ID_TA_CLOSESESSIONENTRYPOINT: u32 = 0x00000101;
pub const TEE_PANIC_ID_TA_CREATEENTRYPOINT: u32 = 0x00000102;
pub const TEE_PANIC_ID_TA_DESTROYENTRYPOINT: u32 = 0x00000103;
pub const TEE_PANIC_ID_TA_INVOKECOMMANDENTRYPOINT: u32 = 0x00000104;
pub const TEE_PANIC_ID_TA_OPENSESSIONENTRYPOINT: u32 = 0x00000105;
/* Property Access */
pub const TEE_PANIC_ID_TEE_ALLOCATEPROPERTYENUMERATOR: u32 = 0x00000201;
pub const TEE_PANIC_ID_TEE_FREEPROPERTYENUMERATOR: u32 = 0x00000202;
pub const TEE_PANIC_ID_TEE_GETNEXTPROPERTY: u32 = 0x00000203;
pub const TEE_PANIC_ID_TEE_GETPROPERTYASBINARYBLOCK: u32 = 0x00000204;
pub const TEE_PANIC_ID_TEE_GETPROPERTYASBOOL: u32 = 0x00000205;
pub const TEE_PANIC_ID_TEE_GETPROPERTYASIDENTITY: u32 = 0x00000206;
pub const TEE_PANIC_ID_TEE_GETPROPERTYASSTRING: u32 = 0x00000207;
pub const TEE_PANIC_ID_TEE_GETPROPERTYASU32: u32 = 0x00000208;
pub const TEE_PANIC_ID_TEE_GETPROPERTYASUUID: u32 = 0x00000209;
pub const TEE_PANIC_ID_TEE_GETPROPERTYNAME: u32 = 0x0000020A;
pub const TEE_PANIC_ID_TEE_RESETPROPERTYENUMERATOR: u32 = 0x0000020B;
pub const TEE_PANIC_ID_TEE_STARTPROPERTYENUMERATOR: u32 = 0x0000020C;
// Panic Function
pub const TEE_PANIC_ID_TEE_PANIC: u32 = 0x00000301;
// Internal Client API
pub const TEE_PANIC_ID_TEE_CLOSETASESSION: u32 = 0x00000401;
pub const TEE_PANIC_ID_TEE_INVOKETACOMMAND: u32 = 0x00000402;
pub const TEE_PANIC_ID_TEE_OPENTASESSION: u32 = 0x00000403;
// Cancellation
pub const TEE_PANIC_ID_TEE_GETCANCELLATIONFLAG: u32 = 0x00000501;
pub const TEE_PANIC_ID_TEE_MASKCANCELLATION: u32 = 0x00000502;
pub const TEE_PANIC_ID_TEE_UNMASKCANCELLATION: u32 = 0x00000503;
// Memory Management
pub const TEE_PANIC_ID_TEE_CHECKMEMORYACCESSRIGHTS: u32 = 0x00000601;
pub const TEE_PANIC_ID_TEE_FREE: u32 = 0x00000602;
pub const TEE_PANIC_ID_TEE_GETINSTANCEDATA: u32 = 0x00000603;
pub const TEE_PANIC_ID_TEE_MALLOC: u32 = 0x00000604;
pub const TEE_PANIC_ID_TEE_MEMCOMPARE: u32 = 0x00000605;
pub const TEE_PANIC_ID_TEE_MEMFILL: u32 = 0x00000606;
pub const TEE_PANIC_ID_TEE_MEMMOVE: u32 = 0x00000607;
pub const TEE_PANIC_ID_TEE_REALLOC: u32 = 0x00000608;
pub const TEE_PANIC_ID_TEE_SETINSTANCEDATA: u32 = 0x00000609;
// Generic Object
pub const TEE_PANIC_ID_TEE_CLOSEOBJECT: u32 = 0x00000701;
pub const TEE_PANIC_ID_TEE_GETOBJECTBUFFERATTRIBUTE: u32 = 0x00000702;
// deprecated
pub const TEE_PANIC_ID_TEE_GETOBJECTINFO: u32 = 0x00000703;
pub const TEE_PANIC_ID_TEE_GETOBJECTVALUEATTRIBUTE: u32 = 0x00000704;
// deprecated
pub const TEE_PANIC_ID_TEE_RESTRICTOBJECTUSAGE: u32 = 0x00000705;
pub const TEE_PANIC_ID_TEE_GETOBJECTINFO1: u32 = 0x00000706;
pub const TEE_PANIC_ID_TEE_RESTRICTOBJECTUSAGE1: u32 = 0x00000707;
// Transient Object
pub const TEE_PANIC_ID_TEE_ALLOCATETRANSIENTOBJECT: u32 = 0x00000801;
// deprecated
pub const TEE_PANIC_ID_TEE_COPYOBJECTATTRIBUTES: u32 = 0x00000802;
pub const TEE_PANIC_ID_TEE_FREETRANSIENTOBJECT: u32 = 0x00000803;
pub const TEE_PANIC_ID_TEE_GENERATEKEY: u32 = 0x00000804;
pub const TEE_PANIC_ID_TEE_INITREFATTRIBUTE: u32 = 0x00000805;
pub const TEE_PANIC_ID_TEE_INITVALUEATTRIBUTE: u32 = 0x00000806;
pub const TEE_PANIC_ID_TEE_POPULATETRANSIENTOBJECT: u32 = 0x00000807;
pub const TEE_PANIC_ID_TEE_RESETTRANSIENTOBJECT: u32 = 0x00000808;
pub const TEE_PANIC_ID_TEE_COPYOBJECTATTRIBUTES1: u32 = 0x00000809;
// Persistent Object
// deprecated
pub const TEE_PANIC_ID_TEE_CLOSEANDDELETEPERSISTENTOBJECT: u32 = 0x00000901;
pub const TEE_PANIC_ID_TEE_CREATEPERSISTENTOBJECT: u32 = 0x00000902;
pub const TEE_PANIC_ID_TEE_OPENPERSISTENTOBJECT: u32 = 0x00000903;
pub const TEE_PANIC_ID_TEE_RENAMEPERSISTENTOBJECT: u32 = 0x00000904;
pub const TEE_PANIC_ID_TEE_CLOSEANDDELETEPERSISTENTOBJECT1: u32 = 0x00000905;
// Persistent Object Enumeration
pub const TEE_PANIC_ID_TEE_ALLOCATEPERSISTENTOBJECTENUMERATOR: u32 = 0x00000A01;
pub const TEE_PANIC_ID_TEE_FREEPERSISTENTOBJECTENUMERATOR: u32 = 0x00000A02;
pub const TEE_PANIC_ID_TEE_GETNEXTPERSISTENTOBJECT: u32 = 0x00000A03;
pub const TEE_PANIC_ID_TEE_RESETPERSISTENTOBJECTENUMERATOR: u32 = 0x00000A04;
pub const TEE_PANIC_ID_TEE_STARTPERSISTENTOBJECTENUMERATOR: u32 = 0x00000A05;
// Data Stream Access
pub const TEE_PANIC_ID_TEE_READOBJECTDATA: u32 = 0x00000B01;
pub const TEE_PANIC_ID_TEE_SEEKOBJECTDATA: u32 = 0x00000B02;
pub const TEE_PANIC_ID_TEE_TRUNCATEOBJECTDATA: u32 = 0x00000B03;
pub const TEE_PANIC_ID_TEE_WRITEOBJECTDATA: u32 = 0x00000B04;
// Generic Operation
pub const TEE_PANIC_ID_TEE_ALLOCATEOPERATION: u32 = 0x00000C01;
pub const TEE_PANIC_ID_TEE_COPYOPERATION: u32 = 0x00000C02;
pub const TEE_PANIC_ID_TEE_FREEOPERATION: u32 = 0x00000C03;
pub const TEE_PANIC_ID_TEE_GETOPERATIONINFO: u32 = 0x00000C04;
pub const TEE_PANIC_ID_TEE_RESETOPERATION: u32 = 0x00000C05;
pub const TEE_PANIC_ID_TEE_SETOPERATIONKEY: u32 = 0x00000C06;
pub const TEE_PANIC_ID_TEE_SETOPERATIONKEY2: u32 = 0x00000C07;
pub const TEE_PANIC_ID_TEE_GETOPERATIONINFOMULTIPLE: u32 = 0x00000C08;
// Message Digest
pub const TEE_PANIC_ID_TEE_DIGESTDOFINAL: u32 = 0x00000D01;
pub const TEE_PANIC_ID_TEE_DIGESTUPDATE: u32 = 0x00000D02;
// Symmetric Cipher
pub const TEE_PANIC_ID_TEE_CIPHERDOFINAL: u32 = 0x00000E01;
pub const TEE_PANIC_ID_TEE_CIPHERINIT: u32 = 0x00000E02;
pub const TEE_PANIC_ID_TEE_CIPHERUPDATE: u32 = 0x00000E03;
// MAC
pub const TEE_PANIC_ID_TEE_MACCOMPAREFINAL: u32 = 0x00000F01;
pub const TEE_PANIC_ID_TEE_MACCOMPUTEFINAL: u32 = 0x00000F02;
pub const TEE_PANIC_ID_TEE_MACINIT: u32 = 0x00000F03;
pub const TEE_PANIC_ID_TEE_MACUPDATE: u32 = 0x00000F04;
// Authenticated Encryption
pub const TEE_PANIC_ID_TEE_AEDECRYPTFINAL: u32 = 0x00001001;
pub const TEE_PANIC_ID_TEE_AEENCRYPTFINAL: u32 = 0x00001002;
pub const TEE_PANIC_ID_TEE_AEINIT: u32 = 0x00001003;
pub const TEE_PANIC_ID_TEE_AEUPDATE: u32 = 0x00001004;
pub const TEE_PANIC_ID_TEE_AEUPDATEAAD: u32 = 0x00001005;
// Asymmetric
pub const TEE_PANIC_ID_TEE_ASYMMETRICDECRYPT: u32 = 0x00001101;
pub const TEE_PANIC_ID_TEE_ASYMMETRICENCRYPT: u32 = 0x00001102;
pub const TEE_PANIC_ID_TEE_ASYMMETRICSIGNDIGEST: u32 = 0x00001103;
pub const TEE_PANIC_ID_TEE_ASYMMETRICVERIFYDIGEST: u32 = 0x00001104;
// Key Derivation
pub const TEE_PANIC_ID_TEE_DERIVEKEY: u32 = 0x00001201;
// Random Data Generation
pub const TEE_PANIC_ID_TEE_GENERATERANDOM: u32 = 0x00001301;
// Time
pub const TEE_PANIC_ID_TEE_GETREETIME: u32 = 0x00001401;
pub const TEE_PANIC_ID_TEE_GETSYSTEMTIME: u32 = 0x00001402;
pub const TEE_PANIC_ID_TEE_GETTAPERSISTENTTIME: u32 = 0x00001403;
pub const TEE_PANIC_ID_TEE_SETTAPERSISTENTTIME: u32 = 0x00001404;
pub const TEE_PANIC_ID_TEE_WAIT: u32 = 0x00001405;
// Memory Allocation and Size of Objects
pub const TEE_PANIC_ID_TEE_BIGINTFMMCONTEXTSIZEINU32: u32 = 0x00001501;
pub const TEE_PANIC_ID_TEE_BIGINTFMMSIZEINU32: u32 = 0x00001502;
// Initialization
pub const TEE_PANIC_ID_TEE_BIGINTINIT: u32 = 0x00001601;
pub const TEE_PANIC_ID_TEE_BIGINTINITFMM: u32 = 0x00001602;
pub const TEE_PANIC_ID_TEE_BIGINTINITFMMCONTEXT: u32 = 0x00001603;
// Converter
pub const TEE_PANIC_ID_TEE_BIGINTCONVERTFROMOCTETSTRING: u32 = 0x00001701;
pub const TEE_PANIC_ID_TEE_BIGINTCONVERTFROMS32: u32 = 0x00001702;
pub const TEE_PANIC_ID_TEE_BIGINTCONVERTTOOCTETSTRING: u32 = 0x00001703;
pub const TEE_PANIC_ID_TEE_BIGINTCONVERTTOS32: u32 = 0x00001704;
// Logical Operation
pub const TEE_PANIC_ID_TEE_BIGINTCMP: u32 = 0x00001801;
pub const TEE_PANIC_ID_TEE_BIGINTCMPS32: u32 = 0x00001802;
pub const TEE_PANIC_ID_TEE_BIGINTGETBIT: u32 = 0x00001803;
pub const TEE_PANIC_ID_TEE_BIGINTGETBITCOUNT: u32 = 0x00001804;
pub const TEE_PANIC_ID_TEE_BIGINTSHIFTRIGHT: u32 = 0x00001805;
// Basic Arithmetic
pub const TEE_PANIC_ID_TEE_BIGINTADD: u32 = 0x00001901;
pub const TEE_PANIC_ID_TEE_BIGINTDIV: u32 = 0x00001902;
pub const TEE_PANIC_ID_TEE_BIGINTMUL: u32 = 0x00001903;
pub const TEE_PANIC_ID_TEE_BIGINTNEG: u32 = 0x00001904;
pub const TEE_PANIC_ID_TEE_BIGINTSQUARE: u32 = 0x00001905;
pub const TEE_PANIC_ID_TEE_BIGINTSUB: u32 = 0x00001906;
// Modular Arithmetic
pub const TEE_PANIC_ID_TEE_BIGINTADDMOD: u32 = 0x00001A01;
pub const TEE_PANIC_ID_TEE_BIGINTINVMOD: u32 = 0x00001A02;
pub const TEE_PANIC_ID_TEE_BIGINTMOD: u32 = 0x00001A03;
pub const TEE_PANIC_ID_TEE_BIGINTMULMOD: u32 = 0x00001A04;
pub const TEE_PANIC_ID_TEE_BIGINTSQUAREMOD: u32 = 0x00001A05;
pub const TEE_PANIC_ID_TEE_BIGINTSUBMOD: u32 = 0x00001A06;
// Other Arithmetic
pub const TEE_PANIC_ID_TEE_BIGINTCOMPUTEEXTENDEDGCD: u32 = 0x00001B01;
pub const TEE_PANIC_ID_TEE_BIGINTISPROBABLEPRIME: u32 = 0x00001B02;
pub const TEE_PANIC_ID_TEE_BIGINTRELATIVEPRIME: u32 = 0x00001B03;
// Fast Modular Multiplication
pub const TEE_PANIC_ID_TEE_BIGINTCOMPUTEFMM: u32 = 0x00001C01;
pub const TEE_PANIC_ID_TEE_BIGINTCONVERTFROMFMM: u32 = 0x00001C02;
pub const TEE_PANIC_ID_TEE_BIGINTCONVERTTOFMM: u32 = 0x00001C03;

pub fn TEE_PARAM_TYPES(t0: u32, t1: u32, t2: u32, t3: u32) -> u32 {
    t0 | t1 << 4 | t2 << 8 | t3 << 12
}

pub const TEE_NUM_PARAMS: u32 = 4;