diff --git a/dlls/bcrypt/bcrypt.spec b/dlls/bcrypt/bcrypt.spec index 4946ee5d794..1ea3760ba2a 100644 --- a/dlls/bcrypt/bcrypt.spec +++ b/dlls/bcrypt/bcrypt.spec @@ -17,14 +17,14 @@ @ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) @ stdcall BCryptEnumAlgorithms(long ptr ptr long) @ stub BCryptEnumContextFunctionProviders -@ stub BCryptEnumContextFunctions +@ stdcall BCryptEnumContextFunctions(long wstr long ptr ptr) @ stub BCryptEnumContexts @ stub BCryptEnumProviders @ stub BCryptEnumRegisteredProviders @ stdcall BCryptExportKey(ptr ptr wstr ptr long ptr long) @ stdcall BCryptFinalizeKeyPair(ptr long) @ stdcall BCryptFinishHash(ptr ptr long long) -@ stub BCryptFreeBuffer +@ stdcall BCryptFreeBuffer(ptr) @ stdcall BCryptGenRandom(ptr ptr long long) @ stdcall BCryptGenerateKeyPair(ptr ptr long long) @ stdcall BCryptGenerateSymmetricKey(ptr ptr ptr long ptr long long) diff --git a/dlls/bcrypt/bcrypt_main.c b/dlls/bcrypt/bcrypt_main.c index 399626d19be..86073bbab03 100644 --- a/dlls/bcrypt/bcrypt_main.c +++ b/dlls/bcrypt/bcrypt_main.c @@ -68,6 +68,18 @@ NTSTATUS WINAPI BCryptRemoveContextFunctionProvider(ULONG table, LPCWSTR context return STATUS_NOT_IMPLEMENTED; } +NTSTATUS WINAPI BCryptEnumContextFunctions( ULONG table, const WCHAR *ctx, ULONG iface, ULONG *buflen, + CRYPT_CONTEXT_FUNCTIONS **buffer ) +{ + FIXME( "%u, %s, %u, %p, %p\n", table, debugstr_w(ctx), iface, buflen, buffer ); + return STATUS_NOT_IMPLEMENTED; +} + +void WINAPI BCryptFreeBuffer( void *buffer ) +{ + FIXME( "%p\n", buffer ); +} + NTSTATUS WINAPI BCryptRegisterProvider(LPCWSTR provider, ULONG flags, PCRYPT_PROVIDER_REG reg) { FIXME("%s, %08x, %p: stub\n", debugstr_w(provider), flags, reg); diff --git a/dlls/bcrypt/tests/bcrypt.c b/dlls/bcrypt/tests/bcrypt.c index a8bc43ce3db..8e57d53e21f 100644 --- a/dlls/bcrypt/tests/bcrypt.c +++ b/dlls/bcrypt/tests/bcrypt.c @@ -23,6 +23,7 @@ #define WIN32_NO_STATUS #include #include +#include #include "wine/test.h" @@ -39,9 +40,11 @@ static NTSTATUS (WINAPI *pBCryptDuplicateHash)(BCRYPT_HASH_HANDLE, BCRYPT_HASH_H static NTSTATUS (WINAPI *pBCryptDuplicateKey)(BCRYPT_KEY_HANDLE, BCRYPT_KEY_HANDLE *, UCHAR *, ULONG, ULONG); static NTSTATUS (WINAPI *pBCryptEncrypt)(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); +static NTSTATUS (WINAPI *pBCryptEnumContextFunctions)(ULONG, const WCHAR *, ULONG, ULONG *, CRYPT_CONTEXT_FUNCTIONS **); static NTSTATUS (WINAPI *pBCryptExportKey)(BCRYPT_KEY_HANDLE, BCRYPT_KEY_HANDLE, LPCWSTR, PUCHAR, ULONG, ULONG *, ULONG); static NTSTATUS (WINAPI *pBCryptFinalizeKeyPair)(BCRYPT_KEY_HANDLE, ULONG); static NTSTATUS (WINAPI *pBCryptFinishHash)(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); +static void (WINAPI *pBCryptFreeBuffer)(void *); static NTSTATUS (WINAPI *pBCryptGenerateKeyPair)(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, ULONG, ULONG); static NTSTATUS (WINAPI *pBCryptGenerateSymmetricKey)(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); @@ -1896,6 +1899,19 @@ static void test_ECDH(void) pBCryptCloseAlgorithmProvider(alg, 0); } +static void test_BCryptEnumContextFunctions(void) +{ + static const WCHAR sslW[] = {'S','S','L',0}; + CRYPT_CONTEXT_FUNCTIONS *buffer; + NTSTATUS status; + ULONG buflen; + + buffer = NULL; + status = pBCryptEnumContextFunctions( CRYPT_LOCAL, sslW, NCRYPT_SCHANNEL_INTERFACE, &buflen, &buffer ); + todo_wine ok( status == STATUS_SUCCESS, "got %08x\n", status); + if (status == STATUS_SUCCESS) pBCryptFreeBuffer( buffer ); +} + START_TEST(bcrypt) { HMODULE module; @@ -1916,9 +1932,11 @@ START_TEST(bcrypt) pBCryptDuplicateHash = (void *)GetProcAddress(module, "BCryptDuplicateHash"); pBCryptDuplicateKey = (void *)GetProcAddress(module, "BCryptDuplicateKey"); pBCryptEncrypt = (void *)GetProcAddress(module, "BCryptEncrypt"); + pBCryptEnumContextFunctions = (void *)GetProcAddress(module, "BCryptEnumContextFunctions"); pBCryptExportKey = (void *)GetProcAddress(module, "BCryptExportKey"); pBCryptFinalizeKeyPair = (void *)GetProcAddress(module, "BCryptFinalizeKeyPair"); pBCryptFinishHash = (void *)GetProcAddress(module, "BCryptFinishHash"); + pBCryptFreeBuffer = (void *)GetProcAddress(module, "BCryptFreeBuffer"); pBCryptGenerateKeyPair = (void *)GetProcAddress(module, "BCryptGenerateKeyPair"); pBCryptGenerateSymmetricKey = (void *)GetProcAddress(module, "BCryptGenerateSymmetricKey"); pBCryptGenRandom = (void *)GetProcAddress(module, "BCryptGenRandom"); @@ -1946,6 +1964,7 @@ START_TEST(bcrypt) test_ECDSA(); test_RSA(); test_ECDH(); + test_BCryptEnumContextFunctions(); FreeLibrary(module); } diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec index d35f8a93167..dfe715db9c0 100644 --- a/dlls/ncrypt/ncrypt.spec +++ b/dlls/ncrypt/ncrypt.spec @@ -18,14 +18,14 @@ @ stdcall BCryptEncrypt(ptr ptr long ptr ptr long ptr long ptr long) bcrypt.BCryptEncrypt @ stdcall BCryptEnumAlgorithms(long ptr ptr long) bcrypt.BCryptEnumAlgorithms @ stub BCryptEnumContextFunctionProviders -@ stub BCryptEnumContextFunctions +@ stdcall BCryptEnumContextFunctions(long wstr long ptr ptr) bcrypt.BCryptEnumContextFunctions @ stub BCryptEnumContexts @ stub BCryptEnumProviders @ stub BCryptEnumRegisteredProviders @ stdcall BCryptExportKey(ptr ptr wstr ptr long ptr long) bcrypt.BCryptExportKey @ stdcall BCryptFinalizeKeyPair(ptr long) bcrypt.BCryptFinalizeKeyPair @ stdcall BCryptFinishHash(ptr ptr long long) bcrypt.BCryptFinishHash -@ stub BCryptFreeBuffer +@ stdcall BCryptFreeBuffer(ptr) bcrypt.BCryptFreeBuffer @ stdcall BCryptGenRandom(ptr ptr long long) bcrypt.BCryptGenRandom @ stdcall BCryptGenerateKeyPair(ptr ptr long long) bcrypt.BCryptGenerateKeyPair @ stdcall BCryptGenerateSymmetricKey(ptr ptr ptr long ptr long long) bcrypt.BCryptGenerateSymmetricKey diff --git a/include/bcrypt.h b/include/bcrypt.h index 0151afdc368..8947d130f9e 100644 --- a/include/bcrypt.h +++ b/include/bcrypt.h @@ -293,6 +293,15 @@ typedef PVOID BCRYPT_SECRET_HANDLE; /* Flags for BCryptCreateHash */ #define BCRYPT_HASH_REUSABLE_FLAG 0x00000020 +#define CRYPT_LOCAL 0x00000001 +#define CRYPT_DOMAIN 0x00000002 + +typedef struct _CRYPT_CONTEXT_FUNCTIONS +{ + ULONG cFunctions; + WCHAR **rgpszFunctions; +} CRYPT_CONTEXT_FUNCTIONS, *PCRYPT_CONTEXT_FUNCTIONS; + NTSTATUS WINAPI BCryptCloseAlgorithmProvider(BCRYPT_ALG_HANDLE, ULONG); NTSTATUS WINAPI BCryptCreateHash(BCRYPT_ALG_HANDLE, BCRYPT_HASH_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptDecrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); @@ -304,8 +313,10 @@ NTSTATUS WINAPI BCryptDestroySecret(BCRYPT_SECRET_HANDLE); NTSTATUS WINAPI BCryptDuplicateHash(BCRYPT_HASH_HANDLE, BCRYPT_HASH_HANDLE *, UCHAR *, ULONG, ULONG); NTSTATUS WINAPI BCryptEncrypt(BCRYPT_KEY_HANDLE, PUCHAR, ULONG, VOID *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG *, ULONG); NTSTATUS WINAPI BCryptEnumAlgorithms(ULONG, ULONG *, BCRYPT_ALGORITHM_IDENTIFIER **, ULONG); +NTSTATUS WINAPI BCryptEnumContextFunctions(ULONG, const WCHAR *, ULONG, ULONG *, CRYPT_CONTEXT_FUNCTIONS **); NTSTATUS WINAPI BCryptFinalizeKeyPair(BCRYPT_KEY_HANDLE, ULONG); NTSTATUS WINAPI BCryptFinishHash(BCRYPT_HASH_HANDLE, PUCHAR, ULONG, ULONG); +void WINAPI BCryptFreeBuffer(void *); NTSTATUS WINAPI BCryptGenerateKeyPair(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, ULONG, ULONG); NTSTATUS WINAPI BCryptGenerateSymmetricKey(BCRYPT_ALG_HANDLE, BCRYPT_KEY_HANDLE *, PUCHAR, ULONG, PUCHAR, ULONG, ULONG); NTSTATUS WINAPI BCryptGenRandom(BCRYPT_ALG_HANDLE, PUCHAR, ULONG, ULONG); diff --git a/include/ncrypt.h b/include/ncrypt.h index 2bfdae0652a..85ced7a2fb4 100644 --- a/include/ncrypt.h +++ b/include/ncrypt.h @@ -38,6 +38,11 @@ typedef ULONG_PTR NCRYPT_KEY_HANDLE; typedef ULONG_PTR NCRYPT_HASH_HANDLE; typedef ULONG_PTR NCRYPT_SECRET_HANDLE; +#define NCRYPT_KEY_STORAGE_INTERFACE 0x00010001 +#define NCRYPT_SCHANNEL_INTERFACE 0x00010002 +#define NCRYPT_SCHANNEL_SIGNATURE_INTERFACE 0x00010003 +#define NCRYPT_KEY_PROTECTION_INTERFACE 0x00010004 + 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);