xref: /xnu-8796.101.5/EXTERNAL_HEADERS/TrustCache/RawTypes.h (revision aca3beaa3dfbd42498b42c5e5ce20a938e6554e5)
1 #ifndef libTrustCache_RawTypes_h
2 #define libTrustCache_RawTypes_h
3 
4 #include <sys/cdefs.h>
5 __BEGIN_DECLS
6 
7 #include <stdint.h>
8 #include <corecrypto/ccsha1.h>
9 
10 /*
11  * CDHashes in the trust cache are always truncated to the length of a SHA1 hash.
12  */
13 #define kTCEntryHashSize CCSHA1_OUTPUT_SIZE
14 
15 /* UUIDs are always 16 bytes */
16 #define kUUIDSize 16
17 
18 /* Versions supported by the library */
19 enum {
20     kTCVersion0 = 0x0,
21     kTCVersion1 = 0x1,
22     kTCVersion2 = 0x2,
23 
24     kTCVersionTotal,
25 };
26 
27 /* Flags for the trust cache look ups */
28 enum {
29     kTCFlagAMFID = 0x01,
30     kTCFlagANEModel = 0x02,
31 };
32 
33 typedef struct _TrustCacheModuleBase {
34     /* The version for this trust cache module */
35     uint32_t version;
36 } __attribute__((packed)) TrustCacheModuleBase_t;
37 
38 #pragma mark Trust Cache Version 0
39 
40 typedef uint8_t TrustCacheEntry0_t[kTCEntryHashSize];
41 
42 typedef struct _TrustCacheModule0 {
43     /* Must be 0 */
44     uint32_t version;
45 
46     /* ID which uniquely identifies the trust cache */
47     uint8_t uuid[kUUIDSize];
48 
49     /* The number of entries present in the trust cache */
50     uint32_t numEntries;
51 
52     /* Dynamic data containing all the entries */
53     TrustCacheEntry0_t entries[0];
54 } __attribute__((packed)) TrustCacheModule0_t;
55 
56 #pragma mark Trust Cache Version 1
57 
58 typedef struct _TrustCacheEntry1 {
59     uint8_t CDHash[kTCEntryHashSize];
60     uint8_t hashType;
61     uint8_t flags;
62 } __attribute__((packed)) TrustCacheEntry1_t;
63 
64 typedef struct _TrustCacheModule1 {
65     /* Must be 1 */
66     uint32_t version;
67 
68     /* ID which uniquely identifies the trust cache */
69     uint8_t uuid[kUUIDSize];
70 
71     /* The number of entries present in the trust cache */
72     uint32_t numEntries;
73 
74     /* Dynamic data containing all the entries */
75     TrustCacheEntry1_t entries[0];
76 } __attribute__((packed)) TrustCacheModule1_t;
77 
78 #pragma mark Trust Cache Version 2
79 
80 typedef struct _TrustCacheEntry2 {
81     uint8_t CDHash[kTCEntryHashSize];
82     uint8_t hashType;
83     uint8_t flags;
84     uint8_t constraintCategory;
85     uint8_t reserved0;
86 } __attribute__((packed)) TrustCacheEntry2_t;
87 
88 typedef struct _TrustCacheModule2 {
89     /* Must be 2 */
90     uint32_t version;
91 
92     /* ID which uniquely identifies the trust cache */
93     uint8_t uuid[kUUIDSize];
94 
95     /* The number of entries present in the trust cache */
96     uint32_t numEntries;
97 
98     /* Dynamic data containing all the entries */
99     TrustCacheEntry2_t entries[0];
100 } __attribute__((packed)) TrustCacheModule2_t;
101 
102 __END_DECLS
103 #endif /* libTrustCache_RawTypes_h */
104