Juan Lang : crypt32: Implement getting the hash for each signer of a signed encoded message.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jul 24 07:06:11 CDT 2007


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Mon Jul 23 18:09:42 2007 -0700

crypt32: Implement getting the hash for each signer of a signed encoded message.

---

 dlls/crypt32/msg.c       |   20 +++++++++++++++++---
 dlls/crypt32/tests/msg.c |    2 --
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 28fb247..226c04b 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -765,9 +765,23 @@ static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
 static BOOL CSignedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
  DWORD dwIndex, void *pvData, DWORD *pcbData)
 {
-    FIXME("(%p, %d, %d, %p, %p)\n", hCryptMsg, dwParamType, dwIndex, pvData,
-     pcbData);
-    return FALSE;
+    CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
+    BOOL ret = FALSE;
+
+    switch (dwParamType)
+    {
+    case CMSG_COMPUTED_HASH_PARAM:
+        if (dwIndex >= msg->cSigners)
+            SetLastError(CRYPT_E_INVALID_INDEX);
+        else
+            ret = CryptGetHashParam(msg->signers[dwIndex].hash, HP_HASHVAL,
+             pvData, pcbData, 0);
+        break;
+    default:
+        FIXME("unimplemented for %d\n", dwParamType);
+        SetLastError(CRYPT_E_INVALID_MSG_TYPE);
+    }
+    return ret;
 }
 
 static BOOL CSignedEncodeMsg_UpdateHash(CSignedEncodeMsg *msg,
diff --git a/dlls/crypt32/tests/msg.c b/dlls/crypt32/tests/msg.c
index f9f2ab6..18c758b 100644
--- a/dlls/crypt32/tests/msg.c
+++ b/dlls/crypt32/tests/msg.c
@@ -1298,7 +1298,6 @@ static void test_signed_msg_encoding(void)
      signedEmptyContent, sizeof(signedEmptyContent));
     ret = CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
     ok(ret, "CryptMsgUpdate failed: %x\n", GetLastError());
-    todo_wine
     check_param("detached signed hash", msg, CMSG_COMPUTED_HASH_PARAM,
      signedHash, sizeof(signedHash));
     todo_wine
@@ -1309,7 +1308,6 @@ static void test_signed_msg_encoding(void)
      detachedSignedContent, sizeof(detachedSignedContent));
     SetLastError(0xdeadbeef);
     ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 1, NULL, &size);
-    todo_wine
     ok(!ret && GetLastError() == CRYPT_E_INVALID_INDEX,
      "Expected CRYPT_E_INVALID_INDEX, got %x\n", GetLastError());
 




More information about the wine-cvs mailing list