diff --git a/lib/vtls/curl_schannel.c b/lib/vtls/curl_schannel.c
index 64e79e1415104294654b6c98a794a92c4b906a41..e4e595eaa984fff9eea52a578fde139e0324ae4b 100644
--- a/lib/vtls/curl_schannel.c
+++ b/lib/vtls/curl_schannel.c
@@ -1215,6 +1215,23 @@ size_t Curl_schannel_version(char *buffer, size_t size)
   return size;
 }
 
+int Curl_schannel_random(unsigned char *entropy, size_t length)
+{
+  HCRYPTPROV hCryptProv = 0;
+
+  if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL,
+                          CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
+    return 1;
+
+  if(!CryptGenRandom(hCryptProv, (DWORD)length, entropy)) {
+    CryptReleaseContext(hCryptProv, 0UL);
+    return 1;
+  }
+
+  CryptReleaseContext(hCryptProv, 0UL);
+  return 0;
+}
+
 #ifdef _WIN32_WCE
 static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
 {
diff --git a/lib/vtls/curl_schannel.h b/lib/vtls/curl_schannel.h
index e9333179eace538f4df82f38dec6a463ce1977f5..aac25db83be46c3b20eaeedec11ff9d688c6a9a6 100644
--- a/lib/vtls/curl_schannel.h
+++ b/lib/vtls/curl_schannel.h
@@ -113,6 +113,8 @@ int Curl_schannel_init(void);
 void Curl_schannel_cleanup(void);
 size_t Curl_schannel_version(char *buffer, size_t size);
 
+int Curl_schannel_random(unsigned char *entropy, size_t length);
+
 /* API setup for Schannel */
 #define curlssl_init Curl_schannel_init
 #define curlssl_cleanup Curl_schannel_cleanup
@@ -129,5 +131,6 @@ size_t Curl_schannel_version(char *buffer, size_t size);
 #define curlssl_check_cxn(x) (x=x, -1)
 #define curlssl_data_pending Curl_schannel_data_pending
 #define CURL_SSL_BACKEND CURLSSLBACKEND_SCHANNEL
+#define curlssl_random(x,y,z) Curl_schannel_random(y,z)
 #endif /* USE_SCHANNEL */
 #endif /* HEADER_CURL_SCHANNEL_H */