diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/entropy.c | 12 | ||||
-rw-r--r-- | src/common/entropy.h | 5 |
2 files changed, 13 insertions, 4 deletions
diff --git a/src/common/entropy.c b/src/common/entropy.c index 1f3adfa..8dae698 100644 --- a/src/common/entropy.c +++ b/src/common/entropy.c @@ -33,6 +33,7 @@ * * * Paramètres : data = séquence d'octets à traiter. * * len = quantité de ces octets. * +* bits = calcul en concidérant les bits et non les octets ? * * * * Description : Détermine l'entropie d'un contenu binaire. * * * @@ -42,13 +43,13 @@ * * ******************************************************************************/ -double compute_entropy(const bin_t *data, size_t len) +double compute_entropy(const bin_t *data, size_t len, bool bits) { double result; /* Valeur calculée à renvoyer */ unsigned long counters[256]; /* Décompte des valeurs */ const bin_t *d_max; /* Borne de fin de parcours #1 */ const bin_t *d_iter; /* Boucle de parcours #1 */ - double log_2; + double log_2; /* Valeur constante de log2 */ unsigned long *c_max; /* Borne de fin de parcours #2 */ unsigned long *c_iter; /* Boucle de parcours #2 */ double freq; /* Fréquence liée à une valeur */ @@ -62,7 +63,12 @@ double compute_entropy(const bin_t *data, size_t len) for (d_iter = data; d_iter < d_max; d_iter++) counters[*d_iter]++; - log_2 = log(256.0); + /** + * Explication du choix de log : + * https://stackoverflow.com/questions/990477/how-to-calculate-the-entropy-of-a-file/990646#990646 + */ + + log_2 = log(bits ? 2.0 : 256.0); c_max = counters + 256; diff --git a/src/common/entropy.h b/src/common/entropy.h index f747149..b677a77 100644 --- a/src/common/entropy.h +++ b/src/common/entropy.h @@ -25,12 +25,15 @@ #define _COMMON_ENTROPY_H +#include <stdbool.h> + + #include "../arch/archbase.h" /* Détermine l'entropie d'un contenu binaire. */ -double compute_entropy(const bin_t *, size_t); +double compute_entropy(const bin_t *, size_t, bool); |