crypt32(3/8): Test and implement CryptGetMessageSignerCount
Juan Lang
juan.lang at gmail.com
Tue Aug 21 17:19:56 CDT 2007
--Juan
-------------- next part --------------
From 2fce74f33bdb5bc3321f747e66119a9ae36da540 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Tue, 21 Aug 2007 15:12:35 -0700
Subject: [PATCH] Test and implement CryptGetMessageSignerCount
---
dlls/crypt32/crypt32.spec | 2 +-
dlls/crypt32/msg.c | 22 ++++++++++++++++++++++
dlls/crypt32/tests/msg.c | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 63 insertions(+), 1 deletions(-)
diff --git a/dlls/crypt32/crypt32.spec b/dlls/crypt32/crypt32.spec
index 12e1223..7403ca2 100644
--- a/dlls/crypt32/crypt32.spec
+++ b/dlls/crypt32/crypt32.spec
@@ -123,7 +123,7 @@
@ stdcall CryptGetDefaultOIDDllList(long long ptr ptr)
@ stdcall CryptGetDefaultOIDFunctionAddress(long long wstr long ptr ptr)
@ stdcall CryptGetMessageCertificates(long ptr long ptr long)
-@ stub CryptGetMessageSignerCount
+@ stdcall CryptGetMessageSignerCount(long ptr long)
@ stdcall CryptGetOIDFunctionAddress(long long str long ptr ptr)
@ stdcall CryptGetOIDFunctionValue(long str str wstr ptr ptr ptr)
@ stdcall CryptHashCertificate(long long long ptr long ptr ptr)
diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 97c6b4e..4c2c617 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -2286,3 +2286,25 @@ HCERTSTORE WINAPI CryptGetMessageCertifi
return CertOpenStore(CERT_STORE_PROV_PKCS7, dwMsgAndCertEncodingType,
hCryptProv, dwFlags, &blob);
}
+
+LONG WINAPI CryptGetMessageSignerCount(DWORD dwMsgEncodingType,
+ const BYTE *pbSignedBlob, DWORD cbSignedBlob)
+{
+ HCRYPTMSG msg;
+ LONG count = -1;
+
+ TRACE("(%08x, %p, %d)\n", dwMsgEncodingType, pbSignedBlob, cbSignedBlob);
+
+ msg = CryptMsgOpenToDecode(dwMsgEncodingType, 0, 0, 0, NULL, NULL);
+ if (msg)
+ {
+ if (CryptMsgUpdate(msg, pbSignedBlob, cbSignedBlob, TRUE))
+ {
+ DWORD size = sizeof(count);
+
+ CryptMsgGetParam(msg, CMSG_SIGNER_COUNT_PARAM, 0, &count, &size);
+ }
+ CryptMsgClose(msg);
+ }
+ return count;
+}
diff --git a/dlls/crypt32/tests/msg.c b/dlls/crypt32/tests/msg.c
index b1e6c94..860058d 100644
--- a/dlls/crypt32/tests/msg.c
+++ b/dlls/crypt32/tests/msg.c
@@ -2347,6 +2347,43 @@ static void test_msg_control(void)
/* FIXME: need to test with a message with a valid signature and signer */
}
+static void test_msg_get_signer_count(void)
+{
+ LONG count;
+
+ SetLastError(0xdeadbeef);
+ count = CryptGetMessageSignerCount(0, NULL, 0);
+ ok(count == -1, "Expected -1, got %d\n", count);
+ ok(GetLastError() == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n",
+ GetLastError());
+ SetLastError(0xdeadbeef);
+ count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING, NULL, 0);
+ ok(count == -1, "Expected -1, got %d\n", count);
+ ok(GetLastError() == CRYPT_E_ASN1_EOD,
+ "Expected CRYPT_E_ASN1_EOD, got %08x\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
+ dataEmptyBareContent, sizeof(dataEmptyBareContent));
+ ok(count == -1, "Expected -1, got %d\n", count);
+ ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
+ "Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
+ dataEmptyContent, sizeof(dataEmptyContent));
+ ok(count == -1, "Expected -1, got %d\n", count);
+ ok(GetLastError() == CRYPT_E_INVALID_MSG_TYPE,
+ "Expected CRYPT_E_INVALID_MSG_TYPE, got %08x\n", GetLastError());
+ SetLastError(0xdeadbeef);
+ count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
+ signedEmptyBareContent, sizeof(signedEmptyBareContent));
+ ok(count == -1, "Expected -1, got %d\n", count);
+ ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
+ "Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
+ count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
+ signedEmptyContent, sizeof(signedEmptyContent));
+ ok(count == 1, "Expected 1, got %d\n", count);
+}
+
START_TEST(msg)
{
init_function_pointers();
@@ -2363,4 +2400,7 @@ START_TEST(msg)
test_hash_msg();
test_signed_msg();
test_decode_msg();
+
+ /* simplified message functions */
+ test_msg_get_signer_count();
}
--
1.4.1
More information about the wine-patches
mailing list