blob: 676152d699ef986a001fc89883364f0e36c14fe8 [file] [log] [blame]
/*
* Copyright (c) 2018-2022 mcumgr authors
* Copyright (c) 2022 Laird Connectivity
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_
#define H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_
#include <zephyr/kernel.h>
#include <zephyr/fs/fs.h>
#ifdef __cplusplus
extern "C" {
#endif
/** @typedef fs_mgmt_hash_checksum_handler_fn
* @brief Function that gets called to generate a hash or checksum.
*
* @param file Opened file context
* @param output Output buffer for hash/checksum
* @param out_len Updated with size of input data
* @param len Maximum length of data to perform hash/checksum on
*
* @return 0 on success, negative error code on failure.
*/
typedef int (*fs_mgmt_hash_checksum_handler_fn)(struct fs_file_t *file, uint8_t *output,
size_t *out_len, size_t len);
/**
* @brief A collection of handlers for an entire hash/checksum group.
*/
struct fs_mgmt_hash_checksum_group {
/** Entry list node. */
sys_snode_t node;
/** Array of handlers; one entry per name. */
const char *group_name;
/** Byte string or numerical output. */
bool byte_string;
/** Size (in bytes) of output. */
uint8_t output_size;
/** Hash/checksum function pointer. */
fs_mgmt_hash_checksum_handler_fn function;
};
/** @typedef fs_mgmt_hash_checksum_list_cb
* @brief Function that gets called with hash/checksum details
*
* @param group Details about a supported hash/checksum
* @param user_data User-supplied value to calling function
*/
typedef void (*fs_mgmt_hash_checksum_list_cb)(const struct fs_mgmt_hash_checksum_group *group,
void *user_data);
/**
* @brief Registers a full hash/checksum group.
*
* @param group The group to register.
*/
void fs_mgmt_hash_checksum_register_group(struct fs_mgmt_hash_checksum_group *group);
/**
* @brief Unregisters a full hash/checksum group.
*
* @param group The group to register.
*/
void fs_mgmt_hash_checksum_unregister_group(struct fs_mgmt_hash_checksum_group *group);
/**
* @brief Finds a registered hash/checksum handler.
*
* @param name The name of the hash/checksum group to find.
*
* @return The requested hash/checksum handler on success;
* NULL on failure.
*/
const struct fs_mgmt_hash_checksum_group *fs_mgmt_hash_checksum_find_handler(const char *name);
/**
* @brief Runs a callback with all supported hash/checksum types.
*
* @param cb The callback function to call with each hash/checksum type.
* @param user_data Data to pass back with the callback function.
*/
void fs_mgmt_hash_checksum_find_handlers(fs_mgmt_hash_checksum_list_cb cb, void *user_data);
#ifdef __cplusplus
}
#endif
#endif /* ifndef H_MGMT_MCUMGR_GRP_FS_MGMT_CHKSUM_ */