15#include <Library/BaseMemoryLib.h>
16#include <Library/BaseOverflowLib.h>
17#include <Library/DebugLib.h>
18#include <Library/MemoryAllocationLib.h>
62 if ( BaseOverflowAddUN ((UINTN)
Buffer, (UINTN)ChunklistHeader->
ChunkOffset, (UINTN *)&Context->Chunks)
63 || BaseOverflowAddUN ((UINTN)
Buffer, (UINTN)ChunklistHeader->
SigOffset, (UINTN *)&Context->Signature))
77 if ( BaseOverflowMulAddUN (
sizeof (
APPLE_CHUNKLIST_CHUNK), Context->ChunkCount, (UINTN)Context->Chunks, &DataEnd)
78 || (DataEnd > (UINTN)
Buffer + BufferSize)
80 || (DataEnd != (UINTN)
Buffer + BufferSize))
88 Sha256 (Context->Hash, (UINT8 *)ChunklistHeader, (UINTN)ChunklistHeader->
SigOffset);
90 Signature = Context->Signature->Signature;
91 SigLength =
sizeof (Context->Signature->Signature);
93 for (Index = 0; Index < (SigLength / 2); ++Index) {
96 Signature[SigLength - Index - 1] = SwapValue;
111 ASSERT (Context->Signature != NULL);
115 Context->Signature->Signature,
116 sizeof (Context->Signature->Signature),
118 sizeof (Context->Hash),
124 Context->Signature = NULL;
145 UINT32 ChunkDataSize;
149 ASSERT (Context->Chunks != NULL);
153 ASSERT (Context->Signature == NULL);
157 for (Index = 0; Index < Context->ChunkCount; ++Index) {
158 CurrentChunk = &Context->Chunks[Index];
159 if (ChunkDataSize < CurrentChunk->
Length) {
160 ChunkDataSize = CurrentChunk->Length;
164 ChunkData = AllocatePool (ChunkDataSize);
165 if (ChunkData == NULL) {
170 for (Index = 0; Index < Context->ChunkCount; Index++) {
171 CurrentChunk = &Context->Chunks[Index];
176 CurrentChunk->Length,
180 FreePool (ChunkData);
189 "OCCL: Validating chunk %lu of %lu\n",
191 (UINT64)Context->ChunkCount
193 Sha256 (ChunkHash, ChunkData, CurrentChunk->Length);
195 FreePool (ChunkData);
199 CurrentOffset += CurrentChunk->Length;
202 FreePool (ChunkData);
#define APPLE_CHUNKLIST_SIG_METHOD_10
#define APPLE_CHUNKLIST_CHUNK_METHOD_10
#define APPLE_CHUNKLIST_MAGIC
#define APPLE_CHUNKLIST_FILE_VERSION_10
APPLE_RAM_DISK_EXTENT_TABLE ExtentTable
PACKED struct @54 APPLE_RAM_DISK_EXTENT_TABLE
BOOLEAN OcAppleChunklistVerifySignature(IN OUT OC_APPLE_CHUNKLIST_CONTEXT *Context, IN CONST OC_RSA_PUBLIC_KEY *PublicKey)
BOOLEAN OcAppleChunklistInitializeContext(OUT OC_APPLE_CHUNKLIST_CONTEXT *Context, IN OUT VOID *Buffer, IN UINT32 BufferSize)
BOOLEAN OcAppleChunklistVerifyData(IN OUT OC_APPLE_CHUNKLIST_CONTEXT *Context, IN CONST APPLE_RAM_DISK_EXTENT_TABLE *ExtentTable)
BOOLEAN OcAppleRamDiskRead(IN CONST APPLE_RAM_DISK_EXTENT_TABLE *ExtentTable, IN UINTN Offset, IN UINTN Size, OUT VOID *Buffer)
BOOLEAN RsaVerifySigHashFromKeyDynalloc(IN CONST OC_RSA_PUBLIC_KEY *Key, IN CONST UINT8 *Signature, IN UINTN SignatureSize, IN CONST UINT8 *Hash, IN UINTN HashSize, IN OC_SIG_HASH_TYPE Algorithm)
#define SHA256_DIGEST_SIZE
VOID Sha256(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
INTN EFIAPI CompareMem(IN CONST VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)