From cd91baaabee34e2712ed0cdb1b303083a012d5a0 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Wed, 26 Apr 2023 16:15:02 +0300 Subject: [PATCH] Refactoring and move hash algs outside js embeds engine --- DesktopEditor/doctrenderer/common.h | 13 +- DesktopEditor/doctrenderer/docbuilder.h | 10 +- DesktopEditor/doctrenderer/doctrenderer.h | 4 +- DesktopEditor/doctrenderer/doctrenderer.pro | 3 +- DesktopEditor/doctrenderer/embed/Default.h | 2 +- DesktopEditor/doctrenderer/hash.cpp | 206 +----------------- DesktopEditor/doctrenderer/hash.h | 7 + DesktopEditor/doctrenderer/hash_engine.cpp | 64 ++++++ .../doctrenderer/js_internal/js_base.h | 6 +- 9 files changed, 102 insertions(+), 213 deletions(-) create mode 100644 DesktopEditor/doctrenderer/hash_engine.cpp diff --git a/DesktopEditor/doctrenderer/common.h b/DesktopEditor/doctrenderer/common.h index 61b97625cf..71b4825562 100644 --- a/DesktopEditor/doctrenderer/common.h +++ b/DesktopEditor/doctrenderer/common.h @@ -33,6 +33,15 @@ #ifndef _BUILDER_COMMON_H #define _BUILDER_COMMON_H -#include "./../common/base_export.h" +#ifdef DOCTRENDERER_NO_USE_DYNAMIC_LIBRARY +#define BUILDER_DECL +#else +#include "../../common/base_export.h" +#ifdef DOCTRENDERER_USE_DYNAMIC_LIBRARY_BUILDING +#define BUILDER_DECL Q_DECL_EXPORT +#else +#define BUILDER_DECL Q_DECL_IMPORT +#endif +#endif -#endif // _BUILDER_COMMON_H \ No newline at end of file +#endif // _BUILDER_COMMON_H diff --git a/DesktopEditor/doctrenderer/docbuilder.h b/DesktopEditor/doctrenderer/docbuilder.h index 476c1b36f5..e84b9ba732 100644 --- a/DesktopEditor/doctrenderer/docbuilder.h +++ b/DesktopEditor/doctrenderer/docbuilder.h @@ -41,7 +41,7 @@ namespace NSDoctRenderer * The string class with the wchar_t* property. */ class CString_Private; - class Q_DECL_EXPORT CString + class BUILDER_DECL CString { public: CString(); @@ -61,7 +61,7 @@ namespace NSDoctRenderer * It represents a wrapper for a JS object. */ class CDocBuilderValue_Private; - class Q_DECL_EXPORT CDocBuilderValue + class BUILDER_DECL CDocBuilderValue { public: CDocBuilderValue(); @@ -238,7 +238,7 @@ namespace NSDoctRenderer * All opened scopes will be closed automatically when the builder CloseFile method is called. */ class CDocBuilderContextScope_Private; - class Q_DECL_EXPORT CDocBuilderContextScope + class BUILDER_DECL CDocBuilderContextScope { public: CDocBuilderContextScope(); @@ -261,7 +261,7 @@ namespace NSDoctRenderer * Class for getting JS context for working. */ class CDocBuilderContext_Private; - class Q_DECL_EXPORT CDocBuilderContext + class BUILDER_DECL CDocBuilderContext { public: CDocBuilderContext(); @@ -333,7 +333,7 @@ namespace NSDoctRenderer * Base class used by ONLYOFFICE Document Builder for the document file (text document, spreadsheet, presentation, form document, PDF) to be generated. */ class CDocBuilder_Private; - class Q_DECL_EXPORT CDocBuilder + class BUILDER_DECL CDocBuilder { public: CDocBuilder(); diff --git a/DesktopEditor/doctrenderer/doctrenderer.h b/DesktopEditor/doctrenderer/doctrenderer.h index 3b7704ad58..19e8caf481 100644 --- a/DesktopEditor/doctrenderer/doctrenderer.h +++ b/DesktopEditor/doctrenderer/doctrenderer.h @@ -34,7 +34,7 @@ #include #include -#include "../common/base_export.h" +#include "./common.h" namespace NSDoctRenderer { @@ -57,7 +57,7 @@ namespace NSDoctRenderer namespace NSDoctRenderer { class CDoctRenderer_Private; - class Q_DECL_EXPORT CDoctrenderer + class BUILDER_DECL CDoctrenderer { public: CDoctrenderer(const std::wstring& sAllFontsPath = L""); diff --git a/DesktopEditor/doctrenderer/doctrenderer.pro b/DesktopEditor/doctrenderer/doctrenderer.pro index 9cae4b2b5e..647fd06b9f 100644 --- a/DesktopEditor/doctrenderer/doctrenderer.pro +++ b/DesktopEditor/doctrenderer/doctrenderer.pro @@ -29,7 +29,8 @@ SOURCES += \ docbuilder.cpp \ docbuilder_p.cpp \ graphics.cpp \ - hash.cpp + hash.cpp \ + hash_engine.cpp SOURCES += \ ../../Common/OfficeFileFormatChecker2.cpp \ diff --git a/DesktopEditor/doctrenderer/embed/Default.h b/DesktopEditor/doctrenderer/embed/Default.h index 6e13eb6fe6..9d62e214e3 100644 --- a/DesktopEditor/doctrenderer/embed/Default.h +++ b/DesktopEditor/doctrenderer/embed/Default.h @@ -5,7 +5,7 @@ namespace NSJSBase { - void Q_DECL_EXPORT CreateDefaults(JSSmart& context); + void JS_DECL CreateDefaults(JSSmart& context); } #endif // _BUILD_NATIVE_DEFAULT_EMBED_H_ diff --git a/DesktopEditor/doctrenderer/hash.cpp b/DesktopEditor/doctrenderer/hash.cpp index 29184af382..d554942429 100644 --- a/DesktopEditor/doctrenderer/hash.cpp +++ b/DesktopEditor/doctrenderer/hash.cpp @@ -4,13 +4,6 @@ #include "../common/Base64.h" #endif -#include "openssl/sha.h" -#include "openssl/md2.h" -#include "openssl/md4.h" -#include "openssl/md5.h" -#include "openssl/whrlpool.h" -#include "openssl/ripemd.h" - #include #include @@ -30,79 +23,10 @@ CHash::~CHash() unsigned char* CHash::hash(const unsigned char* data, int size, int alg) { - unsigned int nBufLen = 0; - unsigned char* pBufData = NULL; - size_t d = (size_t)size; - - switch (alg) - { - case haMD2: - { - nBufLen = 16; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - MD2(data, d, pBufData); - break; - } - case haMD4: - { - nBufLen = 16; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - MD4(data, d, pBufData); - break; - } - case haMD5: - { - nBufLen = 16; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - MD5(data, d, pBufData); - break; - } - case haRMD160: - { - nBufLen = 20; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - RIPEMD160(data, d, pBufData); - break; - } - case haSHA1: - { - nBufLen = 20; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - SHA1(data, d, pBufData); - break; - } - case haSHA256: - { - nBufLen = 32; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - SHA256(data, d, pBufData); - break; - } - case haSHA384: - { - nBufLen = 48; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - SHA384(data, d, pBufData); - break; - } - case haSHA512: - { - nBufLen = 64; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - SHA512(data, d, pBufData); - break; - } - case haWHIRLPOOL: - { - nBufLen = 64; - pBufData = (unsigned char*)m_fAllocator(nBufLen); - WHIRLPOOL(data, d, pBufData); - break; - } - default: - break; - } + unsigned int nBufLen = (unsigned int)getDigestLength((HashAlgs)alg); + unsigned char* pBufData = (unsigned char*)m_fAllocator(nBufLen); + NSHash::hash_internal(data, pBufData, (size_t)size, alg); return pBufData; } @@ -243,56 +167,7 @@ void hash_iteration(unsigned char*& input, int iter, unsigned char*& tmp, int al input[alg_size + 2] = 0xFF & (iter >> 16); input[alg_size + 3] = 0xFF & (iter >> 24); - switch (alg) - { - case CHash::haMD2: - { - MD2(input, alg_size + 4, tmp); - break; - } - case CHash::haMD4: - { - MD4(input, alg_size + 4, tmp); - break; - } - case CHash::haMD5: - { - MD5(input, alg_size + 4, tmp); - break; - } - case CHash::haRMD160: - { - RIPEMD160(input, alg_size + 4, tmp); - break; - } - case CHash::haSHA1: - { - SHA1(input, alg_size + 4, tmp); - break; - } - case CHash::haSHA256: - { - SHA256(input, alg_size + 4, tmp); - break; - } - case CHash::haSHA384: - { - SHA384(input, alg_size + 4, tmp); - break; - } - case CHash::haSHA512: - { - SHA512(input, alg_size + 4, tmp); - break; - } - case CHash::haWHIRLPOOL: - { - WHIRLPOOL(input, alg_size + 4, tmp); - break; - } - default: - break; - } + NSHash::hash_internal(input, tmp, alg_size + 4, alg); unsigned char* mem = input; input = tmp; @@ -314,76 +189,9 @@ unsigned char* CHash::hash2(const char* password, const char* salt, int spinCoun free(passwordUtf16); - size_t alg_size = 0; - unsigned char* pBuffer1 = NULL; - switch (alg) - { - case haMD2: - { - alg_size = 16; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - MD2(inputData, inputDataLen, pBuffer1); - break; - } - case haMD4: - { - alg_size = 16; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - MD4(inputData, inputDataLen, pBuffer1); - break; - } - case haMD5: - { - alg_size = 16; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - MD5(inputData, inputDataLen, pBuffer1); - break; - } - case haRMD160: - { - alg_size = 20; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - RIPEMD160(inputData, inputDataLen, pBuffer1); - break; - } - case haSHA1: - { - alg_size = 20; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - SHA1(inputData, inputDataLen, pBuffer1); - break; - } - case haSHA256: - { - alg_size = 32; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - SHA256(inputData, inputDataLen, pBuffer1); - break; - } - case haSHA384: - { - alg_size = 48; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - SHA384(inputData, inputDataLen, pBuffer1); - break; - } - case haSHA512: - { - alg_size = 64; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - SHA512(inputData, inputDataLen, pBuffer1); - break; - } - case haWHIRLPOOL: - { - alg_size = 64; - pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); - WHIRLPOOL(inputData, inputDataLen, pBuffer1); - break; - } - default: - break; - } + size_t alg_size = (size_t)getDigestLength((HashAlgs)alg); + unsigned char* pBuffer1 = (unsigned char*)m_fAllocator(alg_size + 4); + NSHash::hash_internal(inputData, pBuffer1, (size_t)inputDataLen, alg); free(inputData); diff --git a/DesktopEditor/doctrenderer/hash.h b/DesktopEditor/doctrenderer/hash.h index 1b7cb375cd..4e659f2336 100644 --- a/DesktopEditor/doctrenderer/hash.h +++ b/DesktopEditor/doctrenderer/hash.h @@ -2,6 +2,13 @@ #define NSHASH_H #include +#include "./common.h" + +// hide algs into lib +namespace NSHash +{ + void BUILDER_DECL hash_internal(const unsigned char* src, unsigned char* dst, size_t size, int alg); +} class CHash { diff --git a/DesktopEditor/doctrenderer/hash_engine.cpp b/DesktopEditor/doctrenderer/hash_engine.cpp new file mode 100644 index 0000000000..274f579ad3 --- /dev/null +++ b/DesktopEditor/doctrenderer/hash_engine.cpp @@ -0,0 +1,64 @@ +#include "hash.h" + +#include "openssl/sha.h" +#include "openssl/md2.h" +#include "openssl/md4.h" +#include "openssl/md5.h" +#include "openssl/whrlpool.h" +#include "openssl/ripemd.h" + +#include + +void NSHash::hash_internal(const unsigned char* src, unsigned char* dst, size_t d, int alg) +{ + switch (alg) + { + case CHash::haMD2: + { + MD2(src, d, dst); + break; + } + case CHash::haMD4: + { + MD4(src, d, dst); + break; + } + case CHash::haMD5: + { + MD5(src, d, dst); + break; + } + case CHash::haRMD160: + { + RIPEMD160(src, d, dst); + break; + } + case CHash::haSHA1: + { + SHA1(src, d, dst); + break; + } + case CHash::haSHA256: + { + SHA256(src, d, dst); + break; + } + case CHash::haSHA384: + { + SHA384(src, d, dst); + break; + } + case CHash::haSHA512: + { + SHA512(src, d, dst); + break; + } + case CHash::haWHIRLPOOL: + { + WHIRLPOOL(src, d, dst); + break; + } + default: + break; + } +} diff --git a/DesktopEditor/doctrenderer/js_internal/js_base.h b/DesktopEditor/doctrenderer/js_internal/js_base.h index fd0e412f59..69fad763c2 100644 --- a/DesktopEditor/doctrenderer/js_internal/js_base.h +++ b/DesktopEditor/doctrenderer/js_internal/js_base.h @@ -7,13 +7,13 @@ #include "../../graphics/BaseThread.h" // disable export (ios/android problem (external embed objects)) -#define DOCTRENDERER_NO_USE_DYNAMIC_LIBRARY +#define JSBASE_NO_USE_DYNAMIC_LIBRARY -#ifdef DOCTRENDERER_NO_USE_DYNAMIC_LIBRARY +#ifdef JSBASE_NO_USE_DYNAMIC_LIBRARY #define JS_DECL #else #include "../../common/base_export.h" -#ifdef DOCTRENDERER_USE_DYNAMIC_LIBRARY_BUILDING +#ifdef JSBASE_USE_DYNAMIC_LIBRARY_BUILDING #define JS_DECL Q_DECL_EXPORT #else #define JS_DECL Q_DECL_IMPORT