11#include <Library/MemoryAllocationLib.h>
29 "CertificateEpoch: %x\n"
30 "SecurityDomain: %x\n"
31 "ProductionStatus: %x\n"
33 "EffectiveProductionStatus: %x\n"
34 "EffectiveSecurityMode: %x\n"
35 "InternalUseOnlyUnit: %x\n"
40 Env->certificateEpoch,
42 Env->productionStatus,
44 Env->effectiveProductionStatus,
45 Env->effectiveSecurityMode,
46 Env->internalUseOnlyUnit,
54 IN CONST CHAR8 *ManifestName
61 STATIC CONST UINT32 Objs[] = {
84 if (Manifest == NULL) {
85 DEBUG ((DEBUG_ERROR,
"\n!!! read error !!!\n"));
90 for (Index = 0; Index <
ARRAY_SIZE (Objs); ++Index) {
101 "Manifest has %c%c%c%c\n",
102 ((CHAR8 *)&Objs[Index])[3],
103 ((CHAR8 *)&Objs[Index])[2],
104 ((CHAR8 *)&Objs[Index])[1],
105 ((CHAR8 *)&Objs[Index])[0]
115 DEBUG ((DEBUG_ERROR,
"Supplied manifest is not valid or has no known objects!\n"));
125 IN CONST CHAR8 *ImageName,
126 IN CONST CHAR8 *ManifestName,
139 if (Manifest == NULL) {
140 DEBUG ((DEBUG_ERROR,
"\n!!! read error !!!\n"));
152 DEBUG ((DEBUG_ERROR,
"\n !!! DERImg4ParseManifest failed - %d !!!\n", RetVal));
160 DEBUG ((DEBUG_ERROR,
"\n!!! read error !!!\n"));
166 "ManInfo.imageDigestSize %02X%02X%02X%02X %u\n",
183 if (CmpResult != 0) {
184 DEBUG ((DEBUG_ERROR,
"\n!!! digest mismatch !!!\n"));
200 if ((argc < 2) || (((argc % 3) != 1) && (argc != 2))) {
201 DEBUG ((DEBUG_ERROR,
"Usage: ./Img4 ([image path] [manifest path] [object type])*\n"));
202 DEBUG ((DEBUG_ERROR,
"Usage: Img4 [manifest path]\n"));
211 for (Index = 1; Index < (argc - 1); Index += 3) {
212 if (AsciiStrLen (argv[Index + 2]) != 4) {
213 DEBUG ((DEBUG_ERROR,
"Object types require exactly 4 characters.\n"));
236 STATIC CONST UINT32 Signatures[] = {
252 if ((Data == NULL) || (
Size == 0)) {
256 for (Index = 0; Index <
ARRAY_SIZE (Signatures); ++Index) {
#define ARRAY_SIZE(Array)
#define APPLE_SB_OBJ_KERNEL_DEBUG
#define APPLE_SB_OBJ_EFIBOOT
#define APPLE_SB_OBJ_MUPD
#define APPLE_SB_OBJ_KERNEL
#define APPLE_SB_OBJ_EFIBOOT_DEBUG
#define APPLE_SB_OBJ_EFIBOOT_BASE
#define APPLE_SB_OBJ_SDFU
#define APPLE_SB_OBJ_HPMU
#define APPLE_SB_OBJ_THOU
#define APPLE_SB_OBJ_DTHU
#define APPLE_SB_OBJ_GPUU
#define APPLE_SB_OBJ_ETHU
DERReturn DERImg4ParseManifest(DERImg4ManifestInfo *ManInfo, const void *ManBuffer, size_t ManSize, uint32_t ObjType)
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
STATIC INT32 DebugManifest(IN CONST CHAR8 *ManifestName)
STATIC INT32 VerifyImg4(IN CONST CHAR8 *ImageName, IN CONST CHAR8 *ManifestName, IN CONST CHAR8 *type)
STATIC VOID InternalDebugEnvInfo(IN CONST DERImg4Environment *Env)
DMG_SIZE_DEVICE_PATH Size
INTN SigVerifyShaHashBySize(IN CONST VOID *Data, IN UINTN DataSize, IN CONST UINT8 *Hash, IN UINTN HashSize)
UINT8 * UserReadFile(IN CONST CHAR8 *FileName, OUT UINT32 *Size)
uint8_t imageDigest[DER_IMG4_MAX_DIGEST_SIZE]
DERImg4Environment environment