Hans Leidekker : msv1_0: Add support for SECPKG_ATTR_KEY_INFO.

Alexandre Julliard julliard at winehq.org
Tue Jul 12 16:51:39 CDT 2022


Module: wine
Branch: master
Commit: 7681c3580d06541ba2b97533d6f90b46f7136cf0
URL:    https://gitlab.winehq.org/wine/wine/-/commit/7681c3580d06541ba2b97533d6f90b46f7136cf0

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Jul  8 12:06:34 2022 +0200

msv1_0: Add support for SECPKG_ATTR_KEY_INFO.

---

 dlls/msv1_0/main.c | 38 +++++++++++++++++++++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/dlls/msv1_0/main.c b/dlls/msv1_0/main.c
index 77dcfa3b67d..8785754cd51 100644
--- a/dlls/msv1_0/main.c
+++ b/dlls/msv1_0/main.c
@@ -30,6 +30,7 @@
 #include "ntsecpkg.h"
 #include "rpc.h"
 #include "wincred.h"
+#include "wincrypt.h"
 #include "lmwksta.h"
 #include "lmapibuf.h"
 #include "lmerr.h"
@@ -1134,7 +1135,6 @@ static NTSTATUS NTAPI ntlm_SpQueryContextAttributes( LSA_SEC_HANDLE handle, ULON
     X(SECPKG_ATTR_ACCESS_TOKEN);
     X(SECPKG_ATTR_AUTHORITY);
     X(SECPKG_ATTR_DCE_INFO);
-    X(SECPKG_ATTR_KEY_INFO);
     X(SECPKG_ATTR_LIFESPAN);
     X(SECPKG_ATTR_NAMES);
     X(SECPKG_ATTR_NATIVE_NAMES);
@@ -1169,6 +1169,42 @@ static NTSTATUS NTAPI ntlm_SpQueryContextAttributes( LSA_SEC_HANDLE handle, ULON
         info->NegotiationState = SECPKG_NEGOTIATION_COMPLETE;
         return SEC_E_OK;
     }
+    case SECPKG_ATTR_KEY_INFO:
+    {
+        struct ntlm_ctx *ctx = (struct ntlm_ctx *)handle;
+        SecPkgContext_KeyInfoW *info = (SecPkgContext_KeyInfoW *)buf;
+        SEC_WCHAR *signature_alg;
+        ULONG signature_size, signature_algid;
+
+        if (ctx->flags & FLAG_NEGOTIATE_KEY_EXCHANGE)
+        {
+            signature_alg = (SEC_WCHAR *)L"HMAC-MD5";
+            signature_size = sizeof(L"HMAC-MD5");
+            signature_algid = 0xffffff76;
+        }
+        else
+        {
+            signature_alg = (SEC_WCHAR *)L"RSADSI RC4-CRC32";
+            signature_size = sizeof(L"RSADSI RC4-CRC32");
+            signature_algid = 0xffffff7c;
+        }
+
+        if (!(info->sSignatureAlgorithmName = RtlAllocateHeap( GetProcessHeap(), 0, signature_size )))
+            return SEC_E_INSUFFICIENT_MEMORY;
+        wcscpy( info->sSignatureAlgorithmName, signature_alg );
+
+        if (!(info->sEncryptAlgorithmName = RtlAllocateHeap( GetProcessHeap(), 0, sizeof(L"RSADSI RC4") )))
+        {
+            RtlFreeHeap( GetProcessHeap(), 0, info->sSignatureAlgorithmName );
+            return SEC_E_INSUFFICIENT_MEMORY;
+        }
+        wcscpy( info->sEncryptAlgorithmName, L"RSADSI RC4" );
+
+        info->KeySize = sizeof(ctx->session_key) * 8;
+        info->SignatureAlgorithm = signature_algid;
+        info->EncryptAlgorithm = CALG_RC4;
+        return SEC_E_OK;
+    }
 #undef X
     default:
         FIXME( "unknown attribute %lu\n", attr );




More information about the wine-cvs mailing list