mirror of
https://github.com/ONLYOFFICE/core.git
synced 2026-02-10 18:05:41 +08:00
.
This commit is contained in:
@ -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=""
|
||||
|
||||
@ -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)\"
|
||||
|
||||
@ -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)\"
|
||||
|
||||
@ -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=""
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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 \
|
||||
|
||||
@ -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)\"
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_LIB;CRYPTOPP_DISABLE_ASM"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
|
||||
@ -53,11 +53,13 @@
|
||||
#pragma comment(lib, "../../build/lib/win_32/DEBUG/graphics.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/DEBUG/kernel.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/DEBUG/UnicodeConverter.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/DEBUG/CryptoPPLib.lib")
|
||||
#else
|
||||
#pragma comment(lib, "../../build/lib/win_32/HtmlRenderer.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/graphics.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/kernel.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/UnicodeConverter.lib")
|
||||
#pragma comment(lib, "../../build/lib/win_32/CryptoPPLib.lib")
|
||||
#endif
|
||||
#pragma comment(lib, "../../build/bin/icu/win_32/icuuc.lib")
|
||||
#endif
|
||||
|
||||
@ -4,13 +4,10 @@ Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PdfReaderTest", "PdfReaderTest.vcproj", "{5F337F52-E630-456E-9081-730A62A89684}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{62C7E428-E07C-4C13-A92B-2536D6442C9D} = {62C7E428-E07C-4C13-A92B-2536D6442C9D}
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF} = {3423EC9A-52E4-4A4D-9753-EDEBC38785EF}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PdfReader", "..\PdfReader.vcproj", "{62C7E428-E07C-4C13-A92B-2536D6442C9D}"
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "cryptlib", "..\..\Common\3dParty\cryptopp\cryptlib.vcproj", "{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
@ -47,22 +44,6 @@ Global
|
||||
{62C7E428-E07C-4C13-A92B-2536D6442C9D}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{62C7E428-E07C-4C13-A92B-2536D6442C9D}.Release|Win32.Build.0 = Release|Win32
|
||||
{62C7E428-E07C-4C13-A92B-2536D6442C9D}.Release|x64.ActiveCfg = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Debug|x64.Build.0 = Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|Win32.ActiveCfg = DLL-Import Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|Win32.Build.0 = DLL-Import Debug|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|x64.ActiveCfg = DLL-Import Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Debug|x64.Build.0 = DLL-Import Debug|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|Win32.ActiveCfg = DLL-Import Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|Win32.Build.0 = DLL-Import Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|x64.ActiveCfg = DLL-Import Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.DLL-Import Release|x64.Build.0 = DLL-Import Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|Win32.Build.0 = Release|Win32
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|x64.ActiveCfg = Release|x64
|
||||
{3423EC9A-52E4-4A4D-9753-EDEBC38785EF}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="../../DesktopEditor/xml/libxml2/include;../../DesktopEditor/xml/build/vs2005;../../DesktopEditor/freetype-2.5.2/include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE;CRYPTOPP_DISABLE_ASM"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
|
||||
@ -54,7 +54,7 @@ namespace PdfReader
|
||||
CryptoPP::SecByteBlock buffer(hash.DigestSize());
|
||||
hash.Final(buffer);
|
||||
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.SizeInBytes());
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.size());
|
||||
return;
|
||||
}
|
||||
static int SHA(int type, unsigned char *sMessage, int nMessageLen, unsigned char *sDigest)
|
||||
@ -71,7 +71,7 @@ namespace PdfReader
|
||||
CryptoPP::SecByteBlock buffer(res = hash.DigestSize());
|
||||
hash.Final(buffer);
|
||||
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.SizeInBytes());
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.size());
|
||||
}break;
|
||||
case 1:
|
||||
case 384:
|
||||
@ -82,7 +82,7 @@ namespace PdfReader
|
||||
CryptoPP::SecByteBlock buffer(res = hash.DigestSize());
|
||||
hash.Final(buffer);
|
||||
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.SizeInBytes());
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.size());
|
||||
}break;
|
||||
case 2:
|
||||
case 512:
|
||||
@ -93,7 +93,7 @@ namespace PdfReader
|
||||
CryptoPP::SecByteBlock buffer(res = hash.DigestSize());
|
||||
hash.Final(buffer);
|
||||
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.SizeInBytes());
|
||||
memcpy(sDigest, buffer.BytePtr(), buffer.size());
|
||||
}break;
|
||||
}
|
||||
return res;
|
||||
@ -182,14 +182,17 @@ namespace PdfReader
|
||||
else
|
||||
{
|
||||
bool bValidate = false;
|
||||
unsigned char empty[16];
|
||||
|
||||
NSUnicodeConverter::CUnicodeConverter conv;
|
||||
std::string sUserPassword = conv.SASLprepToUtf8(wsUserPassword);
|
||||
int len = sUserPassword.length() < 127 ? sUserPassword.length() : 127;
|
||||
|
||||
if (sUserPassword.length() > 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;
|
||||
|
||||
@ -52,11 +52,6 @@ namespace PdfReader
|
||||
SecurityHandler(PDFDoc *pDocument);
|
||||
virtual ~SecurityHandler();
|
||||
|
||||
// Проверяем шифрованный ли документ. Если документ шифрованный, тогда сначала продуем использовать <seOwnerPassword> и
|
||||
// <seUserPassword>. Если оба пароля не подходят, тогда запрашиваем пароль у пользователя (не более 3-х раз).
|
||||
// Возвращаемые значения:
|
||||
// True, если документ может быть открыт( либо он вообще не зашифрован, либо пароль верный)
|
||||
// False, в противном случае ( документ зашрифован, а пароль неверный).
|
||||
bool CheckEncryption(const std::wstring &ownerPassword, const std::wstring &userPassword);
|
||||
|
||||
// Пытаемся авторизоваться.
|
||||
|
||||
Reference in New Issue
Block a user