]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Object.c
SecurityPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / SecurityPkg / Library / Tpm2CommandLib / Tpm2Object.c
CommitLineData
087132a8
JY
1/** @file\r
2 Implement TPM2 Object related command.\r
3\r
dd577319 4Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved. <BR>\r
289b714b 5SPDX-License-Identifier: BSD-2-Clause-Patent\r
087132a8
JY
6\r
7**/\r
8\r
9#include <IndustryStandard/UefiTcgPlatform.h>\r
10#include <Library/Tpm2CommandLib.h>\r
11#include <Library/Tpm2DeviceLib.h>\r
12#include <Library/BaseMemoryLib.h>\r
13#include <Library/BaseLib.h>\r
14#include <Library/DebugLib.h>\r
15\r
16#pragma pack(1)\r
17\r
18typedef struct {\r
19 TPM2_COMMAND_HEADER Header;\r
20 TPMI_DH_OBJECT ObjectHandle;\r
21} TPM2_READ_PUBLIC_COMMAND;\r
22\r
23typedef struct {\r
24 TPM2_RESPONSE_HEADER Header;\r
25 TPM2B_PUBLIC OutPublic;\r
26 TPM2B_NAME Name;\r
27 TPM2B_NAME QualifiedName;\r
28} TPM2_READ_PUBLIC_RESPONSE;\r
29\r
30#pragma pack()\r
31\r
32/**\r
33 This command allows access to the public area of a loaded object.\r
34\r
35 @param[in] ObjectHandle TPM handle of an object\r
36 @param[out] OutPublic Structure containing the public area of an object\r
37 @param[out] Name Name of the object\r
38 @param[out] QualifiedName The Qualified Name of the object\r
39\r
40 @retval EFI_SUCCESS Operation completed successfully.\r
41 @retval EFI_DEVICE_ERROR Unexpected device behavior.\r
42**/\r
43EFI_STATUS\r
44EFIAPI\r
45Tpm2ReadPublic (\r
46 IN TPMI_DH_OBJECT ObjectHandle,\r
47 OUT TPM2B_PUBLIC *OutPublic,\r
48 OUT TPM2B_NAME *Name,\r
49 OUT TPM2B_NAME *QualifiedName\r
50 )\r
51{\r
52 EFI_STATUS Status;\r
53 TPM2_READ_PUBLIC_COMMAND SendBuffer;\r
54 TPM2_READ_PUBLIC_RESPONSE RecvBuffer;\r
55 UINT32 SendBufferSize;\r
56 UINT32 RecvBufferSize;\r
57 TPM_RC ResponseCode;\r
58 UINT8 *Buffer;\r
59 UINT16 OutPublicSize;\r
60 UINT16 NameSize;\r
61 UINT16 QualifiedNameSize;\r
62\r
63 //\r
64 // Construct command\r
65 //\r
66 SendBuffer.Header.tag = SwapBytes16(TPM_ST_NO_SESSIONS);\r
67 SendBuffer.Header.commandCode = SwapBytes32(TPM_CC_ReadPublic);\r
68\r
69 SendBuffer.ObjectHandle = SwapBytes32 (ObjectHandle);\r
70\r
71 SendBufferSize = (UINT32) sizeof (SendBuffer);\r
72 SendBuffer.Header.paramSize = SwapBytes32 (SendBufferSize);\r
73\r
74 //\r
75 // send Tpm command\r
76 //\r
77 RecvBufferSize = sizeof (RecvBuffer);\r
78 Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
79 if (EFI_ERROR (Status)) {\r
80 return Status;\r
81 }\r
82\r
83 if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) {\r
84 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - RecvBufferSize Error - %x\n", RecvBufferSize));\r
85 return EFI_DEVICE_ERROR;\r
86 }\r
87 ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode);\r
88 if (ResponseCode != TPM_RC_SUCCESS) {\r
89 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - responseCode - %x\n", SwapBytes32(RecvBuffer.Header.responseCode)));\r
90 }\r
91 switch (ResponseCode) {\r
92 case TPM_RC_SUCCESS:\r
93 // return data\r
94 break;\r
95 case TPM_RC_SEQUENCE:\r
96 // objectHandle references a sequence object\r
97 return EFI_INVALID_PARAMETER;\r
98 default:\r
99 return EFI_DEVICE_ERROR;\r
100 }\r
101\r
102 //\r
103 // Basic check\r
104 //\r
105 OutPublicSize = SwapBytes16 (RecvBuffer.OutPublic.size);\r
dd577319
ZC
106 if (OutPublicSize > sizeof(TPMT_PUBLIC)) {\r
107 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - OutPublicSize error %x\n", OutPublicSize));\r
108 return EFI_DEVICE_ERROR;\r
109 }\r
110\r
087132a8
JY
111 NameSize = SwapBytes16 (ReadUnaligned16 ((UINT16 *)((UINT8 *)&RecvBuffer + sizeof(TPM2_RESPONSE_HEADER) +\r
112 sizeof(UINT16) + OutPublicSize)));\r
dd577319
ZC
113 if (NameSize > sizeof(TPMU_NAME)) {\r
114 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - NameSize error %x\n", NameSize));\r
115 return EFI_DEVICE_ERROR;\r
116 }\r
117\r
087132a8
JY
118 QualifiedNameSize = SwapBytes16 (ReadUnaligned16 ((UINT16 *)((UINT8 *)&RecvBuffer + sizeof(TPM2_RESPONSE_HEADER) +\r
119 sizeof(UINT16) + OutPublicSize +\r
120 sizeof(UINT16) + NameSize)));\r
dd577319
ZC
121 if (QualifiedNameSize > sizeof(TPMU_NAME)) {\r
122 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - QualifiedNameSize error %x\n", QualifiedNameSize));\r
123 return EFI_DEVICE_ERROR;\r
124 }\r
087132a8
JY
125\r
126 if (RecvBufferSize != sizeof(TPM2_RESPONSE_HEADER) + sizeof(UINT16) + OutPublicSize + sizeof(UINT16) + NameSize + sizeof(UINT16) + QualifiedNameSize) {\r
127 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - RecvBufferSize %x Error - OutPublicSize %x, NameSize %x, QualifiedNameSize %x\n", RecvBufferSize, OutPublicSize, NameSize, QualifiedNameSize));\r
128 return EFI_DEVICE_ERROR;\r
129 }\r
130\r
131 //\r
132 // Return the response\r
133 //\r
134 Buffer = (UINT8 *)&RecvBuffer.OutPublic;\r
135 CopyMem (OutPublic, &RecvBuffer.OutPublic, sizeof(UINT16) + OutPublicSize);\r
136 OutPublic->size = OutPublicSize;\r
137 OutPublic->publicArea.type = SwapBytes16 (OutPublic->publicArea.type);\r
138 OutPublic->publicArea.nameAlg = SwapBytes16 (OutPublic->publicArea.nameAlg);\r
139 WriteUnaligned32 ((UINT32 *)&OutPublic->publicArea.objectAttributes, SwapBytes32 (ReadUnaligned32 ((UINT32 *)&OutPublic->publicArea.objectAttributes)));\r
140 Buffer = (UINT8 *)&RecvBuffer.OutPublic.publicArea.authPolicy;\r
141 OutPublic->publicArea.authPolicy.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
142 Buffer += sizeof(UINT16);\r
dd577319
ZC
143 if (OutPublic->publicArea.authPolicy.size > sizeof(TPMU_HA)) {\r
144 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - authPolicy.size error %x\n", OutPublic->publicArea.authPolicy.size));\r
145 return EFI_DEVICE_ERROR;\r
146 }\r
147\r
087132a8
JY
148 CopyMem (OutPublic->publicArea.authPolicy.buffer, Buffer, OutPublic->publicArea.authPolicy.size);\r
149 Buffer += OutPublic->publicArea.authPolicy.size;\r
150\r
151 // TPMU_PUBLIC_PARMS\r
152 switch (OutPublic->publicArea.type) {\r
153 case TPM_ALG_KEYEDHASH:\r
154 OutPublic->publicArea.parameters.keyedHashDetail.scheme.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
155 Buffer += sizeof(UINT16);\r
156 switch (OutPublic->publicArea.parameters.keyedHashDetail.scheme.scheme) {\r
157 case TPM_ALG_HMAC:\r
158 OutPublic->publicArea.parameters.keyedHashDetail.scheme.details.hmac.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
159 Buffer += sizeof(UINT16);\r
160 break;\r
161 case TPM_ALG_XOR:\r
162 OutPublic->publicArea.parameters.keyedHashDetail.scheme.details.xor.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
163 Buffer += sizeof(UINT16);\r
164 OutPublic->publicArea.parameters.keyedHashDetail.scheme.details.xor.kdf = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
165 Buffer += sizeof(UINT16);\r
166 break;\r
167 default:\r
168 return EFI_UNSUPPORTED;\r
169 }\r
170 case TPM_ALG_SYMCIPHER:\r
171 OutPublic->publicArea.parameters.symDetail.algorithm = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
172 Buffer += sizeof(UINT16);\r
173 switch (OutPublic->publicArea.parameters.symDetail.algorithm) {\r
174 case TPM_ALG_AES:\r
175 OutPublic->publicArea.parameters.symDetail.keyBits.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
176 Buffer += sizeof(UINT16);\r
177 OutPublic->publicArea.parameters.symDetail.mode.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
178 Buffer += sizeof(UINT16);\r
179 break;\r
180 case TPM_ALG_SM4:\r
181 OutPublic->publicArea.parameters.symDetail.keyBits.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
182 Buffer += sizeof(UINT16);\r
183 OutPublic->publicArea.parameters.symDetail.mode.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
184 Buffer += sizeof(UINT16);\r
185 break;\r
186 case TPM_ALG_XOR:\r
187 OutPublic->publicArea.parameters.symDetail.keyBits.xor = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
188 Buffer += sizeof(UINT16);\r
189 break;\r
190 case TPM_ALG_NULL:\r
191 break;\r
192 default:\r
193 return EFI_UNSUPPORTED;\r
194 }\r
195 break;\r
196 case TPM_ALG_RSA:\r
197 OutPublic->publicArea.parameters.rsaDetail.symmetric.algorithm = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
198 Buffer += sizeof(UINT16);\r
199 switch (OutPublic->publicArea.parameters.rsaDetail.symmetric.algorithm) {\r
200 case TPM_ALG_AES:\r
201 OutPublic->publicArea.parameters.rsaDetail.symmetric.keyBits.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
202 Buffer += sizeof(UINT16);\r
203 OutPublic->publicArea.parameters.rsaDetail.symmetric.mode.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
204 Buffer += sizeof(UINT16);\r
205 break;\r
206 case TPM_ALG_SM4:\r
207 OutPublic->publicArea.parameters.rsaDetail.symmetric.keyBits.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
208 Buffer += sizeof(UINT16);\r
209 OutPublic->publicArea.parameters.rsaDetail.symmetric.mode.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
210 Buffer += sizeof(UINT16);\r
211 break;\r
212 case TPM_ALG_NULL:\r
213 break;\r
214 default:\r
215 return EFI_UNSUPPORTED;\r
216 }\r
217 OutPublic->publicArea.parameters.rsaDetail.scheme.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
218 Buffer += sizeof(UINT16);\r
219 switch (OutPublic->publicArea.parameters.rsaDetail.scheme.scheme) {\r
220 case TPM_ALG_RSASSA:\r
221 OutPublic->publicArea.parameters.rsaDetail.scheme.details.rsassa.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
222 Buffer += sizeof(UINT16);\r
223 break;\r
224 case TPM_ALG_RSAPSS:\r
225 OutPublic->publicArea.parameters.rsaDetail.scheme.details.rsapss.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
226 Buffer += sizeof(UINT16);\r
227 break;\r
228 case TPM_ALG_RSAES:\r
229 break;\r
230 case TPM_ALG_OAEP:\r
231 OutPublic->publicArea.parameters.rsaDetail.scheme.details.oaep.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
232 Buffer += sizeof(UINT16);\r
233 break;\r
234 case TPM_ALG_NULL:\r
235 break;\r
236 default:\r
237 return EFI_UNSUPPORTED;\r
238 }\r
239 OutPublic->publicArea.parameters.rsaDetail.keyBits = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
240 Buffer += sizeof(UINT16);\r
241 OutPublic->publicArea.parameters.rsaDetail.exponent = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
242 Buffer += sizeof(UINT32);\r
243 break;\r
244 case TPM_ALG_ECC:\r
245 OutPublic->publicArea.parameters.eccDetail.symmetric.algorithm = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
246 Buffer += sizeof(UINT16);\r
247 switch (OutPublic->publicArea.parameters.eccDetail.symmetric.algorithm) {\r
248 case TPM_ALG_AES:\r
249 OutPublic->publicArea.parameters.eccDetail.symmetric.keyBits.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
250 Buffer += sizeof(UINT16);\r
251 OutPublic->publicArea.parameters.eccDetail.symmetric.mode.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
252 Buffer += sizeof(UINT16);\r
253 break;\r
254 case TPM_ALG_SM4:\r
255 OutPublic->publicArea.parameters.eccDetail.symmetric.keyBits.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
256 Buffer += sizeof(UINT16);\r
257 OutPublic->publicArea.parameters.eccDetail.symmetric.mode.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
258 Buffer += sizeof(UINT16);\r
259 break;\r
260 case TPM_ALG_NULL:\r
261 break;\r
262 default:\r
263 return EFI_UNSUPPORTED;\r
264 }\r
265 OutPublic->publicArea.parameters.eccDetail.scheme.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
266 Buffer += sizeof(UINT16);\r
267 switch (OutPublic->publicArea.parameters.eccDetail.scheme.scheme) {\r
268 case TPM_ALG_ECDSA:\r
269 OutPublic->publicArea.parameters.eccDetail.scheme.details.ecdsa.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
270 Buffer += sizeof(UINT16);\r
271 break;\r
272 case TPM_ALG_ECDAA:\r
273 OutPublic->publicArea.parameters.eccDetail.scheme.details.ecdaa.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
274 Buffer += sizeof(UINT16);\r
275 break;\r
276 case TPM_ALG_ECSCHNORR:\r
277 OutPublic->publicArea.parameters.eccDetail.scheme.details.ecSchnorr.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
278 Buffer += sizeof(UINT16);\r
279 break;\r
280 case TPM_ALG_ECDH:\r
281 break;\r
282 case TPM_ALG_NULL:\r
283 break;\r
284 default:\r
285 return EFI_UNSUPPORTED;\r
286 }\r
287 OutPublic->publicArea.parameters.eccDetail.curveID = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
288 Buffer += sizeof(UINT16);\r
289 OutPublic->publicArea.parameters.eccDetail.kdf.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
290 Buffer += sizeof(UINT16);\r
291 switch (OutPublic->publicArea.parameters.eccDetail.kdf.scheme) {\r
292 case TPM_ALG_MGF1:\r
293 OutPublic->publicArea.parameters.eccDetail.kdf.details.mgf1.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
294 Buffer += sizeof(UINT16);\r
295 break;\r
296 case TPM_ALG_KDF1_SP800_108:\r
297 OutPublic->publicArea.parameters.eccDetail.kdf.details.kdf1_sp800_108.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
298 Buffer += sizeof(UINT16);\r
299 break;\r
300 case TPM_ALG_KDF1_SP800_56a:\r
301 OutPublic->publicArea.parameters.eccDetail.kdf.details.kdf1_SP800_56a.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
302 Buffer += sizeof(UINT16);\r
303 break;\r
304 case TPM_ALG_KDF2:\r
305 OutPublic->publicArea.parameters.eccDetail.kdf.details.kdf2.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
306 Buffer += sizeof(UINT16);\r
307 break;\r
308 case TPM_ALG_NULL:\r
309 break;\r
310 default:\r
311 return EFI_UNSUPPORTED;\r
312 }\r
313 break;\r
314 default:\r
315 return EFI_UNSUPPORTED;\r
316 }\r
317\r
318 // TPMU_PUBLIC_ID\r
319 switch (OutPublic->publicArea.type) {\r
320 case TPM_ALG_KEYEDHASH:\r
321 OutPublic->publicArea.unique.keyedHash.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
322 Buffer += sizeof(UINT16);\r
dd577319
ZC
323 if(OutPublic->publicArea.unique.keyedHash.size > sizeof(TPMU_HA)) {\r
324 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - keyedHash.size error %x\n", OutPublic->publicArea.unique.keyedHash.size));\r
325 return EFI_DEVICE_ERROR;\r
326 }\r
087132a8
JY
327 CopyMem (OutPublic->publicArea.unique.keyedHash.buffer, Buffer, OutPublic->publicArea.unique.keyedHash.size);\r
328 Buffer += OutPublic->publicArea.unique.keyedHash.size;\r
329 break;\r
330 case TPM_ALG_SYMCIPHER:\r
331 OutPublic->publicArea.unique.sym.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
332 Buffer += sizeof(UINT16);\r
dd577319
ZC
333 if(OutPublic->publicArea.unique.sym.size > sizeof(TPMU_HA)) {\r
334 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - sym.size error %x\n", OutPublic->publicArea.unique.sym.size));\r
335 return EFI_DEVICE_ERROR;\r
336 }\r
087132a8
JY
337 CopyMem (OutPublic->publicArea.unique.sym.buffer, Buffer, OutPublic->publicArea.unique.sym.size);\r
338 Buffer += OutPublic->publicArea.unique.sym.size;\r
339 break;\r
340 case TPM_ALG_RSA:\r
341 OutPublic->publicArea.unique.rsa.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
342 Buffer += sizeof(UINT16);\r
dd577319
ZC
343 if(OutPublic->publicArea.unique.rsa.size > MAX_RSA_KEY_BYTES) {\r
344 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - rsa.size error %x\n", OutPublic->publicArea.unique.rsa.size));\r
345 return EFI_DEVICE_ERROR;\r
346 }\r
087132a8
JY
347 CopyMem (OutPublic->publicArea.unique.rsa.buffer, Buffer, OutPublic->publicArea.unique.rsa.size);\r
348 Buffer += OutPublic->publicArea.unique.rsa.size;\r
349 break;\r
350 case TPM_ALG_ECC:\r
351 OutPublic->publicArea.unique.ecc.x.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
352 Buffer += sizeof(UINT16);\r
dd577319
ZC
353 if (OutPublic->publicArea.unique.ecc.x.size > MAX_ECC_KEY_BYTES) {\r
354 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - ecc.x.size error %x\n", OutPublic->publicArea.unique.ecc.x.size));\r
355 return EFI_DEVICE_ERROR;\r
356 }\r
087132a8
JY
357 CopyMem (OutPublic->publicArea.unique.ecc.x.buffer, Buffer, OutPublic->publicArea.unique.ecc.x.size);\r
358 Buffer += OutPublic->publicArea.unique.ecc.x.size;\r
359 OutPublic->publicArea.unique.ecc.y.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
360 Buffer += sizeof(UINT16);\r
dd577319
ZC
361 if (OutPublic->publicArea.unique.ecc.y.size > MAX_ECC_KEY_BYTES) {\r
362 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - ecc.y.size error %x\n", OutPublic->publicArea.unique.ecc.y.size));\r
363 return EFI_DEVICE_ERROR;\r
364 }\r
087132a8
JY
365 CopyMem (OutPublic->publicArea.unique.ecc.y.buffer, Buffer, OutPublic->publicArea.unique.ecc.y.size);\r
366 Buffer += OutPublic->publicArea.unique.ecc.y.size;\r
367 break;\r
368 default:\r
369 return EFI_UNSUPPORTED;\r
370 }\r
371\r
372 CopyMem (Name->name, (UINT8 *)&RecvBuffer + sizeof(TPM2_RESPONSE_HEADER) + sizeof(UINT16) + OutPublicSize + sizeof(UINT16), NameSize);\r
373 Name->size = NameSize;\r
374\r
375 CopyMem (QualifiedName->name, (UINT8 *)&RecvBuffer + sizeof(TPM2_RESPONSE_HEADER) + sizeof(UINT16) + OutPublicSize + sizeof(UINT16) + NameSize + sizeof(UINT16), QualifiedNameSize);\r
376 QualifiedName->size = QualifiedNameSize;\r
377\r
378 return EFI_SUCCESS;\r
379}\r