Commit bb1246a5 authored by Juan Lang's avatar Juan Lang Committed by Alexandre Julliard

crypt32: Implement getting a hash message's hash value.

parent 1745d8a7
......@@ -332,9 +332,23 @@ static void CHashEncodeMsg_Close(HCRYPTMSG hCryptMsg)
static BOOL CHashEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
DWORD dwIndex, void *pvData, DWORD *pcbData)
{
FIXME("(%p, %d, %d, %p, %p): stub\n", hCryptMsg, dwParamType, dwIndex,
CHashEncodeMsg *msg = (CHashEncodeMsg *)hCryptMsg;
BOOL ret = FALSE;
TRACE("(%p, %d, %d, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
pvData, pcbData);
return FALSE;
switch (dwParamType)
{
case CMSG_COMPUTED_HASH_PARAM:
ret = CryptGetHashParam(msg->hash, HP_HASHVAL, (BYTE *)pvData, pcbData,
0);
break;
default:
FIXME("%d: stub\n", dwParamType);
ret = FALSE;
}
return ret;
}
static BOOL CHashEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
......
......@@ -776,24 +776,22 @@ static void test_hash_msg_get_param(void)
/* The hash is also available. */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
}
if (size == sizeof(buf))
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
CryptMsgUpdate(msg, msgData, sizeof(msgData), TRUE);
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
}
/* Oddly, the hash doesn't seem to change even after an update */
/* The hash doesn't seem to change even after an update, which matches
* how rsaenh behaves - an update can't happen after the has is retrieved.
*/
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
/* So is the version. */
size = 0;
......@@ -829,61 +827,30 @@ static void test_hash_msg_get_param(void)
/* The hash is still available. */
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
}
if (size == sizeof(buf))
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
/* An empty update has no effect on the hash */
CryptMsgUpdate(msg, NULL, 0, FALSE);
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
}
if (size == sizeof(buf))
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
/* A non-empty update doesn't appear to either? */
/* A non-empty update doesn't either - see above comments. */
CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
}
if (size == sizeof(buf))
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
CryptMsgClose(msg);
/* A detached message similarly has a non-updating hash */
msg = CryptMsgOpenToEncode(PKCS_7_ASN_ENCODING, CMSG_DETACHED_FLAG,
CMSG_HASHED, &hashInfo, NULL, NULL);
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
}
if (size == sizeof(buf))
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
CryptMsgUpdate(msg, msgData, sizeof(msgData), FALSE);
size = 0;
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, NULL, &size);
todo_wine {
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
ok(size == sizeof(buf), "Unexpected size %d\n", size);
ret = CryptMsgGetParam(msg, CMSG_COMPUTED_HASH_PARAM, 0, buf, &size);
ok(ret, "CryptMsgGetParam failed: %08x\n", GetLastError());
}
if (size == sizeof(buf))
ok(!memcmp(buf, emptyHashParam, size), "Unexpected value\n");
CryptMsgClose(msg);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment