<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 23, 2019 at 1:26 PM Orhan 'aib' Kavrakoğlu <<a href="mailto:aibok42@gmail.com">aibok42@gmail.com</a>> wrote:</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">---<br></blockquote><div>You need to sign off this patch as well. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
 dlls/crypt32/tests/cert.c | 65 +++++++++++++++++++++++++++++++++++++++<br>
 1 file changed, 65 insertions(+)<br>
<br>
diff --git a/dlls/crypt32/tests/cert.c b/dlls/crypt32/tests/cert.c<br>
index f653741ea7..ddda156cc5 100644<br>
--- a/dlls/crypt32/tests/cert.c<br>
+++ b/dlls/crypt32/tests/cert.c<br>
@@ -1784,6 +1784,70 @@ static void testCryptHashCert(void)<br>
     ok(!memcmp(hash, knownHash, sizeof(knownHash)), "Unexpected hash\n");<br>
 }<br>
<br>
+static void testCryptHashCert2(void)<br>
+{<br>
+    static const BYTE emptyHash[] = { 0xda, 0x39, 0xa3, 0xee, 0x5e, 0x6b, 0x4b,<br>
+     0x0d, 0x32, 0x55, 0xbf, 0xef, 0x95, 0x60, 0x18, 0x90, 0xaf, 0xd8, 0x07,<br>
+     0x09 };<br>
+    static const BYTE knownHash[] = { 0xae, 0x9d, 0xbf, 0x6d, 0xf5, 0x46, 0xee,<br>
+     0x8b, 0xc5, 0x7a, 0x13, 0xba, 0xc2, 0xb1, 0x04, 0xf2, 0xbf, 0x52, 0xa8,<br>
+     0xa2 };<br>
+    static const BYTE toHash[] = "abcdefghijklmnopqrstuvwxyz0123456789.,;!?:";<br>
+    BOOL ret;<br>
+    BYTE hash[20];<br>
+    DWORD hashLen;<br>
+    const WCHAR SHA1[] = { 'S', 'H', 'A', '1', '\0' };<br>
+    const WCHAR invalidAlgorithm[] = { 'I', 'H', 'A', '9', '9', '\0' };<br>
+<br>
+    /* Test empty hash */<br>
+    hashLen = sizeof(hash);<br>
+    ret = CryptHashCertificate2(SHA1, 0, NULL, NULL, 0, hash, &hashLen);<br>
+    ok(ret, "CryptHashCertificate2 failed: %08x\n", GetLastError());<br>
+    ok(hashLen == sizeof(hash), "Got unexpected size of hash %d\n", hashLen);<br>
+    ok(!memcmp(hash, emptyHash, sizeof(emptyHash)), "Unexpected hash of nothing\n");<br>
+<br>
+    /* Test known hash */<br>
+    hashLen = sizeof(hash);<br>
+    ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);<br>
+    ok(ret, "CryptHashCertificate2 failed: %08x\n", GetLastError());<br>
+    ok(hashLen == sizeof(hash), "Got unexpected size of hash %d\n", hashLen);<br>
+    ok(!memcmp(hash, knownHash, sizeof(knownHash)), "Unexpected hash\n");<br>
+<br>
+    /* Test null hash size pointer just sets hash size */<br>
+    hashLen = 0;<br>
+    ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), NULL, &hashLen);<br>
+    ok(ret, "CryptHashCertificate2 failed: %08x\n", GetLastError());<br>
+    ok(hashLen == sizeof(hash), "Hash size not set correctly (%d)\n", hashLen);<br>
+<br>
+    /* Test invalid algorithm ID */<br>
+    hashLen = sizeof(hash);<br>
+    ret = CryptHashCertificate2(NULL, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);<br>
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,<br>
+     "Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());<br>
+<br>
+    /* Test invalid algorithm */<br>
+    hashLen = sizeof(hash);<br>
+    ret = CryptHashCertificate2(invalidAlgorithm, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);<br>
+    ok(!ret && GetLastError() == ERROR_INVALID_FUNCTION,<br>
+     "Expected ERROR_INVALID_FUNCTION (%d), got %d\n", ERROR_INVALID_FUNCTION, GetLastError());<br>
+<br>
+    /* Test hash buffer too small */<br>
+    hashLen = sizeof(hash) / 2;<br>
+    ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);<br>
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,<br>
+     "Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());<br>
+<br>
+    /* Test hashLen null with hash */<br>
+    ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), hash, NULL);<br>
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,<br>
+     "Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());<br>
+<br>
+    /* Test hashLen null with no hash */<br>
+    ret = CryptHashCertificate2(SHA1, 0, NULL, toHash, sizeof(toHash), NULL, NULL);<br>
+    ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,<br>
+     "Expected ERROR_INVALID_PARAMETER (%d), got %d\n", ERROR_INVALID_PARAMETER, GetLastError());<br>
+}<br>
+<br>
 static void verifySig(HCRYPTPROV csp, const BYTE *toSign, size_t toSignLen,<br>
  const BYTE *sig, unsigned int sigLen)<br>
 {<br>
@@ -4074,6 +4138,7 @@ START_TEST(cert)<br>
     testLinkCert();<br>
<br>
     testCryptHashCert();<br>
+    testCryptHashCert2();<br>
     testCertSigs();<br>
     testSignAndEncodeCert();<br>
     testCreateSelfSignCert();<br>
-- <br>
2.19.1<br>
<br>
<br>
<br>
</blockquote></div></div>