Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ cppcheck:
--enable=warning,style,performance,portability,unusedFunction,missingInclude \
--inconclusive \
--template="warning: {file},{line},{severity},{id},{message}" \
-I headers -I . -I $(top_srcdir)/others -I $(top_srcdir)/src -I $(top_srcdir)/others/mbedtls/include \
-I headers -I . -I $(top_srcdir)/others -I $(top_srcdir)/src -I $(top_srcdir)/others/mbedtls/include -I $(top_srcdir)/others/mbedtls/tf-psa-crypto/include -I $(top_srcdir)/others/mbedtls/tf-psa-crypto/drivers/builtin/include \
--error-exitcode=1 \
-i "src/parser/seclang-parser.cc" -i "src/parser/seclang-scanner.cc" \
-i others \
Expand Down Expand Up @@ -99,4 +99,3 @@ pkgconfig_DATA = modsecurity.pc
EXTRA_DIST = modsecurity.pc.in \
modsecurity.conf-recommended \
unicode.mapping

30 changes: 26 additions & 4 deletions build/win32/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,32 @@ target_compile_definitions(libinjection PRIVATE LIBINJECTION_VERSION="${LIBINJEC
project(mbedcrypto C)

set(MBEDTLS_DIR ${BASE_DIR}/others/mbedtls)
set(TF_PSA_CRYPTO_DIR ${MBEDTLS_DIR}/tf-psa-crypto)

add_library(mbedcrypto STATIC
${TF_PSA_CRYPTO_DIR}/utilities/base64.c
${TF_PSA_CRYPTO_DIR}/utilities/constant_time.c
${TF_PSA_CRYPTO_DIR}/platform/platform_util.c
${TF_PSA_CRYPTO_DIR}/extras/md.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/md5.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/sha1.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/sha256.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/sha512.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/sha3.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/ripemd160.c
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src/psa_util_internal.c
)

add_library(mbedcrypto STATIC ${MBEDTLS_DIR}/library/base64.c ${MBEDTLS_DIR}/library/sha1.c ${MBEDTLS_DIR}/library/md5.c ${MBEDTLS_DIR}/library/platform_util.c ${MBEDTLS_DIR}/library/constant_time.c)

target_include_directories(mbedcrypto PRIVATE ${MBEDTLS_DIR}/include)
target_include_directories(mbedcrypto PRIVATE
${MBEDTLS_DIR}/include
${TF_PSA_CRYPTO_DIR}/include
${TF_PSA_CRYPTO_DIR}/core
${TF_PSA_CRYPTO_DIR}/extras
${TF_PSA_CRYPTO_DIR}/library
${TF_PSA_CRYPTO_DIR}/utilities
${TF_PSA_CRYPTO_DIR}/drivers/builtin/include
${TF_PSA_CRYPTO_DIR}/drivers/builtin/src
)

# get mbedtls version with git describe
execute_process(
Expand Down Expand Up @@ -137,7 +159,7 @@ file(GLOB_RECURSE libModSecuritySources ${BASE_DIR}/src/*.cc)
add_library(libModSecurity SHARED ${libModSecuritySources})

target_compile_definitions(libModSecurity PRIVATE WITH_PCRE2)
target_include_directories(libModSecurity PRIVATE ${BASE_DIR} ${BASE_DIR}/headers ${BASE_DIR}/others ${MBEDTLS_DIR}/include)
target_include_directories(libModSecurity PRIVATE ${BASE_DIR} ${BASE_DIR}/headers ${BASE_DIR}/others ${MBEDTLS_DIR}/include ${TF_PSA_CRYPTO_DIR}/include ${TF_PSA_CRYPTO_DIR}/drivers/builtin/include)
target_link_libraries(libModSecurity PRIVATE pcre2::pcre2 libinjection mbedcrypto Poco::Poco Iphlpapi.lib)

macro(add_package_dependency project compile_definition link_library flag)
Expand Down
3 changes: 1 addition & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ AC_DEFUN([LIBINJECTION_VERSION], m4_esyscmd_s(cd "others/libinjection" && git de
AC_SUBST([LIBINJECTION_VERSION])

# Check for Mbed TLS
if ! test -f "${srcdir}/others/mbedtls/library/base64.c"; then
if ! test -f "${srcdir}/others/mbedtls/tf-psa-crypto/utilities/base64.c"; then
AC_MSG_ERROR([\
Expand Down Expand Up @@ -532,4 +532,3 @@ if test "$aflFuzzer" = "true"; then
echo " $ export CC=afl-clang-fast "
echo " "
fi

25 changes: 15 additions & 10 deletions others/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,24 @@ noinst_HEADERS = \
libinjection/src/libinjection_sqli.h \
libinjection/src/libinjection_sqli_data.h \
libinjection/src/libinjection_xss.h \
mbedtls/include/mbedtls/base64.h \
mbedtls/include/mbedtls/check_config.h \
mbedtls/tf-psa-crypto/include/mbedtls/base64.h \
mbedtls/include/mbedtls/mbedtls_config.h \
mbedtls/include/mbedtls/md5.h \
mbedtls/include/mbedtls/platform.h \
mbedtls/include/mbedtls/sha1.h
mbedtls/tf-psa-crypto/include/mbedtls/md.h \
mbedtls/tf-psa-crypto/include/mbedtls/platform.h

libmbedtls_la_SOURCES = \
mbedtls/library/base64.c \
mbedtls/library/md5.c \
mbedtls/library/sha1.c \
mbedtls/library/platform_util.c
mbedtls/tf-psa-crypto/utilities/base64.c \
mbedtls/tf-psa-crypto/utilities/constant_time.c \
mbedtls/tf-psa-crypto/platform/platform_util.c \
mbedtls/tf-psa-crypto/extras/md.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/md5.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/sha1.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/sha256.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/sha512.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/sha3.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/ripemd160.c \
mbedtls/tf-psa-crypto/drivers/builtin/src/psa_util_internal.c

libmbedtls_la_CFLAGS = -DMBEDTLS_CONFIG_FILE=\"mbedtls/mbedtls_config.h\" -I$(top_srcdir)/others/mbedtls/include
libmbedtls_la_CFLAGS = -DMBEDTLS_CONFIG_FILE=\"mbedtls/mbedtls_config.h\" -I$(top_srcdir)/others/mbedtls/include -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/include -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/core -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/extras -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/library -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/utilities -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/drivers/builtin/include -I$(top_srcdir)/others/mbedtls/tf-psa-crypto/drivers/builtin/src
libmbedtls_la_CPPFLAGS =
libmbedtls_la_LIBADD =
2 changes: 1 addition & 1 deletion others/mbedtls
Submodule mbedtls updated 1735 files
3 changes: 2 additions & 1 deletion src/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ libmodsecurity_la_CPPFLAGS = \
-g \
-I$(top_srcdir)/others \
-I$(top_srcdir)/others/mbedtls/include \
-I$(top_srcdir)/others/mbedtls/tf-psa-crypto/include \
-I$(top_srcdir)/others/mbedtls/tf-psa-crypto/drivers/builtin/include \
-fPIC \
-O3 \
-I$(top_srcdir)/headers \
Expand Down Expand Up @@ -343,4 +345,3 @@ libmodsecurity_la_LIBADD = \
$(MAXMIND_LDADD) \
$(SSDEEP_LDADD) \
$(YAJL_LDADD)

5 changes: 2 additions & 3 deletions src/utils/md5.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@
#define SRC_UTILS_MD5_H_

#include "src/utils/sha1.h"
#include "mbedtls/md5.h"
#include <string>

namespace modsecurity::Utils {


class Md5 : public DigestImpl<&mbedtls_md5, 16> {
class Md5 : public DigestImpl<MBEDTLS_MD_MD5, 16> {
};


} // namespace modsecurity::Utils

#endif // SRC_UTILS_MD5_H_
#endif // SRC_UTILS_MD5_H_
79 changes: 49 additions & 30 deletions src/utils/sha1.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* Copyright (c) 2015 - 2021 Trustwave Holdings, Inc. (http://www.trustwave.com/)
*
* You may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
Expand All @@ -16,60 +16,79 @@
#ifndef SRC_UTILS_SHA1_H_
#define SRC_UTILS_SHA1_H_

#include <array>
#include <exception>
#include <string>
#include <cassert>
#include <string_view>

#include "src/utils/string.h"
#include "mbedtls/sha1.h"
#include "mbedtls/md.h"

namespace modsecurity::Utils {

class DigestCalculationException : public std::exception {
public:
explicit DigestCalculationException(const char *message) noexcept
: m_message(message) { }

using DigestOp = int (*)(const unsigned char *, size_t, unsigned char []);
const char *what() const noexcept override {
return m_message;
}

private:
const char *m_message;
};

template<DigestOp digestOp, int DigestSize>

template<mbedtls_md_type_t DigestType, int DigestSize>
class DigestImpl {
public:

static std::string digest(const std::string& input) {
return digestHelper(input, [](const auto digest) {
return std::string(digest);
});
const auto digestBytes = calculateDigest(input);
return std::string(digestBytes.begin(), digestBytes.end());
}

static void digestReplace(std::string& value) {
digestHelper(value, [&value](const auto digest) mutable {
value = digest;
});
const auto digestBytes = calculateDigest(value);
value.assign(digestBytes.begin(), digestBytes.end());
}

static std::string hexdigest(const std::string &input) {
return digestHelper(input, [](const auto digest) {
return utils::string::string_to_hex(digest);
});
static std::string hexdigest(const std::string& input) {
const auto digestBytes = calculateDigest(input);
const std::string digestString(digestBytes.begin(), digestBytes.end());
return utils::string::string_to_hex(digestString);
}

private:

template<typename ConvertOp>
static auto digestHelper(const std::string &input,
ConvertOp convertOp) -> auto {
char digest[DigestSize];

const auto ret = (*digestOp)(reinterpret_cast<const unsigned char *>(input.c_str()),
input.size(), reinterpret_cast<unsigned char *>(digest));
assert(ret == 0);

return convertOp(std::string_view(digest, DigestSize));
private:
static std::array<unsigned char, DigestSize> calculateDigest(
std::string_view input) {
std::array<unsigned char, DigestSize> digestBytes = {};

const mbedtls_md_info_t *mdInfo = mbedtls_md_info_from_type(DigestType);
if (mdInfo == nullptr) {
throw DigestCalculationException(
"mbedtls_md_info_from_type() returned nullptr");
}

const auto *inputBytes =
static_cast<const unsigned char *>(static_cast<const void *>(input.data()));

if (const int ret = mbedtls_md(
mdInfo,
inputBytes,
input.size(),
digestBytes.data()); ret != 0) {
throw DigestCalculationException("mbedtls_md() failed");
}

return digestBytes;
}
};


class Sha1 : public DigestImpl<&mbedtls_sha1, 20> {
class Sha1 : public DigestImpl<MBEDTLS_MD_SHA1, 20> {
};


} // namespace modsecurity::Utils

#endif // SRC_UTILS_SHA1_H_
Loading