[PATCH 1/2] ncrypt: Implement NCryptIsAlgSupported.
Mohamad Al-Jaf
mohamadaljaf at gmail.com
Tue Apr 5 00:23:55 CDT 2022
Microsoft Edge calls this function expecting an
implementation. Without it, Internet browsing
does not work.
Signed-off-by: Mohamad Al-Jaf <mohamadaljaf at gmail.com>
---
If you want to test this patch in Microsoft Edge, you have to wait
a few minutes after opening it before it becomes usable.
---
dlls/ncrypt/main.c | 24 ++++++++++++++++++++++--
dlls/ncrypt/ncrypt.spec | 2 +-
include/ncrypt.h | 1 +
3 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/dlls/ncrypt/main.c b/dlls/ncrypt/main.c
index cc979a539d2..912f7ef643e 100644
--- a/dlls/ncrypt/main.c
+++ b/dlls/ncrypt/main.c
@@ -415,8 +415,28 @@ SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_H
SECURITY_STATUS WINAPI NCryptIsAlgSupported(NCRYPT_PROV_HANDLE provider, const WCHAR *algid, DWORD flags)
{
- FIXME("(%#Ix, %s, %#lx): stub\n", provider, wine_dbgstr_w(algid), flags);
- return NTE_NOT_SUPPORTED;
+ NCRYPT_KEY_HANDLE key;
+ SECURITY_STATUS status;
+
+ TRACE("(%#Ix, %s, %#lx)\n", provider, wine_dbgstr_w(algid), flags);
+
+ if (!provider) return NTE_INVALID_HANDLE;
+ if (!algid) return HRESULT_FROM_WIN32(RPC_X_NULL_REF_POINTER);
+ if (flags == NCRYPT_SILENT_FLAG)
+ {
+ FIXME("Silent flag not implemented\n");
+ }
+ else if (flags)
+ {
+ ERR("Invalid flags %#lx\n", flags);
+ return NTE_BAD_FLAGS;
+ }
+
+ status = NCryptCreatePersistedKey(provider, &key, algid, NULL, 0, 0);
+ NCryptFinalizeKey(key, 0);
+ NCryptFreeObject(key);
+ NCryptFreeObject(provider);
+ return status;
}
BOOL WINAPI NCryptIsKeyHandle(NCRYPT_KEY_HANDLE hKey)
diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec
index bb914616373..60b367260d5 100644
--- a/dlls/ncrypt/ncrypt.spec
+++ b/dlls/ncrypt/ncrypt.spec
@@ -77,7 +77,7 @@
@ stdcall NCryptGetProperty(ptr wstr ptr long ptr long)
@ stub NCryptGetProtectionDescriptorInfo
@ stdcall NCryptImportKey(long long wstr ptr ptr ptr long long)
-@ stub NCryptIsAlgSupported(long wstr long)
+@ stdcall NCryptIsAlgSupported(long wstr long)
@ stdcall NCryptIsKeyHandle(long)
@ stub NCryptKeyDerivation
@ stub NCryptNotifyChangeKey
diff --git a/include/ncrypt.h b/include/ncrypt.h
index c09a1ec8676..18198fdc5bb 100644
--- a/include/ncrypt.h
+++ b/include/ncrypt.h
@@ -118,6 +118,7 @@ SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE);
SECURITY_STATUS WINAPI NCryptGetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD *, DWORD);
SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE, const WCHAR *, NCryptBufferDesc *,
NCRYPT_KEY_HANDLE *, BYTE *, DWORD, DWORD);
+SECURITY_STATUS WINAPI NCryptIsAlgSupported(NCRYPT_PROV_HANDLE, const WCHAR *, DWORD);
SECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, DWORD, DWORD);
SECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *, const WCHAR *, DWORD);
SECURITY_STATUS WINAPI NCryptSetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD);
--
2.35.1
More information about the wine-devel
mailing list