Forward RtlAddAccess* to add_access_ace.
[wine] / dlls / crypt32 / cert.c
1 /*
2  * Copyright 2002 Mike McCormack for CodeWeavers
3  * Copyright 2004,2005 Juan Lang
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  */
19 #include <stdarg.h>
20 #include "windef.h"
21 #include "winbase.h"
22 #include "winreg.h"
23 #include "wincrypt.h"
24 #include "wine/debug.h"
25
26 WINE_DEFAULT_DEBUG_CHANNEL(crypt);
27
28 #define WINE_CRYPTCERTSTORE_MAGIC 0x74726563
29
30 typedef struct WINE_CRYPTCERTSTORE
31 {
32     DWORD dwMagic;
33 } WINECRYPT_CERTSTORE;
34
35
36 /*
37  * CertOpenStore
38  *
39  * System Store CA is
40  *  HKLM\\Software\\Microsoft\\SystemCertificates\\CA\\
41  *    Certificates\\<compressed guid>
42  *         "Blob" = REG_BINARY
43  *    CRLs\\<compressed guid>
44  *         "Blob" = REG_BINARY
45  *    CTLs\\<compressed guid>
46  *         "Blob" = REG_BINARY
47  */
48 HCERTSTORE WINAPI CertOpenStore( LPCSTR lpszStoreProvider,
49               DWORD dwMsgAndCertEncodingType, HCRYPTPROV hCryptProv, 
50               DWORD dwFlags, const void* pvPara )
51 {
52     WINECRYPT_CERTSTORE *hcs;
53
54     FIXME("%s %08lx %08lx %08lx %p stub\n", debugstr_a(lpszStoreProvider),
55           dwMsgAndCertEncodingType, hCryptProv, dwFlags, pvPara);
56
57     if( lpszStoreProvider == CERT_STORE_PROV_SYSTEM_A )
58     {
59         FIXME("pvPara = %s\n", debugstr_a( (LPCSTR) pvPara ) );
60     }
61     else if ( lpszStoreProvider == CERT_STORE_PROV_SYSTEM_W )
62     {
63         FIXME("pvPara = %s\n", debugstr_w( (LPCWSTR) pvPara ) );
64     }
65
66     hcs = HeapAlloc( GetProcessHeap(), 0, sizeof (WINECRYPT_CERTSTORE) );
67     if( !hcs )
68         return NULL;
69
70     hcs->dwMagic = WINE_CRYPTCERTSTORE_MAGIC;
71
72     return (HCERTSTORE) hcs;
73 }
74
75 HCERTSTORE WINAPI CertOpenSystemStoreA(HCRYPTPROV hProv,
76  LPCSTR szSubSystemProtocol)
77 {
78     return CertOpenStore( CERT_STORE_PROV_SYSTEM_A, 0, 0,
79      CERT_SYSTEM_STORE_CURRENT_USER | CERT_SYSTEM_STORE_LOCAL_MACHINE |
80      CERT_SYSTEM_STORE_USERS, szSubSystemProtocol );
81 }
82
83 HCERTSTORE WINAPI CertOpenSystemStoreW(HCRYPTPROV hProv,
84  LPCWSTR szSubSystemProtocol)
85 {
86     return CertOpenStore( CERT_STORE_PROV_SYSTEM_W, 0, 0,
87      CERT_SYSTEM_STORE_CURRENT_USER | CERT_SYSTEM_STORE_LOCAL_MACHINE |
88      CERT_SYSTEM_STORE_USERS, szSubSystemProtocol );
89 }
90
91 PCCERT_CONTEXT WINAPI CertEnumCertificatesInStore(HCERTSTORE hCertStore, PCCERT_CONTEXT pPrev)
92 {
93     FIXME("(%p,%p)\n", hCertStore, pPrev);
94     return NULL;
95 }
96
97 BOOL WINAPI CertSaveStore(HCERTSTORE hCertStore, DWORD dwMsgAndCertEncodingType,
98              DWORD dwSaveAs, DWORD dwSaveTo, void* pvSaveToPara, DWORD dwFlags)
99 {
100     FIXME("(%p,%ld,%ld,%ld,%p,%08lx) stub!\n", hCertStore, 
101           dwMsgAndCertEncodingType, dwSaveAs, dwSaveTo, pvSaveToPara, dwFlags);
102     return TRUE;
103 }
104
105 PCCRL_CONTEXT WINAPI CertCreateCRLContext( DWORD dwCertEncodingType,
106   const BYTE* pbCrlEncoded, DWORD cbCrlEncoded)
107 {
108     PCRL_CONTEXT pcrl;
109     BYTE* data;
110
111     TRACE("%08lx %p %08lx\n", dwCertEncodingType, pbCrlEncoded, cbCrlEncoded);
112
113     pcrl = HeapAlloc( GetProcessHeap(), 0, sizeof (CRL_CONTEXT) );
114     if( !pcrl )
115         return NULL;
116
117     data = HeapAlloc( GetProcessHeap(), 0, cbCrlEncoded );
118     if( !data )
119     {
120         HeapFree( GetProcessHeap(), 0, pcrl );
121         return NULL;
122     }
123
124     pcrl->dwCertEncodingType = dwCertEncodingType;
125     pcrl->pbCrlEncoded       = data;
126     pcrl->cbCrlEncoded       = cbCrlEncoded;
127     pcrl->pCrlInfo           = NULL;
128     pcrl->hCertStore         = 0;
129
130     return pcrl;
131 }
132
133 BOOL WINAPI CertAddCRLContextToStore( HCERTSTORE hCertStore,
134              PCCRL_CONTEXT pCrlContext, DWORD dwAddDisposition,
135              PCCRL_CONTEXT* ppStoreContext )
136 {
137     FIXME("%p %p %08lx %p\n", hCertStore, pCrlContext,
138           dwAddDisposition, ppStoreContext);
139     return TRUE;
140 }
141
142 BOOL WINAPI CertFreeCRLContext( PCCRL_CONTEXT pCrlContext)
143 {
144     FIXME("%p\n", pCrlContext );
145
146     return TRUE;
147 }
148
149 BOOL WINAPI CertCloseStore( HCERTSTORE hCertStore, DWORD dwFlags )
150 {
151     WINECRYPT_CERTSTORE *hcs = (WINECRYPT_CERTSTORE *) hCertStore;
152
153     FIXME("%p %08lx\n", hCertStore, dwFlags );
154     if( ! hCertStore )
155         return FALSE;
156
157     if ( hcs->dwMagic != WINE_CRYPTCERTSTORE_MAGIC )
158         return FALSE;
159
160     hcs->dwMagic = 0;
161     HeapFree( GetProcessHeap(), 0, hCertStore );
162
163     return TRUE;
164 }
165
166 BOOL WINAPI CertFreeCertificateContext( PCCERT_CONTEXT pCertContext )
167 {
168     FIXME("%p stub\n", pCertContext);
169     return TRUE;
170 }
171
172 PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore,
173                 DWORD dwCertEncodingType, DWORD dwFlags, DWORD dwType,
174                 const void *pvPara, PCCERT_CONTEXT pPrevCertContext)
175 {
176     FIXME("stub: %p %ld %ld %ld %p %p\n", hCertStore, dwCertEncodingType,
177         dwFlags, dwType, pvPara, pPrevCertContext);
178     SetLastError(CRYPT_E_NOT_FOUND);
179     return NULL;
180 }