crypt32: Add tests for CertGetCTLContextProperty.
This commit is contained in:
parent
429b1e1b41
commit
b15ee45965
|
@ -173,7 +173,88 @@ static void testCreateCTL(void)
|
||||||
CertFreeCTLContext(ctl);
|
CertFreeCTLContext(ctl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void checkHash(const BYTE *data, DWORD dataLen, ALG_ID algID,
|
||||||
|
PCCTL_CONTEXT context, DWORD propID)
|
||||||
|
{
|
||||||
|
BYTE hash[20] = { 0 }, hashProperty[20];
|
||||||
|
BOOL ret;
|
||||||
|
DWORD size;
|
||||||
|
|
||||||
|
memset(hash, 0, sizeof(hash));
|
||||||
|
memset(hashProperty, 0, sizeof(hashProperty));
|
||||||
|
size = sizeof(hash);
|
||||||
|
ret = CryptHashCertificate(0, algID, 0, data, dataLen, hash, &size);
|
||||||
|
ret = CertGetCTLContextProperty(context, propID, hashProperty, &size);
|
||||||
|
ok(ret, "CertGetCTLContextProperty failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
ok(!memcmp(hash, hashProperty, size),
|
||||||
|
"Unexpected hash for property %d\n", propID);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void testCTLProperties(void)
|
||||||
|
{
|
||||||
|
PCCTL_CONTEXT ctl;
|
||||||
|
BOOL ret;
|
||||||
|
DWORD propID, numProps, access, size;
|
||||||
|
|
||||||
|
ctl = CertCreateCTLContext(X509_ASN_ENCODING,
|
||||||
|
signedCTLWithCTLInnerContent, sizeof(signedCTLWithCTLInnerContent));
|
||||||
|
if (!ctl)
|
||||||
|
{
|
||||||
|
skip("CertCreateCTLContext failed: %08x\n", GetLastError());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* No properties as yet */
|
||||||
|
propID = 0;
|
||||||
|
numProps = 0;
|
||||||
|
do {
|
||||||
|
propID = CertEnumCTLContextProperties(ctl, propID);
|
||||||
|
if (propID)
|
||||||
|
numProps++;
|
||||||
|
} while (propID != 0);
|
||||||
|
ok(numProps == 0, "Expected 0 properties, got %d\n", numProps);
|
||||||
|
|
||||||
|
/* An implicit property */
|
||||||
|
ret = CertGetCTLContextProperty(ctl, CERT_ACCESS_STATE_PROP_ID, NULL,
|
||||||
|
&size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CertGetCTLContextProperty failed: %08x\n", GetLastError());
|
||||||
|
ret = CertGetCTLContextProperty(ctl, CERT_ACCESS_STATE_PROP_ID, &access,
|
||||||
|
&size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CertGetCTLContextProperty failed: %08x", GetLastError());
|
||||||
|
todo_wine
|
||||||
|
ok(!(access & CERT_ACCESS_STATE_WRITE_PERSIST_FLAG),
|
||||||
|
"Didn't expect a persisted cert\n");
|
||||||
|
|
||||||
|
todo_wine
|
||||||
|
checkHash(signedCTLWithCTLInnerContent,
|
||||||
|
sizeof(signedCTLWithCTLInnerContent), CALG_SHA1, ctl, CERT_HASH_PROP_ID);
|
||||||
|
|
||||||
|
/* Now that the hash property is set, we should get one property when
|
||||||
|
* enumerating.
|
||||||
|
*/
|
||||||
|
propID = 0;
|
||||||
|
numProps = 0;
|
||||||
|
do {
|
||||||
|
propID = CertEnumCTLContextProperties(ctl, propID);
|
||||||
|
if (propID)
|
||||||
|
numProps++;
|
||||||
|
} while (propID != 0);
|
||||||
|
todo_wine
|
||||||
|
ok(numProps == 1, "Expected 1 properties, got %d\n", numProps);
|
||||||
|
|
||||||
|
todo_wine
|
||||||
|
checkHash(signedCTLWithCTLInnerContent,
|
||||||
|
sizeof(signedCTLWithCTLInnerContent), CALG_MD5, ctl,
|
||||||
|
CERT_MD5_HASH_PROP_ID);
|
||||||
|
|
||||||
|
CertFreeCTLContext(ctl);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(ctl)
|
START_TEST(ctl)
|
||||||
{
|
{
|
||||||
testCreateCTL();
|
testCreateCTL();
|
||||||
|
testCTLProperties();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue