24
24
#include " absl/strings/string_view.h"
25
25
#include " com/centreon/broker/config/applier/state.hh"
26
26
27
- #include < openssl/md5 .h>
27
+ #include < openssl/evp .h>
28
28
#include < cstdlib>
29
29
#include < cstring>
30
30
#include < iomanip>
@@ -810,6 +810,34 @@ static int l_broker_stat(lua_State* L) {
810
810
}
811
811
}
812
812
813
+ static void md5_message (const unsigned char * message,
814
+ size_t message_len,
815
+ unsigned char ** digest,
816
+ unsigned int * digest_len) {
817
+ EVP_MD_CTX* mdctx;
818
+ auto handle_error = [](const std::string& msg) {
819
+ auto logger = log_v2::instance ().get (log_v2::LUA);
820
+ logger->error (msg);
821
+ };
822
+ if ((mdctx = EVP_MD_CTX_new ()) == nullptr ) {
823
+ handle_error (" lua: fail to call MD5 (EVP_MD_CTX_new call)" );
824
+ }
825
+ if (1 != EVP_DigestInit_ex (mdctx, EVP_md5 (), nullptr )) {
826
+ handle_error (" lua: fail to call MD5 (EVP_DigestInit_ex call)" );
827
+ }
828
+ if (1 != EVP_DigestUpdate (mdctx, message, message_len)) {
829
+ handle_error (" lua: fail to call MD5 (EVP_DigestUpdate call)" );
830
+ }
831
+ if ((*digest = (unsigned char *)OPENSSL_malloc (EVP_MD_size (EVP_md5 ()))) ==
832
+ nullptr ) {
833
+ handle_error (" lua: fail to call MD5 (OPENSSL_malloc call)" );
834
+ }
835
+ if (1 != EVP_DigestFinal_ex (mdctx, *digest, digest_len)) {
836
+ handle_error (" lua: fail to call MD5 (EVP_DigestFinal_ex call)" );
837
+ }
838
+ EVP_MD_CTX_free (mdctx);
839
+ }
840
+
813
841
static int l_broker_md5 (lua_State* L) {
814
842
auto digit = [](unsigned char d) -> char {
815
843
if (d < 10 )
@@ -820,11 +848,12 @@ static int l_broker_md5(lua_State* L) {
820
848
size_t len;
821
849
const unsigned char * str =
822
850
reinterpret_cast <const unsigned char *>(lua_tolstring (L, -1 , &len));
823
- unsigned char md5[MD5_DIGEST_LENGTH];
824
- MD5 (str, len, md5);
825
- char result[2 * MD5_DIGEST_LENGTH + 1 ];
851
+ unsigned char * md5;
852
+ uint32_t md5_len;
853
+ md5_message (str, len, &md5, &md5_len);
854
+ char result[2 * md5_len + 1 ];
826
855
char * tmp = result;
827
- for (int i = 0 ; i < MD5_DIGEST_LENGTH ; i++) {
856
+ for (uint32_t i = 0 ; i < md5_len ; i++) {
828
857
*tmp = digit (md5[i] >> 4 );
829
858
++tmp;
830
859
*tmp = digit (md5[i] & 0xf );
0 commit comments