Modified: trunk/reactos/baseaddress.xml
Modified: trunk/reactos/lib/advapi32/advapi32.def
Modified: trunk/reactos/lib/crypt32/cert.c
Modified: trunk/reactos/lib/crypt32/crypt32.def
Modified: trunk/reactos/lib/crypt32/crypt32.xml
Modified: trunk/reactos/lib/crypt32/crypt32_private.h
Modified: trunk/reactos/lib/crypt32/encode.c
Modified: trunk/reactos/lib/crypt32/precomp.h
Modified: trunk/reactos/w32api/include/wincrypt.h
--- trunk/reactos/baseaddress.xml 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/baseaddress.xml 2005-11-18 02:08:46 UTC (rev 19320)
@@ -104,7 +104,7 @@
<property name="BASEADDRESS_OLE32" value="0x77a50000" />
<property name="BASEADDRESS_WS2_32" value="0x77aa0000" />
<property name="BASEADDRESS_OLEPRO32" value="0x77aa0000" />
-<property name="BASEADDRESS_CRYPT32" value="0x77aa1000" />
+<property name="BASEADDRESS_CRYPT32" value="0x77ab0000" />
<property name="BASEADDRESS_ADVAPI32" value="0x77dc0000" />
<property name="BASEADDRESS_USER32" value="0x77e50000" />
<property name="BASEADDRESS_GDI32" value="0x77f10000" />
--- trunk/reactos/lib/advapi32/advapi32.def 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/advapi32/advapi32.def 2005-11-18 02:08:46 UTC (rev 19320)
@@ -176,7 +176,7 @@
;CryptSetProviderExW@16
CryptSetProviderW@8
CryptSignHashA@24
-;CryptSignHashW@24
+CryptSignHashW@24
CryptVerifySignatureA@24
CryptVerifySignatureW@24
DecryptFileA@8
--- trunk/reactos/lib/crypt32/cert.c 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/crypt32/cert.c 2005-11-18 02:08:46 UTC (rev 19320)
@@ -31,6 +31,15 @@
#include "precomp.h"
+#define NONAMELESSUNION
+
+static _SEH_FILTER(page_fault)
+{
+ if (_SEH_GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+ return _SEH_EXECUTE_HANDLER;
+ return _SEH_CONTINUE_SEARCH;
+}
+
WINE_DEFAULT_DEBUG_CHANNEL(crypt);
#define WINE_CRYPTCERTSTORE_MAGIC 0x74726563
@@ -304,12 +313,14 @@
DWORD cbElement, DWORD dwContextTypeFlags, DWORD *pdwContentType);
/* filter for page-fault exceptions */
+/*
static WINE_EXCEPTION_FILTER(page_fault)
{
if (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
return EXCEPTION_EXECUTE_HANDLER;
return EXCEPTION_CONTINUE_SEARCH;
}
+*/
static void CRYPT_InitStore(WINECRYPT_CERTSTORE *store, HCRYPTPROV hCryptProv,
DWORD dwFlags, CertStoreType type)
@@ -330,6 +341,7 @@
* be a PWINE_CERT_CONTEXT, and increments pCertContext's reference count.
* Also sets the hCertStore member of the reference to store.
*/
+
static void CRYPT_InitCertRef(PWINE_CERT_CONTEXT_REF ref,
PWINE_CERT_CONTEXT context, HCERTSTORE store)
{
@@ -3301,6 +3313,15 @@
return ret;
}
+BOOL WINAPI CryptEncryptMessage( PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptMessagePara,
+ DWORD dwCert, PCCERT_CONTEXT pccertCert[],
+ const BYTE* pbEncrypted, DWORD dwEncrypted,
+ BYTE* pbBlob, DWORD* dwEncryptedBlob)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
HCRYPTOIDFUNCSET WINAPI CryptInitOIDFunctionSet(LPCSTR pszFuncName, DWORD dwFlags)
{
FIXME("stub: %s %lx\n", debugstr_a(pszFuncName), dwFlags);
@@ -3313,3 +3334,42 @@
FIXME("stub: %lx %s %s\n", dwEncodingType, debugstr_a(pszFuncName), debugstr_w(pwszDll));
return FALSE;
}
+
+DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext,
+ DWORD dwType, DWORD dwFlags,
+ LPVOID pvType, LPWSTR pszName,
+ DWORD dwName)
+{
+ UNIMPLEMENTED;
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext,
+ DWORD dwType, DWORD dwFlags,
+ LPVOID pvType, LPSTR pszName,
+ DWORD dwName)
+{
+ UNIMPLEMENTED;
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+
+DWORD WINAPI CertNameToStrA(DWORD dwCertEncoding,
+ PCERT_NAME_BLOB pCertName,
+ DWORD dwType, LPSTR psz,
+ DWORD dwSZ)
+{
+ UNIMPLEMENTED;
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+DWORD WINAPI CertNameToStrW(DWORD dwCertEncoding,
+ PCERT_NAME_BLOB pCertName,
+ DWORD dwType, LPWSTR psz,
+ DWORD dwSZ)
+{
+ UNIMPLEMENTED;
+ return ERROR_CALL_NOT_IMPLEMENTED;
+}
+
+
--- trunk/reactos/lib/crypt32/crypt32.def 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/crypt32/crypt32.def 2005-11-18 02:08:46 UTC (rev 19320)
@@ -1,10 +1,68 @@
LIBRARY CRYPT32.DLL
EXPORTS
+CertAddEncodedCRLToStore@24 @1022
+
+CertAddSerializedElementToStore@32 @1028
+CertAddStoreToCollection@16 @1029
CertAlgIdToOID@4 @1030
+CertCloseStore@8 @1031
+CertDeleteCRLFromStore@4 @1044
+
+CertDeleteCertificateFromStore@4 @1046
+
+CertFindAttribute@12 @1062
+
+CertFindCertificateInStore@24 @1066
+
+CertFindExtension@12 @1068
+CertFindRDNAttr@8 @1069
+
+CertFreeCRLContext@4 @1072
+CertFreeCTLContext@4 @1073
+
+CertFreeCertificateContext@4 @1076
+
+CertGetCTLContextProperty@16 @1079
+
+CertGetCertificateContextProperty@16 @1081
+
+CertGetNameStringA@24 @1085
+CertGetNameStringW@24 @1086
+
+CertNameToStrA@20 @1093
+CertNameToStrW@20 @1094
CertOIDToAlgId@4 @1095
+CertOpenSystemStoreA@8 @1097
+CertOpenSystemStoreW@8 @1098
+
+CertRemoveStoreFromCollection@8 @1104
+
+CertSerializeCTLStoreElement@16 @1108
+CertSerializeCertificateStoreElement@16 @1109
+
+CertSetCTLContextProperty@16 @1111
+CertSetCertificateContextProperty@16 @1113
+
+CertVerifyTimeValidity@8 @1126
+
+CryptDecodeObjectEx@32 @1138
+
+CryptEncodeObject@20 @1141
+
+CryptEncryptMessage@28 @1143
+
+CryptExportPublicKeyInfo@20 @1149
+CryptExportPublicKeyInfoEx@32 @1150
+
+CryptGetOIDFunctionValue@28 @1163
+CryptHashCertificate@28 @1164
+
+CryptImportPublicKeyInfo@16 @1169
+CryptImportPublicKeyInfoEx@28 @1170
+
CryptMemAlloc@4 @1175
CryptMemFree@4 @1176
CryptMemRealloc@8 @1177
@@ -12,6 +70,8 @@
CryptProtectData@28 @1193
CryptRegisterDefaultOIDFunction@16 @1195
+CryptRegisterOIDFunction@20 @1196
+
CryptSIPAddProvider@4 @1198
CryptSIPLoad@12 @1201
@@ -19,8 +79,17 @@
CryptSIPRetrieveSubjectGuid@12 @1205
+CryptSetOIDFunctionValue@28 @1210
+
+CryptSignCertificate@36 @1214
+
CryptUnprotectData@28 @1221
+CryptUnregisterOIDFunction@12 @1223
+
+CryptVerifyCertificateSignature@20
+CryptVerifyCertificateSignatureEx@32 @1226
+
I_CryptCreateLruCache@8 @1240
I_CryptDetachTls@4 @1242
--- trunk/reactos/lib/crypt32/crypt32.xml 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/crypt32/crypt32.xml 2005-11-18 02:08:46 UTC (rev 19320)
@@ -3,11 +3,14 @@
<include base="crypt32">.</include>
<define name="__USE_W32API" />
<define name="_WIN32_WINNT">0x501</define>
+ <library>pseh</library>
<library>ntdll</library>
<library>kernel32</library>
<library>wine</library>
<library>advapi32</library>
<file>main.c</file>
+ <file>encode.c</file>
+ <file>cert.c</file>
<file>protectdata.c</file>
<file>crypt32.rc</file>
<pch>precomp.h</pch>
--- trunk/reactos/lib/crypt32/crypt32_private.h 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/crypt32/crypt32_private.h 2005-11-18 02:08:46 UTC (rev 19320)
@@ -19,6 +19,8 @@
#ifndef __CRYPT32_PRIVATE_H__
#define __CRYPT32_PRIVATE_H__
+#define STATUS_ACCESS_VIOLATION 0xC0000005
+
/* Returns a handle to the default crypto provider; loads it if necessary.
* Returns NULL on failure.
*/
--- trunk/reactos/lib/crypt32/encode.c 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/crypt32/encode.c 2005-11-18 02:08:46 UTC (rev 19320)
@@ -34,13 +34,20 @@
#include "precomp.h"
+static _SEH_FILTER(page_fault)
+{
+ if (_SEH_GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
+ return _SEH_EXECUTE_HANDLER;
+ return _SEH_CONTINUE_SEARCH;
+}
+
/* This is a bit arbitrary, but to set some limit: */
#define MAX_ENCODED_LEN 0x02000000
/* a few asn.1 tags we need */
#define ASN_BOOL (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x01)
#define ASN_BITSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x03)
-#define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04)
+//#define ASN_OCTETSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x04)
#define ASN_ENUMERATED (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x0a)
#define ASN_SETOF (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x11)
#define ASN_NUMERICSTRING (ASN_UNIVERSAL | ASN_PRIMITIVE | 0x12)
@@ -161,14 +168,6 @@
DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara,
void *pvStructInfo, DWORD *pcbStructInfo);
-/* filter for page-fault exceptions */
-static WINE_EXCEPTION_FILTER(page_fault)
-{
- if (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION)
- return EXCEPTION_EXECUTE_HANDLER;
- return EXCEPTION_CONTINUE_SEARCH;
-}
-
static char *CRYPT_GetKeyName(DWORD dwEncodingType, LPCSTR pszFuncName,
LPCSTR pszOID)
{
@@ -1491,15 +1490,15 @@
case CERT_ALT_NAME_RFC822_NAME:
case CERT_ALT_NAME_DNS_NAME:
case CERT_ALT_NAME_URL:
- if (entry->u.pwszURL)
+ if (entry->pwszURL)
{
DWORD i;
/* Not + 1: don't encode the NULL-terminator */
- dataLen = lstrlenW(entry->u.pwszURL);
+ dataLen = lstrlenW(entry->pwszURL);
for (i = 0; ret && i < dataLen; i++)
{
- if (entry->u.pwszURL[i] > 0x7f)
+ if (entry->pwszURL[i] > 0x7f)
{
SetLastError(CRYPT_E_INVALID_IA5_STRING);
ret = FALSE;
@@ -1511,7 +1510,7 @@
dataLen = 0;
break;
case CERT_ALT_NAME_IP_ADDRESS:
- dataLen = entry->u.IPAddress.cbData;
+ dataLen = entry->IPAddress.cbData;
break;
case CERT_ALT_NAME_REGISTERED_ID:
/* FIXME: encode OID */
@@ -1551,11 +1550,11 @@
DWORD i;
for (i = 0; i < dataLen; i++)
- *pbEncoded++ = (BYTE)entry->u.pwszURL[i];
+ *pbEncoded++ = (BYTE)entry->pwszURL[i];
break;
}
case CERT_ALT_NAME_IP_ADDRESS:
- memcpy(pbEncoded, entry->u.IPAddress.pbData, dataLen);
+ memcpy(pbEncoded, entry->IPAddress.pbData, dataLen);
break;
}
if (ret)
@@ -4146,18 +4145,18 @@
DWORD i;
for (i = 0; i < dataLen; i++)
- entry->u.pwszURL[i] =
+ entry->pwszURL[i] =
(WCHAR)pbEncoded[1 + lenBytes + i];
- entry->u.pwszURL[i] = 0;
+ entry->pwszURL[i] = 0;
break;
}
case 7: /* iPAddress */
/* The next data pointer is in the pwszURL spot, that is,
* the first 4 bytes. Need to move it to the next spot.
*/
- entry->u.IPAddress.pbData = (LPBYTE)entry->u.pwszURL;
- entry->u.IPAddress.cbData = dataLen;
- memcpy(entry->u.IPAddress.pbData, pbEncoded + 1 + lenBytes,
+ entry->IPAddress.pbData = (LPBYTE)entry->pwszURL;
+ entry->IPAddress.cbData = dataLen;
+ memcpy(entry->IPAddress.pbData, pbEncoded + 1 + lenBytes,
dataLen);
break;
}
@@ -4239,7 +4238,7 @@
i < cEntry && ptr - pbEncoded - 1 - lenBytes <
dataLen; i++)
{
- info->rgAltEntry[i].u.pwszURL =
+ info->rgAltEntry[i].pwszURL =
(LPWSTR)nextData;
size = bytesNeeded;
ret = CRYPT_AsnDecodeAltNameEntry(ptr,
--- trunk/reactos/lib/crypt32/precomp.h 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/lib/crypt32/precomp.h 2005-11-18 02:08:46 UTC (rev 19320)
@@ -8,6 +8,7 @@
#include <libs/pseh/pseh.h>
#include "windef.h"
+#include "winnt.h"
#include "winbase.h"
#include "wincrypt.h"
#include "winreg.h"
@@ -16,6 +17,5 @@
#include "mssip.h"
#include "crypt32_private.h"
#include "wine/debug.h"
+#include "wine/list.h"
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
--- trunk/reactos/w32api/include/wincrypt.h 2005-11-17 23:19:36 UTC (rev 19319)
+++ trunk/reactos/w32api/include/wincrypt.h 2005-11-18 02:08:46 UTC (rev 19320)
@@ -111,6 +111,45 @@
#define CALG_DESX (ALG_CLASS_DATA_ENCRYPT|ALG_TYPE_BLOCK|ALG_SID_DESX)
#define CALG_TLS1PRF (ALG_CLASS_DHASH|ALG_TYPE_ANY|ALG_SID_TLS1PRF)
+typedef struct _CERT_PRIVATE_KEY_VALIDITY {
+ FILETIME NotBefore;
+ FILETIME NotAfter;
+} CERT_PRIVATE_KEY_VALIDITY, *PCERT_PRIVATE_KEY_VALIDITY;
+
+
+/* access state flags */
+#define CERT_ACCESS_STATE_WRITE_PERSIST_FLAG 0x1
+#define CERT_ACCESS_STATE_SYSTEM_STORE_FLAG 0x2
+#define CERT_ACCESS_STATE_LM_SYSTEM_STORE_FLAG 0x4
+
+/* CERT_RDN attribute dwValueType types */
+#define CERT_RDN_TYPE_MASK 0x000000ff
+#define CERT_RDN_ANY_TYPE 0
+#define CERT_RDN_ENCODED_BLOB 1
+#define CERT_RDN_OCTET_STRING 2
+#define CERT_RDN_NUMERIC_STRING 3
+#define CERT_RDN_PRINTABLE_STRING 4
+#define CERT_RDN_TELETEX_STRING 5
+#define CERT_RDN_T61_STRING 5
+#define CERT_RDN_VIDEOTEX_STRING 6
+#define CERT_RDN_IA5_STRING 7
+#define CERT_RDN_GRAPHIC_STRING 8
+#define CERT_RDN_VISIBLE_STRING 9
+#define CERT_RDN_ISO646_STRING 9
+#define CERT_RDN_GENERAL_STRING 10
+#define CERT_RDN_UNIVERSAL_STRING 11
+#define CERT_RDN_INT4_STRING 11
+#define CERT_RDN_BMP_STRING 12
+#define CERT_RDN_UNICODE_STRING 12
+#define CERT_RDN_UTF8_STRING 13
+
+/* CERT_RDN attribute dwValueType flags */
+#define CERT_RDN_FLAGS_MASK 0xff000000
+#define CERT_RDN_ENABLE_T61_UNICODE_FLAG 0x80000000
+#define CERT_RDN_DISABLE_CHECK_TYPE_FLAG 0x4000000
+#define CERT_RDN_ENABLE_UTF8_UNICODE_FLAG 0x2000000
+#define CERT_RDN_DISABLE_IE4_UTF8_FLAG 0x0100000
+
/* physical store dwFlags, also used by CertAddStoreToCollection as
* dwUpdateFlags
*/
@@ -1363,6 +1402,15 @@
typedef LPVOID (WINAPI *PFN_CRYPT_ALLOC)(size_t cbsize);
typedef VOID (WINAPI *PFN_CRYPT_FREE)(LPVOID pv);
+typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
+ DWORD cbSize;
+ DWORD dwMsgEncodingType;
+ HCRYPTPROV hCryptProv;
+ CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
+ void* pvEncryptionAuxInfo;
+ DWORD dwFlags;
+ DWORD dwInnerContentType;
+} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;
typedef struct _CRYPT_DECODE_PARA {
DWORD cbSize;
PFN_CRYPT_ALLOC pfnAlloc;
@@ -1512,12 +1560,22 @@
CRYPT_BIT_BLOB Signature;
} CERT_SIGNED_CONTENT_INFO, *PCERT_SIGNED_CONTENT_INFO;
+typedef struct _CERT_EXTENSIONS {
+ DWORD cExtension;
+ PCERT_EXTENSION rgExtension;
+} CERT_EXTENSIONS, *PCERT_EXTENSIONS;
+
typedef struct _CERT_RDN_ATTR {
LPSTR pszObjId;
DWORD dwValueType;
CERT_RDN_VALUE_BLOB Value;
} CERT_RDN_ATTR, *PCERT_RDN_ATTR;
+typedef struct _CERT_NAME_VALUE {
+ DWORD dwValueType;
+ CERT_RDN_VALUE_BLOB Value;
+} CERT_NAME_VALUE, *PCERT_NAME_VALUE;
+
typedef struct _CERT_RDN {
DWORD cRDNAttr;
PCERT_RDN_ATTR rgRDNAttr;
@@ -1557,6 +1615,22 @@
HCRYPTOIDFUNCADDR hStoreProvFuncAddr2;
} CERT_STORE_PROV_INFO, *PCERT_STORE_PROV_INFO;
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK 0xff
+#define CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_MASK 0x0000ffff
+#define CERT_ALT_NAME_VALUE_ERR_INDEX_SHIFT 0
+#define GET_CERT_ALT_NAME_ENTRY_ERR_INDEX(x) \
+ (((x) >> CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT) & \
+ CERT_ALT_NAME_ENTRY_ERR_INDEX_MASK)
+#define GET_CERT_ALT_NAME_VALUE_ERR_INDEX(x) \
+ ((x) & CERT_ALT_NAME_VALUE_ERR_INDEX_MASK)
+
+typedef struct _CERT_BASIC_CONSTRAINTS2_INFO {
+ BOOL fCA;
+ BOOL fPathLenConstraint;
+ DWORD dwPathLenConstraint;
+} CERT_BASIC_CONSTRAINTS2_INFO, *PCERT_BASIC_CONSTRAINTS2_INFO;
+
typedef BOOL (WINAPI *PFN_CERT_ENUM_SYSTEM_STORE_LOCATION)(
LPCWSTR pwszStoreLocation, DWORD dwFlags, void *pvReserved, void *pvArg);
@@ -1648,7 +1722,31 @@
BOOL WINAPI CertSerializeCertificateStoreElement(PCCERT_CONTEXT pCertContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
BOOL WINAPI CertSerializeCRLStoreElement(PCCRL_CONTEXT pCrlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
BOOL WINAPI CertSerializeCTLStoreElement(PCCTL_CONTEXT pCtlContext, DWORD dwFlags, BYTE *pbElement, DWORD *pcbElement);
-
+BOOL WINAPI CertAddCertificateContextToStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pCertContext, DWORD dwAddDisposition, PCCERT_CONTEXT *ppStoreContext);
+BOOL WINAPI CertAddEncodedCertificateToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded, DWORD dwAddDisposition, PCCERT_CONTEXT *ppCertContext);
+PCCERT_CONTEXT WINAPI CertCreateCertificateContext(DWORD dwCertEncodingType, const BYTE *pbCertEncoded, DWORD cbCertEncoded);
+PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev);
+PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CONTEXT);
+PCCTL_CONTEXT WINAPI CertEnumCTLsInStore(HCERTSTORE hCertStore, PCCTL_CONTEXT pPrev);
+PCCTL_CONTEXT WINAPI CertCreateCTLContext(DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded);
+PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType, const BYTE* pbCrlEncoded, DWORD cbCrlEncoded);
+PCCRL_CONTEXT WINAPI CertEnumCRLsInStore(HCERTSTORE hCertStore, PCCRL_CONTEXT pPrev);
+BOOL WINAPI CryptHashCertificate(HCRYPTPROV hCryptProv, ALG_ID Algid, DWORD dwFlags, const BYTE *pbEncoded, DWORD cbEncoded, BYTE *pbComputedHash, DWORD *pcbComputedHash);
+BOOL WINAPI CertFreeCTLContext( PCCTL_CONTEXT pCtlContext );
+BOOL WINAPI CertDeleteCTLFromStore(PCCTL_CONTEXT pCtlContext);
+BOOL WINAPI CertSetCTLContextProperty(PCCTL_CONTEXT pCTLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+BOOL WINAPI CertGetCTLContextProperty(PCCTL_CONTEXT pCTLContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
+BOOL WINAPI CertAddCTLContextToStore( HCERTSTORE hCertStore, PCCTL_CONTEXT pCtlContext, DWORD dwAddDisposition, PCCTL_CONTEXT *ppStoreContext );
+BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext );
+BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+BOOL WINAPI CertDeleteCRLFromStore(PCCRL_CONTEXT pCrlContext);
+BOOL WINAPI CertAddEncodedCTLToStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType, const BYTE *pbCtlEncoded, DWORD cbCtlEncoded, DWORD dwAddDisposition, PCCTL_CONTEXT *ppCtlContext);
+BOOL WINAPI CertAddEncodedCRLToStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, const BYTE *pbCrlEncoded, DWORD cbCrlEncoded, DWORD dwAddDisposition, PCCRL_CONTEXT *ppCrlContext);
+BOOL WINAPI CertDeleteCertificateFromStore(PCCERT_CONTEXT pCertContext);
+BOOL WINAPI CertSetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, DWORD dwFlags, const void *pvData);
+BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore, PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition, PCCRL_CONTEXT *ppStoreContext );
+BOOL WINAPI CertGetCRLContextProperty(PCCRL_CONTEXT pCRLContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
+BOOL WINAPI CertGetCertificateContextProperty(PCCERT_CONTEXT pCertContext, DWORD dwPropId, void *pvData, DWORD *pcbData);
BOOL WINAPI CertCloseStore(HCERTSTORE,DWORD);
BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE,PCCERT_CONTEXT,LPFILETIME,HCERTSTORE,PCERT_CHAIN_PARA,DWORD,LPVOID,PCCERT_CHAIN_CONTEXT*);
BOOL WINAPI CertVerifyCertificateChainPolicy(LPCSTR,PCCERT_CHAIN_CONTEXT,PCERT_CHAIN_POLICY_PARA,PCERT_CHAIN_POLICY_STATUS);
@@ -1657,9 +1755,12 @@
DWORD WINAPI CertNameToStrW(DWORD,PCERT_NAME_BLOB,DWORD,LPWSTR,DWORD);
HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV,LPCSTR);
HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV,LPCWSTR);
+DWORD WINAPI CertGetNameStringW(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, LPVOID pvType, LPWSTR pszName, DWORD dwName);
+DWORD WINAPI CertGetNameStringA(PCCERT_CONTEXT pCertContext, DWORD dwType, DWORD dwFlags, LPVOID pvType, LPSTR pszName, DWORD dwName);
HCERTSTORE WINAPI CertOpenStore(LPCSTR lpszStoreProvider, DWORD dwEncodingType, HCRYPTPROV hCryptProv, DWORD dwFlags, const void *pvPara);
-PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CONTEXT);
BOOL WINAPI CertFreeCertificateContext(PCCERT_CONTEXT);
+DWORD WINAPI CertNameToStrA(DWORD dwCertEncoding, PCERT_NAME_BLOB pCertName, DWORD dwType, LPSTR psz, DWORD dwSZ);
+DWORD WINAPI CertNameToStrW(DWORD dwCertEncoding, PCERT_NAME_BLOB pCertName, DWORD dwType, LPWSTR psz, DWORD dwSZ);
PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore(HCERTSTORE,PCCERT_CONTEXT,PCCERT_CONTEXT,DWORD*);
PCCERT_CHAIN_CONTEXT WINAPI CertFindChainInStore(HCERTSTORE,DWORD,DWORD,DWORD,const void*,PCCERT_CHAIN_CONTEXT);
BOOL WINAPI CryptAcquireContextA(HCRYPTPROV*,LPCSTR,LPCSTR,DWORD,DWORD);
@@ -1669,6 +1770,7 @@
BOOL WINAPI CryptGenKey(HCRYPTPROV,ALG_ID,DWORD,HCRYPTKEY*);
BOOL WINAPI CryptDeriveKey(HCRYPTPROV,ALG_ID,HCRYPTHASH,DWORD,HCRYPTKEY*);
BOOL WINAPI CryptDestroyKey(HCRYPTKEY);
+BOOL WINAPI CryptEncryptMessage( PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptMessagePara, DWORD dwCert, PCCERT_CONTEXT pccertCert[], const BYTE* pbEncrypted, DWORD dwEncrypted, BYTE* pbBlob, DWORD* dwEncryptedBlob);
#if (WINVER >= 0x0500)
BOOL WINAPI CryptDuplicateHash(HCRYPTHASH,DWORD*,DWORD,HCRYPTHASH*);
BOOL WINAPI CryptDuplicateKey(HCRYPTKEY,DWORD*,DWORD,HCRYPTKEY*);
@@ -1712,6 +1814,9 @@
BOOL WINAPI CryptSetProviderW(LPCWSTR,DWORD);
BOOL WINAPI CryptSetProviderExA(LPCSTR,DWORD,DWORD*,DWORD);
BOOL WINAPI CryptSetProviderExW(LPCWSTR,DWORD,DWORD*,DWORD);
+BOOL WINAPI CryptEncodeObject(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, BYTE *pbEncoded, DWORD *pcbEncoded);
+BOOL WINAPI CryptEncodeObjectEx(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, void *pvEncoded, DWORD *pcbEncoded);
+
#ifdef UNICODE
#define CertNameToStr CertNameToStrW
#define CryptAcquireContext CryptAcquireContextW