1 /* 2 * Copyright (c) 2018-2022 mcumgr authors 3 * Copyright (c) 2022 Laird Connectivity 4 * Copyright (c) 2022 Nordic Semiconductor ASA 5 * 6 * SPDX-License-Identifier: Apache-2.0 7 */ 8 9 #ifndef H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ 10 #define H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ 11 12 #include <zephyr/kernel.h> 13 #include <zephyr/fs/fs.h> 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 /** @typedef fs_mgmt_hash_checksum_handler_fn 20 * @brief Function that gets called to generate a hash or checksum. 21 * 22 * @param file Opened file context 23 * @param output Output buffer for hash/checksum 24 * @param out_len Updated with size of input data 25 * @param len Maximum length of data to perform hash/checksum on 26 * 27 * @return 0 on success, negative error code on failure. 28 */ 29 typedef int (*fs_mgmt_hash_checksum_handler_fn)(struct fs_file_t *file, uint8_t *output, 30 size_t *out_len, size_t len); 31 32 /** 33 * @brief A collection of handlers for an entire hash/checksum group. 34 */ 35 struct fs_mgmt_hash_checksum_group { 36 /** Entry list node. */ 37 sys_snode_t node; 38 39 /** Array of handlers; one entry per name. */ 40 const char *group_name; 41 42 /** Byte string or numerical output. */ 43 bool byte_string; 44 45 /** Size (in bytes) of output. */ 46 uint8_t output_size; 47 48 /** Hash/checksum function pointer. */ 49 fs_mgmt_hash_checksum_handler_fn function; 50 }; 51 52 /** @typedef fs_mgmt_hash_checksum_list_cb 53 * @brief Function that gets called with hash/checksum details 54 * 55 * @param group Details about a supported hash/checksum 56 * @param user_data User-supplied value to calling function 57 */ 58 typedef void (*fs_mgmt_hash_checksum_list_cb)(const struct fs_mgmt_hash_checksum_group *group, 59 void *user_data); 60 61 /** 62 * @brief Registers a full hash/checksum group. 63 * 64 * @param group The group to register. 65 */ 66 void fs_mgmt_hash_checksum_register_group(struct fs_mgmt_hash_checksum_group *group); 67 68 /** 69 * @brief Unregisters a full hash/checksum group. 70 * 71 * @param group The group to register. 72 */ 73 void fs_mgmt_hash_checksum_unregister_group(struct fs_mgmt_hash_checksum_group *group); 74 75 /** 76 * @brief Finds a registered hash/checksum handler. 77 * 78 * @param name The name of the hash/checksum group to find. 79 * 80 * @return The requested hash/checksum handler on success; 81 * NULL on failure. 82 */ 83 const struct fs_mgmt_hash_checksum_group *fs_mgmt_hash_checksum_find_handler(const char *name); 84 85 /** 86 * @brief Runs a callback with all supported hash/checksum types. 87 * 88 * @param cb The callback function to call with each hash/checksum type. 89 * @param user_data Data to pass back with the callback function. 90 */ 91 void fs_mgmt_hash_checksum_find_handlers(fs_mgmt_hash_checksum_list_cb cb, void *user_data); 92 93 #ifdef __cplusplus 94 } 95 #endif 96 97 #endif /* ifndef H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ */ 98