diff options
Diffstat (limited to 'plugins/pychrysalide')
| -rw-r--r-- | plugins/pychrysalide/common/Makefile.am | 1 | ||||
| -rw-r--r-- | plugins/pychrysalide/common/entropy.c | 119 | ||||
| -rw-r--r-- | plugins/pychrysalide/common/entropy.h | 39 | ||||
| -rw-r--r-- | plugins/pychrysalide/common/module.c | 2 | ||||
| -rw-r--r-- | plugins/pychrysalide/common/xdg.c | 1 | 
5 files changed, 161 insertions, 1 deletions
| diff --git a/plugins/pychrysalide/common/Makefile.am b/plugins/pychrysalide/common/Makefile.am index cc87a82..43e1fc4 100644 --- a/plugins/pychrysalide/common/Makefile.am +++ b/plugins/pychrysalide/common/Makefile.am @@ -14,6 +14,7 @@ noinst_LTLIBRARIES = libpychrysacommon.la  libpychrysacommon_la_SOURCES =				\  	bits.h bits.c							\ +	entropy.h entropy.c						\  	module.h module.c						\  	xdg.h xdg.c diff --git a/plugins/pychrysalide/common/entropy.c b/plugins/pychrysalide/common/entropy.c new file mode 100644 index 0000000..2817747 --- /dev/null +++ b/plugins/pychrysalide/common/entropy.c @@ -0,0 +1,119 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * entropy.c - équivalent Python du fichier "common/entropy.c" + * + * Copyright (C) 2024 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 this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + + +#include "entropy.h" + + +#include <common/entropy.h> + + +#include "../access.h" +#include "../helpers.h" + + + +/* Détermine l'entropie d'un contenu binaire. */ +static PyObject *py_entropy_compute_entropy(PyObject *, PyObject *); + + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : self = NULL car méthode statique.                            * +*                args = arguments fournis lors de l'appel à la fonction.      * +*                                                                             * +*  Description : Détermine l'entropie d'un contenu binaire.                   * +*                                                                             * +*  Retour      : Valeur d'entropie du contenu fourni.                         * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static PyObject *py_entropy_compute_entropy(PyObject *self, PyObject *args) +{ +    PyObject *result;                       /* Instance à retourner        */ +    const bin_t *data;                      /* Données à traiter           */ +    int bits;                               /* Choix de référentiel        */ +    size_t len;                             /* Quantité de ces données     */ +    int ret;                                /* Bilan de lecture des args.  */ +    double entropy;                         /* Valeur d'entropie déterminée*/ + +#define COMPUTE_ENTROPY_METHOD PYTHON_METHOD_DEF        \ +(                                                       \ +    compute_entropy, "data, /, bits=False",             \ +    METH_VARARGS, py_entropy,                           \ +    "Compute the entropy of provided data.\n"           \ +    "\n"                                                \ +    "The *data* to process can be a string or bytes."   \ +    " The optional *bits* argument defines if the"      \ +    " computed value is expressed in bits (log base 2)" \ +    " or in bytes (log base 256).\n"                    \ +    "\n"                                                \ +    "The result is a float value."                      \ +) + +    bits = 0; + +    ret = PyArg_ParseTuple(args, "s#|p", &data, &len, &bits); +    if (!ret) return NULL; + +    entropy = compute_entropy((const bin_t *)data, len, bits); + +    result = PyFloat_FromDouble(entropy); + +    return result; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : -                                                            * +*                                                                             * +*  Description : Définit une extension du module 'common' à compléter.        * +*                                                                             * +*  Retour      : Bilan de l'opération.                                        * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +bool populate_common_module_with_entropy(void) +{ +    bool result;                            /* Bilan à retourner           */ +    PyObject *module;                       /* Module à recompléter        */ + +    static PyMethodDef py_entropy_methods[] = { +        COMPUTE_ENTROPY_METHOD, +        { NULL } +    }; + +    module = get_access_to_python_module("pychrysalide.common"); + +    result = register_python_module_methods(module, py_entropy_methods); + +    return result; + +} diff --git a/plugins/pychrysalide/common/entropy.h b/plugins/pychrysalide/common/entropy.h new file mode 100644 index 0000000..3fe5e28 --- /dev/null +++ b/plugins/pychrysalide/common/entropy.h @@ -0,0 +1,39 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * entropy.h - prototypes pour l'équivalent Python du fichier "common/entropy.c" + * + * Copyright (C) 2024 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 this program; if not, write to the Free Software + *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + */ + + +#ifndef _PLUGINS_PYCHRYSALIDE_COMMON_ENTROPY_H +#define _PLUGINS_PYCHRYSALIDE_COMMON_ENTROPY_H + + +#include <Python.h> +#include <stdbool.h> + + + +/*  Définit une extension du module 'common' à compléter. */ +bool populate_common_module_with_entropy(void); + + + +#endif  /* _PLUGINS_PYCHRYSALIDE_COMMON_ENTROPY_H */ diff --git a/plugins/pychrysalide/common/module.c b/plugins/pychrysalide/common/module.c index 7af12ba..fa2b4de 100644 --- a/plugins/pychrysalide/common/module.c +++ b/plugins/pychrysalide/common/module.c @@ -26,6 +26,7 @@  #include "bits.h" +#include "entropy.h"  //#include "fnv1a.h"  //#include "hex.h"  //#include "itoa.h" @@ -107,6 +108,7 @@ bool populate_common_module(void)      if (result) result = populate_common_module_with_pathname();      if (result) result = populate_common_module_with_pearson();      */ +    if (result) result = populate_common_module_with_entropy();      if (result) result = populate_common_module_with_xdg();      if (result) result = ensure_python_bitfield_is_registered(); diff --git a/plugins/pychrysalide/common/xdg.c b/plugins/pychrysalide/common/xdg.c index 789a0a6..e4b269e 100644 --- a/plugins/pychrysalide/common/xdg.c +++ b/plugins/pychrysalide/common/xdg.c @@ -26,7 +26,6 @@  #include <malloc.h> -#include <pygobject.h>  #include <common/xdg.h> | 
