From: Hans Leidekker hans@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53966 --- dlls/ncrypt/main.c | 27 +++++++++++++++++++++++++++ dlls/ncrypt/ncrypt.spec | 2 +- include/ncrypt.h | 5 ++++- 3 files changed, 32 insertions(+), 2 deletions(-)
diff --git a/dlls/ncrypt/main.c b/dlls/ncrypt/main.c index 89fbfcb795a..6f79985108d 100644 --- a/dlls/ncrypt/main.c +++ b/dlls/ncrypt/main.c @@ -413,6 +413,33 @@ SECURITY_STATUS WINAPI NCryptImportKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_H return ERROR_SUCCESS; }
+SECURITY_STATUS WINAPI NCryptExportKey(NCRYPT_KEY_HANDLE key, NCRYPT_KEY_HANDLE encrypt_key, const WCHAR *type, + NCryptBufferDesc *params, BYTE *output, DWORD output_len, DWORD *ret_len, + DWORD flags) +{ + struct object *object = (struct object *)key; + + TRACE("(%#Ix, %#Ix, %s, %p, %p, %lu, %p, %#lx)\n", key, encrypt_key, wine_dbgstr_w(type), params, output, + output_len, ret_len, flags); + + if (encrypt_key) + { + FIXME("Key blob encryption not implemented\n"); + return NTE_NOT_SUPPORTED; + } + if (params) + { + FIXME("Parameter information not implemented\n"); + return NTE_NOT_SUPPORTED; + } + if (flags == NCRYPT_SILENT_FLAG) + { + FIXME("Silent flag not implemented\n"); + } + + return map_ntstatus(BCryptExportKey(object->key.bcrypt_key, NULL, type, output, output_len, ret_len, 0)); +} + SECURITY_STATUS WINAPI NCryptIsAlgSupported(NCRYPT_PROV_HANDLE provider, const WCHAR *algid, DWORD flags) { static const ULONG supported = BCRYPT_CIPHER_OPERATION |\ diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec index 60b367260d5..99fb9a59ee4 100644 --- a/dlls/ncrypt/ncrypt.spec +++ b/dlls/ncrypt/ncrypt.spec @@ -70,7 +70,7 @@ @ stdcall NCryptEnumAlgorithms(long long ptr ptr long) @ stdcall NCryptEnumKeys(long wstr ptr ptr long) @ stub NCryptEnumStorageProviders -@ stub NCryptExportKey +@ stdcall NCryptExportKey(long long wstr ptr ptr long ptr long) @ stdcall NCryptFinalizeKey(long long) @ stdcall NCryptFreeBuffer(ptr) @ stdcall NCryptFreeObject(long) diff --git a/include/ncrypt.h b/include/ncrypt.h index 18198fdc5bb..bd77c692fc6 100644 --- a/include/ncrypt.h +++ b/include/ncrypt.h @@ -110,9 +110,12 @@ typedef ULONG_PTR NCRYPT_SECRET_HANDLE; #define NCRYPT_SCARD_PIN_ID L"SmartCardPinId" #define NCRYPT_SCARD_PIN_INFO L"SmartCardPinInfo"
-SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, const WCHAR *, DWORD, DWORD); +SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, const WCHAR *, + DWORD, DWORD); SECURITY_STATUS WINAPI NCryptDecrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE, BYTE *, DWORD, void *, BYTE *, DWORD, DWORD *, DWORD); +SECURITY_STATUS WINAPI NCryptExportKey(NCRYPT_KEY_HANDLE, NCRYPT_KEY_HANDLE, const WCHAR *, NCryptBufferDesc *, BYTE *, + DWORD, DWORD *, DWORD); SECURITY_STATUS WINAPI NCryptFinalizeKey(NCRYPT_KEY_HANDLE, DWORD); SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE); SECURITY_STATUS WINAPI NCryptGetProperty(NCRYPT_HANDLE, const WCHAR *, BYTE *, DWORD, DWORD *, DWORD);
From: Hans Leidekker hans@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53968 --- dlls/ncrypt/main.c | 14 ++++++++++++++ dlls/ncrypt/ncrypt.spec | 2 +- include/ncrypt.h | 1 + 3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/dlls/ncrypt/main.c b/dlls/ncrypt/main.c index 6f79985108d..fa2eff49774 100644 --- a/dlls/ncrypt/main.c +++ b/dlls/ncrypt/main.c @@ -525,6 +525,20 @@ SECURITY_STATUS WINAPI NCryptSetProperty(NCRYPT_HANDLE handle, const WCHAR *name return set_object_property(object, name, input, insize); }
+SECURITY_STATUS WINAPI NCryptSignHash(NCRYPT_KEY_HANDLE handle, void *padding, BYTE *value, DWORD value_len, + BYTE *sig, DWORD sig_len, DWORD *ret_len, DWORD flags) +{ + struct object *object = (struct object *)handle; + + TRACE("(%#Ix, %p, %p, %lu, %p, %lu, %#lx)\n", handle, padding, value, value_len, sig, sig_len, flags); + if (flags & NCRYPT_SILENT_FLAG) FIXME("Silent flag not implemented\n"); + + if (!object || object->type != KEY) return NTE_INVALID_HANDLE; + + return map_ntstatus(BCryptSignHash(object->key.bcrypt_key, padding, value, value_len, sig, sig_len, + ret_len, flags & ~NCRYPT_SILENT_FLAG)); +} + SECURITY_STATUS WINAPI NCryptVerifySignature(NCRYPT_KEY_HANDLE handle, void *padding, BYTE *hash, DWORD hash_size, BYTE *signature, DWORD signature_size, DWORD flags) { diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec index 99fb9a59ee4..f4755098429 100644 --- a/dlls/ncrypt/ncrypt.spec +++ b/dlls/ncrypt/ncrypt.spec @@ -91,7 +91,7 @@ @ stub NCryptSecretAgreement @ stub NCryptSetAuditingInterface @ stdcall NCryptSetProperty(ptr wstr ptr long long) -@ stub NCryptSignHash +@ stdcall NCryptSignHash(long ptr ptr long ptr long ptr long) @ stub NCryptStreamClose @ stub NCryptStreamOpenToProtect @ stub NCryptStreamOpenToUnprotect diff --git a/include/ncrypt.h b/include/ncrypt.h index bd77c692fc6..9fc2cb5b171 100644 --- a/include/ncrypt.h +++ b/include/ncrypt.h @@ -125,6 +125,7 @@ SECURITY_STATUS WINAPI NCryptIsAlgSupported(NCRYPT_PROV_HANDLE, const WCHAR *, D 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); +SECURITY_STATUS WINAPI NCryptSignHash(NCRYPT_KEY_HANDLE, void *, BYTE *, DWORD, BYTE *, DWORD, DWORD *, DWORD); SECURITY_STATUS WINAPI NCryptVerifySignature(NCRYPT_KEY_HANDLE, void *, BYTE *, DWORD, BYTE *, DWORD, DWORD);
#ifdef __cplusplus