Module: wine Branch: master Commit: 1b7121e7ad2ec9087547797c5b37e50aa0528c14 URL: http://source.winehq.org/git/wine.git/?a=commit;h=1b7121e7ad2ec9087547797c5b...
Author: Juan Lang juan.lang@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;