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
53 changes: 8 additions & 45 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@ project(core)

set(CORE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}")

add_custom_target(tests)
get_property(all_tests GLOBAL PROPERTY TEST_TARGETS)

include(${CORE_ROOT_DIR}/common.cmake)

# platform-specific compile flags
if(EMSCRIPTEN)

add_subdirectory( "${CORE_ROOT_DIR}/OfficeUtils/js" zlib )
Expand All @@ -15,6 +17,7 @@ if(EMSCRIPTEN)
add_subdirectory( "${CORE_ROOT_DIR}/Common/3dParty/hunspell" spell )
add_subdirectory( "${CORE_ROOT_DIR}/DesktopEditor/fontengine/js" fonts )
add_subdirectory( "${CORE_ROOT_DIR}/DesktopEditor/graphics/pro/js/" drawingfile )

else()

add_compile_options(-march=native)
Expand All @@ -26,50 +29,10 @@ else()
add_subdirectory( "${CORE_ROOT_DIR}/DesktopEditor/doctrenderer/app_builder" docbuilder )
add_subdirectory( "${CORE_ROOT_DIR}/PdfFile/Resources/CMapMemory" cmapbin )

#[[
set( ALL_ARTIFACTS
UnicodeConverter
kernel
kernel_network
Fb2File
PdfFile
HtmlFile2
EpubFile
XpsFile
OFDFile
DjVuFile
DocxRenderer
doctrenderer
IWorkFile
HWPFile
graphics
x2tlib
allfontsgen
allthemesgen
pluginsmanager
docbuilder
x2t
)

add_custom_target(copy_artifacts ALL
COMMENT "Copying all artifacts into ${EO_CORE_OUTPUT_DIR}"
)

add_dependencies(copy_artifacts ${ALL_ARTIFACTS})

foreach(artifact ${ALL_ARTIFACTS})
add_custom_command(TARGET copy_artifacts POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${EO_CORE_OUTPUT_DIR}"
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:${artifact}> "${EO_CORE_OUTPUT_DIR}/"
COMMENT "Copying ${artifact} to ${EO_CORE_OUTPUT_DIR}"
)
endforeach()
add_subdirectory( "${CORE_ROOT_DIR}/Common/3dParty/openssl/test" )

add_custom_command(TARGET copy_artifacts POST_BUILD
COMMAND ${CMAKE_COMMAND} -E make_directory "${EO_CORE_OUTPUT_DIR}"
COMMAND /bin/sh -c "cp -P \"${EO_CORE_3RD_PARTY_INSTALL_DIR}/icu/lib\"/*.so* \"${EO_CORE_OUTPUT_DIR}/\""
COMMENT "Copying ICU libs to ${EO_CORE_OUTPUT_DIR}"
)
]]
if(all_tests)
add_dependencies(tests ${all_tests})
endif()

endif()
9 changes: 3 additions & 6 deletions Common/3dParty/brotli/nc-fetch.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#!/bin/bash

install_dir="$1"
git_tag="v1.2.0"

abort_op()
{
Expand All @@ -25,11 +26,7 @@ fi

echo "Fetching Brotli"

mkdir -p "$install_dir" || abort_op "Failed to create brotli directory."
cd "$install_dir"
git init || abort_op "Git init failed (brotli)"
git remote add origin https://github.com/google/brotli.git || abort_op "Failed to add brotli remote"
git fetch --depth 1 origin a47d7475063eb223c87632eed806c0070e70da29 || abort_op "Failed to fetch a47d7475063eb223c87632eed806c0070e70da29"
git checkout FETCH_HEAD || abort_op "Check-out failed (brotli)"
git clone --depth=1 --branch $git_tag https://github.com/google/brotli.git "$install_dir" \
|| abort_op "Failed to clone brotli repo"

echo "Brotli ready!"
8 changes: 2 additions & 6 deletions Common/3dParty/icu/nc-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ work_dir="$1"
install_dir="$2"
icu_major=$3
icu_minor=$4
fetch_only=${5:-0}

abort_op()
{
Expand Down Expand Up @@ -57,11 +56,8 @@ CXXFLAGS="-static-libstdc++ -static-libgcc" \
LDFLAGS='-Wl,-rpath,$$ORIGIN' \
|| abort_op "Configure failed"

if [ "$fetch_only" -eq 0 ]; then
make -j10 && make install || abort_op "Build failed"
make -j10 && make install || abort_op "Build failed"

echo "ICU ready! (work dir will be removed)"
rm -rf "$work_dir"
fi
echo "ICU ready!"

exit 0
20 changes: 15 additions & 5 deletions Common/3dParty/openssl/nc-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@

work_dir="$1"
install_dir="$2"
keep_work=${3:-0}
keep_work=${3:-""}

script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
patches_dir="$script_dir/../../../DesktopEditor/graphics/pro/js/wasm/patches"
# DesktopEditor/graphics/pro/js/wasm/patches/fix-wasm-openssl.patch
abort_op()
{
rm -rf "$work_dir"
Expand Down Expand Up @@ -33,22 +36,29 @@ fi
mkdir -p "$work_dir" || abort_op "Failed to create work dir: [$work_dir]"

echo "Fetching OpenSSL repo into: [$work_dir]"
git clone --depth=1 --branch OpenSSL_1_1_1f https://github.com/openssl/openssl.git "$work_dir" \
git clone --depth 1 --branch openssl-3.6.1 https://github.com/openssl/openssl.git "$work_dir" \
|| abort_op "Git clone failed!"

echo "Patching OpenSSL"
cd "$work_dir"
git apply "$patches_dir/fix-wasm-openssl.patch" || abort_op "Failed to apply fix-wasm-openssl.patch"

echo "Building OpenSSL"
cd "$work_dir"
./config enable-md2 no-shared no-asm --prefix=$install_dir --openssldir=$install_dir \
./config enable-md2 no-shared no-asm no-afalgeng --prefix=$install_dir --openssldir=$install_dir \
|| abort_op "Configuration failed!"

make -j10 || abort_op "Build failed!"

echo "Installing OpenSSL to: [$install_dir]"
make install || abort_op "Install failed!"

if [ "$keep_work" -eq 0 ]; then
echo "OpenSSL ready! (work dir will be removed)"
echo "OpenSSL ready!"

if [ "$keep_work" == "dont_keep_workdir" ]; then
echo "Work dir will be removed."
rm -rf "$work_dir"
fi

exit 0

71 changes: 71 additions & 0 deletions Common/3dParty/openssl/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
cmake_minimum_required(VERSION 3.10)

project(openssl_test)

set(CORE_ROOT_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../..")
set(OPENSSL_COMMON_SRC_DIR "${CMAKE_CURRENT_LIST_DIR}/../common")

include(${CORE_ROOT_DIR}/common.cmake)

if(NOT TARGET kernel)
add_subdirectory(${CORE_ROOT_DIR}/Common kernel)
endif()

message( "Fetch and build OpenSSL" )
set(OPENSSL_3RDPARTY_DIR "${CORE_ROOT_DIR}/Common/3dParty/openssl")
set(OPENSSL_INSTALL_DIR "${EO_CORE_3RD_PARTY_INSTALL_DIR}/openssl_build_linux_64")
get_filename_component(OPENSSL_3RDPARTY_DIR_ABS "${OPENSSL_3RDPARTY_DIR}" ABSOLUTE)
get_filename_component(OPENSSL_INSTALL_DIR_ABS "${OPENSSL_INSTALL_DIR}" ABSOLUTE)
execute_process(
COMMAND_ECHO STDOUT
COMMAND ./nc-build.sh "${EO_CORE_3RD_PARTY_WORK_DIR}/openssl" "${OPENSSL_INSTALL_DIR}"
WORKING_DIRECTORY ${OPENSSL_3RDPARTY_DIR_ABS}
)


add_executable(openssl_test
${OPENSSL_COMMON_SRC_DIR}/common_openssl.cpp
${CMAKE_CURRENT_LIST_DIR}/main.cpp

${OPENSSL_COMMON_SRC_DIR}/common_openssl.h
)

set_default_options(openssl_test)

target_include_directories(openssl_test PRIVATE
${OPENSSL_INSTALL_DIR}/include
)

target_link_libraries(openssl_test PRIVATE
${OPENSSL_INSTALL_DIR_ABS}/lib64/libssl.a
${OPENSSL_INSTALL_DIR_ABS}/lib64/libcrypto.a
)

target_link_libraries(openssl_test PUBLIC
kernel
)

copy_icu_libs(openssl_test)



target_link_libraries(openssl_test PRIVATE doctest::doctest)

# Modify rpath so test binary can run properly
get_target_property(old_rpath openssl_test BUILD_RPATH)
if(old_rpath)
set(new_rpath "${old_rpath}:${EO_CORE_OUTPUT_DIR}")
else()
set(new_rpath "${EO_CORE_OUTPUT_DIR}")
endif()
set_target_properties(openssl_test PROPERTIES
BUILD_RPATH "${new_rpath}"
INSTALL_RPATH "${new_rpath}"
)

register_test_target(openssl_tests)

include(${doctest_SOURCE_DIR}/scripts/cmake/doctest.cmake)
doctest_discover_tests(openssl_test
TEST_PREFIX "openssl."
)
36 changes: 20 additions & 16 deletions Common/3dParty/openssl/test/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,65 +30,69 @@
*
*/

#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>

#include <string>

#include "./../common/common_openssl.h"

int main(int argc, char *argv[])
TEST_SUITE( "OpenSSL" )
{
argc;
argv;
if (true)
TEST_CASE( "SHA-256" )
{
std::string sTestHashString = "knoejnrgijwenrgiojwnergjiwnerigjnwerojgnweorigjn";
unsigned int data_len = 0;
unsigned char* data = NSOpenSSL::GetHash((unsigned char*)sTestHashString.c_str(), (unsigned int)sTestHashString.length(), OPENSSL_HASH_ALG_SHA256, data_len);
std::string sResult = NSOpenSSL::Serialize(data, data_len, OPENSSL_SERIALIZE_TYPE_HEX);

NSOpenSSL::openssl_free(data);

const std::string sExpectedResult = "913DD5544D5C726A40D551ACE85B29ABBBD4E2ADF2F4DA5BD07CEC07680CF5CD";
CHECK( sResult == sExpectedResult );
}

if (true)
TEST_CASE( "RSA" )
{
unsigned char* publicKey = NULL;
unsigned char* privateKey = NULL;
bool bRes = NSOpenSSL::RSA_GenerateKeys(publicKey, privateKey);
bRes;

std::string sPublic((char*)publicKey);
std::string sPrivate((char*)privateKey);

NSOpenSSL::openssl_free(publicKey);
NSOpenSSL::openssl_free(privateKey);

std::string sMessage = "Hello world";
const std::string sMessage = "Hello world";

unsigned char* message_crypt = NULL;
unsigned int message_crypt_len = 0;
bool bEncrypt = NSOpenSSL::RSA_EncryptPublic((unsigned char*)sPublic.c_str(), (unsigned char*)sMessage.c_str(), (unsigned int)sMessage.length(), message_crypt, message_crypt_len);
bEncrypt;
bool bEncrypt = NSOpenSSL::RSA_EncryptPublic((unsigned char*)sPublic.c_str(), (const unsigned char*)sMessage.c_str(), (unsigned int)sMessage.length(), message_crypt, message_crypt_len);

unsigned char* message_decrypt = NULL;
unsigned int message_decrypt_len = 0;

bool bDecrypt = NSOpenSSL::RSA_DecryptPrivate((unsigned char*)sPrivate.c_str(), message_crypt, message_crypt_len, message_decrypt, message_decrypt_len);
bDecrypt;

std::string sMessageOut((char*)message_decrypt, message_decrypt_len);

NSOpenSSL::openssl_free(message_crypt);
NSOpenSSL::openssl_free(message_decrypt);

CHECK( sMessageOut == sMessage );
}

if (true)
TEST_CASE( "AES" )
{
std::string password = "{PASSWORD}";
std::string message = "{MESSAGE}";
const std::string password = "{PASSWORD}";
const std::string message = "{MESSAGE}";
std::string message_crypted = "";
std::string message_decrypted = "";

NSOpenSSL::AES_Encrypt_desktop(password, message, message_crypted);
NSOpenSSL::AES_Decrypt_desktop(password, message_crypted, message_decrypted);

message;
CHECK( message_decrypted == message );
}

return 0;
}
4 changes: 2 additions & 2 deletions Common/Network/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,8 +114,8 @@ target_include_directories(kernel_network PRIVATE
)

target_link_libraries(kernel_network PRIVATE
${OPENSSL_INSTALL_DIR_ABS}/lib/libssl.a
${OPENSSL_INSTALL_DIR_ABS}/lib/libcrypto.a
${OPENSSL_INSTALL_DIR_ABS}/lib64/libssl.a
${OPENSSL_INSTALL_DIR_ABS}/lib64/libcrypto.a
)

target_link_libraries(kernel_network PUBLIC
Expand Down
4 changes: 2 additions & 2 deletions DesktopEditor/doctrenderer/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -292,8 +292,8 @@ if(APPLE)
endif()

target_link_libraries(doctrenderer PRIVATE
${OPENSSL_INSTALL_DIR_ABS}/lib/libssl.a
${OPENSSL_INSTALL_DIR_ABS}/lib/libcrypto.a
${OPENSSL_INSTALL_DIR_ABS}/lib64/libssl.a
${OPENSSL_INSTALL_DIR_ABS}/lib64/libcrypto.a
)

target_link_libraries(doctrenderer PUBLIC
Expand Down
2 changes: 2 additions & 0 deletions DesktopEditor/fontengine/js/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ set(SOURCES
${EO_CORE_3RD_PARTY_WORK_DIR}/brotli/c/dec/bit_reader.c
${EO_CORE_3RD_PARTY_WORK_DIR}/brotli/c/dec/decode.c
${EO_CORE_3RD_PARTY_WORK_DIR}/brotli/c/dec/huffman.c
${EO_CORE_3RD_PARTY_WORK_DIR}/brotli/c/dec/prefix.c
${EO_CORE_3RD_PARTY_WORK_DIR}/brotli/c/dec/state.c
${EO_CORE_3RD_PARTY_WORK_DIR}/brotli/c/dec/static_init.c

${DESKTOP_ROOT}/freetype-2.10.4/src/base/ftdebug.c
${DESKTOP_ROOT}/freetype-2.10.4/src/autofit/autofit.c
Expand Down
4 changes: 2 additions & 2 deletions DesktopEditor/graphics/cmake/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -995,9 +995,9 @@ add_library(graphics SHARED
${BROTLI_INSTALL_DIR}/c/dec/bit_reader.c
${BROTLI_INSTALL_DIR}/c/dec/decode.c
${BROTLI_INSTALL_DIR}/c/dec/huffman.c
# ${BROTLI_INSTALL_DIR}/c/dec/prefix.c
${BROTLI_INSTALL_DIR}/c/dec/prefix.c
${BROTLI_INSTALL_DIR}/c/dec/state.c
# ${BROTLI_INSTALL_DIR}/c/dec/static_init.c
${BROTLI_INSTALL_DIR}/c/dec/static_init.c
)

set_default_options(graphics)
Expand Down
8 changes: 2 additions & 6 deletions DesktopEditor/graphics/pro/js/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,15 @@ add_custom_command(
COMMAND bash ${CORE_ROOT}/Common/3dParty/icu/nc-build.sh
"${EO_CORE_3RD_PARTY_WORK_DIR}/icu"
"${EO_CORE_3RD_PARTY_INSTALL_DIR}/icu"
74 2 1
74 2

COMMAND bash ${CORE_ROOT}/Common/3dParty/openssl/nc-build.sh
"${EO_CORE_3RD_PARTY_WORK_DIR}/openssl"
"${EO_CORE_3RD_PARTY_INSTALL_DIR}/openssl"
1

COMMAND git -C ${EO_CORE_3RD_PARTY_WORK_DIR}/icu/icu apply
${CMAKE_CURRENT_SOURCE_DIR}/wasm/patches/fix-wasm-icu.patch

COMMAND git -C ${EO_CORE_3RD_PARTY_WORK_DIR}/openssl apply
${CMAKE_CURRENT_SOURCE_DIR}/wasm/patches/fix-wasm-openssl.patch

COMMAND ${CMAKE_COMMAND} -E touch ${PATCH_STAMP}
)

Expand Down Expand Up @@ -949,7 +945,7 @@ _ARM_ALIGN_
_tcsnicmp=strncmp _lseek=lseek _getcwd=getcwd
NO_CONSOLE_IO USE_EXTERNAL_JPEG2000 USE_JPIP OPJ_STATIC
FONT_ENGINE_DISABLE_FILESYSTEM IMAGE_CHECKER_DISABLE_XML
USE_OPENSSL_HASH DISABLE_FULL_DOCUMENT_CREATION DISABLE_FILESYSTEM
DISABLE_FULL_DOCUMENT_CREATION DISABLE_FILESYSTEM
CRYPTOPP_DISABLE_ASM DISABLE_TYPE_MISMATCH
)

Expand Down
Loading