crypt32: Add tests for encoding/decoding CERT_POLICIES_INFO.
This commit is contained in:
parent
8729e6956b
commit
a90c26eb33
|
@ -7157,6 +7157,150 @@ static void test_decodePolicyQualifierUserNotice(DWORD dwEncoding)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char oid_any_policy[] = "2.5.29.32.0";
|
||||||
|
static const BYTE policiesWithAnyPolicy[] = {
|
||||||
|
0x30,0x08,0x30,0x06,0x06,0x04,0x55,0x1d,0x20,0x00
|
||||||
|
};
|
||||||
|
static char oid1[] = "1.2.3";
|
||||||
|
static char oid_user_notice[] = "1.3.6.1.5.5.7.2.2";
|
||||||
|
static const BYTE twoPolicies[] = {
|
||||||
|
0x30,0x50,0x30,0x06,0x06,0x04,0x55,0x1d,0x20,0x00,0x30,0x46,0x06,0x02,0x2a,
|
||||||
|
0x03,0x30,0x40,0x30,0x3e,0x06,0x08,0x2b,0x06,0x01,0x05,0x05,0x07,0x02,0x02,
|
||||||
|
0x30,0x32,0x30,0x0e,0x16,0x04,0x57,0x69,0x6e,0x65,0x30,0x06,0x02,0x01,0x02,
|
||||||
|
0x02,0x01,0x03,0x1e,0x20,0x00,0x54,0x00,0x68,0x00,0x69,0x00,0x73,0x00,0x20,
|
||||||
|
0x00,0x69,0x00,0x73,0x00,0x20,0x00,0x61,0x00,0x20,0x00,0x6e,0x00,0x6f,0x00,
|
||||||
|
0x74,0x00,0x69,0x00,0x63,0x00,0x65
|
||||||
|
};
|
||||||
|
|
||||||
|
static void test_encodeCertPolicies(DWORD dwEncoding)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
CERT_POLICIES_INFO info;
|
||||||
|
CERT_POLICY_INFO policy[2];
|
||||||
|
CERT_POLICY_QUALIFIER_INFO qualifier;
|
||||||
|
LPBYTE buf;
|
||||||
|
DWORD size;
|
||||||
|
|
||||||
|
memset(&info, 0, sizeof(info));
|
||||||
|
ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_POLICIES, &info,
|
||||||
|
CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
ok(sizeof(emptySequence) == size, "unexpected size %d\n", size);
|
||||||
|
ok(!memcmp(buf, emptySequence, size), "unexpected value\n");
|
||||||
|
LocalFree(buf);
|
||||||
|
}
|
||||||
|
memset(policy, 0, sizeof(policy));
|
||||||
|
info.cPolicyInfo = 1;
|
||||||
|
info.rgPolicyInfo = policy;
|
||||||
|
ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_POLICIES, &info,
|
||||||
|
CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(!ret && GetLastError() == E_INVALIDARG,
|
||||||
|
"expected E_INVALIDARG, got %08x\n", GetLastError());
|
||||||
|
policy[0].pszPolicyIdentifier = oid_any_policy;
|
||||||
|
ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_POLICIES, &info,
|
||||||
|
CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
ok(sizeof(policiesWithAnyPolicy) == size, "unexpected size %d\n", size);
|
||||||
|
ok(!memcmp(buf, policiesWithAnyPolicy, size), "unexpected value\n");
|
||||||
|
LocalFree(buf);
|
||||||
|
}
|
||||||
|
policy[1].pszPolicyIdentifier = oid1;
|
||||||
|
memset(&qualifier, 0, sizeof(qualifier));
|
||||||
|
qualifier.pszPolicyQualifierId = oid_user_notice;
|
||||||
|
qualifier.Qualifier.cbData = sizeof(noticeWithReference);
|
||||||
|
qualifier.Qualifier.pbData = noticeWithReference;
|
||||||
|
policy[1].cPolicyQualifier = 1;
|
||||||
|
policy[1].rgPolicyQualifier = &qualifier;
|
||||||
|
info.cPolicyInfo = 2;
|
||||||
|
ret = pCryptEncodeObjectEx(dwEncoding, X509_CERT_POLICIES, &info,
|
||||||
|
CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
ok(sizeof(twoPolicies) == size, "unexpected size %d\n", size);
|
||||||
|
ok(!memcmp(buf, twoPolicies, size), "unexpected value\n");
|
||||||
|
LocalFree(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_decodeCertPolicies(DWORD dwEncoding)
|
||||||
|
{
|
||||||
|
BOOL ret;
|
||||||
|
CERT_POLICIES_INFO *info;
|
||||||
|
DWORD size;
|
||||||
|
|
||||||
|
ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_POLICIES,
|
||||||
|
emptySequence, sizeof(emptySequence), CRYPT_DECODE_ALLOC_FLAG, NULL,
|
||||||
|
&info, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
ok(info->cPolicyInfo == 0, "unexpected policy info %d\n",
|
||||||
|
info->cPolicyInfo);
|
||||||
|
LocalFree(info);
|
||||||
|
}
|
||||||
|
ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_POLICIES,
|
||||||
|
policiesWithAnyPolicy, sizeof(policiesWithAnyPolicy),
|
||||||
|
CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
ok(info->cPolicyInfo == 1, "unexpected policy info %d\n",
|
||||||
|
info->cPolicyInfo);
|
||||||
|
ok(!strcmp(info->rgPolicyInfo[0].pszPolicyIdentifier, oid_any_policy),
|
||||||
|
"unexpected policy id %s\n",
|
||||||
|
info->rgPolicyInfo[0].pszPolicyIdentifier);
|
||||||
|
ok(info->rgPolicyInfo[0].cPolicyQualifier == 0,
|
||||||
|
"unexpected policy qualifier count %d\n",
|
||||||
|
info->rgPolicyInfo[0].cPolicyQualifier);
|
||||||
|
LocalFree(info);
|
||||||
|
}
|
||||||
|
ret = pCryptDecodeObjectEx(dwEncoding, X509_CERT_POLICIES,
|
||||||
|
twoPolicies, sizeof(twoPolicies),
|
||||||
|
CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &size);
|
||||||
|
todo_wine
|
||||||
|
ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
|
||||||
|
if (ret)
|
||||||
|
{
|
||||||
|
ok(info->cPolicyInfo == 2, "unexpected policy info %d\n",
|
||||||
|
info->cPolicyInfo);
|
||||||
|
ok(!strcmp(info->rgPolicyInfo[0].pszPolicyIdentifier, oid_any_policy),
|
||||||
|
"unexpected policy id %s\n",
|
||||||
|
info->rgPolicyInfo[0].pszPolicyIdentifier);
|
||||||
|
ok(info->rgPolicyInfo[0].cPolicyQualifier == 0,
|
||||||
|
"unexpected policy qualifier count %d\n",
|
||||||
|
info->rgPolicyInfo[0].cPolicyQualifier);
|
||||||
|
ok(!strcmp(info->rgPolicyInfo[1].pszPolicyIdentifier, oid1),
|
||||||
|
"unexpected policy id %s\n",
|
||||||
|
info->rgPolicyInfo[1].pszPolicyIdentifier);
|
||||||
|
ok(info->rgPolicyInfo[1].cPolicyQualifier == 1,
|
||||||
|
"unexpected policy qualifier count %d\n",
|
||||||
|
info->rgPolicyInfo[1].cPolicyQualifier);
|
||||||
|
ok(!strcmp(
|
||||||
|
info->rgPolicyInfo[1].rgPolicyQualifier[0].pszPolicyQualifierId,
|
||||||
|
oid_user_notice), "unexpected policy qualifier id %s\n",
|
||||||
|
info->rgPolicyInfo[1].rgPolicyQualifier[0].pszPolicyQualifierId);
|
||||||
|
ok(info->rgPolicyInfo[1].rgPolicyQualifier[0].Qualifier.cbData ==
|
||||||
|
sizeof(noticeWithReference), "unexpected qualifier size %d\n",
|
||||||
|
info->rgPolicyInfo[1].rgPolicyQualifier[0].Qualifier.cbData);
|
||||||
|
ok(!memcmp(
|
||||||
|
info->rgPolicyInfo[1].rgPolicyQualifier[0].Qualifier.pbData,
|
||||||
|
noticeWithReference, sizeof(noticeWithReference)),
|
||||||
|
"unexpected qualifier value\n");
|
||||||
|
LocalFree(info);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Free *pInfo with HeapFree */
|
/* Free *pInfo with HeapFree */
|
||||||
static void testExportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO *pInfo)
|
static void testExportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO *pInfo)
|
||||||
{
|
{
|
||||||
|
@ -7425,6 +7569,8 @@ START_TEST(encode)
|
||||||
test_decodeNameConstraints(encodings[i]);
|
test_decodeNameConstraints(encodings[i]);
|
||||||
test_encodePolicyQualifierUserNotice(encodings[i]);
|
test_encodePolicyQualifierUserNotice(encodings[i]);
|
||||||
test_decodePolicyQualifierUserNotice(encodings[i]);
|
test_decodePolicyQualifierUserNotice(encodings[i]);
|
||||||
|
test_encodeCertPolicies(encodings[i]);
|
||||||
|
test_decodeCertPolicies(encodings[i]);
|
||||||
}
|
}
|
||||||
testPortPublicKeyInfo();
|
testPortPublicKeyInfo();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue