Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(87)

Side by Side Diff: nss/lib/certhigh/ocspt.h

Issue 2078763002: Delete bundled copy of NSS and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss@master
Patch Set: Delete bundled copy of NSS and replace with README. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « nss/lib/certhigh/ocspsig.c ('k') | nss/lib/certhigh/ocspti.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 resul ts,
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_ */
OLDNEW
« no previous file with comments | « nss/lib/certhigh/ocspsig.c ('k') | nss/lib/certhigh/ocspti.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698