2 * Miscellaneous crypt32 tests
4 * Copyright 2005 Juan Lang
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 #include "wine/test.h"
30 static void test_findAttribute(void)
33 BYTE blobbin[] = {0x02,0x01,0x01};
34 CRYPT_ATTR_BLOB blobs[] = { { sizeof blobbin, blobbin }, };
35 CRYPT_ATTRIBUTE attr = { "1.2.3", sizeof(blobs) / sizeof(blobs[0]), blobs };
37 /* returns NULL, last error not set */
38 SetLastError(0xdeadbeef);
39 ret = CertFindAttribute(NULL, 0, NULL);
40 ok(ret == NULL, "Expected failure\n");
41 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
44 SetLastError(0xdeadbeef);
45 ret = CertFindAttribute(NULL, 1, NULL);
47 /* returns NULL, last error is ERROR_INVALID_PARAMETER */
48 SetLastError(0xdeadbeef);
49 ret = CertFindAttribute(NULL, 1, &attr);
50 ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
51 "Expected ERROR_INVALID_PARAMETER, got %ld (%08lx)\n", GetLastError(),
53 /* returns NULL, last error not set */
54 SetLastError(0xdeadbeef);
55 ret = CertFindAttribute("bogus", 1, &attr);
56 ok(ret == NULL, "Expected failure\n");
57 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
59 /* returns NULL, last error not set */
60 SetLastError(0xdeadbeef);
61 ret = CertFindAttribute("1.2.4", 1, &attr);
62 ok(ret == NULL, "Expected failure\n");
63 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
65 /* succeeds, last error not set */
66 SetLastError(0xdeadbeef);
67 ret = CertFindAttribute("1.2.3", 1, &attr);
68 ok(ret != NULL, "CertFindAttribute failed: %08lx\n", GetLastError());
71 static void test_findExtension(void)
74 BYTE blobbin[] = {0x02,0x01,0x01};
75 CERT_EXTENSION ext = { "1.2.3", TRUE, { sizeof blobbin, blobbin } };
77 /* returns NULL, last error not set */
78 SetLastError(0xdeadbeef);
79 ret = CertFindExtension(NULL, 0, NULL);
80 ok(ret == NULL, "Expected failure\n");
81 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
84 SetLastError(0xdeadbeef);
85 ret = CertFindExtension(NULL, 1, NULL);
87 /* returns NULL, last error is ERROR_INVALID_PARAMETER */
88 SetLastError(0xdeadbeef);
89 ret = CertFindExtension(NULL, 1, &ext);
90 ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
91 "Expected ERROR_INVALID_PARAMETER, got %ld (%08lx)\n", GetLastError(),
93 /* returns NULL, last error not set */
94 SetLastError(0xdeadbeef);
95 ret = CertFindExtension("bogus", 1, &ext);
96 ok(ret == NULL, "Expected failure\n");
97 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
99 /* returns NULL, last error not set */
100 SetLastError(0xdeadbeef);
101 ret = CertFindExtension("1.2.4", 1, &ext);
102 ok(ret == NULL, "Expected failure\n");
103 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
105 /* succeeds, last error not set */
106 SetLastError(0xdeadbeef);
107 ret = CertFindExtension("1.2.3", 1, &ext);
108 ok(ret != NULL, "CertFindExtension failed: %08lx\n", GetLastError());
111 static void test_findRDNAttr(void)
114 BYTE bin[] = { 0x16,0x09,'J','u','a','n',' ','L','a','n','g' };
115 CERT_RDN_ATTR attrs[] = {
116 { "1.2.3", CERT_RDN_IA5_STRING, { sizeof bin, bin } },
119 { sizeof(attrs) / sizeof(attrs[0]), attrs },
121 CERT_NAME_INFO nameInfo = { sizeof(rdns) / sizeof(rdns[0]), rdns };
124 SetLastError(0xdeadbeef);
125 ret = CertFindRDNAttr(NULL, NULL);
127 /* returns NULL, last error is ERROR_INVALID_PARAMETER */
128 SetLastError(0xdeadbeef);
129 ret = CertFindRDNAttr(NULL, &nameInfo);
130 ok(!ret && GetLastError() == ERROR_INVALID_PARAMETER,
131 "Expected ERROR_INVALID_PARAMETER, got %ld (%08lx)\n", GetLastError(),
133 /* returns NULL, last error not set */
134 SetLastError(0xdeadbeef);
135 ret = CertFindRDNAttr("bogus", &nameInfo);
136 ok(ret == NULL, "Expected failure\n");
137 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
139 /* returns NULL, last error not set */
140 SetLastError(0xdeadbeef);
141 ret = CertFindRDNAttr("1.2.4", &nameInfo);
142 ok(ret == NULL, "Expected failure\n");
143 ok(GetLastError() == 0xdeadbeef, "Last error was set to %08lx\n",
145 /* succeeds, last error not set */
146 SetLastError(0xdeadbeef);
147 ret = CertFindRDNAttr("1.2.3", &nameInfo);
148 ok(ret != NULL, "CertFindRDNAttr failed: %08lx\n", GetLastError());
151 static void test_verifyTimeValidity(void)
155 CERT_INFO info = { 0 };
158 GetSystemTime(&sysTime);
159 SystemTimeToFileTime(&sysTime, &fileTime);
161 ret = CertVerifyTimeValidity(NULL, NULL);
162 ret = CertVerifyTimeValidity(&fileTime, NULL);
164 /* Check with 0 NotBefore and NotAfter */
165 ret = CertVerifyTimeValidity(&fileTime, &info);
166 ok(ret == 1, "Expected 1, got %ld\n", ret);
167 memcpy(&info.NotAfter, &fileTime, sizeof(info.NotAfter));
168 /* Check with NotAfter equal to comparison time */
169 ret = CertVerifyTimeValidity(&fileTime, &info);
170 ok(ret == 0, "Expected 0, got %ld\n", ret);
171 /* Check with NotBefore after comparison time */
172 memcpy(&info.NotBefore, &fileTime, sizeof(info.NotBefore));
173 info.NotBefore.dwLowDateTime += 5000;
174 ret = CertVerifyTimeValidity(&fileTime, &info);
175 ok(ret == -1, "Expected -1, got %ld\n", ret);
178 static void test_cryptAllocate(void)
182 buf = CryptMemAlloc(0);
183 ok(buf != NULL, "CryptMemAlloc failed: %08lx\n", GetLastError());
185 buf = CryptMemRealloc(NULL, 0);
186 ok(!buf, "Expected NULL\n");
187 buf = CryptMemAlloc(0);
188 buf = CryptMemRealloc(buf, 1);
189 ok(buf != NULL, "CryptMemRealloc failed: %08lx\n", GetLastError());
193 typedef DWORD (WINAPI *I_CryptAllocTlsFunc)(void);
194 typedef LPVOID (WINAPI *I_CryptDetachTlsFunc)(DWORD dwTlsIndex);
195 typedef LPVOID (WINAPI *I_CryptGetTlsFunc)(DWORD dwTlsIndex);
196 typedef BOOL (WINAPI *I_CryptSetTlsFunc)(DWORD dwTlsIndex, LPVOID lpTlsValue);
197 typedef BOOL (WINAPI *I_CryptFreeTlsFunc)(DWORD dwTlsIndex, DWORD unknown);
199 static I_CryptAllocTlsFunc pI_CryptAllocTls;
200 static I_CryptDetachTlsFunc pI_CryptDetachTls;
201 static I_CryptGetTlsFunc pI_CryptGetTls;
202 static I_CryptSetTlsFunc pI_CryptSetTls;
203 static I_CryptFreeTlsFunc pI_CryptFreeTls;
205 static void test_cryptTls(void)
207 HMODULE lib = LoadLibraryA("crypt32.dll");
214 pI_CryptAllocTls = (I_CryptAllocTlsFunc)GetProcAddress(lib,
216 pI_CryptDetachTls = (I_CryptDetachTlsFunc)GetProcAddress(lib,
218 pI_CryptGetTls = (I_CryptGetTlsFunc)GetProcAddress(lib,
220 pI_CryptSetTls = (I_CryptSetTlsFunc)GetProcAddress(lib,
222 pI_CryptFreeTls = (I_CryptFreeTlsFunc)GetProcAddress(lib,
225 /* One normal pass */
226 index = pI_CryptAllocTls();
227 ok(index, "I_CryptAllocTls failed: %08lx\n", GetLastError());
232 ptr = pI_CryptGetTls(index);
233 ok(!ptr, "Expected NULL\n");
234 ret = pI_CryptSetTls(index, (LPVOID)0xdeadbeef);
235 ok(ret, "I_CryptSetTls failed: %08lx\n", GetLastError());
236 ptr = pI_CryptGetTls(index);
237 ok(ptr == (LPVOID)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", ptr);
239 ret = pI_CryptFreeTls(index, 1);
241 ret = pI_CryptFreeTls(index, 0);
242 ok(ret, "I_CryptFreeTls failed: %08lx\n", GetLastError());
243 ret = pI_CryptFreeTls(index, 0);
244 /* Not sure if this fails because TlsFree should fail, so leave as
247 todo_wine ok(!ret && GetLastError() ==
248 HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER),
249 "Expected HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER), got %08lx\n",
252 /* Similar pass, check I_CryptDetachTls */
253 index = pI_CryptAllocTls();
254 ok(index, "I_CryptAllocTls failed: %08lx\n", GetLastError());
259 ptr = pI_CryptGetTls(index);
260 ok(!ptr, "Expected NULL\n");
261 ret = pI_CryptSetTls(index, (LPVOID)0xdeadbeef);
262 ok(ret, "I_CryptSetTls failed: %08lx\n", GetLastError());
263 ptr = pI_CryptGetTls(index);
264 ok(ptr == (LPVOID)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", ptr);
265 ptr = pI_CryptDetachTls(index);
266 ok(ptr == (LPVOID)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", ptr);
267 ptr = pI_CryptGetTls(index);
268 ok(!ptr, "Expected NULL\n");
276 test_findAttribute();
277 test_findExtension();
279 test_verifyTimeValidity();
280 test_cryptAllocate();