1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: ssl_Connection.h 4 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 5 These coded instructions, statements, and computer programs contain 6 proprietary information of Nintendo of America Inc. and/or Nintendo 7 Company Ltd., and are protected by Federal copyright law. They may 8 not be disclosed to third parties or copied or duplicated in any form, 9 in whole or in part, without the prior written consent of Nintendo. 10 $Rev: 31762 $ 11 *--------------------------------------------------------------------------- 12 13 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