sync crypt32 with wine 1.1.14
authorChristoph von Wittich <christoph_vw@reactos.org>
Sat, 31 Jan 2009 14:28:46 +0000 (14:28 +0000)
committerChristoph von Wittich <christoph_vw@reactos.org>
Sat, 31 Jan 2009 14:28:46 +0000 (14:28 +0000)
svn path=/trunk/; revision=39236

22 files changed:
reactos/dll/win32/crypt32/cert.c
reactos/dll/win32/crypt32/chain.c
reactos/dll/win32/crypt32/collectionstore.c
reactos/dll/win32/crypt32/context.c
reactos/dll/win32/crypt32/crl.c
reactos/dll/win32/crypt32/crypt32.spec
reactos/dll/win32/crypt32/crypt32_En.rc
reactos/dll/win32/crypt32/crypt32_Nl.rc
reactos/dll/win32/crypt32/cryptres.h
reactos/dll/win32/crypt32/ctl.c
reactos/dll/win32/crypt32/decode.c
reactos/dll/win32/crypt32/encode.c
reactos/dll/win32/crypt32/filestore.c
reactos/dll/win32/crypt32/msg.c
reactos/dll/win32/crypt32/object.c
reactos/dll/win32/crypt32/oid.c
reactos/dll/win32/crypt32/provstore.c
reactos/dll/win32/crypt32/regstore.c
reactos/dll/win32/crypt32/rootstore.c
reactos/dll/win32/crypt32/serialize.c
reactos/dll/win32/crypt32/store.c
reactos/include/psdk/wincrypt.h

index 8b5f2e8..2780cba 100644 (file)
@@ -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(&copy, keyProvInfo, sizeof(copy));
+    copy.pwszContainerName = containerW;
+    matches = key_prov_info_matches_cert(pCert, &copy);
+    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)
             {
index e713362..6d7bb54 100644 (file)
@@ -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)
index 41b644a..12eb7c3 100644 (file)
@@ -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);
index fa7922f..f7ebebb 100644 (file)
@@ -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);
 }
index a1138b5..271e4e0 100644 (file)
@@ -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);
index 3f9ac98..3591d17 100644 (file)
 @ 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)
 @ 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
index ace77d2..e24ce86 100644 (file)
@@ -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
index c9857f8..fe3fa45 100644 (file)
@@ -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
 {
index 6d0ac46..fe2fd91 100644 (file)
 #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
index 42abcd7..5a6d19b 100644 (file)
@@ -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);
index fa06510..cda8b62 100644 (file)
@@ -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;
+}
index 2440d16..14d193f 100644 (file)
@@ -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)
 {
index a33b828..f27b3b7 100644 (file)
@@ -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);
         }
index b04af9e..a16eef1 100644 (file)
@@ -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);
index 202f458..e880f08 100644 (file)
@@ -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
index b4aae66..0f36fd7 100644 (file)
@@ -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);
index 70dba64..795c8e1 100644 (file)
@@ -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,
index 7b9d67c..296b0c9 100644 (file)
@@ -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,
index 116c934..a2ed6e5 100644 (file)
@@ -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();
index 32a9ca0..2cc6ffd 100644 (file)
@@ -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;
 }
index 3b42893..e043315 100644 (file)
@@ -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;
index f574997..75017fe 100644 (file)
@@ -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);