Module: wine Branch: master Commit: a19c8712917042361208b8a4a0a503e06815d20a URL: https://gitlab.winehq.org/wine/wine/-/commit/a19c8712917042361208b8a4a0a503e...
Author: Paul Gofman pgofman@codeweavers.com Date: Tue Jun 20 15:58:52 2023 -0600
crypt32: Do not create persistent container in CRYPT_CreateKeyProv().
---
dlls/crypt32/cert.c | 53 ++++++++++------------------------------------------- 1 file changed, 10 insertions(+), 43 deletions(-)
diff --git a/dlls/crypt32/cert.c b/dlls/crypt32/cert.c index b9645770ce1..ec3cf5b15ec 100644 --- a/dlls/crypt32/cert.c +++ b/dlls/crypt32/cert.c @@ -3682,54 +3682,21 @@ static void CRYPT_MakeCertInfo(PCERT_INFO info, const CRYPT_DATA_BLOB *pSerialNu } }
-typedef RPC_STATUS (RPC_ENTRY *UuidCreateFunc)(UUID *); -typedef RPC_STATUS (RPC_ENTRY *UuidToStringFunc)(UUID *, unsigned char **); -typedef RPC_STATUS (RPC_ENTRY *RpcStringFreeFunc)(unsigned char **); - static HCRYPTPROV CRYPT_CreateKeyProv(void) { - HCRYPTPROV hProv = 0; - HMODULE rpcrt = LoadLibraryW(L"rpcrt4"); - - if (rpcrt) - { - UuidCreateFunc uuidCreate = (UuidCreateFunc)GetProcAddress(rpcrt, - "UuidCreate"); - UuidToStringFunc uuidToString = (UuidToStringFunc)GetProcAddress(rpcrt, - "UuidToStringA"); - RpcStringFreeFunc rpcStringFree = (RpcStringFreeFunc)GetProcAddress( - rpcrt, "RpcStringFreeA"); - - if (uuidCreate && uuidToString && rpcStringFree) - { - UUID uuid; - RPC_STATUS status = uuidCreate(&uuid); - - if (status == RPC_S_OK || status == RPC_S_UUID_LOCAL_ONLY) - { - unsigned char *uuidStr; - - status = uuidToString(&uuid, &uuidStr); - if (status == RPC_S_OK) - { - BOOL ret = CryptAcquireContextA(&hProv, (LPCSTR)uuidStr, - MS_DEF_PROV_A, PROV_RSA_FULL, CRYPT_NEWKEYSET); + HCRYPTPROV prov; + HCRYPTKEY key;
- if (ret) - { - HCRYPTKEY key; + if (!CryptAcquireContextA(&prov, NULL, MS_DEF_PROV_A, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT | CRYPT_NEWKEYSET)) + return 0;
- ret = CryptGenKey(hProv, AT_SIGNATURE, 0, &key); - if (ret) - CryptDestroyKey(key); - } - rpcStringFree(&uuidStr); - } - } - } - FreeLibrary(rpcrt); + if (!CryptGenKey(prov, AT_SIGNATURE, 0, &key)) + { + CryptReleaseContext(prov, 0); + return 0; } - return hProv; + CryptDestroyKey(key); + return prov; }
PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hProv,