1use crate::libc_compat::size_t;
10use core::ffi::*;
11use core::fmt::{Display, Formatter, Result};
12
13#[allow(non_camel_case_types)]
14pub type TEE_Result = u32;
15
16#[repr(C)]
17#[derive(Copy, Clone)]
18pub struct TEE_UUID {
19 pub timeLow: u32,
20 pub timeMid: u16,
21 pub timeHiAndVersion: u16,
22 pub clockSeqAndNode: [u8; 8],
23}
24impl Display for TEE_UUID {
25 fn fmt(&self, f: &mut Formatter<'_>) -> Result {
26 write!(
27 f,
28 "{:08x}-{:04x}-{:04x}-{:02x}{:02x}-{:02x}{:02x}{:02x}{:02x}{:02x}{:02x}",
29 self.timeLow,
30 self.timeMid,
31 self.timeHiAndVersion,
32 self.clockSeqAndNode[0],
33 self.clockSeqAndNode[1],
34 self.clockSeqAndNode[2],
35 self.clockSeqAndNode[3],
36 self.clockSeqAndNode[4],
37 self.clockSeqAndNode[5],
38 self.clockSeqAndNode[6],
39 self.clockSeqAndNode[7]
40 )
41 }
42}
43
44#[derive(Copy, Clone)]
45#[repr(C)]
46pub struct TEE_Identity {
47 pub login: u32,
48 pub uuid: TEE_UUID,
49}
50
51#[derive(Copy, Clone)]
52#[repr(C)]
53pub struct Memref {
54 pub buffer: *mut c_void,
55 pub size: usize,
56}
57
58#[derive(Copy, Clone)]
59#[repr(C)]
60pub struct Value {
61 pub a: u32,
62 pub b: u32,
63}
64
65#[derive(Copy, Clone)]
66#[repr(C)]
67pub union TEE_Param {
68 pub memref: Memref,
69 pub value: Value,
70}
71
72#[repr(C)]
73pub struct __TEE_TASessionHandle {
74 _unused: [u8; 0],
75}
76#[allow(non_camel_case_types)]
77pub type TEE_TASessionHandle = *mut __TEE_TASessionHandle;
78
79#[repr(C)]
80pub struct __TEE_PropSetHandle {
81 _unused: [u8; 0],
82}
83#[allow(non_camel_case_types)]
84pub type TEE_PropSetHandle = *mut __TEE_PropSetHandle;
85
86#[repr(C)]
87pub struct __TEE_ObjectHandle {
88 _unused: [u8; 0],
89}
90#[allow(non_camel_case_types)]
91pub type TEE_ObjectHandle = *mut __TEE_ObjectHandle;
92
93#[repr(C)]
94pub struct __TEE_ObjectEnumHandle {
95 _unused: [u8; 0],
96}
97#[allow(non_camel_case_types)]
98pub type TEE_ObjectEnumHandle = *mut __TEE_ObjectEnumHandle;
99
100#[allow(non_camel_case_types)]
101#[repr(C)]
102pub struct TEE_OperationHandle {
103 pub info: TEE_OperationInfo,
105 pub key1: TEE_ObjectHandle,
107 pub key2: TEE_ObjectHandle,
109 pub operation_state: u32,
111
112 pub buffer: *mut u8,
115 pub buffer_two_blocks: bool,
117 pub block_size: usize,
119 pub buffer_offs: usize,
121 pub state: u32,
123}
124
125impl Default for TEE_OperationHandle {
126 fn default() -> Self {
127 TEE_OperationHandle {
128 info: TEE_OperationInfo::default(),
129 key1: core::ptr::null_mut(),
130 key2: core::ptr::null_mut(),
131 operation_state: 0,
132 buffer: core::ptr::null_mut(),
133 buffer_two_blocks: false,
134 block_size: 0,
135 buffer_offs: 0,
136 state: 0,
137 }
138 }
139}
140
141#[allow(non_camel_case_types)]
144pub type TEE_ObjectType = u32;
145
146#[repr(C)]
147#[derive(Debug, Default)]
148pub struct TEE_ObjectInfo {
149 pub objectType: u32,
150 pub objectSize: u32,
151 pub maxObjectSize: u32,
152 pub objectUsage: u32,
153 pub dataSize: usize,
154 pub dataPosition: usize,
155 pub handleFlags: u32,
156}
157
158#[repr(C)]
160#[derive(Copy, Clone)]
161pub enum TEE_Whence {
162 TEE_DATA_SEEK_SET,
163 TEE_DATA_SEEK_CUR,
164 TEE_DATA_SEEK_END,
165}
166
167#[derive(Copy, Clone)]
168#[repr(C)]
169pub union content {
170 pub memref: Memref,
171 pub value: Value,
172}
173
174#[derive(Copy, Clone)]
175#[repr(C)]
176pub struct TEE_Attribute {
177 pub attributeID: u32,
178 pub content: content,
179}
180
181#[repr(C)]
185pub enum TEE_OperationMode {
186 TEE_MODE_ENCRYPT,
187 TEE_MODE_DECRYPT,
188 TEE_MODE_SIGN,
189 TEE_MODE_VERIFY,
190 TEE_MODE_MAC,
191 TEE_MODE_DIGEST,
192 TEE_MODE_DERIVE,
193}
194
195#[repr(C)]
196#[derive(Default, Copy, Clone)]
197pub struct TEE_OperationInfo {
198 pub algorithm: u32,
199 pub operationClass: u32,
200 pub mode: u32,
201 pub digestLength: u32,
202 pub maxKeySize: u32,
203 pub keySize: u32,
204 pub requiredKeyUsage: u32,
205 pub handleState: u32,
206}
207
208#[repr(C)]
209pub struct TEE_OperationInfoKey {
210 pub keySize: u32,
211 pub requiredKeyUsage: u32,
212}
213
214#[repr(C)]
215pub struct TEE_OperationInfoMultiple {
216 pub algorithm: u32,
217 pub operationClass: u32,
218 pub mode: u32,
219 pub digestLength: u32,
220 pub maxKeySize: u32,
221 pub handleState: u32,
222 pub operationState: u32,
223 pub numberOfKeys: u32,
224 pub keyInformation: *mut TEE_OperationInfoKey,
225}
226
227#[repr(C)]
230pub struct TEE_Time {
231 pub seconds: u32,
232 pub millis: u32,
233}
234
235#[allow(non_camel_case_types)]
238pub type TEE_BigInt = u32;
239#[allow(non_camel_case_types)]
240pub type TEE_BigIntFMM = u32;
241#[allow(non_camel_case_types)]
242pub type TEE_BigIntFMMContext = u32;
243
244#[repr(C)]
247pub struct __TEE_SEServiceHandle {
248 _unused: [u8; 0],
249}
250#[allow(non_camel_case_types)]
251pub type TEE_SEServiceHandle = *mut __TEE_SEServiceHandle;
252#[repr(C)]
253pub struct __TEE_SEReaderHandle {
254 _unused: [u8; 0],
255}
256#[allow(non_camel_case_types)]
257pub type TEE_SEReaderHandle = *mut __TEE_SEReaderHandle;
258#[repr(C)]
259pub struct __TEE_SESessionHandle {
260 _unused: [u8; 0],
261}
262#[allow(non_camel_case_types)]
263pub type TEE_SESessionHandle = *mut __TEE_SESessionHandle;
264#[repr(C)]
265pub struct __TEE_SEChannelHandle {
266 _unused: [u8; 0],
267}
268#[allow(non_camel_case_types)]
269pub type TEE_SEChannelHandle = *mut __TEE_SEChannelHandle;
270
271#[repr(C)]
272pub struct TEE_SEReaderProperties {
273 pub sePresent: bool,
274 pub teeOnly: bool,
275 pub selectResponseEnable: bool,
276}
277
278#[repr(C)]
279pub struct TEE_SEAID {
280 pub buffer: *mut u8,
281 pub bufferLen: size_t,
282}
283
284#[allow(non_camel_case_types)]
286pub type TEE_ErrorOrigin = u32;
287#[allow(non_camel_case_types)]
288pub type TEE_Session = *mut c_void;
289
290pub const TEE_MEM_INPUT: u32 = 0x00000001;
291pub const TEE_MEM_OUTPUT: u32 = 0x00000002;
292pub const TEE_MEMREF_0_USED: u32 = 0x00000001;
293pub const TEE_MEMREF_1_USED: u32 = 0x00000002;
294pub const TEE_MEMREF_2_USED: u32 = 0x00000004;
295pub const TEE_MEMREF_3_USED: u32 = 0x00000008;
296pub const TEE_SE_READER_NAME_MAX: u32 = 20;