Skip to content

Commit

Permalink
Improve usage of mk_clib.
Browse files Browse the repository at this point in the history
 - Rename to mk_clib everywhere.
 - No need to use extern "C".
 - Start using header only style.
 - No need to specify global namespace.
 - No need to initialize variables.
 - No need to compile source since using header only.
 - Update to newer version in order to fix ARM build.
  • Loading branch information
MarekKnapek committed Apr 6, 2024
1 parent 757461d commit de42e01
Show file tree
Hide file tree
Showing 5 changed files with 186 additions and 411 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ else()
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION True)
endif()

find_package(MkCLib REQUIRED)
find_package(mk_clib REQUIRED)

if(PWN_DISASSEMBLE_X86)
find_package(Zydis REQUIRED)
Expand Down
2 changes: 1 addition & 1 deletion Modules/Crypto/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ add_library(${PROJECT_NAME} STATIC ${PWN_CRYPTO_SOURCE_FILES})
add_library(PWN::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(${PROJECT_NAME} PUBLIC ${INTERFACE_DIR} PRIVATE ${HEADER_DIR})
target_compile_definitions(${PROJECT_NAME} PUBLIC)
target_link_libraries(${PROJECT_NAME} PUBLIC PWN::Common PWN::Deps::MkClib::Crypto)
target_link_libraries(${PROJECT_NAME} PUBLIC PWN::Common PWN::Deps::mk_clib::Crypto)

install(DIRECTORY ${INTERFACE_DIR} DESTINATION ${CMAKE_PROJECT_NAME})

Expand Down
89 changes: 44 additions & 45 deletions Modules/Crypto/Source/Crypto.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,14 @@
#include "Handle.hpp"
#include "Log.hpp"

extern "C"
{

#define mk_lang_jumbo_want 1
#include "mk_lib_crypto_hash_stream_md2.h"
#include "mk_lib_crypto_hash_stream_md4.h"
#include "mk_lib_crypto_hash_stream_md5.h"
#include "mk_lib_crypto_hash_stream_sha1.h"
#include "mk_lib_crypto_hash_stream_sha2_256.h"
#include "mk_lib_crypto_hash_stream_sha2_512.h"
}


using namespace pwn;
Expand Down Expand Up @@ -82,89 +81,89 @@ Crypto::CRC64(std::vector<u8> const& data)
PWNAPI auto
Crypto::MD2(std::vector<u8> const& data) -> std::array<u8, Crypto::MD2LEN>
{
std::array<u8, Crypto::MD2LEN> hash {};
mk_lib_crypto_hash_stream_md2_t hasher {};
mk_lib_crypto_hash_block_md2_digest_t digest {};
std::array<u8, Crypto::MD2LEN> hash;
mk_lib_crypto_hash_stream_md2_t hasher;
mk_lib_crypto_hash_block_md2_digest_t digest;

::mk_lib_crypto_hash_stream_md2_init(&hasher);
::mk_lib_crypto_hash_stream_md2_append(&hasher, data.data(), data.size());
::mk_lib_crypto_hash_stream_md2_finish(&hasher, &digest);
mk_lib_crypto_hash_stream_md2_init(&hasher);
mk_lib_crypto_hash_stream_md2_append(&hasher, data.data(), data.size());
mk_lib_crypto_hash_stream_md2_finish(&hasher, &digest);

::memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
return hash;
}

PWNAPI auto
Crypto::MD4(std::vector<u8> const& data) -> std::array<u8, Crypto::MD4LEN>
{
std::array<u8, Crypto::MD4LEN> hash {};
mk_lib_crypto_hash_stream_md4_t hasher {};
mk_lib_crypto_hash_block_md4_digest_t digest {};
std::array<u8, Crypto::MD4LEN> hash;
mk_lib_crypto_hash_stream_md4_t hasher;
mk_lib_crypto_hash_block_md4_digest_t digest;

::mk_lib_crypto_hash_stream_md4_init(&hasher);
::mk_lib_crypto_hash_stream_md4_append(&hasher, data.data(), data.size());
::mk_lib_crypto_hash_stream_md4_finish(&hasher, &digest);
mk_lib_crypto_hash_stream_md4_init(&hasher);
mk_lib_crypto_hash_stream_md4_append(&hasher, data.data(), data.size());
mk_lib_crypto_hash_stream_md4_finish(&hasher, &digest);

::memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
return hash;
}

PWNAPI auto
Crypto::MD5(std::vector<u8> const& data) -> std::array<u8, Crypto::MD5LEN>
{
std::array<u8, Crypto::MD5LEN> hash {};
mk_lib_crypto_hash_stream_md5_t hasher {};
mk_lib_crypto_hash_block_md5_digest_t digest {};
std::array<u8, Crypto::MD5LEN> hash;
mk_lib_crypto_hash_stream_md5_t hasher;
mk_lib_crypto_hash_block_md5_digest_t digest;

::mk_lib_crypto_hash_stream_md5_init(&hasher);
::mk_lib_crypto_hash_stream_md5_append(&hasher, data.data(), data.size());
::mk_lib_crypto_hash_stream_md5_finish(&hasher, &digest);
mk_lib_crypto_hash_stream_md5_init(&hasher);
mk_lib_crypto_hash_stream_md5_append(&hasher, data.data(), data.size());
mk_lib_crypto_hash_stream_md5_finish(&hasher, &digest);

::memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
return hash;
}

PWNAPI auto
Crypto::SHA1(std::vector<u8> const& data) -> std::array<u8, Crypto::SHA1LEN>
{
std::array<u8, Crypto::SHA1LEN> hash {};
mk_lib_crypto_hash_stream_sha1_t hasher {};
mk_lib_crypto_hash_block_sha1_digest_t digest {};
std::array<u8, Crypto::SHA1LEN> hash;
mk_lib_crypto_hash_stream_sha1_t hasher;
mk_lib_crypto_hash_block_sha1_digest_t digest;

::mk_lib_crypto_hash_stream_sha1_init(&hasher);
::mk_lib_crypto_hash_stream_sha1_append(&hasher, data.data(), data.size());
::mk_lib_crypto_hash_stream_sha1_finish(&hasher, &digest);
mk_lib_crypto_hash_stream_sha1_init(&hasher);
mk_lib_crypto_hash_stream_sha1_append(&hasher, data.data(), data.size());
mk_lib_crypto_hash_stream_sha1_finish(&hasher, &digest);

::memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
return hash;
}

PWNAPI auto
Crypto::SHA256(std::vector<u8> const& data) -> std::array<u8, Crypto::SHA256LEN>
{
std::array<u8, Crypto::SHA256LEN> hash {};
mk_lib_crypto_hash_stream_sha2_256_t hasher {};
mk_lib_crypto_hash_block_sha2_256_digest_t digest {};
std::array<u8, Crypto::SHA256LEN> hash;
mk_lib_crypto_hash_stream_sha2_256_t hasher;
mk_lib_crypto_hash_block_sha2_256_digest_t digest;

::mk_lib_crypto_hash_stream_sha2_256_init(&hasher);
::mk_lib_crypto_hash_stream_sha2_256_append(&hasher, data.data(), data.size());
::mk_lib_crypto_hash_stream_sha2_256_finish(&hasher, &digest);
mk_lib_crypto_hash_stream_sha2_256_init(&hasher);
mk_lib_crypto_hash_stream_sha2_256_append(&hasher, data.data(), data.size());
mk_lib_crypto_hash_stream_sha2_256_finish(&hasher, &digest);

::memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
return hash;
}

PWNAPI auto
Crypto::SHA512(std::vector<u8> const& data) -> std::array<u8, Crypto::SHA512LEN>
{
std::array<u8, Crypto::SHA512LEN> hash {};
mk_lib_crypto_hash_stream_sha2_512_t hasher {};
mk_lib_crypto_hash_block_sha2_512_digest_t digest {};
std::array<u8, Crypto::SHA512LEN> hash;
mk_lib_crypto_hash_stream_sha2_512_t hasher;
mk_lib_crypto_hash_block_sha2_512_digest_t digest;

::mk_lib_crypto_hash_stream_sha2_512_init(&hasher);
::mk_lib_crypto_hash_stream_sha2_512_append(&hasher, data.data(), data.size());
::mk_lib_crypto_hash_stream_sha2_512_finish(&hasher, &digest);
mk_lib_crypto_hash_stream_sha2_512_init(&hasher);
mk_lib_crypto_hash_stream_sha2_512_append(&hasher, data.data(), data.size());
mk_lib_crypto_hash_stream_sha2_512_finish(&hasher, &digest);

::memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
memcpy(hash.data(), reinterpret_cast<u8*>(&digest), hash.size());
return hash;
}
Loading

0 comments on commit de42e01

Please sign in to comment.