iBoot/lib/image/image3/Image3Format.h

136 lines
3.2 KiB
C

/*
* Copyright (C) 2007-2011, 2014 Apple Inc. All rights reserved.
*
* This document is the property of Apple Inc.
* It is considered confidential and proprietary.
*
* This document may not be reproduced or transmitted in any form,
* in whole or in part, without the express written permission of
* Apple Inc.
*/
#ifndef _IMAGE3_FORMAT_H_
#define _IMAGE3_FORMAT_H_
#include <drivers/sha1.h>
/*
* All structures defined here are on-media formats.
*/
#pragma pack(push, 1)
/*
* Fixed object header.
*/
typedef struct _Image3ObjectHeader {
/* these fields are unsigned */
u_int32_t ihMagic;
#define kImage3HeaderMagic 'Img3'
u_int32_t ihSkipDistance;
u_int32_t ihBufferLength;
/* fields below are signed */
u_int32_t ihSignedLength;
u_int32_t ihType;
u_int8_t ihBuffer[];
} Image3ObjectHeader;
/*
* Generic tag header.
*/
typedef struct {
u_int32_t itTag;
u_int32_t itSkipDistance;
u_int32_t itBufferLength;
u_int8_t itBuffer[];
} Image3TagHeader;
#ifdef IMAGE3_CREATOR
/*
* Partial hash types.
*/
typedef struct {
/* number of valid bytes in the buffer */
u_int32_t masteredReservationLength;
u_int32_t masteredSignedLength;
u_int8_t sha1_state[CCSHA1_OUTPUT_SIZE];
} Image3PartialHash;
#endif /* IMAGE3_CREATOR */
/*
* Utility tag types.
*/
typedef struct {
/* number of valid bytes in the buffer */
u_int32_t stringLength;
char stringBytes[];
} Image3TagString;
typedef struct {
union {
u_int32_t u32;
int32_t s32;
} value;
} Image3TagNumber32;
typedef struct {
union {
u_int64_t u64;
int64_t s64;
} value;
} Image3TagNumber64;
typedef struct {
union {
Image3TagNumber32 n32;
Image3TagNumber64 n64;
} number;
} Image3TagNumber;
#ifdef IMAGE3_CREATOR
#define IMAGE_TYPE_EMBEDCERT 'cert' /* ihType of image embedded in leaf cert */
#endif /* IMAGE3_CREATOR */
/*
* Defined tags and their datastructures.
*/
#define kImage3TagTypeData 'DATA' /* opaque */
#define kImage3TagTypeSignedHash 'SHSH' /* opaque */
#define kImage3TagTypeCertificateChain 'CERT' /* opaque */
#define kImage3TagTypeVersion 'VERS' /* string */
#define kImage3TagTypeSecurityEpoch 'SEPO' /* number */
#define kImage3TagTypeSecurityDomain 'SDOM' /* number */
#define kImage3TagTypeProductionStatus 'PROD' /* number */
#define kImage3TagTypeChipType 'CHIP' /* number */
#define kImage3TagTypeBoardType 'BORD' /* number */
#define kImage3TagTypeUniqueID 'ECID' /* number */
#define kImage3TagTypeRandomPad 'SALT' /* number */
#define kImage3TagTypeType 'TYPE' /* number */
#define kImage3TagTypeOverride 'OVRD' /* bitmap */
#define kImage3TagTypeHardwareEpoch 'CEPO' /* number */
#define kImage3TagTypeNonce 'NONC' /* opaque */
#define kImage3TagTypeKeybag 'KBAG'
typedef struct {
u_int32_t kbSelector;
#define kImage3KeybagSelectorNoKey (0)
#define kImage3KeybagSelectorChipUnique (1)
#define kImage3KeybagSelectorChipUniqueDev (2)
u_int32_t kbKeySize;
u_int8_t kbIVBytes[16];
u_int8_t kbKeyBytes[32];
} Image3TagKBAG;
#define kImage3SecurityDomainManufacturer 0
#define kImage3SecurityDomainDarwin 1
#define kImage3SecurityDomainRTXC 3
#define kImage3SecurityProductionStatus 1
#define kImage3OverrideProductionMode 1
/* restore structure packing */
#pragma pack(pop)
#endif /* _IMAGE3_FORMAT_H_ */