crypt32: Support CRYPT_DECODE_TO_BE_SIGNED_FLAG
Juan Lang
juan.lang at gmail.com
Mon Sep 10 18:03:45 CDT 2007
--Juan
-------------- next part --------------
From 95e0abc7bd58e532bef1363080b8071ddb634b67 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Mon, 10 Sep 2007 16:02:52 -0700
Subject: [PATCH] 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(D
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(D
__EXCEPT_PAGE_FAULT
{
SetLastError(STATUS_ACCESS_VIOLATION);
- ret = FALSE;
}
__ENDTRY
@@ -1026,28 +1029,32 @@ static BOOL WINAPI CRYPT_AsnDecodeCRL(DW
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(DW
__EXCEPT_PAGE_FAULT
{
SetLastError(STATUS_ACCESS_VIOLATION);
- ret = FALSE;
}
__ENDTRY
--
1.4.1
More information about the wine-patches
mailing list