https://git.reactos.org/?p=reactos.git;a=commitdiff;h=d03ac84f4f0584b5db9ae…
commit d03ac84f4f0584b5db9aedd6bb0af55136da84a2
Author: Amine Khaldi <amine.khaldi(a)reactos.org>
AuthorDate: Fri Mar 9 13:00:36 2018 +0100
Commit: Amine Khaldi <amine.khaldi(a)reactos.org>
CommitDate: Fri Mar 9 13:00:36 2018 +0100
[CRYPT32_WINETEST] Sync with Wine Staging 3.3. CORE-14434
---
modules/rostests/winetests/crypt32/base64.c | 84 ++--
modules/rostests/winetests/crypt32/cert.c | 11 +-
modules/rostests/winetests/crypt32/chain.c | 93 +++-
modules/rostests/winetests/crypt32/crl.c | 12 +-
modules/rostests/winetests/crypt32/ctl.c | 10 +-
modules/rostests/winetests/crypt32/encode.c | 520 +++++++++++++++++++----
modules/rostests/winetests/crypt32/main.c | 10 +-
modules/rostests/winetests/crypt32/message.c | 9 +-
modules/rostests/winetests/crypt32/msg.c | 16 +-
modules/rostests/winetests/crypt32/object.c | 8 +-
modules/rostests/winetests/crypt32/oid.c | 70 ++-
modules/rostests/winetests/crypt32/precomp.h | 5 +
modules/rostests/winetests/crypt32/protectdata.c | 9 +-
modules/rostests/winetests/crypt32/sip.c | 10 +-
modules/rostests/winetests/crypt32/store.c | 351 ++++++---------
modules/rostests/winetests/crypt32/str.c | 8 +-
16 files changed, 833 insertions(+), 393 deletions(-)
diff --git a/modules/rostests/winetests/crypt32/base64.c
b/modules/rostests/winetests/crypt32/base64.c
index 4898d3897e..e127fc3891 100644
--- a/modules/rostests/winetests/crypt32/base64.c
+++ b/modules/rostests/winetests/crypt32/base64.c
@@ -18,8 +18,14 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
-#include "precomp.h"
+#include "wine/test.h"
#define CERT_HEADER "-----BEGIN CERTIFICATE-----\r\n"
#define ALT_CERT_HEADER "-----BEGIN This is some arbitrary text that goes
on and on-----\r\n"
@@ -36,15 +42,6 @@
#define X509_HEADER_NOCR "-----BEGIN X509 CRL-----\n"
#define X509_TRAILER_NOCR "-----END X509 CRL-----\n"
-static BOOL (WINAPI *pCryptBinaryToStringA)(const BYTE *pbBinary,
- DWORD cbBinary, DWORD dwFlags, LPSTR pszString, DWORD *pcchString);
-static BOOL (WINAPI *pCryptStringToBinaryA)(LPCSTR pszString,
- DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
- DWORD *pdwSkip, DWORD *pdwFlags);
-static BOOL (WINAPI *pCryptStringToBinaryW)(LPCWSTR pszString,
- DWORD cchString, DWORD dwFlags, BYTE *pbBinary, DWORD *pcbBinary,
- DWORD *pdwSkip, DWORD *pdwFlags);
-
struct BinTests
{
const BYTE *toEncode;
@@ -91,7 +88,7 @@ static void encodeAndCompareBase64_A(const BYTE *toEncode, DWORD
toEncodeLen,
LPSTR str = NULL;
BOOL ret;
- ret = pCryptBinaryToStringA(toEncode, toEncodeLen, format, NULL, &strLen);
+ ret = CryptBinaryToStringA(toEncode, toEncodeLen, format, NULL, &strLen);
ok(ret, "CryptBinaryToStringA failed: %d\n", GetLastError());
str = HeapAlloc(GetProcessHeap(), 0, strLen);
if (str)
@@ -99,7 +96,7 @@ static void encodeAndCompareBase64_A(const BYTE *toEncode, DWORD
toEncodeLen,
DWORD strLen2 = strLen;
LPCSTR ptr = str;
- ret = pCryptBinaryToStringA(toEncode, toEncodeLen, format, str,
+ ret = CryptBinaryToStringA(toEncode, toEncodeLen, format, str,
&strLen2);
ok(ret, "CryptBinaryToStringA failed: %d\n", GetLastError());
ok(strLen2 == strLen - 1, "Expected length %d, got %d\n",
@@ -125,10 +122,10 @@ static void testBinaryToStringA(void)
BOOL ret;
DWORD strLen = 0, i;
- ret = pCryptBinaryToStringA(NULL, 0, 0, NULL, NULL);
+ ret = CryptBinaryToStringA(NULL, 0, 0, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
- ret = pCryptBinaryToStringA(NULL, 0, 0, NULL, &strLen);
+ ret = CryptBinaryToStringA(NULL, 0, 0, NULL, &strLen);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got %d\n", GetLastError());
for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
@@ -137,7 +134,7 @@ static void testBinaryToStringA(void)
LPSTR str = NULL;
BOOL ret;
- ret = pCryptBinaryToStringA(tests[i].toEncode, tests[i].toEncodeLen,
+ ret = CryptBinaryToStringA(tests[i].toEncode, tests[i].toEncodeLen,
CRYPT_STRING_BINARY, NULL, &strLen);
ok(ret, "CryptBinaryToStringA failed: %d\n", GetLastError());
str = HeapAlloc(GetProcessHeap(), 0, strLen);
@@ -145,7 +142,7 @@ static void testBinaryToStringA(void)
{
DWORD strLen2 = strLen;
- ret = pCryptBinaryToStringA(tests[i].toEncode, tests[i].toEncodeLen,
+ ret = CryptBinaryToStringA(tests[i].toEncode, tests[i].toEncodeLen,
CRYPT_STRING_BINARY, str, &strLen2);
ok(ret, "CryptBinaryToStringA failed: %d\n", GetLastError());
ok(strLen == strLen2, "Expected length %d, got %d\n", strLen,
@@ -172,7 +169,7 @@ static void testBinaryToStringA(void)
LPSTR str = NULL;
BOOL ret;
- ret = pCryptBinaryToStringA(testsNoCR[i].toEncode,
+ ret = CryptBinaryToStringA(testsNoCR[i].toEncode,
testsNoCR[i].toEncodeLen, CRYPT_STRING_BINARY | CRYPT_STRING_NOCR,
NULL, &strLen);
ok(ret, "CryptBinaryToStringA failed: %d\n", GetLastError());
@@ -181,7 +178,7 @@ static void testBinaryToStringA(void)
{
DWORD strLen2 = strLen;
- ret = pCryptBinaryToStringA(testsNoCR[i].toEncode,
+ ret = CryptBinaryToStringA(testsNoCR[i].toEncode,
testsNoCR[i].toEncodeLen, CRYPT_STRING_BINARY | CRYPT_STRING_NOCR,
str, &strLen2);
ok(ret, "CryptBinaryToStringA failed: %d\n", GetLastError());
@@ -236,7 +233,7 @@ static void decodeAndCompareBase64_A(LPCSTR toDecode, LPCSTR header,
strcat(str, toDecode);
if (trailer)
strcat(str, trailer);
- ret = pCryptStringToBinaryA(str, 0, useFormat, NULL, &bufLen, NULL,
+ ret = CryptStringToBinaryA(str, 0, useFormat, NULL, &bufLen, NULL,
NULL);
ok(ret, "CryptStringToBinaryA failed: %d\n", GetLastError());
buf = HeapAlloc(GetProcessHeap(), 0, bufLen);
@@ -245,14 +242,14 @@ static void decodeAndCompareBase64_A(LPCSTR toDecode, LPCSTR
header,
DWORD skipped, usedFormat;
/* check as normal, make sure last two parameters are optional */
- ret = pCryptStringToBinaryA(str, 0, useFormat, buf, &bufLen, NULL,
+ ret = CryptStringToBinaryA(str, 0, useFormat, buf, &bufLen, NULL,
NULL);
ok(ret, "CryptStringToBinaryA failed: %d\n", GetLastError());
ok(bufLen == expectedLen,
"Expected length %d, got %d\n", expectedLen, bufLen);
ok(!memcmp(buf, expected, bufLen), "Unexpected value\n");
/* check last two params */
- ret = pCryptStringToBinaryA(str, 0, useFormat, buf, &bufLen,
+ ret = CryptStringToBinaryA(str, 0, useFormat, buf, &bufLen,
&skipped, &usedFormat);
ok(ret, "CryptStringToBinaryA failed: %d\n", GetLastError());
ok(skipped == 0, "Expected skipped 0, got %d\n", skipped);
@@ -268,7 +265,7 @@ static void decodeAndCompareBase64_A(LPCSTR toDecode, LPCSTR header,
strcat(str, toDecode);
if (trailer)
strcat(str, trailer);
- ret = pCryptStringToBinaryA(str, 0, useFormat, NULL, &bufLen, NULL,
+ ret = CryptStringToBinaryA(str, 0, useFormat, NULL, &bufLen, NULL,
NULL);
/* expect failure with no header, and success with one */
if (header)
@@ -283,7 +280,7 @@ static void decodeAndCompareBase64_A(LPCSTR toDecode, LPCSTR header,
{
DWORD skipped, usedFormat;
- ret = pCryptStringToBinaryA(str, 0, useFormat, buf, &bufLen,
+ ret = CryptStringToBinaryA(str, 0, useFormat, buf, &bufLen,
&skipped, &usedFormat);
ok(ret, "CryptStringToBinaryA failed: %d\n", GetLastError());
ok(skipped == strlen(garbage),
@@ -305,7 +302,7 @@ static void decodeBase64WithLenFmtW(LPCSTR strA, int len, DWORD fmt,
BOOL retA,
WCHAR strW[64];
int i;
for (i = 0; (strW[i] = strA[i]) != 0; ++i);
- ret = pCryptStringToBinaryW(strW, len, fmt, buf, &bufLen, NULL, &fmtUsed);
+ ret = CryptStringToBinaryW(strW, len, fmt, buf, &bufLen, NULL, &fmtUsed);
ok(ret == retA && bufLen == bufLenA && memcmp(bufA, buf, bufLen) ==
0
&& fmtUsed == fmtUsedA, "base64 \"%s\" len %d: W and A
differ\n", strA, len);
}
@@ -316,7 +313,7 @@ static void decodeBase64WithLenFmt(LPCSTR str, int len, DWORD fmt,
LPCSTR expect
DWORD bufLen = sizeof(buf)-1, fmtUsed = 0xdeadbeef;
BOOL ret;
SetLastError(0xdeadbeef);
- ret = pCryptStringToBinaryA(str, len, fmt, buf, &bufLen, NULL, &fmtUsed);
+ ret = CryptStringToBinaryA(str, len, fmt, buf, &bufLen, NULL, &fmtUsed);
buf[bufLen] = 0;
if (expected) {
BOOL correct = ret && strcmp(expected, (char*)buf) == 0;
@@ -331,8 +328,8 @@ static void decodeBase64WithLenFmt(LPCSTR str, int len, DWORD fmt,
LPCSTR expect
"base64 \"%s\" len %d: expected failure, got \"%s\"
(ret %d, le %d)\n",
str, len, (char*)buf, ret, GetLastError());
}
- if (pCryptStringToBinaryW)
- decodeBase64WithLenFmtW(str, len, fmt, ret, buf, bufLen, fmtUsed);
+
+ decodeBase64WithLenFmtW(str, len, fmt, ret, buf, bufLen, fmtUsed);
}
static void decodeBase64WithLenBroken(LPCSTR str, int len, LPCSTR expected, int le)
@@ -366,19 +363,19 @@ static void testStringToBinaryA(void)
DWORD bufLen = 0, i;
BYTE buf[8];
- ret = pCryptStringToBinaryA(NULL, 0, 0, NULL, NULL, NULL, NULL);
+ ret = CryptStringToBinaryA(NULL, 0, 0, NULL, NULL, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got ret=%d le=%u\n", ret,
GetLastError());
- ret = pCryptStringToBinaryA(NULL, 0, 0, NULL, &bufLen, NULL, NULL);
+ ret = CryptStringToBinaryA(NULL, 0, 0, NULL, &bufLen, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
"Expected ERROR_INVALID_PARAMETER, got ret=%d le=%u\n", ret,
GetLastError());
/* Bogus format */
- ret = pCryptStringToBinaryA(tests[0].base64, 0, 0, NULL, &bufLen, NULL,
+ ret = CryptStringToBinaryA(tests[0].base64, 0, 0, NULL, &bufLen, NULL,
NULL);
ok(!ret && GetLastError() == ERROR_INVALID_DATA,
"Expected ERROR_INVALID_DATA, got ret=%d le=%u\n", ret, GetLastError());
/* Decoding doesn't expect the NOCR flag to be specified */
- ret = pCryptStringToBinaryA(tests[0].base64, 1,
+ ret = CryptStringToBinaryA(tests[0].base64, 1,
CRYPT_STRING_BASE64 | CRYPT_STRING_NOCR, NULL, &bufLen, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_DATA,
"Expected ERROR_INVALID_DATA, got ret=%d le=%u\n", ret, GetLastError());
@@ -386,7 +383,7 @@ static void testStringToBinaryA(void)
for (i = 0; i < sizeof(badStrings) / sizeof(badStrings[0]); i++)
{
bufLen = 0;
- ret = pCryptStringToBinaryA(badStrings[i].str, 0, badStrings[i].format,
+ ret = CryptStringToBinaryA(badStrings[i].str, 0, badStrings[i].format,
NULL, &bufLen, NULL, NULL);
ok(!ret && GetLastError() == ERROR_INVALID_DATA,
"%d: Expected ERROR_INVALID_DATA, got ret=%d le=%u\n", i, ret,
GetLastError());
@@ -444,7 +441,7 @@ static void testStringToBinaryA(void)
/* Too small buffer */
buf[0] = 0;
bufLen = 4;
- ret = pCryptStringToBinaryA("VVVVVVVV", 8, CRYPT_STRING_BASE64, (BYTE*)buf,
&bufLen, NULL, NULL);
+ ret = CryptStringToBinaryA("VVVVVVVV", 8, CRYPT_STRING_BASE64, (BYTE*)buf,
&bufLen, NULL, NULL);
ok(!ret && bufLen == 4 && buf[0] == 0,
"Expected ret 0, bufLen 4, buf[0] '\\0', got ret %d, bufLen %d, buf[0]
'%c'\n",
ret, bufLen, buf[0]);
@@ -456,7 +453,7 @@ static void testStringToBinaryA(void)
/* Bogus length--oddly enough, that succeeds, even though it's not
* properly padded.
*/
- ret = pCryptStringToBinaryA(tests[i].base64, 1, CRYPT_STRING_BASE64,
+ ret = CryptStringToBinaryA(tests[i].base64, 1, CRYPT_STRING_BASE64,
NULL, &bufLen, NULL, NULL);
ok(ret, "CryptStringToBinaryA failed: %d\n", GetLastError());
/* Check with the precise format */
@@ -513,7 +510,7 @@ static void testStringToBinaryA(void)
/* Bogus length--oddly enough, that succeeds, even though it's not
* properly padded.
*/
- ret = pCryptStringToBinaryA(testsNoCR[i].base64, 1, CRYPT_STRING_BASE64,
+ ret = CryptStringToBinaryA(testsNoCR[i].base64, 1, CRYPT_STRING_BASE64,
NULL, &bufLen, NULL, NULL);
ok(ret, "CryptStringToBinaryA failed: %d\n", GetLastError());
/* Check with the precise format */
@@ -548,19 +545,6 @@ static void testStringToBinaryA(void)
START_TEST(base64)
{
- HMODULE lib = GetModuleHandleA("crypt32");
-
- pCryptBinaryToStringA = (void *)GetProcAddress(lib,
"CryptBinaryToStringA");
- pCryptStringToBinaryA = (void *)GetProcAddress(lib,
"CryptStringToBinaryA");
- pCryptStringToBinaryW = (void *)GetProcAddress(lib,
"CryptStringToBinaryW");
-
- if (pCryptBinaryToStringA)
- testBinaryToStringA();
- else
- win_skip("CryptBinaryToStringA is not available\n");
-
- if (pCryptStringToBinaryA)
- testStringToBinaryA();
- else
- win_skip("CryptStringToBinaryA is not available\n");
+ testBinaryToStringA();
+ testStringToBinaryA();
}
diff --git a/modules/rostests/winetests/crypt32/cert.c
b/modules/rostests/winetests/crypt32/cert.c
index 8a8d36b926..e49b2a9798 100644
--- a/modules/rostests/winetests/crypt32/cert.c
+++ b/modules/rostests/winetests/crypt32/cert.c
@@ -18,7 +18,16 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winreg.h>
+#include <winerror.h>
+#include <wincrypt.h>
+
+#include "wine/test.h"
static PCCERT_CONTEXT (WINAPI
*pCertCreateSelfSignCertificate)(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE,PCERT_NAME_BLOB,DWORD,PCRYPT_KEY_PROV_INFO,PCRYPT_ALGORITHM_IDENTIFIER,PSYSTEMTIME,PSYSTEMTIME,PCERT_EXTENSIONS);
static BOOL (WINAPI *pCertGetValidUsages)(DWORD,PCCERT_CONTEXT*,int*,LPSTR*,DWORD*);
diff --git a/modules/rostests/winetests/crypt32/chain.c
b/modules/rostests/winetests/crypt32/chain.c
index e9e8634b2b..e3b280b088 100644
--- a/modules/rostests/winetests/crypt32/chain.c
+++ b/modules/rostests/winetests/crypt32/chain.c
@@ -18,10 +18,17 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
#include <wininet.h>
+#include "wine/test.h"
+
static const BYTE selfSignedCert[] = {
0x30, 0x82, 0x01, 0x1f, 0x30, 0x81, 0xce, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02,
0x10, 0xeb, 0x0d, 0x57, 0x2a, 0x9c, 0x09, 0xba, 0xa4, 0x4a, 0xb7, 0x25, 0x49,
@@ -2882,6 +2889,59 @@ static const BYTE chain31_1[] = {
0x43,0x08,0xe5,0x78,0x2b,0x95,0xf3,0x75,0xb6,0x88,0xf0,0x6b,0x5c,0x5b,0x50,
0x04,0x91,0x3b,0x89,0x5a,0x60,0x1f,0xfc,0x36,0x53,0x32,0x36,0x0a,0x4d,0x03,
0x2c,0xd7 };
+static const BYTE ecc_crt[] = {
+0x30,0x82,0x01,0x46,0x30,0x81,0xec,0x02,0x09,0x00,0xe7,0x6b,0x26,0x86,0x0a,
+0x82,0xff,0xe9,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,0x02,
+0x30,0x2b,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x44,0x45,
+0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x0a,0x0c,0x04,0x57,0x69,0x6e,0x65,
+0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x03,0x0c,0x04,0x57,0x69,0x6e,0x65,
+0x30,0x1e,0x17,0x0d,0x31,0x37,0x30,0x39,0x32,0x37,0x31,0x33,0x34,0x31,0x30,
+0x34,0x5a,0x17,0x0d,0x32,0x37,0x30,0x39,0x32,0x35,0x31,0x33,0x34,0x31,0x30,
+0x34,0x5a,0x30,0x2b,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,
+0x44,0x45,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x0a,0x0c,0x04,0x54,0x65,
+0x73,0x74,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x03,0x0c,0x04,0x54,0x65,
+0x73,0x74,0x30,0x59,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,
+0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,0x42,0x00,0x04,0xed,
+0xfc,0x77,0xd8,0xb9,0xe7,0xf3,0xf8,0xce,0x13,0xb8,0x7f,0x0f,0x78,0xea,0x73,
+0x87,0x29,0x10,0xe1,0x6d,0x10,0xce,0x57,0x60,0x3b,0x3e,0xb4,0x5f,0x0d,0x20,
+0xc1,0xeb,0x6d,0x74,0xe9,0x7b,0x11,0x51,0x9a,0x00,0xe8,0xe9,0x12,0x84,0xb9,
+0x07,0x7e,0x7b,0x62,0x67,0x12,0x67,0x08,0xe5,0x2e,0x27,0xce,0xa2,0x57,0x15,
+0xad,0xc5,0x1f,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,0x02,
+0x03,0x49,0x00,0x30,0x46,0x02,0x21,0x00,0xd7,0x29,0xce,0x5a,0xef,0x74,0x85,
+0xd1,0x18,0x5f,0x6e,0xf1,0xba,0x53,0xd4,0xcd,0xdd,0xe0,0x5d,0xf1,0x5e,0x48,
+0x51,0xea,0x63,0xc0,0xe8,0xe2,0xf6,0xfa,0x4c,0xaf,0x02,0x21,0x00,0xe3,0x94,
+0x15,0x3b,0x6c,0x71,0x6e,0x44,0x22,0xcb,0xa0,0x88,0xcd,0x0a,0x5a,0x50,0x29,
+0x7c,0x5c,0xd6,0x6c,0xd2,0xe0,0x7f,0xcd,0x02,0x92,0x21,0x4c,0x2c,0x92,0xee };
+static const BYTE ecc_ca[] = {
+0x30,0x82,0x01,0x9f,0x30,0x82,0x01,0x46,0xa0,0x03,0x02,0x01,0x02,0x02,0x09,
+0x00,0xf1,0x54,0xae,0x21,0x2e,0x4d,0x31,0x9f,0x30,0x0a,0x06,0x08,0x2a,0x86,
+0x48,0xce,0x3d,0x04,0x03,0x02,0x30,0x2b,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,
+0x04,0x06,0x13,0x02,0x44,0x45,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x0a,
+0x0c,0x04,0x57,0x69,0x6e,0x65,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x03,
+0x0c,0x04,0x57,0x69,0x6e,0x65,0x30,0x1e,0x17,0x0d,0x31,0x37,0x30,0x39,0x32,
+0x37,0x31,0x33,0x33,0x39,0x31,0x35,0x5a,0x17,0x0d,0x32,0x37,0x30,0x39,0x32,
+0x35,0x31,0x33,0x33,0x39,0x31,0x35,0x5a,0x30,0x2b,0x31,0x0b,0x30,0x09,0x06,
+0x03,0x55,0x04,0x06,0x13,0x02,0x44,0x45,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,
+0x04,0x0a,0x0c,0x04,0x57,0x69,0x6e,0x65,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,
+0x04,0x03,0x0c,0x04,0x57,0x69,0x6e,0x65,0x30,0x59,0x30,0x13,0x06,0x07,0x2a,
+0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,
+0x07,0x03,0x42,0x00,0x04,0x3b,0x3c,0x34,0xc8,0x3f,0x15,0xea,0x02,0x68,0x46,
+0x69,0xdf,0x0c,0xa6,0xee,0x7a,0xd9,0x82,0x08,0x9b,0x37,0x53,0x42,0xf3,0x13,
+0x63,0xda,0x65,0x79,0xe8,0x04,0x9e,0x8c,0x77,0xc4,0x33,0x77,0xd9,0x5a,0x7f,
+0x60,0x7b,0x98,0xce,0xf3,0x96,0x56,0xd6,0xb5,0x8d,0x87,0x7a,0x00,0x2b,0xf3,
+0x70,0xb3,0x90,0x73,0xa0,0x56,0x06,0x3b,0x22,0xa3,0x53,0x30,0x51,0x30,0x1d,
+0x06,0x03,0x55,0x1d,0x0e,0x04,0x16,0x04,0x14,0x26,0xef,0x6f,0xe4,0xb5,0x24,
+0x2f,0x68,0x49,0x84,0xd9,0x89,0xa6,0xab,0x0c,0xf8,0x6d,0xf5,0xe5,0x0c,0x30,
+0x1f,0x06,0x03,0x55,0x1d,0x23,0x04,0x18,0x30,0x16,0x80,0x14,0x26,0xef,0x6f,
+0xe4,0xb5,0x24,0x2f,0x68,0x49,0x84,0xd9,0x89,0xa6,0xab,0x0c,0xf8,0x6d,0xf5,
+0xe5,0x0c,0x30,0x0f,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,0x05,0x30,
+0x03,0x01,0x01,0xff,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x04,0x03,
+0x02,0x03,0x47,0x00,0x30,0x44,0x02,0x20,0x2b,0x6b,0x23,0x42,0x32,0xf2,0xcb,
+0x71,0xd7,0x5c,0xfa,0x5e,0x6c,0x19,0x31,0xd6,0x74,0xf7,0xc0,0xf8,0xc6,0x39,
+0x38,0xe9,0x79,0x4d,0x84,0x44,0x40,0x13,0x8e,0x43,0x02,0x20,0x34,0xc7,0x61,
+0xbb,0x18,0x1c,0x85,0x34,0xe3,0x4c,0x30,0x28,0x42,0x0e,0x06,0x65,0x68,0x1d,
+0x76,0x53,0x24,0xa0,0x27,0xa5,0x84,0x3b,0x2d,0xf3,0xec,0x27,0x60,0xb2 };
+
typedef struct _CONST_DATA_BLOB
{
@@ -3079,6 +3139,8 @@ static SYSTEMTIME jun2013 = { 2013, 6, 5, 6, 0, 0, 0, 0 };
static SYSTEMTIME oct2016 = { 2016, 10, 6, 1, 0, 0, 0, 0 };
/* Wednesday, Nov 17, 2016 */
static SYSTEMTIME nov2016 = { 2016, 11, 3, 17, 0, 0, 0, 0 };
+/* Wednesday, Nov 17, 2017 */
+static SYSTEMTIME nov2017 = { 2017, 11, 3, 17, 0, 0, 0, 0 };
typedef struct _ChainCheck
{
@@ -3866,6 +3928,25 @@ static ChainCheck chainCheckEmbeddedNullBroken = {
CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS },
1, simpleStatus27Broken },
0 };
+static CONST_DATA_BLOB chainECDSA[] = {
+ { sizeof(ecc_ca), ecc_ca },
+ { sizeof(ecc_crt), ecc_crt },
+};
+static const CERT_TRUST_STATUS elementStatusECDSA[] = {
+ { CERT_TRUST_NO_ERROR, CERT_TRUST_HAS_NAME_MATCH_ISSUER },
+ { CERT_TRUST_IS_UNTRUSTED_ROOT, CERT_TRUST_HAS_KEY_MATCH_ISSUER |
CERT_TRUST_IS_SELF_SIGNED },
+};
+static const SimpleChainStatusCheck simpleStatusECDSA[] = {
+ { sizeof(elementStatusECDSA) / sizeof(elementStatusECDSA[0]), elementStatusECDSA },
+};
+static ChainCheck chainCheckECDSA = {
+ { sizeof(chainECDSA) / sizeof(chainECDSA[0]), chainECDSA },
+ {
+ { CERT_TRUST_IS_UNTRUSTED_ROOT, CERT_TRUST_HAS_PREFERRED_ISSUER },
+ { CERT_TRUST_IS_UNTRUSTED_ROOT, 0 },
+ 1, simpleStatusECDSA
+ }, 0
+};
#define test_name_blob(a,b) _test_name_blob(__LINE__,a,b)
static void _test_name_blob(unsigned line, CERT_NAME_BLOB *blob, const char *exdata)
@@ -4141,6 +4222,16 @@ static void testGetCertChain(void)
pCertFreeCertificateChain(chain);
+ /* Test with ECDSA certificate */
+ chain = getChain(NULL, &chainCheckECDSA.certs, 0, TRUE, &nov2017, FALSE, 0);
+ if (chain)
+ {
+ ok(chain->TrustStatus.dwErrorStatus == CERT_TRUST_IS_UNTRUSTED_ROOT,
+ "unexpected chain error status %08x\n",
chain->TrustStatus.dwErrorStatus);
+ checkChainStatus(chain, &chainCheckECDSA.status, chainCheckECDSA.todo,
"chainCheckECDSA", 0);
+ pCertFreeCertificateChain(chain);
+ }
+
/* Test HCCE_LOCAL_MACHINE */
ret = CertGetCertificateChain(HCCE_LOCAL_MACHINE, cert, &fileTime, store,
¶, 0, NULL, &chain);
ok(ret, "CertGetCertificateChain failed: %u\n", GetLastError());
diff --git a/modules/rostests/winetests/crypt32/crl.c
b/modules/rostests/winetests/crypt32/crl.c
index 32460e32d9..c350b20f00 100644
--- a/modules/rostests/winetests/crypt32/crl.c
+++ b/modules/rostests/winetests/crypt32/crl.c
@@ -18,7 +18,17 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winreg.h>
+#include <winerror.h>
+#include <wincrypt.h>
+
+#include "wine/test.h"
+
static const BYTE bigCert[] = { 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
0x00, 0x30, 0x15, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13,
diff --git a/modules/rostests/winetests/crypt32/ctl.c
b/modules/rostests/winetests/crypt32/ctl.c
index 18993c0965..79a60f8c6e 100644
--- a/modules/rostests/winetests/crypt32/ctl.c
+++ b/modules/rostests/winetests/crypt32/ctl.c
@@ -18,7 +18,15 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
+
+#include "wine/test.h"
static const BYTE emptyCTL[] = {
0x30,0x17,0x30,0x00,0x18,0x0f,0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,0x30,
diff --git a/modules/rostests/winetests/crypt32/encode.c
b/modules/rostests/winetests/crypt32/encode.c
index 97cedb1981..ad39a35606 100644
--- a/modules/rostests/winetests/crypt32/encode.c
+++ b/modules/rostests/winetests/crypt32/encode.c
@@ -17,8 +17,16 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
+#include <snmp.h>
+
+#include "wine/test.h"
-#include "precomp.h"
static BOOL (WINAPI *pCryptDecodeObjectEx)(DWORD,LPCSTR,const
BYTE*,DWORD,DWORD,PCRYPT_DECODE_PARA,void*,DWORD*);
static BOOL (WINAPI *pCryptEncodeObjectEx)(DWORD,LPCSTR,const
void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
@@ -1952,80 +1960,138 @@ static void test_decodeUnicodeNameValue(DWORD dwEncoding)
}
}
-struct encodedOctets
-{
- const BYTE *val;
- const BYTE *encoded;
-};
-
-static const unsigned char bin46[] = { 'h','i',0 };
-static const unsigned char bin47[] = { 0x04,0x02,'h','i',0 };
-static const unsigned char bin48[] = {
-
's','o','m','e','l','o','n','g',0xff,'s','t','r','i','n','g',0
};
-static const unsigned char bin49[] = {
-
0x04,0x0f,'s','o','m','e','l','o','n','g',0xff,'s','t','r','i','n','g',0
};
-static const unsigned char bin50[] = { 0 };
-static const unsigned char bin51[] = { 0x04,0x00,0 };
-
-static const struct encodedOctets octets[] = {
- { bin46, bin47 },
- { bin48, bin49 },
- { bin50, bin51 },
-};
+static const unsigned char decoded_hi_octet[] = { 'h','i' };
+static const unsigned char encoded_hi_octet[] = {
ASN_OCTETSTRING,2,'h','i' };
+static const unsigned char decoded_something_long_octet[] = {
+
's','o','m','e','l','o','n','g',0xff,'s','t','r','i','n','g'
};
+static const unsigned char encoded_something_long_octet[] = {
+
ASN_OCTETSTRING,15,'s','o','m','e','l','o','n','g',0xff,'s','t','r','i','n','g'
};
+static const unsigned char encoded_empty_octet[] = { ASN_OCTETSTRING,0 };
static void test_encodeOctets(DWORD dwEncoding)
{
CRYPT_DATA_BLOB blob;
DWORD i;
- for (i = 0; i < sizeof(octets) / sizeof(octets[0]); i++)
+ static const struct {
+ const BYTE *decoded;
+ UINT decoded_size;
+ const BYTE *encoded;
+ UINT encoded_size;
+ } tests[] = {
+ {
+ decoded_hi_octet, sizeof(decoded_hi_octet),
+ encoded_hi_octet, sizeof(encoded_hi_octet)
+ },{
+ decoded_something_long_octet, sizeof(decoded_something_long_octet),
+ encoded_something_long_octet, sizeof(encoded_something_long_octet)
+ },{
+ encoded_empty_octet, 0,
+ encoded_empty_octet, sizeof(encoded_empty_octet)
+ }
+ };
+
+ for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
{
BYTE *buf = NULL;
BOOL ret;
DWORD bufSize = 0;
- blob.cbData = strlen((const char*)octets[i].val);
- blob.pbData = (BYTE*)octets[i].val;
+ blob.cbData = tests[i].decoded_size;
+ blob.pbData = (BYTE*)tests[i].decoded;
ret = pCryptEncodeObjectEx(dwEncoding, X509_OCTET_STRING, &blob,
CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &bufSize);
ok(ret, "CryptEncodeObjectEx failed: %d\n", GetLastError());
if (ret)
{
- ok(buf[0] == 4,
- "Got unexpected type %d for octet string (expected 4)\n",
buf[0]);
- ok(buf[1] == octets[i].encoded[1], "Got length %d, expected %d\n",
- buf[1], octets[i].encoded[1]);
- ok(!memcmp(buf + 1, octets[i].encoded + 1,
- octets[i].encoded[1] + 1), "Got unexpected value\n");
+ ok(bufSize == tests[i].encoded_size, "[%u] buf size %u expected
%u\n",
+ i, bufSize, tests[i].encoded_size);
+ ok(buf[0] == 4, "Got unexpected type %d for octet string (expected
4)\n", buf[0]);
+ ok(buf[1] == tests[i].decoded_size, "[%u] Got length %d, expected
%d\n",
+ i, buf[1], tests[i].decoded_size);
+ ok(!memcmp(buf, tests[i].encoded, tests[i].encoded_size), "[%u] Got
unexpected value\n", i);
LocalFree(buf);
}
}
}
+static const unsigned char encoded_constructed_hi_octet[] =
+ { ASN_CONSTRUCTOR|ASN_OCTETSTRING,0x80, ASN_OCTETSTRING,2,'h','i',
0,0 };
+static const unsigned char encoded_constructed_hi_octet2[] =
+ { ASN_CONSTRUCTOR|ASN_OCTETSTRING,4, ASN_OCTETSTRING,2,'h','i', 1,2,3
};
+static const unsigned char encoded_constructed_hi_octet3[] =
+ { ASN_CONSTRUCTOR|ASN_OCTETSTRING,8, ASN_CONSTRUCTOR|ASN_OCTETSTRING,0x80,
ASN_OCTETSTRING,2,'h','i', 0,0, 0,0 };
+static const unsigned char encoded_constructed_hi_octet_invalid_end[] =
+ { ASN_CONSTRUCTOR|ASN_OCTETSTRING,0x80, ASN_OCTETSTRING,2,'h','i',
0,1 };
+
static void test_decodeOctets(DWORD dwEncoding)
{
DWORD i;
- for (i = 0; i < sizeof(octets) / sizeof(octets[0]); i++)
+ static const struct {
+ const BYTE *encoded;
+ UINT encoded_size;
+ const BYTE *decoded;
+ UINT decoded_size;
+ DWORD error;
+ } tests[] = {
+ {
+ encoded_hi_octet, sizeof(encoded_hi_octet),
+ decoded_hi_octet, sizeof(decoded_hi_octet)
+ },{
+ encoded_something_long_octet, sizeof(encoded_something_long_octet),
+ decoded_something_long_octet, sizeof(decoded_something_long_octet)
+ },{
+ encoded_constructed_hi_octet, sizeof(encoded_constructed_hi_octet),
+ decoded_hi_octet, sizeof(decoded_hi_octet)
+ },{
+ encoded_constructed_hi_octet2, sizeof(encoded_constructed_hi_octet2),
+ decoded_hi_octet, sizeof(decoded_hi_octet)
+ },{
+ encoded_constructed_hi_octet3, sizeof(encoded_constructed_hi_octet3),
+ decoded_hi_octet, sizeof(decoded_hi_octet)
+ },{
+ encoded_empty_octet, sizeof(encoded_empty_octet),
+ encoded_empty_octet, 0
+ },{
+ encoded_hi_octet, sizeof(encoded_hi_octet) - 1,
+ NULL, 0, CRYPT_E_ASN1_EOD
+ },{
+ encoded_constructed_hi_octet, sizeof(encoded_constructed_hi_octet) - 1,
+ NULL, 0, CRYPT_E_ASN1_EOD
+ },{
+ encoded_constructed_hi_octet_invalid_end,
sizeof(encoded_constructed_hi_octet_invalid_end),
+ NULL, 0, CRYPT_E_ASN1_CORRUPT
+ }
+ };
+
+ for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
{
BYTE *buf = NULL;
BOOL ret;
DWORD bufSize = 0;
ret = pCryptDecodeObjectEx(dwEncoding, X509_OCTET_STRING,
- octets[i].encoded, octets[i].encoded[1] + 2,
+ tests[i].encoded, tests[i].encoded_size,
CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &bufSize);
- ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
- ok(bufSize >= sizeof(CRYPT_DATA_BLOB) + octets[i].encoded[1],
- "Expected size >= %d, got %d\n",
- (int)sizeof(CRYPT_DATA_BLOB) + octets[i].encoded[1], bufSize);
+ if (tests[i].error)
+ {
+ ok(!ret && GetLastError() == tests[i].error,
+ "[%u] CryptDecodeObjectEx returned %x(%x)\n", i, ret,
GetLastError());
+ continue;
+ }
+ ok(ret, "[%u] CryptDecodeObjectEx failed: %08x\n", i, GetLastError());
+ ok(bufSize >= sizeof(CRYPT_DATA_BLOB) + tests[i].decoded_size,
+ "[%u] Expected size >= %d, got %d\n", i,
+ (int)sizeof(CRYPT_DATA_BLOB) + tests[i].decoded_size, bufSize);
ok(buf != NULL, "Expected allocated buffer\n");
if (ret)
{
CRYPT_DATA_BLOB *blob = (CRYPT_DATA_BLOB *)buf;
+ ok (blob->cbData == tests[i].decoded_size, "[%u] cbData = %u\n",
i, blob->cbData);
if (blob->cbData)
- ok(!memcmp(blob->pbData, octets[i].val, blob->cbData),
+ ok(!memcmp(blob->pbData, tests[i].decoded, blob->cbData),
"Unexpected value\n");
LocalFree(buf);
}
@@ -3302,18 +3368,76 @@ static const BYTE hash[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa,
0xb, 0xc, 0xd,
0xe, 0xf };
static const BYTE signedBigCert[] = {
- 0x30, 0x81, 0x93, 0x30, 0x7a, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06, 0x00, 0x30,
- 0x15, 0x31, 0x13, 0x30, 0x11, 0x06, 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x4a,
- 0x75, 0x61, 0x6e, 0x20, 0x4c, 0x61, 0x6e, 0x67, 0x00, 0x30, 0x22, 0x18, 0x0f,
- 0x31, 0x36, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30,
- 0x30, 0x5a, 0x18, 0x0f, 0x31, 0x36, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30,
- 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x15, 0x31, 0x13, 0x30, 0x11, 0x06,
- 0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x4a, 0x75, 0x61, 0x6e, 0x20, 0x4c, 0x61,
- 0x6e, 0x67, 0x00, 0x30, 0x07, 0x30, 0x02, 0x06, 0x00, 0x03, 0x01, 0x00, 0xa3,
- 0x16, 0x30, 0x14, 0x30, 0x12, 0x06, 0x03, 0x55, 0x1d, 0x13, 0x01, 0x01, 0xff,
- 0x04, 0x08, 0x30, 0x06, 0x01, 0x01, 0xff, 0x02, 0x01, 0x01, 0x30, 0x02, 0x06,
- 0x00, 0x03, 0x11, 0x00, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07,
- 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+ ASN_SEQUENCE,0x81,147,
+ ASN_SEQUENCE,122,
+ ASN_INTEGER,1, 0x01,
+ ASN_SEQUENCE,2,
+ ASN_OBJECTIDENTIFIER,0,
+ ASN_SEQUENCE,21,
+ 0x31,19,
+ ASN_SEQUENCE,17,
+ ASN_OBJECTIDENTIFIER,3, 0x55,0x04,0x03,
+ 0x13,10, 0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,
+ ASN_SEQUENCE,34,
+ 0x18,15,
0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,
+ 0x18,15,
0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,
+ ASN_SEQUENCE,21,
+ 0x31,19,
+ ASN_SEQUENCE,17,
+ ASN_OBJECTIDENTIFIER,3, 0x55,0x04,0x03,
+ 0x13,10, 0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,
+ ASN_SEQUENCE,7,
+ ASN_SEQUENCE,2,
+ ASN_OBJECTIDENTIFIER,0,
+ ASN_BITS,1, 0x00,
+ 0xa3,22,
+ ASN_SEQUENCE,20,
+ ASN_SEQUENCE,18,
+ ASN_OBJECTIDENTIFIER,3, 0x55,0x1d,0x13,
+ 0x01,1, 0xff,
+ ASN_OCTETSTRING,8, 0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,
+ ASN_SEQUENCE,2,
+ ASN_OBJECTIDENTIFIER,0,
+ ASN_BITS,17, 0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,
+ 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
+};
+
+static const BYTE signedBigCertWithIndefiniteSeq[] = {
+ ASN_SEQUENCE,0x81,151,
+ ASN_SEQUENCE,126,
+ ASN_INTEGER,1, 0x01,
+ ASN_SEQUENCE,2,
+ ASN_OBJECTIDENTIFIER,0,
+ ASN_SEQUENCE,21,
+ 0x31,19,
+ ASN_SEQUENCE,17,
+ ASN_OBJECTIDENTIFIER,3, 0x55,0x04,0x03,
+ 0x13,10, 0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,
+ ASN_SEQUENCE,0x80,
+ 0x18,15,
0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,
+ 0x18,15,
0x31,0x36,0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,
+ 0,0,
+ ASN_SEQUENCE,21,
+ 0x31,19,
+ ASN_SEQUENCE,17,
+ ASN_OBJECTIDENTIFIER,3, 0x55,0x04,0x03,
+ 0x13,10, 0x4a,0x75,0x61,0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,
+ ASN_SEQUENCE,0x80,
+ ASN_SEQUENCE,2,
+ ASN_OBJECTIDENTIFIER,0,
+ ASN_BITS,1, 0x00,
+ 0,0,
+ 0xa3,22,
+ ASN_SEQUENCE,20,
+ ASN_SEQUENCE,18,
+ ASN_OBJECTIDENTIFIER,3, 0x55,0x1d,0x13,
+ 0x01,1, 0xff,
+ ASN_OCTETSTRING,8, 0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,
+ ASN_SEQUENCE,2,
+ ASN_OBJECTIDENTIFIER,0,
+ ASN_BITS,17, 0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,
+ 0x07,0x06,0x05,0x04,0x03,0x02,0x01,0x00
+};
static void test_encodeCert(DWORD dwEncoding)
{
@@ -3369,6 +3493,29 @@ static void test_decodeCert(DWORD dwEncoding)
{
CERT_INFO *info = (CERT_INFO *)buf;
+ ok(size >= sizeof(CERT_INFO), "Wrong size %d\n", size);
+ ok(info->SerialNumber.cbData == 1,
+ "Expected serial number size 1, got %d\n",
info->SerialNumber.cbData);
+ ok(*info->SerialNumber.pbData == *serialNum,
+ "Expected serial number %d, got %d\n", *serialNum,
+ *info->SerialNumber.pbData);
+ ok(info->Issuer.cbData == sizeof(encodedCommonName),
+ "Wrong size %d\n", info->Issuer.cbData);
+ ok(!memcmp(info->Issuer.pbData, encodedCommonName, info->Issuer.cbData),
+ "Unexpected issuer\n");
+ ok(info->Subject.cbData == sizeof(encodedCommonName),
+ "Wrong size %d\n", info->Subject.cbData);
+ ok(!memcmp(info->Subject.pbData, encodedCommonName,
+ info->Subject.cbData), "Unexpected subject\n");
+ LocalFree(buf);
+ }
+ ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_TO_BE_SIGNED,
signedBigCertWithIndefiniteSeq,
+ sizeof(signedBigCertWithIndefiniteSeq), CRYPT_DECODE_ALLOC_FLAG, NULL, &buf,
&size);
+ ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ CERT_INFO *info = (CERT_INFO *)buf;
+
ok(size >= sizeof(CERT_INFO), "Wrong size %d\n", size);
ok(info->SerialNumber.cbData == 1,
"Expected serial number size 1, got %d\n",
info->SerialNumber.cbData);
@@ -5909,32 +6056,79 @@ static const BYTE indefiniteSignedPKCSContent[] = {
0xe3,0x55,0x71,0x91,0xf9,0x2a,0xd1,0xb8,0xaa,0x52,0xb8,0x22,0x3a,0xeb,0x61,
0x00,0x00,0x00,0x00,0x00,0x00 };
+static const BYTE content_abcd[] = {
+ ASN_SEQUENCE, 0x80,
+ ASN_OBJECTIDENTIFIER, 2, 42,3,
+ ASN_CONTEXT|ASN_CONSTRUCTOR, 0x80,
+ ASN_OCTETSTRING, 4, 'a','b','c','d',
+ 0,0,
+ 0,0,
+};
+
+static const BYTE encoded_abcd[] = {
+ ASN_OCTETSTRING, 4, 'a','b','c','d',
+};
+
+static const BYTE content_constructed_abcd[] = {
+ ASN_SEQUENCE, 0x80,
+ ASN_OBJECTIDENTIFIER, 2, 42,3,
+ ASN_CONTEXT|ASN_CONSTRUCTOR, 0x80,
+ ASN_CONSTRUCTOR|ASN_OCTETSTRING,0x80,
+ ASN_OCTETSTRING, 4, 'a','b','0','0',
+ 0,0,
+ 0,0,
+ 0,0,
+ 1,2,3,4,5,6,7 /* extra garbage */
+};
+
static void test_decodePKCSContentInfo(DWORD dwEncoding)
{
BOOL ret;
LPBYTE buf = NULL;
- DWORD size = 0;
+ DWORD size = 0, i;
CRYPT_CONTENT_INFO *info;
- ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
- emptyPKCSContentInfo, sizeof(emptyPKCSContentInfo),
- CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &size);
- ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
- if (ret)
+ const struct {
+ const BYTE *encoded;
+ UINT encoded_size;
+ const char *obj_id;
+ const BYTE *content;
+ UINT content_size;
+ } tests[] = {
+ { emptyPKCSContentInfo, sizeof(emptyPKCSContentInfo),
+ "1.2.3", NULL, 0 },
+ { emptyPKCSContentInfoExtraBytes, sizeof(emptyPKCSContentInfoExtraBytes),
+ "1.2.3", NULL, 0 },
+ { intPKCSContentInfo, sizeof(intPKCSContentInfo),
+ "1.2.3", ints[0].encoded, ints[0].encoded[1] + 2 },
+ { indefiniteSignedPKCSContent, sizeof(indefiniteSignedPKCSContent),
+ "1.2.840.113549.1.7.2", NULL, 392 },
+ { content_abcd, sizeof(content_abcd),
+ "1.2.3", encoded_abcd, 6 },
+ { content_constructed_abcd, sizeof(content_constructed_abcd),
+ "1.2.3", content_constructed_abcd + 8, 10 }
+ };
+
+ for (i = 0; i < sizeof(tests)/sizeof(*tests); i++)
{
+ ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO, tests[i].encoded,
+ tests[i].encoded_size, CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &size);
+ ok(ret, "[%u] CryptDecodeObjectEx failed: %x\n", i, GetLastError());
+ if (!ret) continue;
+
info = (CRYPT_CONTENT_INFO *)buf;
- ok(!strcmp(info->pszObjId, "1.2.3"), "Expected 1.2.3, got
%s\n",
- info->pszObjId);
- ok(info->Content.cbData == 0, "Expected no data, got %d\n",
- info->Content.cbData);
+ ok(!strcmp(info->pszObjId, tests[i].obj_id), "[%u] Expected %s, got
%s\n",
+ i, tests[i].obj_id, info->pszObjId);
+ ok(info->Content.cbData == tests[i].content_size,
+ "[%u] Unexpected size %d expected %d\n", i,
info->Content.cbData,
+ tests[i].content_size);
+ if (tests[i].content)
+ ok(!memcmp(info->Content.pbData, tests[i].content,
tests[i].content_size),
+ "[%u] Unexpected value\n", i);
LocalFree(buf);
}
- ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
- emptyPKCSContentInfoExtraBytes, sizeof(emptyPKCSContentInfoExtraBytes),
- 0, NULL, NULL, &size);
- ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
- SetLastError(0xdeadbeef);
+
ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
bogusPKCSContentInfo, sizeof(bogusPKCSContentInfo),
CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &size);
@@ -5945,36 +6139,6 @@ static void test_decodePKCSContentInfo(DWORD dwEncoding)
GetLastError() == CRYPT_E_ASN1_CORRUPT)) || broken(ret),
"Expected CRYPT_E_ASN1_EOD or CRYPT_E_ASN1_CORRUPT, got %x\n",
GetLastError());
- ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
- intPKCSContentInfo, sizeof(intPKCSContentInfo),
- CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &size);
- ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
- if (ret)
- {
- info = (CRYPT_CONTENT_INFO *)buf;
-
- ok(!strcmp(info->pszObjId, "1.2.3"), "Expected 1.2.3, got
%s\n",
- info->pszObjId);
- ok(info->Content.cbData == ints[0].encoded[1] + 2,
- "Unexpected size %d\n", info->Content.cbData);
- ok(!memcmp(info->Content.pbData, ints[0].encoded,
- info->Content.cbData), "Unexpected value\n");
- LocalFree(buf);
- }
- ret = pCryptDecodeObjectEx(dwEncoding, PKCS_CONTENT_INFO,
- indefiniteSignedPKCSContent, sizeof(indefiniteSignedPKCSContent),
- CRYPT_DECODE_ALLOC_FLAG, NULL, &buf, &size);
- ok(ret, "CryptDecodeObjectEx failed: %x\n", GetLastError());
- if (ret)
- {
- info = (CRYPT_CONTENT_INFO *)buf;
-
- ok(!strcmp(info->pszObjId, szOID_RSA_signedData),
- "Expected %s, got %s\n", szOID_RSA_signedData, info->pszObjId);
- ok(info->Content.cbData == 392, "Expected 392, got %d\n",
- info->Content.cbData);
- LocalFree(buf);
- }
}
static const BYTE emptyPKCSAttr[] = { 0x30,0x06,0x06,0x02,0x2a,0x03,0x31,
@@ -8345,6 +8509,173 @@ static void testPortPublicKeyInfo(void)
ok(ret,"CryptAcquireContextA failed\n");
}
+static const BYTE eccCert[] = {
+0x30,0x82,0x01,0x46,0x30,0x81,0xec,0x02,0x09,0x00,0xe7,0x6b,
+0x26,0x86,0x0a,0x82,0xff,0xe9,0x30,0x0a,0x06,0x08,0x2a,0x86,
+0x48,0xce,0x3d,0x04,0x03,0x02,0x30,0x2b,0x31,0x0b,0x30,0x09,
+0x06,0x03,0x55,0x04,0x06,0x13,0x02,0x44,0x45,0x31,0x0d,0x30,
+0x0b,0x06,0x03,0x55,0x04,0x0a,0x0c,0x04,0x57,0x69,0x6e,0x65,
+0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x03,0x0c,0x04,0x57,
+0x69,0x6e,0x65,0x30,0x1e,0x17,0x0d,0x31,0x37,0x30,0x39,0x32,
+0x37,0x31,0x33,0x34,0x31,0x30,0x34,0x5a,0x17,0x0d,0x32,0x37,
+0x30,0x39,0x32,0x35,0x31,0x33,0x34,0x31,0x30,0x34,0x5a,0x30,
+0x2b,0x31,0x0b,0x30,0x09,0x06,0x03,0x55,0x04,0x06,0x13,0x02,
+0x44,0x45,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,0x04,0x0a,0x0c,
+0x04,0x54,0x65,0x73,0x74,0x31,0x0d,0x30,0x0b,0x06,0x03,0x55,
+0x04,0x03,0x0c,0x04,0x54,0x65,0x73,0x74,0x30,0x59,0x30,0x13,
+0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,0x01,0x06,0x08,0x2a,
+0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,0x42,0x00,0x04,0xed,
+0xfc,0x77,0xd8,0xb9,0xe7,0xf3,0xf8,0xce,0x13,0xb8,0x7f,0x0f,
+0x78,0xea,0x73,0x87,0x29,0x10,0xe1,0x6d,0x10,0xce,0x57,0x60,
+0x3b,0x3e,0xb4,0x5f,0x0d,0x20,0xc1,0xeb,0x6d,0x74,0xe9,0x7b,
+0x11,0x51,0x9a,0x00,0xe8,0xe9,0x12,0x84,0xb9,0x07,0x7e,0x7b,
+0x62,0x67,0x12,0x67,0x08,0xe5,0x2e,0x27,0xce,0xa2,0x57,0x15,
+0xad,0xc5,0x1f,0x30,0x0a,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,
+0x04,0x03,0x02,0x03,0x49,0x00,0x30,0x46,0x02,0x21,0x00,0xd7,
+0x29,0xce,0x5a,0xef,0x74,0x85,0xd1,0x18,0x5f,0x6e,0xf1,0xba,
+0x53,0xd4,0xcd,0xdd,0xe0,0x5d,0xf1,0x5e,0x48,0x51,0xea,0x63,
+0xc0,0xe8,0xe2,0xf6,0xfa,0x4c,0xaf,0x02,0x21,0x00,0xe3,0x94,
+0x15,0x3b,0x6c,0x71,0x6e,0x44,0x22,0xcb,0xa0,0x88,0xcd,0x0a,
+0x5a,0x50,0x29,0x7c,0x5c,0xd6,0x6c,0xd2,0xe0,0x7f,0xcd,0x02,
+0x92,0x21,0x4c,0x2c,0x92,0xee };
+static const BYTE ecdsaSig[] = {
+0x30,0x46,0x02,0x21,0x00,0xd7,0x29,0xce,0x5a,0xef,0x74,0x85,
+0xd1,0x18,0x5f,0x6e,0xf1,0xba,0x53,0xd4,0xcd,0xdd,0xe0,0x5d,
+0xf1,0x5e,0x48,0x51,0xea,0x63,0xc0,0xe8,0xe2,0xf6,0xfa,0x4c,
+0xaf,0x02,0x21,0x00,0xe3,0x94,0x15,0x3b,0x6c,0x71,0x6e,0x44,
+0x22,0xcb,0xa0,0x88,0xcd,0x0a,0x5a,0x50,0x29,0x7c,0x5c,0xd6,
+0x6c,0xd2,0xe0,0x7f,0xcd,0x02,0x92,0x21,0x4c,0x2c,0x92,0xee };
+static const BYTE eccPubKey[] = {
+0x30,0x59,0x30,0x13,0x06,0x07,0x2a,0x86,0x48,0xce,0x3d,0x02,
+0x01,0x06,0x08,0x2a,0x86,0x48,0xce,0x3d,0x03,0x01,0x07,0x03,
+0x42,0x00,0x04,0xed,0xfc,0x77,0xd8,0xb9,0xe7,0xf3,0xf8,0xce,
+0x13,0xb8,0x7f,0x0f,0x78,0xea,0x73,0x87,0x29,0x10,0xe1,0x6d,
+0x10,0xce,0x57,0x60,0x3b,0x3e,0xb4,0x5f,0x0d,0x20,0xc1,0xeb,
+0x6d,0x74,0xe9,0x7b,0x11,0x51,0x9a,0x00,0xe8,0xe9,0x12,0x84,
+0xb9,0x07,0x7e,0x7b,0x62,0x67,0x12,0x67,0x08,0xe5,0x2e,0x27,
+0xce,0xa2,0x57,0x15,0xad,0xc5,0x1f };
+
+static void testECDSACert(void)
+{
+ DWORD decode_flags = CRYPT_DECODE_ALLOC_FLAG |
CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG;
+ CERT_SIGNED_CONTENT_INFO *info;
+ CERT_PUBLIC_KEY_INFO *pubkey;
+ CERT_ECC_SIGNATURE *ecc_sig;
+ LPSTR *ecc_curve;
+ DWORD size;
+ BOOL ret;
+ int i;
+
+ info = NULL;
+ ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT, eccCert, sizeof(eccCert),
decode_flags,
+ NULL, &info, &size);
+ ok(ret, "CryptDecodeObjectEx failed with %d\n", GetLastError());
+
+ ok(!strcmp(info->SignatureAlgorithm.pszObjId, szOID_ECDSA_SHA256),
+ "Expected 1.2.840.10045.4.3.2, got %s\n",
info->SignatureAlgorithm.pszObjId);
+ ok(!info->SignatureAlgorithm.Parameters.cbData,
+ "Expected no parameter data, got %d bytes\n",
info->SignatureAlgorithm.Parameters.cbData);
+ ok(!info->SignatureAlgorithm.Parameters.pbData,
+ "Expected no parameter data, got %p pointer\n",
info->SignatureAlgorithm.Parameters.pbData);
+
+ ok(info->Signature.cbData == sizeof(ecdsaSig),
+ "Expected %d bytes, got %d\n", (int)sizeof(ecdsaSig),
info->Signature.cbData);
+ ok(info->Signature.pbData != NULL, "Got NULL pointer\n");
+ ok(!info->Signature.cUnusedBits, "Expected no unused bytes, got %d\n",
info->Signature.cUnusedBits);
+ for (i = 0; i < info->Signature.cbData; i++)
+ {
+ ok(ecdsaSig[i] == info->Signature.pbData[i], "Expected %02x, got %02x at
offset %d\n",
+ ecdsaSig[i], info->Signature.pbData[i], i);
+ }
+
+ ecc_sig = NULL;
+ ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, X509_ECC_SIGNATURE,
info->Signature.pbData,
+ info->Signature.cbData, decode_flags, NULL,
&ecc_sig, &size);
+ ok(ret, "CryptDecodeObjectEx failed with %d\n", GetLastError());
+ if (ret)
+ {
+ ok(ecc_sig->r.cbData == 32, "Expected 32 bytes, got %d\n",
ecc_sig->r.cbData);
+ ok(ecc_sig->r.pbData != NULL, "Got NULL pointer\n");
+ ok(ecc_sig->s.cbData == 32, "Expected 32 bytes, got %d\n",
ecc_sig->s.cbData);
+ ok(ecc_sig->s.pbData != NULL, "Got NULL pointer\n");
+ for (i = 0; i < ecc_sig->r.cbData; i++)
+ {
+ ok(ecdsaSig[4+32-i] == ecc_sig->r.pbData[i], "Expected %02x, got %02x
at offset %d\n",
+ ecdsaSig[4+32-i], ecc_sig->r.pbData[i], i);
+ }
+ for (i = 0; i < ecc_sig->s.cbData; i++)
+ {
+ ok(ecdsaSig[4+35+32-i] == ecc_sig->s.pbData[i], "Expected %02x, got
%02x at offset %d\n",
+ ecdsaSig[4+35+32-i], ecc_sig->s.pbData[i], i);
+ }
+ LocalFree(ecc_sig);
+ }
+
+ LocalFree(info);
+
+ info = NULL;
+ decode_flags &= ~CRYPT_DECODE_NO_SIGNATURE_BYTE_REVERSAL_FLAG;
+ ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, X509_CERT, eccCert, sizeof(eccCert),
decode_flags,
+ NULL, &info, &size);
+ ok(ret, "CryptDecodeObjectEx failed with %d\n", GetLastError());
+
+ ok(info->Signature.cbData == sizeof(ecdsaSig),
+ "Expected %d bytes, got %d\n", (int)sizeof(ecdsaSig),
info->Signature.cbData);
+ ok(info->Signature.pbData != NULL, "Got NULL pointer\n");
+ ok(!info->Signature.cUnusedBits, "Expected no unused bytes, got %d\n",
info->Signature.cUnusedBits);
+ for (i = 0; i < info->Signature.cbData; i++)
+ {
+ ok(ecdsaSig[sizeof(ecdsaSig)-i-1] == info->Signature.pbData[i], "Expected
%02x, got %02x at offset %d\n",
+ ecdsaSig[sizeof(ecdsaSig)-i-1], info->Signature.pbData[i], i);
+ }
+
+ LocalFree(info);
+
+ pubkey = NULL;
+ ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, X509_PUBLIC_KEY_INFO, eccPubKey,
sizeof(eccPubKey),
+ decode_flags, NULL, &pubkey, &size);
+ ok(ret, "CryptDecodeObjectEx failed with %d\n", GetLastError());
+
+ ok(!strcmp(pubkey->Algorithm.pszObjId, szOID_ECC_PUBLIC_KEY),
+ "Expected 1.2.840.10045.2.1, got %s\n", pubkey->Algorithm.pszObjId);
+ ok(pubkey->Algorithm.Parameters.cbData == 10,
+ "Expected 10 bytes parameters, got %d bytes\n",
pubkey->Algorithm.Parameters.cbData);
+ ok(pubkey->Algorithm.Parameters.pbData != NULL,
+ "Expected pointer to parameters, got NULL\n");
+
+ ecc_curve = NULL;
+ ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, X509_OBJECT_IDENTIFIER,
pubkey->Algorithm.Parameters.pbData,
+ pubkey->Algorithm.Parameters.cbData, decode_flags,
NULL, &ecc_curve, &size);
+ ok(ret || broken(GetLastError() == ERROR_FILE_NOT_FOUND /* < Vista */),
+ "CryptDecodeObjectEx failed with %d\n", GetLastError());
+ if (ret)
+ {
+ ok(!strcmp(*ecc_curve, szOID_ECC_CURVE_P256), "Expected 1.2.840.10045.3.1.7,
got %s\n", *ecc_curve);
+ LocalFree(ecc_curve);
+ }
+
+ ecc_curve = NULL;
+ ret = pCryptDecodeObjectEx(X509_ASN_ENCODING, szOID_ECC_PUBLIC_KEY,
pubkey->Algorithm.Parameters.pbData,
+ pubkey->Algorithm.Parameters.cbData, decode_flags,
NULL, &ecc_curve, &size);
+ ok(ret || broken(GetLastError() == ERROR_FILE_NOT_FOUND /* < Vista */),
+ "CryptDecodeObjectEx failed with %d\n", GetLastError());
+ if (ret)
+ {
+ ok(!strcmp(*ecc_curve, szOID_ECC_CURVE_P256), "Expected 1.2.840.10045.3.1.7,
got %s\n", *ecc_curve);
+ LocalFree(ecc_curve);
+ }
+
+ ok(pubkey->PublicKey.cbData == 65, "Expected 32 bytes parameters, got %d
bytes\n", pubkey->PublicKey.cbData);
+ ok(pubkey->PublicKey.pbData != NULL, "Expected pointer to parameters, got
NULL\n");
+ for (i = 0; i < pubkey->PublicKey.cbData; i++)
+ {
+ ok(eccPubKey[26+i] == pubkey->PublicKey.pbData[i], "Expected %02x, got
%02x at offset %d\n",
+ eccPubKey[26+i], pubkey->PublicKey.pbData[i], i);
+ }
+
+ LocalFree(pubkey);
+}
+
START_TEST(encode)
{
static const DWORD encodings[] = { X509_ASN_ENCODING, PKCS_7_ASN_ENCODING,
@@ -8438,4 +8769,5 @@ START_TEST(encode)
test_decodeRsaPrivateKey(encodings[i]);
}
testPortPublicKeyInfo();
+ testECDSACert();
}
diff --git a/modules/rostests/winetests/crypt32/main.c
b/modules/rostests/winetests/crypt32/main.c
index d6ef8ddeed..a0019b5869 100644
--- a/modules/rostests/winetests/crypt32/main.c
+++ b/modules/rostests/winetests/crypt32/main.c
@@ -18,7 +18,15 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
+#include <winreg.h>
+
+#include "wine/test.h"
static HMODULE hCrypt;
diff --git a/modules/rostests/winetests/crypt32/message.c
b/modules/rostests/winetests/crypt32/message.c
index 11f3ff0cf3..7e2e8aa840 100644
--- a/modules/rostests/winetests/crypt32/message.c
+++ b/modules/rostests/winetests/crypt32/message.c
@@ -18,7 +18,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
+
+#include "wine/test.h"
static BOOL (WINAPI * pCryptAcquireContextA)
(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);
diff --git a/modules/rostests/winetests/crypt32/msg.c
b/modules/rostests/winetests/crypt32/msg.c
index 45a012a22c..c2405335b9 100644
--- a/modules/rostests/winetests/crypt32/msg.c
+++ b/modules/rostests/winetests/crypt32/msg.c
@@ -18,7 +18,16 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#define CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
+#define CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
+#include <wincrypt.h>
+
+#include "wine/test.h"
static BOOL have_nt = TRUE;
static BOOL old_crypt32 = FALSE;
@@ -2848,7 +2857,7 @@ static void test_decode_msg_get_param(void)
HCRYPTPROV hCryptProv;
HCRYPTKEY key = 0;
BOOL ret;
- DWORD size = 0, value;
+ DWORD size = 0, value, req_size;
LPBYTE buf;
CMSG_CTRL_DECRYPT_PARA decryptPara = { sizeof(decryptPara), 0 };
@@ -2938,7 +2947,10 @@ static void test_decode_msg_get_param(void)
signer.SerialNumber.cbData = sizeof(serialNum);
signer.SerialNumber.pbData = serialNum;
signer.HashAlgorithm.pszObjId = oid_rsa_md5;
+ req_size = size;
+ size += 10;
CryptMsgGetParam(msg, CMSG_SIGNER_INFO_PARAM, 0, buf, &size);
+ ok(size == req_size, "size = %u, expected %u\n", size, req_size);
compare_signer_info((CMSG_SIGNER_INFO *)buf, &signer);
CryptMemFree(buf);
}
diff --git a/modules/rostests/winetests/crypt32/object.c
b/modules/rostests/winetests/crypt32/object.c
index 61e64442f5..211b5423e0 100644
--- a/modules/rostests/winetests/crypt32/object.c
+++ b/modules/rostests/winetests/crypt32/object.c
@@ -17,8 +17,14 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
-#include "precomp.h"
+#include "wine/test.h"
static BOOL (WINAPI * pCryptQueryObject)(DWORD, const void *, DWORD, DWORD,
DWORD, DWORD *, DWORD *, DWORD *, HCERTSTORE *, HCRYPTMSG *, const void **);
diff --git a/modules/rostests/winetests/crypt32/oid.c
b/modules/rostests/winetests/crypt32/oid.c
index 9a3dbe130c..89d58b77f8 100644
--- a/modules/rostests/winetests/crypt32/oid.c
+++ b/modules/rostests/winetests/crypt32/oid.c
@@ -17,8 +17,17 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS
+#include <wincrypt.h>
+#include <winreg.h>
+
+#include "wine/test.h"
-#include "precomp.h"
static BOOL (WINAPI *pCryptEnumOIDInfo)(DWORD,DWORD,void*,PFN_CRYPT_ENUM_OID_INFO);
@@ -28,6 +37,7 @@ struct OIDToAlgID
LPCSTR oid;
LPCSTR altOid;
DWORD algID;
+ DWORD altAlgID;
};
static const struct OIDToAlgID oidToAlgID[] = {
@@ -64,6 +74,9 @@ static const struct OIDToAlgID oidToAlgID[] = {
{ szOID_OIWDIR_md2RSA, NULL, CALG_MD2 },
{ szOID_INFOSEC_mosaicUpdatedSig, NULL, CALG_SHA },
{ szOID_INFOSEC_mosaicKMandUpdSig, NULL, CALG_DSS_SIGN },
+ { szOID_NIST_sha256, NULL, CALG_SHA_256, -1 },
+ { szOID_NIST_sha384, NULL, CALG_SHA_384, -1 },
+ { szOID_NIST_sha512, NULL, CALG_SHA_512, -1 }
};
static const struct OIDToAlgID algIDToOID[] = {
@@ -96,10 +109,7 @@ static void testOIDToAlgID(void)
for (i = 0; i < sizeof(oidToAlgID) / sizeof(oidToAlgID[0]); i++)
{
alg = CertOIDToAlgId(oidToAlgID[i].oid);
- /* Not all Windows installations support all these, so make sure it's
- * at least not the wrong one.
- */
- ok(alg == 0 || alg == oidToAlgID[i].algID,
+ ok(alg == oidToAlgID[i].algID || (oidToAlgID[i].altAlgID && alg ==
oidToAlgID[i].altAlgID),
"Expected %d, got %d\n", oidToAlgID[i].algID, alg);
}
}
@@ -118,6 +128,7 @@ static void testAlgIDToOID(void)
{
oid = CertAlgIdToOID(algIDToOID[i].algID);
/* Allow failure, not every version of Windows supports every algo */
+ ok(oid != NULL || broken(!oid), "CertAlgIdToOID failed, expected %s\n",
algIDToOID[i].oid);
if (oid)
{
if (strcmp(oid, algIDToOID[i].oid))
@@ -533,12 +544,16 @@ static void test_enumOIDInfo(void)
static void test_findOIDInfo(void)
{
+ static WCHAR sha256ECDSA[] = {
's','h','a','2','5','6','E','C','D','S','A',0
};
static WCHAR sha1[] = { 's','h','a','1',0 };
- static CHAR oid_rsa_md5[] = szOID_RSA_MD5;
+ static CHAR oid_rsa_md5[] = szOID_RSA_MD5, oid_sha256[] = szOID_NIST_sha256;
+ static CHAR oid_ecda_sha25[] = szOID_ECDSA_SHA256;
ALG_ID alg = CALG_SHA1;
ALG_ID algs[2] = { CALG_MD5, CALG_RSA_SIGN };
PCCRYPT_OID_INFO info;
+ static const WCHAR sha256W[] =
{'s','h','a','2','5','6',0};
+
info = CryptFindOIDInfo(0, NULL, 0);
ok(info == NULL, "Expected NULL\n");
info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, oid_rsa_md5, 0);
@@ -577,6 +592,49 @@ static void test_findOIDInfo(void)
ok(U(*info).Algid == CALG_MD5, "Expected CALG_MD5, got %d\n",
U(*info).Algid);
}
+
+ info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, oid_sha256, 0);
+ ok(info != NULL, "Expected to find szOID_RSA_MD5\n");
+ if (info)
+ {
+ ok(!strcmp(info->pszOID, szOID_NIST_sha256), "Expected %s, got
%s\n",
+ szOID_NIST_sha256, info->pszOID);
+ ok(!lstrcmpW(info->pwszName, sha256W), "pwszName = %s\n",
wine_dbgstr_w(info->pwszName));
+ ok(U(*info).Algid == CALG_SHA_256 || U(*info).Algid == -1,
+ "Expected CALG_MD5 or -1, got %d\n", U(*info).Algid);
+ }
+
+ info = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY, oid_ecda_sha25, 0);
+ if (info)
+ {
+ DWORD *data;
+
+ ok(info->cbSize == sizeof(*info),
+ "Expected %d, got %d\n", (int)sizeof(*info), info->cbSize);
+ ok(!strcmp(info->pszOID, oid_ecda_sha25),
+ "Expected %s, got %s\n", oid_ecda_sha25, info->pszOID);
+ ok(!lstrcmpW(info->pwszName, sha256ECDSA),
+ "Expected %s, got %s\n", wine_dbgstr_w(sha256ECDSA),
wine_dbgstr_w(info->pwszName));
+ ok(info->dwGroupId == CRYPT_SIGN_ALG_OID_GROUP_ID,
+ "Expected CRYPT_SIGN_ALG_OID_GROUP_ID, got %u\n",
info->dwGroupId);
+ ok(U(*info).Algid == CALG_OID_INFO_CNG_ONLY,
+ "Expected CALG_OID_INFO_CNG_ONLY, got %d\n", U(*info).Algid);
+
+ data = (DWORD *)info->ExtraInfo.pbData;
+ ok(info->ExtraInfo.cbData == 8,
+ "Expected 8, got %d\n", info->ExtraInfo.cbData);
+ ok(data[0] == CALG_OID_INFO_PARAMETERS,
+ "Expected CALG_OID_INFO_PARAMETERS, got %x\n", data[0]);
+ ok(data[1] == CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG,
+ "Expected CRYPT_OID_NO_NULL_ALGORITHM_PARA_FLAG, got %x\n",
data[1]);
+
+ ok(!lstrcmpW(info->pwszCNGAlgid, BCRYPT_SHA256_ALGORITHM), "Expected %s,
got %s\n",
+ wine_dbgstr_w(BCRYPT_SHA256_ALGORITHM),
wine_dbgstr_w(info->pwszCNGAlgid));
+ ok(!lstrcmpW(info->pwszCNGExtraAlgid,
CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM), "Expected %s, got %s\n",
+ wine_dbgstr_w(CRYPT_OID_INFO_ECC_PARAMETERS_ALGORITHM),
wine_dbgstr_w(info->pwszCNGExtraAlgid));
+ }
+ else
+ win_skip("Host does not support ECDSA_SHA256, skipping test\n");
}
START_TEST(oid)
diff --git a/modules/rostests/winetests/crypt32/precomp.h
b/modules/rostests/winetests/crypt32/precomp.h
index 81c3376acc..247edf56f1 100644
--- a/modules/rostests/winetests/crypt32/precomp.h
+++ b/modules/rostests/winetests/crypt32/precomp.h
@@ -1,3 +1,4 @@
+
#ifndef _CRYPT32_WINETEST_PRECOMP_H_
#define _CRYPT32_WINETEST_PRECOMP_H_
@@ -5,12 +6,16 @@
#define _INC_WINDOWS
#define COM_NO_WINDOWS_H
+
#include <ntstatus.h>
#define WIN32_NO_STATUS
+
#include <wine/test.h>
#include <winreg.h>
+
#define CMSG_SIGNER_ENCODE_INFO_HAS_CMS_FIELDS
#define CMSG_SIGNED_ENCODE_INFO_HAS_CMS_FIELDS
+#define CRYPT_OID_INFO_HAS_EXTRA_FIELDS
#include <wincrypt.h>
#endif /* !_CRYPT32_WINETEST_PRECOMP_H_ */
diff --git a/modules/rostests/winetests/crypt32/protectdata.c
b/modules/rostests/winetests/crypt32/protectdata.c
index 3cde714cad..70a8ba86b0 100644
--- a/modules/rostests/winetests/crypt32/protectdata.c
+++ b/modules/rostests/winetests/crypt32/protectdata.c
@@ -18,7 +18,14 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
+
+#include "wine/test.h"
static BOOL (WINAPI
*pCryptProtectData)(DATA_BLOB*,LPCWSTR,DATA_BLOB*,PVOID,CRYPTPROTECT_PROMPTSTRUCT*,DWORD,DATA_BLOB*);
static BOOL (WINAPI
*pCryptUnprotectData)(DATA_BLOB*,LPWSTR*,DATA_BLOB*,PVOID,CRYPTPROTECT_PROMPTSTRUCT*,DWORD,DATA_BLOB*);
diff --git a/modules/rostests/winetests/crypt32/sip.c
b/modules/rostests/winetests/crypt32/sip.c
index 512146e826..e2ec2f411d 100644
--- a/modules/rostests/winetests/crypt32/sip.c
+++ b/modules/rostests/winetests/crypt32/sip.c
@@ -19,11 +19,17 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
-
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
#include <winnls.h>
+#include <wincrypt.h>
#include <mssip.h>
+#include "wine/test.h"
+
static BOOL (WINAPI * funcCryptSIPGetSignedDataMsg)(SIP_SUBJECTINFO *,DWORD *,DWORD,DWORD
*,BYTE *);
static BOOL (WINAPI * funcCryptSIPPutSignedDataMsg)(SIP_SUBJECTINFO *,DWORD,DWORD
*,DWORD,BYTE *);
static BOOL (WINAPI * funcCryptSIPCreateIndirectData)(SIP_SUBJECTINFO *,DWORD
*,SIP_INDIRECT_DATA *);
diff --git a/modules/rostests/winetests/crypt32/store.c
b/modules/rostests/winetests/crypt32/store.c
index 226ffc04c3..47cd0b38cd 100644
--- a/modules/rostests/winetests/crypt32/store.c
+++ b/modules/rostests/winetests/crypt32/store.c
@@ -18,10 +18,19 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
-#include "precomp.h"
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winuser.h>
#include <shlobj.h>
#include <shlwapi.h>
+#include <winreg.h>
+#include <winerror.h>
+#include <wincrypt.h>
+
+#include "wine/test.h"
/* The following aren't defined in wincrypt.h, as they're "reserved"
*/
#define CERT_CERT_PROP_ID 32
@@ -108,16 +117,6 @@ static const BYTE signedCTLWithCTLInnerContent[] = {
0x8e,0xe7,0x5f,0x76,0x2b,0xd1,0x6a,0x82,0xb3,0x30,0x25,0x61,0xf6,0x25,0x23,
0x57,0x6c,0x0b,0x47,0xb8 };
-static BOOL (WINAPI *pCertControlStore)(HCERTSTORE,DWORD,DWORD,void const*);
-static PCCRL_CONTEXT (WINAPI *pCertEnumCRLsInStore)(HCERTSTORE,PCCRL_CONTEXT);
-static BOOL (WINAPI
*pCertEnumSystemStore)(DWORD,void*,void*,PFN_CERT_ENUM_SYSTEM_STORE);
-static BOOL (WINAPI *pCertGetStoreProperty)(HCERTSTORE,DWORD,void*,DWORD*);
-static void (WINAPI *pCertRemoveStoreFromCollection)(HCERTSTORE,HCERTSTORE);
-static BOOL (WINAPI *pCertSetStoreProperty)(HCERTSTORE,DWORD,DWORD,const void*);
-static BOOL (WINAPI
*pCertAddCertificateLinkToStore)(HCERTSTORE,PCCERT_CONTEXT,DWORD,PCCERT_CONTEXT*);
-static BOOL (WINAPI *pCertRegisterSystemStore)(const void*,DWORD,void*,void*);
-static BOOL (WINAPI *pCertUnregisterSystemStore)(const void*,DWORD);
-
#define test_store_is_empty(store) _test_store_is_empty(__LINE__,store)
static void _test_store_is_empty(unsigned line, HCERTSTORE store)
{
@@ -882,32 +881,25 @@ static void testCollectionStore(void)
ok(context == NULL, "Unexpected cert\n");
}
- if (!pCertRemoveStoreFromCollection)
- {
- win_skip("CertRemoveStoreFromCollection() is not available\n");
- }
- else
- {
- /* Finally, test removing stores from the collection. No return
- * value, so it's a bit funny to test.
- */
- /* This crashes
- * pCertRemoveStoreFromCollection(NULL, NULL);
- */
- /* This "succeeds," no crash, no last error set */
- SetLastError(0xdeadbeef);
- pCertRemoveStoreFromCollection(store2, collection);
- ok(GetLastError() == 0xdeadbeef,
- "Didn't expect an error to be set: %08x\n", GetLastError());
-
- /* After removing store2, the collection should be empty */
- SetLastError(0xdeadbeef);
- pCertRemoveStoreFromCollection(collection, store2);
- ok(GetLastError() == 0xdeadbeef,
- "Didn't expect an error to be set: %08x\n", GetLastError());
- context = CertEnumCertificatesInStore(collection, NULL);
- ok(!context, "Unexpected cert\n");
- }
+ /* Finally, test removing stores from the collection. No return
+ * value, so it's a bit funny to test.
+ */
+ /* This crashes
+ * CertRemoveStoreFromCollection(NULL, NULL);
+ */
+ /* This "succeeds," no crash, no last error set */
+ SetLastError(0xdeadbeef);
+ CertRemoveStoreFromCollection(store2, collection);
+ ok(GetLastError() == 0xdeadbeef,
+ "Didn't expect an error to be set: %08x\n", GetLastError());
+
+ /* After removing store2, the collection should be empty */
+ SetLastError(0xdeadbeef);
+ CertRemoveStoreFromCollection(collection, store2);
+ ok(GetLastError() == 0xdeadbeef,
+ "Didn't expect an error to be set: %08x\n", GetLastError());
+ context = CertEnumCertificatesInStore(collection, NULL);
+ ok(!context, "Unexpected cert\n");
CertCloseStore(collection, 0);
CertCloseStore(store2, 0);
@@ -935,16 +927,11 @@ static void testCollectionStore(void)
CertCloseStore(store1, 0);
/* Test whether a collection store can be committed */
- if (!pCertControlStore)
- {
- win_skip("CertControlStore() is not available\n");
- return;
- }
collection = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
CERT_STORE_CREATE_NEW_FLAG, NULL);
SetLastError(0xdeadbeef);
- ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
/* Adding a mem store that can't be committed prevents a successful commit.
@@ -953,10 +940,10 @@ static void testCollectionStore(void)
CERT_STORE_CREATE_NEW_FLAG, NULL);
CertAddStoreToCollection(collection, store1, 0, 0);
SetLastError(0xdeadbeef);
- ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
"expected ERROR_CALL_NOT_IMPLEMENTED, got %d\n", GetLastError());
- pCertRemoveStoreFromCollection(collection, store1);
+ CertRemoveStoreFromCollection(collection, store1);
CertCloseStore(store1, 0);
/* Test adding a cert to a collection with a file store, committing the
@@ -982,7 +969,7 @@ static void testCollectionStore(void)
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
GetLastError());
- ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(ret, "CertControlStore failed: %d\n", ret);
compareStore(collection, "serialized store with cert",
serializedStoreWithCert, sizeof(serializedStoreWithCert), FALSE);
@@ -1050,13 +1037,6 @@ static void testRegStore(void)
todo_wine ok(store != 0, "CertOpenStore failed: %08x\n", GetLastError());
CertCloseStore(store, 0);
- /* It looks like the remainder pretty much needs CertControlStore() */
- if (!pCertControlStore)
- {
- win_skip("CertControlStore() is not available\n");
- return;
- }
-
rc = RegCreateKeyExA(HKEY_CURRENT_USER, tempKey, 0, NULL, 0, KEY_ALL_ACCESS,
NULL, &key, NULL);
ok(!rc, "RegCreateKeyExA failed: %d\n", rc);
@@ -1080,7 +1060,7 @@ static void testRegStore(void)
ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
GetLastError());
/* so flush the cache to force a commit.. */
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
/* and check that the expected subkey was written. */
size = sizeof(hash);
@@ -1139,7 +1119,7 @@ static void testRegStore(void)
ok(context != NULL, "Expected a cert context\n");
if (context)
CertDeleteCertificateFromStore(context);
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
/* Add a serialized cert with a bogus hash directly to the registry */
@@ -1176,7 +1156,7 @@ static void testRegStore(void)
sizeof(buf));
ok(!rc, "RegSetValueExA failed: %d\n", rc);
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
/* Make sure the bogus hash cert gets loaded. */
@@ -1233,7 +1213,7 @@ static void testRegStore(void)
sizeof(buf));
ok(!rc, "RegSetValueExA failed: %d\n", rc);
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
/* and make sure just one cert still gets loaded. */
@@ -1244,9 +1224,7 @@ static void testRegStore(void)
if (context)
certCount++;
} while (context != NULL);
- ok(certCount == 1 ||
- broken(certCount == 2) /* NT4 */ ,
- "Expected 1 certificates, got %d\n", certCount);
+ ok(certCount == 1, "Expected 1 certificate, got %d\n", certCount);
/* Try again with the correct hash... */
ptr = buf + sizeof(*hdr);
@@ -1256,7 +1234,7 @@ static void testRegStore(void)
sizeof(buf));
ok(!rc, "RegSetValueExA failed: %d\n", rc);
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_RESYNC, NULL);
ok(ret, "CertControlStore failed: %08x\n", GetLastError());
/* and make sure two certs get loaded. */
@@ -1295,20 +1273,10 @@ static void testRegStore(void)
rc = RegDeleteKeyA(HKEY_CURRENT_USER, tempKey);
if (rc)
{
- HMODULE shlwapi = LoadLibraryA("shlwapi");
-
/* Use shlwapi's SHDeleteKeyA to _really_ blow away the key,
* otherwise subsequent tests will fail.
*/
- if (shlwapi)
- {
- DWORD (WINAPI *pSHDeleteKeyA)(HKEY, LPCSTR);
-
- pSHDeleteKeyA = (void*)GetProcAddress(shlwapi,
"SHDeleteKeyA");
- if (pSHDeleteKeyA)
- pSHDeleteKeyA(HKEY_CURRENT_USER, tempKey);
- FreeLibrary(shlwapi);
- }
+ SHDeleteKeyA(HKEY_CURRENT_USER, tempKey);
}
}
}
@@ -1429,7 +1397,6 @@ static void testSystemStore(void)
if (memStore)
{
BOOL ret = CertAddStoreToCollection(store, memStore, 0, 0);
- /* FIXME: this'll fail on NT4, but what error will it give? */
ok(ret, "CertAddStoreToCollection failed: %08x\n",
GetLastError());
CertCloseStore(memStore, 0);
}
@@ -1480,12 +1447,6 @@ static void testFileStore(void)
PCCERT_CONTEXT cert;
HANDLE file;
- if (!pCertControlStore)
- {
- win_skip("CertControlStore() is not available\n");
- return;
- }
-
store = CertOpenStore(CERT_STORE_PROV_FILE, 0, 0, 0, NULL);
ok(!store && GetLastError() == ERROR_INVALID_HANDLE,
"Expected ERROR_INVALID_HANDLE, got %08x\n", GetLastError());
@@ -1521,7 +1482,7 @@ static void testFileStore(void)
/* apparently allows adding certificates.. */
ok(ret, "CertAddEncodedCertificateToStore failed: %d\n", ret);
/* but not commits.. */
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
"Expected ERROR_CALL_NOT_IMPLEMENTED, got %08x\n", GetLastError());
/* It still has certs in memory.. */
@@ -1545,7 +1506,7 @@ static void testFileStore(void)
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
ok(ret, "CertAddEncodedCertificateToStore failed: %d\n", ret);
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
"Expected ERROR_CALL_NOT_IMPLEMENTED, got %08x\n", GetLastError());
CertCloseStore(store, 0);
@@ -1560,7 +1521,7 @@ static void testFileStore(void)
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
ok(ret, "CertAddEncodedCertificateToStore failed: %d\n", ret);
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
"Expected ERROR_CALL_NOT_IMPLEMENTED, got %08x\n", GetLastError());
CertCloseStore(store, 0);
@@ -1576,7 +1537,7 @@ static void testFileStore(void)
ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
GetLastError());
/* with commits enabled, commit is allowed */
- ret = pCertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(ret, "CertControlStore failed: %d\n", ret);
compareStore(store, "serialized store with cert",
serializedStoreWithCert, sizeof(serializedStoreWithCert), FALSE);
@@ -1692,15 +1653,11 @@ static void testFileNameStore(void)
BOOL ret;
DWORD GLE;
- if (0)
- {
- /* Crashes on NT4 */
- store = CertOpenStore(CERT_STORE_PROV_FILENAME_W, 0, 0, 0, NULL);
- GLE = GetLastError();
- ok(!store && (GLE == ERROR_PATH_NOT_FOUND || GLE ==
ERROR_INVALID_PARAMETER),
- "Expected ERROR_PATH_NOT_FOUND or ERROR_INVALID_PARAMETER, got
%08x\n",
- GLE);
- }
+ store = CertOpenStore(CERT_STORE_PROV_FILENAME_W, 0, 0, 0, NULL);
+ GLE = GetLastError();
+ ok(!store && (GLE == ERROR_PATH_NOT_FOUND || GLE ==
ERROR_INVALID_PARAMETER),
+ "Expected ERROR_PATH_NOT_FOUND or ERROR_INVALID_PARAMETER, got %08x\n",
+ GLE);
if (!GetTempFileNameW(szDot, szPrefix, 0, filename))
return;
@@ -1727,11 +1684,8 @@ static void testFileNameStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(!crl, "Expected no CRLs\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(!crl, "Expected no CRLs\n");
CertCloseStore(store, 0);
DeleteFileW(filename);
@@ -1751,11 +1705,8 @@ static void testFileNameStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(!crl, "Expected no CRLs\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(!crl, "Expected no CRLs\n");
CertCloseStore(store, 0);
DeleteFileW(filename);
@@ -1775,13 +1726,10 @@ static void testFileNameStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(crl != NULL, "CertEnumCRLsInStore failed: %08x\n",
GetLastError());
- crl = pCertEnumCRLsInStore(store, crl);
- ok(!crl, "Expected only one CRL\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(crl != NULL, "CertEnumCRLsInStore failed: %08x\n", GetLastError());
+ crl = CertEnumCRLsInStore(store, crl);
+ ok(!crl, "Expected only one CRL\n");
CertCloseStore(store, 0);
/* Don't delete it this time, the next test uses it */
@@ -1839,11 +1787,8 @@ static void testFileNameStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(!crl, "Expected no CRLs\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(!crl, "Expected no CRLs\n");
CertCloseStore(store, 0);
DeleteFileW(filename);
@@ -1863,11 +1808,8 @@ static void testFileNameStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(!crl, "Expected no CRLs\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(!crl, "Expected no CRLs\n");
CertCloseStore(store, 0);
DeleteFileW(filename);
@@ -1957,16 +1899,13 @@ static void testMessageStore(void)
} while (cert);
ok(count == 0, "Expected 0 certificates, got %d\n", count);
- if (pCertEnumCRLsInStore)
- {
- count = 0;
- do {
- crl = pCertEnumCRLsInStore(store, crl);
- if (crl)
- count++;
- } while (crl);
- ok(count == 0, "Expected 0 CRLs, got %d\n", count);
- }
+ count = 0;
+ do {
+ crl = CertEnumCRLsInStore(store, crl);
+ if (crl)
+ count++;
+ } while (crl);
+ ok(count == 0, "Expected 0 CRLs, got %d\n", count);
/* Can add certs to a message store */
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
@@ -2008,16 +1947,14 @@ static void testMessageStore(void)
} while (cert);
ok(count == 1, "Expected 1 certificate, got %d\n", count);
- if (pCertEnumCRLsInStore)
- {
- count = 0;
- do {
- crl = pCertEnumCRLsInStore(store, crl);
- if (crl)
- count++;
- } while (crl);
- ok(count == 1, "Expected 1 CRL, got %d\n", count);
- }
+ count = 0;
+ do {
+ crl = CertEnumCRLsInStore(store, crl);
+ if (crl)
+ count++;
+ } while (crl);
+ ok(count == 1, "Expected 1 CRL, got %d\n", count);
+
CertCloseStore(store, 0);
}
/* Encoding appears to be ignored */
@@ -2037,9 +1974,7 @@ static void testMessageStore(void)
blob.pbData = (LPBYTE)hashBareContent;
SetLastError(0xdeadbeef);
store = CertOpenStore(CERT_STORE_PROV_PKCS7, 0, 0, 0, &blob);
- ok(!store &&
- (GetLastError() == CRYPT_E_ASN1_BADTAG ||
- broken(GetLastError() == OSS_DATA_ERROR)), /* NT4 */
+ ok(!store && GetLastError() == CRYPT_E_ASN1_BADTAG,
"Expected CRYPT_E_ASN1_BADTAG, got %08x\n", GetLastError());
}
@@ -2073,11 +2008,9 @@ static void testSerializedStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(!crl, "Expected no CRLs\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(!crl, "Expected no CRLs\n");
+
CertCloseStore(store, 0);
}
blob.cbData = sizeof(serializedStoreWithCertAndCRL);
@@ -2094,14 +2027,12 @@ static void testSerializedStore(void)
GetLastError());
cert = CertEnumCertificatesInStore(store, cert);
ok(!cert, "Expected only one cert\n");
- if (pCertEnumCRLsInStore)
- {
- crl = pCertEnumCRLsInStore(store, NULL);
- ok(crl != NULL, "CertEnumCRLsInStore failed: %08x\n",
- GetLastError());
- crl = pCertEnumCRLsInStore(store, crl);
- ok(!crl, "Expected only one CRL\n");
- }
+ crl = CertEnumCRLsInStore(store, NULL);
+ ok(crl != NULL, "CertEnumCRLsInStore failed: %08x\n",
+ GetLastError());
+ crl = CertEnumCRLsInStore(store, crl);
+ ok(!crl, "Expected only one CRL\n");
+
CertCloseStore(store, 0);
}
}
@@ -2150,15 +2081,9 @@ static void testCertRegisterSystemStore(void)
const CERT_CONTEXT *cert, *cert2;
unsigned int i;
- if (!pCertRegisterSystemStore || !pCertUnregisterSystemStore)
- {
- win_skip("CertRegisterSystemStore() or CertUnregisterSystemStore() is not
available\n");
- return;
- }
-
for (i = 0; i < sizeof(reg_system_store_test_data) /
sizeof(reg_system_store_test_data[0]); i++) {
cur_flag = reg_system_store_test_data[i].cert_store;
- ret = pCertRegisterSystemStore(WineTestW, cur_flag, NULL, NULL);
+ ret = CertRegisterSystemStore(WineTestW, cur_flag, NULL, NULL);
if (!ret)
{
err = GetLastError();
@@ -2200,7 +2125,7 @@ static void testCertRegisterSystemStore(void)
ret = CertCloseStore(hstore, 0);
ok (ret, "CertCloseStore failed at %08x, last error %x\n", cur_flag,
GetLastError());
- ret = pCertUnregisterSystemStore(WineTestW, cur_flag );
+ ret = CertUnregisterSystemStore(WineTestW, cur_flag );
todo_wine_if (reg_system_store_test_data[i].todo)
ok( ret == reg_system_store_test_data[i].expected,
"Unregistering failed at %08x, last error %d\n", cur_flag,
GetLastError());
@@ -2228,23 +2153,17 @@ static void testCertEnumSystemStore(void)
BOOL ret;
struct EnumSystemStoreInfo info = { FALSE, 0 };
- if (!pCertEnumSystemStore)
- {
- win_skip("CertEnumSystemStore() is not available\n");
- return;
- }
-
SetLastError(0xdeadbeef);
- ret = pCertEnumSystemStore(0, NULL, NULL, NULL);
+ ret = CertEnumSystemStore(0, NULL, NULL, NULL);
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
"Expected ERROR_FILE_NOT_FOUND, got %08x\n", GetLastError());
/* Crashes
- ret = pCertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, NULL,
+ ret = CertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, NULL,
NULL);
*/
SetLastError(0xdeadbeef);
- ret = pCertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
+ ret = CertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
enumSystemStoreCB);
/* Callback returning FALSE stops enumeration */
ok(!ret, "Expected CertEnumSystemStore to stop\n");
@@ -2253,7 +2172,7 @@ static void testCertEnumSystemStore(void)
info.goOn = TRUE;
info.storeCount = 0;
- ret = pCertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
+ ret = CertEnumSystemStore(CERT_SYSTEM_STORE_LOCAL_MACHINE, NULL, &info,
enumSystemStoreCB);
ok(ret, "CertEnumSystemStore failed: %08x\n", GetLastError());
/* There should always be at least My, Root, and CA stores */
@@ -2268,58 +2187,52 @@ static void testStoreProperty(void)
DWORD propID, size = 0, state;
CRYPT_DATA_BLOB blob;
- if (!pCertGetStoreProperty || !pCertSetStoreProperty)
- {
- win_skip("CertGet/SetStoreProperty() is not available\n");
- return;
- }
-
/* Crash
- ret = pCertGetStoreProperty(NULL, 0, NULL, NULL);
- ret = pCertGetStoreProperty(NULL, 0, NULL, &size);
- ret = pCertGetStoreProperty(store, 0, NULL, NULL);
+ ret = CertGetStoreProperty(NULL, 0, NULL, NULL);
+ ret = CertGetStoreProperty(NULL, 0, NULL, &size);
+ ret = CertGetStoreProperty(store, 0, NULL, NULL);
*/
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
CERT_STORE_CREATE_NEW_FLAG, NULL);
/* Check a missing prop ID */
SetLastError(0xdeadbeef);
- ret = pCertGetStoreProperty(store, 0, NULL, &size);
+ ret = CertGetStoreProperty(store, 0, NULL, &size);
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
/* Contrary to MSDN, CERT_ACCESS_STATE_PROP_ID is supported for stores.. */
size = sizeof(state);
- ret = pCertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state,
&size);
+ ret = CertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state, &size);
ok(ret, "CertGetStoreProperty failed for CERT_ACCESS_STATE_PROP_ID:
%08x\n",
GetLastError());
ok(!state, "Expected a non-persisted store\n");
/* and CERT_STORE_LOCALIZED_NAME_PROP_ID isn't supported by default. */
size = 0;
- ret = pCertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
+ ret = CertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
&size);
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
/* Delete an arbitrary property on a store */
- ret = pCertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
+ ret = CertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
ok(ret, "CertSetStoreProperty failed: %08x\n", GetLastError());
/* Set an arbitrary property on a store */
blob.pbData = (LPBYTE)&state;
blob.cbData = sizeof(state);
- ret = pCertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, &blob);
+ ret = CertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, &blob);
ok(ret, "CertSetStoreProperty failed: %08x\n", GetLastError());
/* Get an arbitrary property that's been set */
- ret = pCertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
+ ret = CertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
ok(ret, "CertGetStoreProperty failed: %08x\n", GetLastError());
ok(size == sizeof(state), "Unexpected data size %d\n", size);
- ret = pCertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, &propID, &size);
+ ret = CertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, &propID, &size);
ok(ret, "CertGetStoreProperty failed: %08x\n", GetLastError());
ok(propID == state, "CertGetStoreProperty got the wrong value\n");
/* Delete it again */
- ret = pCertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
+ ret = CertSetStoreProperty(store, CERT_FIRST_USER_PROP_ID, 0, NULL);
ok(ret, "CertSetStoreProperty failed: %08x\n", GetLastError());
/* And check that it's missing */
SetLastError(0xdeadbeef);
- ret = pCertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
+ ret = CertGetStoreProperty(store, CERT_FIRST_USER_PROP_ID, NULL, &size);
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
CertCloseStore(store, 0);
@@ -2327,13 +2240,13 @@ static void testStoreProperty(void)
/* Recheck on the My store.. */
store = CertOpenSystemStoreW(0, MyW);
size = sizeof(state);
- ret = pCertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state,
&size);
+ ret = CertGetStoreProperty(store, CERT_ACCESS_STATE_PROP_ID, &state, &size);
ok(ret, "CertGetStoreProperty failed for CERT_ACCESS_STATE_PROP_ID:
%08x\n",
GetLastError());
ok(state, "Expected a persisted store\n");
SetLastError(0xdeadbeef);
size = 0;
- ret = pCertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
+ ret = CertGetStoreProperty(store, CERT_STORE_LOCALIZED_NAME_PROP_ID, NULL,
&size);
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
"Expected CRYPT_E_NOT_FOUND, got %08x\n", GetLastError());
@@ -2579,32 +2492,26 @@ static void testAddCertificateLink(void)
WCHAR filename1[MAX_PATH], filename2[MAX_PATH];
HANDLE file;
- if (!pCertAddCertificateLinkToStore)
- {
- win_skip("CertAddCertificateLinkToStore not found\n");
- return;
- }
-
if (0)
{
/* Crashes, i.e. the store is dereferenced without checking. */
- ret = pCertAddCertificateLinkToStore(NULL, NULL, 0, NULL);
+ ret = CertAddCertificateLinkToStore(NULL, NULL, 0, NULL);
}
/* Adding a certificate link to a store requires a valid add disposition */
store1 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
CERT_STORE_CREATE_NEW_FLAG, NULL);
SetLastError(0xdeadbeef);
- ret = pCertAddCertificateLinkToStore(store1, NULL, 0, NULL);
+ ret = CertAddCertificateLinkToStore(store1, NULL, 0, NULL);
ok(!ret && GetLastError() == E_INVALIDARG,
"expected E_INVALIDARG, got %08x\n", GetLastError());
source = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert,
sizeof(bigCert));
SetLastError(0xdeadbeef);
- ret = pCertAddCertificateLinkToStore(store1, source, 0, NULL);
+ ret = CertAddCertificateLinkToStore(store1, source, 0, NULL);
ok(!ret && GetLastError() == E_INVALIDARG,
"expected E_INVALIDARG, got %08x\n", GetLastError());
- ret = pCertAddCertificateLinkToStore(store1, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store1, source, CERT_STORE_ADD_ALWAYS,
NULL);
ok(ret, "CertAddCertificateLinkToStore failed: %08x\n", GetLastError());
if (0)
@@ -2612,14 +2519,14 @@ static void testAddCertificateLink(void)
/* Crashes, i.e. the source certificate is dereferenced without
* checking when a valid add disposition is given.
*/
- ret = pCertAddCertificateLinkToStore(store1, NULL, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store1, NULL, CERT_STORE_ADD_ALWAYS,
NULL);
}
CertCloseStore(store1, 0);
store1 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
CERT_STORE_CREATE_NEW_FLAG, NULL);
- ret = pCertAddCertificateLinkToStore(store1, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store1, source, CERT_STORE_ADD_ALWAYS,
&linked);
ok(ret, "CertAddCertificateLinkToStore failed: %08x\n", GetLastError());
if (ret)
@@ -2695,7 +2602,7 @@ static void testAddCertificateLink(void)
/* Test adding a link to a memory store. */
store2 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
CERT_STORE_CREATE_NEW_FLAG, NULL);
- ret = pCertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
&linked);
ok(ret, "CertAddCertificateLinkToStore failed: %08x\n", GetLastError());
if (ret)
@@ -2757,7 +2664,7 @@ static void testAddCertificateLink(void)
ok(store2 != NULL, "CertOpenStore failed: %08x\n", GetLastError());
CloseHandle(file);
/* Test adding a link to a file store. */
- ret = pCertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
&linked);
ok(ret, "CertAddCertificateLinkToStore failed: %08x\n", GetLastError());
if (ret)
@@ -2799,7 +2706,7 @@ static void testAddCertificateLink(void)
source = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert,
sizeof(bigCert));
SetLastError(0xdeadbeef);
- ret = pCertAddCertificateLinkToStore(store1, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store1, source, CERT_STORE_ADD_ALWAYS,
&linked);
ok(!ret && GetLastError() == E_INVALIDARG,
"expected E_INVALIDARG, got %08x\n", GetLastError());
@@ -2826,13 +2733,13 @@ static void testAddCertificateLink(void)
ok(store2 != NULL, "CertOpenStore failed: %08x\n", GetLastError());
CloseHandle(file);
- ret = pCertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
&linked);
ok(ret, "CertAddCertificateLinkToStore failed: %08x\n", GetLastError());
if (ret)
{
ok(linked->hCertStore == store2, "unexpected store\n");
- ret = pCertControlStore(store2, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ret = CertControlStore(store2, 0, CERT_STORE_CTRL_COMMIT, NULL);
ok(ret, "CertControlStore failed: %d\n", ret);
compareStore(store2, "file store -> system store",
serializedStoreWithCertAndHash,
@@ -2849,7 +2756,7 @@ static void testAddCertificateLink(void)
store2 = CertOpenStore(CERT_STORE_PROV_SYSTEM_REGISTRY, 0, 0,
CERT_SYSTEM_STORE_CURRENT_USER, WineTestW);
ok(store2 != NULL, "CertOpenStore failed: %08x\n", GetLastError());
- ret = pCertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
+ ret = CertAddCertificateLinkToStore(store2, source, CERT_STORE_ADD_ALWAYS,
&linked);
ok(ret, "CertAddCertificateLinkToStore failed: %08x\n", GetLastError());
if (ret)
@@ -2884,7 +2791,7 @@ static DWORD countCRLsInStore(HCERTSTORE store)
DWORD crls = 0;
do {
- crl = pCertEnumCRLsInStore(store, crl);
+ crl = CertEnumCRLsInStore(store, crl);
if (crl)
crls++;
} while (crl);
@@ -3112,11 +3019,8 @@ static void test_I_UpdateStore(void)
ok(ret, "I_CertUpdateStore failed: %08x\n", GetLastError());
certs = countCertsInStore(store1);
ok(certs == 1, "Expected 1 cert, got %d\n", certs);
- if (pCertEnumCRLsInStore)
- {
- certs = countCRLsInStore(store1);
- ok(certs == 1, "Expected 1 CRL, got %d\n", certs);
- }
+ certs = countCRLsInStore(store1);
+ ok(certs == 1, "Expected 1 CRL, got %d\n", certs);
CertDeleteCertificateFromStore(cert);
/* If a context is deleted from store2, I_CertUpdateStore deletes it
@@ -3133,19 +3037,6 @@ static void test_I_UpdateStore(void)
START_TEST(store)
{
- HMODULE hdll;
-
- hdll = GetModuleHandleA("Crypt32.dll");
- pCertControlStore = (void*)GetProcAddress(hdll, "CertControlStore");
- pCertEnumCRLsInStore = (void*)GetProcAddress(hdll, "CertEnumCRLsInStore");
- pCertEnumSystemStore = (void*)GetProcAddress(hdll, "CertEnumSystemStore");
- pCertGetStoreProperty = (void*)GetProcAddress(hdll,
"CertGetStoreProperty");
- pCertRemoveStoreFromCollection = (void*)GetProcAddress(hdll,
"CertRemoveStoreFromCollection");
- pCertSetStoreProperty = (void*)GetProcAddress(hdll,
"CertSetStoreProperty");
- pCertAddCertificateLinkToStore = (void*)GetProcAddress(hdll,
"CertAddCertificateLinkToStore");
- pCertRegisterSystemStore = (void*)GetProcAddress(hdll,
"CertRegisterSystemStore");
- pCertUnregisterSystemStore = (void*)GetProcAddress(hdll,
"CertUnregisterSystemStore");
-
/* various combinations of CertOpenStore */
testMemStore();
testCollectionStore();
diff --git a/modules/rostests/winetests/crypt32/str.c
b/modules/rostests/winetests/crypt32/str.c
index 56480859f8..5245885503 100644
--- a/modules/rostests/winetests/crypt32/str.c
+++ b/modules/rostests/winetests/crypt32/str.c
@@ -17,8 +17,14 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include <stdio.h>
+#include <stdarg.h>
+#include <windef.h>
+#include <winbase.h>
+#include <winerror.h>
+#include <wincrypt.h>
-#include "precomp.h"
+#include "wine/test.h"
typedef struct _CertRDNAttrEncoding {
LPCSTR pszObjId;