On Wed, Jan 23, 2019 at 1:26 PM Orhan 'aib' Kavrako������lu <aibok42@gmail.com> wrote:
---
You need to sign off this patch as well.
������dlls/crypt32/tests/cert.c | 65 +++++++++++++++++++++++++++++++++++++++
������1 file changed, 65 insertions(+)

diff --git a/dlls/crypt32/tests/cert.c b/dlls/crypt32/tests/cert.c
index f653741ea7..ddda156cc5 100644
--- a/dlls/crypt32/tests/cert.c
+++ b/dlls/crypt32/tests/cert.c
@@ -1784,6 +1784,70 @@ static void testCryptHashCert(void)
������ ������ ������ok(!memcmp(hash, knownHash, sizeof(knownHash)), "Unexpected hash\n");
������}

+static void testCryptHashCert2(void)
+{
+������ ������ static const BYTE emptyHash[] = { 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b,
+������ ������ ������0x0d, 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, 0xaf, 0xd8, 0x07,
+������ ������ ������0x09 };
+������ ������ static const BYTE knownHash[] = { 0xae, 0x9d, 0xbf, 0x6d, 0xf5, 0x46, 0xee,
+������ ������ ������0x8b, 0xc5, 0x7a, 0x13, 0xba, 0xc2, 0xb1, 0x04, 0xf2, 0xbf, 0x52, 0xa8,
+������ ������ ������0xa2 };
+������ ������ static const BYTE toHash[] = "abcdefghijklmnopqrstuvwxyz0123456789.,;!?:";
+������ ������ BOOL ret;
+������ ������ BYTE hash[20];
+������ ������ DWORD hashLen;
+������ ������ const WCHAR SHA1[] = { 'S', 'H', 'A', '1', '\0' };
+������ ������ const WCHAR invalidAlgorithm[] = { 'I', 'H', 'A', '9', '9', '\0' };
+
+������ ������ /* Test empty hash */
+������ ������ hashLen = sizeof(hash);
+������ ������ ret = CryptHashCertificate2(SHA1, 0, NULL, NULL, 0, hash, &hashLen);
+������ ������ ok(ret, "CryptHashCertificate2 failed: %08x\n", GetLastError());
+������ ������ ok(hashLen == sizeof(hash), "Got unexpected size of hash %d\n", hashLen);
+������ ������ ok(!memcmp(hash, emptyHash, sizeof(emptyHash)), "Unexpected hash of nothing\n");
+
+������ ������ /* Test known hash */
+������ ������ hashLen = sizeof(hash);
+������ ������ ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
+������ ������ ok(ret, "CryptHashCertificate2 failed: %08x\n", GetLastError());
+������ ������ ok(hashLen == sizeof(hash), "Got unexpected size of hash %d\n", hashLen);
+������ ������ ok(!memcmp(hash, knownHash, sizeof(knownHash)), "Unexpected hash\n");
+
+������ ������ /* Test null hash size pointer just sets hash size */
+������ ������ hashLen = 0;
+������ ������ ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), NULL, &hashLen);
+������ ������ ok(ret, "CryptHashCertificate2 failed: %08x\n", GetLastError());
+������ ������ ok(hashLen == sizeof(hash), "Hash size not set correctly (%d)\n", hashLen);
+
+������ ������ /* Test invalid algorithm ID */
+������ ������ hashLen = sizeof(hash);
+������ ������ ret = CryptHashCertificate2(NULL, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
+������ ������ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+������ ������ ������"Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());
+
+������ ������ /* Test invalid algorithm */
+������ ������ hashLen = sizeof(hash);
+������ ������ ret = CryptHashCertificate2(invalidAlgorithm, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
+������ ������ ok(!ret && GetLastError() == ERROR_INVALID_FUNCTION,
+������ ������ ������"Expected ERROR_INVALID_FUNCTION (%d), got %d\n", ERROR_INVALID_FUNCTION, GetLastError());
+
+������ ������ /* Test hash buffer too small */
+������ ������ hashLen = sizeof(hash) / 2;
+������ ������ ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
+������ ������ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+������ ������ ������"Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());
+
+������ ������ /* Test hashLen null with hash */
+������ ������ ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), hash, NULL);
+������ ������ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+������ ������ ������"Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());
+
+������ ������ /* Test hashLen null with no hash */
+������ ������ ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), NULL, NULL);
+������ ������ ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
+������ ������ ������"Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());
+}
+
������static void verifySig(HCRYPTPROV csp, const BYTE *toSign, size_t toSignLen,
������ const BYTE *sig, unsigned int sigLen)
������{
@@ -4074,6 +4138,7 @@ START_TEST(cert)
������ ������ ������testLinkCert();

������ ������ ������testCryptHashCert();
+������ ������ testCryptHashCert2();
������ ������ ������testCertSigs();
������ ������ ������testSignAndEncodeCert();
������ ������ ������testCreateSelfSignCert();
--
2.19.1