Juan Lang : crypt32: Support the KeyId type of signer in CMSG_SIGNER_CERT_INFO_PARAM.

Alexandre Julliard julliard at winehq.org
Thu Aug 21 10:02:13 CDT 2008


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

Author: Juan Lang <juan.lang at gmail.com>
Date:   Wed Aug 20 12:02:46 2008 -0700

crypt32: Support the KeyId type of signer in CMSG_SIGNER_CERT_INFO_PARAM.

---

 dlls/crypt32/msg.c |   22 ++++++++++++++--------
 1 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/dlls/crypt32/msg.c b/dlls/crypt32/msg.c
index 0ec75af..22d740e 100644
--- a/dlls/crypt32/msg.c
+++ b/dlls/crypt32/msg.c
@@ -2174,7 +2174,7 @@ static BOOL CRYPT_CopyCMSSignerInfo(void *pvData, DWORD *pcbData,
 static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData,
  const CMSG_CMS_SIGNER_INFO *in)
 {
-    DWORD size = sizeof(CERT_INFO);
+    DWORD size = sizeof(CERT_INFO), rdnSize;
     BOOL ret;
 
     TRACE("(%p, %d, %p)\n", pvData, pvData ? *pcbData : 0, in);
@@ -2186,8 +2186,8 @@ static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData,
     }
     else
     {
-        FIXME("unimplemented for key id\n");
-        return FALSE;
+        rdnSize = CRYPT_SizeOfKeyIdAsIssuerAndSerial(&in->SignerId.KeyId);
+        size += rdnSize;
     }
     if (!pvData)
     {
@@ -2206,11 +2206,17 @@ static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData,
         CERT_INFO *out = (CERT_INFO *)pvData;
 
         memset(out, 0, sizeof(CERT_INFO));
-        CRYPT_CopyBlob(&out->Issuer,
-         &in->SignerId.IssuerSerialNumber.Issuer, &nextData);
-        CRYPT_CopyBlob(&out->SerialNumber,
-         &in->SignerId.IssuerSerialNumber.SerialNumber, &nextData);
-        ret = TRUE;
+        if (in->SignerId.dwIdChoice == CERT_ID_ISSUER_SERIAL_NUMBER)
+        {
+            CRYPT_CopyBlob(&out->Issuer,
+             &in->SignerId.IssuerSerialNumber.Issuer, &nextData);
+            CRYPT_CopyBlob(&out->SerialNumber,
+             &in->SignerId.IssuerSerialNumber.SerialNumber, &nextData);
+            ret = TRUE;
+        }
+        else
+            ret = CRYPT_CopyKeyIdAsIssuerAndSerial(&out->Issuer, &out->SerialNumber,
+             &in->SignerId.KeyId, rdnSize, &nextData);
     }
     TRACE("returning %d\n", ret);
     return ret;




More information about the wine-cvs mailing list