]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Library/Tpm2CommandLib/Tpm2Object.c
SecurityPkg: Apply uncrustify changes
[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
c411b485
MK
19 TPM2_COMMAND_HEADER Header;\r
20 TPMI_DH_OBJECT ObjectHandle;\r
087132a8
JY
21} TPM2_READ_PUBLIC_COMMAND;\r
22\r
23typedef struct {\r
c411b485
MK
24 TPM2_RESPONSE_HEADER Header;\r
25 TPM2B_PUBLIC OutPublic;\r
26 TPM2B_NAME Name;\r
27 TPM2B_NAME QualifiedName;\r
087132a8
JY
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
c411b485
MK
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
087132a8
JY
50 )\r
51{\r
c411b485
MK
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
087132a8
JY
62\r
63 //\r
64 // Construct command\r
65 //\r
c411b485
MK
66 SendBuffer.Header.tag = SwapBytes16 (TPM_ST_NO_SESSIONS);\r
67 SendBuffer.Header.commandCode = SwapBytes32 (TPM_CC_ReadPublic);\r
087132a8
JY
68\r
69 SendBuffer.ObjectHandle = SwapBytes32 (ObjectHandle);\r
70\r
c411b485 71 SendBufferSize = (UINT32)sizeof (SendBuffer);\r
087132a8
JY
72 SendBuffer.Header.paramSize = SwapBytes32 (SendBufferSize);\r
73\r
74 //\r
75 // send Tpm command\r
76 //\r
77 RecvBufferSize = sizeof (RecvBuffer);\r
c411b485 78 Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, &RecvBufferSize, (UINT8 *)&RecvBuffer);\r
087132a8
JY
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
c411b485
MK
87\r
88 ResponseCode = SwapBytes32 (RecvBuffer.Header.responseCode);\r
087132a8 89 if (ResponseCode != TPM_RC_SUCCESS) {\r
c411b485 90 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - responseCode - %x\n", SwapBytes32 (RecvBuffer.Header.responseCode)));\r
087132a8 91 }\r
c411b485 92\r
087132a8 93 switch (ResponseCode) {\r
c411b485
MK
94 case TPM_RC_SUCCESS:\r
95 // return data\r
96 break;\r
97 case TPM_RC_SEQUENCE:\r
98 // objectHandle references a sequence object\r
99 return EFI_INVALID_PARAMETER;\r
100 default:\r
101 return EFI_DEVICE_ERROR;\r
087132a8
JY
102 }\r
103\r
104 //\r
105 // Basic check\r
106 //\r
107 OutPublicSize = SwapBytes16 (RecvBuffer.OutPublic.size);\r
c411b485 108 if (OutPublicSize > sizeof (TPMT_PUBLIC)) {\r
dd577319
ZC
109 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - OutPublicSize error %x\n", OutPublicSize));\r
110 return EFI_DEVICE_ERROR;\r
111 }\r
112\r
c411b485
MK
113 NameSize = SwapBytes16 (\r
114 ReadUnaligned16 (\r
115 (UINT16 *)((UINT8 *)&RecvBuffer + sizeof (TPM2_RESPONSE_HEADER) +\r
116 sizeof (UINT16) + OutPublicSize)\r
117 )\r
118 );\r
119 if (NameSize > sizeof (TPMU_NAME)) {\r
dd577319
ZC
120 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - NameSize error %x\n", NameSize));\r
121 return EFI_DEVICE_ERROR;\r
122 }\r
123\r
c411b485
MK
124 QualifiedNameSize = SwapBytes16 (\r
125 ReadUnaligned16 (\r
126 (UINT16 *)((UINT8 *)&RecvBuffer + sizeof (TPM2_RESPONSE_HEADER) +\r
127 sizeof (UINT16) + OutPublicSize +\r
128 sizeof (UINT16) + NameSize)\r
129 )\r
130 );\r
131 if (QualifiedNameSize > sizeof (TPMU_NAME)) {\r
dd577319
ZC
132 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - QualifiedNameSize error %x\n", QualifiedNameSize));\r
133 return EFI_DEVICE_ERROR;\r
134 }\r
087132a8 135\r
c411b485 136 if (RecvBufferSize != sizeof (TPM2_RESPONSE_HEADER) + sizeof (UINT16) + OutPublicSize + sizeof (UINT16) + NameSize + sizeof (UINT16) + QualifiedNameSize) {\r
087132a8
JY
137 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - RecvBufferSize %x Error - OutPublicSize %x, NameSize %x, QualifiedNameSize %x\n", RecvBufferSize, OutPublicSize, NameSize, QualifiedNameSize));\r
138 return EFI_DEVICE_ERROR;\r
139 }\r
140\r
141 //\r
142 // Return the response\r
143 //\r
144 Buffer = (UINT8 *)&RecvBuffer.OutPublic;\r
c411b485
MK
145 CopyMem (OutPublic, &RecvBuffer.OutPublic, sizeof (UINT16) + OutPublicSize);\r
146 OutPublic->size = OutPublicSize;\r
147 OutPublic->publicArea.type = SwapBytes16 (OutPublic->publicArea.type);\r
087132a8
JY
148 OutPublic->publicArea.nameAlg = SwapBytes16 (OutPublic->publicArea.nameAlg);\r
149 WriteUnaligned32 ((UINT32 *)&OutPublic->publicArea.objectAttributes, SwapBytes32 (ReadUnaligned32 ((UINT32 *)&OutPublic->publicArea.objectAttributes)));\r
c411b485 150 Buffer = (UINT8 *)&RecvBuffer.OutPublic.publicArea.authPolicy;\r
087132a8 151 OutPublic->publicArea.authPolicy.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
c411b485
MK
152 Buffer += sizeof (UINT16);\r
153 if (OutPublic->publicArea.authPolicy.size > sizeof (TPMU_HA)) {\r
dd577319
ZC
154 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - authPolicy.size error %x\n", OutPublic->publicArea.authPolicy.size));\r
155 return EFI_DEVICE_ERROR;\r
156 }\r
157\r
087132a8
JY
158 CopyMem (OutPublic->publicArea.authPolicy.buffer, Buffer, OutPublic->publicArea.authPolicy.size);\r
159 Buffer += OutPublic->publicArea.authPolicy.size;\r
160\r
161 // TPMU_PUBLIC_PARMS\r
162 switch (OutPublic->publicArea.type) {\r
c411b485
MK
163 case TPM_ALG_KEYEDHASH:\r
164 OutPublic->publicArea.parameters.keyedHashDetail.scheme.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
165 Buffer += sizeof (UINT16);\r
166 switch (OutPublic->publicArea.parameters.keyedHashDetail.scheme.scheme) {\r
167 case TPM_ALG_HMAC:\r
168 OutPublic->publicArea.parameters.keyedHashDetail.scheme.details.hmac.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
169 Buffer += sizeof (UINT16);\r
170 break;\r
171 case TPM_ALG_XOR:\r
172 OutPublic->publicArea.parameters.keyedHashDetail.scheme.details.xor.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
173 Buffer += sizeof (UINT16);\r
174 OutPublic->publicArea.parameters.keyedHashDetail.scheme.details.xor.kdf = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
175 Buffer += sizeof (UINT16);\r
176 break;\r
177 default:\r
178 return EFI_UNSUPPORTED;\r
179 }\r
180\r
181 case TPM_ALG_SYMCIPHER:\r
182 OutPublic->publicArea.parameters.symDetail.algorithm = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
183 Buffer += sizeof (UINT16);\r
184 switch (OutPublic->publicArea.parameters.symDetail.algorithm) {\r
185 case TPM_ALG_AES:\r
186 OutPublic->publicArea.parameters.symDetail.keyBits.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
187 Buffer += sizeof (UINT16);\r
188 OutPublic->publicArea.parameters.symDetail.mode.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
189 Buffer += sizeof (UINT16);\r
190 break;\r
191 case TPM_ALG_SM4:\r
192 OutPublic->publicArea.parameters.symDetail.keyBits.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
193 Buffer += sizeof (UINT16);\r
194 OutPublic->publicArea.parameters.symDetail.mode.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
195 Buffer += sizeof (UINT16);\r
196 break;\r
197 case TPM_ALG_XOR:\r
198 OutPublic->publicArea.parameters.symDetail.keyBits.xor = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
199 Buffer += sizeof (UINT16);\r
200 break;\r
201 case TPM_ALG_NULL:\r
202 break;\r
203 default:\r
204 return EFI_UNSUPPORTED;\r
205 }\r
206\r
087132a8 207 break;\r
c411b485
MK
208 case TPM_ALG_RSA:\r
209 OutPublic->publicArea.parameters.rsaDetail.symmetric.algorithm = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
210 Buffer += sizeof (UINT16);\r
211 switch (OutPublic->publicArea.parameters.rsaDetail.symmetric.algorithm) {\r
212 case TPM_ALG_AES:\r
213 OutPublic->publicArea.parameters.rsaDetail.symmetric.keyBits.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
214 Buffer += sizeof (UINT16);\r
215 OutPublic->publicArea.parameters.rsaDetail.symmetric.mode.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
216 Buffer += sizeof (UINT16);\r
217 break;\r
218 case TPM_ALG_SM4:\r
219 OutPublic->publicArea.parameters.rsaDetail.symmetric.keyBits.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
220 Buffer += sizeof (UINT16);\r
221 OutPublic->publicArea.parameters.rsaDetail.symmetric.mode.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
222 Buffer += sizeof (UINT16);\r
223 break;\r
224 case TPM_ALG_NULL:\r
225 break;\r
226 default:\r
227 return EFI_UNSUPPORTED;\r
228 }\r
229\r
230 OutPublic->publicArea.parameters.rsaDetail.scheme.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
231 Buffer += sizeof (UINT16);\r
232 switch (OutPublic->publicArea.parameters.rsaDetail.scheme.scheme) {\r
233 case TPM_ALG_RSASSA:\r
234 OutPublic->publicArea.parameters.rsaDetail.scheme.details.rsassa.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
235 Buffer += sizeof (UINT16);\r
236 break;\r
237 case TPM_ALG_RSAPSS:\r
238 OutPublic->publicArea.parameters.rsaDetail.scheme.details.rsapss.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
239 Buffer += sizeof (UINT16);\r
240 break;\r
241 case TPM_ALG_RSAES:\r
242 break;\r
243 case TPM_ALG_OAEP:\r
244 OutPublic->publicArea.parameters.rsaDetail.scheme.details.oaep.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
245 Buffer += sizeof (UINT16);\r
246 break;\r
247 case TPM_ALG_NULL:\r
248 break;\r
249 default:\r
250 return EFI_UNSUPPORTED;\r
251 }\r
252\r
253 OutPublic->publicArea.parameters.rsaDetail.keyBits = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
254 Buffer += sizeof (UINT16);\r
255 OutPublic->publicArea.parameters.rsaDetail.exponent = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
256 Buffer += sizeof (UINT32);\r
087132a8 257 break;\r
c411b485
MK
258 case TPM_ALG_ECC:\r
259 OutPublic->publicArea.parameters.eccDetail.symmetric.algorithm = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
260 Buffer += sizeof (UINT16);\r
261 switch (OutPublic->publicArea.parameters.eccDetail.symmetric.algorithm) {\r
262 case TPM_ALG_AES:\r
263 OutPublic->publicArea.parameters.eccDetail.symmetric.keyBits.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
264 Buffer += sizeof (UINT16);\r
265 OutPublic->publicArea.parameters.eccDetail.symmetric.mode.aes = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
266 Buffer += sizeof (UINT16);\r
267 break;\r
268 case TPM_ALG_SM4:\r
269 OutPublic->publicArea.parameters.eccDetail.symmetric.keyBits.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
270 Buffer += sizeof (UINT16);\r
271 OutPublic->publicArea.parameters.eccDetail.symmetric.mode.SM4 = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
272 Buffer += sizeof (UINT16);\r
273 break;\r
274 case TPM_ALG_NULL:\r
275 break;\r
276 default:\r
277 return EFI_UNSUPPORTED;\r
278 }\r
279\r
280 OutPublic->publicArea.parameters.eccDetail.scheme.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
281 Buffer += sizeof (UINT16);\r
282 switch (OutPublic->publicArea.parameters.eccDetail.scheme.scheme) {\r
283 case TPM_ALG_ECDSA:\r
284 OutPublic->publicArea.parameters.eccDetail.scheme.details.ecdsa.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
285 Buffer += sizeof (UINT16);\r
286 break;\r
287 case TPM_ALG_ECDAA:\r
288 OutPublic->publicArea.parameters.eccDetail.scheme.details.ecdaa.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
289 Buffer += sizeof (UINT16);\r
290 break;\r
291 case TPM_ALG_ECSCHNORR:\r
292 OutPublic->publicArea.parameters.eccDetail.scheme.details.ecSchnorr.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
293 Buffer += sizeof (UINT16);\r
294 break;\r
295 case TPM_ALG_ECDH:\r
296 break;\r
297 case TPM_ALG_NULL:\r
298 break;\r
299 default:\r
300 return EFI_UNSUPPORTED;\r
301 }\r
302\r
303 OutPublic->publicArea.parameters.eccDetail.curveID = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
304 Buffer += sizeof (UINT16);\r
305 OutPublic->publicArea.parameters.eccDetail.kdf.scheme = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
306 Buffer += sizeof (UINT16);\r
307 switch (OutPublic->publicArea.parameters.eccDetail.kdf.scheme) {\r
308 case TPM_ALG_MGF1:\r
309 OutPublic->publicArea.parameters.eccDetail.kdf.details.mgf1.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
310 Buffer += sizeof (UINT16);\r
311 break;\r
312 case TPM_ALG_KDF1_SP800_108:\r
313 OutPublic->publicArea.parameters.eccDetail.kdf.details.kdf1_sp800_108.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
314 Buffer += sizeof (UINT16);\r
315 break;\r
316 case TPM_ALG_KDF1_SP800_56a:\r
317 OutPublic->publicArea.parameters.eccDetail.kdf.details.kdf1_SP800_56a.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
318 Buffer += sizeof (UINT16);\r
319 break;\r
320 case TPM_ALG_KDF2:\r
321 OutPublic->publicArea.parameters.eccDetail.kdf.details.kdf2.hashAlg = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
322 Buffer += sizeof (UINT16);\r
323 break;\r
324 case TPM_ALG_NULL:\r
325 break;\r
326 default:\r
327 return EFI_UNSUPPORTED;\r
328 }\r
329\r
087132a8
JY
330 break;\r
331 default:\r
332 return EFI_UNSUPPORTED;\r
c411b485
MK
333 }\r
334\r
335 // TPMU_PUBLIC_ID\r
336 switch (OutPublic->publicArea.type) {\r
337 case TPM_ALG_KEYEDHASH:\r
338 OutPublic->publicArea.unique.keyedHash.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
339 Buffer += sizeof (UINT16);\r
340 if (OutPublic->publicArea.unique.keyedHash.size > sizeof (TPMU_HA)) {\r
341 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - keyedHash.size error %x\n", OutPublic->publicArea.unique.keyedHash.size));\r
342 return EFI_DEVICE_ERROR;\r
343 }\r
344\r
345 CopyMem (OutPublic->publicArea.unique.keyedHash.buffer, Buffer, OutPublic->publicArea.unique.keyedHash.size);\r
346 Buffer += OutPublic->publicArea.unique.keyedHash.size;\r
087132a8 347 break;\r
c411b485
MK
348 case TPM_ALG_SYMCIPHER:\r
349 OutPublic->publicArea.unique.sym.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
350 Buffer += sizeof (UINT16);\r
351 if (OutPublic->publicArea.unique.sym.size > sizeof (TPMU_HA)) {\r
352 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - sym.size error %x\n", OutPublic->publicArea.unique.sym.size));\r
353 return EFI_DEVICE_ERROR;\r
354 }\r
355\r
356 CopyMem (OutPublic->publicArea.unique.sym.buffer, Buffer, OutPublic->publicArea.unique.sym.size);\r
357 Buffer += OutPublic->publicArea.unique.sym.size;\r
087132a8 358 break;\r
c411b485
MK
359 case TPM_ALG_RSA:\r
360 OutPublic->publicArea.unique.rsa.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
361 Buffer += sizeof (UINT16);\r
362 if (OutPublic->publicArea.unique.rsa.size > MAX_RSA_KEY_BYTES) {\r
363 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - rsa.size error %x\n", OutPublic->publicArea.unique.rsa.size));\r
364 return EFI_DEVICE_ERROR;\r
365 }\r
366\r
367 CopyMem (OutPublic->publicArea.unique.rsa.buffer, Buffer, OutPublic->publicArea.unique.rsa.size);\r
368 Buffer += OutPublic->publicArea.unique.rsa.size;\r
087132a8 369 break;\r
c411b485
MK
370 case TPM_ALG_ECC:\r
371 OutPublic->publicArea.unique.ecc.x.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
372 Buffer += sizeof (UINT16);\r
373 if (OutPublic->publicArea.unique.ecc.x.size > MAX_ECC_KEY_BYTES) {\r
374 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - ecc.x.size error %x\n", OutPublic->publicArea.unique.ecc.x.size));\r
375 return EFI_DEVICE_ERROR;\r
376 }\r
377\r
378 CopyMem (OutPublic->publicArea.unique.ecc.x.buffer, Buffer, OutPublic->publicArea.unique.ecc.x.size);\r
379 Buffer += OutPublic->publicArea.unique.ecc.x.size;\r
380 OutPublic->publicArea.unique.ecc.y.size = SwapBytes16 (ReadUnaligned16 ((UINT16 *)Buffer));\r
381 Buffer += sizeof (UINT16);\r
382 if (OutPublic->publicArea.unique.ecc.y.size > MAX_ECC_KEY_BYTES) {\r
383 DEBUG ((DEBUG_ERROR, "Tpm2ReadPublic - ecc.y.size error %x\n", OutPublic->publicArea.unique.ecc.y.size));\r
384 return EFI_DEVICE_ERROR;\r
385 }\r
386\r
387 CopyMem (OutPublic->publicArea.unique.ecc.y.buffer, Buffer, OutPublic->publicArea.unique.ecc.y.size);\r
388 Buffer += OutPublic->publicArea.unique.ecc.y.size;\r
087132a8
JY
389 break;\r
390 default:\r
391 return EFI_UNSUPPORTED;\r
087132a8
JY
392 }\r
393\r
c411b485 394 CopyMem (Name->name, (UINT8 *)&RecvBuffer + sizeof (TPM2_RESPONSE_HEADER) + sizeof (UINT16) + OutPublicSize + sizeof (UINT16), NameSize);\r
087132a8
JY
395 Name->size = NameSize;\r
396\r
c411b485 397 CopyMem (QualifiedName->name, (UINT8 *)&RecvBuffer + sizeof (TPM2_RESPONSE_HEADER) + sizeof (UINT16) + OutPublicSize + sizeof (UINT16) + NameSize + sizeof (UINT16), QualifiedNameSize);\r
087132a8
JY
398 QualifiedName->size = QualifiedNameSize;\r
399\r
400 return EFI_SUCCESS;\r
401}\r