--- rpl/src/chiffrement.c 2024/01/17 16:57:09 1.41 +++ rpl/src/chiffrement.c 2024/07/04 06:08:22 1.42 @@ -19,9 +19,9 @@ ================================================================================ */ - +#define DEBUG_RETURN #include "rpl-conv.h" - +#include /* ================================================================================ @@ -47,6 +47,8 @@ chiffrement(struct_processus *s_etat_pro int longueur_message_1; int longueur_message_2; + integer8 nombre_blocs; + unsigned char *message_chiffre; EVP_CIPHER_CTX *contexte; @@ -67,10 +69,19 @@ chiffrement(struct_processus *s_etat_pro return(NULL); } - (*longueur_message_chiffre) = ((longueur_message / - longueur_bloc_de_chiffrement) + 1) * longueur_bloc_de_chiffrement; + nombre_blocs = longueur_message / longueur_bloc_de_chiffrement; + + if ((longueur_message % longueur_bloc_de_chiffrement) != 0) + { + nombre_blocs++; + } + + (*longueur_message_chiffre) = nombre_blocs * longueur_bloc_de_chiffrement; - if ((message_chiffre = malloc(((size_t) (*longueur_message_chiffre)) * + // On prévoit une zone de garde pour EVP_CipherFinal_ex() en espérant + // qu'il ne faille pas plus qu'une longueur de bloc de chiffrement. + if ((message_chiffre = malloc(((size_t) ((*longueur_message_chiffre) + + longueur_bloc_de_chiffrement)) * sizeof(unsigned char))) == NULL) { EVP_CIPHER_CTX_free(contexte);