Index: base/applications/mstsc/ssl_calls.c =================================================================== --- base/applications/mstsc/ssl_calls.c (revision 74568) +++ base/applications/mstsc/ssl_calls.c (working copy) @@ -59,7 +59,7 @@ return NULL; } ret = CryptAcquireContext(&info->hCryptProv, - NULL, + L"MSTSC", MS_ENHANCED_PROV, PROV_RSA_FULL, 0); @@ -66,6 +66,18 @@ if (!ret) { dwErr = GetLastError(); + if (dwErr == NTE_BAD_KEYSET) + { + ret = CryptAcquireContext(&info->hCryptProv, + L"MSTSC", + MS_ENHANCED_PROV, + PROV_RSA_FULL, + CRYPT_NEWKEYSET); + } + } + if (!ret) + { + dwErr = GetLastError(); error("CryptAcquireContext failed with %lx\n", dwErr); g_free(info); return NULL; @@ -214,7 +226,7 @@ return NULL; } ret = CryptAcquireContext(&info->hCryptProv, - NULL, + L"MSTSC", MS_ENHANCED_PROV, PROV_RSA_FULL, 0); @@ -221,6 +233,18 @@ if (!ret) { dwErr = GetLastError(); + if (dwErr == NTE_BAD_KEYSET) + { + ret = CryptAcquireContext(&info->hCryptProv, + L"MSTSC", + MS_ENHANCED_PROV, + PROV_RSA_FULL, + CRYPT_NEWKEYSET); + } + } + if (!ret) + { + dwErr = GetLastError(); g_free(info); error("CryptAcquireContext failed with %lx\n", dwErr); return NULL; @@ -451,7 +475,7 @@ return; } ret = CryptAcquireContext(&hCryptProv, - NULL, + L"MSTSC", MS_ENHANCED_PROV, PROV_RSA_FULL, 0); @@ -458,6 +482,18 @@ if (!ret) { dwErr = GetLastError(); + if (dwErr == NTE_BAD_KEYSET) + { + ret = CryptAcquireContext(&hCryptProv, + L"MSTSC", + MS_ENHANCED_PROV, + PROV_RSA_FULL, + CRYPT_NEWKEYSET); + } + } + if (!ret) + { + dwErr = GetLastError(); g_free(blob); error("CryptAcquireContext failed with %lx\n", dwErr); return; @@ -1566,9 +1602,13 @@ { return 1; } + md5 = rdssl_md5_info_create(); + if (!md5) + { + return 1; + } key = (char*)xmalloc(176); md5_final = (char*)xmalloc(64); - md5 = rdssl_md5_info_create(); // copy the test key memcpy(key, testkey, 176); // replace e and n