Juan Lang : crypt32: Add tests for encoding/decoding CERT_POLICIES_INFO.

Alexandre Julliard julliard at winehq.org
Mon Nov 17 09:14:19 CST 2008


Module: wine
Branch: master
Commit: a90c26eb33290287e037a18b376ca9838b7d48d1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=a90c26eb33290287e037a18b376ca9838b7d48d1

Author: Juan Lang <juan.lang at gmail.com>
Date:   Fri Nov 14 15:00:30 2008 -0800

crypt32: Add tests for encoding/decoding CERT_POLICIES_INFO.

---

 dlls/crypt32/tests/encode.c |  146 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 146 insertions(+), 0 deletions(-)

diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index 4adba05..92bc0b4 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -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 */
 static void testExportPublicKey(HCRYPTPROV csp, PCERT_PUBLIC_KEY_INFO *pInfo)
 {
@@ -7425,6 +7569,8 @@ START_TEST(encode)
         test_decodeNameConstraints(encodings[i]);
         test_encodePolicyQualifierUserNotice(encodings[i]);
         test_decodePolicyQualifierUserNotice(encodings[i]);
+        test_encodeCertPolicies(encodings[i]);
+        test_decodeCertPolicies(encodings[i]);
     }
     testPortPublicKeyInfo();
 }




More information about the wine-cvs mailing list