xref: /xnu-8019.80.24/EXTERNAL_HEADERS/CoreEntitlements/CoreEntitlementsPriv.h (revision a325d9c4a84054e40bbe985afedcb50ab80993ea)
1 //
2 //  CoreEntitlementsPriv.h
3 //  CoreEntitlements
4 //
5 
6 #pragma once
7 
8 #ifdef __cplusplus
9 extern "C" {
10 #endif
11 
12 #include "CoreEntitlements.h"
13 #include "EntitlementsPriv.h"
14 
15 #define CE_BRIDGE_STRUCT_VERSION 3
16 #define CCDER_ENTITLEMENTS (CCDER_SEQUENCE | CCDER_CONSTRUCTED | CCDER_APPLICATION)
17 
18 /*!
19  * @typedef coreentitlements_t
20  * Wraps up all the CoreEntitlements functions into a nice bundle to be used in the kernel
21  */
22 typedef struct {
23     uint64_t version;
24     typeof(&CEAcquireUnmanagedContext) AcquireUnmanagedContext;
25     typeof(&CEValidate) Validate;
26     typeof(&CEContextQuery) ContextQuery;
27     typeof(&CEConjureContextFromDER) ConjureContextFromDER;
28 
29     typeof(&der_vm_context_create) der_vm_context_create;
30     typeof(&der_vm_execute) der_vm_execute;
31     typeof(&der_vm_iterate) der_vm_iterate;
32     typeof(&der_vm_context_is_valid) der_vm_context_is_valid;
33     typeof(&der_vm_CEType_from_context) der_vm_CEType_from_context;
34     typeof(&der_vm_integer_from_context) der_vm_integer_from_context;
35     typeof(&der_vm_string_from_context) der_vm_string_from_context;
36     typeof(&der_vm_bool_from_context) der_vm_bool_from_context;
37 
38     typeof(kCENoError) kNoError;
39     typeof(kCEAPIMisuse) kAPIMisuse;
40     typeof(kCEInvalidArgument) kInvalidArgument;
41     typeof(kCEAllocationFailed) kAllocationFailed;
42     typeof(kCEMalformedEntitlements) kMalformedEntitlements;
43     typeof(kCEQueryCannotBeSatisfied) kQueryCannotBeSatisfied;
44 
45     typeof(&CEGetErrorString) GetErrorString;
46 
47     typeof(&der_vm_buffer_from_context) der_vm_buffer_from_context;
48     typeof(&CEContextIsSubset) CEContextIsSubset;
49 } coreentitlements_t;
50 
51 #ifdef __BLOCKS__
52 typedef bool (^iteration_trampoline_t)(der_vm_iteration_context ctx);
53 bool der_vm_block_trampoline(der_vm_iteration_context ctx);
54 #endif
55 
56 /*
57  These are private for now, they're essentially inverse functions for CESerialize.
58 
59  */
60 CEError_t CESizeDeserialization(CEQueryContext_t ctx, size_t* requiredElements);
61 CEError_t CEDeserialize(CEQueryContext_t ctx, CESerializedElement_t* elements, size_t elementsLength);
62 
63 #ifdef __cplusplus
64 }
65 #endif
66