OLD | NEW |
1 /* Software-Based Trusted Platform Module (TPM) Emulator for Linux | 1 /* Software-based Trusted Platform Module (TPM) Emulator |
2 * Copyright (C) 2004 Mario Strasser <mast@gmx.net>, | 2 * Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net> |
3 * Swiss Federal Institute of Technology (ETH) Zurich | |
4 * | 3 * |
5 * This module is free software; you can redistribute it and/or modify | 4 * This module is free software; you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License as published | 5 * it under the terms of the GNU General Public License as published |
7 * by the Free Software Foundation; either version 2 of the License, | 6 * by the Free Software Foundation; either version 2 of the License, |
8 * or (at your option) any later version. | 7 * or (at your option) any later version. |
9 * | 8 * |
10 * This module is distributed in the hope that it will be useful, | 9 * This module is distributed in the hope that it will be useful, |
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
14 * | 13 * |
15 * $Id$ | 14 * $Id: tpm_marshalling.h 384 2010-02-17 14:17:43Z mast $ |
16 */ | 15 */ |
17 | 16 |
18 #ifndef _MARSHALLING_H_ | 17 #ifndef _TPM_MARSHALLING_H_ |
19 #define _MARSHALLING_H_ | 18 #define _TPM_MARSHALLING_H_ |
20 | 19 |
21 #include "tpm_emulator.h" | 20 #include "tpm_emulator.h" |
22 #include "tpm_structures.h" | 21 #include "tpm_structures.h" |
23 | 22 |
24 /* | 23 /* |
25 * The following functions perform the data marshalling of all | 24 * The following functions perform the data marshalling of all |
26 * TPM structures (as defined in [TPM_Part2]) which are used | 25 * TPM structures (as defined in [TPM_Part2]) which are used |
27 * either as an input or an output parameter by one of the | 26 * either as an input or an output parameter by one of the |
28 * TPM commands (as defined in [TPM_Part3]). | 27 * TPM commands (as defined in [TPM_Part3]). |
29 */ | 28 */ |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 { | 67 { |
69 if (*length < 1) return -1; | 68 if (*length < 1) return -1; |
70 *v = **ptr; | 69 *v = **ptr; |
71 *ptr += 1; *length -= 1; | 70 *ptr += 1; *length -= 1; |
72 return 0; | 71 return 0; |
73 } | 72 } |
74 | 73 |
75 static inline int tpm_marshal_UINT16(BYTE **ptr, UINT32 *length, UINT16 v) | 74 static inline int tpm_marshal_UINT16(BYTE **ptr, UINT32 *length, UINT16 v) |
76 { | 75 { |
77 if (*length < 2) return -1; | 76 if (*length < 2) return -1; |
78 (*ptr)[0] = (v >> 8) & 0xff; | 77 (*ptr)[0] = (BYTE)((v >> 8) & 0xff); |
79 (*ptr)[1] = v & 0xff; | 78 (*ptr)[1] = (BYTE)(v & 0xff); |
80 *ptr += 2; *length -= 2; | 79 *ptr += 2; *length -= 2; |
81 return 0; | 80 return 0; |
82 } | 81 } |
83 | 82 |
84 static inline int tpm_unmarshal_UINT16(BYTE **ptr, UINT32 *length, UINT16 *v) | 83 static inline int tpm_unmarshal_UINT16(BYTE **ptr, UINT32 *length, UINT16 *v) |
85 { | 84 { |
86 if (*length < 2) return -1; | 85 if (*length < 2) return -1; |
87 *v = (((UINT16)(*ptr)[0] << 8) | (*ptr)[1]); | 86 *v = (((UINT16)(*ptr)[0] << 8) | (*ptr)[1]); |
88 *ptr += 2; *length -= 2; | 87 *ptr += 2; *length -= 2; |
89 return 0; | 88 return 0; |
90 } | 89 } |
91 | 90 |
92 static inline int tpm_marshal_UINT32(BYTE **ptr, UINT32 *length, UINT32 v) | 91 static inline int tpm_marshal_UINT32(BYTE **ptr, UINT32 *length, UINT32 v) |
93 { | 92 { |
94 if (*length < 4) return -1; | 93 if (*length < 4) return -1; |
95 (*ptr)[0] = (v >> 24) & 0xff; (*ptr)[1] = (v >> 16) & 0xff; | 94 (*ptr)[0] = (BYTE)((v >> 24) & 0xff); (*ptr)[1] = (BYTE)((v >> 16) & 0xff); |
96 (*ptr)[2] = (v >> 8) & 0xff; (*ptr)[3] = v & 0xff; | 95 (*ptr)[2] = (BYTE)((v >> 8) & 0xff); (*ptr)[3] = (BYTE)(v & 0xff); |
97 *ptr += 4; *length -= 4; | 96 *ptr += 4; *length -= 4; |
98 return 0; | 97 return 0; |
99 } | 98 } |
100 | 99 |
101 static inline int tpm_unmarshal_UINT32(BYTE **ptr, UINT32 *length, UINT32 *v) | 100 static inline int tpm_unmarshal_UINT32(BYTE **ptr, UINT32 *length, UINT32 *v) |
102 { | 101 { |
103 if (*length < 4) return -1; | 102 if (*length < 4) return -1; |
104 *v = (((UINT32)(*ptr)[0] << 24) | ((UINT32)(*ptr)[1] << 16) | | 103 *v = (((UINT32)(*ptr)[0] << 24) | ((UINT32)(*ptr)[1] << 16) | |
105 ((UINT32)(*ptr)[2] << 8) | (*ptr)[3]); | 104 ((UINT32)(*ptr)[2] << 8) | (*ptr)[3]); |
106 *ptr += 4; *length -= 4; | 105 *ptr += 4; *length -= 4; |
107 return 0; | 106 return 0; |
108 } | 107 } |
109 | 108 |
110 static inline int tpm_marshal_UINT64(BYTE **ptr, UINT32 *length, UINT64 v) | 109 static inline int tpm_marshal_UINT64(BYTE **ptr, UINT32 *length, UINT64 v) |
111 { | 110 { |
112 if (*length < 8) return -1; | 111 if (*length < 8) return -1; |
113 (*ptr)[0] = (v >> 56) & 0xff; (*ptr)[1] = (v >> 48) & 0xff; | 112 (*ptr)[0] = (BYTE)((v >> 56) & 0xff); (*ptr)[1] = (BYTE)((v >> 48) & 0xff); |
114 (*ptr)[2] = (v >> 40) & 0xff; (*ptr)[3] = (v >> 32) & 0xff; | 113 (*ptr)[2] = (BYTE)((v >> 40) & 0xff); (*ptr)[3] = (BYTE)((v >> 32) & 0xff); |
115 (*ptr)[4] = (v >> 24) & 0xff; (*ptr)[5] = (v >> 16) & 0xff; | 114 (*ptr)[4] = (BYTE)((v >> 24) & 0xff); (*ptr)[5] = (BYTE)((v >> 16) & 0xff); |
116 (*ptr)[6] = (v >> 8) & 0xff; (*ptr)[7] = v & 0xff; | 115 (*ptr)[6] = (BYTE)((v >> 8) & 0xff); (*ptr)[7] = (BYTE)(v & 0xff); |
117 *ptr += 8; *length -= 8; | 116 *ptr += 8; *length -= 8; |
118 return 0; | 117 return 0; |
119 } | 118 } |
120 | 119 |
121 static inline int tpm_unmarshal_UINT64(BYTE **ptr, UINT32 *length, UINT64 *v) | 120 static inline int tpm_unmarshal_UINT64(BYTE **ptr, UINT32 *length, UINT64 *v) |
122 { | 121 { |
123 if (*length < 8) return -1; | 122 if (*length < 8) return -1; |
124 *v = (((UINT64)(*ptr)[0] << 56) | ((UINT64)(*ptr)[1] << 48) | | 123 *v = (((UINT64)(*ptr)[0] << 56) | ((UINT64)(*ptr)[1] << 48) | |
125 ((UINT64)(*ptr)[2] << 40) | ((UINT64)(*ptr)[3] << 32) | | 124 ((UINT64)(*ptr)[2] << 40) | ((UINT64)(*ptr)[3] << 32) | |
126 ((UINT64)(*ptr)[4] << 24) | ((UINT64)(*ptr)[5] << 16) | | 125 ((UINT64)(*ptr)[4] << 24) | ((UINT64)(*ptr)[5] << 16) | |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 | 475 |
477 int tpm_marshal_TPM_STCLEAR_FLAGS(BYTE **ptr, UINT32 *length, TPM_STCLEAR_FLAGS
*v); | 476 int tpm_marshal_TPM_STCLEAR_FLAGS(BYTE **ptr, UINT32 *length, TPM_STCLEAR_FLAGS
*v); |
478 int tpm_unmarshal_TPM_STCLEAR_FLAGS(BYTE **ptr, UINT32 *length, TPM_STCLEAR_FLAG
S *v); | 477 int tpm_unmarshal_TPM_STCLEAR_FLAGS(BYTE **ptr, UINT32 *length, TPM_STCLEAR_FLAG
S *v); |
479 | 478 |
480 int tpm_marshal_TPM_STANY_FLAGS(BYTE **ptr, UINT32 *length, TPM_STANY_FLAGS *v); | 479 int tpm_marshal_TPM_STANY_FLAGS(BYTE **ptr, UINT32 *length, TPM_STANY_FLAGS *v); |
481 int tpm_unmarshal_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
); |
482 | 481 |
483 int tpm_marshal_RSA(BYTE **ptr, UINT32 *length, tpm_rsa_private_key_t *v); | 482 int tpm_marshal_RSA(BYTE **ptr, UINT32 *length, tpm_rsa_private_key_t *v); |
484 int tpm_unmarshal_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); |
485 | 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 |
486 int tpm_marshal_TPM_KEY_DATA(BYTE **ptr, UINT32 *length, TPM_KEY_DATA *v); | 488 int tpm_marshal_TPM_KEY_DATA(BYTE **ptr, UINT32 *length, TPM_KEY_DATA *v); |
487 int tpm_unmarshal_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); |
488 | 490 |
489 int tpm_marshal_TPM_PERMANENT_DATA(BYTE **ptr, UINT32 *length, TPM_PERMANENT_DAT
A *); | 491 int tpm_marshal_TPM_PERMANENT_DATA(BYTE **ptr, UINT32 *length, TPM_PERMANENT_DAT
A *); |
490 int tpm_unmarshal_TPM_PERMANENT_DATA(BYTE **ptr, UINT32 *length, TPM_PERMANENT_D
ATA *); | 492 int tpm_unmarshal_TPM_PERMANENT_DATA(BYTE **ptr, UINT32 *length, TPM_PERMANENT_D
ATA *); |
491 | 493 |
492 int tpm_marshal_TPM_STCLEAR_DATA(BYTE **ptr, UINT32 *length, TPM_STCLEAR_DATA *v
); | 494 int tpm_marshal_TPM_STCLEAR_DATA(BYTE **ptr, UINT32 *length, TPM_STCLEAR_DATA *v
); |
493 int tpm_unmarshal_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); |
494 | 496 |
495 int tpm_marshal_TPM_SESSION_DATA(BYTE **ptr, UINT32 *length, TPM_SESSION_DATA *v
); | 497 int tpm_marshal_TPM_SESSION_DATA(BYTE **ptr, UINT32 *length, TPM_SESSION_DATA *v
); |
496 int tpm_unmarshal_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); |
497 | 499 |
498 int tpm_marshal_TPM_STANY_DATA(BYTE **ptr, UINT32 *length, TPM_STANY_DATA *v); | 500 int tpm_marshal_TPM_STANY_DATA(BYTE **ptr, UINT32 *length, TPM_STANY_DATA *v); |
499 int tpm_unmarshal_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); |
500 | 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 |
501 int tpm_marshal_TPM_RESPONSE(BYTE **ptr, UINT32 *length, TPM_RESPONSE *v); | 506 int tpm_marshal_TPM_RESPONSE(BYTE **ptr, UINT32 *length, TPM_RESPONSE *v); |
502 int tpm_unmarshal_TPM_REQUEST(BYTE **ptr, UINT32 *length, TPM_REQUEST *v); | 507 int tpm_unmarshal_TPM_REQUEST(BYTE **ptr, UINT32 *length, TPM_REQUEST *v); |
503 | 508 |
504 #endif /* _MARSHALLING_H_ */ | 509 #endif /* _TPM_MARSHALLING_H_ */ |
OLD | NEW |