Juan Lang : crypt32: Test and implement CryptGetMessageSignerCount.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 22 06:23:32 CDT 2007


Module: wine
Branch: master
Commit: e52c80e53b67d00750537dc87238f0e6d51ed281
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e52c80e53b67d00750537dc87238f0e6d51ed281

Author: Juan Lang <juan.lang at gmail.com>
Date:   Tue Aug 21 15:12:35 2007 -0700

crypt32: 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 CryptGetMessageCertificates(DWORD dwMsgAndCertEncodingType,
     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();
 }




More information about the wine-cvs mailing list