Mercurial > trustbridge > nss-cmake-static
comparison nss/lib/certhigh/ocspt.h @ 0:1e5118fa0cb1
This is NSS with a Cmake Buildsyste
To compile a static NSS library for Windows we've used the
Chromium-NSS fork and added a Cmake buildsystem to compile
it statically for Windows. See README.chromium for chromium
changes and README.trustbridge for our modifications.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 28 Jul 2014 10:47:06 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1e5118fa0cb1 |
---|---|
1 /* This Source Code Form is subject to the terms of the Mozilla Public | |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | |
4 | |
5 /* | |
6 * Public header for exported OCSP types. | |
7 */ | |
8 | |
9 #ifndef _OCSPT_H_ | |
10 #define _OCSPT_H_ | |
11 | |
12 /* | |
13 * The following are all opaque types. If someone needs to get at | |
14 * a field within, then we need to fix the API. Try very hard not | |
15 * make the type available to them. | |
16 */ | |
17 typedef struct CERTOCSPRequestStr CERTOCSPRequest; | |
18 typedef struct CERTOCSPResponseStr CERTOCSPResponse; | |
19 | |
20 /* | |
21 * XXX I think only those first two above should need to be exported, | |
22 * but until I know for certain I am leaving the rest of these here, too. | |
23 */ | |
24 typedef struct CERTOCSPCertIDStr CERTOCSPCertID; | |
25 typedef struct CERTOCSPSingleResponseStr CERTOCSPSingleResponse; | |
26 | |
27 /* | |
28 * This interface is described in terms of an HttpClient which | |
29 * supports at least a specified set of functions. (An implementer may | |
30 * provide HttpClients with additional functionality accessible only to | |
31 * users with a particular implementation in mind.) The basic behavior | |
32 * is provided by defining a set of functions, listed in an | |
33 * SEC_HttpServerFcnStruct. If the implementor of a SpecificHttpClient | |
34 * registers his SpecificHttpClient as the default HttpClient, then his | |
35 * functions will be called by the user of an HttpClient, such as an | |
36 * OCSPChecker. | |
37 * | |
38 * The implementer of a specific HttpClient (e.g., the NSS-provided | |
39 * DefaultHttpClient), populates an SEC_HttpClientFcnStruct, uses it to | |
40 * register his client, and waits for his functions to be called. | |
41 * | |
42 * For future expandability, the SEC_HttpClientFcnStruct is defined as a | |
43 * union, with the version field acting as a selector. The proposed | |
44 * initial version of the structure is given following the definition | |
45 * of the union. The HttpClientState structure is implementation- | |
46 * dependent, and should be opaque to the user. | |
47 */ | |
48 | |
49 typedef void * SEC_HTTP_SERVER_SESSION; | |
50 typedef void * SEC_HTTP_REQUEST_SESSION; | |
51 | |
52 /* | |
53 * This function creates a SEC_HTTP_SERVER_SESSION object. The implementer of a | |
54 * specific HttpClient will allocate the necessary space, when this | |
55 * function is called, and will free it when the corresponding FreeFcn | |
56 * is called. The SEC_HTTP_SERVER_SESSION object is passed, as an opaque object, | |
57 * to subsequent calls. | |
58 * | |
59 * If the function returns SECSuccess, the returned SEC_HTTP_SERVER_SESSION | |
60 * must be cleaned up with a call to SEC_HttpServer_FreeSession, | |
61 * after processing is finished. | |
62 */ | |
63 typedef SECStatus (*SEC_HttpServer_CreateSessionFcn)( | |
64 const char *host, | |
65 PRUint16 portnum, | |
66 SEC_HTTP_SERVER_SESSION *pSession); | |
67 | |
68 /* | |
69 * This function is called to allow the implementation to attempt to keep | |
70 * the connection alive. Depending on the underlying platform, it might | |
71 * immediately return SECSuccess without having performed any operations. | |
72 * (If a connection has not been kept alive, a subsequent call to | |
73 * SEC_HttpRequest_TrySendAndReceiveFcn should reopen the connection | |
74 * automatically.) | |
75 * | |
76 * If the connection uses nonblocking I/O, this function may return | |
77 * SECWouldBlock and store a nonzero value at "pPollDesc". In that case | |
78 * the caller may wait on the poll descriptor, and should call this function | |
79 * again until SECSuccess (and a zero value at "pPollDesc") is obtained. | |
80 */ | |
81 typedef SECStatus (*SEC_HttpServer_KeepAliveSessionFcn)( | |
82 SEC_HTTP_SERVER_SESSION session, | |
83 PRPollDesc **pPollDesc); | |
84 | |
85 /* | |
86 * This function frees the client SEC_HTTP_SERVER_SESSION object, closes all | |
87 * SEC_HTTP_REQUEST_SESSIONs created for that server, discards all partial results, | |
88 * frees any memory that was allocated by the client, and invalidates any | |
89 * response pointers that might have been returned by prior server or request | |
90 * functions. | |
91 */ | |
92 typedef SECStatus (*SEC_HttpServer_FreeSessionFcn)( | |
93 SEC_HTTP_SERVER_SESSION session); | |
94 | |
95 /* | |
96 * This function creates a SEC_HTTP_REQUEST_SESSION object. The implementer of a | |
97 * specific HttpClient will allocate the necessary space, when this | |
98 * function is called, and will free it when the corresponding FreeFcn | |
99 * is called. The SEC_HTTP_REQUEST_SESSION object is passed, as an opaque object, | |
100 * to subsequent calls. | |
101 * | |
102 * An implementation that does not support the requested protocol variant | |
103 * (usually "http", but could eventually allow "https") or request method | |
104 * should return SECFailure. | |
105 * | |
106 * Timeout values may include the constants PR_INTERVAL_NO_TIMEOUT (wait | |
107 * forever) or PR_INTERVAL_NO_WAIT (nonblocking I/O). | |
108 * | |
109 * If the function returns SECSuccess, the returned SEC_HTTP_REQUEST_SESSION | |
110 * must be cleaned up with a call to SEC_HttpRequest_FreeSession, | |
111 * after processing is finished. | |
112 */ | |
113 typedef SECStatus (*SEC_HttpRequest_CreateFcn)( | |
114 SEC_HTTP_SERVER_SESSION session, | |
115 const char *http_protocol_variant, /* usually "http" */ | |
116 const char *path_and_query_string, | |
117 const char *http_request_method, | |
118 const PRIntervalTime timeout, | |
119 SEC_HTTP_REQUEST_SESSION *pRequest); | |
120 | |
121 /* | |
122 * This function sets data to be sent to the server for an HTTP request | |
123 * of http_request_method == POST. If a particular implementation | |
124 * supports it, the details for the POST request can be set by calling | |
125 * this function, prior to activating the request with TrySendAndReceiveFcn. | |
126 * | |
127 * An implementation that does not support the POST method should | |
128 * implement a SetPostDataFcn function that returns immediately. | |
129 * | |
130 * Setting http_content_type is optional, the parameter may | |
131 * by NULL or the empty string. | |
132 */ | |
133 typedef SECStatus (*SEC_HttpRequest_SetPostDataFcn)( | |
134 SEC_HTTP_REQUEST_SESSION request, | |
135 const char *http_data, | |
136 const PRUint32 http_data_len, | |
137 const char *http_content_type); | |
138 | |
139 /* | |
140 * This function sets an additional HTTP protocol request header. | |
141 * If a particular implementation supports it, one or multiple headers | |
142 * can be added to the request by calling this function once or multiple | |
143 * times, prior to activating the request with TryFcn. | |
144 * | |
145 * An implementation that does not support setting additional headers | |
146 * should implement an AddRequestHeaderFcn function that returns immediately. | |
147 */ | |
148 typedef SECStatus (*SEC_HttpRequest_AddHeaderFcn)( | |
149 SEC_HTTP_REQUEST_SESSION request, | |
150 const char *http_header_name, | |
151 const char *http_header_value); | |
152 | |
153 /* | |
154 * This function initiates or continues an HTTP request. After | |
155 * parameters have been set with the Create function and, optionally, | |
156 * modified or enhanced with the AddParams function, this call creates | |
157 * the socket connection and initiates the communication. | |
158 * | |
159 * If a timeout value of zero is specified, indicating non-blocking | |
160 * I/O, the client creates a non-blocking socket, and returns a status | |
161 * of SECWouldBlock and a non-NULL PRPollDesc if the operation is not | |
162 * complete. In that case all other return parameters are undefined. | |
163 * The caller is expected to repeat the call, possibly after using | |
164 * PRPoll to determine that a completion has occurred, until a return | |
165 * value of SECSuccess (and a NULL value for pPollDesc) or a return | |
166 * value of SECFailure (indicating failure on the network level) | |
167 * is obtained. | |
168 * | |
169 * http_response_data_len is both input and output parameter. | |
170 * If a pointer to a PRUint32 is supplied, the http client is | |
171 * expected to check the given integer value and always set an out | |
172 * value, even on failure. | |
173 * An input value of zero means, the caller will accept any response len. | |
174 * A different input value indicates the maximum response value acceptable | |
175 * to the caller. | |
176 * If data is successfully read and the size is acceptable to the caller, | |
177 * the function will return SECSuccess and set http_response_data_len to | |
178 * the size of the block returned in http_response_data. | |
179 * If the data read from the http server is larger than the acceptable | |
180 * size, the function will return SECFailure. | |
181 * http_response_data_len will be set to a value different from zero to | |
182 * indicate the reason of the failure. | |
183 * An out value of "0" means, the failure was unrelated to the | |
184 * acceptable size. | |
185 * An out value of "1" means, the result data is larger than the | |
186 * accpeptable size, but the real size is not yet known to the http client | |
187 * implementation and it stopped retrieving it, | |
188 * Any other out value combined with a return value of SECFailure | |
189 * will indicate the actual size of the server data. | |
190 * | |
191 * The caller is permitted to provide NULL values for any of the | |
192 * http_response arguments, indicating the caller is not interested in | |
193 * those values. If the caller does provide an address, the HttpClient | |
194 * stores at that address a pointer to the corresponding argument, at | |
195 * the completion of the operation. | |
196 * | |
197 * All returned pointers will be owned by the the HttpClient | |
198 * implementation and will remain valid until the call to | |
199 * SEC_HttpRequest_FreeFcn. | |
200 */ | |
201 typedef SECStatus (*SEC_HttpRequest_TrySendAndReceiveFcn)( | |
202 SEC_HTTP_REQUEST_SESSION request, | |
203 PRPollDesc **pPollDesc, | |
204 PRUint16 *http_response_code, | |
205 const char **http_response_content_type, | |
206 const char **http_response_headers, | |
207 const char **http_response_data, | |
208 PRUint32 *http_response_data_len); | |
209 | |
210 /* | |
211 * Calling CancelFcn asks for premature termination of the request. | |
212 * | |
213 * Future calls to SEC_HttpRequest_TrySendAndReceive should | |
214 * by avoided, but in this case the HttpClient implementation | |
215 * is expected to return immediately with SECFailure. | |
216 * | |
217 * After calling CancelFcn, a separate call to SEC_HttpRequest_FreeFcn | |
218 * is still necessary to free resources. | |
219 */ | |
220 typedef SECStatus (*SEC_HttpRequest_CancelFcn)( | |
221 SEC_HTTP_REQUEST_SESSION request); | |
222 | |
223 /* | |
224 * Before calling this function, it must be assured the request | |
225 * has been completed, i.e. either SEC_HttpRequest_TrySendAndReceiveFcn has | |
226 * returned SECSuccess, or the request has been canceled with | |
227 * a call to SEC_HttpRequest_CancelFcn. | |
228 * | |
229 * This function frees the client state object, closes all sockets, | |
230 * discards all partial results, frees any memory that was allocated | |
231 * by the client, and invalidates all response pointers that might | |
232 * have been returned by SEC_HttpRequest_TrySendAndReceiveFcn | |
233 */ | |
234 typedef SECStatus (*SEC_HttpRequest_FreeFcn)( | |
235 SEC_HTTP_REQUEST_SESSION request); | |
236 | |
237 typedef struct SEC_HttpClientFcnV1Struct { | |
238 SEC_HttpServer_CreateSessionFcn createSessionFcn; | |
239 SEC_HttpServer_KeepAliveSessionFcn keepAliveSessionFcn; | |
240 SEC_HttpServer_FreeSessionFcn freeSessionFcn; | |
241 SEC_HttpRequest_CreateFcn createFcn; | |
242 SEC_HttpRequest_SetPostDataFcn setPostDataFcn; | |
243 SEC_HttpRequest_AddHeaderFcn addHeaderFcn; | |
244 SEC_HttpRequest_TrySendAndReceiveFcn trySendAndReceiveFcn; | |
245 SEC_HttpRequest_CancelFcn cancelFcn; | |
246 SEC_HttpRequest_FreeFcn freeFcn; | |
247 } SEC_HttpClientFcnV1; | |
248 | |
249 typedef struct SEC_HttpClientFcnStruct { | |
250 PRInt16 version; | |
251 union { | |
252 SEC_HttpClientFcnV1 ftable1; | |
253 /* SEC_HttpClientFcnV2 ftable2; */ | |
254 /* ... */ | |
255 } fcnTable; | |
256 } SEC_HttpClientFcn; | |
257 | |
258 /* | |
259 * ocspMode_FailureIsVerificationFailure: | |
260 * This is the classic behaviour of NSS. | |
261 * Any OCSP failure is a verification failure (classic mode, default). | |
262 * Without a good response, OCSP networking will be retried each time | |
263 * it is required for verifying a cert. | |
264 * | |
265 * ocspMode_FailureIsNotAVerificationFailure: | |
266 * If we fail to obtain a valid OCSP response, consider the | |
267 * cert as good. | |
268 * Failed OCSP attempts might get cached and not retried until | |
269 * minimumSecondsToNextFetchAttempt. | |
270 * If we are able to obtain a valid response, the cert | |
271 * will be considered good, if either status is "good" | |
272 * or the cert was not yet revoked at verification time. | |
273 * | |
274 * Additional failure modes might be added in the future. | |
275 */ | |
276 typedef enum { | |
277 ocspMode_FailureIsVerificationFailure = 0, | |
278 ocspMode_FailureIsNotAVerificationFailure = 1 | |
279 } SEC_OcspFailureMode; | |
280 | |
281 /* | |
282 * A ResponderID identifies the responder -- or more correctly, the | |
283 * signer of the response. The ASN.1 definition of a ResponderID is: | |
284 * | |
285 * ResponderID ::= CHOICE { | |
286 * byName [1] EXPLICIT Name, | |
287 * byKey [2] EXPLICIT KeyHash } | |
288 * | |
289 * Because it is CHOICE, the type of identification used and the | |
290 * identification itself are actually encoded together. To represent | |
291 * this same information internally, we explicitly define a type and | |
292 * save it, along with the value, into a data structure. | |
293 */ | |
294 | |
295 typedef enum { | |
296 ocspResponderID_other = -1, /* unknown kind of responderID */ | |
297 ocspResponderID_byName = 1, | |
298 ocspResponderID_byKey = 2 | |
299 } CERTOCSPResponderIDType; | |
300 | |
301 #endif /* _OCSPT_H_ */ |