OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
OcSmcLib.c
Go to the documentation of this file.
1
15#include <Uefi.h>
16
17#include <Library/DebugLib.h>
18#include <Library/BaseLib.h>
19#include <Library/BaseMemoryLib.h>
20#include <Library/MemoryAllocationLib.h>
21#include <Library/UefiBootServicesTableLib.h>
22#include <Library/UefiRuntimeServicesTableLib.h>
23#include <Library/UefiLib.h>
24#include <Library/OcCryptoLib.h>
25#include <Library/OcMiscLib.h>
26#include <Library/OcSmcLib.h>
27#include <Library/OcRtcLib.h>
29
30#include "OcSmcLibInternal.h"
31
32STATIC
33EFI_EVENT
35
36STATIC
40 },
42 },
43 //
44 // Requested yet unused (battery inside, causes missing battery in UI).
45 //
46 // { SMC_KEY_BBIN, SmcKeyTypeFlag, 1, SMC_KEY_ATTRIBUTE_READ, {0} },
48 },
50 },
52 },
53 //
54 // HBKP must always be the last key in the list (see mAuthenticationKeyIndex).
55 //
57 }
58};
59
60STATIC
61CONST UINT8
63
64STATIC
65EFI_STATUS
66EFIAPI
68 IN APPLE_SMC_IO_PROTOCOL *This,
69 IN SMC_KEY Key,
71 OUT SMC_DATA *Value
72 )
73{
74 UINTN Index;
75
76 DEBUG ((DEBUG_INFO, "OCSMC: SmcReadValue Key %X Size %d\n", Key, Size));
77
78 if (Value == NULL) {
80 }
81
82 for (Index = 0; Index < ARRAY_SIZE (mVirtualSmcKeyValue); Index++) {
83 if (mVirtualSmcKeyValue[Index].Key == Key) {
84 if (mVirtualSmcKeyValue[Index].Size != Size) {
86 }
87
88 CopyMem (Value, mVirtualSmcKeyValue[Index].Data, Size);
89
90 return EFI_SMC_SUCCESS;
91 }
92 }
93
94 return EFI_SMC_NOT_FOUND;
95}
96
97STATIC
98EFI_STATUS
99EFIAPI
101 IN APPLE_SMC_IO_PROTOCOL *This,
102 IN SMC_KEY Key,
104 IN SMC_DATA *Value
105 )
106{
107 UINTN Index;
108
109 DEBUG ((DEBUG_INFO, "OCSMC: SmcWriteValue Key %X Size %d\n", Key, Size));
110
111 if (!Value || (Size == 0)) {
113 }
114
115 //
116 // Handle HBKP separately to let boot.efi erase its contents as early as it wants.
117 //
118 if ((Key == SMC_KEY_HBKP) && (Size <= SMC_HBKP_SIZE)) {
121 for (Index = 0; Index < SMC_HBKP_SIZE; Index++) {
122 if (mVirtualSmcKeyValue[mAuthenticationKeyIndex].Data[Index] != 0) {
123 DEBUG ((DEBUG_INFO, "OCSMC: Not updating key with non-zero data\n"));
124 break;
125 }
126 }
127
128 return EFI_SUCCESS;
129 }
130
132}
133
134STATIC
135EFI_STATUS
136EFIAPI
138 IN CHAR8 *Name,
139 OUT SMC_KEY *Key
140 )
141{
142 UINTN Index;
143
144 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcMakeKey\n"));
145
146 if ((Name != NULL) && (Key != NULL)) {
147 *Key = 0;
148 Index = 0;
149
150 do {
151 if (SMC_KEY_IS_VALID_CHAR (Name[Index])) {
152 *Key <<= 8;
153 *Key |= Name[Index];
154 ++Index;
155 } else {
156 *Key = 0;
158 }
159 } while (Index < sizeof (*Key) / sizeof (*Name));
160
161 return EFI_SMC_SUCCESS;
162 }
163
165}
166
167STATIC
168EFI_STATUS
169EFIAPI
171 IN APPLE_SMC_IO_PROTOCOL *This,
172 OUT UINT32 *Count
173 )
174{
175 DEBUG ((
176 DEBUG_VERBOSE,
177 "OCSMC: SmcIoVirtualSmcGetKeyCount %u\n",
179 ));
180
181 if (Count == NULL) {
183 }
184
185 *Count = SwapBytes32 (ARRAY_SIZE (mVirtualSmcKeyValue));
186
187 return EFI_SMC_SUCCESS;
188}
189
190STATIC
191EFI_STATUS
192EFIAPI
194 IN APPLE_SMC_IO_PROTOCOL *This,
195 IN SMC_KEY_INDEX Index,
196 OUT SMC_KEY *Key
197 )
198{
199 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcGetKeyFromIndex\n"));
200
201 if (Key == NULL) {
203 }
204
205 if (Index < ARRAY_SIZE (mVirtualSmcKeyValue)) {
206 *Key = mVirtualSmcKeyValue[Index].Key;
207 return EFI_SMC_SUCCESS;
208 }
209
210 return EFI_SMC_NOT_FOUND;
211}
212
213STATIC
214EFI_STATUS
215EFIAPI
217 IN APPLE_SMC_IO_PROTOCOL *This,
218 IN SMC_KEY Key,
219 OUT SMC_DATA_SIZE *Size,
220 OUT SMC_KEY_TYPE *Type,
221 OUT SMC_KEY_ATTRIBUTES *Attributes
222 )
223{
224 UINTN Index;
225
226 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcGetKeyFromIndex %X\n", Key));
227
228 if ((Size == NULL) || (Type == NULL) || (Attributes == NULL)) {
230 }
231
232 for (Index = 0; Index < ARRAY_SIZE (mVirtualSmcKeyValue); Index++) {
233 if (mVirtualSmcKeyValue[Index].Key == Key) {
234 *Size = mVirtualSmcKeyValue[Index].Size;
235 *Type = mVirtualSmcKeyValue[Index].Type;
236 *Attributes = mVirtualSmcKeyValue[Index].Attributes;
237 return EFI_SMC_SUCCESS;
238 }
239 }
240
241 return EFI_SMC_NOT_FOUND;
242}
243
244STATIC
245EFI_STATUS
246EFIAPI
248 IN APPLE_SMC_IO_PROTOCOL *This,
249 IN UINT32 Mode
250 )
251{
252 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcReset %X\n", Mode));
253
254 return EFI_SMC_SUCCESS;
255}
256
257STATIC
258EFI_STATUS
259EFIAPI
261 IN APPLE_SMC_IO_PROTOCOL *This,
262 IN SMC_FLASH_TYPE Type
263 )
264{
265 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcFlashType %X\n", Type));
266
268}
269
270STATIC
271EFI_STATUS
272EFIAPI
274 VOID
275 )
276{
277 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcUnsupported\n"));
278
280}
281
282STATIC
283EFI_STATUS
284EFIAPI
286 IN APPLE_SMC_IO_PROTOCOL *This,
287 IN UINT32 Unknown,
289 IN SMC_DATA *Data
290 )
291{
292 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcFlashWrite %d\n", Size));
293
295}
296
297STATIC
298EFI_STATUS
299EFIAPI
301 IN APPLE_SMC_IO_PROTOCOL *This,
303 IN SMC_DATA *Data
304 )
305{
306 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcFlashAuth %d\n", Size));
307
309}
310
311STATIC
312EFI_STATUS
313EFIAPI
315 VOID
316 )
317{
318 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcUnknown1\n"));
319
321}
322
323STATIC
324EFI_STATUS
325EFIAPI
327 IN APPLE_SMC_IO_PROTOCOL *This,
328 IN UINTN Ukn1,
329 IN UINTN Ukn2
330 )
331{
332 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcUnknown2\n"));
333
335}
336
337STATIC
338EFI_STATUS
339EFIAPI
341 IN APPLE_SMC_IO_PROTOCOL *This,
342 IN UINTN Ukn1,
343 IN UINTN Ukn2
344 )
345{
346 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcUnknown3\n"));
347
349}
350
351STATIC
352EFI_STATUS
353EFIAPI
355 IN APPLE_SMC_IO_PROTOCOL *This,
356 IN UINTN Ukn1
357 )
358{
359 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcUnknown4\n"));
360
362}
363
364STATIC
365EFI_STATUS
366EFIAPI
368 IN APPLE_SMC_IO_PROTOCOL *This,
369 IN UINT8 *Data
370 )
371{
372 DEBUG ((DEBUG_VERBOSE, "OCSMC: SmcIoVirtualSmcUnknown5\n"));
373
375}
376
399
400STATIC
401VOID
402EFIAPI
404 IN EFI_EVENT Event,
405 IN VOID *Context
406 )
407{
409}
410
411STATIC
412BOOLEAN
414 UINT8 *Buffer,
415 UINT32 Size
416 )
417{
418 UINT8 Index;
419 AES_CONTEXT Context;
420 UINT8 EncryptKey[CONFIG_AES_KEY_SIZE];
421 CONST UINT8 *InitVector;
422 UINT8 *Payload;
423 UINT32 PayloadSize;
424 UINT32 RealSize;
425
426 if (Size < sizeof (UINT32) + SMC_HBKP_SIZE) {
427 DEBUG ((DEBUG_INFO, "OCSMC: Invalid key length - %u\n", (UINT32)Size));
428 return FALSE;
429 }
430
431 if ((Buffer[0] == 'V') && (Buffer[1] == 'S') && (Buffer[2] == 'P') && (Buffer[3] == 'T')) {
432 //
433 // Perform an as-is copy of stored contents.
434 //
436 } else if ((Buffer[0] == 'V') && (Buffer[1] == 'S') && (Buffer[2] == 'E') && (Buffer[3] == 'N')) {
437 //
438 // The magic is followed by an IV and at least one AES block containing at least SMC_HBKP_SIZE bytes.
439 //
440 if ((Size < sizeof (UINT32) + AES_BLOCK_SIZE + SMC_HBKP_SIZE) || ((Size - sizeof (UINT32)) % AES_BLOCK_SIZE != 0)) {
441 DEBUG ((DEBUG_INFO, "OCSMC: Invalid encrypted key length - %u\n", (UINT32)Size));
442 return FALSE;
443 }
444
445 //
446 // Read and erase the temporary encryption key from CMOS memory.
447 //
448 for (Index = 0; Index < sizeof (EncryptKey); Index++) {
449 EncryptKey[Index] = OcRtcRead (0xD0 + Index);
450 OcRtcWrite (0xD0 + Index, 0);
451 }
452
453 //
454 // Perform the decryption.
455 //
456 InitVector = Buffer + sizeof (UINT32);
457 Payload = Buffer + sizeof (UINT32) + AES_BLOCK_SIZE;
458 PayloadSize = Size - (sizeof (UINT32) + AES_BLOCK_SIZE);
459 AesInitCtxIv (&Context, EncryptKey, InitVector);
460 AesCbcDecryptBuffer (&Context, Payload, PayloadSize);
461 SecureZeroMem (&Context, sizeof (Context));
462 SecureZeroMem (EncryptKey, sizeof (EncryptKey));
463 RealSize = *(const UINT32 *)Payload;
464
465 //
466 // Ensure the size matches SMC_HBKP_SIZE.
467 //
468 if (RealSize != SMC_HBKP_SIZE) {
469 DEBUG ((DEBUG_INFO, "OCSMC: Invalid decrypted key length - %d\n", RealSize));
470 return FALSE;
471 }
472
473 //
474 // Copy the decrypted contents.
475 //
476 CopyMem (mVirtualSmcKeyValue[mAuthenticationKeyIndex].Data, Payload + sizeof (UINT32), SMC_HBKP_SIZE);
477 } else {
478 DEBUG ((DEBUG_INFO, "OCSMC: Invalid key magic - %02X %02X %02X %02X\n", Buffer[0], Buffer[1], Buffer[2], Buffer[3]));
479 return FALSE;
480 }
481
482 return TRUE;
483}
484
485STATIC
486VOID
488 VOID
489 )
490{
491 EFI_STATUS Status;
492 VOID *Buffer = NULL;
493 UINT32 Attributes = 0;
494 UINTN Size = 0;
495
496 //
497 // Load encryption key contents.
498 //
499 Status = gRT->GetVariable (VIRTUALSMC_ENCRYPTION_KEY, &gOcWriteOnlyVariableGuid, &Attributes, &Size, NULL);
500 if (Status == EFI_BUFFER_TOO_SMALL) {
501 Buffer = AllocateZeroPool (Size);
502 if (Buffer != NULL) {
503 Status = gRT->GetVariable (VIRTUALSMC_ENCRYPTION_KEY, &gOcWriteOnlyVariableGuid, &Attributes, &Size, Buffer);
504 if (EFI_ERROR (Status)) {
505 DEBUG ((DEBUG_INFO, "OCSMC: Layer key (%u, %X) obtain failure - %r\n", (UINT32)Size, Attributes, Status));
506 }
507 } else {
508 DEBUG ((DEBUG_INFO, "OCSMC: Key buffer (%u) allocation failure - %r\n", (UINT32)Size, Status));
509 Status = EFI_OUT_OF_RESOURCES;
510 }
511 } else {
512 DEBUG ((DEBUG_INFO, "OCSMC: Initial key obtain failure - %r\n", Status));
513 }
514
515 //
516 // Nullify or (at least) remove existing vsmc-key variable.
517 //
518 if (Buffer != NULL) {
519 //
520 // Parse encryption contents if any.
521 //
522 if (!EFI_ERROR (Status)) {
524 }
525
527 Status = gRT->SetVariable (VIRTUALSMC_ENCRYPTION_KEY, &gOcWriteOnlyVariableGuid, Attributes, Size, Buffer);
528 if (EFI_ERROR (Status)) {
529 DEBUG ((DEBUG_INFO, "OCSMC: Failed to zero key - %r\n", Status));
530 Status = gRT->SetVariable (VIRTUALSMC_ENCRYPTION_KEY, &gOcWriteOnlyVariableGuid, 0, 0, NULL);
531 }
532
533 gBS->FreePool (Buffer);
534 Buffer = NULL;
535 } else {
536 Status = gRT->SetVariable (VIRTUALSMC_ENCRYPTION_KEY, &gOcWriteOnlyVariableGuid, 0, 0, NULL);
537 }
538
539 if (EFI_ERROR (Status)) {
540 DEBUG ((DEBUG_INFO, "OCSMC: Failed to remove key - %r\n", Status));
541 }
542
543 //
544 // Erase local HBKP key copy at exit boot services.
545 //
546 Status = gBS->CreateEvent (
547 EVT_SIGNAL_EXIT_BOOT_SERVICES,
548 TPL_NOTIFY,
550 NULL,
552 );
553 if (EFI_ERROR (Status)) {
554 DEBUG ((DEBUG_INFO, "OCSMC: Failed to create exit bs event for hbkp erase\n"));
555 }
556}
557
558STATIC
559VOID
561 VOID
562 )
563{
564 EFI_STATUS Status;
565 UINT32 StatusBuffer[2];
566 UINT8 *StatusBufferMagic;
567
568 StatusBufferMagic = (UINT8 *)&StatusBuffer[0];
569
570 //
571 // Build the structure.
572 //
573 StatusBufferMagic[0] = 'V';
574 StatusBufferMagic[1] = 'S';
575 StatusBufferMagic[2] = 'M';
576 StatusBufferMagic[3] = 'C';
577 StatusBuffer[1] = 1;
578
579 //
580 // Set status key for kext frontend.
581 //
582 Status = OcSetSystemVariable (
584 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
585 sizeof (StatusBuffer),
586 StatusBuffer,
587 NULL
588 );
589 if (EFI_ERROR (Status)) {
590 DEBUG ((DEBUG_INFO, "OCSMC: Failed to create status - %r\n", Status));
591 }
592}
593
596 IN BOOLEAN Reinstall,
597 IN BOOLEAN AuthRestart
598 )
599{
600 EFI_STATUS Status;
601 APPLE_SMC_IO_PROTOCOL *Protocol;
602 EFI_HANDLE NewHandle;
603
604 if (AuthRestart) {
607 }
608
609 if (Reinstall) {
611 if (EFI_ERROR (Status)) {
612 DEBUG ((DEBUG_ERROR, "OCSMC: Uninstall failed - %r\n", Status));
613 return NULL;
614 }
615 } else {
616 Status = gBS->LocateProtocol (
618 NULL,
619 (VOID *)&Protocol
620 );
621
622 if (!EFI_ERROR (Status)) {
623 return Protocol;
624 }
625 }
626
627 NewHandle = NULL;
628 Status = gBS->InstallMultipleProtocolInterfaces (
629 &NewHandle,
631 (VOID *)&mSmcIoProtocol,
632 NULL
633 );
634
635 if (EFI_ERROR (Status)) {
636 return NULL;
637 }
638
639 return &mSmcIoProtocol;
640}
#define ARRAY_SIZE(Array)
Definition AppleMacEfi.h:34
#define EFI_SMC_NOT_WRITABLE
Definition AppleSmc.h:224
#define EFI_SMC_BAD_PARAMETER
Definition AppleSmc.h:221
UINT32 SMC_KEY_TYPE
Definition AppleSmc.h:322
#define SMC_KEY_ATTRIBUTE_READ
Definition AppleSmc.h:333
#define SMC_KEY_ATTRIBUTE_WRITE
Definition AppleSmc.h:332
#define SMC_KEY_HBKP
Definition AppleSmc.h:356
#define EFI_SMC_SUCCESS
Definition AppleSmc.h:215
#define SMC_MODE_APPCODE
Definition AppleSmc.h:112
UINT8 SMC_KEY_ATTRIBUTES
Definition AppleSmc.h:336
#define SMC_KEY_KEY
Definition AppleSmc.h:357
#define SMC_KEY_BATP
Definition AppleSmc.h:361
#define SMC_KEY_MSLD
Definition AppleSmc.h:360
UINT8 SMC_DATA
Definition AppleSmc.h:342
#define SMC_HBKP_SIZE
Definition AppleSmc.h:436
#define SMC_KEY_IS_VALID_CHAR(x)
Definition AppleSmc.h:348
#define EFI_SMC_UNSUPPORTED_FEATURE
Definition AppleSmc.h:236
UINT8 SMC_DATA_SIZE
Definition AppleSmc.h:343
#define EFI_SMC_KEY_MISMATCH
Definition AppleSmc.h:225
@ SmcKeyTypeUint32
Definition AppleSmc.h:293
@ SmcKeyTypeChar
Definition AppleSmc.h:250
@ SmcKeyTypeFlag
Definition AppleSmc.h:252
@ SmcKeyTypeCh8s
Definition AppleSmc.h:249
@ SmcKeyTypeUint8
Definition AppleSmc.h:290
@ SmcKeyTypeUint16
Definition AppleSmc.h:292
UINT16 SMC_FLASH_SIZE
Definition AppleSmc.h:375
UINT32 SMC_KEY
Definition AppleSmc.h:364
#define EFI_SMC_NOT_FOUND
Definition AppleSmc.h:222
#define SMC_KEY_BRSC
Definition AppleSmc.h:359
UINT8 SMC_FLASH_TYPE
Definition AppleSmc.h:135
UINT32 SMC_KEY_INDEX
Definition AppleSmc.h:365
#define SMC_PORT_BASE
Definition AppleSmc.h:36
#define SMC_KEY_RMde
Definition AppleSmc.h:358
#define APPLE_SMC_IO_PROTOCOL_REVISION
Definition AppleSmcIo.h:19
EFI_GUID gAppleSmcIoProtocolGuid
DMG_SIZE_DEVICE_PATH Size
EFI_BOOT_SERVICES * gBS
VOID AesCbcDecryptBuffer(IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
Definition Aes.c:611
#define CONFIG_AES_KEY_SIZE
Definition OcCryptoLib.h:26
VOID AesInitCtxIv(OUT AES_CONTEXT *Context, IN CONST UINT8 *Key, IN CONST UINT8 *Iv)
Definition Aes.c:250
VOID * SecureZeroMem(OUT VOID *Buffer, IN UINTN Length)
Definition SecureMem.c:73
#define AES_BLOCK_SIZE
Definition OcCryptoLib.h:61
EFI_STATUS OcUninstallAllProtocolInstances(EFI_GUID *Protocol)
UINT8 OcRtcRead(IN UINT8 Offset)
Definition OcRtcLib.c:25
VOID OcRtcWrite(IN UINT8 Offset, IN UINT8 Value)
Definition OcRtcLib.c:47
STATIC VIRTUALSMC_KEY_VALUE mVirtualSmcKeyValue[6]
Definition OcSmcLib.c:38
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcMakeKey(IN CHAR8 *Name, OUT SMC_KEY *Key)
Definition OcSmcLib.c:137
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcGetKeyCount(IN APPLE_SMC_IO_PROTOCOL *This, OUT UINT32 *Count)
Definition OcSmcLib.c:170
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcUnknown3(IN APPLE_SMC_IO_PROTOCOL *This, IN UINTN Ukn1, IN UINTN Ukn2)
Definition OcSmcLib.c:340
STATIC VOID LoadAuthenticationKey(VOID)
Definition OcSmcLib.c:487
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcUnknown1(VOID)
Definition OcSmcLib.c:314
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcUnknown5(IN APPLE_SMC_IO_PROTOCOL *This, IN UINT8 *Data)
Definition OcSmcLib.c:367
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcFlashAuth(IN APPLE_SMC_IO_PROTOCOL *This, IN SMC_FLASH_SIZE Size, IN SMC_DATA *Data)
Definition OcSmcLib.c:300
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcFlashWrite(IN APPLE_SMC_IO_PROTOCOL *This, IN UINT32 Unknown, IN SMC_FLASH_SIZE Size, IN SMC_DATA *Data)
Definition OcSmcLib.c:285
STATIC CONST UINT8 mAuthenticationKeyIndex
Definition OcSmcLib.c:62
APPLE_SMC_IO_PROTOCOL * OcSmcIoInstallProtocol(IN BOOLEAN Reinstall, IN BOOLEAN AuthRestart)
Definition OcSmcLib.c:595
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcUnknown2(IN APPLE_SMC_IO_PROTOCOL *This, IN UINTN Ukn1, IN UINTN Ukn2)
Definition OcSmcLib.c:326
STATIC APPLE_SMC_IO_PROTOCOL mSmcIoProtocol
Definition OcSmcLib.c:377
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcGetKeyInfo(IN APPLE_SMC_IO_PROTOCOL *This, IN SMC_KEY Key, OUT SMC_DATA_SIZE *Size, OUT SMC_KEY_TYPE *Type, OUT SMC_KEY_ATTRIBUTES *Attributes)
Definition OcSmcLib.c:216
STATIC EFI_EVENT mAuthenticationKeyEraseEvent
Definition OcSmcLib.c:34
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcWriteValue(IN APPLE_SMC_IO_PROTOCOL *This, IN SMC_KEY Key, IN SMC_DATA_SIZE Size, IN SMC_DATA *Value)
Definition OcSmcLib.c:100
STATIC VOID ExportStatusKey(VOID)
Definition OcSmcLib.c:560
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcFlashType(IN APPLE_SMC_IO_PROTOCOL *This, IN SMC_FLASH_TYPE Type)
Definition OcSmcLib.c:260
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcReadValue(IN APPLE_SMC_IO_PROTOCOL *This, IN SMC_KEY Key, IN SMC_DATA_SIZE Size, OUT SMC_DATA *Value)
Definition OcSmcLib.c:67
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcReset(IN APPLE_SMC_IO_PROTOCOL *This, IN UINT32 Mode)
Definition OcSmcLib.c:247
STATIC BOOLEAN ExtractAuthentificationKey(UINT8 *Buffer, UINT32 Size)
Definition OcSmcLib.c:413
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcUnknown4(IN APPLE_SMC_IO_PROTOCOL *This, IN UINTN Ukn1)
Definition OcSmcLib.c:354
STATIC VOID EFIAPI EraseAuthenticationKey(IN EFI_EVENT Event, IN VOID *Context)
Definition OcSmcLib.c:403
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcGetKeyFromIndex(IN APPLE_SMC_IO_PROTOCOL *This, IN SMC_KEY_INDEX Index, OUT SMC_KEY *Key)
Definition OcSmcLib.c:193
STATIC EFI_STATUS EFIAPI SmcIoVirtualSmcUnsupported(VOID)
Definition OcSmcLib.c:273
#define VIRTUALSMC_ENCRYPTION_KEY
#define VIRTUALSMC_STATUS_KEY
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
EFI_GUID gOcWriteOnlyVariableGuid
EFI_STATUS OcSetSystemVariable(IN CHAR16 *VariableName, IN UINT32 Attributes, IN UINTN DataSize, IN VOID *Data, IN EFI_GUID *VendorGuid OPTIONAL)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
EFI_RUNTIME_SERVICES * gRT
SMC_KEY_ATTRIBUTES Attributes