optee_utee_sys/
tee_api.rs

1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements.  See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.  The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License.  You may obtain a copy of the License at
8//
9//   http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied.  See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18#[cfg_attr(feature = "mock", mockall::automock)]
19pub mod api {
20    use crate::*;
21    use core::ffi::*;
22
23    unsafe extern "C" {
24        // Property access functions
25
26        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        // System API - Misc
78
79        pub fn TEE_Panic(panicCode: TEE_Result);
80
81        // System API - Internal Client API
82
83        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        // System API - Cancellations
102
103        pub fn TEE_GetCancellationFlag() -> bool;
104        pub fn TEE_UnmaskCancellation() -> bool;
105        pub fn TEE_MaskCancellation() -> bool;
106
107        // System API - Memory Management
108
109        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        // Data and Key Storage API  - Generic Object Functions
124
125        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        /* Data and Key Storage API  - Transient Object Functions */
147
148        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        // Data and Key Storage API  - Persistent Object Functions
188
189        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        // Data and Key Storage API  - Data Stream Access Functions
230
231        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        // Cryptographic Operations API - Generic Operation Functions
250
251        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        // Cryptographic Operations API - Message Digest Functions
284
285        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        // Cryptographic Operations API - Symmetric Cipher Functions
299
300        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        // Cryptographic Operations API - MAC Functions
321
322        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        // Cryptographic Operations API - Authenticated Encryption Functions
348
349        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        // Cryptographic Operations API - Asymmetric Functions
389
390        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        // Cryptographic Operations API - Key Derivation Functions
428
429        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        // Cryptographic Operations API - Random Number Generation Functions
437
438        pub fn TEE_GenerateRandom(randomBuffer: *mut c_void, randomBufferLen: usize) -> c_void;
439
440        // Date & Time API
441
442        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        // TEE Arithmetical API - Memory allocation and size of objects
449
450        pub fn TEE_BigIntFMMSizeInU32(modulusSizeInBits: usize) -> usize;
451        pub fn TEE_BigIntFMMContextSizeInU32(modulusSizeInBits: usize) -> usize;
452
453        // TEE Arithmetical API - Initialization functions
454
455        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        // TEE Arithmetical API - Converter functions
464
465        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        // TEE Arithmetical API - Logical operations
480
481        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        // TEE Arithmetical API - Modular arithmetic operations
518
519        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        // TEE Arithmetical API - Other arithmetic operations
561
562        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        // TEE Arithmetical API - Fast modular multiplication operations
573
574        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}