Juan Lang : crypt32: Fix encoding cert issuer/subject unique ids.

Alexandre Julliard julliard at winehq.org
Mon Nov 9 15:14:16 CST 2009


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Fri Nov  6 11:21:51 2009 -0800

crypt32: Fix encoding cert issuer/subject unique ids.

---

 dlls/crypt32/encode.c       |   38 +++++++++++++++++++-------------------
 dlls/crypt32/tests/encode.c |    4 ----
 2 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/dlls/crypt32/encode.c b/dlls/crypt32/encode.c
index 3cd2b1e..5639289 100644
--- a/dlls/crypt32/encode.c
+++ b/dlls/crypt32/encode.c
@@ -506,37 +506,37 @@ static BOOL WINAPI CRYPT_AsnEncodeCertInfo(DWORD dwCertEncodingType,
          { &info->SubjectPublicKeyInfo, CRYPT_AsnEncodePubKeyInfoNoNull, 0 },
          { 0 }
         };
-        struct AsnConstructedItem constructed[3] = { { 0 } };
-        DWORD cItem = 7, cConstructed = 0;
+        struct AsnConstructedItem constructed = { 0 };
+        struct AsnEncodeTagSwappedItem swapped[2] = { { 0 } };
+        DWORD cItem = 7, cSwapped = 0;
 
         if (info->IssuerUniqueId.cbData)
         {
-            constructed[cConstructed].tag = 1;
-            constructed[cConstructed].pvStructInfo = &info->IssuerUniqueId;
-            constructed[cConstructed].encodeFunc = CRYPT_AsnEncodeBits;
-            items[cItem].pvStructInfo = &constructed[cConstructed];
-            items[cItem].encodeFunc = CRYPT_AsnEncodeConstructed;
-            cConstructed++;
+            swapped[cSwapped].tag = ASN_CONTEXT | 1;
+            swapped[cSwapped].pvStructInfo = &info->IssuerUniqueId;
+            swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeBits;
+            items[cItem].pvStructInfo = &swapped[cSwapped];
+            items[cItem].encodeFunc = CRYPT_AsnEncodeSwapTag;
+            cSwapped++;
             cItem++;
         }
         if (info->SubjectUniqueId.cbData)
         {
-            constructed[cConstructed].tag = 2;
-            constructed[cConstructed].pvStructInfo = &info->SubjectUniqueId;
-            constructed[cConstructed].encodeFunc = CRYPT_AsnEncodeBits;
-            items[cItem].pvStructInfo = &constructed[cConstructed];
-            items[cItem].encodeFunc = CRYPT_AsnEncodeConstructed;
-            cConstructed++;
+            swapped[cSwapped].tag = ASN_CONTEXT | 2;
+            swapped[cSwapped].pvStructInfo = &info->SubjectUniqueId;
+            swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeBits;
+            items[cItem].pvStructInfo = &swapped[cSwapped];
+            items[cItem].encodeFunc = CRYPT_AsnEncodeSwapTag;
+            cSwapped++;
             cItem++;
         }
         if (info->cExtension)
         {
-            constructed[cConstructed].tag = 3;
-            constructed[cConstructed].pvStructInfo = &info->cExtension;
-            constructed[cConstructed].encodeFunc = CRYPT_AsnEncodeExtensions;
-            items[cItem].pvStructInfo = &constructed[cConstructed];
+            constructed.tag = 3;
+            constructed.pvStructInfo = &info->cExtension;
+            constructed.encodeFunc = CRYPT_AsnEncodeExtensions;
+            items[cItem].pvStructInfo = &constructed;
             items[cItem].encodeFunc = CRYPT_AsnEncodeConstructed;
-            cConstructed++;
             cItem++;
         }
 
diff --git a/dlls/crypt32/tests/encode.c b/dlls/crypt32/tests/encode.c
index 7e08cb3..1942a83 100644
--- a/dlls/crypt32/tests/encode.c
+++ b/dlls/crypt32/tests/encode.c
@@ -2979,11 +2979,9 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
     ok(ret, "CryptEncodeObjectEx failed: %08x\n", GetLastError());
     if (buf)
     {
-        todo_wine {
         ok(size == sizeof(v1CertWithIssuerUniqueId), "Wrong size %d\n", size);
         ok(!memcmp(buf, v1CertWithIssuerUniqueId, size),
          "Got unexpected value\n");
-        }
         LocalFree(buf);
     }
     /* Test v1 cert with an issuer name, a subject name, and a serial number */
@@ -3031,7 +3029,6 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
         ok(size == sizeof(v1CertWithSubjectIssuerSerialAndIssuerUniqueId) ||
          size == sizeof(v1CertWithSubjectIssuerSerialAndIssuerUniqueIdNoNull),
          "Wrong size %d\n", size);
-        todo_wine {
         if (size == sizeof(v1CertWithSubjectIssuerSerialAndIssuerUniqueId))
             ok(!memcmp(buf, v1CertWithSubjectIssuerSerialAndIssuerUniqueId,
              size), "unexpected value\n");
@@ -3040,7 +3037,6 @@ static void test_encodeCertToBeSigned(DWORD dwEncoding)
             ok(!memcmp(buf,
              v1CertWithSubjectIssuerSerialAndIssuerUniqueIdNoNull, size),
              "unexpected value\n");
-        }
         LocalFree(buf);
     }
     /* Remove the public key, and add a subject key identifier extension */




More information about the wine-cvs mailing list