1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_Connection.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 38552 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SSL_SSL_CONNECTION_H_
17 #define NN_SSL_SSL_CONNECTION_H_
18 
19 #include <nn/Result.h>
20 #include <nn/Handle.h>
21 #include <nn/os.h>
22 #include <nn/util/util_NonCopyable.h>
23 #include <nn/ssl/ssl_Const.h>
24 #include <nn/ssl/ssl_Types.h>
25 #include <nn/ssl/ssl_CertStore.h>
26 #include <nn/ssl/ssl_CrlStore.h>
27 #include <nn/ssl/ssl_ClientCert.h>
28 #include <nn/ssl/ssl_ConnectionIpc.h>
29 
30 
31 #ifdef __cplusplus
32 
33 
34 namespace nn {
35 namespace ssl {
36 
37 
38 /* Please see man pages for details
39 
40 */
41 class Connection : private nn::util::NonCopyable<Connection>
42 {
43 public:
44 
45     //----------------------------------------
46     //
47     //
48 
49     /* Please see man pages for details
50 
51 
52     */
53     explicit Connection(s32 socketDesc);
54 
55     /* Please see man pages for details
56 
57     */
58     explicit Connection();
59 
60     /* Please see man pages for details
61 
62     */
63     virtual ~Connection(void);
64 
65     /* Please see man pages for details
66 
67 
68 
69 
70     */
71     bool AssignSocket(s32 socketDesc);
72 
73     /* Please see man pages for details
74 
75 
76 
77 
78 
79 
80 
81 
82 
83     */
84     nn::Result SetServerCertBuffer(uptr bufferAddress, size_t bufferSize);
85 
86     /* Please see man pages for details
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103                                                                                        
104 
105 
106 
107 
108 
109 
110     */
111     nn::Result Initialize(const char* pServerName, u32 verifyOpt = VERIFY_NONE);
112 
113     /* Please see man pages for details
114 
115     */
116     nn::Result AssignServer(const char* pServerName, u32 verifyOpt = VERIFY_NONE){return Initialize(pServerName, verifyOpt);}
117 
118     /* Please see man pages for details
119 
120 
121 
122 
123 
124 
125 
126 
127     */
128     nn::Result Shutdown(void);
129 
130     //
131 
132 
133     //----------------------------------------
134     //
135     //
136 
137     /* Please see man pages for details
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152     */
153     nn::Result DoHandshake(void);
154 
155     /* Please see man pages for details
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166     */
167     nn::Result DoHandshake( size_t* pServerCertSize, u32* pServerCertNum = NULL);
168 
169     //
170 
171     //----------------------------------------
172     //
173     //
174 
175     /* Please see man pages for details
176 
177 
178 
179 
180 
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193     */
194     nn::Result Read(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL);
195 
196 
197     /* Please see man pages for details
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211     */
212     nn::Result Peek(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL);
213 
214     /* Please see man pages for details
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227 
228     */
229     nn::Result Write(const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier = NULL);
230 
231     //
232 
233     //----------------------------------------
234     //
235     //
236 
237     /* Please see man pages for details
238 
239 
240 
241 
242 
243 
244 
245 
246 
247 
248 
249 
250 
251 
252 
253 
254 
255     */
256     nn::Result SetServerCertStore(CertStore& certStore);
257 
258     /* Please see man pages for details
259 
260 
261 
262 
263 
264 
265 
266     */
267     nn::Result SetClientCert(ClientCert& clientCert);
268 
269     /* Please see man pages for details
270 
271 
272 
273 
274 
275 
276 
277     */
278     nn::Result SetCRLStore(CrlStore& crlStore);
279 
280     /* Please see man pages for details
281 
282 
283 
284 
285 
286 
287 
288      */
289     nn::Result AddEVPolicyId( const char* pPolicyId );
290 
291     //
292 
293     /* Please see man pages for details
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308     */
309     nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions );
310 
311     /* Please see man pages for details
312 
313 
314 
315 
316 
317 
318 
319 
320 
321 
322 
323 
324 
325 
326     */
327     nn::Result GetCipherInfo( char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits );
328 
329 
330     /*
331 
332 
333 
334 
335 
336 
337 
338      */
339     nn::Result GetCertVerifyErrors( u32* pCertVerifyErrors );
340 
341 #ifdef NDEBUG_ENABLE
342     /*
343 
344 
345      */
GetConnectionHandle()346     ConnectionHandle GetConnectionHandle(){return m_connectHandle;}
347 #endif
348 
349 
350 private:
351     /* Please see man pages for details
352 
353      */
354     bool m_isAssigned;
355     NN_PADDING3;
356 
357     /* Please see man pages for details
358 
359      */
360     s32 m_socket;
361     /* Please see man pages for details
362 
363     */
364     ConnectionHandle m_connectHandle;
365 
366     /* Please see man pages for details
367 
368      */
369     nn::Handle m_privateIpcSession;
370 
371     /* Please see man pages for details
372 
373      */
374     ConnectionIpc m_privateIpcClient;
375 
376     /* Please see man pages for details
377 
378      */
379     nn::os::TransferMemoryBlock m_serverCertBuffer;
380 
381     /* Please see man pages for details
382 
383 
384     */
IsAssigned()385     bool IsAssigned(){return m_isAssigned;}
386 
387 
388     /* Please see man pages for details
389 
390 
391     */
392     Result AssignPrivateIpcClient( void );
393 
394     /* Please see man pages for details
395 
396 
397     */
398     Result ShutdownConnection( void );
399 };
400 
401 
402 } // end of namespace ssl
403 } // end of namespace nn
404 
405 
406 #endif // __cplusplus
407 
408 
409 
410 #include <nn/util/detail/util_CLibImpl.h>
411 
412 
413 /* Please see man pages for details
414 
415 
416 
417 
418 
419 
420 
421 
422 */
423 
424 /* Please see man pages for details
425 
426 
427 
428 
429 */
430 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslConnection, nn::ssl::Connection, 56, u32);
431 
432 /* Please see man pages for details
433 
434 */
435 NN_EXTERN_C bool nnsslConnectionAssignSocket(nnsslConnection* this_, s32 socket);
436 
437 /* Please see man pages for details
438 
439 */
440 NN_EXTERN_C nnResult nnsslConnectionAssignServer(nnsslConnection* this_, const char* pServerName, u32 verifyOpt);
441 
442 /* Please see man pages for details
443 
444 */
445 NN_EXTERN_C nnResult nnsslConnectionSetServerCertBuffer(nnsslConnection* this_, uptr bufferAddress, size_t bufferSize);
446 
447 /* Please see man pages for details
448 
449 */
450 NN_EXTERN_C nnResult nnsslConnectionShutdown(nnsslConnection* this_);
451 
452 /* Please see man pages for details
453 
454 */
455 NN_EXTERN_C nnResult nnsslConnectionDoHandshake(nnsslConnection* this_);
456 
457 /* Please see man pages for details
458 
459 */
460 NN_EXTERN_C nnResult nnsslConnectionDoHandshakeEx(nnsslConnection* this_, size_t* pServerCertSize, u32* pServerCertNum);
461 
462 /* Please see man pages for details
463 
464 */
465 NN_EXTERN_C nnResult nnsslConnectionRead(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier);
466 
467 /* Please see man pages for details
468 
469 */
470 NN_EXTERN_C nnResult nnsslConnectionPeek(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier);
471 
472 /* Please see man pages for details
473 
474 */
475 NN_EXTERN_C nnResult nnsslConnectionWrite(nnsslConnection* this_, const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier);
476 
477 /* Please see man pages for details
478 
479 */
480 NN_EXTERN_C nnResult nnsslConnectionSetServerCertStore(nnsslConnection* this_, nnsslCertStore* certStore);
481 
482 /* Please see man pages for details
483 
484 */
485 NN_EXTERN_C nnResult nnsslConnectionSetClientCert(nnsslConnection* this_, nnsslClientCert* pClientCert);
486 
487 /* Please see man pages for details
488 
489 */
490 NN_EXTERN_C nnResult nnsslConnectionSetCRLStore(nnsslConnection* this_, nnsslCrlStore* crlStore);
491 
492 /* Please see man pages for details
493 
494 */
495 NN_EXTERN_C nnResult nnsslConnectionDisableVerifyOptionForDebug(nnsslConnection* this_, u32 excludeVerifyOptions);
496 
497 /* Please see man pages for details
498 
499 */
500 NN_EXTERN_C nnResult nnsslConnectionGetCipherInfo(nnsslConnection* this_, char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits );
501 
502 /* Please see man pages for details
503 
504 */
505 NN_EXTERN_C nnResult nnsslConnectionGetCertVerifyErrors(nnsslConnection* this_, u32* pCertVerifyErrors );
506 
507 /*
508 
509 
510 
511 */
512 
513 #endif /* NN_SSL_SSL_CONNECTION_H_ */
514