1 /* Software-based Trusted Platform Module (TPM) Emulator
2 * Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net>
3 *
4 * This module is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published
6 * by the Free Software Foundation; either version 2 of the License,
7 * or (at your option) any later version.
8 *
9 * This module is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * $Id: tpm_marshalling.h 384 2010-02-17 14:17:43Z mast $
15 */
16
17 #ifndef _TPM_MARSHALLING_H_
18 #define _TPM_MARSHALLING_H_
19
20 #include "tpm_emulator.h"
21 #include "tpm_structures.h"
22
23 /*
24 * The following functions perform the data marshalling of all
25 * TPM structures (as defined in [TPM_Part2]) which are used
26 * either as an input or an output parameter by one of the
27 * TPM commands (as defined in [TPM_Part3]).
28 */
29
30 /**
31 * tpm_marshal_TYPE - marshals a value of type TYPE
32 * @ptr: target buffer to store the marshalled value into
33 * @length: length of the target buffer
34 * @v: value to marshal
35 * Returns: 0 on success, -1 otherwise
36 *
37 * Description: Performs the data marshalling for values of type TYPE.
38 * On success 0 is returned and the values of ptr as well as length are
39 * updated (i.e., ptr := ptr + sizeof(marshalled value) and length :=
40 * length - sizeof(marshalled value)). In case of an error, -1 is
41 * returned and the values of ptr and length are undefined.
42 */
43
44 /**
45 * tpm_unmarshal_TYPE - unmarshals a value of type TYPE
46 * @ptr: source buffer containing the marshalled value
47 * @length: length of the source buffer
48 * @v: variable to store the unmarshalled value into
49 * Returns: 0 on success, -1 otherwise
50 *
51 * Description: Performs the data unmarshalling for values of type TYPE.
52 * On success 0 is returned and the values of ptr as well as length are
53 * updated (i.e., ptr := ptr + sizeof(marshalled value) and length :=
54 * length - sizeof(marshalled value)). In case of an error, -1 is
55 * returned and the values of ptr and length are undefined.
56 */
57
tpm_marshal_BYTE(BYTE ** ptr,UINT32 * length,BYTE v)58 static inline int tpm_marshal_BYTE(BYTE **ptr, UINT32 *length, BYTE v)
59 {
60 if (*length < 1) return -1;
61 **ptr = v;
62 *ptr += 1; *length -= 1;
63 return 0;
64 }
65
tpm_unmarshal_BYTE(BYTE ** ptr,UINT32 * length,BYTE * v)66 static inline int tpm_unmarshal_BYTE(BYTE **ptr, UINT32 *length, BYTE *v)
67 {
68 if (*length < 1) return -1;
69 *v = **ptr;
70 *ptr += 1; *length -= 1;
71 return 0;
72 }
73
tpm_marshal_UINT16(BYTE ** ptr,UINT32 * length,UINT16 v)74 static inline int tpm_marshal_UINT16(BYTE **ptr, UINT32 *length, UINT16 v)
75 {
76 if (*length < 2) return -1;
77 (*ptr)[0] = (BYTE)((v >> 8) & 0xff);
78 (*ptr)[1] = (BYTE)(v & 0xff);
79 *ptr += 2; *length -= 2;
80 return 0;
81 }
82
tpm_unmarshal_UINT16(BYTE ** ptr,UINT32 * length,UINT16 * v)83 static inline int tpm_unmarshal_UINT16(BYTE **ptr, UINT32 *length, UINT16 *v)
84 {
85 if (*length < 2) return -1;
86 *v = (((UINT16)(*ptr)[0] << 8) | (*ptr)[1]);
87 *ptr += 2; *length -= 2;
88 return 0;
89 }
90
tpm_marshal_UINT32(BYTE ** ptr,UINT32 * length,UINT32 v)91 static inline int tpm_marshal_UINT32(BYTE **ptr, UINT32 *length, UINT32 v)
92 {
93 if (*length < 4) return -1;
94 (*ptr)[0] = (BYTE)((v >> 24) & 0xff); (*ptr)[1] = (BYTE)((v >> 16) & 0xff);
95 (*ptr)[2] = (BYTE)((v >> 8) & 0xff); (*ptr)[3] = (BYTE)(v & 0xff);
96 *ptr += 4; *length -= 4;
97 return 0;
98 }
99
tpm_unmarshal_UINT32(BYTE ** ptr,UINT32 * length,UINT32 * v)100 static inline int tpm_unmarshal_UINT32(BYTE **ptr, UINT32 *length, UINT32 *v)
101 {
102 if (*length < 4) return -1;
103 *v = (((UINT32)(*ptr)[0] << 24) | ((UINT32)(*ptr)[1] << 16) |
104 ((UINT32)(*ptr)[2] << 8) | (*ptr)[3]);
105 *ptr += 4; *length -= 4;
106 return 0;
107 }
108
tpm_marshal_UINT64(BYTE ** ptr,UINT32 * length,UINT64 v)109 static inline int tpm_marshal_UINT64(BYTE **ptr, UINT32 *length, UINT64 v)
110 {
111 if (*length < 8) return -1;
112 (*ptr)[0] = (BYTE)((v >> 56) & 0xff); (*ptr)[1] = (BYTE)((v >> 48) & 0xff);
113 (*ptr)[2] = (BYTE)((v >> 40) & 0xff); (*ptr)[3] = (BYTE)((v >> 32) & 0xff);
114 (*ptr)[4] = (BYTE)((v >> 24) & 0xff); (*ptr)[5] = (BYTE)((v >> 16) & 0xff);
115 (*ptr)[6] = (BYTE)((v >> 8) & 0xff); (*ptr)[7] = (BYTE)(v & 0xff);
116 *ptr += 8; *length -= 8;
117 return 0;
118 }
119
tpm_unmarshal_UINT64(BYTE ** ptr,UINT32 * length,UINT64 * v)120 static inline int tpm_unmarshal_UINT64(BYTE **ptr, UINT32 *length, UINT64 *v)
121 {
122 if (*length < 8) return -1;
123 *v = (((UINT64)(*ptr)[0] << 56) | ((UINT64)(*ptr)[1] << 48) |
124 ((UINT64)(*ptr)[2] << 40) | ((UINT64)(*ptr)[3] << 32) |
125 ((UINT64)(*ptr)[4] << 24) | ((UINT64)(*ptr)[5] << 16) |
126 ((UINT64)(*ptr)[6] << 8) | (*ptr)[7]);
127 *ptr += 8; *length -= 8;
128 return 0;
129 }
130
tpm_marshal_BLOB(BYTE ** ptr,UINT32 * ptr_length,BYTE * b,UINT32 b_length)131 static inline int tpm_marshal_BLOB(BYTE **ptr, UINT32 *ptr_length,
132 BYTE *b, UINT32 b_length)
133 {
134 if (*ptr_length < b_length) return -1;
135 if (b_length) memcpy(*ptr, b, b_length);
136 *ptr += b_length; *ptr_length -= b_length;
137 return 0;
138 }
139
tpm_unmarshal_BLOB(BYTE ** ptr,UINT32 * ptr_length,BYTE ** b,UINT32 b_length)140 static inline int tpm_unmarshal_BLOB(BYTE **ptr, UINT32 *ptr_length,
141 BYTE **b, UINT32 b_length)
142 {
143 if (*ptr_length < b_length) return -1;
144 *b = (b_length) ? *ptr : NULL;
145 *ptr += b_length; *ptr_length -= b_length;
146 return 0;
147 }
148
tpm_marshal_BYTE_ARRAY(BYTE ** ptr,UINT32 * ptr_length,BYTE * b,UINT32 b_length)149 static inline int tpm_marshal_BYTE_ARRAY(BYTE **ptr, UINT32 *ptr_length,
150 BYTE *b, UINT32 b_length)
151 {
152 if (*ptr_length < b_length) return -1;
153 memcpy(*ptr, b, b_length);
154 *ptr += b_length; *ptr_length -= b_length;
155 return 0;
156 }
157
tpm_unmarshal_BYTE_ARRAY(BYTE ** ptr,UINT32 * ptr_length,BYTE * b,UINT32 b_length)158 static inline int tpm_unmarshal_BYTE_ARRAY(BYTE **ptr, UINT32 *ptr_length,
159 BYTE *b, UINT32 b_length)
160 {
161 if (*ptr_length < b_length) return -1;
162 if (b_length) memcpy(b, *ptr, b_length);
163 *ptr += b_length; *ptr_length -= b_length;
164 return 0;
165 }
166
tpm_marshal_BOOL(BYTE ** ptr,UINT32 * length,BOOL v)167 static inline int tpm_marshal_BOOL(BYTE **ptr, UINT32 *length, BOOL v)
168 {
169 if (*length < 1) return -1;
170 **ptr = v & 0x01;
171 *ptr += 1; *length -= 1;
172 return 0;
173 }
174
tpm_unmarshal_BOOL(BYTE ** ptr,UINT32 * length,BOOL * v)175 static inline int tpm_unmarshal_BOOL(BYTE **ptr, UINT32 *length, BOOL *v)
176 {
177 if (*length < 1 || (**ptr & 0xfe)) return -1;
178 *v = **ptr;
179 *ptr += 1; *length -= 1;
180 return 0;
181 }
182
183 #define tpm_marshal_BOOL_ARRAY tpm_marshal_BYTE_ARRAY
184 #define tpm_unmarshal_BOOL_ARRAY tpm_unmarshal_BYTE_ARRAY
185 #define tpm_marshal_TPM_AUTH_DATA_USAGE tpm_marshal_BYTE
186 #define tpm_unmarshal_TPM_AUTH_DATA_USAGE tpm_unmarshal_BYTE
187 #define tpm_marshal_TPM_PAYLOAD_TYPE tpm_marshal_BYTE
188 #define tpm_unmarshal_TPM_PAYLOAD_TYPE tpm_unmarshal_BYTE
189 #define tpm_marshal_TPM_LOCALITY_SELECTION tpm_marshal_BYTE
190 #define tpm_unmarshal_TPM_LOCALITY_SELECTION tpm_unmarshal_BYTE
191 #define tpm_marshal_TPM_TAG tpm_marshal_UINT16
192 #define tpm_unmarshal_TPM_TAG tpm_unmarshal_UINT16
193 #define tpm_marshal_TPM_PROTOCOL_ID tpm_marshal_UINT16
194 #define tpm_unmarshal_TPM_PROTOCOL_ID tpm_unmarshal_UINT16
195 #define tpm_marshal_TPM_STARTUP_TYPE tpm_marshal_UINT16
196 #define tpm_unmarshal_TPM_STARTUP_TYPE tpm_unmarshal_UINT16
197 #define tpm_marshal_TPM_ENC_SCHEME tpm_marshal_UINT16
198 #define tpm_unmarshal_TPM_ENC_SCHEME tpm_unmarshal_UINT16
199 #define tpm_marshal_TPM_SIG_SCHEME tpm_marshal_UINT16
200 #define tpm_unmarshal_TPM_SIG_SCHEME tpm_unmarshal_UINT16
201 #define tpm_marshal_TPM_MIGRATE_SCHEME tpm_marshal_UINT16
202 #define tpm_unmarshal_TPM_MIGRATE_SCHEME tpm_unmarshal_UINT16
203 #define tpm_marshal_TPM_PHYSICAL_PRESENCE tpm_marshal_UINT16
204 #define tpm_unmarshal_TPM_PHYSICAL_PRESENCE tpm_unmarshal_UINT16
205 #define tpm_marshal_TPM_ENTITY_TYPE tpm_marshal_UINT16
206 #define tpm_unmarshal_TPM_ENTITY_TYPE tpm_unmarshal_UINT16
207 #define tpm_marshal_TPM_KEY_USAGE tpm_marshal_UINT16
208 #define tpm_unmarshal_TPM_KEY_USAGE tpm_unmarshal_UINT16
209 #define tpm_marshal_TPM_STRUCTURE_TAG tpm_marshal_UINT16
210 #define tpm_unmarshal_TPM_STRUCTURE_TAG tpm_unmarshal_UINT16
211 #define tpm_marshal_TPM_PLATFORM_SPECIFIC tpm_marshal_UINT16
212 #define tpm_unmarshal_TPM_PLATFORM_SPECIFIC tpm_unmarshal_UINT16
213 #define tpm_marshal_TPM_EK_TYPE tpm_marshal_UINT16
214 #define tpm_unmarshal_TPM_EK_TYPE tpm_unmarshal_UINT16
215 #define tpm_marshal_TPM_COMMAND_CODE tpm_marshal_UINT32
216 #define tpm_unmarshal_TPM_COMMAND_CODE tpm_unmarshal_UINT32
217 #define tpm_marshal_TPM_CAPABILITY_AREA tpm_marshal_UINT32
218 #define tpm_unmarshal_TPM_CAPABILITY_AREA tpm_unmarshal_UINT32
219 #define tpm_marshal_TPM_KEY_FLAGS tpm_marshal_UINT32
220 #define tpm_unmarshal_TPM_KEY_FLAGS tpm_unmarshal_UINT32
221 #define tpm_marshal_TPM_ALGORITHM_ID tpm_marshal_UINT32
222 #define tpm_unmarshal_TPM_ALGORITHM_ID tpm_unmarshal_UINT32
223 #define tpm_marshal_TPM_MODIFIER_INDICATOR tpm_marshal_UINT32
224 #define tpm_unmarshal_TPM_MODIFIER_INDICATOR tpm_unmarshal_UINT32
225 #define tpm_marshal_TPM_ACTUAL_COUNT tpm_marshal_UINT32
226 #define tpm_unmarshal_TPM_ACTUAL_COUNT tpm_unmarshal_UINT32
227 #define tpm_marshal_TPM_TRANSPORT_ATTRIBUTES tpm_marshal_UINT32
228 #define tpm_unmarshal_TPM_TRANSPORT_ATTRIBUTES tpm_unmarshal_UINT32
229 #define tpm_marshal_TPM_AUTHHANDLE tpm_marshal_UINT32
230 #define tpm_unmarshal_TPM_AUTHHANDLE tpm_unmarshal_UINT32
231 #define tpm_marshal_TPM_RESULT tpm_marshal_UINT32
232 #define tpm_unmarshal_TPM_RESULT tpm_unmarshal_UINT32
233 #define tpm_marshal_TPM_DIRINDEX tpm_marshal_UINT32
234 #define tpm_unmarshal_TPM_DIRINDEX tpm_unmarshal_UINT32
235 #define tpm_marshal_TPM_KEY_HANDLE tpm_marshal_UINT32
236 #define tpm_unmarshal_TPM_KEY_HANDLE tpm_unmarshal_UINT32
237 #define tpm_marshal_TPM_PCRINDEX tpm_marshal_UINT32
238 #define tpm_unmarshal_TPM_PCRINDEX tpm_unmarshal_UINT32
239 #define tpm_marshal_TPM_RESOURCE_TYPE tpm_marshal_UINT32
240 #define tpm_unmarshal_TPM_RESOURCE_TYPE tpm_unmarshal_UINT32
241 #define tpm_marshal_TPM_KEY_CONTROL tpm_marshal_UINT32
242 #define tpm_unmarshal_TPM_KEY_CONTROL tpm_unmarshal_UINT32
243 #define tpm_marshal_TPM_NV_INDEX tpm_marshal_UINT32
244 #define tpm_unmarshal_TPM_NV_INDEX tpm_unmarshal_UINT32
245 #define tpm_marshal_TPM_FAMILY_ID tpm_marshal_UINT32
246 #define tpm_unmarshal_TPM_FAMILY_ID tpm_unmarshal_UINT32
247 #define tpm_marshal_TPM_FAMILY_VERIFICATION tpm_marshal_UINT32
248 #define tpm_unmarshal_TPM_FAMILY_VERIFICATION tpm_unmarshal_UINT32
249 #define tpm_marshal_TPM_STARTUP_EFFECTS tpm_marshal_UINT32
250 #define tpm_unmarshal_TPM_STARTUP_EFFECTS tpm_unmarshal_UINT32
251 #define tpm_marshal_TPM_SYM_MODE tpm_marshal_UINT32
252 #define tpm_unmarshal_TPM_SYM_MODE tpm_unmarshal_UINT32
253 #define tpm_marshal_TPM_FAMILY_FLAGS tpm_marshal_UINT32
254 #define tpm_unmarshal_TPM_FAMILY_FLAGS tpm_unmarshal_UINT32
255 #define tpm_marshal_TPM_DELEGATE_INDEX tpm_marshal_UINT32
256 #define tpm_unmarshal_TPM_DELEGATE_INDEX tpm_unmarshal_UINT32
257 #define tpm_marshal_TPM_COUNT_ID tpm_marshal_UINT32
258 #define tpm_unmarshal_TPM_COUNT_ID tpm_unmarshal_UINT32
259 #define tpm_marshal_TPM_TRANSHANDLE tpm_marshal_UINT32
260 #define tpm_unmarshal_TPM_TRANSHANDLE tpm_unmarshal_UINT32
261 #define tpm_marshal_TPM_HANDLE tpm_marshal_UINT32
262 #define tpm_unmarshal_TPM_HANDLE tpm_unmarshal_UINT32
263 #define tpm_marshal_TPM_FAMILY_OPERATION tpm_marshal_UINT32
264 #define tpm_unmarshal_TPM_FAMILY_OPERATION tpm_unmarshal_UINT32
265 #define tpm_marshal_TPM_CMK_DELEGATE tpm_marshal_UINT32
266 #define tpm_unmarshal_TPM_CMK_DELEGATE tpm_unmarshal_UINT32
267 #define tpm_marshal_TPM_REDIR_COMMAND tpm_marshal_UINT32
268 #define tpm_unmarshal_TPM_REDIR_COMMAND tpm_unmarshal_UINT32
269 #define tpm_marshal_DAAHANDLE tpm_marshal_UINT32
270 #define tpm_unmarshal_DAAHANDLE tpm_unmarshal_UINT32
271
272 int tpm_marshal_UINT32_ARRAY(BYTE **ptr, UINT32 *length, UINT32 *v, UINT32 n);
273 int tpm_unmarshal_UINT32_ARRAY(BYTE **ptr, UINT32 *length, UINT32 *v, UINT32 n);
274
275 int tpm_marshal_TPM_STRUCT_VER(BYTE **ptr, UINT32 *length, TPM_STRUCT_VER *v);
276 int tpm_unmarshal_TPM_STRUCT_VER(BYTE **ptr, UINT32 *length, TPM_STRUCT_VER *v);
277
278 int tpm_marshal_TPM_VERSION(BYTE **ptr, UINT32 *length, TPM_VERSION *v);
279 int tpm_unmarshal_TPM_VERSION(BYTE **ptr, UINT32 *length, TPM_VERSION *v);
280
281 int tpm_marshal_TPM_DIGEST(BYTE **ptr, UINT32 *length, TPM_DIGEST *v);
282 int tpm_unmarshal_TPM_DIGEST(BYTE **ptr, UINT32 *length, TPM_DIGEST *v);
283
284 #define tpm_marshal_TPM_CHOSENID_HASH tpm_marshal_TPM_DIGEST
285 #define tpm_unmarshal_TPM_CHOSENID_HASH tpm_unmarshal_TPM_DIGEST
286 #define tpm_marshal_TPM_COMPOSITE_HASH tpm_marshal_TPM_DIGEST
287 #define tpm_unmarshal_TPM_COMPOSITE_HASH tpm_unmarshal_TPM_DIGEST
288 #define tpm_marshal_TPM_DIRVALUE tpm_marshal_TPM_DIGEST
289 #define tpm_unmarshal_TPM_DIRVALUE tpm_unmarshal_TPM_DIGEST
290 #define tpm_marshal_TPM_HMAC tpm_marshal_TPM_DIGEST
291 #define tpm_unmarshal_TPM_HMAC tpm_unmarshal_TPM_DIGEST
292 #define tpm_marshal_TPM_PCRVALUE tpm_marshal_TPM_DIGEST
293 #define tpm_unmarshal_TPM_PCRVALUE tpm_unmarshal_TPM_DIGEST
294
295 int tpm_marshal_TPM_PCRVALUE_ARRAY(BYTE **ptr, UINT32 *length, TPM_PCRVALUE *v, UINT32 n);
296 int tpm_unmarshal_TPM_PCRVALUE_ARRAY(BYTE **ptr, UINT32 *length, TPM_PCRVALUE *v, UINT32 n);
297
298 int tpm_marshal_TPM_NONCE(BYTE **ptr, UINT32 *length, TPM_NONCE *v);
299 int tpm_unmarshal_TPM_NONCE(BYTE **ptr, UINT32 *length, TPM_NONCE *v);
300
301 int tpm_marshal_TPM_AUTHDATA(BYTE **ptr, UINT32 *length, TPM_AUTHDATA *v);
302 int tpm_unmarshal_TPM_AUTHDATA(BYTE **ptr, UINT32 *length, TPM_AUTHDATA *v);
303
304 #define tpm_marshal_TPM_SECRET tpm_marshal_TPM_AUTHDATA
305 #define tpm_unmarshal_TPM_SECRET tpm_unmarshal_TPM_AUTHDATA
306 #define tpm_marshal_TPM_ENCAUTH tpm_marshal_TPM_AUTHDATA
307 #define tpm_unmarshal_TPM_ENCAUTH tpm_unmarshal_TPM_AUTHDATA
308
309 int tpm_marshal_TPM_AUTH(BYTE **ptr, UINT32 *length, TPM_AUTH *v);
310 int tpm_unmarshal_TPM_AUTH(BYTE **ptr, UINT32 *length, TPM_AUTH *v);
311
312 int tpm_marshal_TPM_KEY_HANDLE_LIST(BYTE **ptr, UINT32 *length, TPM_KEY_HANDLE_LIST *v);
313
314 int tpm_marshal_TPM_CHANGEAUTH_VALIDATE(BYTE **ptr, UINT32 *length, TPM_CHANGEAUTH_VALIDATE *v);
315 int tpm_unmarshal_TPM_CHANGEAUTH_VALIDATE(BYTE **ptr, UINT32 *length, TPM_CHANGEAUTH_VALIDATE *v);
316
317 int tpm_marshal_TPM_COUNTER_VALUE(BYTE **ptr, UINT32 *length, TPM_COUNTER_VALUE *v);
318 int tpm_unmarshal_TPM_COUNTER_VALUE(BYTE **ptr, UINT32 *length, TPM_COUNTER_VALUE *v);
319
320 int tpm_marshal_TPM_PCR_SELECTION(BYTE **ptr, UINT32 *length, TPM_PCR_SELECTION *v);
321 int tpm_unmarshal_TPM_PCR_SELECTION(BYTE **ptr, UINT32 *length, TPM_PCR_SELECTION *v);
322
323 int tpm_marshal_TPM_PCR_COMPOSITE(BYTE **ptr, UINT32 *length, TPM_PCR_COMPOSITE *v);
324 int tpm_unmarshal_TPM_PCR_COMPOSITE(BYTE **ptr, UINT32 *length, TPM_PCR_COMPOSITE *v);
325
326 int tpm_marshal_TPM_PCR_INFO(BYTE **ptr, UINT32 *length, TPM_PCR_INFO *v);
327 int tpm_unmarshal_TPM_PCR_INFO(BYTE **ptr, UINT32 *length, TPM_PCR_INFO *v);
328
329 int tpm_marshal_TPM_PCR_INFO_SHORT(BYTE **ptr, UINT32 *length, TPM_PCR_INFO_SHORT *v);
330 int tpm_unmarshal_TPM_PCR_INFO_SHORT(BYTE **ptr, UINT32 *length, TPM_PCR_INFO_SHORT *v);
331
332 int tpm_marshal_TPM_PCR_ATTRIBUTES(BYTE **ptr, UINT32 *length, TPM_PCR_ATTRIBUTES *v);
333 int tpm_unmarshal_TPM_PCR_ATTRIBUTES(BYTE **ptr, UINT32 *length, TPM_PCR_ATTRIBUTES *v);
334
335 int tpm_marshal_TPM_STORED_DATA(BYTE **ptr, UINT32 *length, TPM_STORED_DATA *v);
336 int tpm_unmarshal_TPM_STORED_DATA(BYTE **ptr, UINT32 *length, TPM_STORED_DATA *v);
337
338 int tpm_marshal_TPM_SEALED_DATA(BYTE **ptr, UINT32 *length, TPM_SEALED_DATA *v);
339 int tpm_unmarshal_TPM_SEALED_DATA(BYTE **ptr, UINT32 *length, TPM_SEALED_DATA *v);
340
341 int tpm_marshal_TPM_SYMMETRIC_KEY(BYTE **ptr, UINT32 *length, TPM_SYMMETRIC_KEY *v);
342 int tpm_unmarshal_TPM_SYMMETRIC_KEY(BYTE **ptr, UINT32 *length, TPM_SYMMETRIC_KEY *v);
343
344 int tpm_marshal_TPM_SYMMETRIC_KEY_PARMS(BYTE **ptr, UINT32 *length, TPM_SYMMETRIC_KEY_PARMS *v);
345 int tpm_unmarshal_TPM_SYMMETRIC_KEY_PARMS(BYTE **ptr, UINT32 *length, TPM_SYMMETRIC_KEY_PARMS *v);
346
347 int tpm_marshal_TPM_RSA_KEY_PARMS(BYTE **ptr, UINT32 *length, TPM_RSA_KEY_PARMS *v);
348 int tpm_unmarshal_TPM_RSA_KEY_PARMS(BYTE **ptr, UINT32 *length, TPM_RSA_KEY_PARMS *v);
349
350 int tpm_marshal_TPM_KEY_PARMS(BYTE **ptr, UINT32 *length, TPM_KEY_PARMS *v);
351 int tpm_unmarshal_TPM_KEY_PARMS(BYTE **ptr, UINT32 *length, TPM_KEY_PARMS *v);
352
353 int tpm_marshal_TPM_STORE_PUBKEY(BYTE **ptr, UINT32 *length, TPM_STORE_PUBKEY *v);
354 int tpm_unmarshal_TPM_STORE_PUBKEY(BYTE **ptr, UINT32 *length, TPM_STORE_PUBKEY *v);
355
356 int tpm_marshal_TPM_KEY(BYTE **ptr, UINT32 *length, TPM_KEY *v);
357 int tpm_unmarshal_TPM_KEY(BYTE **ptr, UINT32 *length, TPM_KEY *v);
358
359 int tpm_marshal_TPM_PUBKEY(BYTE **ptr, UINT32 *length, TPM_PUBKEY *v);
360 int tpm_unmarshal_TPM_PUBKEY(BYTE **ptr, UINT32 *length, TPM_PUBKEY *v);
361
362 int tpm_marshal_TPM_STORE_PRIVKEY(BYTE **ptr, UINT32 *length, TPM_STORE_PRIVKEY *v);
363 int tpm_unmarshal_TPM_STORE_PRIVKEY(BYTE **ptr, UINT32 *length, TPM_STORE_PRIVKEY *v);
364
365 int tpm_marshal_TPM_STORE_ASYMKEY(BYTE **ptr, UINT32 *length, TPM_STORE_ASYMKEY *v);
366 int tpm_unmarshal_TPM_STORE_ASYMKEY(BYTE **ptr, UINT32 *length, TPM_STORE_ASYMKEY *v);
367
368 int tpm_marshal_TPM_MIGRATIONKEYAUTH(BYTE **ptr, UINT32 *length, TPM_MIGRATIONKEYAUTH *v);
369 int tpm_unmarshal_TPM_MIGRATIONKEYAUTH(BYTE **ptr, UINT32 *length, TPM_MIGRATIONKEYAUTH *v);
370
371 int tpm_marshal_TPM_CERTIFY_INFO(BYTE **ptr, UINT32 *length, TPM_CERTIFY_INFO *v);
372 int tpm_unmarshal_TPM_CERTIFY_INFO(BYTE **ptr, UINT32 *length, TPM_CERTIFY_INFO *v);
373
374 int tpm_marshal_TPM_IDENTITY_CONTENTS(BYTE **ptr, UINT32 *length, TPM_IDENTITY_CONTENTS *v);
375 int tpm_unmarshal_TPM_IDENTITY_CONTENTS(BYTE **ptr, UINT32 *length, TPM_IDENTITY_CONTENTS *v);
376
377 int tpm_marshal_TPM_CURRENT_TICKS(BYTE **ptr, UINT32 *length, TPM_CURRENT_TICKS *v);
378 int tpm_unmarshal_TPM_CURRENT_TICKS(BYTE **ptr, UINT32 *length, TPM_CURRENT_TICKS *v);
379
380 int tpm_marshal_TPM_TRANSPORT_PUBLIC(BYTE **ptr, UINT32 *length, TPM_TRANSPORT_PUBLIC *v);
381 int tpm_unmarshal_TPM_TRANSPORT_PUBLIC(BYTE **ptr, UINT32 *length, TPM_TRANSPORT_PUBLIC *v);
382
383 int tpm_marshal_TPM_TRANSPORT_INTERNAL(BYTE **ptr, UINT32 *length, TPM_TRANSPORT_INTERNAL *v);
384 int tpm_unmarshal_TPM_TRANSPORT_INTERNAL(BYTE **ptr, UINT32 *length, TPM_TRANSPORT_INTERNAL *v);
385
386 int tpm_marshal_TPM_CONTEXT_BLOB(BYTE **ptr, UINT32 *length, TPM_CONTEXT_BLOB *v);
387 int tpm_unmarshal_TPM_CONTEXT_BLOB(BYTE **ptr, UINT32 *length, TPM_CONTEXT_BLOB *v);
388
389 int tpm_marshal_TPM_CONTEXT_SENSITIVE(BYTE **ptr, UINT32 *length, TPM_CONTEXT_SENSITIVE *v);
390 int tpm_unmarshal_TPM_CONTEXT_SENSITIVE(BYTE **ptr, UINT32 *length, TPM_CONTEXT_SENSITIVE *v);
391
392 int tpm_marshal_TPM_DAA_BLOB(BYTE **ptr, UINT32 *length, TPM_DAA_BLOB *v);
393 int tpm_unmarshal_TPM_DAA_BLOB(BYTE **ptr, UINT32 *length, TPM_DAA_BLOB *v);
394
395 int tpm_marshal_TPM_DAA_SENSITIVE(BYTE **ptr, UINT32 *length, TPM_DAA_SENSITIVE *v);
396 int tpm_unmarshal_TPM_DAA_SENSITIVE(BYTE **ptr, UINT32 *length, TPM_DAA_SENSITIVE *v);
397
398 int tpm_marshal_TPM_DAA_ISSUER(BYTE **ptr, UINT32 *length, TPM_DAA_ISSUER *v);
399 int tpm_unmarshal_TPM_DAA_ISSUER(BYTE **ptr, UINT32 *length, TPM_DAA_ISSUER *v);
400
401 int tpm_marshal_TPM_DAA_TPM(BYTE **ptr, UINT32 *length, TPM_DAA_TPM *v);
402 int tpm_unmarshal_TPM_DAA_TPM(BYTE **ptr, UINT32 *length, TPM_DAA_TPM *v);
403
404 int tpm_marshal_TPM_DAA_CONTEXT(BYTE **ptr, UINT32 *length, TPM_DAA_CONTEXT *v);
405 int tpm_unmarshal_TPM_DAA_CONTEXT(BYTE **ptr, UINT32 *length, TPM_DAA_CONTEXT *v);
406
407 int tpm_marshal_TPM_DAA_JOINDATA(BYTE **ptr, UINT32 *length, TPM_DAA_JOINDATA *v);
408 int tpm_unmarshal_TPM_DAA_JOINDATA(BYTE **ptr, UINT32 *length, TPM_DAA_JOINDATA *v);
409
410 int tpm_marshal_TPM_DAA_SESSION_DATA(BYTE **ptr, UINT32 *length, TPM_DAA_SESSION_DATA *v);
411 int tpm_unmarshal_TPM_DAA_SESSION_DATA(BYTE **ptr, UINT32 *length, TPM_DAA_SESSION_DATA *v);
412
413 int tpm_marshal_TPM_MSA_COMPOSITE(BYTE **ptr, UINT32 *length, TPM_MSA_COMPOSITE *v);
414 int tpm_unmarshal_TPM_MSA_COMPOSITE(BYTE **ptr, UINT32 *length, TPM_MSA_COMPOSITE *v);
415
416 int tpm_marshal_TPM_CMK_AUTH(BYTE **ptr, UINT32 *length, TPM_CMK_AUTH *v);
417 int tpm_unmarshal_TPM_CMK_AUTH(BYTE **ptr, UINT32 *length, TPM_CMK_AUTH *v);
418
419 int tpm_marshal_TPM_SELECT_SIZE(BYTE **ptr, UINT32 *length, TPM_SELECT_SIZE *v);
420 int tpm_unmarshal_TPM_SELECT_SIZE(BYTE **ptr, UINT32 *length, TPM_SELECT_SIZE *v);
421
422 int tpm_marshal_TPM_CAP_VERSION_INFO(BYTE **ptr, UINT32 *length, TPM_CAP_VERSION_INFO *v);
423 int tpm_unmarshal_TPM_CAP_VERSION_INFO(BYTE **ptr, UINT32 *length, TPM_CAP_VERSION_INFO *v);
424
425 int tpm_marshal_TPM_ASYM_CA_CONTENTS(BYTE **ptr, UINT32 *length, TPM_ASYM_CA_CONTENTS *v);
426 int tpm_unmarshal_TPM_ASYM_CA_CONTENTS(BYTE **ptr, UINT32 *length, TPM_ASYM_CA_CONTENTS *v);
427
428 int tpm_marshal_TPM_QUOTE_INFO2(BYTE **ptr, UINT32 *length, TPM_QUOTE_INFO2 *v);
429 int tpm_unmarshal_TPM_QUOTE_INFO2(BYTE **ptr, UINT32 *length, TPM_QUOTE_INFO2 *v);
430
431 int tpm_marshal_TPM_EK_BLOB(BYTE **ptr, UINT32 *length, TPM_EK_BLOB *v);
432 int tpm_unmarshal_TPM_EK_BLOB(BYTE **ptr, UINT32 *length, TPM_EK_BLOB *v);
433
434 int tpm_marshal_TPM_EK_BLOB_ACTIVATE(BYTE **ptr, UINT32 *length, TPM_EK_BLOB_ACTIVATE *v);
435 int tpm_unmarshal_TPM_EK_BLOB_ACTIVATE(BYTE **ptr, UINT32 *length, TPM_EK_BLOB_ACTIVATE *v);
436
437 int tpm_marshal_TPM_NV_ATTRIBUTES(BYTE **ptr, UINT32 *length, TPM_NV_ATTRIBUTES *v);
438 int tpm_unmarshal_TPM_NV_ATTRIBUTES(BYTE **ptr, UINT32 *length, TPM_NV_ATTRIBUTES *v);
439
440 int tpm_marshal_TPM_NV_DATA_PUBLIC(BYTE **ptr, UINT32 *length, TPM_NV_DATA_PUBLIC *v);
441 int tpm_unmarshal_TPM_NV_DATA_PUBLIC(BYTE **ptr, UINT32 *length, TPM_NV_DATA_PUBLIC *v);
442
443 int tpm_marshal_TPM_DELEGATIONS(BYTE **ptr, UINT32 *length, TPM_DELEGATIONS *v);
444 int tpm_unmarshal_TPM_DELEGATIONS(BYTE **ptr, UINT32 *length, TPM_DELEGATIONS *v);
445
446 int tpm_marshal_TPM_FAMILY_LABEL(BYTE **ptr, UINT32 *length, TPM_FAMILY_LABEL *v);
447 int tpm_unmarshal_TPM_FAMILY_LABEL(BYTE **ptr, UINT32 *length, TPM_FAMILY_LABEL *v);
448
449 int tpm_marshal_TPM_FAMILY_TABLE_ENTRY(BYTE **ptr, UINT32 *length, TPM_FAMILY_TABLE_ENTRY *v);
450 int tpm_unmarshal_TPM_FAMILY_TABLE_ENTRY(BYTE **ptr, UINT32 *length, TPM_FAMILY_TABLE_ENTRY *v);
451
452 int tpm_marshal_TPM_DELEGATE_LABEL(BYTE **ptr, UINT32 *length, TPM_DELEGATE_LABEL *v);
453 int tpm_unmarshal_TPM_DELEGATE_LABEL(BYTE **ptr, UINT32 *length, TPM_DELEGATE_LABEL *v);
454
455 int tpm_marshal_TPM_DELEGATE_PUBLIC(BYTE **ptr, UINT32 *length, TPM_DELEGATE_PUBLIC *v);
456 int tpm_unmarshal_TPM_DELEGATE_PUBLIC(BYTE **ptr, UINT32 *length, TPM_DELEGATE_PUBLIC *v);
457
458 int tpm_marshal_TPM_DELEGATE_PUBLIC_ARRAY(BYTE **ptr, UINT32 *length, TPM_DELEGATE_PUBLIC *v, UINT32 n);
459 int tpm_unmarshal_TPM_DELEGATE_PUBLIC_ARRAY(BYTE **ptr, UINT32 *length, TPM_DELEGATE_PUBLIC *v, UINT32 n);
460
461 int tpm_marshal_TPM_DELEGATE_TABLE_ROW(BYTE **ptr, UINT32 *length, TPM_DELEGATE_TABLE_ROW *v);
462 int tpm_unmarshal_TPM_DELEGATE_TABLE_ROW(BYTE **ptr, UINT32 *length, TPM_DELEGATE_TABLE_ROW *v);
463
464 int tpm_marshal_TPM_DELEGATE_SENSITIVE(BYTE **ptr, UINT32 *length, TPM_DELEGATE_SENSITIVE *v);
465 int tpm_unmarshal_TPM_DELEGATE_SENSITIVE(BYTE **ptr, UINT32 *length, TPM_DELEGATE_SENSITIVE *v);
466
467 int tpm_marshal_TPM_DELEGATE_OWNER_BLOB(BYTE **ptr, UINT32 *length, TPM_DELEGATE_OWNER_BLOB *v);
468 int tpm_unmarshal_TPM_DELEGATE_OWNER_BLOB(BYTE **ptr, UINT32 *length, TPM_DELEGATE_OWNER_BLOB *v);
469
470 int tpm_marshal_TPM_DELEGATE_KEY_BLOB(BYTE **ptr, UINT32 *length, TPM_DELEGATE_KEY_BLOB *v);
471 int tpm_unmarshal_TPM_DELEGATE_KEY_BLOB(BYTE **ptr, UINT32 *length, TPM_DELEGATE_KEY_BLOB *v);
472
473 int tpm_marshal_TPM_PERMANENT_FLAGS(BYTE **ptr, UINT32 *length, TPM_PERMANENT_FLAGS *v);
474 int tpm_unmarshal_TPM_PERMANENT_FLAGS(BYTE **ptr, UINT32 *length, TPM_PERMANENT_FLAGS *v);
475
476 int tpm_marshal_TPM_STCLEAR_FLAGS(BYTE **ptr, UINT32 *length, TPM_STCLEAR_FLAGS *v);
477 int tpm_unmarshal_TPM_STCLEAR_FLAGS(BYTE **ptr, UINT32 *length, TPM_STCLEAR_FLAGS *v);
478
479 int tpm_marshal_TPM_STANY_FLAGS(BYTE **ptr, UINT32 *length, TPM_STANY_FLAGS *v);
480 int tpm_unmarshal_TPM_STANY_FLAGS(BYTE **ptr, UINT32 *length, TPM_STANY_FLAGS *v);
481
482 int tpm_marshal_RSA(BYTE **ptr, UINT32 *length, tpm_rsa_private_key_t *v);
483 int tpm_unmarshal_RSA(BYTE **ptr, UINT32 *length, tpm_rsa_private_key_t *v);
484
485 int tpm_marshal_RSAPub(BYTE **ptr, UINT32 *length, tpm_rsa_public_key_t *v);
486 int tpm_unmarshal_RSAPub(BYTE **ptr, UINT32 *length, tpm_rsa_public_key_t *v);
487
488 int tpm_marshal_TPM_KEY_DATA(BYTE **ptr, UINT32 *length, TPM_KEY_DATA *v);
489 int tpm_unmarshal_TPM_KEY_DATA(BYTE **ptr, UINT32 *length, TPM_KEY_DATA *v);
490
491 int tpm_marshal_TPM_PERMANENT_DATA(BYTE **ptr, UINT32 *length, TPM_PERMANENT_DATA *);
492 int tpm_unmarshal_TPM_PERMANENT_DATA(BYTE **ptr, UINT32 *length, TPM_PERMANENT_DATA *);
493
494 int tpm_marshal_TPM_STCLEAR_DATA(BYTE **ptr, UINT32 *length, TPM_STCLEAR_DATA *v);
495 int tpm_unmarshal_TPM_STCLEAR_DATA(BYTE **ptr, UINT32 *length, TPM_STCLEAR_DATA *v);
496
497 int tpm_marshal_TPM_SESSION_DATA(BYTE **ptr, UINT32 *length, TPM_SESSION_DATA *v);
498 int tpm_unmarshal_TPM_SESSION_DATA(BYTE **ptr, UINT32 *length, TPM_SESSION_DATA *v);
499
500 int tpm_marshal_TPM_STANY_DATA(BYTE **ptr, UINT32 *length, TPM_STANY_DATA *v);
501 int tpm_unmarshal_TPM_STANY_DATA(BYTE **ptr, UINT32 *length, TPM_STANY_DATA *v);
502
503 int tpm_unmarshal_TPM_DATA(BYTE **ptr, UINT32 *length, TPM_DATA *v);
504 int tpm_marshal_TPM_DATA(BYTE **ptr, UINT32 *length, TPM_DATA *v);
505
506 int tpm_marshal_TPM_RESPONSE(BYTE **ptr, UINT32 *length, TPM_RESPONSE *v);
507 int tpm_unmarshal_TPM_REQUEST(BYTE **ptr, UINT32 *length, TPM_REQUEST *v);
508
509 #endif /* _TPM_MARSHALLING_H_ */
510