1#[cfg_attr(feature = "mock", mockall::automock)]
19pub mod api {
20 use crate::*;
21 use core::ffi::*;
22
23 unsafe extern "C" {
24 pub fn TEE_GetPropertyAsString(
27 propsetOrEnumerator: TEE_PropSetHandle,
28 name: *const c_char,
29 valueBuffer: *mut c_char,
30 valueBufferLen: *mut usize,
31 ) -> TEE_Result;
32 pub fn TEE_GetPropertyAsBool(
33 propsetOrEnumerator: TEE_PropSetHandle,
34 name: *const c_char,
35 value: *mut bool,
36 ) -> TEE_Result;
37 pub fn TEE_GetPropertyAsU32(
38 propsetOrEnumerator: TEE_PropSetHandle,
39 name: *const c_char,
40 value: *mut u32,
41 ) -> TEE_Result;
42 pub fn TEE_GetPropertyAsU64(
43 propsetOrEnumerator: TEE_PropSetHandle,
44 name: *const c_char,
45 value: *mut u64,
46 ) -> TEE_Result;
47 pub fn TEE_GetPropertyAsBinaryBlock(
48 propsetOrEnumerator: TEE_PropSetHandle,
49 name: *const c_char,
50 valueBuffer: *mut c_void,
51 valueBufferLen: *mut usize,
52 ) -> TEE_Result;
53 pub fn TEE_GetPropertyAsUUID(
54 propsetOrEnumerator: TEE_PropSetHandle,
55 name: *const c_char,
56 value: *mut TEE_UUID,
57 ) -> TEE_Result;
58 pub fn TEE_GetPropertyAsIdentity(
59 propsetOrEnumerator: TEE_PropSetHandle,
60 name: *const c_char,
61 value: *mut TEE_Identity,
62 ) -> TEE_Result;
63 pub fn TEE_AllocatePropertyEnumerator(enumerator: *mut TEE_PropSetHandle) -> TEE_Result;
64 pub fn TEE_FreePropertyEnumerator(enumerator: TEE_PropSetHandle);
65 pub fn TEE_StartPropertyEnumerator(
66 enumerator: TEE_PropSetHandle,
67 propSet: TEE_PropSetHandle,
68 );
69 pub fn TEE_ResetPropertyEnumerator(enumerator: TEE_PropSetHandle);
70 pub fn TEE_GetPropertyName(
71 enumerator: TEE_PropSetHandle,
72 nameBuffer: *mut c_void,
73 nameBufferLen: *mut usize,
74 ) -> TEE_Result;
75 pub fn TEE_GetNextProperty(enumerator: TEE_PropSetHandle) -> TEE_Result;
76
77 pub fn TEE_Panic(panicCode: TEE_Result);
80
81 pub fn TEE_OpenTASession(
84 destination: *const TEE_UUID,
85 cancellationRequestTimeout: u32,
86 paramTypes: u32,
87 params: *mut TEE_Param,
88 session: *mut TEE_TASessionHandle,
89 returnOrigin: *mut u32,
90 ) -> TEE_Result;
91 pub fn TEE_CloseTASession(session: TEE_TASessionHandle);
92 pub fn TEE_InvokeTACommand(
93 session: TEE_TASessionHandle,
94 cancellationRequestTimeout: u32,
95 commandID: u32,
96 paramTypes: u32,
97 params: *mut TEE_Param,
98 returnOrigin: *mut u32,
99 ) -> TEE_Result;
100
101 pub fn TEE_GetCancellationFlag() -> bool;
104 pub fn TEE_UnmaskCancellation() -> bool;
105 pub fn TEE_MaskCancellation() -> bool;
106
107 pub fn TEE_CheckMemoryAccessRights(
110 accessFlags: u32,
111 buffer: *mut c_void,
112 size: usize,
113 ) -> TEE_Result;
114 pub fn TEE_SetInstanceData(instanceData: *const c_void);
115 pub fn TEE_GetInstanceData() -> *const c_void;
116 pub fn TEE_Malloc(size: usize, hint: u32) -> *mut c_void;
117 pub fn TEE_Realloc(buffer: *mut c_void, newSize: usize) -> *mut c_void;
118 pub fn TEE_Free(buffer: *mut c_void);
119 pub fn TEE_MemMove(dest: *mut c_void, src: *const c_void, size: usize);
120 pub fn TEE_MemCompare(buffer1: *const c_void, buffer2: *const c_void, size: usize) -> i32;
121 pub fn TEE_MemFill(buff: *mut c_void, x: u32, size: usize);
122
123 pub fn TEE_GetObjectInfo(object: TEE_ObjectHandle, objectInfo: *mut TEE_ObjectInfo);
126 pub fn TEE_GetObjectInfo1(
127 object: TEE_ObjectHandle,
128 objectInfo: *mut TEE_ObjectInfo,
129 ) -> TEE_Result;
130 pub fn TEE_RestrictObjectUsage(object: TEE_ObjectHandle, objectUsage: u32);
131 pub fn TEE_RestrictObjectUsage1(object: TEE_ObjectHandle, objectUsage: u32) -> TEE_Result;
132 pub fn TEE_GetObjectBufferAttribute(
133 object: TEE_ObjectHandle,
134 attributeID: u32,
135 buffer: *mut c_void,
136 size: *mut usize,
137 ) -> TEE_Result;
138 pub fn TEE_GetObjectValueAttribute(
139 object: TEE_ObjectHandle,
140 attributeID: u32,
141 a: *mut u32,
142 b: *mut u32,
143 ) -> TEE_Result;
144 pub fn TEE_CloseObject(object: TEE_ObjectHandle);
145
146 pub fn TEE_AllocateTransientObject(
149 objectType: TEE_ObjectType,
150 maxObjectSize: u32,
151 object: *mut TEE_ObjectHandle,
152 ) -> TEE_Result;
153 pub fn TEE_FreeTransientObject(object: TEE_ObjectHandle) -> c_void;
154 pub fn TEE_ResetTransientObject(object: TEE_ObjectHandle) -> c_void;
155 pub fn TEE_PopulateTransientObject(
156 object: TEE_ObjectHandle,
157 attrs: *const TEE_Attribute,
158 attrCount: u32,
159 ) -> TEE_Result;
160 pub fn TEE_InitRefAttribute(
161 attr: *mut TEE_Attribute,
162 attributeID: u32,
163 buffer: *const c_void,
164 length: usize,
165 ) -> c_void;
166 pub fn TEE_InitValueAttribute(
167 attr: *mut TEE_Attribute,
168 attributeID: u32,
169 a: u32,
170 b: u32,
171 ) -> c_void;
172 pub fn TEE_CopyObjectAttributes(
173 destObject: TEE_ObjectHandle,
174 srcObject: TEE_ObjectHandle,
175 ) -> c_void;
176 pub fn TEE_CopyObjectAttributes1(
177 destObject: TEE_ObjectHandle,
178 srcObject: TEE_ObjectHandle,
179 ) -> TEE_Result;
180 pub fn TEE_GenerateKey(
181 object: TEE_ObjectHandle,
182 keySize: u32,
183 params: *const TEE_Attribute,
184 paramCount: u32,
185 ) -> TEE_Result;
186
187 pub fn TEE_OpenPersistentObject(
190 storageID: u32,
191 objectID: *const c_void,
192 objectIDLen: usize,
193 flags: u32,
194 object: *mut TEE_ObjectHandle,
195 ) -> TEE_Result;
196 pub fn TEE_CreatePersistentObject(
197 storageID: u32,
198 objectID: *const c_void,
199 objectIDLen: usize,
200 flags: u32,
201 attributes: TEE_ObjectHandle,
202 initialData: *const c_void,
203 initialDataLen: usize,
204 object: *mut TEE_ObjectHandle,
205 ) -> TEE_Result;
206 pub fn TEE_CloseAndDeletePersistentObject(object: TEE_ObjectHandle);
207 pub fn TEE_CloseAndDeletePersistentObject1(object: TEE_ObjectHandle) -> TEE_Result;
208 pub fn TEE_RenamePersistentObject(
209 object: TEE_ObjectHandle,
210 newObjectID: *const c_void,
211 newObjectIDLen: usize,
212 ) -> TEE_Result;
213 pub fn TEE_AllocatePersistentObjectEnumerator(
214 objectEnumerator: *mut TEE_ObjectEnumHandle,
215 ) -> TEE_Result;
216 pub fn TEE_FreePersistentObjectEnumerator(objectEnumerator: TEE_ObjectEnumHandle);
217 pub fn TEE_ResetPersistentObjectEnumerator(objectEnumerator: TEE_ObjectEnumHandle);
218 pub fn TEE_StartPersistentObjectEnumerator(
219 objectEnumerator: TEE_ObjectEnumHandle,
220 storageID: u32,
221 ) -> TEE_Result;
222 pub fn TEE_GetNextPersistentObject(
223 objectEnumerator: TEE_ObjectEnumHandle,
224 objectInfo: *mut TEE_ObjectInfo,
225 objectID: *mut c_void,
226 objectIDLen: *mut usize,
227 ) -> TEE_Result;
228
229 pub fn TEE_ReadObjectData(
232 object: TEE_ObjectHandle,
233 buffer: *mut c_void,
234 size: usize,
235 count: *mut usize,
236 ) -> TEE_Result;
237 pub fn TEE_WriteObjectData(
238 object: TEE_ObjectHandle,
239 buffer: *const c_void,
240 size: usize,
241 ) -> TEE_Result;
242 pub fn TEE_TruncateObjectData(object: TEE_ObjectHandle, size: usize) -> TEE_Result;
243 pub fn TEE_SeekObjectData(
244 object: TEE_ObjectHandle,
245 offset: intmax_t,
246 whence: TEE_Whence,
247 ) -> TEE_Result;
248
249 pub fn TEE_AllocateOperation(
252 operation: *mut TEE_OperationHandle,
253 algorithm: u32,
254 mode: u32,
255 maxKeySize: u32,
256 ) -> TEE_Result;
257 pub fn TEE_FreeOperation(operation: TEE_OperationHandle) -> c_void;
258 pub fn TEE_GetOperationInfo(
259 operation: TEE_OperationHandle,
260 operationInfo: *mut TEE_OperationInfo,
261 ) -> c_void;
262 pub fn TEE_GetOperationInfoMultiple(
263 operation: TEE_OperationHandle,
264 operationInfoMultiple: *mut TEE_OperationInfoMultiple,
265 operationSize: *mut usize,
266 ) -> TEE_Result;
267 pub fn TEE_ResetOperation(operation: TEE_OperationHandle) -> c_void;
268 pub fn TEE_SetOperationKey(
269 operation: TEE_OperationHandle,
270 key: TEE_ObjectHandle,
271 ) -> TEE_Result;
272 pub fn TEE_SetOperationKey2(
273 operation: TEE_OperationHandle,
274 key1: TEE_ObjectHandle,
275 key2: TEE_ObjectHandle,
276 ) -> TEE_Result;
277 pub fn TEE_CopyOperation(
278 dstOperation: TEE_OperationHandle,
279 srcOperation: TEE_OperationHandle,
280 ) -> c_void;
281 pub fn TEE_IsAlgorithmSupported(algId: u32, element: u32) -> TEE_Result;
282
283 pub fn TEE_DigestUpdate(
286 operation: TEE_OperationHandle,
287 chunk: *const c_void,
288 chunkSize: usize,
289 ) -> c_void;
290 pub fn TEE_DigestDoFinal(
291 operation: TEE_OperationHandle,
292 chunk: *const c_void,
293 chunkLen: usize,
294 hash: *mut c_void,
295 hashLen: *mut usize,
296 ) -> TEE_Result;
297
298 pub fn TEE_CipherInit(
301 operation: TEE_OperationHandle,
302 IV: *const c_void,
303 IVLen: usize,
304 ) -> c_void;
305 pub fn TEE_CipherUpdate(
306 operation: TEE_OperationHandle,
307 srcData: *const c_void,
308 srcLen: usize,
309 destData: *mut c_void,
310 destLen: *mut usize,
311 ) -> TEE_Result;
312 pub fn TEE_CipherDoFinal(
313 operation: TEE_OperationHandle,
314 srcData: *const c_void,
315 srcLen: usize,
316 destData: *mut c_void,
317 destLen: *mut usize,
318 ) -> TEE_Result;
319
320 pub fn TEE_MACInit(
323 operation: TEE_OperationHandle,
324 IV: *const c_void,
325 IVLen: usize,
326 ) -> c_void;
327 pub fn TEE_MACUpdate(
328 operation: TEE_OperationHandle,
329 chunk: *const c_void,
330 chunkSize: usize,
331 ) -> c_void;
332 pub fn TEE_MACComputeFinal(
333 operation: TEE_OperationHandle,
334 message: *const c_void,
335 messageLen: usize,
336 mac: *mut c_void,
337 macLen: *mut usize,
338 ) -> TEE_Result;
339 pub fn TEE_MACCompareFinal(
340 operation: TEE_OperationHandle,
341 message: *const c_void,
342 messageLen: usize,
343 mac: *const c_void,
344 macLen: usize,
345 ) -> TEE_Result;
346
347 pub fn TEE_AEInit(
350 operation: TEE_OperationHandle,
351 nonce: *const c_void,
352 nonceLen: usize,
353 tagLen: u32,
354 AADLen: usize,
355 payloadLen: usize,
356 ) -> TEE_Result;
357 pub fn TEE_AEUpdateAAD(
358 operation: TEE_OperationHandle,
359 AADdata: *const c_void,
360 AADdataLen: usize,
361 ) -> c_void;
362 pub fn TEE_AEUpdate(
363 operation: TEE_OperationHandle,
364 srcData: *const c_void,
365 srcLen: usize,
366 destData: *mut c_void,
367 destLen: *mut usize,
368 ) -> TEE_Result;
369 pub fn TEE_AEEncryptFinal(
370 operation: TEE_OperationHandle,
371 srcData: *const c_void,
372 srcLen: usize,
373 destData: *mut c_void,
374 destLen: *mut usize,
375 tag: *mut c_void,
376 tagLen: *mut usize,
377 ) -> TEE_Result;
378 pub fn TEE_AEDecryptFinal(
379 operation: TEE_OperationHandle,
380 srcData: *const c_void,
381 srcLen: usize,
382 destData: *mut c_void,
383 destLen: *mut usize,
384 tag: *mut c_void,
385 tagLen: usize,
386 ) -> TEE_Result;
387
388 pub fn TEE_AsymmetricEncrypt(
391 operation: TEE_OperationHandle,
392 params: *const TEE_Attribute,
393 paramCount: u32,
394 srcData: *const c_void,
395 srcLen: usize,
396 destData: *mut c_void,
397 destLen: *mut usize,
398 ) -> TEE_Result;
399 pub fn TEE_AsymmetricDecrypt(
400 operation: TEE_OperationHandle,
401 params: *const TEE_Attribute,
402 paramCount: u32,
403 srcData: *const c_void,
404 srcLen: usize,
405 destData: *mut c_void,
406 destLen: *mut usize,
407 ) -> TEE_Result;
408 pub fn TEE_AsymmetricSignDigest(
409 operation: TEE_OperationHandle,
410 params: *const TEE_Attribute,
411 paramCount: u32,
412 digest: *const c_void,
413 digestLen: usize,
414 signature: *mut c_void,
415 signatureLen: *mut usize,
416 ) -> TEE_Result;
417 pub fn TEE_AsymmetricVerifyDigest(
418 operation: TEE_OperationHandle,
419 params: *const TEE_Attribute,
420 paramCount: u32,
421 digest: *const c_void,
422 digestLen: usize,
423 signature: *const c_void,
424 signatureLen: usize,
425 ) -> TEE_Result;
426
427 pub fn TEE_DeriveKey(
430 operation: TEE_OperationHandle,
431 params: *const TEE_Attribute,
432 paramCount: u32,
433 derivedKey: TEE_ObjectHandle,
434 ) -> c_void;
435
436 pub fn TEE_GenerateRandom(randomBuffer: *mut c_void, randomBufferLen: usize) -> c_void;
439
440 pub fn TEE_GetSystemTime(time: *mut TEE_Time) -> c_void;
443 pub fn TEE_Wait(timeout: u32) -> TEE_Result;
444 pub fn TEE_GetTAPersistentTime(time: *mut TEE_Time) -> TEE_Result;
445 pub fn TEE_SetTAPersistentTime(time: *const TEE_Time) -> TEE_Result;
446 pub fn TEE_GetREETime(time: *mut TEE_Time) -> c_void;
447
448 pub fn TEE_BigIntFMMSizeInU32(modulusSizeInBits: usize) -> usize;
451 pub fn TEE_BigIntFMMContextSizeInU32(modulusSizeInBits: usize) -> usize;
452
453 pub fn TEE_BigIntInit(bigInt: *mut TEE_BigInt, len: usize) -> c_void;
456 pub fn TEE_BigIntInitFMMContext(
457 context: *mut TEE_BigIntFMMContext,
458 len: usize,
459 modulus: *const TEE_BigInt,
460 ) -> c_void;
461 pub fn TEE_BigIntInitFMM(bigIntFMM: *mut TEE_BigIntFMM, len: usize) -> c_void;
462
463 pub fn TEE_BigIntConvertFromOctetString(
466 dest: *mut TEE_BigInt,
467 buffer: *const u8,
468 bufferLen: usize,
469 sign: i32,
470 ) -> TEE_Result;
471 pub fn TEE_BigIntConvertToOctetString(
472 buffer: *mut u8,
473 bufferLen: *mut usize,
474 bigInt: *const TEE_BigInt,
475 ) -> TEE_Result;
476 pub fn TEE_BigIntConvertFromS32(dest: *mut TEE_BigInt, shortVal: i32) -> c_void;
477 pub fn TEE_BigIntConvertToS32(dest: *mut i32, src: *const TEE_BigInt) -> TEE_Result;
478
479 pub fn TEE_BigIntCmp(op1: *const TEE_BigInt, op2: *const TEE_BigInt) -> i32;
482 pub fn TEE_BigIntCmpS32(op: *const TEE_BigInt, shortVal: i32) -> i32;
483 pub fn TEE_BigIntShiftRight(
484 dest: *mut TEE_BigInt,
485 op: *const TEE_BigInt,
486 bits: size_t,
487 ) -> c_void;
488 pub fn TEE_BigIntGetBit(src: *const TEE_BigInt, bitIndex: u32) -> bool;
489 pub fn TEE_BigIntGetBitCount(src: *const TEE_BigInt) -> u32;
490 pub fn TEE_BigIntSetBit(src: *mut TEE_BigInt, bitIndex: u32, value: bool) -> TEE_Result;
491 pub fn TEE_BigIntAssign(dest: *mut TEE_BigInt, src: *const TEE_BigInt) -> TEE_Result;
492 pub fn TEE_BigIntAbs(dest: *mut TEE_BigInt, src: *const TEE_BigInt) -> TEE_Result;
493 pub fn TEE_BigIntAdd(
494 dest: *mut TEE_BigInt,
495 op1: *const TEE_BigInt,
496 op2: *const TEE_BigInt,
497 ) -> c_void;
498 pub fn TEE_BigIntSub(
499 dest: *mut TEE_BigInt,
500 op1: *const TEE_BigInt,
501 op2: *const TEE_BigInt,
502 ) -> c_void;
503 pub fn TEE_BigIntNeg(dest: *mut TEE_BigInt, op: *const TEE_BigInt) -> c_void;
504 pub fn TEE_BigIntMul(
505 dest: *mut TEE_BigInt,
506 op1: *const TEE_BigInt,
507 op2: *const TEE_BigInt,
508 ) -> c_void;
509 pub fn TEE_BigIntSquare(dest: *mut TEE_BigInt, op: *const TEE_BigInt) -> c_void;
510 pub fn TEE_BigIntDiv(
511 dest_q: *mut TEE_BigInt,
512 dest_r: *mut TEE_BigInt,
513 op1: *const TEE_BigInt,
514 op2: *const TEE_BigInt,
515 ) -> c_void;
516
517 pub fn TEE_BigIntMod(
520 dest: *mut TEE_BigInt,
521 op: *const TEE_BigInt,
522 n: *const TEE_BigInt,
523 ) -> c_void;
524 pub fn TEE_BigIntAddMod(
525 dest: *mut TEE_BigInt,
526 op1: *const TEE_BigInt,
527 op2: *const TEE_BigInt,
528 n: *const TEE_BigInt,
529 ) -> c_void;
530 pub fn TEE_BigIntSubMod(
531 dest: *mut TEE_BigInt,
532 op1: *const TEE_BigInt,
533 op2: *const TEE_BigInt,
534 n: *const TEE_BigInt,
535 ) -> c_void;
536 pub fn TEE_BigIntMulMod(
537 dest: *mut TEE_BigInt,
538 op1: *const TEE_BigInt,
539 op2: *const TEE_BigInt,
540 n: *const TEE_BigInt,
541 ) -> c_void;
542 pub fn TEE_BigIntSquareMod(
543 dest: *mut TEE_BigInt,
544 op: *const TEE_BigInt,
545 n: *const TEE_BigInt,
546 ) -> c_void;
547 pub fn TEE_BigIntInvMod(
548 dest: *mut TEE_BigInt,
549 op: *const TEE_BigInt,
550 n: *const TEE_BigInt,
551 ) -> c_void;
552 pub fn TEE_BigIntExpMod(
553 dest: *mut TEE_BigInt,
554 op1: *const TEE_BigInt,
555 op2: *const TEE_BigInt,
556 n: *const TEE_BigInt,
557 context: *const TEE_BigIntFMMContext,
558 ) -> TEE_Result;
559
560 pub fn TEE_BigIntRelativePrime(op1: *const TEE_BigInt, op2: *const TEE_BigInt) -> bool;
563 pub fn TEE_BigIntComputeExtendedGcd(
564 gcd: *mut TEE_BigInt,
565 u: *mut TEE_BigInt,
566 v: *mut TEE_BigInt,
567 op1: *const TEE_BigInt,
568 op2: *const TEE_BigInt,
569 ) -> c_void;
570 pub fn TEE_BigIntIsProbablePrime(op: *const TEE_BigInt, confidenceLevel: u32) -> i32;
571
572 pub fn TEE_BigIntConvertToFMM(
575 dest: *mut TEE_BigIntFMM,
576 src: *const TEE_BigInt,
577 n: *const TEE_BigInt,
578 context: *const TEE_BigIntFMMContext,
579 ) -> c_void;
580 pub fn TEE_BigIntConvertFromFMM(
581 dest: *mut TEE_BigInt,
582 src: *const TEE_BigIntFMM,
583 n: *const TEE_BigInt,
584 context: *const TEE_BigIntFMMContext,
585 ) -> c_void;
586 pub fn TEE_BigIntComputeFMM(
587 dest: *mut TEE_BigIntFMM,
588 op1: *const TEE_BigIntFMM,
589 op2: *const TEE_BigIntFMM,
590 n: *const TEE_BigInt,
591 context: *const TEE_BigIntFMMContext,
592 ) -> c_void;
593 }
594}