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