diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/Makefile.am | 3 | ||||
-rw-r--r-- | src/core/core.c | 5 | ||||
-rw-r--r-- | src/core/global.c | 46 | ||||
-rw-r--r-- | src/core/global.h | 7 | ||||
-rw-r--r-- | src/core/secstorage.c | 779 | ||||
-rw-r--r-- | src/core/secstorage.h | 65 |
6 files changed, 56 insertions, 849 deletions
diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 906c383..17fd2bf 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -20,8 +20,7 @@ libcore4_la_SOURCES = \ logs.h logs.c \ nox.h nox.c \ nproc.h nproc.c \ - paths.h paths.c \ - secstorage.h secstorage.c + paths.h paths.c libcore4_la_CFLAGS = $(TOOLKIT_CFLAGS) $(LIBSSL_CFLAGS) diff --git a/src/core/core.c b/src/core/core.c index eaf7763..8fe12f5 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -25,7 +25,6 @@ #include "global.h" -#include "secstorage.h" @@ -54,7 +53,7 @@ bool load_core_components(AvailableCoreComponent flags) if ((flags & ACC_GLOBAL_VARS) != 0 && (__loaded & ACC_GLOBAL_VARS) == 0) { - init_secret_storage(); + set_secret_storage(g_secret_storage_new(NULL)); set_work_queue(g_work_queue_new()); @@ -85,7 +84,7 @@ void unload_core_components(AvailableCoreComponent flags) { set_work_queue(NULL); - exit_secret_storage(); + set_secret_storage(NULL); __loaded &= ~ACC_GLOBAL_VARS; diff --git a/src/core/global.c b/src/core/global.c index d38656b..0275e09 100644 --- a/src/core/global.c +++ b/src/core/global.c @@ -36,6 +36,9 @@ static size_t _bytes_sent = 0; /* Gestionnaire de tâches parallèles */ static GWorkQueue *_queue = NULL; +/* Gardien des secrets avec support des stockages */ +static GSecretStorage *_storage = NULL; + /****************************************************************************** @@ -131,6 +134,49 @@ GWorkQueue *get_work_queue(void) } +/****************************************************************************** +* * +* Paramètres : queue = nouveau stockage sécurisé à mémoriser ou NULL. * +* * +* Description : Définit le stockage sécurisé principal. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void set_secret_storage(/* __steal */GSecretStorage *storage) +{ + if (_storage != NULL) + unref_object(_storage); + + _storage = storage; + +} + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Fournit le stockage sécurisé principal. * +* * +* Retour : Gestionnaire de traitements parallèles courant. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GSecretStorage *get_secret_storage(void) +{ + ref_object(_storage); + + return _storage; + +} + + diff --git a/src/core/global.h b/src/core/global.h index b861ad8..f5d8a62 100644 --- a/src/core/global.h +++ b/src/core/global.h @@ -25,6 +25,7 @@ #define _CORE_GLOBAL_H +#include "../glibext/secstorage.h" #include "../glibext/workqueue.h" @@ -41,6 +42,12 @@ void set_work_queue(/* __steal */GWorkQueue *); /* Fournit le gestionnaire de traitements parallèles courant. */ GWorkQueue *get_work_queue(void); +/* Définit le stockage sécurisé principal. */ +void set_secret_storage(/* __steal */GSecretStorage *); + +/* Fournit le stockage sécurisé principal. */ +GSecretStorage *get_secret_storage(void); + diff --git a/src/core/secstorage.c b/src/core/secstorage.c deleted file mode 100644 index 7f57b1c..0000000 --- a/src/core/secstorage.c +++ /dev/null @@ -1,779 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * secstorage.c - conservation sécurisée d'éléments de configuration - * - * Copyright (C) 2025 Cyrille Bagard - * - * This file is part of Chrysalide. - * - * Chrysalide is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Chrysalide is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "secstorage.h" - - -#include <assert.h> -#include <string.h> -#include <openssl/evp.h> -#include <openssl/rand.h> - - -#include "../core/logs.h" -#include "../glibext/helpers.h" - - - -/** - * Les mécanismes de hachage de mot de passe doivent être utilisés avec un sel, - * et la longueur du sel doit être d’au moins 128 bits. - * - * Cette note concerne le hachage de mots de passe et non la dérivation de secrets - * cependant. - * - * Source : https://cyber.gouv.fr/sites/default/files/2021/03/anssi-guide-selection_crypto-1.0.pdf - */ - -#define SECRET_STORAGE_SALT_SIZE (256 / 8) - - -/** - * Nombre d'itérations pour PBKDF2 : en 2023, OWASP recommande 600000 itérations - * pour PBKDF2-HMAC-SHA256 (et 210000 pour PBKDF2-HMAC-SHA512). - * - * Source : https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html#pbkdf2 - */ - -#define PBKDF2_HMAC_SHA256_ITERATIONS (2 << 20) - - -/** - * AES 256 : clef de 256 bits, IV de 128 bits - */ - -#define SECRET_STORAGE_KEK_SIZE (256 / 8) - -#define SECRET_STORAGE_KEY_SIZE (256 / 8) - -#define SECRET_STORAGE_BLOCK_SIZE (128 / 8) - -#define SECRET_STORAGE_IV_SIZE SECRET_STORAGE_BLOCK_SIZE - - -/* Conservation des clefs de déchiffrement maîtres par configuration. */ -static GHashTable *__unlocked_keys = NULL; - - -/* Fournit l'espace de configuration réel à manipuler. */ -static GSettings *get_secret_storage_settings(GSettings *); - - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Initialise le stockage des clefs de déchiffrement en place. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void init_secret_storage(void) -{ - __unlocked_keys = g_hash_table_new_full(g_direct_hash, g_direct_equal, g_object_unref, free); - -} - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Supprime le stockage des clefs de déchiffrement en place. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void exit_secret_storage(void) -{ - assert(__unlocked_keys != NULL); - - g_hash_table_remove_all(__unlocked_keys); - g_hash_table_unref(__unlocked_keys); - - __unlocked_keys = NULL; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* * -* Description : Fournit l'espace de configuration réel à manipuler. * -* * -* Retour : Instance de travail à employer avant libération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static GSettings *get_secret_storage_settings(GSettings *settings) -{ - GSettings *result; /* Instance à retourner */ - - - if (settings != NULL) - { - ref_object(settings); - result = settings; - } - else - result = NULL; // TODO - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* * -* Description : Détermine si une clef de chiffrement protégée est en place. * -* * -* Retour : Bilan de l'analyse. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool has_secret_storage_key(GSettings *settings) -{ - bool result; /* Bilan à retourner */ - GVariant *value; /* Valeur de configuration */ - gsize length; /* Taille d'une valeur donnée */ - - result = false; - - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - value = g_settings_get_value(settings, "master"); - - g_variant_get_fixed_array(value, &length, 1); - - result = (length > SECRET_STORAGE_IV_SIZE); - - g_variant_unref(value); - - unref_object(settings); - - return result;; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* password = mot de passe principal à appliquer. * -* * -* Description : Définit un mot de passe pour protéger une clef maître. * -* * -* Retour : Bilan de la mise en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool set_secret_storage_password(GSettings *settings, const char *passwd) -{ - bool result; /* Bilan à retourner */ - unsigned char salt[SECRET_STORAGE_SALT_SIZE]; /* Sel pour la dérivation*/ - int ret; /* Bilan à d'un appel */ - GVariant *value; /* Valeur de configuration */ - unsigned char kek[SECRET_STORAGE_KEK_SIZE]; /* Clef de protection */ - unsigned char key[SECRET_STORAGE_KEY_SIZE]; /* Clef maître */ - unsigned char iv[SECRET_STORAGE_IV_SIZE]; /* IV associé */ - EVP_CIPHER_CTX *ctx; /* Contexte pour le chiffrement*/ - unsigned char encrypted[64]; /* Partie chiffrée à conserver */ - unsigned char *iter; /* Tête d'écriture */ - int outlen; /* Taille des données utiles */ - - result = false; - - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - if (has_secret_storage_key(settings)) - goto exit; - - /* Création d'un sel pour la dérivation du mot de passe */ - - ret = RAND_bytes(salt, sizeof(salt)); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - /** - * La fonction g_variant_new_fixed_array() retourne un variant - * avec un décompte de référence flottant. - */ - - value = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - salt, SECRET_STORAGE_SALT_SIZE, sizeof(unsigned char)); - - /** - * Comme le variant à une référence flottante, la fonction - * g_settings_set_value() consomme cette référence. - * - * Il n'y a donc pas lieu d'appeler g_variant_unref(). - */ - - g_settings_set_value(settings, "salt", value); - - /* Dérivation du mot de passe */ - - ret = PKCS5_PBKDF2_HMAC(passwd, strlen(passwd), - salt, SECRET_STORAGE_SALT_SIZE, - PBKDF2_HMAC_SHA256_ITERATIONS, EVP_sha256(), - SECRET_STORAGE_KEK_SIZE, kek); - - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - /* Définition de la clef maître et de son IV de chiffrement */ - - ret = RAND_bytes(key, sizeof(key)); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - ret = RAND_bytes(iv, sizeof(iv)); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - /* Chiffrement de la clef maître */ - - ctx = EVP_CIPHER_CTX_new(); - - if (ctx == NULL) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); - - ret = EVP_EncryptInit_ex2(ctx, EVP_aes_256_wrap_pad(), kek, iv, NULL); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - memcpy(encrypted, iv, SECRET_STORAGE_IV_SIZE); - - iter = encrypted + SECRET_STORAGE_IV_SIZE; - - ret = EVP_EncryptUpdate(ctx, iter, &outlen, key, SECRET_STORAGE_KEY_SIZE); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - ret = EVP_EncryptFinal_ex(ctx, iter, &outlen); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - assert((iter - encrypted) < 64); - - /* Conservation de la clef protégée */ - - value = g_variant_new_fixed_array(G_VARIANT_TYPE_BYTE, - encrypted, iter - encrypted, sizeof(unsigned char)); - - g_settings_set_value(settings, "master", value); - - result = true; - - exit_with_ctx: - - EVP_CIPHER_CTX_free(ctx); - - exit: - - unref_object(settings); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* * -* Description : Détermine si la clef de chiffrement maître est vérouillée. * -* * -* Retour : Bilan de la détermination. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool is_secret_storage_locked(GSettings *settings) -{ - bool result; /* Bilan à retourner */ - - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - result = (g_hash_table_lookup(__unlocked_keys, settings) == NULL); - - unref_object(settings); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* password = mot de passe principal à utiliser. * -* * -* Description : Déverrouille la clef de chiffrement maître. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool unlock_secret_storage(GSettings *settings, const char *passwd) -{ - bool result; /* Bilan à retourner */ - GVariant *salt_value; /* Valeur du sel configuré */ - gsize salt_length; /* Taille du sel conservé */ - gconstpointer salt; /* Données associées #1 */ - unsigned char kek[SECRET_STORAGE_KEK_SIZE]; /* Clef de protection */ - int ret; /* Bilan à d'un appel */ - GVariant *enc_value; /* Paramètres de chiffrement */ - gsize enc_length; /* Taille de ces paramètrs */ - gconstpointer encrypted; /* Données associées #2 */ - EVP_CIPHER_CTX *ctx; /* Contexte de déchiffrement */ - unsigned char iv[SECRET_STORAGE_IV_SIZE]; /* IV associé */ - unsigned char key[SECRET_STORAGE_KEY_SIZE]; /* Clef maître */ - unsigned char *iter; /* Tête d'écriture */ - int outlen; /* Taille des données utiles */ - void *unlocked; /* Zone de conservation */ -#ifndef NDEBUG - gboolean new; /* Validation de la création */ -#endif - - result = false; - - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - if (!is_secret_storage_locked(settings)) - { - result = true; - goto quick_exit; - } - - /* Récupération du sel mis en place */ - - salt_value = g_settings_get_value(settings, "salt"); - - salt = g_variant_get_fixed_array(salt_value, &salt_length, sizeof(bin_t)); - - if (salt_length != SECRET_STORAGE_SALT_SIZE) - goto exit_with_salt; - - /* Dérivation du mot de passe */ - - ret = PKCS5_PBKDF2_HMAC(passwd, strlen(passwd), - salt, SECRET_STORAGE_SALT_SIZE, - PBKDF2_HMAC_SHA256_ITERATIONS, EVP_sha256(), - SECRET_STORAGE_KEK_SIZE, kek); - - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_salt; - } - - /* Récupération des paramètres chiffrés */ - - enc_value = g_settings_get_value(settings, "master"); - - encrypted = g_variant_get_fixed_array(enc_value, &enc_length, sizeof(bin_t)); - - if (enc_length <= SECRET_STORAGE_IV_SIZE) - goto exit_with_enc; - - /* Déhiffrement de la clef maître */ - - ctx = EVP_CIPHER_CTX_new(); - - if (ctx == NULL) - { - LOG_ERROR_OPENSSL; - goto exit_with_enc; - } - - EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); - - memcpy(iv, encrypted, SECRET_STORAGE_IV_SIZE); - - ret = EVP_DecryptInit_ex2(ctx, EVP_aes_256_wrap_pad(), kek, iv, NULL); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter = key; - - ret = EVP_DecryptUpdate(ctx, iter, &outlen, - ((unsigned char *)encrypted) + SECRET_STORAGE_IV_SIZE, - enc_length - SECRET_STORAGE_IV_SIZE); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - ret = EVP_DecryptFinal_ex(ctx, iter, &outlen); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - assert((iter - key) == SECRET_STORAGE_KEY_SIZE); - - /* Stockage de la clef maître en mémoire */ - - ref_object(settings); - - unlocked = malloc(SECRET_STORAGE_KEY_SIZE); - memcpy(unlocked, key, SECRET_STORAGE_KEY_SIZE); - -#ifndef NDEBUG - new = g_hash_table_replace(__unlocked_keys, settings, unlocked); - assert(new); -#else - g_hash_table_replace(__unlocked_keys, settings, unlocked); -#endif - - result = true; - - /* Sortie */ - - exit_with_ctx: - - EVP_CIPHER_CTX_free(ctx); - - exit_with_enc: - - g_variant_unref(enc_value); - - exit_with_salt: - - g_variant_unref(salt_value); - - quick_exit: - - unref_object(settings); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* * -* Description : Verrouille la clef de chiffrement maître. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void lock_secret_storage(GSettings *settings) -{ - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - g_hash_table_remove(__unlocked_keys, settings); - - unref_object(settings); - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* in = séquence d'octets à traiter. * -* out = séquence d'octets résultantes. [OUT] * -* * -* Description : Chiffre des données avec la clef de chiffrement maître. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool encrypt_secret_storage_data(GSettings *settings, const sized_binary_t *in, sized_binary_t *out) -{ - bool result; /* Bilan à retourner */ - gpointer key; /* Clef de chiffrement */ - unsigned char iv[SECRET_STORAGE_IV_SIZE]; /* IV associé */ - int ret; /* Bilan à d'un appel */ - EVP_CIPHER_CTX *ctx; /* Contexte pour le chiffrement*/ - size_t needed; /* Taille de la sortie */ - unsigned char *iter; /* Tête d'écriture */ - int outlen; /* Taille des données utiles */ - - result = false; - - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - if (is_secret_storage_locked(settings)) - goto quick_exit; - - /* Récupération de la clef maître et d'un IV de chiffrement */ - - key = g_hash_table_lookup(__unlocked_keys, settings); - - ret = RAND_bytes(iv, sizeof(iv)); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - /* Préparation de la zone de réception */ - - needed = SECRET_STORAGE_IV_SIZE + ((in->size / SECRET_STORAGE_BLOCK_SIZE) + 1) * SECRET_STORAGE_BLOCK_SIZE; - - setup_sized_binary(out, needed); - - /* Chiffrement des données */ - - ctx = EVP_CIPHER_CTX_new(); - - if (ctx == NULL) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - ret = EVP_EncryptInit_ex2(ctx, EVP_aes_256_cbc(), key, iv, NULL); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - memcpy(out->data, iv, SECRET_STORAGE_IV_SIZE); - - iter = out->bin_data + SECRET_STORAGE_IV_SIZE; - - ret = EVP_EncryptUpdate(ctx, iter, &outlen, in->bin_data, in->size); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - ret = EVP_EncryptFinal_ex(ctx, iter, &outlen); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - assert((iter - out->bin_data) == out->size); - - result = true; - - /* Sortie */ - - exit_with_ctx: - - EVP_CIPHER_CTX_free(ctx); - - if (!result) - exit_sized_binary(out); - - exit: - quick_exit: - - unref_object(settings); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : settings = éventuel espace de configuration à manipuler. * -* in = séquence d'octets à traiter. * -* out = séquence d'octets résultantes. [OUT] * -* * -* Description : Déchiffre des données avec la clef de chiffrement maître. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool decrypt_secret_storage_data(GSettings *settings, const sized_binary_t *in, sized_binary_t *out) -{ - bool result; /* Bilan à retourner */ - gpointer key; /* Clef de chiffrement */ - unsigned char iv[SECRET_STORAGE_IV_SIZE]; /* IV associé */ - int ret; /* Bilan à d'un appel */ - EVP_CIPHER_CTX *ctx; /* Contexte pour le chiffrement*/ - size_t needed; /* Taille de la sortie */ - unsigned char *iter; /* Tête d'écriture */ - int outlen; /* Taille des données utiles */ - - result = false; - - settings = get_secret_storage_settings(settings); - assert(settings != NULL); - - if (is_secret_storage_locked(settings)) - goto quick_exit; - - /* Récupération de la clef maître et d'un IV de chiffrement */ - - key = g_hash_table_lookup(__unlocked_keys, settings); - - if (in->size < SECRET_STORAGE_IV_SIZE) - goto exit; - - memcpy(iv, in->data, SECRET_STORAGE_IV_SIZE); - - /* Préparation de la zone de réception */ - - needed = in->size - SECRET_STORAGE_IV_SIZE; - - setup_sized_binary(out, needed); - - /* Chiffrement des données */ - - ctx = EVP_CIPHER_CTX_new(); - - if (ctx == NULL) - { - LOG_ERROR_OPENSSL; - goto exit; - } - - ret = EVP_DecryptInit_ex2(ctx, EVP_aes_256_cbc(), key, iv, NULL); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter = out->bin_data; - - ret = EVP_DecryptUpdate(ctx, iter, &outlen, - in->bin_data + SECRET_STORAGE_IV_SIZE, in->size - SECRET_STORAGE_IV_SIZE); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - ret = EVP_DecryptFinal_ex(ctx, iter, &outlen); - if (ret != 1) - { - LOG_ERROR_OPENSSL; - goto exit_with_ctx; - } - - iter += outlen; - - assert((iter - out->bin_data) <= out->size); - - resize_sized_binary(out, iter - out->bin_data); - - result = true; - - /* Sortie */ - - exit_with_ctx: - - EVP_CIPHER_CTX_free(ctx); - - if (!result) - exit_sized_binary(out); - - exit: - quick_exit: - - unref_object(settings); - - return result; - -} diff --git a/src/core/secstorage.h b/src/core/secstorage.h deleted file mode 100644 index 7c27e07..0000000 --- a/src/core/secstorage.h +++ /dev/null @@ -1,65 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * secstorage.h - prototypes pour la conservation sécurisée d'éléments de configuration - * - * Copyright (C) 2025 Cyrille Bagard - * - * This file is part of Chrysalide. - * - * Chrysalide is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Chrysalide is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. - */ - - -#ifndef _CORE_SECSTORAGE_H -#define _CORE_SECSTORAGE_H - - -#include <stdbool.h> -#include <gio/gio.h> - - -#include "../common/szbin.h" - - - -/* Initialise le stockage des clefs de déchiffrement en place. */ -void init_secret_storage(void); - -/* Supprime le stockage des clefs de déchiffrement en place. */ -void exit_secret_storage(void); - -/* Détermine si une clef de chiffrement protégée est en place. */ -bool has_secret_storage_key(GSettings *); - -/* Définit un mot de passe pour protéger une clef maître. */ -bool set_secret_storage_password(GSettings *, const char *); - -/* Détermine si la clef de chiffrement maître est vérouillée. */ -bool is_secret_storage_locked(GSettings *); - -/* Déverrouille la clef de chiffrement maître. */ -bool unlock_secret_storage(GSettings *, const char *); - -/* Verrouille la clef de chiffrement maître. */ -void lock_secret_storage(GSettings *); - -/* Chiffre des données avec la clef de chiffrement maître. */ -bool encrypt_secret_storage_data(GSettings *, const sized_binary_t *, sized_binary_t *); - -/* Déchiffre des données avec la clef de chiffrement maître. */ -bool decrypt_secret_storage_data(GSettings *, const sized_binary_t *, sized_binary_t *); - - - -#endif /* _CORE_SECSTORAGE_H */ |