+/*
+ * Function prototypes for kexts to interface with our internal cprotect
+ * fields; cpx provides opacity and allows us to modify behavior internally
+ * without requiring kext changes.
+ */
+cpx_t cpx_alloc(size_t key_size, bool needs_ctx);
+int cpx_alloc_ctx(cpx_t cpx);
+void cpx_free_ctx(cpx_t cpx);
+void cpx_init(cpx_t, size_t key_len);
+void cpx_init_ctx_ptr(cpx_t cpx);
+void cpx_free(cpx_t);
+void cpx_writeprotect(cpx_t cpx);
+__attribute__((const)) size_t cpx_size(size_t key_len);
+__attribute__((pure)) bool cpx_is_sep_wrapped_key(const struct cpx *);
+void cpx_set_is_sep_wrapped_key(struct cpx *, bool);
+__attribute__((pure)) bool cpx_is_composite_key(const struct cpx *);
+void cpx_set_is_composite_key(struct cpx *, bool);
+__attribute__((pure)) bool cpx_use_offset_for_iv(const struct cpx *);
+void cpx_set_use_offset_for_iv(struct cpx *, bool);
+__attribute__((pure)) bool cpx_synthetic_offset_for_iv(const struct cpx *);
+void cpx_set_synthetic_offset_for_iv(struct cpx *, bool);
+__attribute__((pure)) uint16_t cpx_key_len(const struct cpx *);
+void cpx_set_key_len(struct cpx *, uint16_t key_len);
+__attribute__((pure)) void *cpx_key(const struct cpx *);
+aes_encrypt_ctx *cpx_iv_aes_ctx(struct cpx *);
+void cpx_flush(cpx_t cpx);
+bool cpx_can_copy(const struct cpx *src, const struct cpx *dst);
+void cpx_copy(const struct cpx *src, cpx_t dst);
+uint16_t cpx_max_key_len(const struct cpx *cpx);
+bool cpx_has_key(const struct cpx *cpx);
+size_t cpx_sizex(const struct cpx *cpx);
+void cpx_set_aes_iv_key(struct cpx *cpx, void *iv_key);
+
+int cp_key_store_action(cp_key_store_action_t);
+int cp_key_store_action_for_volume(uuid_t volume_uuid, cp_key_store_action_t action);
+cp_key_os_version_t cp_os_version(void);
+// Should be cp_key_class_t but HFS has a conflicting definition
+int cp_is_valid_class(int isdir, int32_t protectionclass);
+
+__END_DECLS
+
+#endif /* KERNEL_PRIVATE */