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