Skip to content

Commit 43e4088

Browse files
authored
Fix #8187 - Performance regression in generating of UUID values after introducing GUID-v7 (#8188)
Replacing deprecated win32 crypto functions.
1 parent a62ac95 commit 43e4088

File tree

2 files changed

+4
-29
lines changed

2 files changed

+4
-29
lines changed

builds/win32/msvc15/FirebirdCommon.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
<GenerateDebugInformation>true</GenerateDebugInformation>
3535
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
3636
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
37-
<AdditionalDependencies>psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
37+
<AdditionalDependencies>bcrypt.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
3838
<AdditionalLibraryDirectories>../../../extern/re2/builds/$(PlatformName)/$(Configuration)</AdditionalLibraryDirectories>
3939
</Link>
4040
<Bscmake>

src/common/os/win32/guid.cpp

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
#endif
3333

3434
#include <windows.h>
35-
#include <wincrypt.h>
35+
#include <bcrypt.h>
3636
#include <objbase.h>
3737
#include <stdio.h>
3838

@@ -45,33 +45,8 @@ namespace Firebird {
4545

4646
void GenerateRandomBytes(void* buffer, FB_SIZE_T size)
4747
{
48-
HCRYPTPROV hProv;
49-
50-
// Acquire crypto-provider context handle.
51-
if (! CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
52-
{
53-
if (GetLastError() == NTE_BAD_KEYSET)
54-
{
55-
// A common cause of this error is that the key container does not exist.
56-
// To create a key container, call CryptAcquireContext
57-
// using the CRYPT_NEWKEYSET flag.
58-
if (! CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL,
59-
CRYPT_VERIFYCONTEXT | CRYPT_NEWKEYSET))
60-
{
61-
Firebird::system_call_failed::raise("CryptAcquireContext");
62-
}
63-
}
64-
else
65-
{
66-
Firebird::system_call_failed::raise("CryptAcquireContext");
67-
}
68-
}
69-
70-
if (! CryptGenRandom(hProv, size, static_cast<UCHAR*>(buffer)))
71-
{
72-
Firebird::system_call_failed::raise("CryptGenRandom");
73-
}
74-
CryptReleaseContext(hProv, 0);
48+
if (BCryptGenRandom(nullptr, static_cast<UCHAR*>(buffer), size, BCRYPT_USE_SYSTEM_PREFERRED_RNG) != S_OK)
49+
Firebird::system_call_failed::raise("BCryptGenRandom");
7550
}
7651

7752
void GenerateGuid(UUID* guid)

0 commit comments

Comments
 (0)