This commit is contained in:
ElenaSubbotina
2018-05-18 11:22:56 +03:00
parent 4079dea224
commit 1b7f35b317
14 changed files with 39 additions and 82 deletions

View File

@ -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=""

View File

@ -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)\"

View File

@ -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)\"

View File

@ -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=""

View File

@ -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"

View File

@ -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 \

View File

@ -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)\"

View File

@ -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;
}

View File

@ -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"

View File

@ -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

View File

@ -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

View File

@ -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"

View File

@ -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;

View File

@ -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);
// Пытаемся авторизоваться.