Skip to content

Commit a2f11e1

Browse files
committed
Windows: Fix link error in 32-bit build by removing crypto.lib reference and implementing sha512 using BCrypt API.
1 parent effabb4 commit a2f11e1

File tree

5 files changed

+83
-13
lines changed

5 files changed

+83
-13
lines changed

src/COMReg/COMReg.vcxproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
<Link>
6666
<SubSystem>Windows</SubSystem>
6767
<GenerateDebugInformation>true</GenerateDebugInformation>
68-
<AdditionalDependencies>..\Common\Debug\Zip.lib;..\Crypto\Debug\crypto.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
68+
<AdditionalDependencies>..\Common\Debug\Zip.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
6969
</Link>
7070
<PostBuildEvent>
7171
<Command>copy Debug\VeraCryptCOMRegBase.exe "..\Debug\Setup Files\VeraCryptCOMRegBase.exe"</Command>
@@ -88,8 +88,9 @@
8888
<GenerateDebugInformation>true</GenerateDebugInformation>
8989
<EnableCOMDATFolding>true</EnableCOMDATFolding>
9090
<OptimizeReferences>true</OptimizeReferences>
91-
<AdditionalDependencies>..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
91+
<AdditionalDependencies>..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
9292
<GenerateMapFile>true</GenerateMapFile>
93+
<DelayLoadDLLs>bcrypt.dll</DelayLoadDLLs>
9394
</Link>
9495
<PostBuildEvent>
9596
<Command>copy Release\VeraCryptCOMRegBase.exe "..\Release\Setup Files\VeraCryptCOMRegBase.exe"</Command>

src/Common/Dlgcode.c

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -868,6 +868,75 @@ BOOL TCCopyFile (wchar_t *sourceFileName, wchar_t *destinationFile)
868868
return TCCopyFileBase (src, dst);
869869
}
870870

871+
#if !defined(_WIN64) && defined(NDEBUG) && !defined (VC_SKIP_OS_DRIVER_REQ_CHECK)
872+
// in 32-bit build, Crypto project is not compiled so we need to provide this function here
873+
874+
#pragma comment(lib, "bcrypt.lib")
875+
876+
void sha512(unsigned char* result, const unsigned char* source, uint64_t sourceLen)
877+
{
878+
BCRYPT_ALG_HANDLE hAlg = NULL;
879+
BCRYPT_HASH_HANDLE hHash = NULL;
880+
NTSTATUS status = 0;
881+
882+
// Open an algorithm provider for SHA512.
883+
status = BCryptOpenAlgorithmProvider(
884+
&hAlg,
885+
BCRYPT_SHA512_ALGORITHM,
886+
NULL,
887+
0);
888+
if (!BCRYPT_SUCCESS(status))
889+
{
890+
goto cleanup;
891+
}
892+
893+
// Create a hash handle.
894+
status = BCryptCreateHash(
895+
hAlg,
896+
&hHash,
897+
NULL,
898+
0,
899+
NULL, // Optional secret, not needed for SHA512
900+
0,
901+
0);
902+
if (!BCRYPT_SUCCESS(status))
903+
{
904+
goto cleanup;
905+
}
906+
907+
// Hash the data. Note: BCryptHashData takes an ULONG for the length.
908+
status = BCryptHashData(
909+
hHash,
910+
(PUCHAR)source,
911+
(ULONG)sourceLen,
912+
0);
913+
if (!BCRYPT_SUCCESS(status))
914+
{
915+
goto cleanup;
916+
}
917+
918+
// Finalize the hash computation and write the result.
919+
status = BCryptFinishHash(
920+
hHash,
921+
result,
922+
SHA512_DIGESTSIZE,
923+
0);
924+
if (!BCRYPT_SUCCESS(status))
925+
{
926+
goto cleanup;
927+
}
928+
929+
cleanup:
930+
if (hHash)
931+
{
932+
BCryptDestroyHash(hHash);
933+
}
934+
if (hAlg)
935+
{
936+
BCryptCloseAlgorithmProvider(hAlg, 0);
937+
}
938+
}
939+
#endif
871940

872941
BOOL VerifyModuleSignature (const wchar_t* path)
873942
{

src/Setup/Portable.vcxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
</ClCompile>
108108
<Link>
109109
<AdditionalOptions>/NODEFAULTLIB:LIBCMTD %(AdditionalOptions)</AdditionalOptions>
110-
<AdditionalDependencies>libcmtd.lib;atls.lib;mpr.lib;..\Common\Debug\Zip.lib;..\Crypto\Debug\crypto.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
110+
<AdditionalDependencies>libcmtd.lib;atls.lib;mpr.lib;..\Common\Debug\Zip.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
111111
<OutputFile>$(OutDir)VeraCryptPortable.exe</OutputFile>
112112
<UACExecutionLevel>AsInvoker</UACExecutionLevel>
113113
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -147,7 +147,7 @@ copy PortableDebug\VeraCryptPortable.exe "..\Debug\Setup Files\VeraCrypt Portabl
147147
</ClCompile>
148148
<Link>
149149
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
150-
<AdditionalDependencies>atls.lib;mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
150+
<AdditionalDependencies>atls.lib;mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
151151
<OutputFile>$(OutDir)VeraCryptPortable.exe</OutputFile>
152152
<UACExecutionLevel>AsInvoker</UACExecutionLevel>
153153
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -185,7 +185,7 @@ copy PortableDebug\VeraCryptPortable.exe "..\Debug\Setup Files\VeraCrypt Portabl
185185
</ClCompile>
186186
<Link>
187187
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
188-
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
188+
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
189189
<OutputFile>$(OutDir)VeraCryptPortable.exe</OutputFile>
190190
<UACExecutionLevel>AsInvoker</UACExecutionLevel>
191191
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -223,7 +223,7 @@ copy PortableDebug\VeraCryptPortable.exe "..\Debug\Setup Files\VeraCrypt Portabl
223223
</ClCompile>
224224
<Link>
225225
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
226-
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
226+
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
227227
<OutputFile>$(OutDir)VeraCryptPortable.exe</OutputFile>
228228
<UACExecutionLevel>AsInvoker</UACExecutionLevel>
229229
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>

src/Setup/Setup.vcxproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
</ClCompile>
108108
<Link>
109109
<AdditionalOptions>/NODEFAULTLIB:LIBCMTD %(AdditionalOptions)</AdditionalOptions>
110-
<AdditionalDependencies>libcmtd.lib;atls.lib;mpr.lib;..\Common\Debug\Zip.lib;..\Crypto\Debug\crypto.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
110+
<AdditionalDependencies>libcmtd.lib;atls.lib;mpr.lib;..\Common\Debug\Zip.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
111111
<OutputFile>$(OutDir)VeraCryptSetup.exe</OutputFile>
112112
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
113113
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -148,7 +148,7 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
148148
</ClCompile>
149149
<Link>
150150
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
151-
<AdditionalDependencies>atls.lib;mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
151+
<AdditionalDependencies>atls.lib;mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
152152
<OutputFile>$(OutDir)VeraCryptSetup.exe</OutputFile>
153153
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
154154
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -186,7 +186,7 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
186186
</ClCompile>
187187
<Link>
188188
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
189-
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
189+
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
190190
<OutputFile>$(OutDir)VeraCryptSetup.exe</OutputFile>
191191
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
192192
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -224,7 +224,7 @@ copy Debug\VeraCryptSetup.exe "..\Debug\Setup Files\VeraCrypt Setup.exe" &gt;NUL
224224
</ClCompile>
225225
<Link>
226226
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
227-
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
227+
<AdditionalDependencies>mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
228228
<OutputFile>$(OutDir)VeraCryptSetup.exe</OutputFile>
229229
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
230230
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>

src/SetupDLL/SetupDLL.vcxproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
</ClCompile>
9090
<Link>
9191
<AdditionalOptions>/NODEFAULTLIB:LIBCMTD %(AdditionalOptions)</AdditionalOptions>
92-
<AdditionalDependencies>version.lib;msi.lib;libcmtd.lib;atls.lib;mpr.lib;..\Common\Debug\Zip.lib;..\Crypto\Debug\crypto.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
92+
<AdditionalDependencies>version.lib;msi.lib;libcmtd.lib;atls.lib;mpr.lib;..\Common\Debug\Zip.lib;..\Common\Debug\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
9393
<OutputFile>$(OutDir)VeraCryptSetup.dll</OutputFile>
9494
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
9595
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -130,7 +130,7 @@ copy Debug\VeraCryptSetup.dll "..\Debug\Setup Files\VeraCryptSetup.dll" &gt;NUL:
130130
</ClCompile>
131131
<Link>
132132
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
133-
<AdditionalDependencies>version.lib;atls.lib;msi.lib;mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
133+
<AdditionalDependencies>version.lib;atls.lib;msi.lib;mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
134134
<OutputFile>$(OutDir)VeraCryptSetup.dll</OutputFile>
135135
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
136136
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>
@@ -169,7 +169,7 @@ copy Debug\VeraCryptSetup.dll "..\Debug\Setup Files\VeraCryptSetup.dll" &gt;NUL:
169169
</ClCompile>
170170
<Link>
171171
<AdditionalOptions>/IGNORE:4089 %(AdditionalOptions)</AdditionalOptions>
172-
<AdditionalDependencies>version.lib;msi.lib;mpr.lib;..\Common\Release\Zip.lib;..\Crypto\Release\crypto.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
172+
<AdditionalDependencies>version.lib;msi.lib;mpr.lib;..\Common\Release\Zip.lib;..\Common\Release\lzma.lib;%(AdditionalDependencies)</AdditionalDependencies>
173173
<OutputFile>$(OutDir)VeraCryptSetup.exe</OutputFile>
174174
<UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
175175
<DelayLoadDLLs>mpr.dll;bcrypt.dll;user32.dll;gdi32.dll;advapi32.dll;shell32.dll;ole32.dll;oleaut32.dll;shlwapi.dll;setupapi.dll;wintrust.dll;comctl32.dll;%(DelayLoadDLLs)</DelayLoadDLLs>

0 commit comments

Comments
 (0)