Juan Lang : crypt32: Add a stub decode message implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Jul 10 08:02:39 CDT 2007
Module: wine
Branch: master
Commit: 656d960dd4b01e1ef1f293e1214f8b1629c7c2e6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=656d960dd4b01e1ef1f293e1214f8b1629c7c2e6
Author: Juan Lang <juan.lang at gmail.com>
Date: Mon Jul 9 11:20:34 2007 -0700
crypt32: Add a stub decode message implementation.
---
dlls/crypt32/msg.c | 43 +++++++++++++++++++++++++++++++++++++++++--
dlls/crypt32/tests/msg.c | 15 +++++----------
2 files changed, 46 insertions(+), 12 deletions(-)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 7c7a8e0..dbe14b5 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -244,11 +244,43 @@ HCRYPTMSG WINAPI CryptMsgOpenToEncode(DWORD dwMsgEncodingType, DWORD dwFlags,
return msg;
}
+typedef struct _CDecodeMsg
+{
+ CryptMsgBase base;
+ DWORD type;
+ HCRYPTPROV crypt_prov;
+} CDecodeMsg;
+
+static void CDecodeMsg_Close(HCRYPTMSG hCryptMsg)
+{
+ CDecodeMsg *msg = (CDecodeMsg *)hCryptMsg;
+
+ if (msg->base.open_flags & CMSG_CRYPT_RELEASE_CONTEXT_FLAG)
+ CryptReleaseContext(msg->crypt_prov, 0);
+}
+
+static BOOL CDecodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
+ DWORD cbData, BOOL fFinal)
+{
+ FIXME("(%p, %p, %d, %d): stub\n", hCryptMsg, pbData, cbData, fFinal);
+ return FALSE;
+}
+
+static BOOL CDecodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
+ DWORD dwIndex, void *pvData, DWORD *pcbData)
+{
+ FIXME("(%p, %d, %d, %p, %p): stub\n", hCryptMsg, dwParamType, dwIndex,
+ pvData, pcbData);
+ return FALSE;
+}
+
HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
DWORD dwMsgType, HCRYPTPROV hCryptProv, PCERT_INFO pRecipientInfo,
PCMSG_STREAM_INFO pStreamInfo)
{
- FIXME("(%08x, %08x, %08x, %08lx, %p, %p): stub\n", dwMsgEncodingType,
+ CDecodeMsg *msg;
+
+ TRACE("(%08x, %08x, %08x, %08lx, %p, %p)\n", dwMsgEncodingType,
dwFlags, dwMsgType, hCryptProv, pRecipientInfo, pStreamInfo);
if (GET_CMSG_ENCODING_TYPE(dwMsgEncodingType) != PKCS_7_ASN_ENCODING)
@@ -256,7 +288,14 @@ HCRYPTMSG WINAPI CryptMsgOpenToDecode(DWORD dwMsgEncodingType, DWORD dwFlags,
SetLastError(E_INVALIDARG);
return NULL;
}
- return NULL;
+ msg = CryptMemAlloc(sizeof(CDecodeMsg));
+ if (msg)
+ {
+ CryptMsgBase_Init((CryptMsgBase *)msg, dwFlags, pStreamInfo,
+ CDecodeMsg_Close, CDecodeMsg_GetParam, CDecodeMsg_Update);
+ msg->type = dwMsgType;
+ }
+ return msg;
}
HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg)
diff --git a/dlls/crypt32/tests/msg.c b/dlls/crypt32/tests/msg.c
index 2b0bc18..be1963e 100644
--- a/dlls/crypt32/tests/msg.c
+++ b/dlls/crypt32/tests/msg.c
@@ -95,7 +95,6 @@ static void test_msg_open_to_decode(void)
/* The message type can be explicit... */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, 0, NULL,
NULL);
- todo_wine {
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_ENVELOPED, 0, NULL,
@@ -125,7 +124,6 @@ static void test_msg_open_to_decode(void)
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 1000, 0, NULL, NULL);
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
- }
CryptMsgClose(msg);
/* And even though the stream info parameter "must be set to NULL" for
@@ -133,7 +131,6 @@ static void test_msg_open_to_decode(void)
*/
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
&streamInfo);
- todo_wine
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
CryptMsgClose(msg);
}
@@ -154,7 +151,6 @@ static void test_msg_get_param(void)
/* Decoded messages */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 0, 0, NULL, NULL);
- todo_wine
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
/* For decoded messages, the type is always available */
size = 0;
@@ -171,7 +167,6 @@ static void test_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_DATA, 0, NULL,
NULL);
- todo_wine
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
/* For explicitly typed messages, the type is known. */
size = sizeof(value);
@@ -190,10 +185,10 @@ static void test_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_ENVELOPED, 0, NULL,
NULL);
- todo_wine {
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, (LPBYTE)&value, &size);
+ todo_wine {
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_ENVELOPED, "Expected CMSG_ENVELOPED, got %d\n", value);
}
@@ -207,10 +202,10 @@ static void test_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_HASHED, 0, NULL,
NULL);
- todo_wine {
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, (LPBYTE)&value, &size);
+ todo_wine {
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_HASHED, "Expected CMSG_HASHED, got %d\n", value);
}
@@ -224,10 +219,10 @@ static void test_msg_get_param(void)
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_SIGNED, 0, NULL,
NULL);
- todo_wine {
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, (LPBYTE)&value, &size);
+ todo_wine {
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_SIGNED, "Expected CMSG_SIGNED, got %d\n", value);
}
@@ -242,20 +237,20 @@ static void test_msg_get_param(void)
/* Explicitly typed messages get their types set, even if they're invalid */
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, CMSG_ENCRYPTED, 0, NULL,
NULL);
- todo_wine {
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, (LPBYTE)&value, &size);
+ todo_wine {
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == CMSG_ENCRYPTED, "Expected CMSG_ENCRYPTED, got %d\n", value);
}
CryptMsgClose(msg);
msg = CryptMsgOpenToDecode(PKCS_7_ASN_ENCODING, 0, 1000, 0, NULL, NULL);
- todo_wine {
ok(msg != NULL, "CryptMsgOpenToDecode failed: %x\n", GetLastError());
size = sizeof(value);
ret = CryptMsgGetParam(msg, CMSG_TYPE_PARAM, 0, (LPBYTE)&value, &size);
+ todo_wine {
ok(ret, "CryptMsgGetParam failed: %x\n", GetLastError());
ok(value == 1000, "Expected 1000, got %d\n", value);
}
More information about the wine-cvs
mailing list