xref: /xnu-10002.1.13/bsd/kern/chunklist.h (revision 1031c584a5e37aff177559b9f69dbd3c8c3fd30a)
1*1031c584SApple OSS Distributions #ifndef _CHUNKLIST_H
2*1031c584SApple OSS Distributions #define _CHUNKLIST_H
3*1031c584SApple OSS Distributions 
4*1031c584SApple OSS Distributions #include <libkern/crypto/sha2.h>
5*1031c584SApple OSS Distributions 
6*1031c584SApple OSS Distributions /*
7*1031c584SApple OSS Distributions  * Chunklist file format
8*1031c584SApple OSS Distributions  */
9*1031c584SApple OSS Distributions #define CHUNKLIST_MAGIC                 0x4C4B4E43
10*1031c584SApple OSS Distributions #define CHUNKLIST_FILE_VERSION_10       1
11*1031c584SApple OSS Distributions #define CHUNKLIST_CHUNK_METHOD_10       1
12*1031c584SApple OSS Distributions #define CHUNKLIST_SIGNATURE_METHOD_REV1 1
13*1031c584SApple OSS Distributions #define CHUNKLIST_REV1_SIG_LEN          256
14*1031c584SApple OSS Distributions #define CHUNKLIST_PUBKEY_LEN            (2048/8)
15*1031c584SApple OSS Distributions #define CHUNKLIST_SIGNATURE_LEN         (2048/8)
16*1031c584SApple OSS Distributions 
17*1031c584SApple OSS Distributions struct chunklist_hdr {
18*1031c584SApple OSS Distributions 	uint32_t cl_magic;
19*1031c584SApple OSS Distributions 	uint32_t cl_header_size;
20*1031c584SApple OSS Distributions 	uint8_t  cl_file_ver;
21*1031c584SApple OSS Distributions 	uint8_t  cl_chunk_method;
22*1031c584SApple OSS Distributions 	uint8_t  cl_sig_method;
23*1031c584SApple OSS Distributions 	uint8_t  __unused1;
24*1031c584SApple OSS Distributions 	uint64_t cl_chunk_count;
25*1031c584SApple OSS Distributions 	uint64_t cl_chunk_offset;
26*1031c584SApple OSS Distributions 	uint64_t cl_sig_offset;
27*1031c584SApple OSS Distributions } __attribute__((packed));
28*1031c584SApple OSS Distributions 
29*1031c584SApple OSS Distributions struct chunklist_chunk {
30*1031c584SApple OSS Distributions 	uint32_t chunk_size;
31*1031c584SApple OSS Distributions 	uint8_t  chunk_sha256[SHA256_DIGEST_LENGTH];
32*1031c584SApple OSS Distributions } __attribute__((packed));
33*1031c584SApple OSS Distributions 
34*1031c584SApple OSS Distributions struct chunklist_pubkey {
35*1031c584SApple OSS Distributions 	const boolean_t is_production;
36*1031c584SApple OSS Distributions 	const uint8_t key[CHUNKLIST_PUBKEY_LEN];
37*1031c584SApple OSS Distributions };
38*1031c584SApple OSS Distributions 
39*1031c584SApple OSS Distributions int authenticate_root_with_chunklist(const char *rootdmg_path, boolean_t *out_enforced);
40*1031c584SApple OSS Distributions int authenticate_root_version_check(void);
41*1031c584SApple OSS Distributions int authenticate_bootkc_uuid(void);
42*1031c584SApple OSS Distributions int authenticate_libkern_uuid(void);
43*1031c584SApple OSS Distributions #endif /* _CHUNKLIST_H */
44