From: Austin English <austinenglish@gmail.com>
Subject: ncrypt: add some ncrypt stubs
Message-Id: <CACC5Q1deipV9WLsrEt0AEzJeWRKd6NDm0wmQ2ZhSS6+=7fxECQ@mail.gmail.com>
Date: Tue, 12 Jul 2016 01:29:32 -0500

Fixes https://bugs.winehq.org/show_bug.cgi?id=40887

-- 
-Austin
GPG: 14FB D7EA A041 937B

From cb00820bdda80b73eea735835fe54db6590de5f4 Mon Sep 17 00:00:00 2001
From: Austin English <austinenglish@gmail.com>
Date: Tue, 12 Jul 2016 00:46:20 -0500
Subject: [PATCH] ncrypt: add some ncrypt stubs

Signed-off-by: Austin English <austinenglish@gmail.com>
---
 dlls/ncrypt/main.c      | 44 ++++++++++++++++++++++++++++++++++++++++
 dlls/ncrypt/ncrypt.spec | 14 ++++++-------
 include/ncrypt.h        | 53 +++++++++++++++++++++++++++++++++++++++++++++++++
 include/winerror.h      | 10 ++++++++++
 4 files changed, 114 insertions(+), 7 deletions(-)
 create mode 100644 include/ncrypt.h

diff --git a/dlls/ncrypt/main.c b/dlls/ncrypt/main.c
index 9c09600..e827b41 100644
--- a/dlls/ncrypt/main.c
+++ b/dlls/ncrypt/main.c
@@ -26,6 +26,8 @@
 #include "winbase.h"
 #include "wine/debug.h"
 
+#include "ncrypt.h"
+
 WINE_DEFAULT_DEBUG_CHANNEL(ncrypt);
 
 BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
@@ -43,3 +45,45 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
 
     return TRUE;
 }
+
+SECURITY_STATUS WINAPI NCryptCreatePersistedKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_HANDLE *key,
+                                                const WCHAR *algid, const WCHAR *name, DWORD keyspec, DWORD flags)
+{
+    FIXME("(%lu %p %s %s %u 0x%08x): stub\n", provider, key, wine_dbgstr_w(algid), wine_dbgstr_w(name), keyspec, flags);
+    return NTE_INVALID_PARAMETER;
+}
+
+SECURITY_STATUS WINAPI NCryptDecrypt(NCRYPT_KEY_HANDLE key, BYTE *inaddress, DWORD insize, void *padding, BYTE *outaddress, DWORD outsize, DWORD *result, DWORD flags)
+{
+    FIXME("(%lu %p %u %p %p %u %p 0x%08x): stub\n", key, inaddress, insize, padding, outaddress, outsize, result, flags);
+    return NTE_INVALID_PARAMETER;
+}
+
+SECURITY_STATUS WINAPI NCryptEncrypt(NCRYPT_KEY_HANDLE key, BYTE *inaddress, DWORD insize, void *padding, BYTE *outaddress, DWORD outsize, DWORD *result, DWORD flags)
+{
+    FIXME("(%lu %p %u %p %p %u %p 0x%08x): stub\n", key, inaddress, insize, padding, outaddress, outsize, result, flags);
+    return NTE_INVALID_PARAMETER;
+}
+
+SECURITY_STATUS WINAPI NCryptFinalizeKey(NCRYPT_KEY_HANDLE key, DWORD flags)
+{
+    FIXME("(%lu 0x%08x): stub\n", key, flags);
+    return NTE_INVALID_PARAMETER;
+}
+SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE object)
+{
+    FIXME("(%lu): stub\n", object);
+    return NTE_INVALID_PARAMETER;
+}
+
+SECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE provider, NCRYPT_KEY_HANDLE *key, const WCHAR *name, DWORD keyspec, DWORD flags)
+{
+    FIXME("(%lu %p %s %u 0x%08x): stub\n", provider, key, wine_dbgstr_w(name), keyspec, flags);
+    return NTE_INVALID_PARAMETER;
+}
+
+SECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *provider, const WCHAR *name, DWORD flags)
+{
+    FIXME("(%p %s %u): stub\n", provider, wine_dbgstr_w(name), flags);
+    return NTE_INVALID_PARAMETER;
+}
diff --git a/dlls/ncrypt/ncrypt.spec b/dlls/ncrypt/ncrypt.spec
index 1322f1e..0412760 100644
--- a/dlls/ncrypt/ncrypt.spec
+++ b/dlls/ncrypt/ncrypt.spec
@@ -60,20 +60,20 @@
 @ stub NCryptCloseKeyProtector
 @ stub NCryptCloseProtectionDescriptor
 @ stub NCryptCreateClaim
-@ stub NCryptCreatePersistedKey
+@ stdcall NCryptCreatePersistedKey(long ptr wstr wstr long long)
 @ stub NCryptCreateProtectionDescriptor
-@ stub NCryptDecrypt
+@ stdcall NCryptDecrypt(long ptr long ptr ptr long ptr long)
 @ stub NCryptDeleteKey
 @ stub NCryptDeriveKey
 @ stub NCryptDuplicateKeyProtectorHandle
-@ stub NCryptEncrypt
+@ stdcall NCryptEncrypt(long ptr long ptr ptr long ptr long)
 @ stub NCryptEnumAlgorithms
 @ stub NCryptEnumKeys
 @ stub NCryptEnumStorageProviders
 @ stub NCryptExportKey
-@ stub NCryptFinalizeKey
+@ stdcall NCryptFinalizeKey(long long)
 @ stub NCryptFreeBuffer
-@ stub NCryptFreeObject
+@ stdcall NCryptFreeObject(long)
 @ stub NCryptGetProperty
 @ stub NCryptGetProtectionDescriptorInfo
 @ stub NCryptImportKey
@@ -81,9 +81,9 @@
 @ stub NCryptIsKeyHandle
 @ stub NCryptKeyDerivation
 @ stub NCryptNotifyChangeKey
-@ stub NCryptOpenKey
+@ stdcall NCryptOpenKey(long ptr wstr long long)
 @ stub NCryptOpenKeyProtector
-@ stub NCryptOpenStorageProvider
+@ stdcall NCryptOpenStorageProvider(ptr wstr long)
 @ stub NCryptProtectKey
 @ stub NCryptProtectSecret
 @ stub NCryptQueryProtectionDescriptorName
diff --git a/include/ncrypt.h b/include/ncrypt.h
new file mode 100644
index 0000000..a9dfaec
--- /dev/null
+++ b/include/ncrypt.h
@@ -0,0 +1,53 @@
+/*
+ *
+ * Copyright (c) 2016 Austin English
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+#ifndef __NCRYPT_H__
+#define __NCRYPT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef WINAPI
+#define WINAPI __stdcall
+#endif
+
+#ifndef __SECSTATUS_DEFINED__
+typedef LONG SECURITY_STATUS;
+#define __SECSTATUS_DEFINED__
+#endif
+
+typedef ULONG_PTR NCRYPT_HANDLE;
+typedef ULONG_PTR NCRYPT_PROV_HANDLE;
+typedef ULONG_PTR NCRYPT_KEY_HANDLE;
+typedef ULONG_PTR NCRYPT_HASH_HANDLE;
+typedef ULONG_PTR NCRYPT_SECRET_HANDLE;
+
+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 NCryptFinalizeKey(NCRYPT_KEY_HANDLE, DWORD)
+SECURITY_STATUS WINAPI NCryptFreeObject(NCRYPT_HANDLE)
+SECURITY_STATUS WINAPI NCryptOpenKey(NCRYPT_PROV_HANDLE, NCRYPT_KEY_HANDLE *, const WCHAR *, DWORD, DWORD)
+SECURITY_STATUS WINAPI NCryptOpenStorageProvider(NCRYPT_PROV_HANDLE *, const WCHAR *, DWORD);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __NCRYPT_H__ */
diff --git a/include/winerror.h b/include/winerror.h
index ba9e245..9c1b7f1 100644
--- a/include/winerror.h
+++ b/include/winerror.h
@@ -2639,6 +2639,16 @@ static inline HRESULT HRESULT_FROM_WIN32(unsigned int x)
 #define NTE_TOKEN_KEYSET_STORAGE_FULL                      _HRESULT_TYPEDEF_(0x80090023)
 #define NTE_TEMPORARY_PROFILE                              _HRESULT_TYPEDEF_(0x80090024)
 #define NTE_FIXEDPARAMETER                                 _HRESULT_TYPEDEF_(0x80090025)
+#define NTE_INVALID_HANDLE                                 _HRESULT_TYPEDEF_(0x80090026)
+#define NTE_INVALID_PARAMETER                              _HRESULT_TYPEDEF_(0x80090027)
+#define NTE_BUFFER_TOO_SMALL                               _HRESULT_TYPEDEF_(0x80090028)
+#define NTE_NOT_SUPPORTED                                  _HRESULT_TYPEDEF_(0x80090029)
+#define NTE_NO_MORE_ITEMS                                  _HRESULT_TYPEDEF_(0x8009002A)
+#define NTE_BUFFERS_OVERLAP                                _HRESULT_TYPEDEF_(0x8009002B)
+#define NTE_DECRYPTION_FAILURE                             _HRESULT_TYPEDEF_(0x8009002C)
+#define NTE_INTERNAL_ERROR                                 _HRESULT_TYPEDEF_(0x8009002D)
+#define NTE_UI_REQUIRED                                    _HRESULT_TYPEDEF_(0x8009002E)
+#define NTE_HMAC_NOT_SUPPORTED                             _HRESULT_TYPEDEF_(0x8009002F)
 #define NTE_OP_OK                                          _HRESULT_TYPEDEF_(0)
 
 #define SEC_E_INSUFFICIENT_MEMORY                          _HRESULT_TYPEDEF_(0x80090300)

-- 
2.7.3