| 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 | |