Juan Lang : crypt32: Add tests for encoding/decoding cert policy mappings.
Alexandre Julliard
julliard at winehq.org
Mon Nov 9 15:14:16 CST 2009
Module: wine
Branch: master
Commit: fba863ddf004a5c735611d46805aa7f8b7446adc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=fba863ddf004a5c735611d46805aa7f8b7446adc
Author: Juan Lang <juan.lang at gmail.com>
Date: Fri Nov 6 11:33:52 2009 -0800
crypt32: Add tests for encoding/decoding cert policy mappings.
---
dlls/crypt32/tests/encode.c | 138 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 138 insertions(+), 0 deletions(-)
diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index 9cce74e..8c8f0ef 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -7425,6 +7425,142 @@ static void test_decodeCertPolicies(DWORD dwEncoding)
}
}
+static const BYTE policyMappingWithOneMapping[] = {
+0x30,0x0a,0x30,0x08,0x06,0x02,0x2a,0x03,0x06,0x02,0x53,0x04 };
+static const BYTE policyMappingWithTwoMappings[] = {
+0x30,0x14,0x30,0x08,0x06,0x02,0x2a,0x03,0x06,0x02,0x53,0x04,0x30,0x08,0x06,
+0x02,0x2b,0x04,0x06,0x02,0x55,0x06 };
+static const LPCSTR mappingOids[] = { X509_POLICY_MAPPINGS,
+ szOID_POLICY_MAPPINGS, szOID_LEGACY_POLICY_MAPPINGS };
+
+static void test_encodeCertPolicyMappings(DWORD dwEncoding)
+{
+ static char oid2[] = "2.3.4";
+ static char oid3[] = "1.3.4";
+ static char oid4[] = "2.5.6";
+ BOOL ret;
+ CERT_POLICY_MAPPINGS_INFO info = { 0 };
+ CERT_POLICY_MAPPING mapping[2];
+ LPBYTE buf;
+ DWORD size, i;
+
+ /* Each of the mapping OIDs is equivalent, so check with all of them */
+ for (i = 0; i < sizeof(mappingOids) / sizeof(mappingOids[0]); i++)
+ {
+ todo_wine {
+ memset(&info, 0, sizeof(info));
+ ret = pCryptEncodeObjectEx(dwEncoding, mappingOids[i], &info,
+ CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
+ ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ ok(size == sizeof(emptySequence), "unexpected size %d\n", size);
+ ok(!memcmp(buf, emptySequence, sizeof(emptySequence)),
+ "unexpected value\n");
+ LocalFree(buf);
+ }
+ mapping[0].pszIssuerDomainPolicy = NULL;
+ mapping[0].pszSubjectDomainPolicy = NULL;
+ info.cPolicyMapping = 1;
+ info.rgPolicyMapping = mapping;
+ SetLastError(0xdeadbeef);
+ ret = pCryptEncodeObjectEx(dwEncoding, mappingOids[i], &info,
+ CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
+ ok(!ret && GetLastError() == E_INVALIDARG,
+ "expected E_INVALIDARG, got %08x\n", GetLastError());
+ mapping[0].pszIssuerDomainPolicy = oid1;
+ mapping[0].pszSubjectDomainPolicy = oid2;
+ ret = pCryptEncodeObjectEx(dwEncoding, mappingOids[i], &info,
+ CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
+ ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ ok(size == sizeof(policyMappingWithOneMapping),
+ "unexpected size %d\n", size);
+ ok(!memcmp(buf, policyMappingWithOneMapping, size),
+ "unexpected value\n");
+ LocalFree(buf);
+ }
+ mapping[1].pszIssuerDomainPolicy = oid3;
+ mapping[1].pszSubjectDomainPolicy = oid4;
+ info.cPolicyMapping = 2;
+ ret = pCryptEncodeObjectEx(dwEncoding, mappingOids[i], &info,
+ CRYPT_ENCODE_ALLOC_FLAG, NULL, &buf, &size);
+ ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ ok(size == sizeof(policyMappingWithTwoMappings),
+ "unexpected size %d\n", size);
+ ok(!memcmp(buf, policyMappingWithTwoMappings, size),
+ "unexpected value\n");
+ LocalFree(buf);
+ }
+ }
+ }
+}
+
+static void test_decodeCertPolicyMappings(DWORD dwEncoding)
+{
+ DWORD size, i;
+ CERT_POLICY_MAPPINGS_INFO *info;
+ BOOL ret;
+
+ /* Each of the mapping OIDs is equivalent, so check with all of them */
+ for (i = 0; i < sizeof(mappingOids) / sizeof(mappingOids[0]); i++)
+ {
+ todo_wine {
+ ret = pCryptDecodeObjectEx(dwEncoding, mappingOids[i],
+ emptySequence, sizeof(emptySequence), CRYPT_DECODE_ALLOC_FLAG, NULL,
+ &info, &size);
+ ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ ok(info->cPolicyMapping == 0,
+ "expected 0 policy mappings, got %d\n", info->cPolicyMapping);
+ LocalFree(info);
+ }
+ ret = pCryptDecodeObjectEx(dwEncoding, mappingOids[i],
+ policyMappingWithOneMapping, sizeof(policyMappingWithOneMapping),
+ CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &size);
+ ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ ok(info->cPolicyMapping == 1,
+ "expected 1 policy mappings, got %d\n", info->cPolicyMapping);
+ ok(!strcmp(info->rgPolicyMapping[0].pszIssuerDomainPolicy, "1.2.3"),
+ "unexpected issuer policy %s\n",
+ info->rgPolicyMapping[0].pszIssuerDomainPolicy);
+ ok(!strcmp(info->rgPolicyMapping[0].pszSubjectDomainPolicy,
+ "2.3.4"), "unexpected subject policy %s\n",
+ info->rgPolicyMapping[0].pszSubjectDomainPolicy);
+ LocalFree(info);
+ }
+ ret = pCryptDecodeObjectEx(dwEncoding, mappingOids[i],
+ policyMappingWithTwoMappings, sizeof(policyMappingWithTwoMappings),
+ CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &size);
+ ok(ret, "CryptDecodeObjectEx failed: %08x\n", GetLastError());
+ if (ret)
+ {
+ ok(info->cPolicyMapping == 2,
+ "expected 2 policy mappings, got %d\n", info->cPolicyMapping);
+ ok(!strcmp(info->rgPolicyMapping[0].pszIssuerDomainPolicy, "1.2.3"),
+ "unexpected issuer policy %s\n",
+ info->rgPolicyMapping[0].pszIssuerDomainPolicy);
+ ok(!strcmp(info->rgPolicyMapping[0].pszSubjectDomainPolicy,
+ "2.3.4"), "unexpected subject policy %s\n",
+ info->rgPolicyMapping[0].pszSubjectDomainPolicy);
+ ok(!strcmp(info->rgPolicyMapping[1].pszIssuerDomainPolicy, "1.3.4"),
+ "unexpected issuer policy %s\n",
+ info->rgPolicyMapping[1].pszIssuerDomainPolicy);
+ ok(!strcmp(info->rgPolicyMapping[1].pszSubjectDomainPolicy,
+ "2.5.6"), "unexpected subject policy %s\n",
+ info->rgPolicyMapping[1].pszSubjectDomainPolicy);
+ LocalFree(info);
+ }
+ }
+ }
+}
+
/* Free *pInfo with HeapFree */
static void testExportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO *pInfo)
{
@@ -7695,6 +7831,8 @@ START_TEST(encode)
test_decodePolicyQualifierUserNotice(encodings[i]);
test_encodeCertPolicies(encodings[i]);
test_decodeCertPolicies(encodings[i]);
+ test_encodeCertPolicyMappings(encodings[i]);
+ test_decodeCertPolicyMappings(encodings[i]);
}
testPortPublicKeyInfo();
}
More information about the wine-cvs
mailing list