From 1b7f35b317f2bef5be3f4adb3c7c00637804633f Mon Sep 17 00:00:00 2001 From: ElenaSubbotina Date: Fri, 18 May 2018 11:22:56 +0300 Subject: [PATCH] . --- DesktopEditor/agg-2.4/agg_vs2005.vcproj | 2 +- .../cximage/CxImage/cximage_vs2005.vcproj | 2 +- .../fontengine/font_engine_vs2005.vcproj | 2 +- .../builds/windows/vc2005/freetype.vcproj | 2 +- DesktopEditor/graphics/graphics_vs2005.vcproj | 2 +- DesktopEditor/graphics/pro/graphics.pro | 2 + DesktopEditor/raster/raster_vs2005.vcproj | 2 +- OfficeCryptReader/source/CryptTransform.cpp | 26 ---------- PdfReader/PdfReader.vcproj | 2 +- PdfReader/PdfReaderTest/PdfReaderTest.cpp | 2 + PdfReader/PdfReaderTest/PdfReaderTest.sln | 19 ------- PdfReader/PdfReaderTest/PdfReaderTest.vcproj | 2 +- PdfReader/Src/Decrypt.cpp | 51 ++++++++++--------- PdfReader/Src/SecurityHandler.h | 5 -- 14 files changed, 39 insertions(+), 82 deletions(-) diff --git a/DesktopEditor/agg-2.4/agg_vs2005.vcproj b/DesktopEditor/agg-2.4/agg_vs2005.vcproj index 2d9e043d26..ba206541b2 100644 --- a/DesktopEditor/agg-2.4/agg_vs2005.vcproj +++ b/DesktopEditor/agg-2.4/agg_vs2005.vcproj @@ -51,7 +51,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;AGG_BMP_ALPHA_BLEND;_CRT_SECURE_NO_WARNINGS;_CRT_NON_CONFORMING_SWPRINTFS" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="1" + RuntimeLibrary="3" StructMemberAlignment="0" EnableEnhancedInstructionSet="0" PrecompiledHeaderFile="" diff --git a/DesktopEditor/cximage/CxImage/cximage_vs2005.vcproj b/DesktopEditor/cximage/CxImage/cximage_vs2005.vcproj index 7e23279071..7a8456e736 100644 --- a/DesktopEditor/cximage/CxImage/cximage_vs2005.vcproj +++ b/DesktopEditor/cximage/CxImage/cximage_vs2005.vcproj @@ -501,7 +501,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;JAS_WIN_MSVC_BUILD;_CRT_SECURE_NO_DEPRECATE" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="1" + RuntimeLibrary="3" EnableEnhancedInstructionSet="0" PrecompiledHeaderFile="" AssemblerListingLocation="$(ConfigurationName)\" diff --git a/DesktopEditor/fontengine/font_engine_vs2005.vcproj b/DesktopEditor/fontengine/font_engine_vs2005.vcproj index 57604eb6ad..653271131d 100644 --- a/DesktopEditor/fontengine/font_engine_vs2005.vcproj +++ b/DesktopEditor/fontengine/font_engine_vs2005.vcproj @@ -198,7 +198,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="1" + RuntimeLibrary="3" EnableEnhancedInstructionSet="0" PrecompiledHeaderFile="" AssemblerListingLocation="$(ConfigurationName)\" diff --git a/DesktopEditor/freetype-2.5.2/builds/windows/vc2005/freetype.vcproj b/DesktopEditor/freetype-2.5.2/builds/windows/vc2005/freetype.vcproj index 69655cb106..ab3dd5cfcb 100644 --- a/DesktopEditor/freetype-2.5.2/builds/windows/vc2005/freetype.vcproj +++ b/DesktopEditor/freetype-2.5.2/builds/windows/vc2005/freetype.vcproj @@ -501,7 +501,7 @@ PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="1" + RuntimeLibrary="3" EnableEnhancedInstructionSet="0" DisableLanguageExtensions="true" PrecompiledHeaderFile="" diff --git a/DesktopEditor/graphics/graphics_vs2005.vcproj b/DesktopEditor/graphics/graphics_vs2005.vcproj index 2eb1ef2993..a195faeaaa 100644 --- a/DesktopEditor/graphics/graphics_vs2005.vcproj +++ b/DesktopEditor/graphics/graphics_vs2005.vcproj @@ -214,7 +214,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;$(NOINHERIT)" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="1" + RuntimeLibrary="3" StructMemberAlignment="0" EnableEnhancedInstructionSet="0" DisableLanguageExtensions="false" diff --git a/DesktopEditor/graphics/pro/graphics.pro b/DesktopEditor/graphics/pro/graphics.pro index 4803a8ad55..55ff6c7c03 100644 --- a/DesktopEditor/graphics/pro/graphics.pro +++ b/DesktopEditor/graphics/pro/graphics.pro @@ -111,6 +111,7 @@ SOURCES += \ ./../GraphicsPath.cpp \ ./../../raster/BgraFrame.cpp \ ./../../raster/ImageFileFormatChecker.cpp \ + ./../../raster/Metafile/MetaFile.cpp \ \ ./../ArrowHead.cpp \ ./../Brush.cpp \ @@ -138,6 +139,7 @@ SOURCES += $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftbbox.c \ $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftlcdfil.c \ $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftmm.c \ $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftotval.c \ + $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftobjs.c \ $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftpatent.c \ $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftpfr.c \ $$LIB_GRAPHICS_PRI_PATH/freetype-2.5.2/src/base/ftsynth.c \ diff --git a/DesktopEditor/raster/raster_vs2005.vcproj b/DesktopEditor/raster/raster_vs2005.vcproj index 955e7538e9..5dfebe6c8e 100644 --- a/DesktopEditor/raster/raster_vs2005.vcproj +++ b/DesktopEditor/raster/raster_vs2005.vcproj @@ -495,7 +495,7 @@ PreprocessorDefinitions="WIN32;_DEBUG;_LIB;_CRT_SECURE_NO_DEPRECATE;$(NOINHERIT)" MinimalRebuild="true" BasicRuntimeChecks="3" - RuntimeLibrary="1" + RuntimeLibrary="3" EnableEnhancedInstructionSet="0" PrecompiledHeaderFile="" AssemblerListingLocation="$(ConfigurationName)\" diff --git a/OfficeCryptReader/source/CryptTransform.cpp b/OfficeCryptReader/source/CryptTransform.cpp index fc24d93a19..588b2ecc9a 100644 --- a/OfficeCryptReader/source/CryptTransform.cpp +++ b/OfficeCryptReader/source/CryptTransform.cpp @@ -978,15 +978,6 @@ bool ODFDecryptor::Decrypt(const std::wstring & wspassword, unsigned char* data_ bVerify = (pChecksum == pOutHash); -// test encrypt chipher - good !!; - //ODFEncryptor encryptor; - - //encryptor.SetCryptData(this->cryptData); - //data_out = new unsigned char[pOut.size]; - // - //encryptor.Encrypt(wspassword, pOut.ptr, pOut.size, data_out); - - try { if (bVerify) @@ -1042,26 +1033,9 @@ int ODFEncryptor::Encrypt (const std::wstring & wspassword, unsigned char* data, data_out = new unsigned char[size_out]; _buf pOut (data_out, size_out, false); - //_buf pOut (size_out); EncryptCipher(pKey, ivi, data_deflate, pOut, cryptData.cipherAlgorithm, bPadding ? StreamTransformationFilter::W3C_PADDING : StreamTransformationFilter::NO_PADDING); - - //int sz = 16, size_all = 0; - //while (true) - //{ - // if (size_all >= size_out) - // break; - - // _buf pInp(data_deflate.ptr + size_all, (std::min)(sz, data_deflate.size - size_all), false); - // _buf pOut1(data_out + size_all, sz, false); - // - // EncryptCipher(pKey, ivi, pInp, pOut1, cryptData.cipherAlgorithm, bPadding ? StreamTransformationFilter::W3C_PADDING : - // StreamTransformationFilter::NO_PADDING); - - // size_all += sz; - - //} return size_out; } diff --git a/PdfReader/PdfReader.vcproj b/PdfReader/PdfReader.vcproj index c1c8fe4755..51c394629c 100644 --- a/PdfReader/PdfReader.vcproj +++ b/PdfReader/PdfReader.vcproj @@ -40,7 +40,7 @@ 127) + sUserPassword = sUserPassword.substr(0, 127); CryptoPP::SHA256 hash; - hash.Update( (unsigned char*) sUserPassword.c_str(), len); + hash.Update( (unsigned char*) sUserPassword.c_str(), sUserPassword.length()); hash.Update( handler->m_seUserKey->GetUBuffer() + 32, 8); CryptoPP::SecByteBlock buffer(hash.DigestSize()); @@ -197,7 +200,7 @@ namespace PdfReader if ( handler->m_nEncryptRevision > 5 ) { - MakeFileKey3(sUserPassword, buffer.BytePtr(), buffer.SizeInBytes()); + MakeFileKey3(sUserPassword, buffer.BytePtr(), buffer.size()); } bValidate = (0 == memcmp(buffer.BytePtr(), handler->m_seUserKey->GetUBuffer(), 32)); @@ -212,11 +215,11 @@ namespace PdfReader if ( handler->m_nEncryptRevision > 5 ) { - MakeFileKey3(sUserPassword, buffer.BytePtr(), buffer.SizeInBytes()); + MakeFileKey3(sUserPassword, buffer.BytePtr(), buffer.size()); } - CryptoPP::AES::Decryption aesDecryption(buffer.BytePtr(), buffer.SizeInBytes()); - unsigned char empty[16] = {}; + memset(empty, 0, 16); + CryptoPP::AES::Decryption aesDecryption(buffer.BytePtr(), buffer.size()); CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, empty ); CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::ArraySink( (unsigned char*)handler->m_sFileKey, 32), CryptoPP::StreamTransformationFilter::NO_PADDING ); @@ -226,6 +229,8 @@ namespace PdfReader else { std::string sOwnerPassword = conv.SASLprepToUtf8(wsOwnerPassword); + if (sOwnerPassword.length() > 127) + sOwnerPassword = sOwnerPassword.substr(0, 127); hash.Update( (unsigned char*) sOwnerPassword.c_str(), sOwnerPassword.length()); hash.Update( handler->m_seOwnerKey->GetUBuffer() + 32, 8); @@ -236,7 +241,7 @@ namespace PdfReader if ( handler->m_nEncryptRevision > 5 ) { - MakeFileKey3(sOwnerPassword, buffer.BytePtr(), buffer.SizeInBytes(), handler->m_seUserKey->GetUBuffer(), 48); + MakeFileKey3(sOwnerPassword, buffer.BytePtr(), buffer.size(), handler->m_seUserKey->GetUBuffer(), 48); } bValidate = (0 == memcmp(buffer.BytePtr(), handler->m_seOwnerKey->GetUBuffer(), 32)); @@ -252,11 +257,10 @@ namespace PdfReader if ( handler->m_nEncryptRevision > 5 ) { - MakeFileKey3(sOwnerPassword, buffer.BytePtr(), buffer.SizeInBytes(), handler->m_seUserKey->GetUBuffer(), 48); + MakeFileKey3(sOwnerPassword, buffer.BytePtr(), buffer.size(), handler->m_seUserKey->GetUBuffer(), 48); } - - CryptoPP::AES::Decryption aesDecryption(buffer.BytePtr(), buffer.SizeInBytes()); - unsigned char empty[16] = {}; + memset(empty, 0, 16); + CryptoPP::AES::Decryption aesDecryption(buffer.BytePtr(), buffer.size()); CryptoPP::CBC_Mode_ExternalCipher::Decryption cbcDecryption( aesDecryption, empty ); CryptoPP::StreamTransformationFilter stfDecryptor(cbcDecryption, new CryptoPP::ArraySink( (unsigned char*)handler->m_sFileKey, 32), CryptoPP::StreamTransformationFilter::NO_PADDING ); @@ -273,8 +277,7 @@ namespace PdfReader { if (!pHash) return false; - int len = sPassword.length() < 127 ? sPassword.length() : 127; - int size = 64 * (len + 64 + nHashSize2); // max + int size = 64 * (sPassword.length() + 64 + nHashSize2); // max unsigned char K[64]; //max size sha unsigned char *K1 = new unsigned char[size]; @@ -292,19 +295,19 @@ namespace PdfReader size = 0; for (int i = 0; i < 64; i++) { - memcpy(K1 + size, sPassword.c_str(), len); size += len; - memcpy(K1 + size, K, hash_size); size += hash_size; + memcpy(K1 + size, sPassword.c_str(), sPassword.length()); size += sPassword.length(); + memcpy(K1 + size, K, hash_size); size += hash_size; if (pHash2) { memcpy(K1 + size, pHash2, nHashSize2); size += nHashSize2; } } + CryptoPP::AES::Encryption aesEncryption(key, key.size()); + CryptoPP::CBC_Mode_ExternalCipher::Encryption cbcEncryption( aesEncryption, iv); - CryptoPP::CBC_Mode< CryptoPP::AES >::Encryption encryption; - encryption.SetKeyWithIV( key, key.size(), iv ); - - CryptoPP::StreamTransformationFilter stfEncryption(encryption, new CryptoPP::ArraySink( E, size), CryptoPP::StreamTransformationFilter::NO_PADDING ); - stfEncryption.Put2(K1, size, 1, true); + CryptoPP::StreamTransformationFilter stfEncryption(cbcEncryption, new CryptoPP::ArraySink( E, size), CryptoPP::StreamTransformationFilter::NO_PADDING); + + stfEncryption.Put( K1, size); stfEncryption.MessageEnd(); //---------------------------------------------------------- int E_mod_3 = 0; diff --git a/PdfReader/Src/SecurityHandler.h b/PdfReader/Src/SecurityHandler.h index 73fa9fdb06..b68180dea0 100644 --- a/PdfReader/Src/SecurityHandler.h +++ b/PdfReader/Src/SecurityHandler.h @@ -52,11 +52,6 @@ namespace PdfReader SecurityHandler(PDFDoc *pDocument); virtual ~SecurityHandler(); - // Проверяем шифрованный ли документ. Если документ шифрованный, тогда сначала продуем использовать и - // . Если оба пароля не подходят, тогда запрашиваем пароль у пользователя (не более 3-х раз). - // Возвращаемые значения: - // True, если документ может быть открыт( либо он вообще не зашифрован, либо пароль верный) - // False, в противном случае ( документ зашрифован, а пароль неверный). bool CheckEncryption(const std::wstring &ownerPassword, const std::wstring &userPassword); // Пытаемся авторизоваться.