crypt32/tests: Get rid of workarounds for old Windows versions.
Signed-off-by: Hans Leidekker <hans@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
bc81fdbf7c
commit
21f82ad4ff
|
@ -32,32 +32,6 @@
|
|||
|
||||
#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*);
|
||||
static BOOL (WINAPI *pCryptAcquireCertificatePrivateKey)(PCCERT_CONTEXT,DWORD,void*,HCRYPTPROV_OR_NCRYPT_KEY_HANDLE*,DWORD*,BOOL*);
|
||||
static BOOL (WINAPI *pCryptEncodeObjectEx)(DWORD,LPCSTR,const void*,DWORD,PCRYPT_ENCODE_PARA,void*,DWORD*);
|
||||
static BOOL (WINAPI *pCryptHashCertificate2)(LPCWSTR, DWORD, void*, const BYTE*, DWORD, BYTE*, DWORD*);
|
||||
static BOOL (WINAPI * pCryptVerifyCertificateSignatureEx)
|
||||
(HCRYPTPROV, DWORD, DWORD, void *, DWORD, void *, DWORD, void *);
|
||||
|
||||
static void init_function_pointers(void)
|
||||
{
|
||||
HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
|
||||
|
||||
#define GET_PROC(dll, func) \
|
||||
p ## func = (void *)GetProcAddress(dll, #func); \
|
||||
if(!p ## func) \
|
||||
trace("GetProcAddress(%s) failed\n", #func);
|
||||
|
||||
GET_PROC(hCrypt32, CertCreateSelfSignCertificate)
|
||||
GET_PROC(hCrypt32, CertGetValidUsages)
|
||||
GET_PROC(hCrypt32, CryptAcquireCertificatePrivateKey)
|
||||
GET_PROC(hCrypt32, CryptEncodeObjectEx)
|
||||
GET_PROC(hCrypt32, CryptHashCertificate2)
|
||||
GET_PROC(hCrypt32, CryptVerifyCertificateSignatureEx)
|
||||
#undef GET_PROC
|
||||
}
|
||||
|
||||
static BYTE subjectName[] = { 0x30, 0x15, 0x31, 0x13, 0x30, 0x11, 0x06,
|
||||
0x03, 0x55, 0x04, 0x03, 0x13, 0x0a, 0x4a, 0x75, 0x61, 0x6e, 0x20, 0x4c, 0x61,
|
||||
0x6e, 0x67, 0x00 };
|
||||
|
@ -152,24 +126,18 @@ static void testAddCert(void)
|
|||
if (!store)
|
||||
return;
|
||||
|
||||
/* Weird--bad add disposition leads to an access violation in Windows.
|
||||
* Both tests crash on some win9x boxes.
|
||||
*/
|
||||
if (0)
|
||||
{
|
||||
ret = CertAddEncodedCertificateToStore(0, X509_ASN_ENCODING, bigCert,
|
||||
sizeof(bigCert), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n",
|
||||
GetLastError());
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n",
|
||||
GetLastError());
|
||||
}
|
||||
ret = CertAddEncodedCertificateToStore(0, X509_ASN_ENCODING, bigCert,
|
||||
sizeof(bigCert), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n",
|
||||
GetLastError());
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n",
|
||||
GetLastError());
|
||||
|
||||
/* Weird--can add a cert to the NULL store (does this have special
|
||||
* meaning?)
|
||||
|
@ -177,15 +145,8 @@ static void testAddCert(void)
|
|||
context = NULL;
|
||||
ret = CertAddEncodedCertificateToStore(0, X509_ASN_ENCODING, bigCert,
|
||||
sizeof(bigCert), CERT_STORE_ADD_ALWAYS, &context);
|
||||
ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
|
||||
"CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
if (context)
|
||||
CertFreeCertificateContext(context);
|
||||
if (!ret && GetLastError() == OSS_DATA_ERROR)
|
||||
{
|
||||
skip("bigCert can't be decoded, skipping tests\n");
|
||||
return;
|
||||
}
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
CertFreeCertificateContext(context);
|
||||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
|
||||
|
@ -409,14 +370,11 @@ static void testCertProperties(void)
|
|||
CRYPT_DATA_BLOB blob;
|
||||
CERT_KEY_CONTEXT keyContext;
|
||||
|
||||
ok(context != NULL || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
|
||||
"CertCreateCertificateContext failed: %08lx\n", GetLastError());
|
||||
if (!context)
|
||||
return;
|
||||
ok(context != NULL, "CertCreateCertificateContext failed: %08lx\n", GetLastError());
|
||||
|
||||
/* This crashes
|
||||
propID = CertEnumCertificateContextProperties(NULL, 0);
|
||||
*/
|
||||
*/
|
||||
|
||||
propID = 0;
|
||||
numProps = 0;
|
||||
|
@ -513,10 +471,7 @@ static void testCertProperties(void)
|
|||
size = 0;
|
||||
ret = CertGetCertificateContextProperty(context,
|
||||
CERT_SIGNATURE_HASH_PROP_ID, NULL, &size);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
|
||||
/* Test key contexts and handles and such */
|
||||
|
@ -646,9 +601,7 @@ static void testCreateCert(void)
|
|||
"expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
cert = CertCreateCertificateContext(X509_ASN_ENCODING, NULL, 0);
|
||||
ok(!cert &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
broken(GetLastError() == OSS_MORE_INPUT /* NT4 */)),
|
||||
ok(!cert && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
|
||||
cert = CertCreateCertificateContext(X509_ASN_ENCODING,
|
||||
|
@ -687,13 +640,7 @@ static void testDupCert(void)
|
|||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, &context);
|
||||
ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
|
||||
"CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
if (!ret && GetLastError() == OSS_DATA_ERROR)
|
||||
{
|
||||
skip("bigCert can't be decoded, skipping tests\n");
|
||||
return;
|
||||
}
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
ok(context != NULL, "Expected a valid cert context\n");
|
||||
if (context)
|
||||
{
|
||||
|
@ -1143,13 +1090,8 @@ static void testFindCert(void)
|
|||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), CERT_STORE_ADD_NEW, NULL);
|
||||
ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
|
||||
"CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
if (!ret && GetLastError() == OSS_DATA_ERROR)
|
||||
{
|
||||
skip("bigCert can't be decoded, skipping tests\n");
|
||||
return;
|
||||
}
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert2, sizeof(bigCert2), CERT_STORE_ADD_NEW, NULL);
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n",
|
||||
|
@ -1368,13 +1310,8 @@ static void testGetSubjectCert(void)
|
|||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
|
||||
ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* win98 */),
|
||||
"CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
if (!ret && GetLastError() == OSS_DATA_ERROR)
|
||||
{
|
||||
skip("bigCert can't be decoded, skipping tests\n");
|
||||
return;
|
||||
}
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n", GetLastError());
|
||||
|
||||
ret = CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING,
|
||||
bigCert2, sizeof(bigCert2), CERT_STORE_ADD_NEW, &context1);
|
||||
ok(ret, "CertAddEncodedCertificateToStore failed: %08lx\n",
|
||||
|
@ -1791,29 +1728,23 @@ static void testCryptHashCert2(void)
|
|||
BYTE hash[20];
|
||||
DWORD hashLen;
|
||||
|
||||
if (!pCryptHashCertificate2)
|
||||
{
|
||||
win_skip("CryptHashCertificate2() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Test empty hash */
|
||||
hashLen = sizeof(hash);
|
||||
ret = pCryptHashCertificate2(L"SHA1", 0, NULL, NULL, 0, hash, &hashLen);
|
||||
ret = CryptHashCertificate2(L"SHA1", 0, NULL, NULL, 0, hash, &hashLen);
|
||||
ok(ret, "CryptHashCertificate2 failed: %08lx\n", GetLastError());
|
||||
ok(hashLen == sizeof(hash), "Got unexpected size of hash %ld\n", hashLen);
|
||||
ok(!memcmp(hash, emptyHash, sizeof(emptyHash)), "Unexpected hash of nothing\n");
|
||||
|
||||
/* Test known hash */
|
||||
hashLen = sizeof(hash);
|
||||
ret = pCryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ret = CryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ok(ret, "CryptHashCertificate2 failed: %08lx\n", GetLastError());
|
||||
ok(hashLen == sizeof(hash), "Got unexpected size of hash %ld\n", hashLen);
|
||||
ok(!memcmp(hash, knownHash, sizeof(knownHash)), "Unexpected hash\n");
|
||||
|
||||
/* Test null hash size pointer just sets hash size */
|
||||
hashLen = 0;
|
||||
ret = pCryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), NULL, &hashLen);
|
||||
ret = CryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), NULL, &hashLen);
|
||||
ok(ret, "CryptHashCertificate2 failed: %08lx\n", GetLastError());
|
||||
ok(hashLen == sizeof(hash), "Hash size not set correctly (%ld)\n", hashLen);
|
||||
|
||||
|
@ -1821,30 +1752,30 @@ static void testCryptHashCert2(void)
|
|||
if (0) {
|
||||
/* Test null algorithm ID */
|
||||
hashLen = sizeof(hash);
|
||||
ret = pCryptHashCertificate2(NULL, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ret = CryptHashCertificate2(NULL, 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
}
|
||||
|
||||
/* Test invalid algorithm */
|
||||
hashLen = sizeof(hash);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptHashCertificate2(L"_SHOULDNOTEXIST_", 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ret = CryptHashCertificate2(L"_SHOULDNOTEXIST_", 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ok(!ret && GetLastError() == STATUS_NOT_FOUND,
|
||||
"Expected STATUS_NOT_FOUND (0x%08lx), got 0x%08lx\n", STATUS_NOT_FOUND, GetLastError());
|
||||
|
||||
/* Test hash buffer too small */
|
||||
hashLen = sizeof(hash) / 2;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ret = CryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), hash, &hashLen);
|
||||
ok(!ret && GetLastError() == ERROR_MORE_DATA,
|
||||
"Expected ERROR_MORE_DATA (%d), got %ld\n", ERROR_MORE_DATA, GetLastError());
|
||||
|
||||
/* Null hash length crashes Windows implementations */
|
||||
if (0) {
|
||||
/* Test hashLen null with hash */
|
||||
ret = pCryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), hash, NULL);
|
||||
ret = CryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), hash, NULL);
|
||||
|
||||
/* Test hashLen null with no hash */
|
||||
ret = pCryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), NULL, NULL);
|
||||
ret = CryptHashCertificate2(L"SHA1", 0, NULL, toHash, sizeof(toHash), NULL, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1862,7 +1793,6 @@ static void verifySig(HCRYPTPROV csp, const BYTE *toSign, size_t toSignLen,
|
|||
|
||||
ret = CryptHashData(hash, toSign, toSignLen, 0);
|
||||
ok(ret, "CryptHashData failed: %08lx\n", GetLastError());
|
||||
/* use the A variant so the test can run on Win9x */
|
||||
ret = CryptSignHashA(hash, AT_SIGNATURE, NULL, 0, mySig, &mySigSize);
|
||||
ok(ret, "CryptSignHash failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
|
@ -1950,11 +1880,6 @@ static void testVerifyCertSig(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigned,
|
|||
DWORD size = 0;
|
||||
BOOL ret;
|
||||
|
||||
if (!pCryptEncodeObjectEx)
|
||||
{
|
||||
win_skip("no CryptEncodeObjectEx support\n");
|
||||
return;
|
||||
}
|
||||
ret = CryptVerifyCertificateSignature(0, 0, NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
|
@ -1963,9 +1888,8 @@ static void testVerifyCertSig(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigned,
|
|||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
ret = CryptVerifyCertificateSignature(csp, X509_ASN_ENCODING, NULL, 0,
|
||||
NULL);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG),
|
||||
"Expected CRYPT_E_ASN1_EOD or OSS_BAD_ARG, got %08lx\n", GetLastError());
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
info.ToBeSigned.cbData = toBeSigned->cbData;
|
||||
info.ToBeSigned.pbData = toBeSigned->pbData;
|
||||
info.SignatureAlgorithm.pszObjId = (LPSTR)sigOID;
|
||||
|
@ -1973,7 +1897,7 @@ static void testVerifyCertSig(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigned,
|
|||
info.Signature.cbData = sigLen;
|
||||
info.Signature.pbData = (BYTE *)sig;
|
||||
info.Signature.cUnusedBits = 0;
|
||||
ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, &info,
|
||||
ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, &info,
|
||||
CRYPT_ENCODE_ALLOC_FLAG, NULL, &cert, &size);
|
||||
ok(ret, "CryptEncodeObjectEx failed: %08lx\n", GetLastError());
|
||||
if (cert)
|
||||
|
@ -2017,28 +1941,18 @@ static void testVerifyCertSigEx(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigne
|
|||
DWORD size = 0;
|
||||
BOOL ret;
|
||||
|
||||
if (!pCryptVerifyCertificateSignatureEx)
|
||||
{
|
||||
win_skip("no CryptVerifyCertificateSignatureEx support\n");
|
||||
return;
|
||||
}
|
||||
if (!pCryptEncodeObjectEx)
|
||||
{
|
||||
win_skip("no CryptEncodeObjectEx support\n");
|
||||
return;
|
||||
}
|
||||
ret = pCryptVerifyCertificateSignatureEx(0, 0, 0, NULL, 0, NULL, 0, NULL);
|
||||
ret = CryptVerifyCertificateSignatureEx(0, 0, 0, NULL, 0, NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, 0, 0, NULL, 0, NULL, 0, NULL);
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, 0, 0, NULL, 0, NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING, 0, NULL, 0,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING, 0, NULL, 0,
|
||||
NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
/* This crashes
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, NULL, 0, NULL, 0, NULL);
|
||||
*/
|
||||
info.ToBeSigned.cbData = toBeSigned->cbData;
|
||||
|
@ -2048,7 +1962,7 @@ static void testVerifyCertSigEx(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigne
|
|||
info.Signature.cbData = sigLen;
|
||||
info.Signature.pbData = (BYTE *)sig;
|
||||
info.Signature.cUnusedBits = 0;
|
||||
ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, &info,
|
||||
ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT, &info,
|
||||
CRYPT_ENCODE_ALLOC_FLAG, NULL, &cert, &size);
|
||||
ok(ret, "CryptEncodeObjectEx failed: %08lx\n", GetLastError());
|
||||
if (cert)
|
||||
|
@ -2056,33 +1970,31 @@ static void testVerifyCertSigEx(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigne
|
|||
CRYPT_DATA_BLOB certBlob = { 0, NULL };
|
||||
PCERT_PUBLIC_KEY_INFO pubKeyInfo = NULL;
|
||||
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, &certBlob, 0, NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
certBlob.cbData = 1;
|
||||
certBlob.pbData = (void *)0xdeadbeef;
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, &certBlob, 0, NULL, 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == CRYPT_E_ASN1_EOD /* Win9x */ ||
|
||||
GetLastError() == CRYPT_E_ASN1_BADTAG /* Win98 */),
|
||||
ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
|
||||
"Expected STATUS_ACCESS_VIOLATION, CRYPT_E_ASN1_EOD, OR CRYPT_E_ASN1_BADTAG, got %08lx\n",
|
||||
GetLastError());
|
||||
|
||||
certBlob.cbData = size;
|
||||
certBlob.pbData = cert;
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, &certBlob, 0, NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, &certBlob,
|
||||
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL, NULL, 0, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
/* This crashes
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, &certBlob,
|
||||
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY, NULL, 0, NULL);
|
||||
*/
|
||||
|
@ -2096,7 +2008,7 @@ static void testVerifyCertSigEx(HCRYPTPROV csp, const CRYPT_DATA_BLOB *toBeSigne
|
|||
ok(ret, "CryptExportKey failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ret = pCryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
ret = CryptVerifyCertificateSignatureEx(csp, X509_ASN_ENCODING,
|
||||
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB, &certBlob,
|
||||
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY, pubKeyInfo, 0, NULL);
|
||||
ok(ret, "CryptVerifyCertificateSignatureEx failed: %08lx\n",
|
||||
|
@ -2177,31 +2089,23 @@ static void testSignAndEncodeCert(void)
|
|||
&algID, NULL, NULL, &size);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
/* Crashes on some win9x boxes */
|
||||
if (0)
|
||||
{
|
||||
ret = CryptSignAndEncodeCertificate(0, 0, X509_ASN_ENCODING,
|
||||
X509_CERT_TO_BE_SIGNED, NULL, &algID, NULL, NULL, &size);
|
||||
ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
|
||||
"Expected STATUS_ACCESS_VIOLATION, got %08lx\n", GetLastError());
|
||||
}
|
||||
ret = CryptSignAndEncodeCertificate(0, 0, X509_ASN_ENCODING,
|
||||
X509_CERT_TO_BE_SIGNED, NULL, &algID, NULL, NULL, &size);
|
||||
ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
|
||||
"Expected STATUS_ACCESS_VIOLATION, got %08lx\n", GetLastError());
|
||||
|
||||
/* Crashes
|
||||
ret = CryptSignAndEncodeCertificate(0, 0, X509_ASN_ENCODING,
|
||||
X509_CERT_TO_BE_SIGNED, &info, NULL, NULL, NULL, &size);
|
||||
*/
|
||||
ret = CryptSignAndEncodeCertificate(0, 0, X509_ASN_ENCODING,
|
||||
X509_CERT_TO_BE_SIGNED, &info, &algID, NULL, NULL, &size);
|
||||
ok(!ret &&
|
||||
(GetLastError() == NTE_BAD_ALGID ||
|
||||
GetLastError() == OSS_BAD_PTR), /* win9x */
|
||||
ok(!ret && GetLastError() == NTE_BAD_ALGID,
|
||||
"Expected NTE_BAD_ALGID, got %08lx\n", GetLastError());
|
||||
algID.pszObjId = oid_rsa_md5rsa;
|
||||
ret = CryptSignAndEncodeCertificate(0, 0, X509_ASN_ENCODING,
|
||||
X509_CERT_TO_BE_SIGNED, &info, &algID, NULL, NULL, &size);
|
||||
ok(!ret &&
|
||||
(GetLastError() == ERROR_INVALID_PARAMETER ||
|
||||
GetLastError() == NTE_BAD_ALGID ||
|
||||
GetLastError() == OSS_BAD_PTR), /* Win9x */
|
||||
ok(!ret && (GetLastError() == ERROR_INVALID_PARAMETER || GetLastError() == NTE_BAD_ALGID),
|
||||
"Expected ERROR_INVALID_PARAMETER or NTE_BAD_ALGID, got %08lx\n",
|
||||
GetLastError());
|
||||
algID.pszObjId = oid_rsa_md5;
|
||||
|
@ -2245,19 +2149,13 @@ static void testCreateSelfSignCert(void)
|
|||
HCRYPTKEY key;
|
||||
CRYPT_KEY_PROV_INFO info;
|
||||
|
||||
if (!pCertCreateSelfSignCertificate)
|
||||
{
|
||||
win_skip("CertCreateSelfSignCertificate() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* This crashes:
|
||||
context = pCertCreateSelfSignCertificate(0, NULL, 0, NULL, NULL, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(0, NULL, 0, NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
* Calling this with no first parameter creates a new key container, which
|
||||
* lasts beyond the test, so I don't test that. Nb: the generated key
|
||||
* name is a GUID.
|
||||
context = pCertCreateSelfSignCertificate(0, &name, 0, NULL, NULL, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(0, &name, 0, NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
*/
|
||||
|
||||
|
@ -2268,7 +2166,7 @@ static void testCreateSelfSignCert(void)
|
|||
CRYPT_NEWKEYSET);
|
||||
ok(ret, "CryptAcquireContext failed: %08lx\n", GetLastError());
|
||||
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(!context && GetLastError() == NTE_NO_KEY,
|
||||
"Expected NTE_NO_KEY, got %08lx\n", GetLastError());
|
||||
|
@ -2276,7 +2174,7 @@ static void testCreateSelfSignCert(void)
|
|||
ok(ret, "CryptGenKey failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(context != NULL, "CertCreateSelfSignCertificate failed: %08lx\n",
|
||||
GetLastError());
|
||||
|
@ -2339,7 +2237,7 @@ static void testCreateSelfSignCert(void)
|
|||
info.pwszContainerName = (WCHAR *)L"WineCryptTemp";
|
||||
/* This should fail because the CSP doesn't have the specified key. */
|
||||
SetLastError(0xdeadbeef);
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(context == NULL, "expected failure\n");
|
||||
if (context != NULL)
|
||||
|
@ -2350,7 +2248,7 @@ static void testCreateSelfSignCert(void)
|
|||
/* Again, with a CSP, AT_SIGNATURE and key info */
|
||||
info.dwKeySpec = AT_SIGNATURE;
|
||||
SetLastError(0xdeadbeef);
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(context != NULL,
|
||||
"CertCreateSelfSignCertificate failed: %08lx\n", GetLastError());
|
||||
|
@ -2397,7 +2295,7 @@ static void testCreateSelfSignCert(void)
|
|||
|
||||
/* Do the same test with no CSP, AT_KEYEXCHANGE and key info */
|
||||
info.dwKeySpec = AT_KEYEXCHANGE;
|
||||
context = pCertCreateSelfSignCertificate(0, &name, 0, &info, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(0, &name, 0, &info, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(context != NULL, "CertCreateSelfSignCertificate failed: %08lx\n",
|
||||
GetLastError());
|
||||
|
@ -2446,7 +2344,7 @@ static void testCreateSelfSignCert(void)
|
|||
CRYPT_NEWKEYSET);
|
||||
ok(ret, "CryptAcquireContext failed: %08lx\n", GetLastError());
|
||||
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, NULL, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(!context && GetLastError() == NTE_NO_KEY,
|
||||
"Expected NTE_NO_KEY, got %08lx\n", GetLastError());
|
||||
|
@ -2461,7 +2359,7 @@ static void testCreateSelfSignCert(void)
|
|||
info.pwszContainerName = (WCHAR *)L"WineCryptTemp";
|
||||
/* This should fail because the CSP doesn't have the specified key. */
|
||||
SetLastError(0xdeadbeef);
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(context == NULL, "expected failure\n");
|
||||
if (context != NULL)
|
||||
|
@ -2474,7 +2372,7 @@ static void testCreateSelfSignCert(void)
|
|||
*/
|
||||
info.dwKeySpec = AT_KEYEXCHANGE;
|
||||
SetLastError(0xdeadbeef);
|
||||
context = pCertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
context = CertCreateSelfSignCertificate(csp, &name, 0, &info, NULL, NULL,
|
||||
NULL, NULL);
|
||||
ok(context != NULL,
|
||||
"CertCreateSelfSignCertificate failed: %08lx\n", GetLastError());
|
||||
|
@ -2707,8 +2605,7 @@ static void testKeyUsage(void)
|
|||
SetLastError(0xbaadcafe);
|
||||
size = sizeof(buf);
|
||||
ret = CertGetEnhancedKeyUsage(context, 0, pUsage, &size);
|
||||
ok(ret || broken(!ret && GetLastError() == CRYPT_E_NOT_FOUND /* NT4 */),
|
||||
"CertGetEnhancedKeyUsage failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CertGetEnhancedKeyUsage failed: %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
|
||||
|
@ -2882,20 +2779,14 @@ static void testGetValidUsages(void)
|
|||
LPSTR *oids = NULL;
|
||||
PCCERT_CONTEXT contexts[3];
|
||||
|
||||
if (!pCertGetValidUsages)
|
||||
{
|
||||
win_skip("CertGetValidUsages() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Crash
|
||||
ret = pCertGetValidUsages(0, NULL, NULL, NULL, NULL);
|
||||
ret = pCertGetValidUsages(0, NULL, NULL, NULL, &size);
|
||||
ret = CertGetValidUsages(0, NULL, NULL, NULL, NULL);
|
||||
ret = CertGetValidUsages(0, NULL, NULL, NULL, &size);
|
||||
*/
|
||||
contexts[0] = NULL;
|
||||
size = numOIDs = 0xdeadbeef;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertGetValidUsages(1, &contexts[0], &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(1, &contexts[0], &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %ld\n", GetLastError());
|
||||
ok(numOIDs == -1, "Expected -1, got %d\n", numOIDs);
|
||||
ok(size == 0, "Expected size 0, got %ld\n", size);
|
||||
|
@ -2906,16 +2797,16 @@ static void testGetValidUsages(void)
|
|||
contexts[2] = CertCreateCertificateContext(X509_ASN_ENCODING,
|
||||
cert2WithUsage, sizeof(cert2WithUsage));
|
||||
size = numOIDs = 0xdeadbeef;
|
||||
ret = pCertGetValidUsages(0, NULL, &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(0, NULL, &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
ok(numOIDs == -1, "Expected -1, got %d\n", numOIDs);
|
||||
ok(size == 0, "Expected size 0, got %ld\n", size);
|
||||
size = numOIDs = 0xdeadbeef;
|
||||
ret = pCertGetValidUsages(1, contexts, &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(1, contexts, &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
ok(numOIDs == -1, "Expected -1, got %d\n", numOIDs);
|
||||
ok(size == 0, "Expected size 0, got %ld\n", size);
|
||||
ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(1, &contexts[1], &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
ok(numOIDs == 3, "Expected 3, got %d\n", numOIDs);
|
||||
ok(size, "Expected non-zero size\n");
|
||||
|
@ -2926,10 +2817,10 @@ static void testGetValidUsages(void)
|
|||
DWORD smallSize = 1;
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, oids, &smallSize);
|
||||
ret = CertGetValidUsages(1, &contexts[1], &numOIDs, oids, &smallSize);
|
||||
ok(!ret && GetLastError() == ERROR_MORE_DATA,
|
||||
"Expected ERROR_MORE_DATA, got %ld\n", GetLastError());
|
||||
ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
|
||||
ret = CertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
for (i = 0; i < numOIDs; i++)
|
||||
ok(!lstrcmpA(oids[i], expectedOIDs[i]), "unexpected OID %s\n",
|
||||
|
@ -2938,11 +2829,11 @@ static void testGetValidUsages(void)
|
|||
}
|
||||
numOIDs = 0xdeadbeef;
|
||||
/* Oddly enough, this crashes when the number of contexts is not 1:
|
||||
ret = pCertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
|
||||
* but setting size to 0 allows it to succeed:
|
||||
*/
|
||||
size = 0;
|
||||
ret = pCertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(2, contexts, &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
ok(numOIDs == 3, "Expected 3, got %d\n", numOIDs);
|
||||
ok(size, "Expected non-zero size\n");
|
||||
|
@ -2951,7 +2842,7 @@ static void testGetValidUsages(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
ret = pCertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
|
||||
ret = CertGetValidUsages(1, &contexts[1], &numOIDs, oids, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
for (i = 0; i < numOIDs; i++)
|
||||
ok(!lstrcmpA(oids[i], expectedOIDs[i]), "unexpected OID %s\n",
|
||||
|
@ -2960,7 +2851,7 @@ static void testGetValidUsages(void)
|
|||
}
|
||||
numOIDs = 0xdeadbeef;
|
||||
size = 0;
|
||||
ret = pCertGetValidUsages(1, &contexts[2], &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(1, &contexts[2], &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
ok(numOIDs == 2, "Expected 2, got %d\n", numOIDs);
|
||||
ok(size, "Expected non-zero size\n");
|
||||
|
@ -2969,7 +2860,7 @@ static void testGetValidUsages(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
ret = pCertGetValidUsages(1, &contexts[2], &numOIDs, oids, &size);
|
||||
ret = CertGetValidUsages(1, &contexts[2], &numOIDs, oids, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
for (i = 0; i < numOIDs; i++)
|
||||
ok(!lstrcmpA(oids[i], expectedOIDs2[i]), "unexpected OID %s\n",
|
||||
|
@ -2978,7 +2869,7 @@ static void testGetValidUsages(void)
|
|||
}
|
||||
numOIDs = 0xdeadbeef;
|
||||
size = 0;
|
||||
ret = pCertGetValidUsages(3, contexts, &numOIDs, NULL, &size);
|
||||
ret = CertGetValidUsages(3, contexts, &numOIDs, NULL, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
ok(numOIDs == 2, "Expected 2, got %d\n", numOIDs);
|
||||
ok(size, "Expected non-zero size\n");
|
||||
|
@ -2987,7 +2878,7 @@ static void testGetValidUsages(void)
|
|||
{
|
||||
int i;
|
||||
|
||||
ret = pCertGetValidUsages(3, contexts, &numOIDs, oids, &size);
|
||||
ret = CertGetValidUsages(3, contexts, &numOIDs, oids, &size);
|
||||
ok(ret, "CertGetValidUsages failed: %08lx\n", GetLastError());
|
||||
for (i = 0; i < numOIDs; i++)
|
||||
ok(!lstrcmpA(oids[i], expectedOIDs2[i]), "unexpected OID %s\n",
|
||||
|
@ -3396,17 +3287,15 @@ static void testHashPublicKeyInfo(void)
|
|||
ret = CryptHashPublicKeyInfo(0, 0, 0, 0, NULL, NULL, &len);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
/* Crashes on some win9x boxes */
|
||||
if (0)
|
||||
|
||||
if (0) /* crash */
|
||||
{
|
||||
ret = CryptHashPublicKeyInfo(0, 0, 0, X509_ASN_ENCODING, NULL, NULL, &len);
|
||||
ok(!ret && GetLastError() == STATUS_ACCESS_VIOLATION,
|
||||
"Expected STATUS_ACCESS_VIOLATION, got %08lx\n", GetLastError());
|
||||
}
|
||||
ret = CryptHashPublicKeyInfo(0, 0, 0, X509_ASN_ENCODING, &info, NULL, &len);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win9x */
|
||||
"CryptHashPublicKeyInfo failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CryptHashPublicKeyInfo failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ok(len == 16, "Expected hash size 16, got %ld\n", len);
|
||||
|
@ -3444,32 +3333,24 @@ static void testHashToBeSigned(void)
|
|||
"expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptHashToBeSigned(0, X509_ASN_ENCODING, NULL, 0, NULL, &size);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
/* Can't sign anything: has to be asn.1 encoded, at least */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptHashToBeSigned(0, X509_ASN_ENCODING, int1, sizeof(int1),
|
||||
NULL, &size);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_MORE_INPUT), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
/* Can't be empty, either */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptHashToBeSigned(0, X509_ASN_ENCODING, emptyCert,
|
||||
sizeof(emptyCert), NULL, &size);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_CORRUPT ||
|
||||
GetLastError() == OSS_DATA_ERROR), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_CORRUPT,
|
||||
"expected CRYPT_E_ASN1_CORRUPT, got %08lx\n", GetLastError());
|
||||
/* Signing a cert works */
|
||||
ret = CryptHashToBeSigned(0, X509_ASN_ENCODING, md5SignedEmptyCert,
|
||||
sizeof(md5SignedEmptyCert), NULL, &size);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win9x */
|
||||
"CryptHashToBeSigned failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CryptHashToBeSigned failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ok(size == sizeof(md5SignedEmptyCertHash), "unexpected size %ld\n", size);
|
||||
|
@ -3477,9 +3358,7 @@ static void testHashToBeSigned(void)
|
|||
|
||||
ret = CryptHashToBeSigned(0, X509_ASN_ENCODING, md5SignedEmptyCert,
|
||||
sizeof(md5SignedEmptyCert), hash, &size);
|
||||
ok(ret || broken(!ret && GetLastError() == NTE_BAD_ALGID) /* NT4 */,
|
||||
"CryptHashToBeSigned failed: %08lx\n", GetLastError());
|
||||
|
||||
ok(ret, "CryptHashToBeSigned failed: %08lx\n", GetLastError());
|
||||
ok(!memcmp(hash, md5SignedEmptyCertHash, size), "unexpected value\n");
|
||||
}
|
||||
|
||||
|
@ -3700,11 +3579,6 @@ static void testVerifyRevocation(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CertVerifyRevocation(X509_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE,
|
||||
1, (void **)certs, 0, NULL, &status);
|
||||
if (!ret && GetLastError() == ERROR_FILE_NOT_FOUND)
|
||||
{
|
||||
win_skip("CERT_CONTEXT_REVOCATION_TYPE unsupported, skipping\n");
|
||||
return;
|
||||
}
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK, got %08lx\n", GetLastError());
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
|
@ -3714,12 +3588,10 @@ static void testVerifyRevocation(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CertVerifyRevocation(X509_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE,
|
||||
1, (void **)&certs[1], 0, NULL, &status);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_REVOCATION_CHECK /* Win9x */ ||
|
||||
GetLastError() == CRYPT_E_REVOCATION_OFFLINE),
|
||||
ok(!ret && (GetLastError() == CRYPT_E_REVOCATION_OFFLINE || GetLastError() == CRYPT_E_NO_REVOCATION_CHECK),
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK or CRYPT_E_REVOCATION_OFFLINE, got %08lx\n",
|
||||
GetLastError());
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK /* Win9x */ ||
|
||||
status.dwError == CRYPT_E_REVOCATION_OFFLINE,
|
||||
ok(status.dwError == CRYPT_E_REVOCATION_OFFLINE || status.dwError == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK or CRYPT_E_REVOCATION_OFFLINE, got %08lx\n",
|
||||
status.dwError);
|
||||
ok(status.dwIndex == 0, "expected index 0, got %ld\n", status.dwIndex);
|
||||
|
@ -3727,12 +3599,10 @@ static void testVerifyRevocation(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CertVerifyRevocation(X509_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE,
|
||||
2, (void **)certs, 0, NULL, &status);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_REVOCATION_CHECK ||
|
||||
GetLastError() == CRYPT_E_REVOCATION_OFFLINE /* WinME */),
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK or CRYPT_E_REVOCATION_OFFLINE, got %08lx\n",
|
||||
GetLastError());
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK ||
|
||||
status.dwError == CRYPT_E_REVOCATION_OFFLINE /* WinME */,
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK or CRYPT_E_REVOCATION_OFFLINE, got %08lx\n",
|
||||
status.dwError);
|
||||
ok(status.dwIndex == 0, "expected index 0, got %ld\n", status.dwIndex);
|
||||
|
@ -3744,12 +3614,10 @@ static void testVerifyRevocation(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CertVerifyRevocation(X509_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE,
|
||||
2, (void **)certs, 0, &revPara, &status);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_REVOCATION_CHECK ||
|
||||
GetLastError() == CRYPT_E_REVOCATION_OFFLINE /* WinME */),
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK or CRYPT_E_REVOCATION_OFFLINE, got %08lx\n",
|
||||
GetLastError());
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK ||
|
||||
status.dwError == CRYPT_E_REVOCATION_OFFLINE /* WinME */,
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK or CRYPT_E_REVOCATION_OFFLINE, got %08lx\n",
|
||||
status.dwError);
|
||||
ok(status.dwIndex == 0, "expected index 0, got %ld\n", status.dwIndex);
|
||||
|
@ -3767,14 +3635,9 @@ static void testVerifyRevocation(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CertVerifyRevocation(X509_ASN_ENCODING, CERT_CONTEXT_REVOCATION_TYPE,
|
||||
1, (void **)&certs[1], 0, &revPara, &status);
|
||||
/* Win2k thinks the cert is revoked, and it is, except the CRL is out of
|
||||
* date, hence the revocation status should be unknown.
|
||||
*/
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_REVOCATION_CHECK ||
|
||||
broken(GetLastError() == CRYPT_E_REVOKED /* Win2k */)),
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK, got %08lx\n", GetLastError());
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK ||
|
||||
broken(status.dwError == CRYPT_E_REVOKED /* Win2k */),
|
||||
ok(status.dwError == CRYPT_E_NO_REVOCATION_CHECK,
|
||||
"expected CRYPT_E_NO_REVOCATION_CHECK, got %08lx\n", status.dwError);
|
||||
ok(status.dwIndex == 0, "expected index 0, got %ld\n", status.dwIndex);
|
||||
CertCloseStore(revPara.hCrlStore, 0);
|
||||
|
@ -3834,12 +3697,6 @@ static void testAcquireCertPrivateKey(void)
|
|||
HCRYPTKEY key;
|
||||
WCHAR ms_def_prov_w[MAX_PATH];
|
||||
|
||||
if (!pCryptAcquireCertificatePrivateKey)
|
||||
{
|
||||
win_skip("CryptAcquireCertificatePrivateKey() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
lstrcpyW(ms_def_prov_w, MS_DEF_PROV_W);
|
||||
|
||||
keyProvInfo.pwszContainerName = (WCHAR *)L"WineCryptTemp";
|
||||
|
@ -3857,28 +3714,28 @@ static void testAcquireCertPrivateKey(void)
|
|||
sizeof(selfSignedCert));
|
||||
|
||||
/* Crash
|
||||
ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL, NULL);
|
||||
ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL,
|
||||
ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL, NULL);
|
||||
ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, NULL,
|
||||
&callerFree);
|
||||
ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, &keySpec,
|
||||
ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, NULL, &keySpec,
|
||||
NULL);
|
||||
ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, NULL, NULL);
|
||||
ret = pCryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, &keySpec,
|
||||
ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, NULL, NULL);
|
||||
ret = CryptAcquireCertificatePrivateKey(NULL, 0, NULL, &csp, &keySpec,
|
||||
&callerFree);
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, NULL, NULL, NULL);
|
||||
ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, NULL, NULL, NULL);
|
||||
*/
|
||||
|
||||
/* Missing private key */
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, NULL, NULL);
|
||||
ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, NULL, NULL);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_KEY_PROPERTY || GetLastError() == NTE_BAD_PROV_TYPE /* win10 */),
|
||||
"Expected CRYPT_E_NO_KEY_PROPERTY, got %08lx\n", GetLastError());
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
|
||||
&callerFree);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_KEY_PROPERTY || GetLastError() == NTE_BAD_PROV_TYPE /* win10 */),
|
||||
"Expected CRYPT_E_NO_KEY_PROPERTY, got %08lx\n", GetLastError());
|
||||
CertSetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0,
|
||||
&keyProvInfo);
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &csp, &keySpec,
|
||||
&callerFree);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_NO_KEY_PROPERTY ||
|
||||
GetLastError() == NTE_BAD_KEYSET /* win8 */ ||
|
||||
|
@ -3896,11 +3753,9 @@ static void testAcquireCertPrivateKey(void)
|
|||
CERT_KEY_CONTEXT keyContext;
|
||||
|
||||
/* Don't cache provider */
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
|
||||
&keySpec, &callerFree);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
ok(ret, "CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
|
@ -3908,21 +3763,17 @@ static void testAcquireCertPrivateKey(void)
|
|||
CryptReleaseContext(certCSP, 0);
|
||||
}
|
||||
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert, 0, NULL, &certCSP,
|
||||
NULL, NULL);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
ok(ret, "CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
GetLastError());
|
||||
CryptReleaseContext(certCSP, 0);
|
||||
|
||||
/* Use the key prov info's caching (there shouldn't be any) */
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert,
|
||||
CRYPT_ACQUIRE_USE_PROV_INFO_FLAG, NULL, &certCSP, &keySpec,
|
||||
&callerFree);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
ok(ret, "CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
|
@ -3931,19 +3782,15 @@ static void testAcquireCertPrivateKey(void)
|
|||
}
|
||||
|
||||
/* Cache it (and check that it's cached) */
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert,
|
||||
CRYPT_ACQUIRE_CACHE_FLAG, NULL, &certCSP, &keySpec, &callerFree);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
ok(ret, "CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
GetLastError());
|
||||
ok(!callerFree, "Expected callerFree to be FALSE\n");
|
||||
size = sizeof(keyContext);
|
||||
ret = CertGetCertificateContextProperty(cert, CERT_KEY_CONTEXT_PROP_ID,
|
||||
&keyContext, &size);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CertGetCertificateContextProperty failed: %08lx\n",
|
||||
ok(ret, "CertGetCertificateContextProperty failed: %08lx\n",
|
||||
GetLastError());
|
||||
|
||||
/* Remove the cached provider */
|
||||
|
@ -3955,20 +3802,16 @@ static void testAcquireCertPrivateKey(void)
|
|||
CertSetCertificateContextProperty(cert, CERT_KEY_PROV_INFO_PROP_ID, 0,
|
||||
&keyProvInfo);
|
||||
/* Now use the key prov info's caching */
|
||||
ret = pCryptAcquireCertificatePrivateKey(cert,
|
||||
ret = CryptAcquireCertificatePrivateKey(cert,
|
||||
CRYPT_ACQUIRE_USE_PROV_INFO_FLAG, NULL, &certCSP, &keySpec,
|
||||
&callerFree);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
ok(ret, "CryptAcquireCertificatePrivateKey failed: %08lx\n",
|
||||
GetLastError());
|
||||
ok(!callerFree, "Expected callerFree to be FALSE\n");
|
||||
size = sizeof(keyContext);
|
||||
ret = CertGetCertificateContextProperty(cert, CERT_KEY_CONTEXT_PROP_ID,
|
||||
&keyContext, &size);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win95 */
|
||||
"CertGetCertificateContextProperty failed: %08lx\n",
|
||||
ok(ret, "CertGetCertificateContextProperty failed: %08lx\n",
|
||||
GetLastError());
|
||||
CryptReleaseContext(certCSP, 0);
|
||||
|
||||
|
@ -3992,7 +3835,7 @@ static void testAcquireCertPrivateKey(void)
|
|||
ok(size == sizeof(exportedPublicKeyBlob), "Unexpected size %ld\n",
|
||||
size);
|
||||
ok(!memcmp(buf, exportedPublicKeyBlob, size), "Unexpected value\n");
|
||||
ret = pCryptEncodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB,
|
||||
ret = CryptEncodeObjectEx(X509_ASN_ENCODING, RSA_CSP_PUBLICKEYBLOB,
|
||||
buf, CRYPT_ENCODE_ALLOC_FLAG, NULL, &encodedKey, &size);
|
||||
ok(ret, "CryptEncodeObjectEx failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
|
@ -4056,9 +3899,7 @@ static void testGetPublicKeyLength(void)
|
|||
ret, GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CertGetPublicKeyLength(X509_ASN_ENCODING, &info);
|
||||
ok(ret == 0 &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG), /* win9x */
|
||||
ok(ret == 0 && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected length 0 and CRYPT_E_ASN1_EOD, got length %ld, %08lx\n",
|
||||
ret, GetLastError());
|
||||
/* With a nearly-empty public key info */
|
||||
|
@ -4070,9 +3911,7 @@ static void testGetPublicKeyLength(void)
|
|||
ret, GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CertGetPublicKeyLength(X509_ASN_ENCODING, &info);
|
||||
ok(ret == 0 &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG), /* win9x */
|
||||
ok(ret == 0 && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected length 0 and CRYPT_E_ASN1_EOD, got length %ld, %08lx\n",
|
||||
ret, GetLastError());
|
||||
/* With a bogus key */
|
||||
|
@ -4085,9 +3924,7 @@ static void testGetPublicKeyLength(void)
|
|||
ret, GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CertGetPublicKeyLength(X509_ASN_ENCODING, &info);
|
||||
ok(ret == 0 &&
|
||||
(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_PDU_MISMATCH), /* win9x */
|
||||
ok(ret == 0 && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected length 0 and CRYPT_E_ASN1_BADTAGTAG, got length %ld, %08lx\n",
|
||||
ret, GetLastError());
|
||||
/* With a believable RSA key but a bogus OID */
|
||||
|
@ -4107,9 +3944,7 @@ static void testGetPublicKeyLength(void)
|
|||
info.Algorithm.pszObjId = oid_rsa_dh;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CertGetPublicKeyLength(X509_ASN_ENCODING, &info);
|
||||
ok(ret == 0 &&
|
||||
(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == E_INVALIDARG), /* win9x */
|
||||
ok(ret == 0 && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected length 0 and CRYPT_E_ASN1_BADTAG, got length %ld, %08lx\n",
|
||||
ret, GetLastError());
|
||||
/* With the RSA OID */
|
||||
|
@ -4278,12 +4113,7 @@ static void test_VerifySignature(void)
|
|||
ok(!status, "got %#lx\n", status);
|
||||
|
||||
status = BCryptCreateHash(alg, &bhash, NULL, 0, NULL, 0, 0);
|
||||
ok(!status || broken(status == STATUS_INVALID_PARAMETER) /* Vista */, "got %#lx\n", status);
|
||||
if (status == STATUS_INVALID_PARAMETER)
|
||||
{
|
||||
win_skip("broken BCryptCreateHash\n");
|
||||
goto done;
|
||||
}
|
||||
ok(!status, "got %#lx\n", status);
|
||||
|
||||
status = BCryptHashData(bhash, info->ToBeSigned.pbData, info->ToBeSigned.cbData, 0);
|
||||
ok(!status, "got %#lx\n", status);
|
||||
|
@ -4306,18 +4136,14 @@ static void test_VerifySignature(void)
|
|||
|
||||
HeapFree(GetProcessHeap(), 0, sig_value);
|
||||
BCryptDestroyHash(bhash);
|
||||
done:
|
||||
BCryptCloseAlgorithmProvider(alg, 0);
|
||||
BCryptDestroyKey(bkey);
|
||||
|
||||
LocalFree(info);
|
||||
CertFreeCertificateContext(cert);
|
||||
}
|
||||
|
||||
START_TEST(cert)
|
||||
{
|
||||
init_function_pointers();
|
||||
|
||||
testAddCert();
|
||||
testCertProperties();
|
||||
testCreateCert();
|
||||
|
|
|
@ -54,12 +54,6 @@ static const BYTE selfSignedCert[] = {
|
|||
0x0a, 0x8c, 0xb4, 0x5c, 0x34, 0x78, 0xe0, 0x3c, 0x9c, 0xe9, 0xf3, 0x30, 0x9f,
|
||||
0xa8, 0x76, 0x57, 0x92, 0x36 };
|
||||
|
||||
static BOOL (WINAPI *pCertCreateCertificateChainEngine)(PCERT_CHAIN_ENGINE_CONFIG,HCERTCHAINENGINE*);
|
||||
static BOOL (WINAPI *pCertGetCertificateChain)(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
|
||||
static VOID (WINAPI *pCertFreeCertificateChain)(PCCERT_CHAIN_CONTEXT);
|
||||
static VOID (WINAPI *pCertFreeCertificateChainEngine)(HCERTCHAINENGINE);
|
||||
static BOOL (WINAPI *pCertVerifyCertificateChainPolicy)(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
|
||||
|
||||
#define IS_INTOID(x) (((ULONG_PTR)(x) >> 16) == 0)
|
||||
|
||||
typedef struct _CERT_CHAIN_ENGINE_CONFIG_NO_EXCLUSIVE_ROOT
|
||||
|
@ -84,47 +78,41 @@ static void testCreateCertChainEngine(void)
|
|||
HCERTCHAINENGINE engine;
|
||||
HCERTSTORE store;
|
||||
|
||||
if (!pCertCreateCertificateChainEngine || !pCertFreeCertificateChainEngine)
|
||||
{
|
||||
win_skip("Cert*CertificateChainEngine() functions are not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Crash
|
||||
ret = pCertCreateCertificateChainEngine(NULL, NULL);
|
||||
ret = pCertCreateCertificateChainEngine(NULL, &engine);
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, NULL);
|
||||
ret = CertCreateCertificateChainEngine(NULL, NULL);
|
||||
ret = CertCreateCertificateChainEngine(NULL, &engine);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, NULL);
|
||||
*/
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
/* Crashes
|
||||
config.cbSize = sizeof(config);
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, NULL);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, NULL);
|
||||
*/
|
||||
config.cbSize = sizeof(config);
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ok(ret, "CertCreateCertificateChainEngine failed: %08lx\n", GetLastError());
|
||||
pCertFreeCertificateChainEngine(engine);
|
||||
CertFreeCertificateChainEngine(engine);
|
||||
config.dwFlags = 0xff000000;
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ok(ret, "CertCreateCertificateChainEngine failed: %08lx\n", GetLastError());
|
||||
pCertFreeCertificateChainEngine(engine);
|
||||
CertFreeCertificateChainEngine(engine);
|
||||
|
||||
/* Creating a cert with no root certs at all is allowed.. */
|
||||
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
|
||||
CERT_STORE_CREATE_NEW_FLAG, NULL);
|
||||
config.hRestrictedRoot = store;
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ok(ret, "CertCreateCertificateChainEngine failed: %08lx\n", GetLastError());
|
||||
pCertFreeCertificateChainEngine(engine);
|
||||
CertFreeCertificateChainEngine(engine);
|
||||
|
||||
/* but creating one with a restricted root with a cert that isn't a member
|
||||
* of the Root store isn't allowed.
|
||||
*/
|
||||
CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING, selfSignedCert,
|
||||
sizeof(selfSignedCert), CERT_STORE_ADD_ALWAYS, NULL);
|
||||
ret = pCertCreateCertificateChainEngine(pConfig, &engine);
|
||||
ret = CertCreateCertificateChainEngine(pConfig, &engine);
|
||||
/* ERROR_FILE_NOT_FOUND used in Windows 10 */
|
||||
ok(!ret && ((GetLastError() == CRYPT_E_NOT_FOUND) ||
|
||||
(GetLastError() == ERROR_FILE_NOT_FOUND)),
|
||||
|
@ -3399,7 +3387,7 @@ static PCCERT_CHAIN_CONTEXT getChain(HCERTCHAINENGINE engine,
|
|||
ok(SystemTimeToFileTime(checkTime, &fileTime),
|
||||
"SystemTimeToFileTime failed for day %d, month %d, year %d\n",
|
||||
checkTime->wDay, checkTime->wMonth, checkTime->wYear);
|
||||
ret = pCertGetCertificateChain(engine, endCert, &fileTime,
|
||||
ret = CertGetCertificateChain(engine, endCert, &fileTime,
|
||||
includeStore ? store : NULL, &chainPara, flags, NULL, &chain);
|
||||
todo_wine_if (todo & TODO_CHAIN)
|
||||
ok(ret, "Chain %ld: CertGetCertificateChain failed: %08lx\n",
|
||||
|
@ -4356,17 +4344,17 @@ static void testGetCertChain(void)
|
|||
if (0)
|
||||
{
|
||||
/* Crash on Vista */
|
||||
ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
|
||||
ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
}
|
||||
ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL,
|
||||
ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, NULL, 0, NULL,
|
||||
&chain);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
/* Crash
|
||||
ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, ¶, 0, NULL, NULL);
|
||||
ret = pCertGetCertificateChain(NULL, NULL, NULL, NULL, ¶, 0, NULL,
|
||||
ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, ¶, 0, NULL, NULL);
|
||||
ret = CertGetCertificateChain(NULL, NULL, NULL, NULL, ¶, 0, NULL,
|
||||
&chain);
|
||||
*/
|
||||
cert = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert,
|
||||
|
@ -4374,17 +4362,17 @@ static void testGetCertChain(void)
|
|||
if (0)
|
||||
{
|
||||
/* Crash on Vista */
|
||||
ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, NULL, 0, NULL, NULL);
|
||||
ret = CertGetCertificateChain(NULL, cert, NULL, NULL, NULL, 0, NULL, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
}
|
||||
/* Crash
|
||||
ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL, NULL);
|
||||
ret = CertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL, NULL);
|
||||
*/
|
||||
|
||||
/* Tests with an invalid cert (one whose signature is bad) */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL,
|
||||
ret = CertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL,
|
||||
&chain);
|
||||
ok(!ret, "Expected failure\n");
|
||||
ok(GetLastError() == ERROR_INVALID_DATA ||
|
||||
|
@ -4392,7 +4380,7 @@ static void testGetCertChain(void)
|
|||
"Expected ERROR_INVALID_DATA or CRYPT_E_ASN1_BADTAG, got %ld\n", GetLastError());
|
||||
para.cbSize = sizeof(para);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL,
|
||||
ret = CertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL,
|
||||
&chain);
|
||||
ok(!ret, "Expected failure\n");
|
||||
ok(GetLastError() == ERROR_INVALID_DATA ||
|
||||
|
@ -4401,7 +4389,7 @@ static void testGetCertChain(void)
|
|||
|
||||
para.cbSize = 0;
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL,
|
||||
ret = CertGetCertificateChain(NULL, cert, NULL, NULL, ¶, 0, NULL,
|
||||
&chain);
|
||||
ok(!ret, "Expected failure\n");
|
||||
ok(GetLastError() == ERROR_INVALID_DATA ||
|
||||
|
@ -4426,39 +4414,39 @@ static void testGetCertChain(void)
|
|||
para.RequestedUsage.dwType = USAGE_MATCH_TYPE_AND;
|
||||
para.RequestedUsage.Usage.rgpszUsageIdentifier = oids;
|
||||
para.RequestedUsage.Usage.cUsageIdentifier = 1;
|
||||
ret = pCertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ok(chain->TrustStatus.dwErrorStatus & CERT_TRUST_IS_NOT_VALID_FOR_USAGE,
|
||||
"expected CERT_TRUST_IS_NOT_VALID_FOR_USAGE\n");
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
oids[0] = oid_server_auth;
|
||||
ret = pCertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ok(!(chain->TrustStatus.dwErrorStatus & CERT_TRUST_IS_NOT_VALID_FOR_USAGE),
|
||||
"didn't expect CERT_TRUST_IS_NOT_VALID_FOR_USAGE, got %lx\n", chain->TrustStatus.dwErrorStatus);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
oids[1] = one_two_three;
|
||||
para.RequestedUsage.Usage.cUsageIdentifier = 2;
|
||||
para.RequestedUsage.dwType = USAGE_MATCH_TYPE_AND;
|
||||
ret = pCertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ok(chain->TrustStatus.dwErrorStatus & CERT_TRUST_IS_NOT_VALID_FOR_USAGE,
|
||||
"expected CERT_TRUST_IS_NOT_VALID_FOR_USAGE\n");
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
para.RequestedUsage.dwType = USAGE_MATCH_TYPE_OR;
|
||||
ret = pCertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶,
|
||||
0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
|
@ -4466,7 +4454,7 @@ static void testGetCertChain(void)
|
|||
ok(!(chain->TrustStatus.dwErrorStatus &
|
||||
CERT_TRUST_IS_NOT_VALID_FOR_USAGE),
|
||||
"didn't expect CERT_TRUST_IS_NOT_VALID_FOR_USAGE\n");
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
CertCloseStore(store, 0);
|
||||
CertFreeCertificateContext(cert);
|
||||
|
@ -4479,7 +4467,7 @@ static void testGetCertChain(void)
|
|||
{
|
||||
checkChainStatus(chain, &chainCheck[i].status, chainCheck[i].todo,
|
||||
"chainCheck", i);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
}
|
||||
chain = getChain(NULL, &opensslChainCheck.certs, 0, TRUE, &oct2007,
|
||||
|
@ -4502,7 +4490,7 @@ static void testGetCertChain(void)
|
|||
checkChainStatus(chain, &incompleteOpensslChainCheck.status,
|
||||
incompleteOpensslChainCheck.todo, "incompleteOpensslChainCheck",
|
||||
0);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(chainCheckNoStore); i++)
|
||||
{
|
||||
|
@ -4512,7 +4500,7 @@ static void testGetCertChain(void)
|
|||
{
|
||||
checkChainStatus(chain, &chainCheckNoStore[i].status,
|
||||
chainCheckNoStore[i].todo, "chainCheckNoStore", i);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
}
|
||||
chain = getChain(NULL, &chainCheckEmbeddedNull.certs, 0, TRUE, &oct2007,
|
||||
|
@ -4535,7 +4523,7 @@ static void testGetCertChain(void)
|
|||
checkChainStatus(chain, &chainCheckEmbeddedNullBroken.status,
|
||||
chainCheckEmbeddedNullBroken.todo, "chainCheckEmbeddedNullBroken",
|
||||
0);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
|
||||
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0, CERT_STORE_CREATE_NEW_FLAG, NULL);
|
||||
|
@ -4556,13 +4544,6 @@ static void testGetCertChain(void)
|
|||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶, 0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %lu\n", GetLastError());
|
||||
|
||||
if(chain->TrustStatus.dwErrorStatus == CERT_TRUST_IS_PARTIAL_CHAIN) { /* win2k */
|
||||
win_skip("winehq cert reported as partial chain, skipping its tests\n");
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertCloseStore(store, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
ok(chain->TrustStatus.dwErrorStatus == CERT_TRUST_HAS_EXACT_MATCH_ISSUER, "chain->TrustStatus.dwErrorStatus = %lx\n",
|
||||
chain->TrustStatus.dwErrorStatus);
|
||||
todo_wine
|
||||
|
@ -4610,7 +4591,7 @@ static void testGetCertChain(void)
|
|||
test_name_blob(&simple_chain->rgpElement[2]->pCertContext->pCertInfo->Subject,
|
||||
"US, New Jersey, Jersey City, The USERTRUST Network, USERTrust RSA Certification Authority");
|
||||
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
|
||||
/* Test revocation flags */
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶, CERT_CHAIN_REVOCATION_CHECK_END_CERT, NULL,
|
||||
|
@ -4618,26 +4599,25 @@ static void testGetCertChain(void)
|
|||
ok(ret, "CertGetCertificateChain failed: %lu\n", GetLastError());
|
||||
ok(chain->TrustStatus.dwErrorStatus == CERT_TRUST_HAS_EXACT_MATCH_ISSUER, "chain->TrustStatus.dwErrorStatus = %lx\n",
|
||||
chain->TrustStatus.dwErrorStatus);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶, CERT_CHAIN_REVOCATION_CHECK_CHAIN, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %lu\n", GetLastError());
|
||||
ok(chain->TrustStatus.dwErrorStatus == CERT_TRUST_HAS_EXACT_MATCH_ISSUER ||
|
||||
broken(chain->TrustStatus.dwErrorStatus == (CERT_TRUST_IS_NOT_TIME_VALID|CERT_TRUST_REVOCATION_STATUS_UNKNOWN)), /* XP */
|
||||
ok(chain->TrustStatus.dwErrorStatus == CERT_TRUST_HAS_EXACT_MATCH_ISSUER,
|
||||
"chain->TrustStatus.dwErrorStatus = %lx\n", chain->TrustStatus.dwErrorStatus);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime, store, ¶, CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT,
|
||||
NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %lu\n", GetLastError());
|
||||
ok(chain->TrustStatus.dwErrorStatus == CERT_TRUST_HAS_EXACT_MATCH_ISSUER, "chain->TrustStatus.dwErrorStatus = %lx\n",
|
||||
chain->TrustStatus.dwErrorStatus);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
|
||||
/* Test HCCE_LOCAL_MACHINE */
|
||||
ret = CertGetCertificateChain(HCCE_LOCAL_MACHINE, cert, &fileTime, store, ¶, 0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed: %lu\n", GetLastError());
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
|
||||
CertFreeCertificateContext(cert);
|
||||
CertCloseStore(store, 0);
|
||||
|
@ -4671,10 +4651,10 @@ static void test_CERT_CHAIN_PARA_cbSize(void)
|
|||
SystemTimeToFileTime(&oct2007, &fileTime);
|
||||
|
||||
para.cbSize = i;
|
||||
ret = pCertGetCertificateChain(NULL, cert, &fileTime,
|
||||
ret = CertGetCertificateChain(NULL, cert, &fileTime,
|
||||
NULL, ¶, 0, NULL, &chain);
|
||||
ok(ret, "CertGetCertificateChain failed %lu\n", GetLastError());
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
|
||||
CertFreeCertificateContext(cert);
|
||||
|
@ -4996,7 +4976,7 @@ static void checkChainPolicyStatus(LPCSTR policy, HCERTCHAINENGINE engine,
|
|||
if (chain)
|
||||
{
|
||||
CERT_CHAIN_POLICY_STATUS policyStatus = { 0 };
|
||||
BOOL ret = pCertVerifyCertificateChainPolicy(policy, chain, para,
|
||||
BOOL ret = CertVerifyCertificateChainPolicy(policy, chain, para,
|
||||
&policyStatus);
|
||||
|
||||
if (check->todo & TODO_POLICY)
|
||||
|
@ -5012,7 +4992,7 @@ static void checkChainPolicyStatus(LPCSTR policy, HCERTCHAINENGINE engine,
|
|||
skip("%s[%ld]: missing policy %s, skipping test\n",
|
||||
testName, testIndex,
|
||||
IS_INTOID(policy) ? num_to_str(LOWORD(policy)) : policy);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
return;
|
||||
}
|
||||
ok(ret, "%s[%ld](%s): CertVerifyCertificateChainPolicy failed: %08lx\n",
|
||||
|
@ -5037,7 +5017,7 @@ static void checkChainPolicyStatus(LPCSTR policy, HCERTCHAINENGINE engine,
|
|||
testName, testIndex,
|
||||
IS_INTOID(policy) ? num_to_str(LOWORD(policy)) : policy,
|
||||
policyStatus.dwError, check->status.dwError);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
return;
|
||||
}
|
||||
todo_wine_if (check->todo & TODO_CHAINS)
|
||||
|
@ -5057,7 +5037,7 @@ static void checkChainPolicyStatus(LPCSTR policy, HCERTCHAINENGINE engine,
|
|||
IS_INTOID(policy) ? num_to_str(LOWORD(policy)) : policy,
|
||||
check->status.lElementIndex, policyStatus.lElementIndex);
|
||||
}
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5262,7 +5242,7 @@ static void check_ssl_policy(void)
|
|||
CertAddEncodedCertificateToStore(testRoot, X509_ASN_ENCODING, chain0_0,
|
||||
sizeof(chain0_0), CERT_STORE_ADD_ALWAYS, NULL);
|
||||
engineConfig.hExclusiveRoot = testRoot;
|
||||
if (!pCertCreateCertificateChainEngine(&engineConfig, &engine))
|
||||
if (!CertCreateCertificateChainEngine(&engineConfig, &engine))
|
||||
{
|
||||
skip("Couldn't create chain engine\n");
|
||||
return;
|
||||
|
@ -5283,7 +5263,7 @@ static void check_ssl_policy(void)
|
|||
sslPolicyPara.fdwChecks |= SECURITY_FLAG_IGNORE_CERT_CN_INVALID;
|
||||
CHECK_CHAIN_POLICY_STATUS(CERT_CHAIN_POLICY_SSL, engine,
|
||||
winehqPolicyCheckWithMatchingName, &oct2007, &policyPara);
|
||||
pCertFreeCertificateChainEngine(engine);
|
||||
CertFreeCertificateChainEngine(engine);
|
||||
CertCloseStore(testRoot, 0);
|
||||
/* Test chain30, which has an invalid critical extension in an intermediate
|
||||
* cert, against the SSL policy.
|
||||
|
@ -5328,40 +5308,34 @@ static void testVerifyCertChainPolicy(void)
|
|||
CERT_CHAIN_POLICY_STATUS policyStatus = { 0 };
|
||||
CERT_CHAIN_POLICY_PARA policyPara = { 0 };
|
||||
|
||||
if (!pCertVerifyCertificateChainPolicy)
|
||||
{
|
||||
win_skip("CertVerifyCertificateChainPolicy() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Crash
|
||||
ret = pCertVerifyCertificateChainPolicy(NULL, NULL, NULL, NULL);
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
|
||||
ret = CertVerifyCertificateChainPolicy(NULL, NULL, NULL, NULL);
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
|
||||
NULL);
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL,
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL,
|
||||
&chainPara, NULL);
|
||||
*/
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertVerifyCertificateChainPolicy(NULL, NULL, NULL, &policyStatus);
|
||||
ret = CertVerifyCertificateChainPolicy(NULL, NULL, NULL, &policyStatus);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
/* Crashes
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, NULL, NULL,
|
||||
&policyStatus);
|
||||
*/
|
||||
cert = CertCreateCertificateContext(X509_ASN_ENCODING, selfSignedCert,
|
||||
sizeof(selfSignedCert));
|
||||
pCertGetCertificateChain(NULL, cert, NULL, NULL, &chainPara, 0, NULL,
|
||||
CertGetCertificateChain(NULL, cert, NULL, NULL, &chainPara, 0, NULL,
|
||||
&chain);
|
||||
/* Crash
|
||||
ret = pCertVerifyCertificateChainPolicy(NULL, chain, NULL, NULL);
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
|
||||
ret = CertVerifyCertificateChainPolicy(NULL, chain, NULL, NULL);
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
|
||||
NULL);
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
|
||||
&chainPara, NULL);
|
||||
*/
|
||||
/* Size of policy status is apparently ignored, as is pChainPolicyPara */
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain, NULL,
|
||||
&policyStatus);
|
||||
ok(ret, "CertVerifyCertificateChainPolicy failed: %08lx\n", GetLastError());
|
||||
ok(policyStatus.dwError == CERT_E_UNTRUSTEDROOT ||
|
||||
|
@ -5370,7 +5344,7 @@ static void testVerifyCertChainPolicy(void)
|
|||
ok(policyStatus.lChainIndex == 0 && policyStatus.lElementIndex == 0,
|
||||
"Expected both indexes 0, got %ld, %ld\n", policyStatus.lChainIndex,
|
||||
policyStatus.lElementIndex);
|
||||
ret = pCertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
|
||||
ret = CertVerifyCertificateChainPolicy(CERT_CHAIN_POLICY_BASE, chain,
|
||||
&policyPara, &policyStatus);
|
||||
ok(ret, "CertVerifyCertificateChainPolicy failed: %08lx\n", GetLastError());
|
||||
ok(policyStatus.dwError == CERT_E_UNTRUSTEDROOT ||
|
||||
|
@ -5379,7 +5353,7 @@ static void testVerifyCertChainPolicy(void)
|
|||
ok(policyStatus.lChainIndex == 0 && policyStatus.lElementIndex == 0,
|
||||
"Expected both indexes 0, got %ld, %ld\n", policyStatus.lChainIndex,
|
||||
policyStatus.lElementIndex);
|
||||
pCertFreeCertificateChain(chain);
|
||||
CertFreeCertificateChain(chain);
|
||||
CertFreeCertificateContext(cert);
|
||||
|
||||
check_base_policy();
|
||||
|
@ -5392,22 +5366,8 @@ static void testVerifyCertChainPolicy(void)
|
|||
|
||||
START_TEST(chain)
|
||||
{
|
||||
HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
|
||||
pCertCreateCertificateChainEngine = (void*)GetProcAddress(hCrypt32, "CertCreateCertificateChainEngine");
|
||||
pCertGetCertificateChain = (void*)GetProcAddress(hCrypt32, "CertGetCertificateChain");
|
||||
pCertFreeCertificateChain = (void*)GetProcAddress(hCrypt32, "CertFreeCertificateChain");
|
||||
pCertFreeCertificateChainEngine = (void*)GetProcAddress(hCrypt32, "CertFreeCertificateChainEngine");
|
||||
pCertVerifyCertificateChainPolicy = (void*)GetProcAddress(hCrypt32, "CertVerifyCertificateChainPolicy");
|
||||
|
||||
testCreateCertChainEngine();
|
||||
if (!pCertGetCertificateChain || !pCertFreeCertificateChain)
|
||||
{
|
||||
win_skip("Cert*CertificateChain functions not available\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
testVerifyCertChainPolicy();
|
||||
testGetCertChain();
|
||||
test_CERT_CHAIN_PARA_cbSize();
|
||||
}
|
||||
testVerifyCertChainPolicy();
|
||||
testGetCertChain();
|
||||
test_CERT_CHAIN_PARA_cbSize();
|
||||
}
|
||||
|
|
|
@ -77,18 +77,6 @@ static const BYTE signedCRL[] = { 0x30, 0x45, 0x30, 0x2c, 0x30, 0x02, 0x06,
|
|||
0x30, 0x5a, 0x30, 0x02, 0x06, 0x00, 0x03, 0x11, 0x00, 0x0f, 0x0e, 0x0d, 0x0c,
|
||||
0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
|
||||
|
||||
static BOOL (WINAPI *pCertFindCertificateInCRL)(PCCERT_CONTEXT,PCCRL_CONTEXT,DWORD,void*,PCRL_ENTRY*);
|
||||
static PCCRL_CONTEXT (WINAPI *pCertFindCRLInStore)(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCRL_CONTEXT);
|
||||
static BOOL (WINAPI *pCertIsValidCRLForCertificate)(PCCERT_CONTEXT, PCCRL_CONTEXT, DWORD, void*);
|
||||
|
||||
static void init_function_pointers(void)
|
||||
{
|
||||
HMODULE hdll = GetModuleHandleA("crypt32.dll");
|
||||
pCertFindCertificateInCRL = (void*)GetProcAddress(hdll, "CertFindCertificateInCRL");
|
||||
pCertFindCRLInStore = (void*)GetProcAddress(hdll, "CertFindCRLInStore");
|
||||
pCertIsValidCRLForCertificate = (void*)GetProcAddress(hdll, "CertIsValidCRLForCertificate");
|
||||
}
|
||||
|
||||
static void testCreateCRL(void)
|
||||
{
|
||||
PCCRL_CONTEXT context;
|
||||
|
@ -99,8 +87,8 @@ static void testCreateCRL(void)
|
|||
"Expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
context = CertCreateCRLContext(X509_ASN_ENCODING, NULL, 0);
|
||||
GLE = GetLastError();
|
||||
ok(!context && (GLE == CRYPT_E_ASN1_EOD || GLE == OSS_MORE_INPUT),
|
||||
"Expected CRYPT_E_ASN1_EOD or OSS_MORE_INPUT, got %08lx\n", GLE);
|
||||
ok(!context && GLE == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GLE);
|
||||
context = CertCreateCRLContext(X509_ASN_ENCODING, bigCert, sizeof(bigCert));
|
||||
ok(!context, "Expected failure\n");
|
||||
context = CertCreateCRLContext(X509_ASN_ENCODING, signedCRL,
|
||||
|
@ -177,29 +165,23 @@ static void testAddCRL(void)
|
|||
/* No CRL */
|
||||
ret = CertAddEncodedCRLToStore(0, X509_ASN_ENCODING, NULL, 0, 0, NULL);
|
||||
GLE = GetLastError();
|
||||
ok(!ret && (GLE == CRYPT_E_ASN1_EOD || GLE == OSS_MORE_INPUT),
|
||||
"Expected CRYPT_E_ASN1_EOD or OSS_MORE_INPUT, got %08lx\n", GLE);
|
||||
ok(!ret && GLE == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GLE);
|
||||
ret = CertAddEncodedCRLToStore(store, X509_ASN_ENCODING, NULL, 0, 0, NULL);
|
||||
GLE = GetLastError();
|
||||
ok(!ret && (GLE == CRYPT_E_ASN1_EOD || GLE == OSS_MORE_INPUT),
|
||||
"Expected CRYPT_E_ASN1_EOD or OSS_MORE_INPUT, got %08lx\n", GLE);
|
||||
ok(!ret && GLE == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GLE);
|
||||
|
||||
/* Weird--bad add disposition leads to an access violation in Windows.
|
||||
* Both tests crash on some win9x boxes.
|
||||
*/
|
||||
if (0)
|
||||
{
|
||||
ret = CertAddEncodedCRLToStore(0, X509_ASN_ENCODING, signedCRL,
|
||||
sizeof(signedCRL), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG /* Vista */),
|
||||
ret = CertAddEncodedCRLToStore(0, X509_ASN_ENCODING, signedCRL,
|
||||
sizeof(signedCRL), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG /* Vista */),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
ret = CertAddEncodedCRLToStore(store, X509_ASN_ENCODING, signedCRL,
|
||||
sizeof(signedCRL), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG /* Vista */),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
}
|
||||
ret = CertAddEncodedCRLToStore(store, X509_ASN_ENCODING, signedCRL,
|
||||
sizeof(signedCRL), 0, NULL);
|
||||
ok(!ret && (GetLastError() == STATUS_ACCESS_VIOLATION ||
|
||||
GetLastError() == E_INVALIDARG /* Vista */),
|
||||
"Expected STATUS_ACCESS_VIOLATION or E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
|
||||
/* Weird--can add a CRL to the NULL store (does this have special meaning?)
|
||||
*/
|
||||
|
@ -433,12 +415,6 @@ static void testFindCRL(void)
|
|||
DWORD count, revoked_count;
|
||||
BOOL ret;
|
||||
|
||||
if (!pCertFindCRLInStore || !pCertFindCertificateInCRL)
|
||||
{
|
||||
win_skip("CertFindCRLInStore or CertFindCertificateInCRL not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
|
||||
CERT_STORE_CREATE_NEW_FLAG, NULL);
|
||||
ok(store != NULL, "CertOpenStore failed: %08lx\n", GetLastError());
|
||||
|
@ -449,27 +425,27 @@ static void testFindCRL(void)
|
|||
ok(ret, "CertAddEncodedCRLToStore failed: %08lx\n", GetLastError());
|
||||
|
||||
/* Crashes
|
||||
context = pCertFindCRLInStore(NULL, 0, 0, 0, NULL, NULL);
|
||||
context = CertFindCRLInStore(NULL, 0, 0, 0, NULL, NULL);
|
||||
*/
|
||||
|
||||
/* Find any context */
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ANY, NULL, NULL);
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ANY, NULL, NULL);
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
CertFreeCRLContext(context);
|
||||
/* Bogus flags are ignored */
|
||||
context = pCertFindCRLInStore(store, 0, 1234, CRL_FIND_ANY, NULL, NULL);
|
||||
context = CertFindCRLInStore(store, 0, 1234, CRL_FIND_ANY, NULL, NULL);
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
CertFreeCRLContext(context);
|
||||
/* CRL encoding type is ignored too */
|
||||
context = pCertFindCRLInStore(store, 1234, 0, CRL_FIND_ANY, NULL, NULL);
|
||||
context = CertFindCRLInStore(store, 1234, 0, CRL_FIND_ANY, NULL, NULL);
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
CertFreeCRLContext(context);
|
||||
|
||||
/* This appears to match any cert */
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, NULL, NULL);
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, NULL, NULL);
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
CertFreeCRLContext(context);
|
||||
|
@ -479,7 +455,7 @@ static void testFindCRL(void)
|
|||
sizeof(bigCert2));
|
||||
ok(cert != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
GetLastError());
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
|
||||
ok(context == NULL, "Expected no matching context\n");
|
||||
CertFreeCertificateContext(cert);
|
||||
|
||||
|
@ -488,17 +464,17 @@ static void testFindCRL(void)
|
|||
sizeof(bigCert));
|
||||
ok(cert != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
GetLastError());
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY, cert, NULL);
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
CertFreeCRLContext(context);
|
||||
|
||||
/* Try various find flags */
|
||||
context = pCertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_SIGNATURE_FLAG,
|
||||
context = CertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_SIGNATURE_FLAG,
|
||||
CRL_FIND_ISSUED_BY, cert, NULL);
|
||||
ok(!context || broken(context != NULL /* Win9x */), "unexpected context\n");
|
||||
ok(!context, "unexpected context\n");
|
||||
/* The CRL doesn't have an AKI extension, so it matches any cert */
|
||||
context = pCertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_AKI_FLAG,
|
||||
context = CertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_AKI_FLAG,
|
||||
CRL_FIND_ISSUED_BY, cert, NULL);
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
|
@ -507,18 +483,17 @@ static void testFindCRL(void)
|
|||
if (0)
|
||||
{
|
||||
/* Crash or return NULL/STATUS_ACCESS_VIOLATION */
|
||||
pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR, NULL,
|
||||
CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR, NULL,
|
||||
NULL);
|
||||
pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
&issuedForPara, NULL);
|
||||
}
|
||||
/* Test whether the cert matches the CRL in the store */
|
||||
issuedForPara.pSubjectCert = cert;
|
||||
issuedForPara.pIssuerCert = cert;
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
&issuedForPara, NULL);
|
||||
ok(context != NULL || broken(!context /* Win9x, NT4 */),
|
||||
"Expected a context\n");
|
||||
ok(context != NULL, "Expected a context\n");
|
||||
if (context)
|
||||
{
|
||||
ok(context->cbCrlEncoded == sizeof(signedCRL),
|
||||
|
@ -544,14 +519,14 @@ static void testFindCRL(void)
|
|||
context = NULL;
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
&issuedForPara, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(cert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(cert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -560,13 +535,11 @@ static void testFindCRL(void)
|
|||
* match cert's issuer, but verisignCRL does not, so the expected count
|
||||
* is 0.
|
||||
*/
|
||||
ok(count == 3 || broken(count == 0 /* NT4, Win9x */),
|
||||
"expected 3 matching CRLs, got %ld\n", count);
|
||||
ok(count == 3, "expected 3 matching CRLs, got %ld\n", count);
|
||||
/* Only v1CRLWithIssuerAndEntry and v2CRLWithIssuingDistPoint contain
|
||||
* entries, so the count of CRL entries that match cert is 2.
|
||||
*/
|
||||
ok(revoked_count == 2 || broken(revoked_count == 0 /* NT4, Win9x */),
|
||||
"expected 2 matching CRL entries, got %ld\n", revoked_count);
|
||||
ok(revoked_count == 2, "expected 2 matching CRL entries, got %ld\n", revoked_count);
|
||||
|
||||
CertFreeCertificateContext(cert);
|
||||
|
||||
|
@ -580,14 +553,14 @@ static void testFindCRL(void)
|
|||
context = NULL;
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
&issuedForPara, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(cert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(cert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -609,20 +582,19 @@ static void testFindCRL(void)
|
|||
context = NULL;
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
&issuedForPara, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(cert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(cert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
} while (context);
|
||||
ok(count == 1 || broken(count == 0 /* Win9x, NT4 */),
|
||||
"expected 1 matching CRLs, got %ld\n", count);
|
||||
ok(count == 1, "expected 1 matching CRLs, got %ld\n", count);
|
||||
ok(revoked_count == 0, "expected 0 matching CRL entries, got %ld\n",
|
||||
revoked_count);
|
||||
CertFreeCertificateContext(cert);
|
||||
|
@ -649,34 +621,32 @@ static void testFindCRL(void)
|
|||
context = NULL;
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_FOR,
|
||||
&issuedForPara, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
} while (context);
|
||||
ok(count == 1 || broken(count == 0 /* Win9x, NT4 */),
|
||||
"expected 1 matching CRLs, got %ld\n", count);
|
||||
ok(revoked_count == 1 || broken(revoked_count == 0 /* Win9x, NT4 */),
|
||||
"expected 1 matching CRL entries, got %ld\n", revoked_count);
|
||||
ok(count == 1, "expected 1 matching CRLs, got %ld\n", count);
|
||||
ok(revoked_count == 1, "expected 1 matching CRL entries, got %ld\n", revoked_count);
|
||||
|
||||
/* Test CRL_FIND_ISSUED_BY flags */
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY,
|
||||
endCert, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -686,14 +656,14 @@ static void testFindCRL(void)
|
|||
revoked_count);
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY,
|
||||
context = CertFindCRLInStore(store, 0, 0, CRL_FIND_ISSUED_BY,
|
||||
rootCert, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -703,14 +673,14 @@ static void testFindCRL(void)
|
|||
revoked_count);
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_AKI_FLAG,
|
||||
context = CertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_AKI_FLAG,
|
||||
CRL_FIND_ISSUED_BY, endCert, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -720,25 +690,24 @@ static void testFindCRL(void)
|
|||
revoked_count);
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_AKI_FLAG,
|
||||
context = CertFindCRLInStore(store, 0, CRL_FIND_ISSUED_BY_AKI_FLAG,
|
||||
CRL_FIND_ISSUED_BY, rootCert, context);
|
||||
if (context)
|
||||
{
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(rootCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(rootCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
} while (context);
|
||||
ok(count == 0 || broken(count == 1 /* Win9x */),
|
||||
"expected 0 matching CRLs, got %ld\n", count);
|
||||
ok(count == 0, "expected 0 matching CRLs, got %ld\n", count);
|
||||
ok(revoked_count == 0, "expected 0 matching CRL entries, got %ld\n",
|
||||
revoked_count);
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0,
|
||||
context = CertFindCRLInStore(store, 0,
|
||||
CRL_FIND_ISSUED_BY_SIGNATURE_FLAG, CRL_FIND_ISSUED_BY, endCert,
|
||||
context);
|
||||
if (context)
|
||||
|
@ -746,7 +715,7 @@ static void testFindCRL(void)
|
|||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -756,7 +725,7 @@ static void testFindCRL(void)
|
|||
revoked_count);
|
||||
count = revoked_count = 0;
|
||||
do {
|
||||
context = pCertFindCRLInStore(store, 0,
|
||||
context = CertFindCRLInStore(store, 0,
|
||||
CRL_FIND_ISSUED_BY_SIGNATURE_FLAG, CRL_FIND_ISSUED_BY, rootCert,
|
||||
context);
|
||||
if (context)
|
||||
|
@ -764,7 +733,7 @@ static void testFindCRL(void)
|
|||
PCRL_ENTRY entry;
|
||||
|
||||
count++;
|
||||
if (pCertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
if (CertFindCertificateInCRL(endCert, context, 0, NULL, &entry) &&
|
||||
entry)
|
||||
revoked_count++;
|
||||
}
|
||||
|
@ -985,8 +954,6 @@ static void testIsValidCRLForCert(void)
|
|||
PCCRL_CONTEXT crl;
|
||||
HCERTSTORE store;
|
||||
|
||||
if(!pCertIsValidCRLForCertificate) return;
|
||||
|
||||
crl = CertCreateCRLContext(X509_ASN_ENCODING, v1CRLWithIssuerAndEntry,
|
||||
sizeof(v1CRLWithIssuerAndEntry));
|
||||
ok(crl != NULL, "CertCreateCRLContext failed: %08lx\n", GetLastError());
|
||||
|
@ -1001,11 +968,11 @@ static void testIsValidCRLForCert(void)
|
|||
*/
|
||||
|
||||
/* Curiously, any CRL is valid for the NULL certificate */
|
||||
ret = pCertIsValidCRLForCertificate(NULL, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(NULL, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
|
||||
/* Same issuer for both cert and CRL, this CRL is valid for that cert */
|
||||
ret = pCertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
|
||||
cert2 = CertCreateCertificateContext(X509_ASN_ENCODING,
|
||||
|
@ -1017,7 +984,7 @@ static void testIsValidCRLForCert(void)
|
|||
* that cert. According to MSDN, the relevant bit to check is whether the
|
||||
* CRL has a CRL_ISSUING_DIST_POINT extension.
|
||||
*/
|
||||
ret = pCertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
|
||||
CertFreeCRLContext(crl);
|
||||
|
@ -1029,10 +996,10 @@ static void testIsValidCRLForCert(void)
|
|||
sizeof(v2CRLWithIssuingDistPoint));
|
||||
ok(crl != NULL, "CertCreateCRLContext failed: %08lx\n", GetLastError());
|
||||
|
||||
ret = pCertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_MATCH,
|
||||
"expected CRYPT_E_NO_MATCH, got %08lx\n", GetLastError());
|
||||
ret = pCertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_MATCH,
|
||||
"expected CRYPT_E_NO_MATCH, got %08lx\n", GetLastError());
|
||||
|
||||
|
@ -1043,7 +1010,7 @@ static void testIsValidCRLForCert(void)
|
|||
bigCertWithCRLDistPoints, sizeof(bigCertWithCRLDistPoints));
|
||||
ok(cert3 != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
GetLastError());
|
||||
ret = pCertIsValidCRLForCertificate(cert3, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert3, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
|
||||
CertFreeCRLContext(crl);
|
||||
|
@ -1053,11 +1020,11 @@ static void testIsValidCRLForCert(void)
|
|||
sizeof(verisignCRL));
|
||||
ok(crl != NULL, "CertCreateCRLContext failed: %08lx\n", GetLastError());
|
||||
|
||||
ret = pCertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
ret = pCertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
ret = pCertIsValidCRLForCertificate(cert3, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert3, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
|
||||
CertFreeCRLContext(crl);
|
||||
|
@ -1073,11 +1040,11 @@ static void testIsValidCRLForCert(void)
|
|||
sizeof(verisignCRL), CERT_STORE_ADD_ALWAYS, &crl);
|
||||
ok(ret, "CertAddEncodedCRLToStore failed: %08lx\n", GetLastError());
|
||||
|
||||
ret = pCertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert1, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
ret = pCertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert2, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
ret = pCertIsValidCRLForCertificate(cert3, crl, 0, NULL);
|
||||
ret = CertIsValidCRLForCertificate(cert3, crl, 0, NULL);
|
||||
ok(ret, "CertIsValidCRLForCertificate failed: %08lx\n", GetLastError());
|
||||
|
||||
CertFreeCRLContext(crl);
|
||||
|
@ -1103,37 +1070,31 @@ static void testFindCertInCRL(void)
|
|||
PCCRL_CONTEXT crl;
|
||||
PCRL_ENTRY entry;
|
||||
|
||||
if (!pCertFindCertificateInCRL)
|
||||
{
|
||||
win_skip("CertFindCertificateInCRL() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
cert = CertCreateCertificateContext(X509_ASN_ENCODING, bigCert,
|
||||
sizeof(bigCert));
|
||||
ok(cert != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
GetLastError());
|
||||
|
||||
/* Crash
|
||||
ret = pCertFindCertificateInCRL(NULL, NULL, 0, NULL, NULL);
|
||||
ret = pCertFindCertificateInCRL(NULL, crl, 0, NULL, NULL);
|
||||
ret = pCertFindCertificateInCRL(cert, NULL, 0, NULL, NULL);
|
||||
ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, NULL);
|
||||
ret = pCertFindCertificateInCRL(NULL, NULL, 0, NULL, &entry);
|
||||
ret = pCertFindCertificateInCRL(NULL, crl, 0, NULL, &entry);
|
||||
ret = pCertFindCertificateInCRL(cert, NULL, 0, NULL, &entry);
|
||||
ret = CertFindCertificateInCRL(NULL, NULL, 0, NULL, NULL);
|
||||
ret = CertFindCertificateInCRL(NULL, crl, 0, NULL, NULL);
|
||||
ret = CertFindCertificateInCRL(cert, NULL, 0, NULL, NULL);
|
||||
ret = CertFindCertificateInCRL(cert, crl, 0, NULL, NULL);
|
||||
ret = CertFindCertificateInCRL(NULL, NULL, 0, NULL, &entry);
|
||||
ret = CertFindCertificateInCRL(NULL, crl, 0, NULL, &entry);
|
||||
ret = CertFindCertificateInCRL(cert, NULL, 0, NULL, &entry);
|
||||
*/
|
||||
|
||||
crl = CertCreateCRLContext(X509_ASN_ENCODING, verisignCRL,
|
||||
sizeof(verisignCRL));
|
||||
ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
|
||||
ret = CertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
|
||||
ok(ret, "CertFindCertificateInCRL failed: %08lx\n", GetLastError());
|
||||
ok(entry == NULL, "Expected not to find an entry in CRL\n");
|
||||
CertFreeCRLContext(crl);
|
||||
|
||||
crl = CertCreateCRLContext(X509_ASN_ENCODING, v1CRLWithIssuerAndEntry,
|
||||
sizeof(v1CRLWithIssuerAndEntry));
|
||||
ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
|
||||
ret = CertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
|
||||
ok(ret, "CertFindCertificateInCRL failed: %08lx\n", GetLastError());
|
||||
ok(entry != NULL, "Expected to find an entry in CRL\n");
|
||||
CertFreeCRLContext(crl);
|
||||
|
@ -1141,7 +1102,7 @@ static void testFindCertInCRL(void)
|
|||
/* Entry found even though CRL issuer doesn't match cert issuer */
|
||||
crl = CertCreateCRLContext(X509_ASN_ENCODING, crlWithDifferentIssuer,
|
||||
sizeof(crlWithDifferentIssuer));
|
||||
ret = pCertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
|
||||
ret = CertFindCertificateInCRL(cert, crl, 0, NULL, &entry);
|
||||
ok(ret, "CertFindCertificateInCRL failed: %08lx\n", GetLastError());
|
||||
ok(entry != NULL, "Expected to find an entry in CRL\n");
|
||||
CertFreeCRLContext(crl);
|
||||
|
@ -1205,16 +1166,12 @@ static void testVerifyCRLRevocation(void)
|
|||
|
||||
START_TEST(crl)
|
||||
{
|
||||
init_function_pointers();
|
||||
|
||||
testCreateCRL();
|
||||
testDupCRL();
|
||||
testAddCRL();
|
||||
testFindCRL();
|
||||
testGetCRLFromStore();
|
||||
|
||||
testCRLProperties();
|
||||
|
||||
testIsValidCRLForCert();
|
||||
testFindCertInCRL();
|
||||
testVerifyCRLRevocation();
|
||||
|
|
|
@ -117,17 +117,13 @@ static void testCreateCTL(void)
|
|||
"expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ctl = CertCreateCTLContext(X509_ASN_ENCODING, NULL, 0);
|
||||
ok(!ctl &&
|
||||
(GetLastError() == ERROR_INVALID_DATA ||
|
||||
GetLastError() == OSS_MORE_INPUT), /* win9x */
|
||||
ok(!ctl && GetLastError() == ERROR_INVALID_DATA,
|
||||
"expected ERROR_INVALID_DATA, got %ld (0x%08lx)\n", GetLastError(),
|
||||
GetLastError());
|
||||
/* An empty CTL can't be created.. */
|
||||
SetLastError(0xdeadbeef);
|
||||
ctl = CertCreateCTLContext(X509_ASN_ENCODING, emptyCTL, sizeof(emptyCTL));
|
||||
ok(!ctl &&
|
||||
(GetLastError() == ERROR_INVALID_DATA ||
|
||||
GetLastError() == OSS_DATA_ERROR), /* win9x */
|
||||
ok(!ctl && GetLastError() == ERROR_INVALID_DATA,
|
||||
"expected ERROR_INVALID_DATA, got %ld (0x%08lx)\n", GetLastError(),
|
||||
GetLastError());
|
||||
/* Nor can any of these "signed" CTLs whose inner content OID isn't
|
||||
|
@ -135,29 +131,20 @@ static void testCreateCTL(void)
|
|||
*/
|
||||
SetLastError(0xdeadbeef);
|
||||
ctl = CertCreateCTLContext(X509_ASN_ENCODING, signedCTL, sizeof(signedCTL));
|
||||
ok(!ctl &&
|
||||
(GetLastError() == ERROR_INVALID_DATA ||
|
||||
GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE /* win9x */ ||
|
||||
GetLastError() == ERROR_SUCCESS /* some win98 */),
|
||||
"expected ERROR_INVALID_DATA, CRYPT_E_UNEXPECTED_MSG_TYPE, or ERROR_SUCCESS, got %ld (0x%08lx)\n", GetLastError(),
|
||||
ok(!ctl && GetLastError() == ERROR_INVALID_DATA,
|
||||
"expected ERROR_INVALID_DATA, got %ld (0x%08lx)\n",
|
||||
GetLastError(),
|
||||
GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ctl = CertCreateCTLContext(X509_ASN_ENCODING, ctlWithOneEntry,
|
||||
sizeof(ctlWithOneEntry));
|
||||
ok(!ctl &&
|
||||
(GetLastError() == ERROR_INVALID_DATA ||
|
||||
GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE /* win9x */ ||
|
||||
GetLastError() == OSS_DATA_ERROR /* some win98 */ ||
|
||||
GetLastError() == ERROR_SUCCESS /* some win98 */),
|
||||
"expected ERROR_INVALID_DATA, CRYPT_E_UNEXPECTED_MSG_TYPE, OSS_DATA_ERROR, or ERROR_SUCCESS, got %ld (0x%08lx)\n", GetLastError(),
|
||||
ok(!ctl && GetLastError() == ERROR_INVALID_DATA,
|
||||
"expected ERROR_INVALID_DATA, got %ld (0x%08lx)\n", GetLastError(),
|
||||
GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ctl = CertCreateCTLContext(X509_ASN_ENCODING,
|
||||
signedCTLWithSubjectAlgorithm, sizeof(signedCTLWithSubjectAlgorithm));
|
||||
ok(!ctl &&
|
||||
(GetLastError() == ERROR_INVALID_DATA ||
|
||||
GetLastError() == CRYPT_E_UNEXPECTED_MSG_TYPE /* win9x */ ||
|
||||
GetLastError() == ERROR_SUCCESS /* some win98 */),
|
||||
ok(!ctl && GetLastError() == ERROR_INVALID_DATA,
|
||||
"expected ERROR_INVALID_DATA, got %ld (0x%08lx)\n", GetLastError(),
|
||||
GetLastError());
|
||||
/* This signed CTL with the appropriate inner content type can be decoded.
|
||||
|
@ -237,11 +224,6 @@ static void testCTLProperties(void)
|
|||
|
||||
ctl = CertCreateCTLContext(X509_ASN_ENCODING,
|
||||
signedCTLWithCTLInnerContent, sizeof(signedCTLWithCTLInnerContent));
|
||||
if (!ctl)
|
||||
{
|
||||
skip("CertCreateCTLContext failed: %08lx\n", GetLastError());
|
||||
return;
|
||||
}
|
||||
|
||||
/* No properties as yet */
|
||||
propID = 0;
|
||||
|
@ -256,12 +238,10 @@ static void testCTLProperties(void)
|
|||
/* An implicit property */
|
||||
ret = CertGetCTLContextProperty(ctl, CERT_ACCESS_STATE_PROP_ID, NULL,
|
||||
&size);
|
||||
ok(ret || broken(GetLastError() == CRYPT_E_NOT_FOUND /* some win98 */),
|
||||
"CertGetCTLContextProperty failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CertGetCTLContextProperty failed: %08lx\n", GetLastError());
|
||||
ret = CertGetCTLContextProperty(ctl, CERT_ACCESS_STATE_PROP_ID, &access,
|
||||
&size);
|
||||
ok(ret || broken(GetLastError() == CRYPT_E_NOT_FOUND /* some win98 */),
|
||||
"CertGetCTLContextProperty failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CertGetCTLContextProperty failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
ok(!(access & CERT_ACCESS_STATE_WRITE_PERSIST_FLAG),
|
||||
"Didn't expect a persisted cert\n");
|
||||
|
@ -390,8 +370,8 @@ static void testAddCTLToStore(void)
|
|||
signedCTLWithCTLInnerContentAndBadSig,
|
||||
sizeof(signedCTLWithCTLInnerContentAndBadSig), CERT_STORE_ADD_NEW,
|
||||
NULL);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_EXISTS || GetLastError() == OSS_DATA_ERROR),
|
||||
"expected CRYPT_E_EXISTS or OSS_DATA_ERROR, got %d %08lx\n", ret, GetLastError());
|
||||
ok(!ret && GetLastError() == CRYPT_E_EXISTS,
|
||||
"expected CRYPT_E_EXISTS, got %d %08lx\n", ret, GetLastError());
|
||||
CertCloseStore(store, 0);
|
||||
|
||||
store = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
|
||||
|
@ -407,8 +387,7 @@ static void testAddCTLToStore(void)
|
|||
ret = CertAddEncodedCTLToStore(store, X509_ASN_ENCODING,
|
||||
signedCTLWithUsage, sizeof(signedCTLWithUsage), CERT_STORE_ADD_NEW,
|
||||
NULL);
|
||||
ok(ret || broken(GetLastError() == OSS_DATA_ERROR /* some win98 */),
|
||||
"CertAddEncodedCTLToStore failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CertAddEncodedCTLToStore failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
expectedCTLs++;
|
||||
/* Check that two exist */
|
||||
|
@ -431,11 +410,6 @@ static void testAddCTLToStore(void)
|
|||
ret = CertAddEncodedCTLToStore(store, X509_ASN_ENCODING,
|
||||
signedCTLWithListID1, sizeof(signedCTLWithListID1), CERT_STORE_ADD_NEW,
|
||||
NULL);
|
||||
if (!ret)
|
||||
{
|
||||
skip("adding a CTL with an empty usage not supported\n");
|
||||
return;
|
||||
}
|
||||
ok(ret, "CertAddEncodedCTLToStore failed: %08lx\n", GetLastError());
|
||||
ret = CertAddEncodedCTLToStore(store, X509_ASN_ENCODING,
|
||||
signedCTLWithListID2, sizeof(signedCTLWithListID2), CERT_STORE_ADD_NEW,
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -59,15 +59,13 @@ static void test_msg_get_signer_count(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING, NULL, 0);
|
||||
ok(count == -1, "Expected -1, got %ld\n", count);
|
||||
ok(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG, /* win9x */
|
||||
ok(GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||
dataEmptyBareContent, sizeof(dataEmptyBareContent));
|
||||
ok(count == -1, "Expected -1, got %ld\n", count);
|
||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_PDU_MISMATCH, /* win9x */
|
||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||
|
@ -79,14 +77,11 @@ static void test_msg_get_signer_count(void)
|
|||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||
signedEmptyBareContent, sizeof(signedEmptyBareContent));
|
||||
ok(count == -1, "Expected -1, got %ld\n", count);
|
||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_DATA_ERROR, /* win9x */
|
||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
count = CryptGetMessageSignerCount(PKCS_7_ASN_ENCODING,
|
||||
signedEmptyContent, sizeof(signedEmptyContent));
|
||||
ok(count == 1 ||
|
||||
broken(count == -1), /* win9x */
|
||||
"Expected 1, got %ld\n", count);
|
||||
ok(count == 1, "Expected 1, got %ld\n", count);
|
||||
}
|
||||
|
||||
static BYTE detachedHashContent[] = {
|
||||
|
@ -126,9 +121,7 @@ static void test_verify_detached_message_hash(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyDetachedMessageHash(¶, NULL, 0, 0, NULL, NULL, NULL,
|
||||
NULL);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
para.dwMsgEncodingType = X509_ASN_ENCODING;
|
||||
SetLastError(0xdeadbeef);
|
||||
|
@ -140,9 +133,7 @@ static void test_verify_detached_message_hash(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyDetachedMessageHash(¶, NULL, 0, 0, NULL, NULL, NULL,
|
||||
NULL);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
/* Curiously, passing no data to hash succeeds.. */
|
||||
ret = CryptVerifyDetachedMessageHash(¶, detachedHashContent,
|
||||
|
@ -221,9 +212,8 @@ static void test_verify_message_hash(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageHash(¶, NULL, 0, NULL, NULL, NULL, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
ok(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG, /* win98 */
|
||||
"Expected CRYPT_E_ASN1_EOD or OSS_BAD_ARG, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
/* Verifying the hash of a detached message succeeds? */
|
||||
ret = CryptVerifyMessageHash(¶, detachedHashContent,
|
||||
sizeof(detachedHashContent), NULL, NULL, NULL, NULL);
|
||||
|
@ -361,9 +351,8 @@ static void test_verify_detached_message_signature(void)
|
|||
ret = CryptVerifyDetachedMessageSignature(¶, 0, NULL, 0, 0, NULL,
|
||||
NULL, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
ok(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG, /* win98 */
|
||||
"Expected CRYPT_E_ASN1_EOD or OSS_BAD_ARG, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
/* None of these messages contains a cert in the message itself, so the
|
||||
* default callback isn't able to verify their signature.
|
||||
*/
|
||||
|
@ -372,39 +361,33 @@ static void test_verify_detached_message_signature(void)
|
|||
sizeof(signedWithCertContent), 0, NULL, NULL, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
todo_wine
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR, /* win98 */
|
||||
"Expected CRYPT_E_NOT_FOUND or OSS_DATA_ERROR, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyDetachedMessageSignature(¶, 0, signedContent,
|
||||
sizeof(signedContent), 0, NULL, NULL, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR, /* win98 */
|
||||
"Expected CRYPT_E_NOT_FOUND or OSS_DATA_ERROR, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyDetachedMessageSignature(¶, 0, detachedSignedContent,
|
||||
sizeof(detachedSignedContent), 0, NULL, NULL, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR, /* win98 */
|
||||
"Expected CRYPT_E_NOT_FOUND or OSS_DATA_ERROR, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
pContent = msgData;
|
||||
cbContent = sizeof(msgData);
|
||||
ret = CryptVerifyDetachedMessageSignature(¶, 0, detachedSignedContent,
|
||||
sizeof(detachedSignedContent), 1, &pContent, &cbContent, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR, /* win98 */
|
||||
"Expected CRYPT_E_NOT_FOUND or OSS_DATA_ERROR, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
/* Passing the correct callback results in success */
|
||||
para.pfnGetSignerCertificate = msg_get_signer_callback;
|
||||
ret = CryptVerifyDetachedMessageSignature(¶, 0, detachedSignedContent,
|
||||
sizeof(detachedSignedContent), 1, &pContent, &cbContent, NULL);
|
||||
ok(ret ||
|
||||
broken(!ret), /* win98 */
|
||||
"CryptVerifyDetachedMessageSignature failed: %08lx\n",
|
||||
ok(ret, "CryptVerifyDetachedMessageSignature failed: %08lx\n",
|
||||
GetLastError());
|
||||
/* Not passing the correct data to be signed results in the signature not
|
||||
* matching.
|
||||
|
@ -413,9 +396,8 @@ static void test_verify_detached_message_signature(void)
|
|||
ret = CryptVerifyDetachedMessageSignature(¶, 0, detachedSignedContent,
|
||||
sizeof(detachedSignedContent), 0, NULL, NULL, NULL);
|
||||
ok(!ret, "Expected 0, got %d\n", ret);
|
||||
ok(GetLastError() == NTE_BAD_SIGNATURE ||
|
||||
GetLastError() == OSS_DATA_ERROR, /* win98 */
|
||||
"Expected NTE_BAD_SIGNATURE or OSS_DATA_ERROR, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == NTE_BAD_SIGNATURE,
|
||||
"Expected NTE_BAD_SIGNATURE, got %08lx\n", GetLastError());
|
||||
}
|
||||
|
||||
static const BYTE signedWithCertEmptyContent[] = {
|
||||
|
@ -519,33 +501,27 @@ static void test_verify_message_signature(void)
|
|||
para.cbSize = sizeof(para);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, NULL);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
/* Check whether cert is set on error */
|
||||
cert = (PCCERT_CONTEXT)0xdeadbeef;
|
||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, 0, &cert);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG /* NT40 */),
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
ok(cert == NULL, "Expected NULL cert\n");
|
||||
/* Check whether cbDecoded is set on error */
|
||||
cbDecoded = 0xdeadbeef;
|
||||
ret = CryptVerifyMessageSignature(¶, 0, NULL, 0, NULL, &cbDecoded,
|
||||
NULL);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_ASN1_EOD ||
|
||||
GetLastError() == OSS_BAD_ARG /* NT40 */),
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_EOD,
|
||||
"Expected CRYPT_E_ASN1_EOD, got %08lx\n", GetLastError());
|
||||
ok(!cbDecoded, "Expected 0\n");
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageSignature(¶, 0, dataEmptyBareContent,
|
||||
sizeof(dataEmptyBareContent), NULL, 0, NULL);
|
||||
ok(!ret && (GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_PDU_MISMATCH /* NT40 */),
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_PDU_MISMATCH, /* win9x */
|
||||
ok(GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageSignature(¶, 0, dataEmptyContent,
|
||||
|
@ -555,23 +531,17 @@ static void test_verify_message_signature(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageSignature(¶, 0, signedEmptyBareContent,
|
||||
sizeof(signedEmptyBareContent), NULL, 0, NULL);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_ASN1_BADTAG ||
|
||||
GetLastError() == OSS_DATA_ERROR), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_ASN1_BADTAG,
|
||||
"Expected CRYPT_E_ASN1_BADTAG, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageSignature(¶, 0, signedEmptyContent,
|
||||
sizeof(signedEmptyContent), NULL, 0, NULL);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptVerifyMessageSignature(¶, 0, signedContent,
|
||||
sizeof(signedContent), NULL, 0, NULL);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_NOT_FOUND ||
|
||||
GetLastError() == OSS_DATA_ERROR), /* win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_NOT_FOUND,
|
||||
"Expected CRYPT_E_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
/* FIXME: Windows fails with CRYPT_E_NOT_FOUND for these messages, but
|
||||
* their signer certs have invalid public keys that fail to decode. In
|
||||
|
@ -1021,13 +991,6 @@ static void test_sign_message(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptImportKey(hCryptProv, publicPrivateKeyPair,
|
||||
sizeof(publicPrivateKeyPair), 0, 0, &hKey);
|
||||
if (!ret && GetLastError() == NTE_PERM) /* Win9x */
|
||||
{
|
||||
skip("Failed to import a key\n");
|
||||
if (hCryptProv)
|
||||
CryptReleaseContext(hCryptProv, 0);
|
||||
return;
|
||||
}
|
||||
ok(ret, "CryptImportKey failed: %08lx\n", GetLastError());
|
||||
|
||||
para.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
|
||||
|
@ -1239,9 +1202,7 @@ static void test_encrypt_message(void)
|
|||
encryptedBlobSize = 255;
|
||||
ret = CryptEncryptMessage(¶, 0, NULL, NULL, 0, NULL,
|
||||
&encryptedBlobSize);
|
||||
ok(!ret &&
|
||||
(GetLastError() == CRYPT_E_UNKNOWN_ALGO ||
|
||||
GetLastError() == E_INVALIDARG), /* Win9x */
|
||||
ok(!ret && GetLastError() == CRYPT_E_UNKNOWN_ALGO,
|
||||
"expected CRYPT_E_UNKNOWN_ALGO or E_INVALIDARG, got %08lx\n",
|
||||
GetLastError());
|
||||
ok(!encryptedBlobSize, "unexpected size %ld\n", encryptedBlobSize);
|
||||
|
@ -1253,9 +1214,7 @@ static void test_encrypt_message(void)
|
|||
encryptedBlobSize = 0;
|
||||
ret = CryptEncryptMessage(¶, 0, NULL, NULL, 0, NULL,
|
||||
&encryptedBlobSize);
|
||||
ok(ret ||
|
||||
broken(!ret) /* Win9x */,
|
||||
"CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
encryptedBlob = CryptMemAlloc(encryptedBlobSize);
|
||||
|
@ -1265,7 +1224,7 @@ static void test_encrypt_message(void)
|
|||
ret = CryptEncryptMessage(¶, 0, NULL, NULL, 0, encryptedBlob,
|
||||
&encryptedBlobSize);
|
||||
ok(ret, "CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
ok(encryptedBlobSize == sizeof(encryptedMessage),
|
||||
ok(encryptedBlobSize == sizeof(encryptedMessage),
|
||||
"unexpected size of encrypted blob %ld\n", encryptedBlobSize);
|
||||
ok(!memcmp(encryptedBlob, encryptedMessage, encryptedBlobSize),
|
||||
"unexpected value\n");
|
||||
|
@ -1295,9 +1254,7 @@ static void test_encrypt_message(void)
|
|||
encryptedBlobSize = 0;
|
||||
ret = CryptEncryptMessage(¶, 0, NULL, blob, sizeof(blob), NULL,
|
||||
&encryptedBlobSize);
|
||||
ok(ret ||
|
||||
broken(!ret) /* Win9x */,
|
||||
"CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
encryptedBlob = CryptMemAlloc(encryptedBlobSize);
|
||||
|
@ -1306,9 +1263,7 @@ static void test_encrypt_message(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptEncryptMessage(¶, 0, NULL, blob, sizeof(blob),
|
||||
encryptedBlob, &encryptedBlobSize);
|
||||
ok(ret ||
|
||||
broken(!ret && GetLastError() == NTE_PERM), /* some NT4 */
|
||||
"CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
if (ret)
|
||||
{
|
||||
ok(encryptedBlobSize == 55,
|
||||
|
@ -1331,9 +1286,7 @@ static void test_encrypt_message(void)
|
|||
SetLastError(0xdeadbeef);
|
||||
ret = CryptEncryptMessage(¶, 2, certs, blob, sizeof(blob),
|
||||
encryptedBlob, &encryptedBlobSize);
|
||||
ok(ret ||
|
||||
broken(!ret), /* some Win95 and some NT4 */
|
||||
"CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
ok(ret, "CryptEncryptMessage failed: %08lx\n", GetLastError());
|
||||
CryptMemFree(encryptedBlob);
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -26,9 +26,6 @@
|
|||
|
||||
#include "wine/test.h"
|
||||
|
||||
static BOOL (WINAPI * pCryptQueryObject)(DWORD, const void *, DWORD, DWORD,
|
||||
DWORD, DWORD *, DWORD *, DWORD *, HCERTSTORE *, HCRYPTMSG *, const void **);
|
||||
|
||||
static BYTE bigCert[] = {
|
||||
0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,0x15,0x31,
|
||||
0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,
|
||||
|
@ -105,12 +102,12 @@ static void test_query_object(void)
|
|||
|
||||
/* Test the usual invalid arguments */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(0, NULL, 0, 0, 0, NULL, NULL, NULL, NULL, NULL,
|
||||
ret = CryptQueryObject(0, NULL, 0, 0, 0, NULL, NULL, NULL, NULL, NULL,
|
||||
NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, NULL, 0, 0, 0, NULL, NULL,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, NULL, 0, 0, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||
"expected E_INVALIDARG, got %08lx\n", GetLastError());
|
||||
|
@ -118,7 +115,7 @@ static void test_query_object(void)
|
|||
blob.pbData = bigCert;
|
||||
blob.cbData = sizeof(bigCert);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
|
@ -126,19 +123,19 @@ static void test_query_object(void)
|
|||
blob.pbData = (BYTE *)bigCertBase64;
|
||||
blob.cbData = sizeof(bigCertBase64);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
/* The same base64-encoded cert, restricting the format types */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_BINARY, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_MATCH,
|
||||
"expected CRYPT_E_NO_MATCH, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED, 0,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
|
@ -146,7 +143,7 @@ static void test_query_object(void)
|
|||
blob.pbData = (BYTE *)bigCertBase64W;
|
||||
blob.cbData = sizeof(bigCertBase64W);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_MATCH,
|
||||
|
@ -159,14 +156,14 @@ static void test_query_object(void)
|
|||
blob.pbData = signedWithCertWithValidPubKeyContent;
|
||||
blob.cbData = sizeof(signedWithCertWithValidPubKeyContent);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
blob.pbData = (BYTE *)signedWithCertWithValidPubKeyContentBase64;
|
||||
blob.cbData = sizeof(signedWithCertWithValidPubKeyContentBase64);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
|
@ -176,18 +173,18 @@ static void test_query_object(void)
|
|||
blob.pbData = (BYTE *)signedWithCertWithValidPubKeyContentBase64W;
|
||||
blob.cbData = sizeof(signedWithCertWithValidPubKeyContentBase64W);
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_BINARY, 0, NULL, NULL,
|
||||
NULL, NULL, NULL, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_NO_MATCH,
|
||||
"expected CRYPT_E_NO_MATCH, got %08lx\n", GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
ret = CryptQueryObject(CERT_QUERY_OBJECT_BLOB, &blob,
|
||||
CERT_QUERY_CONTENT_FLAG_ALL, CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED, 0,
|
||||
NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
ok(ret, "CryptQueryObject failed: %08lx\n", GetLastError());
|
||||
|
@ -195,15 +192,5 @@ static void test_query_object(void)
|
|||
|
||||
START_TEST(object)
|
||||
{
|
||||
HMODULE mod = GetModuleHandleA("crypt32.dll");
|
||||
|
||||
pCryptQueryObject = (void *)GetProcAddress(mod, "CryptQueryObject");
|
||||
|
||||
if (!pCryptQueryObject)
|
||||
{
|
||||
win_skip("CryptQueryObject is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
test_query_object();
|
||||
}
|
||||
|
|
|
@ -29,73 +29,68 @@
|
|||
|
||||
#include "wine/test.h"
|
||||
|
||||
|
||||
static BOOL (WINAPI *pCryptEnumOIDInfo)(DWORD,DWORD,void*,PFN_CRYPT_ENUM_OID_INFO);
|
||||
|
||||
|
||||
struct OIDToAlgID
|
||||
{
|
||||
LPCSTR oid;
|
||||
LPCSTR altOid;
|
||||
DWORD algID;
|
||||
DWORD altAlgID;
|
||||
};
|
||||
|
||||
static const struct OIDToAlgID oidToAlgID[] = {
|
||||
{ szOID_RSA_RSA, NULL, CALG_RSA_KEYX },
|
||||
{ szOID_RSA_MD2RSA, NULL, CALG_MD2 },
|
||||
{ szOID_RSA_MD4RSA, NULL, CALG_MD4 },
|
||||
{ szOID_RSA_MD5RSA, NULL, CALG_MD5 },
|
||||
{ szOID_RSA_SHA1RSA, NULL, CALG_SHA },
|
||||
{ szOID_RSA_DH, NULL, CALG_DH_SF },
|
||||
{ szOID_RSA_SMIMEalgESDH, NULL, CALG_DH_EPHEM },
|
||||
{ szOID_RSA_SMIMEalgCMS3DESwrap, NULL, CALG_3DES },
|
||||
{ szOID_RSA_SMIMEalgCMSRC2wrap, NULL, CALG_RC2 },
|
||||
{ szOID_RSA_MD2, NULL, CALG_MD2 },
|
||||
{ szOID_RSA_MD4, NULL, CALG_MD4 },
|
||||
{ szOID_RSA_MD5, NULL, CALG_MD5 },
|
||||
{ szOID_RSA_RC2CBC, NULL, CALG_RC2 },
|
||||
{ szOID_RSA_RC4, NULL, CALG_RC4 },
|
||||
{ szOID_RSA_DES_EDE3_CBC, NULL, CALG_3DES },
|
||||
{ szOID_ANSI_X942_DH, NULL, CALG_DH_SF },
|
||||
{ szOID_X957_DSA, NULL, CALG_DSS_SIGN },
|
||||
{ szOID_X957_SHA1DSA, NULL, CALG_SHA },
|
||||
{ szOID_OIWSEC_md4RSA, NULL, CALG_MD4 },
|
||||
{ szOID_OIWSEC_md5RSA, NULL, CALG_MD5 },
|
||||
{ szOID_OIWSEC_md4RSA2, NULL, CALG_MD4 },
|
||||
{ szOID_OIWSEC_desCBC, NULL, CALG_DES },
|
||||
{ szOID_OIWSEC_dsa, NULL, CALG_DSS_SIGN },
|
||||
{ szOID_OIWSEC_shaDSA, NULL, CALG_SHA },
|
||||
{ szOID_OIWSEC_shaRSA, NULL, CALG_SHA },
|
||||
{ szOID_OIWSEC_sha, NULL, CALG_SHA },
|
||||
{ szOID_OIWSEC_rsaXchg, NULL, CALG_RSA_KEYX },
|
||||
{ szOID_OIWSEC_sha1, NULL, CALG_SHA },
|
||||
{ szOID_OIWSEC_dsaSHA1, NULL, CALG_SHA },
|
||||
{ szOID_OIWSEC_sha1RSASign, NULL, CALG_SHA },
|
||||
{ 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 }
|
||||
{ szOID_RSA_RSA, CALG_RSA_KEYX },
|
||||
{ szOID_RSA_MD2RSA, CALG_MD2 },
|
||||
{ szOID_RSA_MD4RSA, CALG_MD4 },
|
||||
{ szOID_RSA_MD5RSA, CALG_MD5 },
|
||||
{ szOID_RSA_SHA1RSA, CALG_SHA },
|
||||
{ szOID_RSA_DH, CALG_DH_SF },
|
||||
{ szOID_RSA_SMIMEalgESDH, CALG_DH_EPHEM },
|
||||
{ szOID_RSA_SMIMEalgCMS3DESwrap, CALG_3DES },
|
||||
{ szOID_RSA_SMIMEalgCMSRC2wrap, CALG_RC2 },
|
||||
{ szOID_RSA_MD2, CALG_MD2 },
|
||||
{ szOID_RSA_MD4, CALG_MD4 },
|
||||
{ szOID_RSA_MD5, CALG_MD5 },
|
||||
{ szOID_RSA_RC2CBC, CALG_RC2 },
|
||||
{ szOID_RSA_RC4, CALG_RC4 },
|
||||
{ szOID_RSA_DES_EDE3_CBC, CALG_3DES },
|
||||
{ szOID_ANSI_X942_DH, CALG_DH_SF },
|
||||
{ szOID_X957_DSA, CALG_DSS_SIGN },
|
||||
{ szOID_X957_SHA1DSA, CALG_SHA },
|
||||
{ szOID_OIWSEC_md4RSA, CALG_MD4 },
|
||||
{ szOID_OIWSEC_md5RSA, CALG_MD5 },
|
||||
{ szOID_OIWSEC_md4RSA2, CALG_MD4 },
|
||||
{ szOID_OIWSEC_desCBC, CALG_DES },
|
||||
{ szOID_OIWSEC_dsa, CALG_DSS_SIGN },
|
||||
{ szOID_OIWSEC_shaDSA, CALG_SHA },
|
||||
{ szOID_OIWSEC_shaRSA, CALG_SHA },
|
||||
{ szOID_OIWSEC_sha, CALG_SHA },
|
||||
{ szOID_OIWSEC_rsaXchg, CALG_RSA_KEYX },
|
||||
{ szOID_OIWSEC_sha1, CALG_SHA },
|
||||
{ szOID_OIWSEC_dsaSHA1, CALG_SHA },
|
||||
{ szOID_OIWSEC_sha1RSASign, CALG_SHA },
|
||||
{ szOID_OIWDIR_md2RSA, CALG_MD2 },
|
||||
{ szOID_INFOSEC_mosaicUpdatedSig, CALG_SHA },
|
||||
{ szOID_INFOSEC_mosaicKMandUpdSig, CALG_DSS_SIGN },
|
||||
{ szOID_NIST_sha256, CALG_SHA_256, -1 },
|
||||
{ szOID_NIST_sha384, CALG_SHA_384, -1 },
|
||||
{ szOID_NIST_sha512, CALG_SHA_512, -1 }
|
||||
};
|
||||
|
||||
static const struct OIDToAlgID algIDToOID[] = {
|
||||
{ szOID_RSA_RSA, NULL, CALG_RSA_KEYX },
|
||||
{ szOID_RSA_SMIMEalgESDH, NULL, CALG_DH_EPHEM },
|
||||
{ szOID_RSA_MD2, NULL, CALG_MD2 },
|
||||
{ szOID_RSA_MD4, NULL, CALG_MD4 },
|
||||
{ szOID_RSA_MD5, NULL, CALG_MD5 },
|
||||
{ szOID_RSA_RC2CBC, NULL, CALG_RC2 },
|
||||
{ szOID_RSA_RC4, NULL, CALG_RC4 },
|
||||
{ szOID_RSA_DES_EDE3_CBC, NULL, CALG_3DES },
|
||||
{ szOID_ANSI_X942_DH, NULL, CALG_DH_SF },
|
||||
{ szOID_X957_DSA, szOID_OIWSEC_dsa /* some Win98 */, CALG_DSS_SIGN },
|
||||
{ szOID_OIWSEC_desCBC, NULL, CALG_DES },
|
||||
{ szOID_OIWSEC_sha1, NULL, CALG_SHA },
|
||||
{ szOID_RSA_RSA, CALG_RSA_KEYX },
|
||||
{ szOID_RSA_SMIMEalgESDH, CALG_DH_EPHEM },
|
||||
{ szOID_RSA_MD2, CALG_MD2 },
|
||||
{ szOID_RSA_MD4, CALG_MD4 },
|
||||
{ szOID_RSA_MD5, CALG_MD5 },
|
||||
{ szOID_RSA_RC2CBC, CALG_RC2 },
|
||||
{ szOID_RSA_RC4, CALG_RC4 },
|
||||
{ szOID_RSA_DES_EDE3_CBC, CALG_3DES },
|
||||
{ szOID_ANSI_X942_DH, CALG_DH_SF },
|
||||
{ szOID_X957_DSA, CALG_DSS_SIGN },
|
||||
{ szOID_OIWSEC_desCBC, CALG_DES },
|
||||
{ szOID_OIWSEC_sha1, CALG_SHA },
|
||||
};
|
||||
|
||||
static void testOIDToAlgID(void)
|
||||
static void test_OIDToAlgID(void)
|
||||
{
|
||||
int i;
|
||||
DWORD alg;
|
||||
|
@ -112,7 +107,7 @@ static void testOIDToAlgID(void)
|
|||
}
|
||||
}
|
||||
|
||||
static void testAlgIDToOID(void)
|
||||
static void test_AlgIDToOID(void)
|
||||
{
|
||||
int i;
|
||||
LPCSTR oid;
|
||||
|
@ -126,27 +121,9 @@ 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);
|
||||
ok(oid != NULL, "CertAlgIdToOID failed, expected %s\n", algIDToOID[i].oid);
|
||||
if (oid)
|
||||
{
|
||||
if (strcmp(oid, algIDToOID[i].oid))
|
||||
{
|
||||
if (algIDToOID[i].altOid)
|
||||
ok(!strcmp(oid, algIDToOID[i].altOid),
|
||||
"Expected %s or %s, got %s\n", algIDToOID[i].oid,
|
||||
algIDToOID[i].altOid, oid);
|
||||
else
|
||||
{
|
||||
/* No need to rerun the test, we already know it failed. */
|
||||
ok(0, "Expected %s, got %s\n", algIDToOID[i].oid, oid);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* No need to rerun the test, we already know it succeeded. */
|
||||
ok(1, "Expected %s, got %s\n", algIDToOID[i].oid, oid);
|
||||
}
|
||||
}
|
||||
ok(!strcmp(oid, algIDToOID[i].oid), "Expected %s, got %s\n", algIDToOID[i].oid, oid);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -213,8 +190,7 @@ static void test_oidFunctionSet(void)
|
|||
|
||||
ret = CryptGetOIDFunctionAddress(set1, X509_ASN_ENCODING, X509_CERT, 0,
|
||||
&funcAddr, &hFuncAddr);
|
||||
ok((!ret && GetLastError() == ERROR_FILE_NOT_FOUND) ||
|
||||
broken(ret) /* some Win98 */,
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
}
|
||||
}
|
||||
|
@ -266,10 +242,8 @@ static void test_installOIDFunctionAddress(void)
|
|||
*/
|
||||
ret = CryptGetOIDFunctionAddress(set, X509_ASN_ENCODING, 0, 0,
|
||||
(void **)&funcAddr, &hFuncAddr);
|
||||
ok(!ret && (GetLastError() == ERROR_FILE_NOT_FOUND ||
|
||||
GetLastError() == E_INVALIDARG /* some Win98 */),
|
||||
"Expected ERROR_FILE_NOT_FOUND or E_INVALIDARG, got %ld\n",
|
||||
GetLastError());
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %ld\n", GetLastError());
|
||||
ret = CryptGetOIDFunctionAddress(set, X509_ASN_ENCODING, X509_CERT, 0,
|
||||
(void **)&funcAddr, &hFuncAddr);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
|
@ -520,20 +494,14 @@ static void test_enumOIDInfo(void)
|
|||
BOOL ret;
|
||||
DWORD count = 0;
|
||||
|
||||
if (!pCryptEnumOIDInfo)
|
||||
{
|
||||
win_skip("CryptEnumOIDInfo() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* This crashes
|
||||
ret = pCryptEnumOIDInfo(7, 0, NULL, NULL);
|
||||
ret = CryptEnumOIDInfo(7, 0, NULL, NULL);
|
||||
*/
|
||||
|
||||
/* Silly tests, check that more than one thing is enumerated */
|
||||
ret = pCryptEnumOIDInfo(0, 0, &count, countOidInfo);
|
||||
ret = CryptEnumOIDInfo(0, 0, &count, countOidInfo);
|
||||
ok(ret && count > 0, "Expected more than item enumerated\n");
|
||||
ret = pCryptEnumOIDInfo(0, 0, NULL, noOidInfo);
|
||||
ret = CryptEnumOIDInfo(0, 0, NULL, noOidInfo);
|
||||
ok(!ret, "Expected FALSE\n");
|
||||
}
|
||||
|
||||
|
@ -700,11 +668,8 @@ static void test_registerOIDInfo(void)
|
|||
|
||||
START_TEST(oid)
|
||||
{
|
||||
HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
|
||||
pCryptEnumOIDInfo = (void*)GetProcAddress(hCrypt32, "CryptEnumOIDInfo");
|
||||
|
||||
testOIDToAlgID();
|
||||
testAlgIDToOID();
|
||||
test_OIDToAlgID();
|
||||
test_AlgIDToOID();
|
||||
test_enumOIDInfo();
|
||||
test_findOIDInfo();
|
||||
test_registerOIDInfo();
|
||||
|
|
|
@ -27,9 +27,6 @@
|
|||
|
||||
#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*);
|
||||
|
||||
static char secret[] = "I am a super secret string that no one can see!";
|
||||
static char secret2[] = "I am a super secret string indescribable string";
|
||||
static char key[] = "Wibble wibble wibble";
|
||||
|
@ -51,13 +48,13 @@ static void test_cryptprotectdata(void)
|
|||
entropy.cbData=strlen(key)+1;
|
||||
|
||||
SetLastError(0xDEADBEEF);
|
||||
protected = pCryptProtectData(NULL, L"Ultra secret test message", NULL, NULL, NULL, 0, &cipher);
|
||||
protected = CryptProtectData(NULL, L"Ultra secret test message", NULL, NULL, NULL, 0, &cipher);
|
||||
ok(!protected, "Encrypting without plain data source.\n");
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_INVALID_PARAMETER, "Wrong (%lu) GetLastError seen\n",r);
|
||||
|
||||
SetLastError(0xDEADBEEF);
|
||||
protected = pCryptProtectData(&plain, L"Ultra secret test message", NULL, NULL, NULL, 0, NULL);
|
||||
protected = CryptProtectData(&plain, L"Ultra secret test message", NULL, NULL, NULL, 0, NULL);
|
||||
ok(!protected, "Encrypting without cipher destination.\n");
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_INVALID_PARAMETER, "Wrong (%lu) GetLastError seen\n",r);
|
||||
|
@ -67,16 +64,12 @@ static void test_cryptprotectdata(void)
|
|||
|
||||
/* without entropy */
|
||||
SetLastError(0xDEADBEEF);
|
||||
protected = pCryptProtectData(&plain, L"Ultra secret test message", NULL, NULL, NULL, 0, &cipher);
|
||||
ok(protected ||
|
||||
broken(!protected), /* Win9x/NT4 */
|
||||
"Encrypting without entropy.\n");
|
||||
protected = CryptProtectData(&plain, L"Ultra secret test message", NULL, NULL, NULL, 0, &cipher);
|
||||
ok(protected, "Encrypting without entropy.\n");
|
||||
if (protected)
|
||||
{
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_SUCCESS ||
|
||||
r == ERROR_IO_PENDING, /* win2k */
|
||||
"Expected ERROR_SUCCESS or ERROR_IO_PENDING, got %ld\n",r);
|
||||
ok(r == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %ld\n",r);
|
||||
}
|
||||
|
||||
cipher_entropy.pbData=NULL;
|
||||
|
@ -84,10 +77,8 @@ static void test_cryptprotectdata(void)
|
|||
|
||||
/* with entropy */
|
||||
SetLastError(0xDEADBEEF);
|
||||
protected = pCryptProtectData(&plain, L"Ultra secret test message", &entropy, NULL, NULL, 0, &cipher_entropy);
|
||||
ok(protected ||
|
||||
broken(!protected), /* Win9x/NT4 */
|
||||
"Encrypting with entropy.\n");
|
||||
protected = CryptProtectData(&plain, L"Ultra secret test message", &entropy, NULL, NULL, 0, &cipher_entropy);
|
||||
ok(protected, "Encrypting with entropy.\n");
|
||||
|
||||
cipher_no_desc.pbData=NULL;
|
||||
cipher_no_desc.cbData=0;
|
||||
|
@ -96,13 +87,8 @@ static void test_cryptprotectdata(void)
|
|||
plain.pbData=(void*)secret2;
|
||||
plain.cbData=strlen(secret2)+1;
|
||||
SetLastError(0xDEADBEEF);
|
||||
protected = pCryptProtectData(&plain,NULL,&entropy,NULL,NULL,0,&cipher_no_desc);
|
||||
if (!protected)
|
||||
{
|
||||
/* fails in win2k */
|
||||
ok(GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got %ld\n", GetLastError());
|
||||
}
|
||||
protected = CryptProtectData(&plain,NULL,&entropy,NULL,NULL,0,&cipher_no_desc);
|
||||
ok(protected, "Encrypting with entropy.\n");
|
||||
}
|
||||
|
||||
static void test_cryptunprotectdata(void)
|
||||
|
@ -116,24 +102,17 @@ static void test_cryptunprotectdata(void)
|
|||
entropy.pbData=(void*)key;
|
||||
entropy.cbData=strlen(key)+1;
|
||||
|
||||
/* fails in win2k */
|
||||
if (!protected)
|
||||
{
|
||||
skip("CryptProtectData failed to run\n");
|
||||
return;
|
||||
}
|
||||
|
||||
plain.pbData=NULL;
|
||||
plain.cbData=0;
|
||||
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(&cipher,NULL,NULL,NULL,NULL,0,NULL);
|
||||
okay = CryptUnprotectData(&cipher,NULL,NULL,NULL,NULL,0,NULL);
|
||||
ok(!okay,"Decrypting without destination\n");
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_INVALID_PARAMETER, "Wrong (%lu) GetLastError seen\n",r);
|
||||
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(NULL,NULL,NULL,NULL,NULL,0,&plain);
|
||||
okay = CryptUnprotectData(NULL,NULL,NULL,NULL,NULL,0,&plain);
|
||||
ok(!okay,"Decrypting without source\n");
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_INVALID_PARAMETER, "Wrong (%lu) GetLastError seen\n",r);
|
||||
|
@ -142,7 +121,7 @@ static void test_cryptunprotectdata(void)
|
|||
plain.cbData=0;
|
||||
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(&cipher_entropy,NULL,NULL,NULL,NULL,0,&plain);
|
||||
okay = CryptUnprotectData(&cipher_entropy,NULL,NULL,NULL,NULL,0,&plain);
|
||||
ok(!okay,"Decrypting without needed entropy\n");
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_INVALID_DATA, "Wrong (%lu) GetLastError seen\n", r);
|
||||
|
@ -153,7 +132,7 @@ static void test_cryptunprotectdata(void)
|
|||
|
||||
/* without entropy */
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(&cipher,&data_desc,NULL,NULL,NULL,0,&plain);
|
||||
okay = CryptUnprotectData(&cipher,&data_desc,NULL,NULL,NULL,0,&plain);
|
||||
ok(okay,"Decrypting without entropy\n");
|
||||
|
||||
ok(plain.pbData!=NULL,"Plain DATA_BLOB missing data\n");
|
||||
|
@ -171,14 +150,14 @@ static void test_cryptunprotectdata(void)
|
|||
|
||||
/* with wrong entropy */
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(&cipher_entropy,&data_desc,&cipher_entropy,NULL,NULL,0,&plain);
|
||||
okay = CryptUnprotectData(&cipher_entropy,&data_desc,&cipher_entropy,NULL,NULL,0,&plain);
|
||||
ok(!okay,"Decrypting with wrong entropy\n");
|
||||
r = GetLastError();
|
||||
ok(r == ERROR_INVALID_DATA, "Wrong (%lu) GetLastError seen\n",r);
|
||||
|
||||
/* with entropy */
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(&cipher_entropy,&data_desc,&entropy,NULL,NULL,0,&plain);
|
||||
okay = CryptUnprotectData(&cipher_entropy,&data_desc,&entropy,NULL,NULL,0,&plain);
|
||||
ok(okay,"Decrypting with entropy\n");
|
||||
|
||||
ok(plain.pbData!=NULL,"Plain DATA_BLOB missing data\n");
|
||||
|
@ -196,7 +175,7 @@ static void test_cryptunprotectdata(void)
|
|||
|
||||
/* with entropy but no description */
|
||||
SetLastError(0xDEADBEEF);
|
||||
okay = pCryptUnprotectData(&cipher_no_desc,&data_desc,&entropy,NULL,NULL,0,&plain);
|
||||
okay = CryptUnprotectData(&cipher_no_desc,&data_desc,&entropy,NULL,NULL,0,&plain);
|
||||
ok(okay,"Decrypting with entropy and no description\n");
|
||||
|
||||
ok(plain.pbData!=NULL,"Plain DATA_BLOB missing data\n");
|
||||
|
@ -223,16 +202,10 @@ static void test_simpleroundtrip(const char *plaintext)
|
|||
emptyW[0] = 0;
|
||||
input.pbData = (unsigned char *)plaintext;
|
||||
input.cbData = strlen(plaintext);
|
||||
res = pCryptProtectData(&input, emptyW, NULL, NULL, NULL, 0, &encrypted);
|
||||
ok(res != 0 || broken(!res), "can't protect\n");
|
||||
if (!res)
|
||||
{
|
||||
/* Fails on Win9x, NT4 */
|
||||
win_skip("CryptProtectData failed\n");
|
||||
return;
|
||||
}
|
||||
res = CryptProtectData(&input, emptyW, NULL, NULL, NULL, 0, &encrypted);
|
||||
ok(res != 0, "can't protect\n");
|
||||
|
||||
res = pCryptUnprotectData(&encrypted, NULL, NULL, NULL, NULL, 0, &output);
|
||||
res = CryptUnprotectData(&encrypted, NULL, NULL, NULL, NULL, 0, &output);
|
||||
ok(res != 0, "can't unprotect; last error %lu\n", GetLastError());
|
||||
ok(output.cbData == strlen(plaintext), "output wrong length %ld for input '%s', wanted %d\n", output.cbData, plaintext, lstrlenA(plaintext));
|
||||
ok(!memcmp(plaintext, (char *)output.pbData, output.cbData), "output wrong contents for input '%s'\n", plaintext);
|
||||
|
@ -242,16 +215,7 @@ static void test_simpleroundtrip(const char *plaintext)
|
|||
|
||||
START_TEST(protectdata)
|
||||
{
|
||||
HMODULE hCrypt32 = GetModuleHandleA("crypt32.dll");
|
||||
pCryptProtectData = (void*)GetProcAddress(hCrypt32, "CryptProtectData");
|
||||
pCryptUnprotectData = (void*)GetProcAddress(hCrypt32, "CryptUnprotectData");
|
||||
if (!pCryptProtectData || !pCryptUnprotectData)
|
||||
{
|
||||
win_skip("Crypt(Un)ProtectData() is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
protected=FALSE;
|
||||
protected = FALSE;
|
||||
test_cryptprotectdata();
|
||||
test_cryptunprotectdata();
|
||||
test_simpleroundtrip("");
|
||||
|
|
|
@ -57,17 +57,6 @@ static void test_AddRemoveProvider(void)
|
|||
/* Apparently the needed rights are checked before the existence of the provider */
|
||||
skip("Need admin rights\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
/* On some Win98 systems, CryptSIPRemoveProvider always succeeds if
|
||||
* the arguments are correct, whether or not the registry key is
|
||||
* present, so don't test ret, just check the last error if it does
|
||||
* return FALSE.
|
||||
*/
|
||||
if (!ret)
|
||||
ok (GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %ld.\n", GetLastError());
|
||||
}
|
||||
|
||||
/* Everything OK, pwszIsFunctionName and pwszIsFunctionNameFmt2 are left NULL
|
||||
* as allowed */
|
||||
|
@ -96,14 +85,8 @@ static void test_AddRemoveProvider(void)
|
|||
*/
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = CryptSIPRemoveProvider(&actionid);
|
||||
/* On some Win98 systems, CryptSIPRemoveProvider always succeeds if
|
||||
* the arguments are correct, whether or not the registry key is
|
||||
* present, so don't test ret, just check the last error if it does
|
||||
* return FALSE.
|
||||
*/
|
||||
if (!ret)
|
||||
ok (GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %ld.\n", GetLastError());
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %ld.\n", GetLastError());
|
||||
|
||||
/* Everything OK */
|
||||
memset(&newprov, 0, sizeof(SIP_ADD_NEWPROVIDER));
|
||||
|
@ -223,11 +206,8 @@ static void test_SIPRetrieveSubjectGUID(void)
|
|||
memset(&subject, 1, sizeof(GUID));
|
||||
ret = CryptSIPRetrieveSubjectGuid(tempfileW, NULL, &subject);
|
||||
ok ( !ret, "Expected CryptSIPRetrieveSubjectGuid to fail\n");
|
||||
ok ( GetLastError() == ERROR_FILE_INVALID ||
|
||||
GetLastError() == ERROR_INVALID_PARAMETER /* Vista */ ||
|
||||
GetLastError() == ERROR_SUCCESS /* most Win98 */ ||
|
||||
GetLastError() == TRUST_E_SUBJECT_FORM_UNKNOWN /* some Win98 */,
|
||||
"Expected ERROR_FILE_INVALID, ERROR_INVALID_PARAMETER, ERROR_SUCCESS or TRUST_E_SUBJECT_FORM_UNKNOWN, got 0x%08lx\n", GetLastError());
|
||||
ok ( GetLastError() == ERROR_FILE_INVALID || GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_FILE_INVALID, ERROR_INVALID_PARAMETER, got 0x%08lx\n", GetLastError());
|
||||
ok(IsEqualGUID(&subject, &nullSubject),
|
||||
"Expected a NULL GUID for empty file %s, not %s\n", tempfile, wine_dbgstr_guid(&subject));
|
||||
|
||||
|
@ -240,10 +220,8 @@ static void test_SIPRetrieveSubjectGUID(void)
|
|||
memset(&subject, 1, sizeof(GUID));
|
||||
ret = CryptSIPRetrieveSubjectGuid(tempfileW, NULL, &subject);
|
||||
ok ( !ret, "Expected CryptSIPRetrieveSubjectGuid to fail\n");
|
||||
ok ( GetLastError() == ERROR_INVALID_PARAMETER ||
|
||||
GetLastError() == ERROR_SUCCESS /* most Win98 */ ||
|
||||
GetLastError() == TRUST_E_SUBJECT_FORM_UNKNOWN /* some Win98 */,
|
||||
"Expected ERROR_INVALID_PARAMETER, ERROR_SUCCESS or TRUST_E_SUBJECT_FORM_UNKNOWN, got 0x%08lx\n", GetLastError());
|
||||
ok ( GetLastError() == ERROR_INVALID_PARAMETER,
|
||||
"Expected ERROR_INVALID_PARAMETER, got 0x%08lx\n", GetLastError());
|
||||
ok(IsEqualGUID(&subject, &nullSubject),
|
||||
"Expected a NULL GUID for empty file %s, not %s\n", tempfile, wine_dbgstr_guid(&subject));
|
||||
|
||||
|
@ -256,8 +234,7 @@ static void test_SIPRetrieveSubjectGUID(void)
|
|||
memset(&subject, 1, sizeof(GUID));
|
||||
ret = CryptSIPRetrieveSubjectGuid(tempfileW, NULL, &subject);
|
||||
ok ( !ret, "Expected CryptSIPRetrieveSubjectGuid to fail\n");
|
||||
ok ( GetLastError() == TRUST_E_SUBJECT_FORM_UNKNOWN ||
|
||||
GetLastError() == ERROR_SUCCESS /* Win98 */,
|
||||
ok ( GetLastError() == TRUST_E_SUBJECT_FORM_UNKNOWN,
|
||||
"Expected TRUST_E_SUBJECT_FORM_UNKNOWN or ERROR_SUCCESS, got 0x%08lx\n", GetLastError());
|
||||
ok(IsEqualGUID(&subject, &nullSubject),
|
||||
"Expected a NULL GUID for empty file %s, not %s\n", tempfile, wine_dbgstr_guid(&subject));
|
||||
|
|
|
@ -157,14 +157,13 @@ static void testMemStore(void)
|
|||
context = NULL;
|
||||
ret = CertAddEncodedCertificateToStore(store1, X509_ASN_ENCODING, emptyCert,
|
||||
sizeof(emptyCert), CERT_STORE_ADD_ALWAYS, &context);
|
||||
/* Windows returns CRYPT_E_ASN1_EOD or OSS_DATA_ERROR, but accept
|
||||
/* Windows returns CRYPT_E_ASN1_EOD, but accept
|
||||
* CRYPT_E_ASN1_CORRUPT as well (because matching errors is tough in this
|
||||
* case)
|
||||
*/
|
||||
GLE = GetLastError();
|
||||
ok(!ret && (GLE == CRYPT_E_ASN1_EOD || GLE == CRYPT_E_ASN1_CORRUPT ||
|
||||
GLE == OSS_DATA_ERROR),
|
||||
"Expected CRYPT_E_ASN1_EOD or CRYPT_E_ASN1_CORRUPT or OSS_DATA_ERROR, got %08lx\n",
|
||||
ok(!ret && (GLE == CRYPT_E_ASN1_EOD || GLE == CRYPT_E_ASN1_CORRUPT),
|
||||
"Expected CRYPT_E_ASN1_EOD or CRYPT_E_ASN1_CORRUPT, got %08lx\n",
|
||||
GLE);
|
||||
/* add a "signed" cert--the signature isn't a real signature, so this adds
|
||||
* without any check of the signature's validity
|
||||
|
@ -188,9 +187,8 @@ static void testMemStore(void)
|
|||
ret = CertAddEncodedCertificateToStore(store1, X509_ASN_ENCODING,
|
||||
signedCRL, sizeof(signedCRL), CERT_STORE_ADD_ALWAYS, &context);
|
||||
GLE = GetLastError();
|
||||
ok(!ret && (GLE == CRYPT_E_ASN1_BADTAG || GLE == CRYPT_E_ASN1_CORRUPT ||
|
||||
GLE == OSS_DATA_ERROR),
|
||||
"Expected CRYPT_E_ASN1_BADTAG or CRYPT_E_ASN1_CORRUPT or OSS_DATA_ERROR, got %08lx\n",
|
||||
ok(!ret && (GLE == CRYPT_E_ASN1_BADTAG || GLE == CRYPT_E_ASN1_CORRUPT),
|
||||
"Expected CRYPT_E_ASN1_BADTAG or CRYPT_E_ASN1_CORRUPT, got %08lx\n",
|
||||
GLE);
|
||||
/* add a cert to store1 */
|
||||
ret = CertAddEncodedCertificateToStore(store1, X509_ASN_ENCODING, bigCert,
|
||||
|
@ -3232,8 +3230,7 @@ static void test_PFXImportCertStore(void)
|
|||
pfx.pbData = (BYTE *)pfxdata;
|
||||
pfx.cbData = sizeof(pfxdata);
|
||||
store = PFXImportCertStore( &pfx, NULL, CRYPT_EXPORTABLE|CRYPT_USER_KEYSET|PKCS12_NO_PERSIST_KEY );
|
||||
ok( store != NULL || broken(store == NULL) /* winxp */, "got %lu\n", GetLastError() );
|
||||
if (!store) return;
|
||||
ok( store != NULL, "got %lu\n", GetLastError() );
|
||||
count = countCertsInStore( store );
|
||||
ok( count == 1, "got %lu\n", count );
|
||||
|
||||
|
|
|
@ -130,23 +130,6 @@ static char subjectStrCRLF[] =
|
|||
static char x500SubjectStr[] = "C=US, S=Minnesota, L=Minneapolis, O=CodeWeavers, OU=Wine Development, CN=localhost, E=aric@codeweavers.com";
|
||||
static char x500SubjectStrSemicolonReverse[] = "E=aric@codeweavers.com; CN=localhost; OU=Wine Development; O=CodeWeavers; L=Minneapolis; S=Minnesota; C=US";
|
||||
|
||||
static HMODULE dll;
|
||||
static DWORD (WINAPI *pCertNameToStrA)(DWORD,LPVOID,DWORD,LPSTR,DWORD);
|
||||
static DWORD (WINAPI *pCertNameToStrW)(DWORD,LPVOID,DWORD,LPWSTR,DWORD);
|
||||
static DWORD (WINAPI *pCertRDNValueToStrA)(DWORD, PCERT_RDN_VALUE_BLOB,
|
||||
LPSTR, DWORD);
|
||||
static DWORD (WINAPI *pCertRDNValueToStrW)(DWORD, PCERT_RDN_VALUE_BLOB,
|
||||
LPWSTR, DWORD);
|
||||
static BOOL (WINAPI *pCertStrToNameA)(DWORD dwCertEncodingType,
|
||||
LPCSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded,
|
||||
DWORD *pcbEncoded, LPCSTR *ppszError);
|
||||
static BOOL (WINAPI *pCertStrToNameW)(DWORD dwCertEncodingType,
|
||||
LPCWSTR pszX500, DWORD dwStrType, void *pvReserved, BYTE *pbEncoded,
|
||||
DWORD *pcbEncoded, LPCWSTR *ppszError);
|
||||
static DWORD (WINAPI *pCertGetNameStringA)(PCCERT_CONTEXT cert, DWORD type,
|
||||
DWORD flags, void *typePara, LPSTR str, DWORD cch);
|
||||
|
||||
|
||||
static void test_CertRDNValueToStrA(void)
|
||||
{
|
||||
CertRDNAttrEncoding attrs[] = {
|
||||
|
@ -182,22 +165,20 @@ static void test_CertRDNValueToStrA(void)
|
|||
CERT_RDN_VALUE_BLOB blob = { 0, NULL };
|
||||
static const char ePKI[] = "ePKI Root Certification Authority";
|
||||
|
||||
if (!pCertRDNValueToStrA) return;
|
||||
|
||||
/* This crashes
|
||||
ret = pCertRDNValueToStrA(0, NULL, NULL, 0);
|
||||
ret = CertRDNValueToStrA(0, NULL, NULL, 0);
|
||||
*/
|
||||
/* With empty input, it generates the empty string */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertRDNValueToStrA(0, &blob, NULL, 0);
|
||||
ret = CertRDNValueToStrA(0, &blob, NULL, 0);
|
||||
ok(ret == 1 && GetLastError() == 0xdeadbeef, "Expected empty string\n");
|
||||
ret = pCertRDNValueToStrA(0, &blob, buffer, sizeof(buffer));
|
||||
ret = CertRDNValueToStrA(0, &blob, buffer, sizeof(buffer));
|
||||
ok(ret == 1 && GetLastError() == 0xdeadbeef, "Expected empty string\n");
|
||||
ok(!buffer[0], "Expected empty string\n");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(attrs); i++)
|
||||
{
|
||||
ret = pCertRDNValueToStrA(attrs[i].dwValueType, &attrs[i].Value,
|
||||
ret = CertRDNValueToStrA(attrs[i].dwValueType, &attrs[i].Value,
|
||||
buffer, sizeof(buffer));
|
||||
todo_wine_if (attrs[i].todo)
|
||||
{
|
||||
|
@ -209,10 +190,9 @@ static void test_CertRDNValueToStrA(void)
|
|||
}
|
||||
blob.pbData = bin8;
|
||||
blob.cbData = sizeof(bin8);
|
||||
ret = pCertRDNValueToStrA(CERT_RDN_UTF8_STRING, &blob, buffer,
|
||||
ret = CertRDNValueToStrA(CERT_RDN_UTF8_STRING, &blob, buffer,
|
||||
sizeof(buffer));
|
||||
ok(ret == strlen(ePKI) + 1 || broken(ret != strlen(ePKI) + 1),
|
||||
"Expected length %d, got %ld\n", lstrlenA(ePKI), ret);
|
||||
ok(ret == strlen(ePKI) + 1, "Expected length %d, got %ld\n", lstrlenA(ePKI), ret);
|
||||
if (ret == strlen(ePKI) + 1)
|
||||
ok(!strcmp(buffer, ePKI), "Expected %s, got %s\n", ePKI, buffer);
|
||||
}
|
||||
|
@ -252,26 +232,20 @@ static void test_CertRDNValueToStrW(void)
|
|||
WCHAR buffer[2000];
|
||||
CERT_RDN_VALUE_BLOB blob = { 0, NULL };
|
||||
|
||||
if (!pCertRDNValueToStrW)
|
||||
{
|
||||
win_skip("CertRDNValueToStrW is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* This crashes
|
||||
ret = pCertRDNValueToStrW(0, NULL, NULL, 0);
|
||||
ret = CertRDNValueToStrW(0, NULL, NULL, 0);
|
||||
*/
|
||||
/* With empty input, it generates the empty string */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertRDNValueToStrW(0, &blob, NULL, 0);
|
||||
ret = CertRDNValueToStrW(0, &blob, NULL, 0);
|
||||
ok(ret == 1 && GetLastError() == 0xdeadbeef, "Expected empty string\n");
|
||||
ret = pCertRDNValueToStrW(0, &blob, buffer, ARRAY_SIZE(buffer));
|
||||
ret = CertRDNValueToStrW(0, &blob, buffer, ARRAY_SIZE(buffer));
|
||||
ok(ret == 1 && GetLastError() == 0xdeadbeef, "Expected empty string\n");
|
||||
ok(!buffer[0], "Expected empty string\n");
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(attrs); i++)
|
||||
{
|
||||
ret = pCertRDNValueToStrW(attrs[i].dwValueType, &attrs[i].Value, buffer, ARRAY_SIZE(buffer));
|
||||
ret = CertRDNValueToStrW(attrs[i].dwValueType, &attrs[i].Value, buffer, ARRAY_SIZE(buffer));
|
||||
todo_wine_if (attrs[i].todo)
|
||||
{
|
||||
ok(ret == lstrlenW(attrs[i].str) + 1,
|
||||
|
@ -282,10 +256,9 @@ static void test_CertRDNValueToStrW(void)
|
|||
}
|
||||
blob.pbData = bin8;
|
||||
blob.cbData = sizeof(bin8);
|
||||
ret = pCertRDNValueToStrW(CERT_RDN_UTF8_STRING, &blob, buffer,
|
||||
ret = CertRDNValueToStrW(CERT_RDN_UTF8_STRING, &blob, buffer,
|
||||
sizeof(buffer));
|
||||
ok(ret == lstrlenW(ePKIW) + 1 || broken(ret != lstrlenW(ePKIW) + 1),
|
||||
"Expected length %d, got %ld\n", lstrlenW(ePKIW), ret);
|
||||
ok(ret == lstrlenW(ePKIW) + 1, "Expected length %d, got %ld\n", lstrlenW(ePKIW), ret);
|
||||
if (ret == lstrlenW(ePKIW) + 1)
|
||||
ok(!lstrcmpW(buffer, ePKIW), "Expected %s, got %s\n",
|
||||
wine_dbgstr_w(ePKIW), wine_dbgstr_w(buffer));
|
||||
|
@ -297,11 +270,11 @@ static void test_NameToStrConversionA(PCERT_NAME_BLOB pName, DWORD dwStrType,
|
|||
char buffer[2000] = { 0 };
|
||||
DWORD i;
|
||||
|
||||
i = pCertNameToStrA(X509_ASN_ENCODING, pName, dwStrType, NULL, 0);
|
||||
i = CertNameToStrA(X509_ASN_ENCODING, pName, dwStrType, NULL, 0);
|
||||
todo_wine_if (todo)
|
||||
ok(i == strlen(expected) + 1, "Expected %d chars, got %ld\n",
|
||||
lstrlenA(expected) + 1, i);
|
||||
i = pCertNameToStrA(X509_ASN_ENCODING,pName, dwStrType, buffer,
|
||||
i = CertNameToStrA(X509_ASN_ENCODING,pName, dwStrType, buffer,
|
||||
sizeof(buffer));
|
||||
todo_wine_if (todo)
|
||||
ok(i == strlen(expected) + 1, "Expected %d chars, got %ld\n",
|
||||
|
@ -357,12 +330,6 @@ static void test_CertNameToStrA(void)
|
|||
PCCERT_CONTEXT context;
|
||||
CERT_NAME_BLOB blob;
|
||||
|
||||
if (!pCertNameToStrA)
|
||||
{
|
||||
win_skip("CertNameToStrA is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
context = CertCreateCertificateContext(X509_ASN_ENCODING, cert,
|
||||
sizeof(cert));
|
||||
ok(context != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
|
@ -372,16 +339,16 @@ static void test_CertNameToStrA(void)
|
|||
DWORD ret;
|
||||
|
||||
/* This crashes
|
||||
ret = pCertNameToStrA(0, NULL, 0, NULL, 0);
|
||||
ret = CertNameToStrA(0, NULL, 0, NULL, 0);
|
||||
*/
|
||||
/* Test with a bogus encoding type */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertNameToStrA(0, &context->pCertInfo->Issuer, 0, NULL, 0);
|
||||
ret = CertNameToStrA(0, &context->pCertInfo->Issuer, 0, NULL, 0);
|
||||
ok(ret == 1 && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected retval 1 and ERROR_FILE_NOT_FOUND, got %ld - %08lx\n",
|
||||
ret, GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertNameToStrA(X509_ASN_ENCODING, &context->pCertInfo->Issuer,
|
||||
ret = CertNameToStrA(X509_ASN_ENCODING, &context->pCertInfo->Issuer,
|
||||
0, NULL, 0);
|
||||
ok(ret && GetLastError() == ERROR_SUCCESS,
|
||||
"Expected positive return and ERROR_SUCCESS, got %ld - %08lx\n",
|
||||
|
@ -468,11 +435,11 @@ static void test_NameToStrConversionW(PCERT_NAME_BLOB pName, DWORD dwStrType,
|
|||
WCHAR buffer[2000] = { 0 };
|
||||
DWORD i;
|
||||
|
||||
i = pCertNameToStrW(X509_ASN_ENCODING,pName, dwStrType, NULL, 0);
|
||||
i = CertNameToStrW(X509_ASN_ENCODING,pName, dwStrType, NULL, 0);
|
||||
todo_wine_if (todo)
|
||||
ok(i == lstrlenW(expected) + 1, "Expected %d chars, got %ld\n",
|
||||
lstrlenW(expected) + 1, i);
|
||||
i = pCertNameToStrW(X509_ASN_ENCODING,pName, dwStrType, buffer, ARRAY_SIZE(buffer));
|
||||
i = CertNameToStrW(X509_ASN_ENCODING,pName, dwStrType, buffer, ARRAY_SIZE(buffer));
|
||||
todo_wine_if (todo)
|
||||
ok(i == lstrlenW(expected) + 1, "Expected %d chars, got %ld\n",
|
||||
lstrlenW(expected) + 1, i);
|
||||
|
@ -486,12 +453,6 @@ static void test_CertNameToStrW(void)
|
|||
PCCERT_CONTEXT context;
|
||||
CERT_NAME_BLOB blob;
|
||||
|
||||
if (!pCertNameToStrW)
|
||||
{
|
||||
win_skip("CertNameToStrW is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
context = CertCreateCertificateContext(X509_ASN_ENCODING, cert,
|
||||
sizeof(cert));
|
||||
ok(context != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
|
@ -501,16 +462,16 @@ static void test_CertNameToStrW(void)
|
|||
DWORD ret;
|
||||
|
||||
/* This crashes
|
||||
ret = pCertNameToStrW(0, NULL, 0, NULL, 0);
|
||||
ret = CertNameToStrW(0, NULL, 0, NULL, 0);
|
||||
*/
|
||||
/* Test with a bogus encoding type */
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertNameToStrW(0, &context->pCertInfo->Issuer, 0, NULL, 0);
|
||||
ret = CertNameToStrW(0, &context->pCertInfo->Issuer, 0, NULL, 0);
|
||||
ok(ret == 1 && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected retval 1 and ERROR_FILE_NOT_FOUND, got %ld - %08lx\n",
|
||||
ret, GetLastError());
|
||||
SetLastError(0xdeadbeef);
|
||||
ret = pCertNameToStrW(X509_ASN_ENCODING, &context->pCertInfo->Issuer,
|
||||
ret = CertNameToStrW(X509_ASN_ENCODING, &context->pCertInfo->Issuer,
|
||||
0, NULL, 0);
|
||||
ok(ret && GetLastError() == ERROR_SUCCESS,
|
||||
"Expected positive return and ERROR_SUCCESS, got %ld - %08lx\n",
|
||||
|
@ -640,69 +601,63 @@ static void test_CertStrToNameA(void)
|
|||
DWORD size, i;
|
||||
BYTE buf[100];
|
||||
|
||||
if (!pCertStrToNameA)
|
||||
{
|
||||
win_skip("CertStrToNameA is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Crash
|
||||
ret = pCertStrToNameA(0, NULL, 0, NULL, NULL, NULL, NULL);
|
||||
ret = CertStrToNameA(0, NULL, 0, NULL, NULL, NULL, NULL);
|
||||
*/
|
||||
ret = pCertStrToNameA(0, NULL, 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameA(0, NULL, 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret, "Expected failure\n");
|
||||
ret = pCertStrToNameA(0, "bogus", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameA(0, "bogus", 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(0, "foo=1", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameA(0, "foo=1", 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(0, "CN=1", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameA(0, "CN=1", 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=1", 0, NULL, NULL, &size, NULL);
|
||||
ok(ret, "CertStrToNameA failed: %08lx\n", GetLastError());
|
||||
size = sizeof(buf);
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"\"1\"\"", 0, NULL, buf, &size,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=\"\"1\"\"", 0, NULL, buf, &size,
|
||||
NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1+2", 0, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=1+2", 0, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1+2", CERT_NAME_STR_NO_PLUS_FLAG, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=1+2", CERT_NAME_STR_NO_PLUS_FLAG, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(ret && GetLastError() == ERROR_SUCCESS,
|
||||
"Expected ERROR_SUCCESS, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=1,2", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=1,2", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"1,2;3,4\"", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=\"1,2;3,4\"", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=abc", 0, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=abc", 0, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(ret && GetLastError() == ERROR_SUCCESS,
|
||||
"Expected ERROR_SUCCESS, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=abc", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=abc", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(ret && GetLastError() == ERROR_SUCCESS,
|
||||
"Expected ERROR_SUCCESS, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"abc\"", 0, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=\"abc\"", 0, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(ret && GetLastError() == ERROR_SUCCESS,
|
||||
"Expected ERROR_SUCCESS, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, "CN=\"abc\"", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, "CN=\"abc\"", CERT_NAME_STR_NO_QUOTING_FLAG, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(!ret && GetLastError() == ERROR_MORE_DATA,
|
||||
"Expected ERROR_MORE_DATA, got %08lx\n", GetLastError());
|
||||
for (i = 0; i < ARRAY_SIZE(namesA); i++)
|
||||
{
|
||||
size = sizeof(buf);
|
||||
ret = pCertStrToNameA(X509_ASN_ENCODING, namesA[i].x500, 0, NULL, buf,
|
||||
ret = CertStrToNameA(X509_ASN_ENCODING, namesA[i].x500, 0, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(ret, "CertStrToNameA failed on string %s: %08lx\n", namesA[i].x500,
|
||||
GetLastError());
|
||||
|
@ -750,35 +705,29 @@ static void test_CertStrToNameW(void)
|
|||
LPCWSTR errorPtr;
|
||||
BYTE buf[100];
|
||||
|
||||
if (!pCertStrToNameW)
|
||||
{
|
||||
win_skip("CertStrToNameW is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Crash
|
||||
ret = pCertStrToNameW(0, NULL, 0, NULL, NULL, NULL, NULL);
|
||||
ret = CertStrToNameW(0, NULL, 0, NULL, NULL, NULL, NULL);
|
||||
*/
|
||||
ret = pCertStrToNameW(0, NULL, 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameW(0, NULL, 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret, "Expected failure\n");
|
||||
ret = pCertStrToNameW(0, L"bogus", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameW(0, L"bogus", 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameW(0, L"foo=1", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameW(0, L"foo=1", 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameW(0, L"CN=1", 0, NULL, NULL, &size, NULL);
|
||||
ret = CertStrToNameW(0, L"CN=1", 0, NULL, NULL, &size, NULL);
|
||||
ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND,
|
||||
"Expected ERROR_FILE_NOT_FOUND, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameW(X509_ASN_ENCODING, L"CN=1", 0, NULL, NULL, &size,
|
||||
ret = CertStrToNameW(X509_ASN_ENCODING, L"CN=1", 0, NULL, NULL, &size,
|
||||
NULL);
|
||||
ok(ret, "CertStrToNameW failed: %08lx\n", GetLastError());
|
||||
size = sizeof(buf);
|
||||
ret = pCertStrToNameW(X509_ASN_ENCODING, L"CN=\"\"1\"\"", 0, NULL, buf,
|
||||
ret = CertStrToNameW(X509_ASN_ENCODING, L"CN=\"\"1\"\"", 0, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
ret = pCertStrToNameW(X509_ASN_ENCODING, L"CN=\"\"1\"\"", 0, NULL, buf,
|
||||
ret = CertStrToNameW(X509_ASN_ENCODING, L"CN=\"\"1\"\"", 0, NULL, buf,
|
||||
&size, &errorPtr);
|
||||
ok(!ret && GetLastError() == CRYPT_E_INVALID_X500_STRING,
|
||||
"Expected CRYPT_E_INVALID_X500_STRING, got %08lx\n", GetLastError());
|
||||
|
@ -786,7 +735,7 @@ static void test_CertStrToNameW(void)
|
|||
for (i = 0; i < ARRAY_SIZE(namesW); i++)
|
||||
{
|
||||
size = sizeof(buf);
|
||||
ret = pCertStrToNameW(X509_ASN_ENCODING, namesW[i].x500, 0, NULL, buf,
|
||||
ret = CertStrToNameW(X509_ASN_ENCODING, namesW[i].x500, 0, NULL, buf,
|
||||
&size, NULL);
|
||||
ok(ret, "Index %ld: CertStrToNameW failed: %08lx\n", i, GetLastError());
|
||||
ok(size == namesW[i].encodedSize,
|
||||
|
@ -802,12 +751,6 @@ static void test_CertGetNameStringA(void)
|
|||
{
|
||||
PCCERT_CONTEXT context;
|
||||
|
||||
if (!pCertGetNameStringA)
|
||||
{
|
||||
win_skip("CertGetNameStringA is not available\n");
|
||||
return;
|
||||
}
|
||||
|
||||
context = CertCreateCertificateContext(X509_ASN_ENCODING, cert,
|
||||
sizeof(cert));
|
||||
ok(context != NULL, "CertCreateCertificateContext failed: %08lx\n",
|
||||
|
@ -820,130 +763,129 @@ static void test_CertGetNameStringA(void)
|
|||
LPSTR str;
|
||||
|
||||
/* Bad string types/types missing from the cert */
|
||||
len = pCertGetNameStringA(NULL, 0, 0, NULL, NULL, 0);
|
||||
len = CertGetNameStringA(NULL, 0, 0, NULL, NULL, 0);
|
||||
ok(len == 1, "expected 1, got %ld\n", len);
|
||||
len = pCertGetNameStringA(context, 0, 0, NULL, NULL, 0);
|
||||
len = CertGetNameStringA(context, 0, 0, NULL, NULL, 0);
|
||||
ok(len == 1, "expected 1, got %ld\n", len);
|
||||
len = pCertGetNameStringA(context, CERT_NAME_URL_TYPE, 0, NULL, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_URL_TYPE, 0, NULL, NULL,
|
||||
0);
|
||||
ok(len == 1, "expected 1, got %ld\n", len);
|
||||
|
||||
len = pCertGetNameStringA(context, CERT_NAME_EMAIL_TYPE, 0, NULL, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_EMAIL_TYPE, 0, NULL, NULL,
|
||||
0);
|
||||
ok(len == strlen(aric) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_EMAIL_TYPE, 0, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_EMAIL_TYPE, 0, NULL,
|
||||
str, len);
|
||||
ok(!strcmp(str, aric), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
|
||||
len = pCertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, NULL, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, NULL, NULL,
|
||||
0);
|
||||
ok(len == strlen(issuerStr) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, NULL,
|
||||
str, len);
|
||||
ok(!strcmp(str, issuerStr), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
type = 0;
|
||||
len = pCertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type, NULL,
|
||||
0);
|
||||
ok(len == strlen(issuerStr) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type,
|
||||
len = CertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type,
|
||||
str, len);
|
||||
ok(!strcmp(str, issuerStr), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
type = CERT_OID_NAME_STR;
|
||||
len = pCertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type, NULL,
|
||||
0);
|
||||
ok(len == strlen(subjectStr) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type,
|
||||
len = CertGetNameStringA(context, CERT_NAME_RDN_TYPE, 0, &type,
|
||||
str, len);
|
||||
ok(!strcmp(str, subjectStr), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
|
||||
len = pCertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0, NULL, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0, NULL, NULL,
|
||||
0);
|
||||
ok(len == strlen(aric) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0, NULL,
|
||||
str, len);
|
||||
ok(!strcmp(str, aric), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
len = pCertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
len = CertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
(void *)szOID_RSA_emailAddr, NULL, 0);
|
||||
ok(len == strlen(aric) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
len = CertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
(void *)szOID_RSA_emailAddr, str, len);
|
||||
ok(!strcmp(str, aric), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
len = pCertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
len = CertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
(void *)szOID_COMMON_NAME, NULL, 0);
|
||||
ok(len == strlen(localhost) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
len = CertGetNameStringA(context, CERT_NAME_ATTR_TYPE, 0,
|
||||
(void *)szOID_COMMON_NAME, str, len);
|
||||
ok(!strcmp(str, localhost), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
|
||||
len = pCertGetNameStringA(context, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0,
|
||||
len = CertGetNameStringA(context, CERT_NAME_SIMPLE_DISPLAY_TYPE, 0,
|
||||
NULL, NULL, 0);
|
||||
ok(len == strlen(localhost) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_SIMPLE_DISPLAY_TYPE,
|
||||
len = CertGetNameStringA(context, CERT_NAME_SIMPLE_DISPLAY_TYPE,
|
||||
0, NULL, str, len);
|
||||
ok(!strcmp(str, localhost), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
|
||||
len = pCertGetNameStringA(context, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0,
|
||||
len = CertGetNameStringA(context, CERT_NAME_FRIENDLY_DISPLAY_TYPE, 0,
|
||||
NULL, NULL, 0);
|
||||
ok(len == strlen(localhost) + 1, "unexpected length %ld\n", len);
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_FRIENDLY_DISPLAY_TYPE,
|
||||
len = CertGetNameStringA(context, CERT_NAME_FRIENDLY_DISPLAY_TYPE,
|
||||
0, NULL, str, len);
|
||||
ok(!strcmp(str, localhost), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
}
|
||||
|
||||
len = pCertGetNameStringA(context, CERT_NAME_DNS_TYPE, 0, NULL, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_DNS_TYPE, 0, NULL, NULL,
|
||||
0);
|
||||
ok(len == strlen(localhost) + 1 || broken(len == 1) /* NT4 */,
|
||||
"unexpected length %ld\n", len);
|
||||
ok(len == strlen(localhost) + 1, "unexpected length %ld\n", len);
|
||||
if (len > 1)
|
||||
{
|
||||
str = HeapAlloc(GetProcessHeap(), 0, len);
|
||||
if (str)
|
||||
{
|
||||
len = pCertGetNameStringA(context, CERT_NAME_DNS_TYPE, 0, NULL,
|
||||
len = CertGetNameStringA(context, CERT_NAME_DNS_TYPE, 0, NULL,
|
||||
str, len);
|
||||
ok(!strcmp(str, localhost), "unexpected value %s\n", str);
|
||||
HeapFree(GetProcessHeap(), 0, str);
|
||||
|
@ -956,16 +898,6 @@ static void test_CertGetNameStringA(void)
|
|||
|
||||
START_TEST(str)
|
||||
{
|
||||
dll = GetModuleHandleA("Crypt32.dll");
|
||||
|
||||
pCertNameToStrA = (void*)GetProcAddress(dll,"CertNameToStrA");
|
||||
pCertNameToStrW = (void*)GetProcAddress(dll,"CertNameToStrW");
|
||||
pCertRDNValueToStrA = (void*)GetProcAddress(dll, "CertRDNValueToStrA");
|
||||
pCertRDNValueToStrW = (void*)GetProcAddress(dll, "CertRDNValueToStrW");
|
||||
pCertStrToNameA = (void*)GetProcAddress(dll,"CertStrToNameA");
|
||||
pCertStrToNameW = (void*)GetProcAddress(dll,"CertStrToNameW");
|
||||
pCertGetNameStringA = (void*)GetProcAddress(dll, "CertGetNameStringA");
|
||||
|
||||
test_CertRDNValueToStrA();
|
||||
test_CertRDNValueToStrW();
|
||||
test_CertNameToStrA();
|
||||
|
|
Loading…
Reference in New Issue