1 /*! 2 * @header 3 * xnu-specific interfaces. These are hacks that only exist because xnu doesn't 4 * like linking static libraries, and we have a pre-existing contract for how to 5 * export our interfaces to xnu. 6 */ 7 #ifndef __IMG4_4XNU_H 8 #define __IMG4_4XNU_H 9 10 #ifndef __IMG4_INDIRECT 11 #error "Please #include <img4/firmware.h> instead of this file directly" 12 #endif // __IMG4_INDIRECT 13 14 __BEGIN_DECLS 15 OS_ASSUME_NONNULL_BEGIN 16 OS_ASSUME_PTR_ABI_SINGLE_BEGIN 17 18 /*! 19 * @function img4_get_manifest 20 * Returns a buffer representing the Image4 manifest bytes within the given DER 21 * blob. 22 * 23 * @param buff 24 * The buffer to examine for the Image4 manifest. 25 * 26 * @param len 27 * The length of {@link buff}. 28 * 29 * @param buff_storage 30 * Upon successful return, a buffer object which will contain a pointer to and 31 * the length of the Image4 manifest. 32 * 33 * @result 34 * Upon success, {@link buff_storage} is returned. If the DER blob contains no 35 * Image4 manifest, then NULL is returned. 36 */ 37 #if !XNU_KERNEL_PRIVATE 38 IMG4_API_AVAILABLE_20211105 39 OS_EXPORT OS_WARN_RESULT OS_NONNULL1 OS_NONNULL3 40 const img4_buff_t * 41 img4_get_manifest(const void *__sized_by(len) buff, size_t len, 42 img4_buff_t *buff_storage); 43 #else 44 #define img4_get_manifest(...) \ 45 (img4if->i4if_v15.get_manifest(__VA_ARGS__)) 46 #endif 47 48 /*! 49 * @function img4_get_payload 50 * Returns a buffer representing the Image4 payload bytes within the given DER 51 * blob. 52 * 53 * @param buff 54 * The buffer to examine for the Image4 payload. 55 * 56 * @param len 57 * The length of {@link buff}. 58 * 59 * @param buff_storage 60 * Upon successful return, a buffer object which will contain a pointer to and 61 * the length of the Image4 manifest. 62 * 63 * @result 64 * Upon success, {@link buff_storage} is returned. If the DER blob contains no 65 * Image4 payload, then NULL is returned. 66 */ 67 #if !XNU_KERNEL_PRIVATE 68 IMG4_API_AVAILABLE_20211105 69 OS_EXPORT OS_WARN_RESULT OS_NONNULL1 OS_NONNULL3 70 const img4_buff_t * 71 img4_get_payload(const void *__sized_by(len) buff, size_t len, 72 img4_buff_t *buff_storage); 73 #else 74 #define img4_get_payload(...) \ 75 (img4if->i4if_v15.get_payload(__VA_ARGS__)) 76 #endif 77 78 OS_ASSUME_PTR_ABI_SINGLE_END 79 OS_ASSUME_NONNULL_END 80 __END_DECLS 81 82 #endif // __IMG4_4XNU_H 83