mirror of
https://github.com/reactos/reactos.git
synced 2025-07-28 04:02:03 +00:00
sync crypt32 with wine 1.1.14
svn path=/trunk/; revision=39236
This commit is contained in:
parent
fe9f224169
commit
e09c7694fd
22 changed files with 660 additions and 374 deletions
|
@ -27,6 +27,7 @@
|
|||
#include "winnls.h"
|
||||
#include "rpc.h"
|
||||
#include "wine/debug.h"
|
||||
#include "wine/unicode.h"
|
||||
#include "crypt32_private.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
|
||||
|
@ -83,7 +84,7 @@ PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
|
|||
|
||||
ret = CryptDecodeObjectEx(dwCertEncodingType, X509_CERT_TO_BE_SIGNED,
|
||||
pbCertEncoded, cbCertEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
|
||||
(BYTE *)&certInfo, &size);
|
||||
&certInfo, &size);
|
||||
if (ret)
|
||||
{
|
||||
BYTE *data = NULL;
|
||||
|
@ -107,20 +108,24 @@ PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType,
|
|||
}
|
||||
|
||||
end:
|
||||
return (PCCERT_CONTEXT)cert;
|
||||
return cert;
|
||||
}
|
||||
|
||||
PCCERT_CONTEXT WINAPI CertDuplicateCertificateContext(
|
||||
PCCERT_CONTEXT pCertContext)
|
||||
{
|
||||
TRACE("(%p)\n", pCertContext);
|
||||
|
||||
if (!pCertContext)
|
||||
return NULL;
|
||||
|
||||
Context_AddRef((void *)pCertContext, sizeof(CERT_CONTEXT));
|
||||
return pCertContext;
|
||||
}
|
||||
|
||||
static void CertDataContext_Free(void *context)
|
||||
{
|
||||
PCERT_CONTEXT certContext = (PCERT_CONTEXT)context;
|
||||
PCERT_CONTEXT certContext = context;
|
||||
|
||||
CryptMemFree(certContext->pbCertEncoded);
|
||||
LocalFree(certContext->pCertInfo);
|
||||
|
@ -140,7 +145,7 @@ DWORD WINAPI CertEnumCertificateContextProperties(PCCERT_CONTEXT pCertContext,
|
|||
DWORD dwPropId)
|
||||
{
|
||||
PCONTEXT_PROPERTY_LIST properties = Context_GetProperties(
|
||||
(void *)pCertContext, sizeof(CERT_CONTEXT));
|
||||
pCertContext, sizeof(CERT_CONTEXT));
|
||||
DWORD ret;
|
||||
|
||||
TRACE("(%p, %d)\n", pCertContext, dwPropId);
|
||||
|
@ -191,7 +196,7 @@ static BOOL CertContext_CopyParam(void *pvData, DWORD *pcbData, const void *pb,
|
|||
static BOOL CertContext_GetProperty(void *context, DWORD dwPropId,
|
||||
void *pvData, DWORD *pcbData)
|
||||
{
|
||||
PCCERT_CONTEXT pCertContext = (PCCERT_CONTEXT)context;
|
||||
PCCERT_CONTEXT pCertContext = context;
|
||||
PCONTEXT_PROPERTY_LIST properties =
|
||||
Context_GetProperties(context, sizeof(CERT_CONTEXT));
|
||||
BOOL ret;
|
||||
|
@ -349,7 +354,7 @@ BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext,
|
|||
ret = CertContext_GetProperty((void *)pCertContext, dwPropId, pvData,
|
||||
pcbData);
|
||||
if (ret && pvData)
|
||||
CRYPT_FixKeyProvInfoPointers((PCRYPT_KEY_PROV_INFO)pvData);
|
||||
CRYPT_FixKeyProvInfoPointers(pvData);
|
||||
break;
|
||||
default:
|
||||
ret = CertContext_GetProperty((void *)pCertContext, dwPropId, pvData,
|
||||
|
@ -718,6 +723,218 @@ BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL key_prov_info_matches_cert(PCCERT_CONTEXT pCert,
|
||||
const CRYPT_KEY_PROV_INFO *keyProvInfo)
|
||||
{
|
||||
HCRYPTPROV csp;
|
||||
BOOL matches = FALSE;
|
||||
|
||||
if (CryptAcquireContextW(&csp, keyProvInfo->pwszContainerName,
|
||||
keyProvInfo->pwszProvName, keyProvInfo->dwProvType, keyProvInfo->dwFlags))
|
||||
{
|
||||
DWORD size;
|
||||
|
||||
/* Need to sign something to verify the sig. What to sign? Why not
|
||||
* the certificate itself?
|
||||
*/
|
||||
if (CryptSignAndEncodeCertificate(csp, AT_SIGNATURE,
|
||||
pCert->dwCertEncodingType, X509_CERT_TO_BE_SIGNED, pCert->pCertInfo,
|
||||
&pCert->pCertInfo->SignatureAlgorithm, NULL, NULL, &size))
|
||||
{
|
||||
BYTE *certEncoded = CryptMemAlloc(size);
|
||||
|
||||
if (certEncoded)
|
||||
{
|
||||
if (CryptSignAndEncodeCertificate(csp, AT_SIGNATURE,
|
||||
pCert->dwCertEncodingType, X509_CERT_TO_BE_SIGNED,
|
||||
pCert->pCertInfo, &pCert->pCertInfo->SignatureAlgorithm,
|
||||
NULL, certEncoded, &size))
|
||||
{
|
||||
if (size == pCert->cbCertEncoded &&
|
||||
!memcmp(certEncoded, pCert->pbCertEncoded, size))
|
||||
matches = TRUE;
|
||||
}
|
||||
CryptMemFree(certEncoded);
|
||||
}
|
||||
}
|
||||
CryptReleaseContext(csp, 0);
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
|
||||
static BOOL container_matches_cert(PCCERT_CONTEXT pCert, LPCSTR container,
|
||||
CRYPT_KEY_PROV_INFO *keyProvInfo)
|
||||
{
|
||||
CRYPT_KEY_PROV_INFO copy;
|
||||
WCHAR containerW[MAX_PATH];
|
||||
BOOL matches = FALSE;
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, container, -1,
|
||||
containerW, sizeof(containerW) / sizeof(containerW[0]));
|
||||
/* We make a copy of the CRYPT_KEY_PROV_INFO because the caller expects
|
||||
* keyProvInfo->pwszContainerName to be NULL or a heap-allocated container
|
||||
* name.
|
||||
*/
|
||||
memcpy(©, keyProvInfo, sizeof(copy));
|
||||
copy.pwszContainerName = containerW;
|
||||
matches = key_prov_info_matches_cert(pCert, ©);
|
||||
if (matches)
|
||||
{
|
||||
keyProvInfo->pwszContainerName =
|
||||
CryptMemAlloc((strlenW(containerW) + 1) * sizeof(WCHAR));
|
||||
if (keyProvInfo->pwszContainerName)
|
||||
{
|
||||
strcpyW(keyProvInfo->pwszContainerName, containerW);
|
||||
keyProvInfo->dwKeySpec = AT_SIGNATURE;
|
||||
}
|
||||
else
|
||||
matches = FALSE;
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
|
||||
/* Searches the provider named keyProvInfo.pwszProvName for a container whose
|
||||
* private key matches pCert's public key. Upon success, updates keyProvInfo
|
||||
* with the matching container's info (free keyProvInfo.pwszContainerName upon
|
||||
* success.)
|
||||
* Returns TRUE if found, FALSE if not.
|
||||
*/
|
||||
static BOOL find_key_prov_info_in_provider(PCCERT_CONTEXT pCert,
|
||||
CRYPT_KEY_PROV_INFO *keyProvInfo)
|
||||
{
|
||||
HCRYPTPROV defProvider;
|
||||
BOOL ret, found = FALSE;
|
||||
char containerA[MAX_PATH];
|
||||
|
||||
assert(keyProvInfo->pwszContainerName == NULL);
|
||||
if ((ret = CryptAcquireContextW(&defProvider, NULL,
|
||||
keyProvInfo->pwszProvName, keyProvInfo->dwProvType,
|
||||
keyProvInfo->dwFlags | CRYPT_VERIFYCONTEXT)))
|
||||
{
|
||||
DWORD enumFlags = keyProvInfo->dwFlags | CRYPT_FIRST;
|
||||
|
||||
while (ret && !found)
|
||||
{
|
||||
DWORD size = sizeof(containerA);
|
||||
|
||||
ret = CryptGetProvParam(defProvider, PP_ENUMCONTAINERS,
|
||||
(BYTE *)containerA, &size, enumFlags);
|
||||
if (ret)
|
||||
found = container_matches_cert(pCert, containerA, keyProvInfo);
|
||||
if (enumFlags & CRYPT_FIRST)
|
||||
{
|
||||
enumFlags &= ~CRYPT_FIRST;
|
||||
enumFlags |= CRYPT_NEXT;
|
||||
}
|
||||
}
|
||||
CryptReleaseContext(defProvider, 0);
|
||||
}
|
||||
return found;
|
||||
}
|
||||
|
||||
static BOOL find_matching_provider(PCCERT_CONTEXT pCert, DWORD dwFlags)
|
||||
{
|
||||
BOOL found = FALSE, ret = TRUE;
|
||||
DWORD index = 0, cbProvName = 0;
|
||||
CRYPT_KEY_PROV_INFO keyProvInfo;
|
||||
|
||||
TRACE("(%p, %08x)\n", pCert, dwFlags);
|
||||
|
||||
memset(&keyProvInfo, 0, sizeof(keyProvInfo));
|
||||
while (ret && !found)
|
||||
{
|
||||
DWORD size = 0;
|
||||
|
||||
ret = CryptEnumProvidersW(index, NULL, 0, &keyProvInfo.dwProvType,
|
||||
NULL, &size);
|
||||
if (ret)
|
||||
{
|
||||
if (size <= cbProvName)
|
||||
ret = CryptEnumProvidersW(index, NULL, 0,
|
||||
&keyProvInfo.dwProvType, keyProvInfo.pwszProvName, &size);
|
||||
else
|
||||
{
|
||||
CryptMemFree(keyProvInfo.pwszProvName);
|
||||
keyProvInfo.pwszProvName = CryptMemAlloc(size);
|
||||
if (keyProvInfo.pwszProvName)
|
||||
{
|
||||
cbProvName = size;
|
||||
ret = CryptEnumProvidersW(index, NULL, 0,
|
||||
&keyProvInfo.dwProvType, keyProvInfo.pwszProvName, &size);
|
||||
if (ret)
|
||||
{
|
||||
if (dwFlags & CRYPT_FIND_SILENT_KEYSET_FLAG)
|
||||
keyProvInfo.dwFlags |= CRYPT_SILENT;
|
||||
if (dwFlags & CRYPT_FIND_USER_KEYSET_FLAG ||
|
||||
!(dwFlags & (CRYPT_FIND_USER_KEYSET_FLAG |
|
||||
CRYPT_FIND_MACHINE_KEYSET_FLAG)))
|
||||
{
|
||||
keyProvInfo.dwFlags |= CRYPT_USER_KEYSET;
|
||||
found = find_key_prov_info_in_provider(pCert,
|
||||
&keyProvInfo);
|
||||
}
|
||||
if (!found)
|
||||
{
|
||||
if (dwFlags & CRYPT_FIND_MACHINE_KEYSET_FLAG ||
|
||||
!(dwFlags & (CRYPT_FIND_USER_KEYSET_FLAG |
|
||||
CRYPT_FIND_MACHINE_KEYSET_FLAG)))
|
||||
{
|
||||
keyProvInfo.dwFlags &= ~CRYPT_USER_KEYSET;
|
||||
keyProvInfo.dwFlags |= CRYPT_MACHINE_KEYSET;
|
||||
found = find_key_prov_info_in_provider(pCert,
|
||||
&keyProvInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = FALSE;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
if (found)
|
||||
CertSetCertificateContextProperty(pCert, CERT_KEY_PROV_INFO_PROP_ID,
|
||||
0, &keyProvInfo);
|
||||
CryptMemFree(keyProvInfo.pwszProvName);
|
||||
CryptMemFree(keyProvInfo.pwszContainerName);
|
||||
return found;
|
||||
}
|
||||
|
||||
static BOOL cert_prov_info_matches_cert(PCCERT_CONTEXT pCert)
|
||||
{
|
||||
BOOL matches = FALSE;
|
||||
DWORD size;
|
||||
|
||||
if (CertGetCertificateContextProperty(pCert, CERT_KEY_PROV_INFO_PROP_ID,
|
||||
NULL, &size))
|
||||
{
|
||||
CRYPT_KEY_PROV_INFO *keyProvInfo = CryptMemAlloc(size);
|
||||
|
||||
if (keyProvInfo)
|
||||
{
|
||||
if (CertGetCertificateContextProperty(pCert,
|
||||
CERT_KEY_PROV_INFO_PROP_ID, keyProvInfo, &size))
|
||||
matches = key_prov_info_matches_cert(pCert, keyProvInfo);
|
||||
CryptMemFree(keyProvInfo);
|
||||
}
|
||||
}
|
||||
return matches;
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,
|
||||
DWORD dwFlags, void *pvReserved)
|
||||
{
|
||||
BOOL matches = FALSE;
|
||||
|
||||
TRACE("(%p, %08x, %p)\n", pCert, dwFlags, pvReserved);
|
||||
|
||||
matches = cert_prov_info_matches_cert(pCert);
|
||||
if (!matches)
|
||||
matches = find_matching_provider(pCert, dwFlags);
|
||||
return matches;
|
||||
}
|
||||
|
||||
BOOL WINAPI CertCompareCertificate(DWORD dwCertEncodingType,
|
||||
PCERT_INFO pCertId1, PCERT_INFO pCertId2)
|
||||
{
|
||||
|
@ -920,7 +1137,7 @@ static BOOL compare_cert_by_md5_hash(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
|||
CERT_MD5_HASH_PROP_ID, hash, &size);
|
||||
if (ret)
|
||||
{
|
||||
const CRYPT_HASH_BLOB *pHash = (const CRYPT_HASH_BLOB *)pvPara;
|
||||
const CRYPT_HASH_BLOB *pHash = pvPara;
|
||||
|
||||
if (size == pHash->cbData)
|
||||
ret = !memcmp(pHash->pbData, hash, size);
|
||||
|
@ -941,7 +1158,7 @@ static BOOL compare_cert_by_sha1_hash(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
|||
CERT_SHA1_HASH_PROP_ID, hash, &size);
|
||||
if (ret)
|
||||
{
|
||||
const CRYPT_HASH_BLOB *pHash = (const CRYPT_HASH_BLOB *)pvPara;
|
||||
const CRYPT_HASH_BLOB *pHash = pvPara;
|
||||
|
||||
if (size == pHash->cbData)
|
||||
ret = !memcmp(pHash->pbData, hash, size);
|
||||
|
@ -966,6 +1183,17 @@ static BOOL compare_cert_by_name(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static BOOL compare_cert_by_public_key(PCCERT_CONTEXT pCertContext,
|
||||
DWORD dwType, DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
CERT_PUBLIC_KEY_INFO *publicKey = (CERT_PUBLIC_KEY_INFO *)pvPara;
|
||||
BOOL ret;
|
||||
|
||||
ret = CertComparePublicKeyInfo(pCertContext->dwCertEncodingType,
|
||||
&pCertContext->pCertInfo->SubjectPublicKeyInfo, publicKey);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static BOOL compare_cert_by_subject_cert(PCCERT_CONTEXT pCertContext,
|
||||
DWORD dwType, DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
|
@ -1043,7 +1271,7 @@ static BOOL compare_cert_by_issuer(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
|||
DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
PCCERT_CONTEXT subject = (PCCERT_CONTEXT)pvPara;
|
||||
PCCERT_CONTEXT subject = pvPara;
|
||||
PCERT_EXTENSION ext;
|
||||
DWORD size;
|
||||
|
||||
|
@ -1146,7 +1374,7 @@ static BOOL compare_cert_by_issuer(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
|||
static BOOL compare_existing_cert(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
||||
DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
PCCERT_CONTEXT toCompare = (PCCERT_CONTEXT)pvPara;
|
||||
PCCERT_CONTEXT toCompare = pvPara;
|
||||
return CertCompareCertificate(pCertContext->dwCertEncodingType,
|
||||
pCertContext->pCertInfo, toCompare->pCertInfo);
|
||||
}
|
||||
|
@ -1154,7 +1382,7 @@ static BOOL compare_existing_cert(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
|||
static BOOL compare_cert_by_signature_hash(PCCERT_CONTEXT pCertContext, DWORD dwType,
|
||||
DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
const CRYPT_HASH_BLOB *hash = (const CRYPT_HASH_BLOB *)pvPara;
|
||||
const CRYPT_HASH_BLOB *hash = pvPara;
|
||||
DWORD size = 0;
|
||||
BOOL ret;
|
||||
|
||||
|
@ -1201,6 +1429,9 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
|
|||
case CERT_COMPARE_NAME:
|
||||
compare = compare_cert_by_name;
|
||||
break;
|
||||
case CERT_COMPARE_PUBLIC_KEY:
|
||||
compare = compare_cert_by_public_key;
|
||||
break;
|
||||
case CERT_COMPARE_SUBJECT_CERT:
|
||||
compare = compare_cert_by_subject_cert;
|
||||
break;
|
||||
|
@ -1586,7 +1817,7 @@ BOOL WINAPI CryptHashToBeSigned(HCRYPTPROV_LEGACY hCryptProv,
|
|||
pbEncoded, cbEncoded, pbComputedHash, *pcbComputedHash);
|
||||
|
||||
ret = CryptDecodeObjectEx(dwCertEncodingType, X509_CERT,
|
||||
pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL, (void *)&info, &size);
|
||||
pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &size);
|
||||
if (ret)
|
||||
{
|
||||
PCCRYPT_OID_INFO oidInfo;
|
||||
|
@ -1808,7 +2039,7 @@ BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
|
|||
{
|
||||
case CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB:
|
||||
{
|
||||
PCRYPT_DATA_BLOB blob = (PCRYPT_DATA_BLOB)pvSubject;
|
||||
PCRYPT_DATA_BLOB blob = pvSubject;
|
||||
|
||||
subjectBlob.pbData = blob->pbData;
|
||||
subjectBlob.cbData = blob->cbData;
|
||||
|
@ -1816,7 +2047,7 @@ BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
|
|||
}
|
||||
case CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT:
|
||||
{
|
||||
PCERT_CONTEXT context = (PCERT_CONTEXT)pvSubject;
|
||||
PCERT_CONTEXT context = pvSubject;
|
||||
|
||||
subjectBlob.pbData = context->pbCertEncoded;
|
||||
subjectBlob.cbData = context->cbCertEncoded;
|
||||
|
@ -1824,7 +2055,7 @@ BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
|
|||
}
|
||||
case CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL:
|
||||
{
|
||||
PCRL_CONTEXT context = (PCRL_CONTEXT)pvSubject;
|
||||
PCRL_CONTEXT context = pvSubject;
|
||||
|
||||
subjectBlob.pbData = context->pbCrlEncoded;
|
||||
subjectBlob.cbData = context->cbCrlEncoded;
|
||||
|
@ -1843,14 +2074,14 @@ BOOL WINAPI CryptVerifyCertificateSignatureEx(HCRYPTPROV_LEGACY hCryptProv,
|
|||
ret = CryptDecodeObjectEx(dwCertEncodingType, X509_CERT,
|
||||
subjectBlob.pbData, subjectBlob.cbData,
|
||||
CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG, NULL,
|
||||
(BYTE *)&signedCert, &size);
|
||||
&signedCert, &size);
|
||||
if (ret)
|
||||
{
|
||||
switch (dwIssuerType)
|
||||
{
|
||||
case CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY:
|
||||
ret = CRYPT_VerifyCertSignatureFromPublicKeyInfo(hCryptProv,
|
||||
dwCertEncodingType, (PCERT_PUBLIC_KEY_INFO)pvIssuer,
|
||||
dwCertEncodingType, pvIssuer,
|
||||
signedCert);
|
||||
break;
|
||||
case CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT:
|
||||
|
@ -2458,7 +2689,7 @@ static PCCERT_CONTEXT CRYPT_CreateSignedCert(const CRYPT_DER_BLOB *blob,
|
|||
signedInfo.Signature.cUnusedBits = 0;
|
||||
ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT,
|
||||
&signedInfo, CRYPT_ENCODE_ALLOC_FLAG, NULL,
|
||||
(BYTE *)&encodedSignedCert, &encodedSignedCertSize);
|
||||
&encodedSignedCert, &encodedSignedCertSize);
|
||||
if (ret)
|
||||
{
|
||||
context = CertCreateCertificateContext(X509_ASN_ENCODING,
|
||||
|
@ -2687,7 +2918,7 @@ PCCERT_CONTEXT WINAPI CertCreateSelfSignCertificate(HCRYPTPROV_OR_NCRYPT_KEY_HAN
|
|||
CRYPT_MakeCertInfo(&info, &serialBlob, pSubjectIssuerBlob,
|
||||
pSignatureAlgorithm, pStartTime, pEndTime, pubKey, pExtensions);
|
||||
ret = CryptEncodeObjectEx(X509_ASN_ENCODING, X509_CERT_TO_BE_SIGNED,
|
||||
&info, CRYPT_ENCODE_ALLOC_FLAG, NULL, (BYTE *)&blob.pbData,
|
||||
&info, CRYPT_ENCODE_ALLOC_FLAG, NULL, &blob.pbData,
|
||||
&blob.cbData);
|
||||
if (ret)
|
||||
{
|
||||
|
|
|
@ -144,7 +144,7 @@ HCERTCHAINENGINE CRYPT_CreateChainEngine(HCERTSTORE root,
|
|||
else
|
||||
engine->CycleDetectionModulus = DEFAULT_CYCLE_MODULUS;
|
||||
}
|
||||
return (HCERTCHAINENGINE)engine;
|
||||
return engine;
|
||||
}
|
||||
|
||||
BOOL WINAPI CertCreateCertificateChainEngine(PCERT_CHAIN_ENGINE_CONFIG pConfig,
|
||||
|
@ -383,7 +383,7 @@ static BOOL CRYPT_DecodeBasicConstraints(PCCERT_CONTEXT cert,
|
|||
|
||||
ret = CryptDecodeObjectEx(X509_ASN_ENCODING, szOID_BASIC_CONSTRAINTS,
|
||||
ext->Value.pbData, ext->Value.cbData, CRYPT_DECODE_ALLOC_FLAG,
|
||||
NULL, (LPBYTE)&info, &size);
|
||||
NULL, &info, &size);
|
||||
if (ret)
|
||||
{
|
||||
if (info->SubjectType.cbData == 1)
|
||||
|
|
|
@ -42,7 +42,7 @@ typedef struct _WINE_COLLECTIONSTORE
|
|||
|
||||
static void WINAPI CRYPT_CollectionCloseStore(HCERTSTORE store, DWORD dwFlags)
|
||||
{
|
||||
PWINE_COLLECTIONSTORE cs = (PWINE_COLLECTIONSTORE)store;
|
||||
PWINE_COLLECTIONSTORE cs = store;
|
||||
PWINE_STORE_LIST_ENTRY entry, next;
|
||||
|
||||
TRACE("(%p, %08x)\n", store, dwFlags);
|
||||
|
@ -51,12 +51,12 @@ static void WINAPI CRYPT_CollectionCloseStore(HCERTSTORE store, DWORD dwFlags)
|
|||
entry)
|
||||
{
|
||||
TRACE("closing %p\n", entry);
|
||||
CertCloseStore((HCERTSTORE)entry->store, dwFlags);
|
||||
CertCloseStore(entry->store, dwFlags);
|
||||
CryptMemFree(entry);
|
||||
}
|
||||
cs->cs.DebugInfo->Spare[0] = 0;
|
||||
DeleteCriticalSection(&cs->cs);
|
||||
CRYPT_FreeStore((PWINECRYPT_CERTSTORE)store);
|
||||
CRYPT_FreeStore(store);
|
||||
}
|
||||
|
||||
static void *CRYPT_CollectionCreateContextFromChild(PWINE_COLLECTIONSTORE store,
|
||||
|
@ -95,7 +95,7 @@ static BOOL CRYPT_CollectionAddContext(PWINE_COLLECTIONSTORE store,
|
|||
contextFuncs = (PCONTEXT_FUNCS)((LPBYTE)storeEntry->store +
|
||||
contextFuncsOffset);
|
||||
ret = contextFuncs->addContext(storeEntry->store, context,
|
||||
existingLinked, childContext);
|
||||
existingLinked, (const void **)&childContext);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -205,7 +205,7 @@ static BOOL CRYPT_CollectionAddCert(PWINECRYPT_CERTSTORE store, void *cert,
|
|||
context->hCertStore = store;
|
||||
*ppStoreContext = context;
|
||||
}
|
||||
CertFreeCertificateContext((PCCERT_CONTEXT)childContext);
|
||||
CertFreeCertificateContext(childContext);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -258,7 +258,7 @@ static BOOL CRYPT_CollectionDeleteCert(PWINECRYPT_CERTSTORE store,
|
|||
|
||||
TRACE("(%p, %p)\n", store, pCertContext);
|
||||
|
||||
ret = CertDeleteCertificateFromStore((PCCERT_CONTEXT)
|
||||
ret = CertDeleteCertificateFromStore(
|
||||
Context_GetLinkedContext(pCertContext, sizeof(CERT_CONTEXT)));
|
||||
return ret;
|
||||
}
|
||||
|
@ -284,7 +284,7 @@ static BOOL CRYPT_CollectionAddCRL(PWINECRYPT_CERTSTORE store, void *crl,
|
|||
context->hCertStore = store;
|
||||
*ppStoreContext = context;
|
||||
}
|
||||
CertFreeCRLContext((PCCRL_CONTEXT)childContext);
|
||||
CertFreeCRLContext(childContext);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -336,7 +336,7 @@ static BOOL CRYPT_CollectionDeleteCRL(PWINECRYPT_CERTSTORE store,
|
|||
|
||||
TRACE("(%p, %p)\n", store, pCrlContext);
|
||||
|
||||
ret = CertDeleteCRLFromStore((PCCRL_CONTEXT)
|
||||
ret = CertDeleteCRLFromStore(
|
||||
Context_GetLinkedContext(pCrlContext, sizeof(CRL_CONTEXT)));
|
||||
return ret;
|
||||
}
|
||||
|
@ -362,7 +362,7 @@ static BOOL CRYPT_CollectionAddCTL(PWINECRYPT_CERTSTORE store, void *ctl,
|
|||
context->hCertStore = store;
|
||||
*ppStoreContext = context;
|
||||
}
|
||||
CertFreeCTLContext((PCCTL_CONTEXT)childContext);
|
||||
CertFreeCTLContext(childContext);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -414,7 +414,7 @@ static BOOL CRYPT_CollectionDeleteCTL(PWINECRYPT_CERTSTORE store,
|
|||
|
||||
TRACE("(%p, %p)\n", store, pCtlContext);
|
||||
|
||||
ret = CertDeleteCTLFromStore((PCCTL_CONTEXT)
|
||||
ret = CertDeleteCTLFromStore(
|
||||
Context_GetLinkedContext(pCtlContext, sizeof(CTL_CONTEXT)));
|
||||
return ret;
|
||||
}
|
||||
|
@ -457,8 +457,8 @@ PWINECRYPT_CERTSTORE CRYPT_CollectionOpenStore(HCRYPTPROV hCryptProv,
|
|||
BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
|
||||
HCERTSTORE hSiblingStore, DWORD dwUpdateFlags, DWORD dwPriority)
|
||||
{
|
||||
PWINE_COLLECTIONSTORE collection = (PWINE_COLLECTIONSTORE)hCollectionStore;
|
||||
WINECRYPT_CERTSTORE *sibling = (WINECRYPT_CERTSTORE *)hSiblingStore;
|
||||
PWINE_COLLECTIONSTORE collection = hCollectionStore;
|
||||
WINECRYPT_CERTSTORE *sibling = hSiblingStore;
|
||||
PWINE_STORE_LIST_ENTRY entry;
|
||||
BOOL ret;
|
||||
|
||||
|
@ -525,8 +525,8 @@ BOOL WINAPI CertAddStoreToCollection(HCERTSTORE hCollectionStore,
|
|||
void WINAPI CertRemoveStoreFromCollection(HCERTSTORE hCollectionStore,
|
||||
HCERTSTORE hSiblingStore)
|
||||
{
|
||||
PWINE_COLLECTIONSTORE collection = (PWINE_COLLECTIONSTORE)hCollectionStore;
|
||||
WINECRYPT_CERTSTORE *sibling = (WINECRYPT_CERTSTORE *)hSiblingStore;
|
||||
PWINE_COLLECTIONSTORE collection = hCollectionStore;
|
||||
WINECRYPT_CERTSTORE *sibling = hSiblingStore;
|
||||
PWINE_STORE_LIST_ENTRY store, next;
|
||||
|
||||
TRACE("(%p, %p)\n", hCollectionStore, hSiblingStore);
|
||||
|
|
|
@ -171,8 +171,8 @@ void Context_CopyProperties(const void *to, const void *from,
|
|||
{
|
||||
PCONTEXT_PROPERTY_LIST toProperties, fromProperties;
|
||||
|
||||
toProperties = Context_GetProperties((void *)to, contextSize);
|
||||
fromProperties = Context_GetProperties((void *)from, contextSize);
|
||||
toProperties = Context_GetProperties(to, contextSize);
|
||||
fromProperties = Context_GetProperties(from, contextSize);
|
||||
assert(toProperties && fromProperties);
|
||||
ContextPropertyList_Copy(toProperties, fromProperties);
|
||||
}
|
||||
|
|
|
@ -45,7 +45,7 @@ PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType,
|
|||
}
|
||||
ret = CryptDecodeObjectEx(dwCertEncodingType, X509_CERT_CRL_TO_BE_SIGNED,
|
||||
pbCrlEncoded, cbCrlEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
|
||||
(BYTE *)&crlInfo, &size);
|
||||
&crlInfo, &size);
|
||||
if (ret)
|
||||
{
|
||||
BYTE *data = NULL;
|
||||
|
@ -69,7 +69,7 @@ PCCRL_CONTEXT WINAPI CertCreateCRLContext(DWORD dwCertEncodingType,
|
|||
}
|
||||
|
||||
end:
|
||||
return (PCCRL_CONTEXT)crl;
|
||||
return crl;
|
||||
}
|
||||
|
||||
BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore,
|
||||
|
@ -110,7 +110,7 @@ static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType,
|
|||
|
||||
if (pvPara)
|
||||
{
|
||||
PCCERT_CONTEXT issuer = (PCCERT_CONTEXT)pvPara;
|
||||
PCCERT_CONTEXT issuer = pvPara;
|
||||
|
||||
ret = CertCompareCertificateName(issuer->dwCertEncodingType,
|
||||
&issuer->pCertInfo->Issuer, &pCrlContext->pCrlInfo->Issuer);
|
||||
|
@ -127,7 +127,7 @@ static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType,
|
|||
|
||||
if (pvPara)
|
||||
{
|
||||
PCCRL_CONTEXT crl = (PCCRL_CONTEXT)pvPara;
|
||||
PCCRL_CONTEXT crl = pvPara;
|
||||
|
||||
ret = CertCompareCertificateName(pCrlContext->dwCertEncodingType,
|
||||
&pCrlContext->pCrlInfo->Issuer, &crl->pCrlInfo->Issuer);
|
||||
|
@ -234,7 +234,7 @@ PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext)
|
|||
|
||||
static void CrlDataContext_Free(void *context)
|
||||
{
|
||||
PCRL_CONTEXT crlContext = (PCRL_CONTEXT)context;
|
||||
PCRL_CONTEXT crlContext = context;
|
||||
|
||||
CryptMemFree(crlContext->pbCrlEncoded);
|
||||
LocalFree(crlContext->pCrlInfo);
|
||||
|
@ -254,7 +254,7 @@ DWORD WINAPI CertEnumCRLContextProperties(PCCRL_CONTEXT pCRLContext,
|
|||
DWORD dwPropId)
|
||||
{
|
||||
PCONTEXT_PROPERTY_LIST properties = Context_GetProperties(
|
||||
(void *)pCRLContext, sizeof(CRL_CONTEXT));
|
||||
pCRLContext, sizeof(CRL_CONTEXT));
|
||||
DWORD ret;
|
||||
|
||||
TRACE("(%p, %d)\n", pCRLContext, dwPropId);
|
||||
|
@ -428,7 +428,7 @@ static BOOL CRLContext_SetProperty(PCCRL_CONTEXT context, DWORD dwPropId,
|
|||
}
|
||||
case CERT_DATE_STAMP_PROP_ID:
|
||||
ret = ContextPropertyList_SetProperty(properties, dwPropId,
|
||||
(const BYTE *)pvData, sizeof(FILETIME));
|
||||
pvData, sizeof(FILETIME));
|
||||
break;
|
||||
default:
|
||||
FIXME("%d: stub\n", dwPropId);
|
||||
|
|
|
@ -118,6 +118,7 @@
|
|||
@ stub CryptExportPKCS8
|
||||
@ stdcall CryptExportPublicKeyInfo(long long long ptr ptr)
|
||||
@ stdcall CryptExportPublicKeyInfoEx(long long long str long ptr ptr ptr)
|
||||
@ stdcall CryptFindCertificateKeyProvInfo(ptr long ptr)
|
||||
@ stdcall CryptFindLocalizedName(wstr)
|
||||
@ stdcall CryptFindOIDInfo(long ptr long)
|
||||
@ stdcall CryptFormatObject(long long long ptr str ptr long ptr ptr)
|
||||
|
@ -216,8 +217,10 @@
|
|||
@ stdcall I_CryptSetTls(long ptr)
|
||||
@ stdcall I_CryptUninstallAsn1Module(long)
|
||||
@ stub I_CryptUninstallOssGlobal
|
||||
@ stub PFXExportCertStore
|
||||
@ stub PFXImportCertStore
|
||||
@ stdcall PFXExportCertStore(ptr ptr ptr long)
|
||||
@ stdcall PFXExportCertStoreEx(ptr ptr ptr ptr long)
|
||||
@ stdcall PFXImportCertStore(ptr ptr long)
|
||||
@ stdcall PFXIsPFXBlob(ptr)
|
||||
@ stub RegCreateHKCUKeyExU
|
||||
@ stub RegCreateKeyExU
|
||||
@ stub RegDeleteValueU
|
||||
|
|
|
@ -171,6 +171,7 @@ STRINGTABLE DISCARDABLE
|
|||
IDS_LOCALIZEDNAME_MY "Personal"
|
||||
IDS_LOCALIZEDNAME_CA "Intermediate Certification Authorities"
|
||||
IDS_LOCALIZEDNAME_ADDRESSBOOK "Other People"
|
||||
IDS_LOCALIZEDNAME_TRUSTEDPUBLISHER "Trusted Publishers"
|
||||
}
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
|
|
|
@ -171,6 +171,7 @@ STRINGTABLE DISCARDABLE
|
|||
IDS_LOCALIZEDNAME_MY "Persoonlijk"
|
||||
IDS_LOCALIZEDNAME_CA "Certificatie Tussen-Autoriteiten"
|
||||
IDS_LOCALIZEDNAME_ADDRESSBOOK "Overige Personen"
|
||||
IDS_LOCALIZEDNAME_TRUSTEDPUBLISHER "Vertrouwde uitgevers"
|
||||
}
|
||||
STRINGTABLE DISCARDABLE
|
||||
{
|
||||
|
|
|
@ -164,6 +164,7 @@
|
|||
#define IDS_LOCALIZEDNAME_MY 1142
|
||||
#define IDS_LOCALIZEDNAME_CA 1143
|
||||
#define IDS_LOCALIZEDNAME_ADDRESSBOOK 1144
|
||||
#define IDS_LOCALIZEDNAME_TRUSTEDPUBLISHER 1145
|
||||
|
||||
#define IDS_KEY_ID 1200
|
||||
#define IDS_CERT_ISSUER 1201
|
||||
|
|
|
@ -36,7 +36,7 @@ BOOL WINAPI CertAddCTLContextToStore(HCERTSTORE hCertStore,
|
|||
PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition,
|
||||
PCCTL_CONTEXT* ppStoreContext)
|
||||
{
|
||||
PWINECRYPT_CERTSTORE store = (PWINECRYPT_CERTSTORE)hCertStore;
|
||||
PWINECRYPT_CERTSTORE store = hCertStore;
|
||||
BOOL ret = TRUE;
|
||||
PCCTL_CONTEXT toAdd = NULL, existing = NULL;
|
||||
|
||||
|
@ -161,7 +161,7 @@ BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore,
|
|||
PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore,
|
||||
PCCTL_CONTEXT pPrev)
|
||||
{
|
||||
WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *)hCertStore;
|
||||
WINECRYPT_CERTSTORE *hcs = hCertStore;
|
||||
PCCTL_CONTEXT ret;
|
||||
|
||||
TRACE("(%p, %p)\n", hCertStore, pPrev);
|
||||
|
@ -194,7 +194,7 @@ static BOOL compare_ctl_by_md5_hash(PCCTL_CONTEXT pCtlContext, DWORD dwType,
|
|||
&size);
|
||||
if (ret)
|
||||
{
|
||||
const CRYPT_HASH_BLOB *pHash = (const CRYPT_HASH_BLOB *)pvPara;
|
||||
const CRYPT_HASH_BLOB *pHash = pvPara;
|
||||
|
||||
if (size == pHash->cbData)
|
||||
ret = !memcmp(pHash->pbData, hash, size);
|
||||
|
@ -215,7 +215,7 @@ static BOOL compare_ctl_by_sha1_hash(PCCTL_CONTEXT pCtlContext, DWORD dwType,
|
|||
&size);
|
||||
if (ret)
|
||||
{
|
||||
const CRYPT_HASH_BLOB *pHash = (const CRYPT_HASH_BLOB *)pvPara;
|
||||
const CRYPT_HASH_BLOB *pHash = pvPara;
|
||||
|
||||
if (size == pHash->cbData)
|
||||
ret = !memcmp(pHash->pbData, hash, size);
|
||||
|
@ -232,7 +232,7 @@ static BOOL compare_ctl_existing(PCCTL_CONTEXT pCtlContext, DWORD dwType,
|
|||
|
||||
if (pvPara)
|
||||
{
|
||||
PCCTL_CONTEXT ctl = (PCCTL_CONTEXT)pvPara;
|
||||
PCCTL_CONTEXT ctl = pvPara;
|
||||
|
||||
if (pCtlContext->cbCtlContext == ctl->cbCtlContext)
|
||||
{
|
||||
|
@ -315,8 +315,7 @@ BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext)
|
|||
}
|
||||
else
|
||||
{
|
||||
PWINECRYPT_CERTSTORE hcs =
|
||||
(PWINECRYPT_CERTSTORE)pCtlContext->hCertStore;
|
||||
PWINECRYPT_CERTSTORE hcs = pCtlContext->hCertStore;
|
||||
|
||||
if (hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC)
|
||||
ret = FALSE;
|
||||
|
@ -400,7 +399,7 @@ PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType,
|
|||
{
|
||||
ret = CryptDecodeObjectEx(dwMsgAndCertEncodingType, PKCS_CTL,
|
||||
content, contentSize, CRYPT_DECODE_ALLOC_FLAG, NULL,
|
||||
(BYTE *)&ctlInfo, &size);
|
||||
&ctlInfo, &size);
|
||||
if (ret)
|
||||
{
|
||||
ctl = Context_CreateDataContext(sizeof(CTL_CONTEXT));
|
||||
|
@ -450,7 +449,7 @@ end:
|
|||
CryptMemFree(content);
|
||||
CryptMsgClose(msg);
|
||||
}
|
||||
return (PCCTL_CONTEXT)ctl;
|
||||
return ctl;
|
||||
}
|
||||
|
||||
PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext)
|
||||
|
@ -462,7 +461,7 @@ PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext)
|
|||
|
||||
static void CTLDataContext_Free(void *context)
|
||||
{
|
||||
PCTL_CONTEXT ctlContext = (PCTL_CONTEXT)context;
|
||||
PCTL_CONTEXT ctlContext = context;
|
||||
|
||||
CryptMsgClose(ctlContext->hCryptMsg);
|
||||
CryptMemFree(ctlContext->pbCtlEncoded);
|
||||
|
@ -484,7 +483,7 @@ DWORD WINAPI CertEnumCTLContextProperties(PCCTL_CONTEXT pCTLContext,
|
|||
DWORD dwPropId)
|
||||
{
|
||||
PCONTEXT_PROPERTY_LIST properties = Context_GetProperties(
|
||||
(void *)pCTLContext, sizeof(CTL_CONTEXT));
|
||||
pCTLContext, sizeof(CTL_CONTEXT));
|
||||
DWORD ret;
|
||||
|
||||
TRACE("(%p, %d)\n", pCTLContext, dwPropId);
|
||||
|
@ -656,7 +655,7 @@ static BOOL CTLContext_SetProperty(PCCTL_CONTEXT context, DWORD dwPropId,
|
|||
}
|
||||
case CERT_DATE_STAMP_PROP_ID:
|
||||
ret = ContextPropertyList_SetProperty(properties, dwPropId,
|
||||
(const BYTE *)pvData, sizeof(FILETIME));
|
||||
pvData, sizeof(FILETIME));
|
||||
break;
|
||||
default:
|
||||
FIXME("%d: stub\n", dwPropId);
|
||||
|
|
|
@ -537,7 +537,7 @@ static BOOL CRYPT_AsnDecodeSequence(struct AsnDecodeSequenceItem items[],
|
|||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
if (startingPointer)
|
||||
nextData = (BYTE *)startingPointer;
|
||||
nextData = startingPointer;
|
||||
else
|
||||
nextData = (BYTE *)pvStructInfo + structSize;
|
||||
memset(pvStructInfo, 0, structSize);
|
||||
|
@ -704,7 +704,7 @@ static BOOL CRYPT_AsnDecodeArray(const struct AsnArrayDescriptor *arrayDesc,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
array = (struct GenericArray *)pvStructInfo;
|
||||
array = pvStructInfo;
|
||||
array->cItems = cItems;
|
||||
if (startingPointer)
|
||||
array->rgItems = startingPointer;
|
||||
|
@ -779,7 +779,7 @@ static BOOL CRYPT_AsnDecodeDerBlob(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
blob = (CRYPT_DER_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->cbData = 1 + lenBytes + dataLen;
|
||||
if (blob->cbData)
|
||||
{
|
||||
|
@ -819,7 +819,7 @@ static BOOL CRYPT_AsnDecodeBitsSwapBytes(const BYTE *pbEncoded,
|
|||
pcbDecoded);
|
||||
if (ret && pvStructInfo)
|
||||
{
|
||||
CRYPT_BIT_BLOB *blob = (CRYPT_BIT_BLOB *)pvStructInfo;
|
||||
CRYPT_BIT_BLOB *blob = pvStructInfo;
|
||||
|
||||
if (blob->cbData)
|
||||
{
|
||||
|
@ -985,7 +985,7 @@ static BOOL CRYPT_AsnDecodeCertInfo(DWORD dwCertEncodingType,
|
|||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
info = *(CERT_INFO **)pvStructInfo;
|
||||
else
|
||||
info = (CERT_INFO *)pvStructInfo;
|
||||
info = pvStructInfo;
|
||||
if (!info->SerialNumber.cbData || !info->Issuer.cbData ||
|
||||
!info->Subject.cbData)
|
||||
{
|
||||
|
@ -1021,7 +1021,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCert(DWORD dwCertEncodingType,
|
|||
|
||||
ret = CRYPT_AsnDecodeCertSignedContent(dwCertEncodingType,
|
||||
X509_CERT, pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
|
||||
(BYTE *)&signedCert, &size);
|
||||
&signedCert, &size);
|
||||
if (ret)
|
||||
{
|
||||
size = 0;
|
||||
|
@ -1065,7 +1065,7 @@ static BOOL CRYPT_AsnDecodeCRLEntry(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
CRYPT_AsnDecodeExtensionsInternal, sizeof(CERT_EXTENSIONS), TRUE, TRUE,
|
||||
offsetof(CRL_ENTRY, rgExtension), 0 },
|
||||
};
|
||||
PCRL_ENTRY entry = (PCRL_ENTRY)pvStructInfo;
|
||||
PCRL_ENTRY entry = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, entry,
|
||||
*pcbStructInfo);
|
||||
|
@ -1092,7 +1092,7 @@ static BOOL CRYPT_AsnDecodeCRLEntries(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeCRLEntry, sizeof(CRL_ENTRY), TRUE,
|
||||
offsetof(CRL_ENTRY, SerialNumber.pbData) };
|
||||
struct GenericArray *entries = (struct GenericArray *)pvStructInfo;
|
||||
struct GenericArray *entries = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -1161,7 +1161,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCRL(DWORD dwCertEncodingType,
|
|||
|
||||
ret = CRYPT_AsnDecodeCertSignedContent(dwCertEncodingType,
|
||||
X509_CERT, pbEncoded, cbEncoded, CRYPT_DECODE_ALLOC_FLAG, NULL,
|
||||
(BYTE *)&signedCrl, &size);
|
||||
&signedCrl, &size);
|
||||
if (ret)
|
||||
{
|
||||
size = 0;
|
||||
|
@ -1331,7 +1331,7 @@ static BOOL CRYPT_AsnDecodeExtension(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
offsetof(CERT_EXTENSION, Value.pbData) },
|
||||
};
|
||||
BOOL ret = TRUE;
|
||||
PCERT_EXTENSION ext = (PCERT_EXTENSION)pvStructInfo;
|
||||
PCERT_EXTENSION ext = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, ext,
|
||||
*pcbStructInfo);
|
||||
|
@ -1356,7 +1356,7 @@ static BOOL CRYPT_AsnDecodeExtensionsInternal(const BYTE *pbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeExtension, sizeof(CERT_EXTENSION), TRUE,
|
||||
offsetof(CERT_EXTENSION, pszObjId) };
|
||||
PCERT_EXTENSIONS exts = (PCERT_EXTENSIONS)pvStructInfo;
|
||||
PCERT_EXTENSIONS exts = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -1387,7 +1387,7 @@ static BOOL WINAPI CRYPT_AsnDecodeExtensions(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
exts = (CERT_EXTENSIONS *)pvStructInfo;
|
||||
exts = pvStructInfo;
|
||||
exts->rgExtension = (CERT_EXTENSION *)((BYTE *)exts +
|
||||
sizeof(CERT_EXTENSIONS));
|
||||
ret = CRYPT_AsnDecodeExtensionsInternal(pbEncoded, cbEncoded,
|
||||
|
@ -1415,7 +1415,7 @@ static BOOL CRYPT_AsnDecodeNameValueInternal(const BYTE *pbEncoded,
|
|||
{
|
||||
BOOL ret = TRUE;
|
||||
DWORD dataLen;
|
||||
CERT_NAME_VALUE *value = (CERT_NAME_VALUE *)pvStructInfo;
|
||||
CERT_NAME_VALUE *value = pvStructInfo;
|
||||
|
||||
if ((ret = CRYPT_GetLen(pbEncoded, cbEncoded, &dataLen)))
|
||||
{
|
||||
|
@ -1579,7 +1579,7 @@ static BOOL WINAPI CRYPT_AsnDecodeNameValue(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
value = (CERT_NAME_VALUE *)pvStructInfo;
|
||||
value = pvStructInfo;
|
||||
value->Value.pbData = ((BYTE *)value + sizeof(CERT_NAME_VALUE));
|
||||
ret = CRYPT_AsnDecodeNameValueInternal( pbEncoded, cbEncoded,
|
||||
dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, pvStructInfo,
|
||||
|
@ -1602,7 +1602,7 @@ static BOOL CRYPT_AsnDecodeUnicodeNameValueInternal(const BYTE *pbEncoded,
|
|||
{
|
||||
BOOL ret = TRUE;
|
||||
DWORD dataLen;
|
||||
CERT_NAME_VALUE *value = (CERT_NAME_VALUE *)pvStructInfo;
|
||||
CERT_NAME_VALUE *value = pvStructInfo;
|
||||
|
||||
if ((ret = CRYPT_GetLen(pbEncoded, cbEncoded, &dataLen)))
|
||||
{
|
||||
|
@ -1761,7 +1761,7 @@ static BOOL WINAPI CRYPT_AsnDecodeUnicodeNameValue(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
value = (CERT_NAME_VALUE *)pvStructInfo;
|
||||
value = pvStructInfo;
|
||||
value->Value.pbData = ((BYTE *)value + sizeof(CERT_NAME_VALUE));
|
||||
ret = CRYPT_AsnDecodeUnicodeNameValueInternal(pbEncoded,
|
||||
cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, pvStructInfo,
|
||||
|
@ -1790,7 +1790,7 @@ static BOOL CRYPT_AsnDecodeRdnAttr(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
CRYPT_AsnDecodeNameValueInternal, sizeof(CERT_NAME_VALUE),
|
||||
FALSE, TRUE, offsetof(CERT_RDN_ATTR, Value.pbData), 0 },
|
||||
};
|
||||
CERT_RDN_ATTR *attr = (CERT_RDN_ATTR *)pvStructInfo;
|
||||
CERT_RDN_ATTR *attr = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo);
|
||||
|
@ -1817,7 +1817,7 @@ static BOOL CRYPT_AsnDecodeRdn(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_CONSTRUCTOR | ASN_SETOF,
|
||||
CRYPT_AsnDecodeRdnAttr, sizeof(CERT_RDN_ATTR), TRUE,
|
||||
offsetof(CERT_RDN_ATTR, pszObjId) };
|
||||
PCERT_RDN rdn = (PCERT_RDN)pvStructInfo;
|
||||
PCERT_RDN rdn = pvStructInfo;
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
NULL, pvStructInfo, pcbStructInfo, pcbDecoded,
|
||||
|
@ -1862,7 +1862,7 @@ static BOOL CRYPT_AsnDecodeUnicodeRdnAttr(const BYTE *pbEncoded,
|
|||
CRYPT_AsnDecodeUnicodeNameValueInternal, sizeof(CERT_NAME_VALUE),
|
||||
FALSE, TRUE, offsetof(CERT_RDN_ATTR, Value.pbData), 0 },
|
||||
};
|
||||
CERT_RDN_ATTR *attr = (CERT_RDN_ATTR *)pvStructInfo;
|
||||
CERT_RDN_ATTR *attr = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo);
|
||||
|
@ -1889,7 +1889,7 @@ static BOOL CRYPT_AsnDecodeUnicodeRdn(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_CONSTRUCTOR | ASN_SETOF,
|
||||
CRYPT_AsnDecodeUnicodeRdnAttr, sizeof(CERT_RDN_ATTR), TRUE,
|
||||
offsetof(CERT_RDN_ATTR, pszObjId) };
|
||||
PCERT_RDN rdn = (PCERT_RDN)pvStructInfo;
|
||||
PCERT_RDN rdn = pvStructInfo;
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
NULL, pvStructInfo, pcbStructInfo, pcbDecoded,
|
||||
|
@ -2001,7 +2001,7 @@ static BOOL CRYPT_AsnDecodeCopyBytes(const BYTE *pbEncoded,
|
|||
}
|
||||
else
|
||||
{
|
||||
PCRYPT_OBJID_BLOB blob = (PCRYPT_OBJID_BLOB)pvStructInfo;
|
||||
PCRYPT_OBJID_BLOB blob = pvStructInfo;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
blob->cbData = encodedLen;
|
||||
|
@ -2030,7 +2030,7 @@ static BOOL CRYPT_DecodeDERArray(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
BOOL ret;
|
||||
struct AsnArrayDescriptor arrayDesc = { 0, CRYPT_AsnDecodeCopyBytes,
|
||||
sizeof(CRYPT_DER_BLOB), TRUE, offsetof(CRYPT_DER_BLOB, pbData) };
|
||||
struct GenericArray *array = (struct GenericArray *)pvStructInfo;
|
||||
struct GenericArray *array = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -2047,7 +2047,7 @@ static BOOL CRYPT_AsnDecodeCTLUsage(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
BOOL ret;
|
||||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeOidInternal, sizeof(LPSTR), TRUE, 0 };
|
||||
CTL_USAGE *usage = (CTL_USAGE *)pvStructInfo;
|
||||
CTL_USAGE *usage = pvStructInfo;
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
NULL, pvStructInfo, pcbStructInfo, pcbDecoded,
|
||||
|
@ -2067,7 +2067,7 @@ static BOOL CRYPT_AsnDecodeCTLEntry(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
TRUE, offsetof(CTL_ENTRY, rgAttribute), 0 },
|
||||
};
|
||||
BOOL ret = TRUE;
|
||||
CTL_ENTRY *entry = (CTL_ENTRY *)pvStructInfo;
|
||||
CTL_ENTRY *entry = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags, entry,
|
||||
*pcbStructInfo);
|
||||
|
@ -2085,7 +2085,7 @@ static BOOL CRYPT_AsnDecodeCTLEntries(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeCTLEntry, sizeof(CTL_ENTRY), TRUE,
|
||||
offsetof(CTL_ENTRY, SubjectIdentifier.pbData) };
|
||||
struct GenericArray *entries = (struct GenericArray *)pvStructInfo;
|
||||
struct GenericArray *entries = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -2164,7 +2164,7 @@ static BOOL CRYPT_AsnDecodeSMIMECapability(const BYTE *pbEncoded,
|
|||
CRYPT_AsnDecodeCopyBytes, sizeof(CRYPT_OBJID_BLOB), TRUE, TRUE,
|
||||
offsetof(CRYPT_SMIME_CAPABILITY, Parameters.pbData), 0 },
|
||||
};
|
||||
PCRYPT_SMIME_CAPABILITY capability = (PCRYPT_SMIME_CAPABILITY)pvStructInfo;
|
||||
PCRYPT_SMIME_CAPABILITY capability = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo);
|
||||
|
@ -2183,8 +2183,7 @@ static BOOL CRYPT_AsnDecodeSMIMECapabilitiesInternal(const BYTE *pbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { 0,
|
||||
CRYPT_AsnDecodeSMIMECapability, sizeof(CRYPT_SMIME_CAPABILITY), TRUE,
|
||||
offsetof(CRYPT_SMIME_CAPABILITY, pszObjId) };
|
||||
PCRYPT_SMIME_CAPABILITIES capabilities =
|
||||
(PCRYPT_SMIME_CAPABILITIES)pvStructInfo;
|
||||
PCRYPT_SMIME_CAPABILITIES capabilities = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
|
@ -2223,7 +2222,7 @@ static BOOL WINAPI CRYPT_AsnDecodeSMIMECapabilities(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
capabilities = (PCRYPT_SMIME_CAPABILITIES)pvStructInfo;
|
||||
capabilities = pvStructInfo;
|
||||
capabilities->rgCapability =
|
||||
(PCRYPT_SMIME_CAPABILITY)((BYTE *)pvStructInfo +
|
||||
sizeof(CRYPT_SMIME_CAPABILITIES));
|
||||
|
@ -2591,7 +2590,7 @@ static BOOL CRYPT_AsnDecodePKCSAttributeInternal(const BYTE *pbEncoded,
|
|||
CRYPT_DecodeDERArray, sizeof(struct GenericArray), FALSE, TRUE,
|
||||
offsetof(CRYPT_ATTRIBUTE, rgValue), 0 },
|
||||
};
|
||||
PCRYPT_ATTRIBUTE attr = (PCRYPT_ATTRIBUTE)pvStructInfo;
|
||||
PCRYPT_ATTRIBUTE attr = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo);
|
||||
|
@ -2629,7 +2628,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSAttribute(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
attr = (PCRYPT_ATTRIBUTE)pvStructInfo;
|
||||
attr = pvStructInfo;
|
||||
attr->pszObjId = (LPSTR)((BYTE *)pvStructInfo +
|
||||
sizeof(CRYPT_ATTRIBUTE));
|
||||
ret = CRYPT_AsnDecodePKCSAttributeInternal(pbEncoded, cbEncoded,
|
||||
|
@ -2654,7 +2653,7 @@ static BOOL CRYPT_AsnDecodePKCSAttributesInternal(const BYTE *pbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { 0,
|
||||
CRYPT_AsnDecodePKCSAttributeInternal, sizeof(CRYPT_ATTRIBUTE), TRUE,
|
||||
offsetof(CRYPT_ATTRIBUTE, pszObjId) };
|
||||
PCRYPT_ATTRIBUTES attrs = (PCRYPT_ATTRIBUTES)pvStructInfo;
|
||||
PCRYPT_ATTRIBUTES attrs = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags,
|
||||
|
@ -2693,7 +2692,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSAttributes(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
attrs = (PCRYPT_ATTRIBUTES)pvStructInfo;
|
||||
attrs = pvStructInfo;
|
||||
attrs->rgAttr = (PCRYPT_ATTRIBUTE)((BYTE *)pvStructInfo +
|
||||
sizeof(CRYPT_ATTRIBUTES));
|
||||
ret = CRYPT_AsnDecodePKCSAttributesInternal(pbEncoded,
|
||||
|
@ -2714,8 +2713,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSAttributes(DWORD dwCertEncodingType,
|
|||
static BOOL CRYPT_AsnDecodeAlgorithmId(const BYTE *pbEncoded, DWORD cbEncoded,
|
||||
DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
|
||||
{
|
||||
CRYPT_ALGORITHM_IDENTIFIER *algo =
|
||||
(CRYPT_ALGORITHM_IDENTIFIER *)pvStructInfo;
|
||||
CRYPT_ALGORITHM_IDENTIFIER *algo = pvStructInfo;
|
||||
BOOL ret = TRUE;
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_OBJECTIDENTIFIER, offsetof(CRYPT_ALGORITHM_IDENTIFIER, pszObjId),
|
||||
|
@ -2754,7 +2752,7 @@ static BOOL CRYPT_AsnDecodePubKeyInfoInternal(const BYTE *pbEncoded,
|
|||
CRYPT_AsnDecodeBitsInternal, sizeof(CRYPT_BIT_BLOB), FALSE, TRUE,
|
||||
offsetof(CERT_PUBLIC_KEY_INFO, PublicKey.pbData) },
|
||||
};
|
||||
PCERT_PUBLIC_KEY_INFO info = (PCERT_PUBLIC_KEY_INFO)pvStructInfo;
|
||||
PCERT_PUBLIC_KEY_INFO info = pvStructInfo;
|
||||
|
||||
ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]),
|
||||
pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo,
|
||||
|
@ -2784,7 +2782,7 @@ static BOOL WINAPI CRYPT_AsnDecodePubKeyInfo(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
info = (PCERT_PUBLIC_KEY_INFO)pvStructInfo;
|
||||
info = pvStructInfo;
|
||||
info->Algorithm.Parameters.pbData = (BYTE *)pvStructInfo +
|
||||
sizeof(CERT_PUBLIC_KEY_INFO);
|
||||
ret = CRYPT_AsnDecodePubKeyInfoInternal(pbEncoded, cbEncoded,
|
||||
|
@ -2848,7 +2846,7 @@ static BOOL CRYPT_AsnDecodeBool(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
static BOOL CRYPT_AsnDecodeAltNameEntry(const BYTE *pbEncoded, DWORD cbEncoded,
|
||||
DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, DWORD *pcbDecoded)
|
||||
{
|
||||
PCERT_ALT_NAME_ENTRY entry = (PCERT_ALT_NAME_ENTRY)pvStructInfo;
|
||||
PCERT_ALT_NAME_ENTRY entry = pvStructInfo;
|
||||
DWORD dataLen, lenBytes, bytesNeeded = sizeof(CERT_ALT_NAME_ENTRY);
|
||||
BOOL ret;
|
||||
|
||||
|
@ -2971,7 +2969,7 @@ static BOOL CRYPT_AsnDecodeAltNameInternal(const BYTE *pbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { 0,
|
||||
CRYPT_AsnDecodeAltNameEntry, sizeof(CERT_ALT_NAME_ENTRY), TRUE,
|
||||
offsetof(CERT_ALT_NAME_ENTRY, u.pwszURL) };
|
||||
PCERT_ALT_NAME_INFO info = (PCERT_ALT_NAME_INFO)pvStructInfo;
|
||||
PCERT_ALT_NAME_INFO info = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -3002,7 +3000,7 @@ static BOOL CRYPT_AsnDecodeIntegerSwapBytes(const BYTE *pbEncoded,
|
|||
pcbDecoded);
|
||||
if (ret && pvStructInfo)
|
||||
{
|
||||
CRYPT_DATA_BLOB *blob = (CRYPT_DATA_BLOB *)pvStructInfo;
|
||||
CRYPT_DATA_BLOB *blob = pvStructInfo;
|
||||
|
||||
if (blob->cbData)
|
||||
{
|
||||
|
@ -3105,7 +3103,7 @@ static BOOL CRYPT_AsnDecodeAccessDescription(const BYTE *pbEncoded,
|
|||
CRYPT_AsnDecodeAltNameEntry, sizeof(CERT_ALT_NAME_ENTRY), FALSE,
|
||||
TRUE, offsetof(CERT_ACCESS_DESCRIPTION, AccessLocation.u.pwszURL), 0 },
|
||||
};
|
||||
CERT_ACCESS_DESCRIPTION *descr = (CERT_ACCESS_DESCRIPTION *)pvStructInfo;
|
||||
CERT_ACCESS_DESCRIPTION *descr = pvStructInfo;
|
||||
|
||||
return CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]),
|
||||
pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo,
|
||||
|
@ -3195,7 +3193,7 @@ static BOOL CRYPT_AsnDecodePKCSContentInfoInternal(const BYTE *pbEncoded,
|
|||
DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo,
|
||||
DWORD *pcbDecoded)
|
||||
{
|
||||
CRYPT_CONTENT_INFO *info = (CRYPT_CONTENT_INFO *)pvStructInfo;
|
||||
CRYPT_CONTENT_INFO *info = pvStructInfo;
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_OBJECTIDENTIFIER, offsetof(CRYPT_CONTENT_INFO, pszObjId),
|
||||
CRYPT_AsnDecodeOidIgnoreTag, sizeof(LPSTR), FALSE, TRUE,
|
||||
|
@ -3239,7 +3237,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSContentInfo(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
info = (CRYPT_CONTENT_INFO *)pvStructInfo;
|
||||
info = pvStructInfo;
|
||||
info->pszObjId = (LPSTR)((BYTE *)info +
|
||||
sizeof(CRYPT_CONTENT_INFO));
|
||||
ret = CRYPT_AsnDecodePKCSContentInfoInternal(pbEncoded,
|
||||
|
@ -3308,7 +3306,7 @@ static BOOL WINAPI CRYPT_AsnDecodeAltName(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
name = (CERT_ALT_NAME_INFO *)pvStructInfo;
|
||||
name = pvStructInfo;
|
||||
name->rgAltEntry = (PCERT_ALT_NAME_ENTRY)
|
||||
((BYTE *)pvStructInfo + sizeof(CERT_ALT_NAME_INFO));
|
||||
ret = CRYPT_AsnDecodeAltNameInternal(pbEncoded, cbEncoded,
|
||||
|
@ -3356,8 +3354,7 @@ static BOOL CRYPT_AsnDecodePathLenConstraint(const BYTE *pbEncoded,
|
|||
}
|
||||
else
|
||||
{
|
||||
struct PATH_LEN_CONSTRAINT *constraint =
|
||||
(struct PATH_LEN_CONSTRAINT *)pvStructInfo;
|
||||
struct PATH_LEN_CONSTRAINT *constraint = pvStructInfo;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
size = sizeof(constraint->dwPathLenConstraint);
|
||||
|
@ -3380,7 +3377,7 @@ static BOOL CRYPT_AsnDecodeSubtreeConstraints(const BYTE *pbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_SEQUENCEOF,
|
||||
CRYPT_AsnDecodeCopyBytes, sizeof(CERT_NAME_BLOB), TRUE,
|
||||
offsetof(CERT_NAME_BLOB, pbData) };
|
||||
struct GenericArray *entries = (struct GenericArray *)pvStructInfo;
|
||||
struct GenericArray *entries = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -3597,7 +3594,7 @@ static BOOL WINAPI CRYPT_AsnDecodeRsaPubKey(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
hdr = (BLOBHEADER *)pvStructInfo;
|
||||
hdr = pvStructInfo;
|
||||
hdr->bType = PUBLICKEYBLOB;
|
||||
hdr->bVersion = CUR_BLOB_VERSION;
|
||||
hdr->reserved = 0;
|
||||
|
@ -3656,7 +3653,7 @@ static BOOL CRYPT_AsnDecodeOctetsInternal(const BYTE *pbEncoded,
|
|||
CRYPT_DATA_BLOB *blob;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
blob = (CRYPT_DATA_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->cbData = dataLen;
|
||||
if (dwFlags & CRYPT_DECODE_NOCOPY_FLAG)
|
||||
blob->pbData = (BYTE *)pbEncoded + 1 + lenBytes;
|
||||
|
@ -3707,7 +3704,7 @@ static BOOL WINAPI CRYPT_AsnDecodeOctets(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
blob = (CRYPT_DATA_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->pbData = (BYTE *)pvStructInfo + sizeof(CRYPT_DATA_BLOB);
|
||||
ret = CRYPT_AsnDecodeOctetsInternal(pbEncoded, cbEncoded,
|
||||
dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, pvStructInfo,
|
||||
|
@ -3755,7 +3752,7 @@ static BOOL CRYPT_AsnDecodeBitsInternal(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
CRYPT_BIT_BLOB *blob;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
blob = (CRYPT_BIT_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->cbData = dataLen - 1;
|
||||
blob->cUnusedBits = *(pbEncoded + 1 + lenBytes);
|
||||
if (dwFlags & CRYPT_DECODE_NOCOPY_FLAG)
|
||||
|
@ -3814,7 +3811,7 @@ static BOOL WINAPI CRYPT_AsnDecodeBits(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
blob = (CRYPT_BIT_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->pbData = (BYTE *)pvStructInfo + sizeof(CRYPT_BIT_BLOB);
|
||||
ret = CRYPT_AsnDecodeBitsInternal(pbEncoded, cbEncoded,
|
||||
dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, pvStructInfo,
|
||||
|
@ -3943,7 +3940,7 @@ static BOOL CRYPT_AsnDecodeIntegerInternal(const BYTE *pbEncoded,
|
|||
}
|
||||
else
|
||||
{
|
||||
CRYPT_INTEGER_BLOB *blob = (CRYPT_INTEGER_BLOB *)pvStructInfo;
|
||||
CRYPT_INTEGER_BLOB *blob = pvStructInfo;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
blob->cbData = dataLen;
|
||||
|
@ -3992,7 +3989,7 @@ static BOOL WINAPI CRYPT_AsnDecodeInteger(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
blob = (CRYPT_INTEGER_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->pbData = (BYTE *)pvStructInfo +
|
||||
sizeof(CRYPT_INTEGER_BLOB);
|
||||
ret = CRYPT_AsnDecodeIntegerInternal(pbEncoded, cbEncoded,
|
||||
|
@ -4037,7 +4034,7 @@ static BOOL CRYPT_AsnDecodeUnsignedIntegerInternal(const BYTE *pbEncoded,
|
|||
}
|
||||
else
|
||||
{
|
||||
CRYPT_INTEGER_BLOB *blob = (CRYPT_INTEGER_BLOB *)pvStructInfo;
|
||||
CRYPT_INTEGER_BLOB *blob = pvStructInfo;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
blob->cbData = dataLen;
|
||||
|
@ -4091,7 +4088,7 @@ static BOOL WINAPI CRYPT_AsnDecodeUnsignedInteger(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
blob = (CRYPT_INTEGER_BLOB *)pvStructInfo;
|
||||
blob = pvStructInfo;
|
||||
blob->pbData = (BYTE *)pvStructInfo +
|
||||
sizeof(CRYPT_INTEGER_BLOB);
|
||||
ret = CRYPT_AsnDecodeUnsignedIntegerInternal(pbEncoded,
|
||||
|
@ -4313,8 +4310,7 @@ static BOOL CRYPT_AsnDecodeUtcTimeInternal(const BYTE *pbEncoded,
|
|||
*pcbStructInfo = sizeof(FILETIME);
|
||||
else if ((ret = CRYPT_DecodeCheckSpace(pcbStructInfo,
|
||||
sizeof(FILETIME))))
|
||||
ret = SystemTimeToFileTime(&sysTime,
|
||||
(FILETIME *)pvStructInfo);
|
||||
ret = SystemTimeToFileTime(&sysTime, pvStructInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4421,8 +4417,7 @@ static BOOL CRYPT_AsnDecodeGeneralizedTime(const BYTE *pbEncoded,
|
|||
*pcbStructInfo = sizeof(FILETIME);
|
||||
else if ((ret = CRYPT_DecodeCheckSpace(pcbStructInfo,
|
||||
sizeof(FILETIME))))
|
||||
ret = SystemTimeToFileTime(&sysTime,
|
||||
(FILETIME *)pvStructInfo);
|
||||
ret = SystemTimeToFileTime(&sysTime, pvStructInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4542,7 +4537,7 @@ static BOOL WINAPI CRYPT_AsnDecodeSequenceOfAny(DWORD dwCertEncodingType,
|
|||
{
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
seq = (CRYPT_SEQUENCE_OF_ANY *)pvStructInfo;
|
||||
seq = pvStructInfo;
|
||||
seq->cValue = cValue;
|
||||
seq->rgValue = (CRYPT_DER_BLOB *)((BYTE *)seq +
|
||||
sizeof(*seq));
|
||||
|
@ -4640,7 +4635,7 @@ static BOOL CRYPT_AsnDecodeDistPointName(const BYTE *pbEncoded,
|
|||
}
|
||||
else
|
||||
{
|
||||
CRL_DIST_POINT_NAME *name = (CRL_DIST_POINT_NAME *)pvStructInfo;
|
||||
CRL_DIST_POINT_NAME *name = pvStructInfo;
|
||||
|
||||
*pcbStructInfo = bytesNeeded;
|
||||
if (dataLen)
|
||||
|
@ -4679,7 +4674,7 @@ static BOOL CRYPT_AsnDecodeDistPoint(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
CRYPT_AsnDecodeAltNameInternal, sizeof(CERT_ALT_NAME_INFO), TRUE, TRUE,
|
||||
offsetof(CRL_DIST_POINT, CRLIssuer.rgAltEntry), 0 },
|
||||
};
|
||||
CRL_DIST_POINT *point = (CRL_DIST_POINT *)pvStructInfo;
|
||||
CRL_DIST_POINT *point = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]),
|
||||
|
@ -4829,14 +4824,14 @@ static BOOL CRYPT_AsnDecodeSubtree(const BYTE *pbEncoded,
|
|||
CRYPT_AsnDecodeMaximum, sizeof(BOOL) + sizeof(DWORD), TRUE, FALSE, 0,
|
||||
0 },
|
||||
};
|
||||
CERT_GENERAL_SUBTREE *subtree = (CERT_GENERAL_SUBTREE *)pvStructInfo;
|
||||
CERT_GENERAL_SUBTREE *subtree = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
||||
ret = CRYPT_AsnDecodeSequence(items, sizeof(items) / sizeof(items[0]),
|
||||
pbEncoded, cbEncoded, dwFlags, NULL, pvStructInfo, pcbStructInfo,
|
||||
pcbDecoded, subtree ? (BYTE *)subtree->Base.u.pwszURL : NULL);
|
||||
pcbDecoded, subtree ? subtree->Base.u.pwszURL : NULL);
|
||||
if (pcbDecoded)
|
||||
{
|
||||
TRACE("%d\n", *pcbDecoded);
|
||||
|
@ -4856,7 +4851,7 @@ static BOOL CRYPT_AsnDecodeSubtreeArray(const BYTE *pbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { 0,
|
||||
CRYPT_AsnDecodeSubtree, sizeof(CERT_GENERAL_SUBTREE), TRUE,
|
||||
offsetof(CERT_GENERAL_SUBTREE, Base.u.pwszURL) };
|
||||
struct GenericArray *array = (struct GenericArray *)pvStructInfo;
|
||||
struct GenericArray *array = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -4915,8 +4910,7 @@ static BOOL CRYPT_AsnDecodeIssuerSerialNumber(const BYTE *pbEncoded,
|
|||
CRYPT_AsnDecodeIntegerInternal, sizeof(CRYPT_INTEGER_BLOB), FALSE,
|
||||
TRUE, offsetof(CERT_ISSUER_SERIAL_NUMBER, SerialNumber.pbData), 0 },
|
||||
};
|
||||
CERT_ISSUER_SERIAL_NUMBER *issuerSerial =
|
||||
(CERT_ISSUER_SERIAL_NUMBER *)pvStructInfo;
|
||||
CERT_ISSUER_SERIAL_NUMBER *issuerSerial = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -4937,7 +4931,7 @@ static BOOL CRYPT_AsnDecodePKCSSignerInfoInternal(const BYTE *pbEncoded,
|
|||
DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo,
|
||||
DWORD *pcbDecoded)
|
||||
{
|
||||
CMSG_SIGNER_INFO *info = (CMSG_SIGNER_INFO *)pvStructInfo;
|
||||
CMSG_SIGNER_INFO *info = pvStructInfo;
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_INTEGER, offsetof(CMSG_SIGNER_INFO, dwVersion),
|
||||
CRYPT_AsnDecodeIntInternal, sizeof(DWORD), FALSE, FALSE, 0, 0 },
|
||||
|
@ -4997,7 +4991,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSSignerInfo(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
info = (CMSG_SIGNER_INFO *)pvStructInfo;
|
||||
info = pvStructInfo;
|
||||
info->Issuer.pbData = ((BYTE *)info +
|
||||
sizeof(CMSG_SIGNER_INFO));
|
||||
ret = CRYPT_AsnDecodePKCSSignerInfoInternal(pbEncoded,
|
||||
|
@ -5019,7 +5013,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerId(const BYTE *pbEncoded,
|
|||
DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo,
|
||||
DWORD *pcbDecoded)
|
||||
{
|
||||
CERT_ID *id = (CERT_ID *)pvStructInfo;
|
||||
CERT_ID *id = pvStructInfo;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (*pbEncoded == ASN_SEQUENCEOF)
|
||||
|
@ -5061,7 +5055,7 @@ static BOOL CRYPT_AsnDecodeCMSSignerInfoInternal(const BYTE *pbEncoded,
|
|||
DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo,
|
||||
DWORD *pcbDecoded)
|
||||
{
|
||||
CMSG_CMS_SIGNER_INFO *info = (CMSG_CMS_SIGNER_INFO *)pvStructInfo;
|
||||
CMSG_CMS_SIGNER_INFO *info = pvStructInfo;
|
||||
struct AsnDecodeSequenceItem items[] = {
|
||||
{ ASN_INTEGER, offsetof(CMSG_CMS_SIGNER_INFO, dwVersion),
|
||||
CRYPT_AsnDecodeIntInternal, sizeof(DWORD), FALSE, FALSE, 0, 0 },
|
||||
|
@ -5121,7 +5115,7 @@ static BOOL WINAPI CRYPT_AsnDecodeCMSSignerInfo(DWORD dwCertEncodingType,
|
|||
|
||||
if (dwFlags & CRYPT_DECODE_ALLOC_FLAG)
|
||||
pvStructInfo = *(BYTE **)pvStructInfo;
|
||||
info = (CMSG_CMS_SIGNER_INFO *)pvStructInfo;
|
||||
info = pvStructInfo;
|
||||
info->SignerId.u.KeyId.pbData = ((BYTE *)info +
|
||||
sizeof(CMSG_CMS_SIGNER_INFO));
|
||||
ret = CRYPT_AsnDecodeCMSSignerInfoInternal(pbEncoded,
|
||||
|
@ -5146,7 +5140,7 @@ static BOOL CRYPT_DecodeSignerArray(const BYTE *pbEncoded, DWORD cbEncoded,
|
|||
struct AsnArrayDescriptor arrayDesc = { ASN_CONSTRUCTOR | ASN_SETOF,
|
||||
CRYPT_AsnDecodeCMSSignerInfoInternal, sizeof(CMSG_CMS_SIGNER_INFO), TRUE,
|
||||
offsetof(CMSG_CMS_SIGNER_INFO, SignerId.u.KeyId.pbData) };
|
||||
struct GenericArray *array = (struct GenericArray *)pvStructInfo;
|
||||
struct GenericArray *array = pvStructInfo;
|
||||
|
||||
TRACE("%p, %d, %08x, %p, %d, %p\n", pbEncoded, cbEncoded, dwFlags,
|
||||
pvStructInfo, *pcbStructInfo, pcbDecoded);
|
||||
|
@ -5517,3 +5511,45 @@ BOOL WINAPI CryptDecodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
TRACE_(crypt)("returning %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX)
|
||||
{
|
||||
BOOL ret;
|
||||
|
||||
TRACE_(crypt)("(%p)\n", pPFX);
|
||||
|
||||
/* A PFX blob is an asn.1-encoded sequence, consisting of at least a
|
||||
* version integer of length 1 (3 encoded byes) and at least one other
|
||||
* datum (two encoded bytes), plus at least two bytes for the outer
|
||||
* sequence. Thus, even an empty PFX blob is at least 7 bytes in length.
|
||||
*/
|
||||
if (pPFX->cbData < 7)
|
||||
ret = FALSE;
|
||||
else if (pPFX->pbData[0] == ASN_SEQUENCE)
|
||||
{
|
||||
DWORD len;
|
||||
|
||||
if ((ret = CRYPT_GetLengthIndefinite(pPFX->pbData, pPFX->cbData, &len)))
|
||||
{
|
||||
BYTE lenLen = GET_LEN_BYTES(pPFX->pbData[1]);
|
||||
|
||||
/* Need at least three bytes for the integer version */
|
||||
if (pPFX->cbData < 1 + lenLen + 3)
|
||||
ret = FALSE;
|
||||
else if (pPFX->pbData[1 + lenLen] != ASN_INTEGER || /* Tag */
|
||||
pPFX->pbData[1 + lenLen + 1] != 1 || /* Definite length */
|
||||
pPFX->pbData[1 + lenLen + 2] != 3) /* PFX version */
|
||||
ret = FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
ret = FALSE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
|
||||
DWORD dwFlags)
|
||||
{
|
||||
FIXME_(crypt)("(%p, %p, %08x): stub\n", pPFX, szPassword, dwFlags);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -228,8 +228,7 @@ BOOL WINAPI CRYPT_AsnEncodeConstructed(DWORD dwCertEncodingType,
|
|||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
BOOL ret;
|
||||
const struct AsnConstructedItem *item =
|
||||
(const struct AsnConstructedItem *)pvStructInfo;
|
||||
const struct AsnConstructedItem *item = pvStructInfo;
|
||||
DWORD len;
|
||||
|
||||
if ((ret = item->encodeFunc(dwCertEncodingType, lpszStructType,
|
||||
|
@ -283,8 +282,7 @@ static BOOL WINAPI CRYPT_AsnEncodeSwapTag(DWORD dwCertEncodingType,
|
|||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
BOOL ret;
|
||||
const struct AsnEncodeTagSwappedItem *item =
|
||||
(const struct AsnEncodeTagSwappedItem *)pvStructInfo;
|
||||
const struct AsnEncodeTagSwappedItem *item = pvStructInfo;
|
||||
|
||||
ret = item->encodeFunc(dwCertEncodingType, lpszStructType,
|
||||
item->pvStructInfo, dwFlags, pEncodePara, pbEncoded, pcbEncoded);
|
||||
|
@ -297,7 +295,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCertVersion(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const DWORD *ver = (const DWORD *)pvStructInfo;
|
||||
const DWORD *ver = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
/* CERT_V1 is not encoded */
|
||||
|
@ -320,7 +318,7 @@ static BOOL WINAPI CRYPT_CopyEncodedBlob(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const CRYPT_DER_BLOB *blob = (const CRYPT_DER_BLOB *)pvStructInfo;
|
||||
const CRYPT_DER_BLOB *blob = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
if (!pbEncoded)
|
||||
|
@ -350,7 +348,7 @@ static BOOL WINAPI CRYPT_AsnEncodeValidity(DWORD dwCertEncodingType,
|
|||
{
|
||||
BOOL ret;
|
||||
/* This has two filetimes in a row, a NotBefore and a NotAfter */
|
||||
const FILETIME *timePtr = (const FILETIME *)pvStructInfo;
|
||||
const FILETIME *timePtr = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[] = {
|
||||
{ timePtr, CRYPT_AsnEncodeChoiceOfTime, 0 },
|
||||
{ timePtr + 1, CRYPT_AsnEncodeChoiceOfTime, 0 },
|
||||
|
@ -370,8 +368,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAlgorithmIdWithNullParams(
|
|||
DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded,
|
||||
DWORD *pcbEncoded)
|
||||
{
|
||||
const CRYPT_ALGORITHM_IDENTIFIER *algo =
|
||||
(const CRYPT_ALGORITHM_IDENTIFIER *)pvStructInfo;
|
||||
const CRYPT_ALGORITHM_IDENTIFIER *algo = pvStructInfo;
|
||||
static const BYTE asn1Null[] = { ASN_NULL, 0 };
|
||||
static const CRYPT_DATA_BLOB nullBlob = { sizeof(asn1Null),
|
||||
(LPBYTE)asn1Null };
|
||||
|
@ -395,8 +392,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAlgorithmId(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const CRYPT_ALGORITHM_IDENTIFIER *algo =
|
||||
(const CRYPT_ALGORITHM_IDENTIFIER *)pvStructInfo;
|
||||
const CRYPT_ALGORITHM_IDENTIFIER *algo = pvStructInfo;
|
||||
BOOL ret;
|
||||
struct AsnEncodeSequenceItem items[] = {
|
||||
{ algo->pszObjId, CRYPT_AsnEncodeOid, 0 },
|
||||
|
@ -417,8 +413,7 @@ static BOOL WINAPI CRYPT_AsnEncodePubKeyInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_PUBLIC_KEY_INFO *info =
|
||||
(const CERT_PUBLIC_KEY_INFO *)pvStructInfo;
|
||||
const CERT_PUBLIC_KEY_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[] = {
|
||||
{ &info->Algorithm, CRYPT_AsnEncodeAlgorithmId, 0 },
|
||||
{ &info->PublicKey, CRYPT_AsnEncodeBits, 0 },
|
||||
|
@ -447,8 +442,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCert(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_SIGNED_CONTENT_INFO *info =
|
||||
(const CERT_SIGNED_CONTENT_INFO *)pvStructInfo;
|
||||
const CERT_SIGNED_CONTENT_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[] = {
|
||||
{ &info->ToBeSigned, CRYPT_CopyEncodedBlob, 0 },
|
||||
{ &info->SignatureAlgorithm, CRYPT_AsnEncodeAlgorithmId, 0 },
|
||||
|
@ -482,7 +476,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCertInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_INFO *info = (const CERT_INFO *)pvStructInfo;
|
||||
const CERT_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[10] = {
|
||||
{ &info->dwVersion, CRYPT_AsnEncodeCertVersion, 0 },
|
||||
{ &info->SerialNumber, CRYPT_AsnEncodeInteger, 0 },
|
||||
|
@ -619,7 +613,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLVersion(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const DWORD *ver = (const DWORD *)pvStructInfo;
|
||||
const DWORD *ver = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
/* CRL_V1 is not encoded */
|
||||
|
@ -646,7 +640,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRL_INFO *info = (const CRL_INFO *)pvStructInfo;
|
||||
const CRL_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[7] = {
|
||||
{ &info->dwVersion, CRYPT_AsnEncodeCRLVersion, 0 },
|
||||
{ &info->SignatureAlgorithm, CRYPT_AsnEncodeAlgorithmId, 0 },
|
||||
|
@ -730,7 +724,7 @@ static BOOL WINAPI CRYPT_AsnEncodeExtensions(DWORD dwCertEncodingType,
|
|||
__TRY
|
||||
{
|
||||
DWORD bytesNeeded, dataLen, lenBytes, i;
|
||||
const CERT_EXTENSIONS *exts = (const CERT_EXTENSIONS *)pvStructInfo;
|
||||
const CERT_EXTENSIONS *exts = pvStructInfo;
|
||||
|
||||
ret = TRUE;
|
||||
for (i = 0, dataLen = 0; ret && i < exts->cExtension; i++)
|
||||
|
@ -783,7 +777,7 @@ BOOL WINAPI CRYPT_AsnEncodeOid(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
LPCSTR pszObjId = (LPCSTR)pvStructInfo;
|
||||
LPCSTR pszObjId = pvStructInfo;
|
||||
DWORD bytesNeeded = 0, lenBytes;
|
||||
BOOL ret = TRUE;
|
||||
int firstPos = 0;
|
||||
|
@ -1007,7 +1001,7 @@ static BOOL WINAPI CRYPT_AsnEncodeNameValue(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_NAME_VALUE *value = (const CERT_NAME_VALUE *)pvStructInfo;
|
||||
const CERT_NAME_VALUE *value = pvStructInfo;
|
||||
|
||||
switch (value->dwValueType)
|
||||
{
|
||||
|
@ -1098,8 +1092,8 @@ static BOOL CRYPT_AsnEncodeRdnAttr(DWORD dwCertEncodingType,
|
|||
/* hack: a CERT_RDN_ATTR is identical to a CERT_NAME_VALUE beginning
|
||||
* with dwValueType, so "cast" it to get its encoded size
|
||||
*/
|
||||
ret = nameValueEncodeFunc(dwCertEncodingType, NULL,
|
||||
(CERT_NAME_VALUE *)&attr->dwValueType, 0, NULL, NULL, &size);
|
||||
ret = nameValueEncodeFunc(dwCertEncodingType, NULL, &attr->dwValueType,
|
||||
0, NULL, NULL, &size);
|
||||
if (ret)
|
||||
{
|
||||
bytesNeeded += size;
|
||||
|
@ -1125,9 +1119,8 @@ static BOOL CRYPT_AsnEncodeRdnAttr(DWORD dwCertEncodingType,
|
|||
{
|
||||
pbEncoded += size;
|
||||
size = bytesNeeded - 1 - lenBytes - size;
|
||||
ret = nameValueEncodeFunc(dwCertEncodingType,
|
||||
NULL, (CERT_NAME_VALUE *)&attr->dwValueType,
|
||||
0, NULL, pbEncoded, &size);
|
||||
ret = nameValueEncodeFunc(dwCertEncodingType, NULL,
|
||||
&attr->dwValueType, 0, NULL, pbEncoded, &size);
|
||||
if (!ret)
|
||||
*pcbEncoded = size;
|
||||
}
|
||||
|
@ -1147,7 +1140,7 @@ static BOOL CRYPT_AsnEncodeRdnAttr(DWORD dwCertEncodingType,
|
|||
|
||||
static int BLOBComp(const void *l, const void *r)
|
||||
{
|
||||
const CRYPT_DER_BLOB *a = (const CRYPT_DER_BLOB *)l, *b = (const CRYPT_DER_BLOB *)r;
|
||||
const CRYPT_DER_BLOB *a = l, *b = r;
|
||||
int ret;
|
||||
|
||||
if (!(ret = memcmp(a->pbData, b->pbData, min(a->cbData, b->cbData))))
|
||||
|
@ -1161,7 +1154,7 @@ static BOOL WINAPI CRYPT_DEREncodeSet(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const CRYPT_BLOB_ARRAY *set = (const CRYPT_BLOB_ARRAY *)pvStructInfo;
|
||||
const CRYPT_BLOB_ARRAY *set = pvStructInfo;
|
||||
DWORD bytesNeeded = 0, lenBytes, i;
|
||||
BOOL ret;
|
||||
|
||||
|
@ -1205,8 +1198,7 @@ static BOOL WINAPI CRYPT_DEREncodeItemsAsSet(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const struct DERSetDescriptor *desc =
|
||||
(const struct DERSetDescriptor *)pvStructInfo;
|
||||
const struct DERSetDescriptor *desc = pvStructInfo;
|
||||
CRYPT_BLOB_ARRAY setOf = { 0, NULL };
|
||||
BOOL ret = TRUE;
|
||||
DWORD i;
|
||||
|
@ -1344,7 +1336,7 @@ static BOOL WINAPI CRYPT_AsnEncodeOrCopyUnicodeNameValue(
|
|||
DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded,
|
||||
DWORD *pcbEncoded)
|
||||
{
|
||||
const CERT_NAME_VALUE *value = (const CERT_NAME_VALUE *)pvStructInfo;
|
||||
const CERT_NAME_VALUE *value = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
if (value->dwValueType == CERT_RDN_ENCODED_BLOB)
|
||||
|
@ -1364,7 +1356,7 @@ static BOOL WINAPI CRYPT_AsnEncodeUnicodeName(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_NAME_INFO *info = (const CERT_NAME_INFO *)pvStructInfo;
|
||||
const CERT_NAME_INFO *info = pvStructInfo;
|
||||
DWORD bytesNeeded = 0, lenBytes, size, i;
|
||||
|
||||
TRACE("encoding name with %d RDNs\n", info->cRDN);
|
||||
|
@ -1426,7 +1418,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCTLVersion(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const DWORD *ver = (const DWORD *)pvStructInfo;
|
||||
const DWORD *ver = pvStructInfo;
|
||||
BOOL ret;
|
||||
|
||||
/* CTL_V1 is not encoded */
|
||||
|
@ -1449,8 +1441,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCTLSubjectAlgorithm(
|
|||
DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded,
|
||||
DWORD *pcbEncoded)
|
||||
{
|
||||
const CRYPT_ALGORITHM_IDENTIFIER *algo =
|
||||
(const CRYPT_ALGORITHM_IDENTIFIER *)pvStructInfo;
|
||||
const CRYPT_ALGORITHM_IDENTIFIER *algo = pvStructInfo;
|
||||
BOOL ret;
|
||||
struct AsnEncodeSequenceItem items[2] = {
|
||||
{ algo->pszObjId, CRYPT_AsnEncodeOid, 0 },
|
||||
|
@ -1501,7 +1492,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCTLEntries(DWORD dwCertEncodingType,
|
|||
{
|
||||
BOOL ret;
|
||||
DWORD bytesNeeded, dataLen, lenBytes, i;
|
||||
const struct CTLEntries *entries = (const struct CTLEntries *)pvStructInfo;
|
||||
const struct CTLEntries *entries = pvStructInfo;
|
||||
|
||||
ret = TRUE;
|
||||
for (i = 0, dataLen = 0; ret && i < entries->cEntry; i++)
|
||||
|
@ -1551,7 +1542,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCTL(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CTL_INFO *info = (const CTL_INFO *)pvStructInfo;
|
||||
const CTL_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[9] = {
|
||||
{ &info->dwVersion, CRYPT_AsnEncodeCTLVersion, 0 },
|
||||
{ &info->SubjectUsage, CRYPT_AsnEncodeEnhancedKeyUsage, 0 },
|
||||
|
@ -1617,8 +1608,7 @@ static BOOL CRYPT_AsnEncodeSMIMECapability(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_SMIME_CAPABILITY *capability =
|
||||
(const CRYPT_SMIME_CAPABILITY *)pvStructInfo;
|
||||
const CRYPT_SMIME_CAPABILITY *capability = pvStructInfo;
|
||||
|
||||
if (!capability->pszObjId)
|
||||
SetLastError(E_INVALIDARG);
|
||||
|
@ -1651,8 +1641,7 @@ static BOOL WINAPI CRYPT_AsnEncodeSMIMECapabilities(DWORD dwCertEncodingType,
|
|||
__TRY
|
||||
{
|
||||
DWORD bytesNeeded, dataLen, lenBytes, i;
|
||||
const CRYPT_SMIME_CAPABILITIES *capabilities =
|
||||
(const CRYPT_SMIME_CAPABILITIES *)pvStructInfo;
|
||||
const CRYPT_SMIME_CAPABILITIES *capabilities = pvStructInfo;
|
||||
|
||||
ret = TRUE;
|
||||
for (i = 0, dataLen = 0; ret && i < capabilities->cCapability; i++)
|
||||
|
@ -1818,7 +1807,7 @@ static BOOL WINAPI CRYPT_AsnEncodePKCSAttribute(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_ATTRIBUTE *attr = (const CRYPT_ATTRIBUTE *)pvStructInfo;
|
||||
const CRYPT_ATTRIBUTE *attr = pvStructInfo;
|
||||
|
||||
if (!attr->pszObjId)
|
||||
SetLastError(E_INVALIDARG);
|
||||
|
@ -1850,8 +1839,7 @@ static BOOL WINAPI CRYPT_AsnEncodePKCSAttributes(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_ATTRIBUTES *attributes =
|
||||
(const CRYPT_ATTRIBUTES *)pvStructInfo;
|
||||
const CRYPT_ATTRIBUTES *attributes = pvStructInfo;
|
||||
struct DERSetDescriptor desc = { attributes->cAttr, attributes->rgAttr,
|
||||
sizeof(CRYPT_ATTRIBUTE), 0, CRYPT_AsnEncodePKCSAttribute };
|
||||
|
||||
|
@ -1872,7 +1860,7 @@ static BOOL WINAPI CRYPT_AsnEncodePKCSContentInfoInternal(
|
|||
DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded,
|
||||
DWORD *pcbEncoded)
|
||||
{
|
||||
const CRYPT_CONTENT_INFO *info = (const CRYPT_CONTENT_INFO *)pvStructInfo;
|
||||
const CRYPT_CONTENT_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[2] = {
|
||||
{ info->pszObjId, CRYPT_AsnEncodeOid, 0 },
|
||||
{ NULL, NULL, 0 },
|
||||
|
@ -1916,8 +1904,7 @@ static BOOL WINAPI CRYPT_AsnEncodePKCSContentInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_CONTENT_INFO *info =
|
||||
(const CRYPT_CONTENT_INFO *)pvStructInfo;
|
||||
const CRYPT_CONTENT_INFO *info = pvStructInfo;
|
||||
|
||||
if (!info->pszObjId)
|
||||
SetLastError(E_INVALIDARG);
|
||||
|
@ -2170,7 +2157,7 @@ static BOOL WINAPI CRYPT_AsnEncodeUnicodeNameValue(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_NAME_VALUE *value = (const CERT_NAME_VALUE *)pvStructInfo;
|
||||
const CERT_NAME_VALUE *value = pvStructInfo;
|
||||
|
||||
switch (value->dwValueType)
|
||||
{
|
||||
|
@ -2243,7 +2230,7 @@ static BOOL WINAPI CRYPT_AsnEncodeName(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_NAME_INFO *info = (const CERT_NAME_INFO *)pvStructInfo;
|
||||
const CERT_NAME_INFO *info = pvStructInfo;
|
||||
DWORD bytesNeeded = 0, lenBytes, size, i;
|
||||
|
||||
TRACE("encoding name with %d RDNs\n", info->cRDN);
|
||||
|
@ -2332,8 +2319,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAltNameEntry(DWORD dwCertEncodingType,
|
|||
LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags,
|
||||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
const CERT_ALT_NAME_ENTRY *entry =
|
||||
(const CERT_ALT_NAME_ENTRY *)pvStructInfo;
|
||||
const CERT_ALT_NAME_ENTRY *entry = pvStructInfo;
|
||||
BOOL ret;
|
||||
DWORD dataLen;
|
||||
BYTE tag;
|
||||
|
@ -2442,7 +2428,7 @@ static BOOL WINAPI CRYPT_AsnEncodeIntegerSwapBytes(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_DATA_BLOB *blob = (const CRYPT_DATA_BLOB *)pvStructInfo;
|
||||
const CRYPT_DATA_BLOB *blob = pvStructInfo;
|
||||
CRYPT_DATA_BLOB newBlob = { blob->cbData, NULL };
|
||||
|
||||
ret = TRUE;
|
||||
|
@ -2481,8 +2467,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAuthorityKeyId(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_AUTHORITY_KEY_ID_INFO *info =
|
||||
(const CERT_AUTHORITY_KEY_ID_INFO *)pvStructInfo;
|
||||
const CERT_AUTHORITY_KEY_ID_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[3] = { { 0 } };
|
||||
struct AsnEncodeTagSwappedItem swapped[3] = { { 0 } };
|
||||
struct AsnConstructedItem constructed = { 0 };
|
||||
|
@ -2537,8 +2522,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAltName(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_ALT_NAME_INFO *info =
|
||||
(const CERT_ALT_NAME_INFO *)pvStructInfo;
|
||||
const CERT_ALT_NAME_INFO *info = pvStructInfo;
|
||||
DWORD bytesNeeded, dataLen, lenBytes, i;
|
||||
|
||||
ret = TRUE;
|
||||
|
@ -2615,8 +2599,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAuthorityKeyId2(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_AUTHORITY_KEY_ID2_INFO *info =
|
||||
(const CERT_AUTHORITY_KEY_ID2_INFO *)pvStructInfo;
|
||||
const CERT_AUTHORITY_KEY_ID2_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[3] = { { 0 } };
|
||||
struct AsnEncodeTagSwappedItem swapped[3] = { { 0 } };
|
||||
DWORD cItem = 0, cSwapped = 0;
|
||||
|
@ -2689,8 +2672,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAuthorityInfoAccess(DWORD dwCertEncodingType,
|
|||
__TRY
|
||||
{
|
||||
DWORD bytesNeeded, dataLen, lenBytes, i;
|
||||
const CERT_AUTHORITY_INFO_ACCESS *info =
|
||||
(const CERT_AUTHORITY_INFO_ACCESS *)pvStructInfo;
|
||||
const CERT_AUTHORITY_INFO_ACCESS *info = pvStructInfo;
|
||||
|
||||
ret = TRUE;
|
||||
for (i = 0, dataLen = 0; ret && i < info->cAccDescr; i++)
|
||||
|
@ -2748,8 +2730,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBasicConstraints(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_BASIC_CONSTRAINTS_INFO *info =
|
||||
(const CERT_BASIC_CONSTRAINTS_INFO *)pvStructInfo;
|
||||
const CERT_BASIC_CONSTRAINTS_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[3] = {
|
||||
{ &info->SubjectType, CRYPT_AsnEncodeBits, 0 },
|
||||
{ 0 }
|
||||
|
@ -2788,8 +2769,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBasicConstraints2(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_BASIC_CONSTRAINTS2_INFO *info =
|
||||
(const CERT_BASIC_CONSTRAINTS2_INFO *)pvStructInfo;
|
||||
const CERT_BASIC_CONSTRAINTS2_INFO *info = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[2] = { { 0 } };
|
||||
DWORD cItem = 0;
|
||||
|
||||
|
@ -2981,8 +2961,7 @@ static BOOL WINAPI CRYPT_AsnEncodeRsaPubKey(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const BLOBHEADER *hdr =
|
||||
(const BLOBHEADER *)pvStructInfo;
|
||||
const BLOBHEADER *hdr = pvStructInfo;
|
||||
|
||||
if (hdr->bType != PUBLICKEYBLOB)
|
||||
{
|
||||
|
@ -3022,7 +3001,7 @@ BOOL WINAPI CRYPT_AsnEncodeOctets(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_DATA_BLOB *blob = (const CRYPT_DATA_BLOB *)pvStructInfo;
|
||||
const CRYPT_DATA_BLOB *blob = pvStructInfo;
|
||||
DWORD bytesNeeded, lenBytes;
|
||||
|
||||
TRACE("(%d, %p), %08x, %p, %p, %d\n", blob->cbData, blob->pbData,
|
||||
|
@ -3068,7 +3047,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBits(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_BIT_BLOB *blob = (const CRYPT_BIT_BLOB *)pvStructInfo;
|
||||
const CRYPT_BIT_BLOB *blob = pvStructInfo;
|
||||
DWORD bytesNeeded, lenBytes, dataBytes;
|
||||
BYTE unusedBits;
|
||||
|
||||
|
@ -3138,7 +3117,7 @@ static BOOL WINAPI CRYPT_AsnEncodeBitsSwapBytes(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRYPT_BIT_BLOB *blob = (const CRYPT_BIT_BLOB *)pvStructInfo;
|
||||
const CRYPT_BIT_BLOB *blob = pvStructInfo;
|
||||
CRYPT_BIT_BLOB newBlob = { blob->cbData, NULL, blob->cUnusedBits };
|
||||
|
||||
ret = TRUE;
|
||||
|
@ -3190,8 +3169,7 @@ static BOOL WINAPI CRYPT_AsnEncodeInteger(DWORD dwCertEncodingType,
|
|||
DWORD significantBytes, lenBytes, bytesNeeded;
|
||||
BYTE padByte = 0;
|
||||
BOOL pad = FALSE;
|
||||
const CRYPT_INTEGER_BLOB *blob =
|
||||
(const CRYPT_INTEGER_BLOB *)pvStructInfo;
|
||||
const CRYPT_INTEGER_BLOB *blob = pvStructInfo;
|
||||
|
||||
significantBytes = blob->cbData;
|
||||
if (significantBytes)
|
||||
|
@ -3278,8 +3256,7 @@ static BOOL WINAPI CRYPT_AsnEncodeUnsignedInteger(DWORD dwCertEncodingType,
|
|||
{
|
||||
DWORD significantBytes, lenBytes, bytesNeeded;
|
||||
BOOL pad = FALSE;
|
||||
const CRYPT_INTEGER_BLOB *blob =
|
||||
(const CRYPT_INTEGER_BLOB *)pvStructInfo;
|
||||
const CRYPT_INTEGER_BLOB *blob = pvStructInfo;
|
||||
|
||||
significantBytes = blob->cbData;
|
||||
if (significantBytes)
|
||||
|
@ -3382,8 +3359,7 @@ static BOOL WINAPI CRYPT_AsnEncodeUtcTime(DWORD dwCertEncodingType,
|
|||
else
|
||||
{
|
||||
/* Sanity check the year, this is a two-digit year format */
|
||||
ret = FileTimeToSystemTime((const FILETIME *)pvStructInfo,
|
||||
&sysTime);
|
||||
ret = FileTimeToSystemTime(pvStructInfo, &sysTime);
|
||||
if (ret && (sysTime.wYear < 1950 || sysTime.wYear > 2050))
|
||||
{
|
||||
SetLastError(CRYPT_E_BAD_ENCODE);
|
||||
|
@ -3439,8 +3415,7 @@ static BOOL CRYPT_AsnEncodeGeneralizedTime(DWORD dwCertEncodingType,
|
|||
}
|
||||
else
|
||||
{
|
||||
ret = FileTimeToSystemTime((const FILETIME *)pvStructInfo,
|
||||
&sysTime);
|
||||
ret = FileTimeToSystemTime(pvStructInfo, &sysTime);
|
||||
if (ret)
|
||||
ret = CRYPT_EncodeEnsureSpace(dwFlags, pEncodePara, pbEncoded,
|
||||
pcbEncoded, bytesNeeded);
|
||||
|
@ -3477,7 +3452,7 @@ static BOOL WINAPI CRYPT_AsnEncodeChoiceOfTime(DWORD dwCertEncodingType,
|
|||
SYSTEMTIME sysTime;
|
||||
|
||||
/* Check the year, if it's in the UTCTime range call that encode func */
|
||||
if (!FileTimeToSystemTime((const FILETIME *)pvStructInfo, &sysTime))
|
||||
if (!FileTimeToSystemTime(pvStructInfo, &sysTime))
|
||||
return FALSE;
|
||||
if (sysTime.wYear >= 1950 && sysTime.wYear <= 2050)
|
||||
ret = CRYPT_AsnEncodeUtcTime(dwCertEncodingType, lpszStructType,
|
||||
|
@ -3505,8 +3480,7 @@ static BOOL WINAPI CRYPT_AsnEncodeSequenceOfAny(DWORD dwCertEncodingType,
|
|||
__TRY
|
||||
{
|
||||
DWORD bytesNeeded, dataLen, lenBytes, i;
|
||||
const CRYPT_SEQUENCE_OF_ANY *seq =
|
||||
(const CRYPT_SEQUENCE_OF_ANY *)pvStructInfo;
|
||||
const CRYPT_SEQUENCE_OF_ANY *seq = pvStructInfo;
|
||||
|
||||
for (i = 0, dataLen = 0; i < seq->cValue; i++)
|
||||
dataLen += seq->rgValue[i].cbData;
|
||||
|
@ -3612,8 +3586,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCRLDistPoints(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRL_DIST_POINTS_INFO *info =
|
||||
(const CRL_DIST_POINTS_INFO *)pvStructInfo;
|
||||
const CRL_DIST_POINTS_INFO *info = pvStructInfo;
|
||||
|
||||
if (!info->cDistPoint)
|
||||
{
|
||||
|
@ -3692,8 +3665,7 @@ static BOOL WINAPI CRYPT_AsnEncodeEnhancedKeyUsage(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_ENHKEY_USAGE *usage =
|
||||
(const CERT_ENHKEY_USAGE *)pvStructInfo;
|
||||
const CERT_ENHKEY_USAGE *usage = pvStructInfo;
|
||||
DWORD bytesNeeded = 0, lenBytes, size, i;
|
||||
|
||||
ret = TRUE;
|
||||
|
@ -3756,8 +3728,7 @@ static BOOL WINAPI CRYPT_AsnEncodeIssuingDistPoint(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CRL_ISSUING_DIST_POINT *point =
|
||||
(const CRL_ISSUING_DIST_POINT *)pvStructInfo;
|
||||
const CRL_ISSUING_DIST_POINT *point = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[6] = { { 0 } };
|
||||
struct AsnConstructedItem constructed = { 0 };
|
||||
struct AsnEncodeTagSwappedItem swapped[5] = { { 0 } };
|
||||
|
@ -3843,8 +3814,7 @@ static BOOL CRYPT_AsnEncodeGeneralSubtree(DWORD dwCertEncodingType,
|
|||
PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded)
|
||||
{
|
||||
BOOL ret;
|
||||
const CERT_GENERAL_SUBTREE *subtree =
|
||||
(const CERT_GENERAL_SUBTREE *)pvStructInfo;
|
||||
const CERT_GENERAL_SUBTREE *subtree = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[3] = {
|
||||
{ &subtree->Base, CRYPT_AsnEncodeAltNameEntry, 0 },
|
||||
{ 0 }
|
||||
|
@ -3888,8 +3858,7 @@ static BOOL WINAPI CRYPT_AsnEncodeNameConstraints(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CERT_NAME_CONSTRAINTS_INFO *constraints =
|
||||
(const CERT_NAME_CONSTRAINTS_INFO *)pvStructInfo;
|
||||
const CERT_NAME_CONSTRAINTS_INFO *constraints = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[2] = { { 0 } };
|
||||
struct AsnEncodeTagSwappedItem swapped[2] = { { 0 } };
|
||||
DWORD i, cItem = 0, cSwapped = 0;
|
||||
|
@ -3978,8 +3947,7 @@ static BOOL WINAPI CRYPT_AsnEncodeIssuerSerialNumber(
|
|||
DWORD *pcbEncoded)
|
||||
{
|
||||
BOOL ret;
|
||||
const CERT_ISSUER_SERIAL_NUMBER *issuerSerial =
|
||||
(const CERT_ISSUER_SERIAL_NUMBER *)pvStructInfo;
|
||||
const CERT_ISSUER_SERIAL_NUMBER *issuerSerial = pvStructInfo;
|
||||
struct AsnEncodeSequenceItem items[] = {
|
||||
{ &issuerSerial->Issuer, CRYPT_CopyEncodedBlob, 0 },
|
||||
{ &issuerSerial->SerialNumber, CRYPT_AsnEncodeInteger, 0 },
|
||||
|
@ -4005,7 +3973,7 @@ static BOOL WINAPI CRYPT_AsnEncodePKCSSignerInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CMSG_SIGNER_INFO *info = (const CMSG_SIGNER_INFO *)pvStructInfo;
|
||||
const CMSG_SIGNER_INFO *info = pvStructInfo;
|
||||
|
||||
if (!info->Issuer.cbData)
|
||||
SetLastError(E_INVALIDARG);
|
||||
|
@ -4072,7 +4040,7 @@ static BOOL WINAPI CRYPT_AsnEncodeCMSSignerInfo(DWORD dwCertEncodingType,
|
|||
|
||||
__TRY
|
||||
{
|
||||
const CMSG_CMS_SIGNER_INFO *info = (const CMSG_CMS_SIGNER_INFO *)pvStructInfo;
|
||||
const CMSG_CMS_SIGNER_INFO *info = pvStructInfo;
|
||||
|
||||
if (info->SignerId.dwIdChoice != CERT_ID_ISSUER_SERIAL_NUMBER &&
|
||||
info->SignerId.dwIdChoice != CERT_ID_KEY_IDENTIFIER)
|
||||
|
@ -4531,6 +4499,20 @@ BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType,
|
|||
return ret;
|
||||
}
|
||||
|
||||
BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
|
||||
LPCWSTR szPassword, DWORD dwFlags)
|
||||
{
|
||||
return PFXExportCertStoreEx(hStore, pPFX, szPassword, NULL, dwFlags);
|
||||
}
|
||||
|
||||
BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
|
||||
LPCWSTR szPassword, void *pvReserved, DWORD dwFlags)
|
||||
{
|
||||
FIXME_(crypt)("(%p, %p, %p, %p, %08x): stub\n", hStore, pPFX, szPassword,
|
||||
pvReserved, dwFlags);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL WINAPI CryptExportPublicKeyInfo(HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProv, DWORD dwKeySpec,
|
||||
DWORD dwCertEncodingType, PCERT_PUBLIC_KEY_INFO pInfo, DWORD *pcbInfo)
|
||||
{
|
||||
|
|
|
@ -37,7 +37,7 @@ typedef struct _WINE_FILESTOREINFO
|
|||
|
||||
static void WINAPI CRYPT_FileCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %08x)\n", store, dwFlags);
|
||||
if (store->dirty)
|
||||
|
@ -51,7 +51,7 @@ static void WINAPI CRYPT_FileCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
|||
static BOOL WINAPI CRYPT_FileWriteCert(HCERTSTORE hCertStore,
|
||||
PCCERT_CONTEXT cert, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %d)\n", hCertStore, cert, dwFlags);
|
||||
store->dirty = TRUE;
|
||||
|
@ -61,7 +61,7 @@ static BOOL WINAPI CRYPT_FileWriteCert(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_FileDeleteCert(HCERTSTORE hCertStore,
|
||||
PCCERT_CONTEXT pCertContext, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %08x)\n", hCertStore, pCertContext, dwFlags);
|
||||
store->dirty = TRUE;
|
||||
|
@ -71,7 +71,7 @@ static BOOL WINAPI CRYPT_FileDeleteCert(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_FileWriteCRL(HCERTSTORE hCertStore,
|
||||
PCCRL_CONTEXT crl, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %d)\n", hCertStore, crl, dwFlags);
|
||||
store->dirty = TRUE;
|
||||
|
@ -81,7 +81,7 @@ static BOOL WINAPI CRYPT_FileWriteCRL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_FileDeleteCRL(HCERTSTORE hCertStore,
|
||||
PCCRL_CONTEXT pCrlContext, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %08x)\n", hCertStore, pCrlContext, dwFlags);
|
||||
store->dirty = TRUE;
|
||||
|
@ -91,7 +91,7 @@ static BOOL WINAPI CRYPT_FileDeleteCRL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_FileWriteCTL(HCERTSTORE hCertStore,
|
||||
PCCTL_CONTEXT ctl, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %d)\n", hCertStore, ctl, dwFlags);
|
||||
store->dirty = TRUE;
|
||||
|
@ -101,7 +101,7 @@ static BOOL WINAPI CRYPT_FileWriteCTL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_FileDeleteCTL(HCERTSTORE hCertStore,
|
||||
PCCTL_CONTEXT pCtlContext, DWORD dwFlags)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %08x)\n", hCertStore, pCtlContext, dwFlags);
|
||||
store->dirty = TRUE;
|
||||
|
@ -129,7 +129,7 @@ static BOOL CRYPT_ReadBlobFromFile(HANDLE file, PCERT_BLOB blob)
|
|||
static BOOL WINAPI CRYPT_FileControl(HCERTSTORE hCertStore, DWORD dwFlags,
|
||||
DWORD dwCtrlType, void const *pvCtrlPara)
|
||||
{
|
||||
PWINE_FILESTOREINFO store = (PWINE_FILESTOREINFO)hCertStore;
|
||||
PWINE_FILESTOREINFO store = hCertStore;
|
||||
BOOL ret;
|
||||
|
||||
TRACE("(%p, %08x, %d, %p)\n", hCertStore, dwFlags, dwCtrlType,
|
||||
|
@ -292,7 +292,7 @@ PWINECRYPT_CERTSTORE CRYPT_FileNameOpenStoreW(HCRYPTPROV hCryptProv,
|
|||
DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
HCERTSTORE store = 0;
|
||||
LPCWSTR fileName = (LPCWSTR)pvPara;
|
||||
LPCWSTR fileName = pvPara;
|
||||
DWORD access, create;
|
||||
HANDLE file;
|
||||
|
||||
|
@ -376,7 +376,7 @@ PWINECRYPT_CERTSTORE CRYPT_FileNameOpenStoreW(HCRYPTPROV hCryptProv,
|
|||
CryptReleaseContext(hCryptProv, 0);
|
||||
}
|
||||
}
|
||||
return (PWINECRYPT_CERTSTORE)store;
|
||||
return store;
|
||||
}
|
||||
|
||||
PWINECRYPT_CERTSTORE CRYPT_FileNameOpenStoreA(HCRYPTPROV hCryptProv,
|
||||
|
@ -386,21 +386,21 @@ PWINECRYPT_CERTSTORE CRYPT_FileNameOpenStoreA(HCRYPTPROV hCryptProv,
|
|||
PWINECRYPT_CERTSTORE ret = NULL;
|
||||
|
||||
TRACE("(%ld, %08x, %s)\n", hCryptProv, dwFlags,
|
||||
debugstr_a((LPCSTR)pvPara));
|
||||
debugstr_a(pvPara));
|
||||
|
||||
if (!pvPara)
|
||||
{
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
return NULL;
|
||||
}
|
||||
len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pvPara, -1, NULL, 0);
|
||||
len = MultiByteToWideChar(CP_ACP, 0, pvPara, -1, NULL, 0);
|
||||
if (len)
|
||||
{
|
||||
LPWSTR storeName = CryptMemAlloc(len * sizeof(WCHAR));
|
||||
|
||||
if (storeName)
|
||||
{
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pvPara, -1, storeName, len);
|
||||
MultiByteToWideChar(CP_ACP, 0, pvPara, -1, storeName, len);
|
||||
ret = CRYPT_FileNameOpenStoreW(hCryptProv, dwFlags, storeName);
|
||||
CryptMemFree(storeName);
|
||||
}
|
||||
|
|
|
@ -109,7 +109,7 @@ static const BYTE empty_data_content[] = { 0x04,0x00 };
|
|||
|
||||
static void CDataEncodeMsg_Close(HCRYPTMSG hCryptMsg)
|
||||
{
|
||||
CDataEncodeMsg *msg = (CDataEncodeMsg *)hCryptMsg;
|
||||
CDataEncodeMsg *msg = hCryptMsg;
|
||||
|
||||
if (msg->bare_content != empty_data_content)
|
||||
LocalFree(msg->bare_content);
|
||||
|
@ -191,7 +191,7 @@ static BOOL CRYPT_EncodeDataContentInfoHeader(CDataEncodeMsg *msg,
|
|||
static BOOL CDataEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
|
||||
DWORD cbData, BOOL fFinal)
|
||||
{
|
||||
CDataEncodeMsg *msg = (CDataEncodeMsg *)hCryptMsg;
|
||||
CDataEncodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (msg->base.state == MsgStateFinalized)
|
||||
|
@ -320,7 +320,7 @@ static BOOL CRYPT_CopyParam(void *pvData, DWORD *pcbData, const void *src,
|
|||
static BOOL CDataEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
||||
DWORD dwIndex, void *pvData, DWORD *pcbData)
|
||||
{
|
||||
CDataEncodeMsg *msg = (CDataEncodeMsg *)hCryptMsg;
|
||||
CDataEncodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
switch (dwParamType)
|
||||
|
@ -372,7 +372,7 @@ static HCRYPTMSG CDataEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo,
|
|||
msg->bare_content_len = sizeof(empty_data_content);
|
||||
msg->bare_content = (LPBYTE)empty_data_content;
|
||||
}
|
||||
return (HCRYPTMSG)msg;
|
||||
return msg;
|
||||
}
|
||||
|
||||
typedef struct _CHashEncodeMsg
|
||||
|
@ -385,7 +385,7 @@ typedef struct _CHashEncodeMsg
|
|||
|
||||
static void CHashEncodeMsg_Close(HCRYPTMSG hCryptMsg)
|
||||
{
|
||||
CHashEncodeMsg *msg = (CHashEncodeMsg *)hCryptMsg;
|
||||
CHashEncodeMsg *msg = hCryptMsg;
|
||||
|
||||
CryptMemFree(msg->data.pbData);
|
||||
CryptDestroyHash(msg->hash);
|
||||
|
@ -444,7 +444,7 @@ static BOOL CRYPT_EncodePKCSDigestedData(CHashEncodeMsg *msg, void *pvData,
|
|||
static BOOL CHashEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
||||
DWORD dwIndex, void *pvData, DWORD *pcbData)
|
||||
{
|
||||
CHashEncodeMsg *msg = (CHashEncodeMsg *)hCryptMsg;
|
||||
CHashEncodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %d, %d, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
|
||||
|
@ -487,8 +487,7 @@ static BOOL CHashEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
|||
break;
|
||||
}
|
||||
case CMSG_COMPUTED_HASH_PARAM:
|
||||
ret = CryptGetHashParam(msg->hash, HP_HASHVAL, (BYTE *)pvData, pcbData,
|
||||
0);
|
||||
ret = CryptGetHashParam(msg->hash, HP_HASHVAL, pvData, pcbData, 0);
|
||||
break;
|
||||
case CMSG_VERSION_PARAM:
|
||||
if (msg->base.state != MsgStateFinalized)
|
||||
|
@ -512,7 +511,7 @@ static BOOL CHashEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
|||
static BOOL CHashEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
|
||||
DWORD cbData, BOOL fFinal)
|
||||
{
|
||||
CHashEncodeMsg *msg = (CHashEncodeMsg *)hCryptMsg;
|
||||
CHashEncodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %p, %d, %d)\n", hCryptMsg, pbData, cbData, fFinal);
|
||||
|
@ -555,8 +554,7 @@ static HCRYPTMSG CHashEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo,
|
|||
LPSTR pszInnerContentObjID, PCMSG_STREAM_INFO pStreamInfo)
|
||||
{
|
||||
CHashEncodeMsg *msg;
|
||||
const CMSG_HASHED_ENCODE_INFO *info =
|
||||
(const CMSG_HASHED_ENCODE_INFO *)pvMsgEncodeInfo;
|
||||
const CMSG_HASHED_ENCODE_INFO *info = pvMsgEncodeInfo;
|
||||
HCRYPTPROV prov;
|
||||
ALG_ID algID;
|
||||
|
||||
|
@ -592,7 +590,7 @@ static HCRYPTMSG CHashEncodeMsg_Open(DWORD dwFlags, const void *pvMsgEncodeInfo,
|
|||
msg = NULL;
|
||||
}
|
||||
}
|
||||
return (HCRYPTMSG)msg;
|
||||
return msg;
|
||||
}
|
||||
|
||||
typedef struct _CMSG_SIGNER_ENCODE_INFO_WITH_CMS
|
||||
|
@ -1086,7 +1084,7 @@ static BOOL CSignedMsgData_UpdateAuthenticatedAttributes(
|
|||
|
||||
ret = CryptEncodeObjectEx(X509_ASN_ENCODING, PKCS_ATTRIBUTES,
|
||||
&msg_data->info->rgSignerInfo[i].AuthAttrs,
|
||||
CRYPT_ENCODE_ALLOC_FLAG, NULL, (LPBYTE)&encodedAttrs, &size);
|
||||
CRYPT_ENCODE_ALLOC_FLAG, NULL, &encodedAttrs, &size);
|
||||
if (ret)
|
||||
{
|
||||
ret = CryptHashData(
|
||||
|
@ -1176,7 +1174,7 @@ typedef struct _CSignedEncodeMsg
|
|||
|
||||
static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
|
||||
{
|
||||
CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
|
||||
CSignedEncodeMsg *msg = hCryptMsg;
|
||||
DWORD i;
|
||||
|
||||
CryptMemFree(msg->innerOID);
|
||||
|
@ -1193,7 +1191,7 @@ static void CSignedEncodeMsg_Close(HCRYPTMSG hCryptMsg)
|
|||
static BOOL CSignedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
||||
DWORD dwIndex, void *pvData, DWORD *pcbData)
|
||||
{
|
||||
CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
|
||||
CSignedEncodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
switch (dwParamType)
|
||||
|
@ -1301,7 +1299,7 @@ static BOOL CSignedEncodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
|||
static BOOL CSignedEncodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
|
||||
DWORD cbData, BOOL fFinal)
|
||||
{
|
||||
CSignedEncodeMsg *msg = (CSignedEncodeMsg *)hCryptMsg;
|
||||
CSignedEncodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if (msg->base.state == MsgStateFinalized)
|
||||
|
@ -1345,8 +1343,7 @@ static HCRYPTMSG CSignedEncodeMsg_Open(DWORD dwFlags,
|
|||
const void *pvMsgEncodeInfo, LPSTR pszInnerContentObjID,
|
||||
PCMSG_STREAM_INFO pStreamInfo)
|
||||
{
|
||||
const CMSG_SIGNED_ENCODE_INFO_WITH_CMS *info =
|
||||
(const CMSG_SIGNED_ENCODE_INFO_WITH_CMS *)pvMsgEncodeInfo;
|
||||
const CMSG_SIGNED_ENCODE_INFO_WITH_CMS *info = pvMsgEncodeInfo;
|
||||
DWORD i;
|
||||
CSignedEncodeMsg *msg;
|
||||
|
||||
|
@ -1510,7 +1507,7 @@ typedef struct _CDecodeMsg
|
|||
|
||||
static void CDecodeMsg_Close(HCRYPTMSG hCryptMsg)
|
||||
{
|
||||
CDecodeMsg *msg = (CDecodeMsg *)hCryptMsg;
|
||||
CDecodeMsg *msg = hCryptMsg;
|
||||
|
||||
if (msg->base.open_flags & CMSG_CRYPT_RELEASE_CONTEXT_FLAG)
|
||||
CryptReleaseContext(msg->crypt_prov, 0);
|
||||
|
@ -1563,8 +1560,7 @@ static BOOL CDecodeMsg_DecodeDataContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob)
|
|||
DWORD size;
|
||||
|
||||
ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
|
||||
blob->pbData, blob->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, (LPBYTE)&data,
|
||||
&size);
|
||||
blob->pbData, blob->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &data, &size);
|
||||
if (ret)
|
||||
{
|
||||
ret = ContextPropertyList_SetProperty(msg->properties,
|
||||
|
@ -1703,7 +1699,7 @@ static BOOL CDecodeMsg_DecodeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob,
|
|||
|
||||
ret = CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_CONTENT_INFO,
|
||||
msg->msg_data.pbData, msg->msg_data.cbData, CRYPT_DECODE_ALLOC_FLAG,
|
||||
NULL, (LPBYTE)&info, &size);
|
||||
NULL, &info, &size);
|
||||
if (ret)
|
||||
{
|
||||
if (!strcmp(info->pszObjId, szOID_RSA_data))
|
||||
|
@ -1802,7 +1798,7 @@ static BOOL CDecodeMsg_FinalizeSignedContent(CDecodeMsg *msg,
|
|||
|
||||
ret = CryptDecodeObjectEx(X509_ASN_ENCODING,
|
||||
X509_OCTET_STRING, content->pbData, content->cbData,
|
||||
CRYPT_DECODE_ALLOC_FLAG, NULL, (LPBYTE)&blob, &size);
|
||||
CRYPT_DECODE_ALLOC_FLAG, NULL, &blob, &size);
|
||||
if (ret)
|
||||
{
|
||||
ret = CSignedMsgData_Update(&msg->u.signed_data,
|
||||
|
@ -1839,7 +1835,7 @@ static BOOL CDecodeMsg_FinalizeContent(CDecodeMsg *msg, CRYPT_DER_BLOB *blob)
|
|||
static BOOL CDecodeMsg_Update(HCRYPTMSG hCryptMsg, const BYTE *pbData,
|
||||
DWORD cbData, BOOL fFinal)
|
||||
{
|
||||
CDecodeMsg *msg = (CDecodeMsg *)hCryptMsg;
|
||||
CDecodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %p, %d, %d)\n", hCryptMsg, pbData, cbData, fFinal);
|
||||
|
@ -1939,7 +1935,7 @@ static BOOL CDecodeHashMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
|
|||
{
|
||||
ret = CRYPT_CopyParam(pvData, pcbData, blob.pbData, blob.cbData);
|
||||
if (ret && pvData)
|
||||
CRYPT_FixUpAlgorithmID((CRYPT_ALGORITHM_IDENTIFIER *)pvData);
|
||||
CRYPT_FixUpAlgorithmID(pvData);
|
||||
}
|
||||
else
|
||||
SetLastError(CRYPT_E_INVALID_MSG_TYPE);
|
||||
|
@ -2136,7 +2132,7 @@ static BOOL CRYPT_CopySignerInfo(void *pvData, DWORD *pcbData,
|
|||
else
|
||||
{
|
||||
LPBYTE nextData = (BYTE *)pvData + sizeof(CMSG_SIGNER_INFO);
|
||||
CMSG_SIGNER_INFO *out = (CMSG_SIGNER_INFO *)pvData;
|
||||
CMSG_SIGNER_INFO *out = pvData;
|
||||
|
||||
ret = TRUE;
|
||||
out->dwVersion = in->dwVersion;
|
||||
|
@ -2206,7 +2202,7 @@ static BOOL CRYPT_CopyCMSSignerInfo(void *pvData, DWORD *pcbData,
|
|||
else
|
||||
{
|
||||
LPBYTE nextData = (BYTE *)pvData + sizeof(CMSG_CMS_SIGNER_INFO);
|
||||
CMSG_CMS_SIGNER_INFO *out = (CMSG_CMS_SIGNER_INFO *)pvData;
|
||||
CMSG_CMS_SIGNER_INFO *out = pvData;
|
||||
|
||||
out->dwVersion = in->dwVersion;
|
||||
out->SignerId.dwIdChoice = in->SignerId.dwIdChoice;
|
||||
|
@ -2265,7 +2261,7 @@ static BOOL CRYPT_CopySignerCertInfo(void *pvData, DWORD *pcbData,
|
|||
else
|
||||
{
|
||||
LPBYTE nextData = (BYTE *)pvData + sizeof(CERT_INFO);
|
||||
CERT_INFO *out = (CERT_INFO *)pvData;
|
||||
CERT_INFO *out = pvData;
|
||||
|
||||
memset(out, 0, sizeof(CERT_INFO));
|
||||
if (in->SignerId.dwIdChoice == CERT_ID_ISSUER_SERIAL_NUMBER)
|
||||
|
@ -2306,7 +2302,7 @@ static BOOL CDecodeSignedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
|
|||
ret = CryptDecodeObjectEx(X509_ASN_ENCODING, X509_OCTET_STRING,
|
||||
msg->u.signed_data.info->content.Content.pbData,
|
||||
msg->u.signed_data.info->content.Content.cbData,
|
||||
CRYPT_DECODE_ALLOC_FLAG, NULL, (LPBYTE)&blob, &size);
|
||||
CRYPT_DECODE_ALLOC_FLAG, NULL, &blob, &size);
|
||||
if (ret)
|
||||
{
|
||||
ret = CRYPT_CopyParam(pvData, pcbData, blob->pbData,
|
||||
|
@ -2453,7 +2449,7 @@ static BOOL CDecodeSignedMsg_GetParam(CDecodeMsg *msg, DWORD dwParamType,
|
|||
static BOOL CDecodeMsg_GetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
||||
DWORD dwIndex, void *pvData, DWORD *pcbData)
|
||||
{
|
||||
CDecodeMsg *msg = (CDecodeMsg *)hCryptMsg;
|
||||
CDecodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
switch (msg->type)
|
||||
|
@ -2628,12 +2624,11 @@ static BOOL CDecodeSignedMsg_VerifySignatureEx(CDecodeMsg *msg,
|
|||
{
|
||||
case CMSG_VERIFY_SIGNER_PUBKEY:
|
||||
ret = CDecodeSignedMsg_VerifySignatureWithKey(msg,
|
||||
para->hCryptProv, para->dwSignerIndex,
|
||||
(PCERT_PUBLIC_KEY_INFO)para->pvSigner);
|
||||
para->hCryptProv, para->dwSignerIndex, para->pvSigner);
|
||||
break;
|
||||
case CMSG_VERIFY_SIGNER_CERT:
|
||||
{
|
||||
PCCERT_CONTEXT cert = (PCCERT_CONTEXT)para->pvSigner;
|
||||
PCCERT_CONTEXT cert = para->pvSigner;
|
||||
|
||||
ret = CDecodeSignedMsg_VerifySignatureWithKey(msg, para->hCryptProv,
|
||||
para->dwSignerIndex, &cert->pCertInfo->SubjectPublicKeyInfo);
|
||||
|
@ -2650,7 +2645,7 @@ static BOOL CDecodeSignedMsg_VerifySignatureEx(CDecodeMsg *msg,
|
|||
static BOOL CDecodeMsg_Control(HCRYPTMSG hCryptMsg, DWORD dwFlags,
|
||||
DWORD dwCtrlType, const void *pvCtrlPara)
|
||||
{
|
||||
CDecodeMsg *msg = (CDecodeMsg *)hCryptMsg;
|
||||
CDecodeMsg *msg = hCryptMsg;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
switch (dwCtrlType)
|
||||
|
@ -2743,7 +2738,7 @@ HCRYPTMSG WINAPI CryptMsgDuplicate(HCRYPTMSG hCryptMsg)
|
|||
|
||||
if (hCryptMsg)
|
||||
{
|
||||
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||
CryptMsgBase *msg = hCryptMsg;
|
||||
|
||||
InterlockedIncrement(&msg->ref);
|
||||
}
|
||||
|
@ -2756,7 +2751,7 @@ BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg)
|
|||
|
||||
if (hCryptMsg)
|
||||
{
|
||||
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||
CryptMsgBase *msg = hCryptMsg;
|
||||
|
||||
if (InterlockedDecrement(&msg->ref) == 0)
|
||||
{
|
||||
|
@ -2772,7 +2767,7 @@ BOOL WINAPI CryptMsgClose(HCRYPTMSG hCryptMsg)
|
|||
BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,
|
||||
DWORD cbData, BOOL fFinal)
|
||||
{
|
||||
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||
CryptMsgBase *msg = hCryptMsg;
|
||||
|
||||
TRACE("(%p, %p, %d, %d)\n", hCryptMsg, pbData, cbData, fFinal);
|
||||
|
||||
|
@ -2782,7 +2777,7 @@ BOOL WINAPI CryptMsgUpdate(HCRYPTMSG hCryptMsg, const BYTE *pbData,
|
|||
BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
||||
DWORD dwIndex, void *pvData, DWORD *pcbData)
|
||||
{
|
||||
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||
CryptMsgBase *msg = hCryptMsg;
|
||||
|
||||
TRACE("(%p, %d, %d, %p, %p)\n", hCryptMsg, dwParamType, dwIndex,
|
||||
pvData, pcbData);
|
||||
|
@ -2792,7 +2787,7 @@ BOOL WINAPI CryptMsgGetParam(HCRYPTMSG hCryptMsg, DWORD dwParamType,
|
|||
BOOL WINAPI CryptMsgControl(HCRYPTMSG hCryptMsg, DWORD dwFlags,
|
||||
DWORD dwCtrlType, const void *pvCtrlPara)
|
||||
{
|
||||
CryptMsgBase *msg = (CryptMsgBase *)hCryptMsg;
|
||||
CryptMsgBase *msg = hCryptMsg;
|
||||
|
||||
TRACE("(%p, %08x, %d, %p)\n", hCryptMsg, dwFlags, dwCtrlType,
|
||||
pvCtrlPara);
|
||||
|
|
|
@ -108,11 +108,11 @@ static BOOL CRYPT_QueryContextObject(DWORD dwObjectType, const void *pvObject,
|
|||
/* Cert, CRL, and CTL contexts can't be "embedded" in a file, so
|
||||
* just read the file directly
|
||||
*/
|
||||
ret = CRYPT_ReadBlobFromFile((LPCWSTR)pvObject, &fileBlob);
|
||||
ret = CRYPT_ReadBlobFromFile(pvObject, &fileBlob);
|
||||
blob = &fileBlob;
|
||||
break;
|
||||
case CERT_QUERY_OBJECT_BLOB:
|
||||
blob = (const CERT_BLOB *)pvObject;
|
||||
blob = pvObject;
|
||||
ret = TRUE;
|
||||
break;
|
||||
default:
|
||||
|
@ -198,11 +198,11 @@ static BOOL CRYPT_QuerySerializedContextObject(DWORD dwObjectType,
|
|||
/* Cert, CRL, and CTL contexts can't be "embedded" in a file, so
|
||||
* just read the file directly
|
||||
*/
|
||||
ret = CRYPT_ReadBlobFromFile((LPCWSTR)pvObject, &fileBlob);
|
||||
ret = CRYPT_ReadBlobFromFile(pvObject, &fileBlob);
|
||||
blob = &fileBlob;
|
||||
break;
|
||||
case CERT_QUERY_OBJECT_BLOB:
|
||||
blob = (const CERT_BLOB *)pvObject;
|
||||
blob = pvObject;
|
||||
ret = TRUE;
|
||||
break;
|
||||
default:
|
||||
|
@ -287,7 +287,7 @@ static BOOL CRYPT_QuerySerializedStoreObject(DWORD dwObjectType,
|
|||
const void *pvObject, DWORD *pdwMsgAndCertEncodingType, DWORD *pdwContentType,
|
||||
HCERTSTORE *phCertStore, HCRYPTMSG *phMsg)
|
||||
{
|
||||
LPCWSTR fileName = (LPCWSTR)pvObject;
|
||||
LPCWSTR fileName = pvObject;
|
||||
HANDLE file;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
|
@ -450,11 +450,11 @@ static BOOL CRYPT_QueryMessageObject(DWORD dwObjectType, const void *pvObject,
|
|||
/* This isn't an embedded PKCS7 message, so just read the file
|
||||
* directly
|
||||
*/
|
||||
ret = CRYPT_ReadBlobFromFile((LPCWSTR)pvObject, &fileBlob);
|
||||
ret = CRYPT_ReadBlobFromFile(pvObject, &fileBlob);
|
||||
blob = &fileBlob;
|
||||
break;
|
||||
case CERT_QUERY_OBJECT_BLOB:
|
||||
blob = (const CERT_BLOB *)pvObject;
|
||||
blob = pvObject;
|
||||
ret = TRUE;
|
||||
break;
|
||||
default:
|
||||
|
@ -583,7 +583,7 @@ static BOOL CRYPT_QueryEmbeddedMessageObject(DWORD dwObjectType,
|
|||
GUID subject;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("%s\n", debugstr_w((LPCWSTR)pvObject));
|
||||
TRACE("%s\n", debugstr_w(pvObject));
|
||||
|
||||
if (dwObjectType != CERT_QUERY_OBJECT_FILE)
|
||||
{
|
||||
|
@ -592,11 +592,11 @@ static BOOL CRYPT_QueryEmbeddedMessageObject(DWORD dwObjectType,
|
|||
SetLastError(E_INVALIDARG);
|
||||
return FALSE;
|
||||
}
|
||||
file = CreateFileW((LPCWSTR)pvObject, GENERIC_READ, FILE_SHARE_READ,
|
||||
file = CreateFileW(pvObject, GENERIC_READ, FILE_SHARE_READ,
|
||||
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (file != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
ret = CryptSIPRetrieveSubjectGuid((LPCWSTR)pvObject, file, &subject);
|
||||
ret = CryptSIPRetrieveSubjectGuid(pvObject, file, &subject);
|
||||
if (ret)
|
||||
{
|
||||
SIP_DISPATCH_INFO sip;
|
||||
|
@ -614,7 +614,7 @@ static BOOL CRYPT_QueryEmbeddedMessageObject(DWORD dwObjectType,
|
|||
subjectInfo.cbSize = sizeof(subjectInfo);
|
||||
subjectInfo.pgSubjectType = &subject;
|
||||
subjectInfo.hFile = file;
|
||||
subjectInfo.pwsFileName = (LPCWSTR)pvObject;
|
||||
subjectInfo.pwsFileName = pvObject;
|
||||
ret = sip.pfGet(&subjectInfo, &encodingType, 0, &blob.cbData,
|
||||
NULL);
|
||||
if (ret)
|
||||
|
@ -1623,7 +1623,7 @@ static BOOL WINAPI CRYPT_FormatAuthorityInfoAccess(DWORD dwCertEncodingType,
|
|||
else
|
||||
{
|
||||
*pcbFormat = bytesNeeded;
|
||||
strcpyW((LPWSTR)pbFormat, infoNotAvailable);
|
||||
strcpyW(pbFormat, infoNotAvailable);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2021,7 +2021,7 @@ static BOOL WINAPI CRYPT_FormatCRLDistPoints(DWORD dwCertEncodingType,
|
|||
else
|
||||
{
|
||||
*pcbFormat = bytesNeeded;
|
||||
strcpyW((LPWSTR)pbFormat, infoNotAvailable);
|
||||
strcpyW(pbFormat, infoNotAvailable);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -81,8 +81,9 @@ static const WCHAR ROOT[] = {'R','O','O','T',0};
|
|||
static const WCHAR MY[] = {'M','Y',0};
|
||||
static const WCHAR CA[] = {'C','A',0};
|
||||
static const WCHAR ADDRESSBOOK[] = {'A','D','D','R','E','S','S','B','O','O','K',0};
|
||||
static const LPCWSTR LocalizedKeys[] = {ROOT,MY,CA,ADDRESSBOOK};
|
||||
static WCHAR LocalizedNames[4][256];
|
||||
static const WCHAR TRUSTEDPUBLISHER[] = {'T','r','u','s','t','e','d','P','u','b','l','i','s','h','e','r',0};
|
||||
static const LPCWSTR LocalizedKeys[] = {ROOT,MY,CA,ADDRESSBOOK,TRUSTEDPUBLISHER};
|
||||
static WCHAR LocalizedNames[sizeof(LocalizedKeys)/sizeof(LocalizedKeys[0])][256];
|
||||
|
||||
static void free_function_sets(void)
|
||||
{
|
||||
|
@ -122,7 +123,7 @@ HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName,
|
|||
{
|
||||
if (!strcasecmp(pszFuncName, cursor->name))
|
||||
{
|
||||
ret = (HCRYPTOIDFUNCSET)cursor;
|
||||
ret = cursor;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -150,7 +151,7 @@ HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName,
|
|||
}
|
||||
LeaveCriticalSection(&funcSetCS);
|
||||
|
||||
return (HCRYPTOIDFUNCSET)ret;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char *CRYPT_GetKeyName(DWORD dwEncodingType, LPCSTR pszFuncName,
|
||||
|
@ -193,7 +194,7 @@ BOOL WINAPI CryptGetDefaultOIDDllList(HCRYPTOIDFUNCSET hFuncSet,
|
|||
DWORD dwEncodingType, LPWSTR pwszDllList, DWORD *pcchDllList)
|
||||
{
|
||||
BOOL ret = TRUE;
|
||||
struct OIDFunctionSet *set = (struct OIDFunctionSet *)hFuncSet;
|
||||
struct OIDFunctionSet *set = hFuncSet;
|
||||
char *keyName;
|
||||
HKEY key;
|
||||
long rc;
|
||||
|
@ -243,7 +244,7 @@ BOOL WINAPI CryptInstallOIDFunctionAddress(HMODULE hModule,
|
|||
TRACE("(%p, %d, %s, %d, %p, %08x)\n", hModule, dwEncodingType,
|
||||
debugstr_a(pszFuncName), cFuncEntry, rgFuncEntry, dwFlags);
|
||||
|
||||
set = (struct OIDFunctionSet *)CryptInitOIDFunctionSet(pszFuncName, 0);
|
||||
set = CryptInitOIDFunctionSet(pszFuncName, 0);
|
||||
if (set)
|
||||
{
|
||||
DWORD i;
|
||||
|
@ -385,7 +386,7 @@ BOOL WINAPI CryptGetOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
|
|||
HCRYPTOIDFUNCADDR *phFuncAddr)
|
||||
{
|
||||
BOOL ret = FALSE;
|
||||
struct OIDFunctionSet *set = (struct OIDFunctionSet *)hFuncSet;
|
||||
struct OIDFunctionSet *set = hFuncSet;
|
||||
|
||||
TRACE("(%p, %d, %s, %08x, %p, %p)\n", hFuncSet, dwEncodingType,
|
||||
debugstr_a(pszOID), dwFlags, ppvFuncAddr, phFuncAddr);
|
||||
|
@ -440,7 +441,7 @@ BOOL WINAPI CryptFreeOIDFunctionAddress(HCRYPTOIDFUNCADDR hFuncAddr,
|
|||
*/
|
||||
if (hFuncAddr)
|
||||
{
|
||||
struct FuncAddr *addr = (struct FuncAddr *)hFuncAddr;
|
||||
struct FuncAddr *addr = hFuncAddr;
|
||||
|
||||
CryptMemFree(addr->dllList);
|
||||
FreeLibrary(addr->lib);
|
||||
|
@ -473,7 +474,7 @@ BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
|
|||
DWORD dwEncodingType, LPCWSTR pwszDll, DWORD dwFlags, void **ppvFuncAddr,
|
||||
HCRYPTOIDFUNCADDR *phFuncAddr)
|
||||
{
|
||||
struct OIDFunctionSet *set = (struct OIDFunctionSet *)hFuncSet;
|
||||
struct OIDFunctionSet *set = hFuncSet;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %d, %s, %08x, %p, %p)\n", hFuncSet, dwEncodingType,
|
||||
|
@ -508,7 +509,7 @@ BOOL WINAPI CryptGetDefaultOIDFunctionAddress(HCRYPTOIDFUNCSET hFuncSet,
|
|||
}
|
||||
else
|
||||
{
|
||||
struct FuncAddr *addr = (struct FuncAddr *)*phFuncAddr;
|
||||
struct FuncAddr *addr = *phFuncAddr;
|
||||
|
||||
if (!addr)
|
||||
{
|
||||
|
@ -1503,11 +1504,11 @@ PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
|
|||
{
|
||||
struct OIDInfo *info;
|
||||
|
||||
TRACE("CRYPT_OID_INFO_NAME_KEY: %s\n", debugstr_w((LPWSTR)pvKey));
|
||||
TRACE("CRYPT_OID_INFO_NAME_KEY: %s\n", debugstr_w(pvKey));
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
LIST_FOR_EACH_ENTRY(info, &oidInfo, struct OIDInfo, entry)
|
||||
{
|
||||
if (!lstrcmpW(info->info.pwszName, (LPWSTR)pvKey) &&
|
||||
if (!lstrcmpW(info->info.pwszName, pvKey) &&
|
||||
(!dwGroupId || info->info.dwGroupId == dwGroupId))
|
||||
{
|
||||
ret = &info->info;
|
||||
|
@ -1520,7 +1521,7 @@ PCCRYPT_OID_INFO WINAPI CryptFindOIDInfo(DWORD dwKeyType, void *pvKey,
|
|||
case CRYPT_OID_INFO_OID_KEY:
|
||||
{
|
||||
struct OIDInfo *info;
|
||||
LPSTR oid = (LPSTR)pvKey;
|
||||
LPSTR oid = pvKey;
|
||||
|
||||
TRACE("CRYPT_OID_INFO_OID_KEY: %s\n", debugstr_a(oid));
|
||||
EnterCriticalSection(&oidInfoCS);
|
||||
|
|
|
@ -43,7 +43,7 @@ typedef struct _WINE_PROVIDERSTORE
|
|||
|
||||
static void WINAPI CRYPT_ProvCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
||||
{
|
||||
PWINE_PROVIDERSTORE store = (PWINE_PROVIDERSTORE)hCertStore;
|
||||
PWINE_PROVIDERSTORE store = hCertStore;
|
||||
|
||||
TRACE("(%p, %08x)\n", store, dwFlags);
|
||||
|
||||
|
@ -69,7 +69,7 @@ static BOOL CRYPT_ProvAddCert(PWINECRYPT_CERTSTORE store, void *cert,
|
|||
{
|
||||
ret = TRUE;
|
||||
if (ps->provWriteCert)
|
||||
ret = ps->provWriteCert(ps->hStoreProv, (PCCERT_CONTEXT)cert,
|
||||
ret = ps->provWriteCert(ps->hStoreProv, cert,
|
||||
CERT_STORE_PROV_WRITE_ADD_FLAG);
|
||||
if (ret)
|
||||
ret = ps->memStore->certs.addContext(ps->memStore, cert, NULL,
|
||||
|
@ -135,7 +135,7 @@ static BOOL CRYPT_ProvAddCRL(PWINECRYPT_CERTSTORE store, void *crl,
|
|||
{
|
||||
ret = TRUE;
|
||||
if (ps->provWriteCrl)
|
||||
ret = ps->provWriteCrl(ps->hStoreProv, (PCCRL_CONTEXT)crl,
|
||||
ret = ps->provWriteCrl(ps->hStoreProv, crl,
|
||||
CERT_STORE_PROV_WRITE_ADD_FLAG);
|
||||
if (ret)
|
||||
ret = ps->memStore->crls.addContext(ps->memStore, crl, NULL,
|
||||
|
@ -202,7 +202,7 @@ static BOOL CRYPT_ProvAddCTL(PWINECRYPT_CERTSTORE store, void *ctl,
|
|||
{
|
||||
ret = TRUE;
|
||||
if (ps->provWriteCtl)
|
||||
ret = ps->provWriteCtl(ps->hStoreProv, (PCCTL_CONTEXT)ctl,
|
||||
ret = ps->provWriteCtl(ps->hStoreProv, ctl,
|
||||
CERT_STORE_PROV_WRITE_ADD_FLAG);
|
||||
if (ret)
|
||||
ret = ps->memStore->ctls.addContext(ps->memStore, ctl, NULL,
|
||||
|
@ -250,7 +250,7 @@ static BOOL CRYPT_ProvDeleteCTL(PWINECRYPT_CERTSTORE store, void *ctl)
|
|||
static BOOL WINAPI CRYPT_ProvControl(HCERTSTORE hCertStore, DWORD dwFlags,
|
||||
DWORD dwCtrlType, void const *pvCtrlPara)
|
||||
{
|
||||
PWINE_PROVIDERSTORE store = (PWINE_PROVIDERSTORE)hCertStore;
|
||||
PWINE_PROVIDERSTORE store = hCertStore;
|
||||
BOOL ret = TRUE;
|
||||
|
||||
TRACE("(%p, %08x, %d, %p)\n", hCertStore, dwFlags, dwCtrlType,
|
||||
|
|
|
@ -319,7 +319,7 @@ static BOOL CRYPT_RegFlushStore(PWINE_REGSTOREINFO store, BOOL force)
|
|||
|
||||
static void WINAPI CRYPT_RegCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %08x)\n", store, dwFlags);
|
||||
if (dwFlags)
|
||||
|
@ -392,7 +392,7 @@ static BOOL CRYPT_RegDeleteContext(PWINE_REGSTOREINFO store,
|
|||
static BOOL WINAPI CRYPT_RegWriteCert(HCERTSTORE hCertStore,
|
||||
PCCERT_CONTEXT cert, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %d)\n", hCertStore, cert, dwFlags);
|
||||
|
||||
|
@ -402,7 +402,7 @@ static BOOL WINAPI CRYPT_RegWriteCert(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_RegDeleteCert(HCERTSTORE hCertStore,
|
||||
PCCERT_CONTEXT pCertContext, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %08x)\n", store, pCertContext, dwFlags);
|
||||
|
||||
|
@ -413,7 +413,7 @@ static BOOL WINAPI CRYPT_RegDeleteCert(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_RegWriteCRL(HCERTSTORE hCertStore,
|
||||
PCCRL_CONTEXT crl, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %d)\n", hCertStore, crl, dwFlags);
|
||||
|
||||
|
@ -423,7 +423,7 @@ static BOOL WINAPI CRYPT_RegWriteCRL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_RegDeleteCRL(HCERTSTORE hCertStore,
|
||||
PCCRL_CONTEXT pCrlContext, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %08x)\n", store, pCrlContext, dwFlags);
|
||||
|
||||
|
@ -434,7 +434,7 @@ static BOOL WINAPI CRYPT_RegDeleteCRL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_RegWriteCTL(HCERTSTORE hCertStore,
|
||||
PCCTL_CONTEXT ctl, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %d)\n", hCertStore, ctl, dwFlags);
|
||||
|
||||
|
@ -444,7 +444,7 @@ static BOOL WINAPI CRYPT_RegWriteCTL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_RegDeleteCTL(HCERTSTORE hCertStore,
|
||||
PCCTL_CONTEXT pCtlContext, DWORD dwFlags)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
|
||||
TRACE("(%p, %p, %08x)\n", store, pCtlContext, dwFlags);
|
||||
|
||||
|
@ -455,7 +455,7 @@ static BOOL WINAPI CRYPT_RegDeleteCTL(HCERTSTORE hCertStore,
|
|||
static BOOL WINAPI CRYPT_RegControl(HCERTSTORE hCertStore, DWORD dwFlags,
|
||||
DWORD dwCtrlType, void const *pvCtrlPara)
|
||||
{
|
||||
PWINE_REGSTOREINFO store = (PWINE_REGSTOREINFO)hCertStore;
|
||||
PWINE_REGSTOREINFO store = hCertStore;
|
||||
BOOL ret;
|
||||
|
||||
TRACE("(%p, %08x, %d, %p)\n", hCertStore, dwFlags, dwCtrlType,
|
||||
|
|
|
@ -744,17 +744,6 @@ PWINECRYPT_CERTSTORE CRYPT_RootOpenStore(HCRYPTPROV hCryptProv, DWORD dwFlags)
|
|||
SetLastError(ERROR_ACCESS_DENIED);
|
||||
return NULL;
|
||||
}
|
||||
switch (dwFlags & CERT_SYSTEM_STORE_LOCATION_MASK)
|
||||
{
|
||||
case CERT_SYSTEM_STORE_LOCAL_MACHINE:
|
||||
case CERT_SYSTEM_STORE_CURRENT_USER:
|
||||
break;
|
||||
default:
|
||||
TRACE("location %08x unsupported\n",
|
||||
dwFlags & CERT_SYSTEM_STORE_LOCATION_MASK);
|
||||
SetLastError(E_INVALIDARG);
|
||||
return NULL;
|
||||
}
|
||||
if (!CRYPT_rootStore)
|
||||
{
|
||||
HCERTSTORE root = create_root_store();
|
||||
|
|
|
@ -627,7 +627,7 @@ static BOOL CRYPT_WriteSerializedStoreToFile(HANDLE file, HCERTSTORE store)
|
|||
static BOOL CRYPT_SavePKCSToMem(HCERTSTORE store,
|
||||
DWORD dwMsgAndCertEncodingType, void *handle)
|
||||
{
|
||||
CERT_BLOB *blob = (CERT_BLOB *)handle;
|
||||
CERT_BLOB *blob = handle;
|
||||
CRYPT_SIGNED_INFO signedInfo = { 0 };
|
||||
PCCERT_CONTEXT cert = NULL;
|
||||
PCCRL_CONTEXT crl = NULL;
|
||||
|
@ -767,7 +767,7 @@ struct MemWrittenTracker
|
|||
/* handle is a pointer to a MemWrittenTracker. Assumes its pointer is valid. */
|
||||
static BOOL CRYPT_MemOutputFunc(void *handle, const void *buffer, DWORD size)
|
||||
{
|
||||
struct MemWrittenTracker *tracker = (struct MemWrittenTracker *)handle;
|
||||
struct MemWrittenTracker *tracker = handle;
|
||||
BOOL ret;
|
||||
|
||||
if (tracker->written + size > tracker->cbData)
|
||||
|
@ -797,7 +797,7 @@ static BOOL CRYPT_CountSerializedBytes(void *handle, const void *buffer,
|
|||
static BOOL CRYPT_SaveSerializedToMem(HCERTSTORE store,
|
||||
DWORD dwMsgAndCertEncodingType, void *handle)
|
||||
{
|
||||
CERT_BLOB *blob = (CERT_BLOB *)handle;
|
||||
CERT_BLOB *blob = handle;
|
||||
DWORD size = 0;
|
||||
BOOL ret;
|
||||
|
||||
|
@ -833,7 +833,7 @@ BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
|
|||
{
|
||||
BOOL (*saveFunc)(HCERTSTORE, DWORD, void *);
|
||||
void *handle;
|
||||
BOOL ret;
|
||||
BOOL ret, closeFile = TRUE;
|
||||
|
||||
TRACE("(%p, %08x, %d, %d, %p, %08x)\n", hCertStore,
|
||||
dwMsgAndCertEncodingType, dwSaveAs, dwSaveTo, pvSaveToPara, dwFlags);
|
||||
|
@ -841,7 +841,16 @@ BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
|
|||
switch (dwSaveAs)
|
||||
{
|
||||
case CERT_STORE_SAVE_AS_STORE:
|
||||
if (dwSaveTo == CERT_STORE_SAVE_TO_MEMORY)
|
||||
saveFunc = CRYPT_SaveSerializedToMem;
|
||||
else
|
||||
saveFunc = CRYPT_SaveSerializedToFile;
|
||||
break;
|
||||
case CERT_STORE_SAVE_AS_PKCS7:
|
||||
if (dwSaveTo == CERT_STORE_SAVE_TO_MEMORY)
|
||||
saveFunc = CRYPT_SavePKCSToMem;
|
||||
else
|
||||
saveFunc = CRYPT_SavePKCSToFile;
|
||||
break;
|
||||
default:
|
||||
WARN("unimplemented for %d\n", dwSaveAs);
|
||||
|
@ -852,25 +861,18 @@ BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
|
|||
{
|
||||
case CERT_STORE_SAVE_TO_FILE:
|
||||
handle = pvSaveToPara;
|
||||
saveFunc = dwSaveAs == CERT_STORE_SAVE_AS_STORE ?
|
||||
CRYPT_SaveSerializedToFile : CRYPT_SavePKCSToFile;
|
||||
closeFile = FALSE;
|
||||
break;
|
||||
case CERT_STORE_SAVE_TO_FILENAME_A:
|
||||
handle = CreateFileA((LPCSTR)pvSaveToPara, GENERIC_WRITE, 0, NULL,
|
||||
handle = CreateFileA(pvSaveToPara, GENERIC_WRITE, 0, NULL,
|
||||
CREATE_ALWAYS, 0, NULL);
|
||||
saveFunc = dwSaveAs == CERT_STORE_SAVE_AS_STORE ?
|
||||
CRYPT_SaveSerializedToFile : CRYPT_SavePKCSToFile;
|
||||
break;
|
||||
case CERT_STORE_SAVE_TO_FILENAME_W:
|
||||
handle = CreateFileW((LPCWSTR)pvSaveToPara, GENERIC_WRITE, 0, NULL,
|
||||
handle = CreateFileW(pvSaveToPara, GENERIC_WRITE, 0, NULL,
|
||||
CREATE_ALWAYS, 0, NULL);
|
||||
saveFunc = dwSaveAs == CERT_STORE_SAVE_AS_STORE ?
|
||||
CRYPT_SaveSerializedToFile : CRYPT_SavePKCSToFile;
|
||||
break;
|
||||
case CERT_STORE_SAVE_TO_MEMORY:
|
||||
handle = pvSaveToPara;
|
||||
saveFunc = dwSaveAs == CERT_STORE_SAVE_AS_STORE ?
|
||||
CRYPT_SaveSerializedToMem : CRYPT_SavePKCSToMem;
|
||||
break;
|
||||
default:
|
||||
WARN("unimplemented for %d\n", dwSaveTo);
|
||||
|
@ -878,6 +880,8 @@ BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
|
|||
return FALSE;
|
||||
}
|
||||
ret = saveFunc(hCertStore, dwMsgAndCertEncodingType, handle);
|
||||
if (closeFile)
|
||||
CloseHandle(handle);
|
||||
TRACE("returning %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -273,7 +273,7 @@ static BOOL CRYPT_MemDeleteCtl(PWINECRYPT_CERTSTORE store, void *pCtlContext)
|
|||
|
||||
static void WINAPI CRYPT_MemCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
||||
{
|
||||
WINE_MEMSTORE *store = (WINE_MEMSTORE *)hCertStore;
|
||||
WINE_MEMSTORE *store = hCertStore;
|
||||
|
||||
TRACE("(%p, %08x)\n", store, dwFlags);
|
||||
if (dwFlags)
|
||||
|
@ -329,26 +329,34 @@ static WINECRYPT_CERTSTORE *CRYPT_MemOpenStore(HCRYPTPROV hCryptProv,
|
|||
return (PWINECRYPT_CERTSTORE)store;
|
||||
}
|
||||
|
||||
static const WCHAR rootW[] = { 'R','o','o','t',0 };
|
||||
|
||||
static PWINECRYPT_CERTSTORE CRYPT_SysRegOpenStoreW(HCRYPTPROV hCryptProv,
|
||||
DWORD dwFlags, const void *pvPara)
|
||||
{
|
||||
static const WCHAR rootW[] = { 'R','o','o','t',0 };
|
||||
static const WCHAR fmt[] = { '%','s','\\','%','s',0 };
|
||||
LPCWSTR storeName = (LPCWSTR)pvPara;
|
||||
LPCWSTR storeName = pvPara;
|
||||
LPWSTR storePath;
|
||||
PWINECRYPT_CERTSTORE store = NULL;
|
||||
HKEY root;
|
||||
LPCWSTR base;
|
||||
|
||||
TRACE("(%ld, %08x, %s)\n", hCryptProv, dwFlags,
|
||||
debugstr_w((LPCWSTR)pvPara));
|
||||
debugstr_w(pvPara));
|
||||
|
||||
if (!pvPara)
|
||||
{
|
||||
SetLastError(E_INVALIDARG);
|
||||
return NULL;
|
||||
}
|
||||
if (!lstrcmpiW(storeName, rootW))
|
||||
/* FIXME: In Windows, the root store (even the current user location) is
|
||||
* protected: adding to it or removing from it present a user interface,
|
||||
* and the keys are owned by the system process, not the current user.
|
||||
* Wine's registry doesn't implement access controls, so a similar
|
||||
* mechanism isn't possible yet.
|
||||
*/
|
||||
if ((dwFlags & CERT_SYSTEM_STORE_LOCATION_MASK) ==
|
||||
CERT_SYSTEM_STORE_LOCAL_MACHINE && !lstrcmpiW(storeName, rootW))
|
||||
return CRYPT_RootOpenStore(hCryptProv, dwFlags);
|
||||
|
||||
switch (dwFlags & CERT_SYSTEM_STORE_LOCATION_MASK)
|
||||
|
@ -442,21 +450,21 @@ static PWINECRYPT_CERTSTORE CRYPT_SysRegOpenStoreA(HCRYPTPROV hCryptProv,
|
|||
PWINECRYPT_CERTSTORE ret = NULL;
|
||||
|
||||
TRACE("(%ld, %08x, %s)\n", hCryptProv, dwFlags,
|
||||
debugstr_a((LPCSTR)pvPara));
|
||||
debugstr_a(pvPara));
|
||||
|
||||
if (!pvPara)
|
||||
{
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
return NULL;
|
||||
}
|
||||
len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pvPara, -1, NULL, 0);
|
||||
len = MultiByteToWideChar(CP_ACP, 0, pvPara, -1, NULL, 0);
|
||||
if (len)
|
||||
{
|
||||
LPWSTR storeName = CryptMemAlloc(len * sizeof(WCHAR));
|
||||
|
||||
if (storeName)
|
||||
{
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pvPara, -1, storeName, len);
|
||||
MultiByteToWideChar(CP_ACP, 0, pvPara, -1, storeName, len);
|
||||
ret = CRYPT_SysRegOpenStoreW(hCryptProv, dwFlags, storeName);
|
||||
CryptMemFree(storeName);
|
||||
}
|
||||
|
@ -471,7 +479,7 @@ static PWINECRYPT_CERTSTORE CRYPT_SysOpenStoreW(HCRYPTPROV hCryptProv,
|
|||
BOOL ret;
|
||||
|
||||
TRACE("(%ld, %08x, %s)\n", hCryptProv, dwFlags,
|
||||
debugstr_w((LPCWSTR)pvPara));
|
||||
debugstr_w(pvPara));
|
||||
|
||||
if (!pvPara)
|
||||
{
|
||||
|
@ -533,7 +541,7 @@ static PWINECRYPT_CERTSTORE CRYPT_SysOpenStoreW(HCRYPTPROV hCryptProv,
|
|||
CryptReleaseContext(hCryptProv, 0);
|
||||
}
|
||||
}
|
||||
return (PWINECRYPT_CERTSTORE)store;
|
||||
return store;
|
||||
}
|
||||
|
||||
static PWINECRYPT_CERTSTORE CRYPT_SysOpenStoreA(HCRYPTPROV hCryptProv,
|
||||
|
@ -543,21 +551,21 @@ static PWINECRYPT_CERTSTORE CRYPT_SysOpenStoreA(HCRYPTPROV hCryptProv,
|
|||
PWINECRYPT_CERTSTORE ret = NULL;
|
||||
|
||||
TRACE("(%ld, %08x, %s)\n", hCryptProv, dwFlags,
|
||||
debugstr_a((LPCSTR)pvPara));
|
||||
debugstr_a(pvPara));
|
||||
|
||||
if (!pvPara)
|
||||
{
|
||||
SetLastError(ERROR_FILE_NOT_FOUND);
|
||||
return NULL;
|
||||
}
|
||||
len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pvPara, -1, NULL, 0);
|
||||
len = MultiByteToWideChar(CP_ACP, 0, pvPara, -1, NULL, 0);
|
||||
if (len)
|
||||
{
|
||||
LPWSTR storeName = CryptMemAlloc(len * sizeof(WCHAR));
|
||||
|
||||
if (storeName)
|
||||
{
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pvPara, -1, storeName, len);
|
||||
MultiByteToWideChar(CP_ACP, 0, pvPara, -1, storeName, len);
|
||||
ret = CRYPT_SysOpenStoreW(hCryptProv, dwFlags, storeName);
|
||||
CryptMemFree(storeName);
|
||||
}
|
||||
|
@ -661,7 +669,7 @@ static PWINECRYPT_CERTSTORE CRYPT_PKCSOpenStore(HCRYPTPROV hCryptProv,
|
|||
{
|
||||
HCRYPTMSG msg;
|
||||
PWINECRYPT_CERTSTORE store = NULL;
|
||||
const CRYPT_DATA_BLOB *data = (const CRYPT_DATA_BLOB *)pvPara;
|
||||
const CRYPT_DATA_BLOB *data = pvPara;
|
||||
BOOL ret;
|
||||
DWORD msgOpenFlags = dwFlags & CERT_STORE_NO_CRYPT_RELEASE_FLAG ? 0 :
|
||||
CMSG_CRYPT_RELEASE_CONTEXT_FLAG;
|
||||
|
@ -704,7 +712,7 @@ static PWINECRYPT_CERTSTORE CRYPT_PhysOpenStoreW(HCRYPTPROV hCryptProv,
|
|||
FIXME("(%ld, %08x, %p): stub\n", hCryptProv, dwFlags, pvPara);
|
||||
else
|
||||
FIXME("(%ld, %08x, %s): stub\n", hCryptProv, dwFlags,
|
||||
debugstr_w((LPCWSTR)pvPara));
|
||||
debugstr_w(pvPara));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -787,7 +795,7 @@ HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider,
|
|||
hCryptProv, dwFlags, pvPara);
|
||||
else
|
||||
hcs = openFunc(hCryptProv, dwFlags, pvPara);
|
||||
return (HCERTSTORE)hcs;
|
||||
return hcs;
|
||||
}
|
||||
|
||||
HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV_LEGACY hProv,
|
||||
|
@ -821,7 +829,7 @@ BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
|
|||
PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition,
|
||||
PCCERT_CONTEXT *ppStoreContext)
|
||||
{
|
||||
PWINECRYPT_CERTSTORE store = (PWINECRYPT_CERTSTORE)hCertStore;
|
||||
PWINECRYPT_CERTSTORE store = hCertStore;
|
||||
BOOL ret = TRUE;
|
||||
PCCERT_CONTEXT toAdd = NULL, existing = NULL;
|
||||
|
||||
|
@ -936,7 +944,7 @@ BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore,
|
|||
PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore,
|
||||
PCCERT_CONTEXT pPrev)
|
||||
{
|
||||
WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *)hCertStore;
|
||||
WINECRYPT_CERTSTORE *hcs = hCertStore;
|
||||
PCCERT_CONTEXT ret;
|
||||
|
||||
TRACE("(%p, %p)\n", hCertStore, pPrev);
|
||||
|
@ -964,8 +972,7 @@ BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext)
|
|||
}
|
||||
else
|
||||
{
|
||||
PWINECRYPT_CERTSTORE hcs =
|
||||
(PWINECRYPT_CERTSTORE)pCertContext->hCertStore;
|
||||
PWINECRYPT_CERTSTORE hcs = pCertContext->hCertStore;
|
||||
|
||||
if (hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC)
|
||||
ret = FALSE;
|
||||
|
@ -983,7 +990,7 @@ BOOL WINAPI CertAddCRLContextToStore(HCERTSTORE hCertStore,
|
|||
PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
|
||||
PCCRL_CONTEXT* ppStoreContext)
|
||||
{
|
||||
PWINECRYPT_CERTSTORE store = (PWINECRYPT_CERTSTORE)hCertStore;
|
||||
PWINECRYPT_CERTSTORE store = hCertStore;
|
||||
BOOL ret = TRUE;
|
||||
PCCRL_CONTEXT toAdd = NULL, existing = NULL;
|
||||
|
||||
|
@ -1103,8 +1110,7 @@ BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext)
|
|||
}
|
||||
else
|
||||
{
|
||||
PWINECRYPT_CERTSTORE hcs =
|
||||
(PWINECRYPT_CERTSTORE)pCrlContext->hCertStore;
|
||||
PWINECRYPT_CERTSTORE hcs = pCrlContext->hCertStore;
|
||||
|
||||
if (hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC)
|
||||
ret = FALSE;
|
||||
|
@ -1118,7 +1124,7 @@ BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext)
|
|||
PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,
|
||||
PCCRL_CONTEXT pPrev)
|
||||
{
|
||||
WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *)hCertStore;
|
||||
WINECRYPT_CERTSTORE *hcs = hCertStore;
|
||||
PCCRL_CONTEXT ret;
|
||||
|
||||
TRACE("(%p, %p)\n", hCertStore, pPrev);
|
||||
|
@ -1133,7 +1139,7 @@ PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore,
|
|||
|
||||
HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore)
|
||||
{
|
||||
WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *)hCertStore;
|
||||
WINECRYPT_CERTSTORE *hcs = hCertStore;
|
||||
|
||||
TRACE("(%p)\n", hCertStore);
|
||||
|
||||
|
@ -1144,7 +1150,7 @@ HCERTSTORE WINAPI CertDuplicateStore(HCERTSTORE hCertStore)
|
|||
|
||||
BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
||||
{
|
||||
WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *) hCertStore;
|
||||
WINECRYPT_CERTSTORE *hcs = hCertStore;
|
||||
|
||||
TRACE("(%p, %08x)\n", hCertStore, dwFlags);
|
||||
|
||||
|
@ -1168,7 +1174,7 @@ BOOL WINAPI CertCloseStore(HCERTSTORE hCertStore, DWORD dwFlags)
|
|||
BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,
|
||||
DWORD dwCtrlType, void const *pvCtrlPara)
|
||||
{
|
||||
WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *)hCertStore;
|
||||
WINECRYPT_CERTSTORE *hcs = hCertStore;
|
||||
BOOL ret;
|
||||
|
||||
TRACE("(%p, %08x, %d, %p)\n", hCertStore, dwFlags, dwCtrlType,
|
||||
|
@ -1191,7 +1197,7 @@ BOOL WINAPI CertControlStore(HCERTSTORE hCertStore, DWORD dwFlags,
|
|||
BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
|
||||
void *pvData, DWORD *pcbData)
|
||||
{
|
||||
PWINECRYPT_CERTSTORE store = (PWINECRYPT_CERTSTORE)hCertStore;
|
||||
PWINECRYPT_CERTSTORE store = hCertStore;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %d, %p, %p)\n", hCertStore, dwPropId, pvData, pcbData);
|
||||
|
@ -1255,7 +1261,7 @@ BOOL WINAPI CertGetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
|
|||
BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
|
||||
DWORD dwFlags, const void *pvData)
|
||||
{
|
||||
PWINECRYPT_CERTSTORE store = (PWINECRYPT_CERTSTORE)hCertStore;
|
||||
PWINECRYPT_CERTSTORE store = hCertStore;
|
||||
BOOL ret = FALSE;
|
||||
|
||||
TRACE("(%p, %d, %08x, %p)\n", hCertStore, dwPropId, dwFlags, pvData);
|
||||
|
@ -1270,7 +1276,7 @@ BOOL WINAPI CertSetStoreProperty(HCERTSTORE hCertStore, DWORD dwPropId,
|
|||
default:
|
||||
if (pvData)
|
||||
{
|
||||
const CRYPT_DATA_BLOB *blob = (const CRYPT_DATA_BLOB *)pvData;
|
||||
const CRYPT_DATA_BLOB *blob = pvData;
|
||||
|
||||
ret = ContextPropertyList_SetProperty(store->properties, dwPropId,
|
||||
blob->pbData, blob->cbData);
|
||||
|
@ -1343,6 +1349,7 @@ BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
|
|||
BOOL ret = FALSE;
|
||||
LONG rc;
|
||||
HKEY key;
|
||||
CERT_SYSTEM_STORE_INFO info = { sizeof(info) };
|
||||
|
||||
TRACE("(%08x, %p, %p, %p)\n", dwFlags, pvSystemStoreLocationPara, pvArg,
|
||||
pfnEnum);
|
||||
|
@ -1351,7 +1358,6 @@ BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
|
|||
if (!rc)
|
||||
{
|
||||
DWORD index = 0;
|
||||
CERT_SYSTEM_STORE_INFO info = { sizeof(info) };
|
||||
|
||||
ret = TRUE;
|
||||
do {
|
||||
|
@ -1368,6 +1374,12 @@ BOOL WINAPI CertEnumSystemStore(DWORD dwFlags, void *pvSystemStoreLocationPara,
|
|||
}
|
||||
else
|
||||
SetLastError(rc);
|
||||
/* Include root store for the local machine location (it isn't in the
|
||||
* registry)
|
||||
*/
|
||||
if (ret && (dwFlags & CERT_SYSTEM_STORE_LOCATION_MASK) ==
|
||||
CERT_SYSTEM_STORE_LOCAL_MACHINE)
|
||||
ret = pfnEnum(rootW, dwFlags, &info, NULL, pvArg);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1378,7 +1390,7 @@ BOOL WINAPI CertEnumPhysicalStore(const void *pvSystemStore, DWORD dwFlags,
|
|||
FIXME("(%p, %08x, %p, %p): stub\n", pvSystemStore, dwFlags, pvArg,
|
||||
pfnEnum);
|
||||
else
|
||||
FIXME("(%s, %08x, %p, %p): stub\n", debugstr_w((LPCWSTR)pvSystemStore),
|
||||
FIXME("(%s, %08x, %p, %p): stub\n", debugstr_w(pvSystemStore),
|
||||
dwFlags, pvArg,
|
||||
pfnEnum);
|
||||
return FALSE;
|
||||
|
|
|
@ -1957,6 +1957,9 @@ static const WCHAR MS_ENH_RSA_AES_PROV_W[] = { 'M','i','c','r','o','s'
|
|||
#define CRYPT_READ 0x0008
|
||||
#define CRYPT_WRITE 0x0010
|
||||
#define CRYPT_MAC 0x0020
|
||||
#define CRYPT_EXPORT_KEY 0x0040
|
||||
#define CRYPT_IMPORT_KEY 0x0080
|
||||
#define CRYPT_ARCHIVE 0x0100
|
||||
|
||||
/* Crypt*Key */
|
||||
#define CRYPT_EXPORTABLE 0x00000001
|
||||
|
@ -3339,6 +3342,11 @@ typedef struct _CTL_FIND_SUBJECT_PARA
|
|||
#define CRYPT_ACQUIRE_COMPARE_KEY_FLAG 0x00000004
|
||||
#define CRYPT_ACQUIRE_SILENT_FLAG 0x00000040
|
||||
|
||||
/* flags for CryptFindCertificateKeyProvInfo */
|
||||
#define CRYPT_FIND_USER_KEYSET_FLAG 0x00000001
|
||||
#define CRYPT_FIND_MACHINE_KEYSET_FLAG 0x00000002
|
||||
#define CRYPT_FIND_SILENT_KEYSET_FLAG 0x00000040
|
||||
|
||||
/* Chain engines and chains */
|
||||
typedef HANDLE HCERTCHAINENGINE;
|
||||
#define HCCE_CURRENT_USER ((HCERTCHAINENGINE)NULL)
|
||||
|
@ -3766,6 +3774,15 @@ typedef struct _CMSG_CMS_RECIPIENT_INFO {
|
|||
#define CMSG_ENCODED_SORTED_CTL_FLAG 0x1
|
||||
#define CMSG_ENCODE_HASHED_SUBJECT_IDENTIFIER_FLAG 0x2
|
||||
|
||||
/* PFXImportCertStore flags */
|
||||
#define CRYPT_USER_KEYSET 0x00001000
|
||||
#define PKCS12_IMPORT_RESERVED_MASK 0xffff0000
|
||||
/* PFXExportCertStore flags */
|
||||
#define REPORT_NO_PRIVATE_KEY 0x00000001
|
||||
#define REPORT_NOT_ABLE_TO_EXPORT_PRIVATE_KEY 0x00000002
|
||||
#define EXPORT_PRIVATE_KEYS 0x00000004
|
||||
#define PKCS12_EXPORT_RESERVED_MASK 0xffff0000
|
||||
|
||||
/* function declarations */
|
||||
/* advapi32.dll */
|
||||
WINADVAPI BOOL WINAPI CryptAcquireContextA(HCRYPTPROV *, LPCSTR, LPCSTR, DWORD, DWORD);
|
||||
|
@ -4232,6 +4249,9 @@ BOOL WINAPI CryptAcquireCertificatePrivateKey(PCCERT_CONTEXT pCert,
|
|||
DWORD dwFlags, void *pvReserved, HCRYPTPROV_OR_NCRYPT_KEY_HANDLE *phCryptProv, DWORD *pdwKeySpec,
|
||||
BOOL *pfCallerFreeProv);
|
||||
|
||||
BOOL WINAPI CryptFindCertificateKeyProvInfo(PCCERT_CONTEXT pCert,
|
||||
DWORD dwFlags, void *pvReserved);
|
||||
|
||||
BOOL WINAPI CryptProtectData( DATA_BLOB* pDataIn, LPCWSTR szDataDescr,
|
||||
DATA_BLOB* pOptionalEntropy, PVOID pvReserved,
|
||||
CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct, DWORD dwFlags, DATA_BLOB* pDataOut );
|
||||
|
@ -4386,6 +4406,17 @@ BOOL WINAPI CryptVerifyDetachedMessageHash(PCRYPT_HASH_MESSAGE_PARA pHashPara,
|
|||
const BYTE *rgpbToBeHashed[], DWORD rgcbToBeHashed[], BYTE *pbComputedHash,
|
||||
DWORD *pcbComputedHash);
|
||||
|
||||
/* PFX functions */
|
||||
HCERTSTORE WINAPI PFXImportCertStore(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
|
||||
DWORD dwFlags);
|
||||
BOOL WINAPI PFXIsPFXBlob(CRYPT_DATA_BLOB *pPFX);
|
||||
BOOL WINAPI PFXVerifyPassword(CRYPT_DATA_BLOB *pPFX, LPCWSTR szPassword,
|
||||
DWORD dwFlags);
|
||||
BOOL WINAPI PFXExportCertStoreEx(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
|
||||
LPCWSTR szPassword, void *pvReserved, DWORD dwFlags);
|
||||
BOOL WINAPI PFXExportCertStore(HCERTSTORE hStore, CRYPT_DATA_BLOB *pPFX,
|
||||
LPCWSTR szPassword, DWORD dwFlags);
|
||||
|
||||
/* cryptnet.dll functions */
|
||||
BOOL WINAPI CryptCancelAsyncRetrieval(HCRYPTASYNC hAsyncRetrieval);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue