labfy-investigation/include/core/file_hash.h
2026-07-19 13:48:35 +02:00

99 lines
2.5 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
* @file file_hash.h
* @brief Calcul des empreintes cryptographiques des fichiers de preuve.
******************************************************************************/
#ifndef LABFY_INVESTIGATION_FILE_HASH_H
#define LABFY_INVESTIGATION_FILE_HASH_H
#include <gio/gio.h>
#include <glib.h>
/**
* @brief Catégories derreurs du module FileHash.
*/
typedef enum
{
FILE_HASH_ERROR_INVALID_ARGUMENT,
FILE_HASH_ERROR_NOT_FOUND,
FILE_HASH_ERROR_NOT_REGULAR,
FILE_HASH_ERROR_OPEN,
FILE_HASH_ERROR_READ,
FILE_HASH_ERROR_CANCELLED,
FILE_HASH_ERROR_MEMORY
} FileHashError;
/**
* @brief Domaine derreurs du module FileHash.
*/
#define FILE_HASH_ERROR \
file_hash_error_quark()
/**
* @brief Retourne le domaine derreurs du module FileHash.
*/
GQuark file_hash_error_quark(void);
/**
* @brief Calcule le SHA-256 et la taille dun fichier régulier.
*
* Le fichier est lu progressivement et nest jamais chargé intégralement
* en mémoire.
*
* Le chemin final ne doit pas être un lien symbolique.
*
* Avant lappel :
*
* - out_sha256 doit être valide ;
* - *out_sha256 doit valoir NULL ;
* - out_size_bytes doit être valide ;
* - error doit être NULL ou pointer vers NULL.
*
* Après un succès :
*
* - *out_sha256 contient une chaîne de 64 caractères hexadécimaux
* minuscules, à libérer avec g_free() ;
* - *out_size_bytes contient le nombre doctets effectivement lus.
*
* Après un échec :
*
* - *out_sha256 reste NULL ;
* - *out_size_bytes vaut 0.
*
* @param file_path Chemin du fichier à analyser.
* @param cancellable Objet dannulation facultatif.
* @param out_sha256 Destination de la chaîne SHA-256.
* @param out_size_bytes Destination de la taille du fichier.
* @param error Adresse recevant une éventuelle erreur.
*
* @return TRUE en cas de succès, sinon FALSE.
*/
gboolean file_hash_compute_sha256(
const char *file_path,
GCancellable *cancellable,
char **out_sha256,
guint64 *out_size_bytes,
GError **error
);
#ifdef FILE_HASH_ENABLE_TEST_HOOKS
/**
* @brief Crochet appelé après chaque bloc lu, réservé aux tests.
*/
typedef void (*FileHashTestBlockHook)(
guint64 total_size_bytes,
gpointer user_data
);
/**
* @brief Configure le crochet de lecture réservé aux tests.
*/
void file_hash_test_set_block_hook(
FileHashTestBlockHook block_hook,
gpointer user_data
);
#endif
#endif