Juan Lang : crypt32: Support CRYPT_DECODE_TO_BE_SIGNED_FLAG.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Sep 11 07:28:46 CDT 2007
Module: wine
Branch: master
Commit: d7115ce33c7ffb393cd6853010dd8e63ba2db88a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d7115ce33c7ffb393cd6853010dd8e63ba2db88a
Author: Juan Lang <juan.lang at gmail.com>
Date: Mon Sep 10 16:02:52 2007 -0700
crypt32: Support CRYPT_DECODE_TO_BE_SIGNED_FLAG.
---
dlls/crypt32/decode.c | 62 ++++++++++++++++++++++++++----------------------
1 files changed, 34 insertions(+), 28 deletions(-)
diff --git a/dlls/crypt32/decode.c b/dlls/crypt32/decode.c
index 723873a..7349f5e 100644
--- a/dlls/crypt32/decode.c
+++ b/dlls/crypt32/decode.c
@@ -893,28 +893,32 @@ static BOOL WINAPI CRYPT_AsnDecodeCert(DWORD dwCertEncodingType,
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
{
- BOOL ret = TRUE;
+ BOOL ret = FALSE;
TRACE("%p, %d, %08x, %p, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
pDecodePara, pvStructInfo, *pcbStructInfo);
__TRY
{
- PCERT_SIGNED_CONTENT_INFO signedCert = NULL;
DWORD size = 0;
- /* First try to decode it as a signed cert. */
- ret = CRYPT_AsnDecodeCertSignedContent(dwCertEncodingType, X509_CERT,
- pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
- (BYTE *)&signedCert, &size);
- if (ret)
+ /* Unless told not to, first try to decode it as a signed cert. */
+ if (!(dwFlags & CRYPT_DECODE_TO_BE_SIGNED_FLAG))
{
- size = 0;
- ret = CRYPT_AsnDecodeCertInfo(dwCertEncodingType,
- X509_CERT_TO_BE_SIGNED, signedCert->ToBeSigned.pbData,
- signedCert->ToBeSigned.cbData, dwFlags, pDecodePara, pvStructInfo,
- pcbStructInfo);
- LocalFree(signedCert);
+ PCERT_SIGNED_CONTENT_INFO signedCert = NULL;
+
+ ret = CRYPT_AsnDecodeCertSignedContent(dwCertEncodingType,
+ X509_CERT, pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
+ (BYTE *)&signedCert, &size);
+ if (ret)
+ {
+ size = 0;
+ ret = CRYPT_AsnDecodeCertInfo(dwCertEncodingType,
+ X509_CERT_TO_BE_SIGNED, signedCert->ToBeSigned.pbData,
+ signedCert->ToBeSigned.cbData, dwFlags, pDecodePara,
+ pvStructInfo, pcbStructInfo);
+ LocalFree(signedCert);
+ }
}
/* Failing that, try it as an unsigned cert */
if (!ret)
@@ -928,7 +932,6 @@ static BOOL WINAPI CRYPT_AsnDecodeCert(DWORD dwCertEncodingType,
__EXCEPT_PAGE_FAULT
{
SetLastError(STATUS_ACCESS_VIOLATION);
- ret = FALSE;
}
__ENDTRY
@@ -1026,28 +1029,32 @@ static BOOL WINAPI CRYPT_AsnDecodeCRL(DWORD dwCertEncodingType,
LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags,
PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo)
{
- BOOL ret = TRUE;
+ BOOL ret = FALSE;
TRACE("%p, %d, %08x, %p, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
pDecodePara, pvStructInfo, *pcbStructInfo);
__TRY
{
- PCERT_SIGNED_CONTENT_INFO signedCrl = NULL;
DWORD size = 0;
- /* First try to decode it as a signed crl. */
- ret = CRYPT_AsnDecodeCertSignedContent(dwCertEncodingType, X509_CERT,
- pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
- (BYTE *)&signedCrl, &size);
- if (ret)
+ /* Unless told not to, first try to decode it as a signed crl. */
+ if (!(dwFlags & CRYPT_DECODE_TO_BE_SIGNED_FLAG))
{
- size = 0;
- ret = CRYPT_AsnDecodeCRLInfo(dwCertEncodingType,
- X509_CERT_CRL_TO_BE_SIGNED, signedCrl->ToBeSigned.pbData,
- signedCrl->ToBeSigned.cbData, dwFlags, pDecodePara,
- pvStructInfo, pcbStructInfo);
- LocalFree(signedCrl);
+ PCERT_SIGNED_CONTENT_INFO signedCrl = NULL;
+
+ ret = CRYPT_AsnDecodeCertSignedContent(dwCertEncodingType,
+ X509_CERT, pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
+ (BYTE *)&signedCrl, &size);
+ if (ret)
+ {
+ size = 0;
+ ret = CRYPT_AsnDecodeCRLInfo(dwCertEncodingType,
+ X509_CERT_CRL_TO_BE_SIGNED, signedCrl->ToBeSigned.pbData,
+ signedCrl->ToBeSigned.cbData, dwFlags, pDecodePara,
+ pvStructInfo, pcbStructInfo);
+ LocalFree(signedCrl);
+ }
}
/* Failing that, try it as an unsigned crl */
if (!ret)
@@ -1061,7 +1068,6 @@ static BOOL WINAPI CRYPT_AsnDecodeCRL(DWORD dwCertEncodingType,
__EXCEPT_PAGE_FAULT
{
SetLastError(STATUS_ACCESS_VIOLATION);
- ret = FALSE;
}
__ENDTRY
More information about the wine-cvs
mailing list