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: 25843 $ 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 /*! 39 @brief SSLの通信を表すクラスです。本クラスの1つのインスタンスは、「1socketに対するSSL通信」を担います。 40 */ 41 class Connection : private nn::util::NonCopyable<Connection> 42 { 43 public: 44 45 //---------------------------------------- 46 //! @name 初期化/終了 47 //@{ 48 49 /*! 50 @brief コンストラクタです。SSL通信に利用するSocketを設定します。 51 @param[in] socketDesc Socketディスクリプタ 52 */ 53 explicit Connection(s32 socketDesc); 54 55 /*! 56 @brief コンストラクタです。Socketの設定を行わないタイプのコンストラクタですので、SSL通信前に別途 @ref AssignSocket で通信に利用するSocketを設定する必要があります。 57 */ 58 explicit Connection(); 59 60 /*! 61 @brief デストラクタです。 62 */ 63 virtual ~Connection(void); 64 65 /*! 66 @brief SSL通信に利用するSocketを設定します。すでにSocketを設定済みのConnectionには、設定できません。 67 @param[in] socketDesc Socketディスクリプタ 68 @return Socketが設定されたか否か(trueなら設定された) 69 @note 本関数では通信設定のみが実施され、ネットワークレベルの接続は行われません。ネットワーク通信が開始されるのは、 @ref DoHandshake 関数呼び出し時となります。 70 */ 71 bool AssignSocket(s32 socketDesc); 72 73 /*! 74 @brief サーバ証明書取得用のバッファを設定します。@ref Initialize()実施後に使用してください。 75 本関数はバッファの設定までを行うものです。実際にサーバ証明書がバッファに書き込まれるのは、DoHandshake()実行時になります。 76 @param[in] bufferAddress バッファの先頭を指すポインタ。バッファ用メモリは4096 バイト整合である必要があります。 77 @param[in] bufferSize バッファのサイズ。 78 @return 処理の結果が返ります。<BR/> 79 */ 80 nn::Result SetServerCertBuffer(uptr bufferAddress, size_t bufferSize); 81 82 /*! 83 @brief Connectionを初期化します。 84 ※本関数では通信設定のみが実施され、ネットワークレベルの接続は行われません。ネットワーク通信が開始されるのは、 @ref DoHandshake 関数呼び出し時となります。 85 @param[in] pServerName 通信先サーバのホスト名。SSL通信時には、このホスト名と「サーバ証明書の CommonName もしくは<BR/> 86 subjectAltName 拡張領域の dnsName/iPAddress」 を比較し、一致していなかった場合は接続エラーとなります。<BR/> 87 指定できる文字列長は、ヌル文字を含めてNN_SOCKET_MAXDNAMEバイトまでです。 88 @param[in] verifyOpt SSLのサーバ検証に関するオプション設定。デフォルトのサーバ検証では実施しない設定となっている検証オプションを、実施する場合に利用します。<BR/> 89 (デフォルトのサーバ検証を用いる場合は、この引数は省略できます。)<BR/> 90 引数には、実施する検証オプションを表す @ref nn::ssl::VerifyOption 列挙体の値を設定します。(複数の値を設定したい場合は、複数値の論理和を設定します。)<BR/> 91 現在この引数に設定可能な値は、以下となります。<BR/> 92 @ref nn::ssl::VERIFY_DATE : サーバ証明書の期限切れ検証を実施します。<BR/> 93 @ref nn::ssl::USE_SESSION_CACHE : resumptionを利用します。(つまり同じホストに連続で接続する際、セッションの再利用を試みます。)<BR/> 94 @ref nn::ssl::VERIFY_EV : EV証明書検証を実施します(この検証では、サーバ証明書がEV証明書に紐づいたもので無い限り、検証失敗となります。)<BR/> 95 @ref nn::ssl::VERIFY_IGNORE : サーバ証明書検証を行いますが、検証結果は無視して接続します。(証明書検証の結果は、@ref GetCertVerifyErrors で取得できます。)<BR/> 96 @ref nn::ssl::GET_ALL_SERVER_CERT_CHAIN : @ref SetServerCertBuffer で指定したバッファにサーバ証明書を保存する際、証明書チェーン内の全証明書データを保存します(本オプションが指定されない場合は、サーバ証明書のみが保存されます)<BR/> 97 ※@ref VerifyOption 列挙体に定義が存在するCommonName検証(@ref VERIFY_COMMON_NAME)、RootCA検証(@ref VERIFY_ROOT_CA)、SubjectAlternativeName検証(@ref VERIFY_SUBJECT_ALT_NAME)は、デフォルトで実施されます。<BR/> 98 ※@ref nn::ssl::GET_ALL_SERVER_CERT_CHAIN で証明書チェーン内の全証明書データを保存する場合は、データは[証明書データ長(4BYTE)]+[証明書データ]が並ぶ形となります。<BR/> 99 データの並び順は、チェーン先頭の証明書(=サーバ証明書)から、チェーン末尾(CA証明書)の順になります。ただしCA検証がNGの場合は、CA証明書データは含まれません(CA証明書が特定できなためです)。<BR/> 100 @return 処理の結果が返ります。<BR/> 101 */ 102 nn::Result Initialize(const char* pServerName, u32 verifyOpt = VERIFY_NONE); 103 104 /*! 105 @brief @ref Initialize の別名関数です。互換性のために残されています。今後は @ref Initialize を使用してください。 106 */ 107 nn::Result AssignServer(const char* pServerName, u32 verifyOpt = VERIFY_NONE){return Initialize(pServerName, verifyOpt);} 108 109 /*! 110 @brief 通信の終了処理を実施します。 111 @return 処理の結果が返ります。<BR> 112 @attention 機器が同時に管理できるSSL通信の数は有限です。使わなくなった通信に対しては必ずこの関数を実行して、他通信に管理リソースを回してください。 113 @retval Description== @ref nn::ssl::EFAILED 受信、あるいは送信中に、シャットダウンしたことを示します。 114 @retval Description== @ref nn::ssl::ESSLID 対象のSSLコネクションは不正なものです。(ライブラリ内部エラーです) 115 */ 116 nn::Result Shutdown(void); 117 118 //@} 119 120 121 //---------------------------------------- 122 //! @name SSLハンドシェイク 123 //@{ 124 125 /*! 126 @brief SSL Handshakeを実施します。 127 @return 処理の結果が返ります。<BR> 128 @retval Description== @ref nn::ssl::EFAILED SSLプロトコルの失敗によりエラーが起こったことを表します。(サーバー側でクライアント証明書の検証が失敗した場合等) 129 @retval Description== @ref nn::ssl::EWANT_READ 非同期ソケット使用時に 受信関数(nn::socket::Read()等)が操作の完了を待たずに返ってきたことを表します。 130 再試行してください。 131 @retval Description== @ref nn::ssl::EWANT_WRITE 非同期ソケット使用時に 受信関数(nn::socket::Write()等)が操作の完了を待たずに返ってきたことを表します。 132 再試行してください。 133 @retval Description== @ref nn::ssl::ESYSCALL 内部で使用しているライブラリ関数が予期せぬエラーを返したことを表します。 134 (サーバーから異常な応答があった場合等) 135 @retval Description== @ref nn::ssl::EZERO_RETURN ソケットの読み込み/書き込み関数が0を返したことを表します。 136 @retval Description== @ref nn::ssl::EWANT_CONNECT 非同期ソケット使用時にまだ接続が完了していないことを表します。 137 再試行してください。 138 @retval Description== @ref nn::ssl::ESSLID 対象のSSLコネクションは不正なものです。(ライブラリ内部エラーです) 139 @retval Description== @ref nn::ssl::EVERIFY_COMMON_NAME サーバ証明書の CommonName と @ref AssignServer()関数で指定したサーバ名が一致しないため、サーバ認証に失敗しました。 140 @retval Description== @ref nn::ssl::EVERIFY_CHAIN サーバ証明書の証明書チェインが正しくないため、サーバ認証に失敗しました。 141 @retval Description== @ref nn::ssl::EVERIFY_ROOT_CA サーバ証明書の Root CA 証明書が、ライブラリに設定されているものと異なっていたため、サーバ認証に失敗しました。 142 @retval Description== @ref nn::ssl::EVERIFY_DATE サーバ証明書が有効期限外であったため、サーバ認証に失敗しました。( @ref AssignServer()のverifyOptで @ref nn::ssl::VERIFY_DATE を設定している場合のみ返りうる値) 143 @retval Description== @ref nn::ssl::EVERIFY_REVOKED_CERT 失効リストに登録されているサーバ証明書であったため、サーバ認証に失敗しました。 144 */ 145 nn::Result DoHandshake(void); 146 147 /*! 148 @brief SSL Handshakeを実施すると共に、SetServerCertBuffer()で設定したサーバ証明書保存用バッファに保存された証明書データの情報を、引数で受け取ることができます。 149 SetServerCertBuffer()が実行されていない(=サーバ証明書保存用バッファが設定されていない)場合は、@ref DoHandshake()と同様の動作となります。 150 @param[out] pServerCertSize 保存されたサーバ証明書データのサイズを格納するバッファ。 151 @param[out] pServerCertNum 保存されたサーバ証明書の個数を格納するバッファ。(GET_ALL_SERVER_CERT_CHAINオプションを有効にしてサーバ証明書チェーン内の全証明書データを保存した場合に、証明書チェーン内の証明書数を取得するために用います。サーバ証明書のみ取得する場合など、個数を必要としない場合は省略できます) 152 @return 処理の結果が返ります。<BR> 153 @retval Description== @ref nn::ssl::EGET_SERVER_CERT 証明書データのサイズがSetServerCertBuffer()で設定したバッファよりも大きいため、全データを保存できませんでした。(サーバーとの接続は正常終了していますので、以降の通信を続ける事はできます。) 154 @retval Description== (他の返値の定義は、引数無しの @ref DoHandshake()と同様です。) 155 */ 156 nn::Result DoHandshake( size_t* pServerCertSize, u32* pServerCertNum = NULL); 157 158 //@} 159 160 //---------------------------------------- 161 //! @name データの送受信 162 //@{ 163 164 /*! 165 @brief SSL接続経由でデータの読み込みを行います。 166 @param[out] pDataBuf データを格納するバッファ。 167 @param[in] dataBufSize pDataBufのサイズ 168 @param[out] pReadSizeCourier 読み取ったデータサイズを格納するバッファ。(読み取ったデータサイズを必要としない場合は、省略可) 169 @return 処理の結果が返ります。<BR> 170 @retval Description== @ref nn::ssl::EFAILED SSLプロトコルの失敗によりエラーが起こったことを表します。 171 @retval Description== @ref nn::ssl::EWANT_READ 非同期ソケット使用時に受信関数( @ref nn::socket::Read()等)が操作の完了を待たずに返ってきたことを表します。 172 再試行してください。 173 @retval Description== @ref nn::ssl::ESYSCALL 内部で使用しているライブラリ関数が予期せぬエラーを返したことを表します。 174 (サーバーから異常な応答があった場合等) 175 @retval Description== @ref nn::ssl::EZERO_RETURN 受信関数( @ref nn::socket::Read()等)が0を返したことを表します。サーバ側がSSL接続を閉じました。 176 @retval Description== @ref nn::ssl::ESSLID 対象のSSLコネクションは不正なものです。(ライブラリ内部エラーです) 177 */ 178 nn::Result Read(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL); 179 180 181 /*! 182 @brief SSL接続経由で受信済みのデータを、状態を変更せずに先読みします。 183 @param[out] pDataBuf データを格納するバッファ。 184 @param[in] dataBufSize pDataBufのサイズ 185 @param[out] pReadSizeCourier 読み取ったデータサイズを格納するバッファ。(読み取ったデータサイズを必要としない場合は、省略可) 186 @return 処理の結果が返ります。<BR> 187 @retval 返値の定義は、引数無しの @ref Read と同様です。 188 */ 189 nn::Result Peek(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL); 190 191 /*! 192 @brief SSL接続経由でデータの書き込みを行います。 193 @param[out] pDataBuf 書き込むデータを格納したバッファ。 194 @param[in] dataBufSize pDataBufのサイズ 195 @param[out] pWrittenDataSizeCourier 書き込んだデータサイズを格納するバッファ。(書き込んだデータサイズを必要としない場合は、省略可) 196 @return 処理の結果が返ります。<BR> 197 @retval Description== @ref nn::ssl::EFAILED SSLプロトコルの失敗によりエラーが起こったことを表します。 198 @retval Description== @ref nn::ssl::EWANT_WRITE 非同期ソケット使用時に送信関数( @ref nn::socket::Write )が操作の完了を待たずに返ってきたことを表します。 199 再試行してください。 200 @retval Description== @ref nn::ssl::ESYSCALL 内部で使用しているライブラリ関数が予期せぬエラーを返したことを表します。 201 (サーバーから異常な応答があった場合等) 202 @retval Description== @ref nn::ssl::EZERO_RETURN 送信関数( @ref nn::socket::Write 等)が0を返したことを表します。サーバ側がSSL接続を閉じました。 203 @retval Description== @ref nn::ssl::ESSLID 対象のSSLコネクションは不正なものです。(ライブラリ内部エラーです) 204 */ 205 nn::Result Write(const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier = NULL); 206 207 //@} 208 209 //---------------------------------------- 210 //! @name 証明書&CRL設定 211 //@{ 212 /*! 213 @brief SSL接続で使用する証明書ストアを設定します。API利用者が独自の証明書ストアを設定するためのAPIです。 214 @param[in] certStore 設定する証明書ストア 215 @return 処理の結果が返ります。<BR> 216 */ 217 nn::Result SetServerCertStore(CertStore& certStore); 218 219 /*! 220 @brief SSL接続で使用するクライアント証明書を設定します。 221 @param[in] clientCert 設定するクライアント証明書。 222 @return 処理の結果が返ります。<BR> 223 */ 224 nn::Result SetClientCert(ClientCert& clientCert); 225 226 /*! 227 @brief SSL接続で使用するCRLストアを設定します。API利用者が独自のCRLストアを設定するためのAPIです。 228 @param[in] crlStore 設定するCRLストア 229 @return 処理の結果が返ります。<BR> 230 */ 231 nn::Result SetCRLStore(CrlStore& crlStore); 232 233 //@} 234 235 /** 236 @brief 指定したビットのSSL通信の検証内容を削除します。 237 デフォルトで検証する項目は安全を守るためのものです。デバッグ目的以外で検証項目を減らさないでください。 238 @param[in] excludeVerifyOptions SSLの検証方法に関して、除外対象を表すオプション。除外したい検証方法を表す@ref nn::ssl::VerifyOption列挙体の値を設定します。(複数の値を設定したい場合は、複数値の論理を設定します。)<BR/> 239 現在この引数に設定可能な値は、以下となります。<BR/> 240 @ref nn::ssl::VERIFY_COMMON_NAME : 証明書の CommonName が @ref AssignServer 関数で指定したホスト名と一致するか検証します。<BR/> 241 @ref nn::ssl::VERIFY_SUBJECT_ALT_NAME : CommonNameの検証を行う際に、証明書にSubjectAltNameの記述がある場合はそちらを優先して使用します。<BR/> 242 @ref nn::ssl::VERIFY_ROOT_CA : 証明書の Root CA を検証します。<BR/> 243 @return 処理の結果が返ります。<BR> 244 @retval Description== @ref nn::ssl::EFAILED 処理が失敗したことを示します。(不正な引数など) 245 @retval Description== @ref nn::ssl::ESSLID 対象のSSLコネクションは不正なものです。(ライブラリ内部エラーです) 246 */ 247 nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions ); 248 249 /** 250 @brief 対象SSL通信の暗号化の情報を得ます。本関数は特殊なユースケース用の関数であり、通常ユーザーの利用は想定していません。 251 @param[out] pVersionBuf バージョンの文字列を格納するバッファ 252 @param[in] versionBufSize pVersionBufのサイズ 253 @param[out] pCipherKindStrBuf 暗号の種類の文字列を格納するバッファ 254 @param[in] cipherKindStrBufSize pCipherKindStrBufSizeのサイズ 255 @param[out] pAlgBits 暗号のアルゴリズム上のキーのビット数を格納するバッファ 256 @param[out] pEffectiveBits 暗号の実効強度のビット数を格納するバッファ 257 @return 処理の結果が返ります。<BR> 258 @retval Description== @ref nn::ssl::EFAILED 処理が失敗したことを示します。(不正な引数など) 259 @retval Description== @ref nn::ssl::ESSLID 対象のSSLコネクションは不正なものです。(ライブラリ内部エラーです) 260 */ 261 nn::Result GetCipherInfo( char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits ); 262 263 264 /*** 265 @brief 証明書検証の結果を取得します。 266 @param[out] pCertVerifyErrors 証明書検証結果。証明書検証結果フラグ(nn::ssl::CertVerifyError)の論理和です。 267 @return 処理の結果が返ります。<BR> 268 */ 269 nn::Result GetCertVerifyErrors( u32* pCertVerifyErrors ); 270 271 #ifdef NDEBUG_ENABLE 272 /*** 273 @brief This is for testing purposes only and is used for obtaining the connection handle of this object. 274 @return The connection handle of this object. <BR> 275 */ GetConnectionHandle()276 ConnectionHandle GetConnectionHandle(){return m_connectHandle;} 277 #endif 278 279 280 private: 281 /** 282 @brief 接続先サーバとsocketがAssign済みか否かを表すフラグ。 283 */ 284 bool m_isAssigned; 285 NN_PADDING3; 286 287 /** 288 @brief 利用するSocketのディスクリプション。 289 */ 290 s32 m_socket; 291 /** 292 @brief 対象コネクションのID。 293 */ 294 ConnectionHandle m_connectHandle; 295 296 /** 297 @brief SSLプロセスとのIPCセッション 298 */ 299 nn::Handle m_privateIpcSession; 300 301 /** 302 @brief SSLプロセスとのIPCクライアント 303 */ 304 ConnectionIpc m_privateIpcClient; 305 306 /** 307 @brief サーバ証明書取得用共有メモリバッファ。 308 */ 309 nn::os::TransferMemoryBlock m_serverCertBuffer; 310 311 /** 312 * @brief 接続先サーバとsocketがAssign済みか否かを返す。 313 * @return 接続先サーバとsocketがAssign済みか否か(trueが設定済み) 314 */ IsAssigned()315 bool IsAssigned(){return m_isAssigned;} 316 317 318 /** 319 * @brief コネクション専用IPCクライアントを割り当てます。 320 * @return 処理の結果。 321 */ 322 Result AssignPrivateIpcClient( void ); 323 324 /** 325 * @brief 対象コネクションのShutdown処理を行います。 326 * @return 処理の結果。(すでにコネクションがShutdownされていた場合や、まだAssignServer()されていなかった場合は、ResultSuccess()が返ります。) 327 */ 328 Result ShutdownConnection( void ); 329 }; 330 331 332 } // end of namespace ssl 333 } // end of namespace nn 334 335 336 #endif // __cplusplus 337 338 339 340 #include <nn/util/detail/util_CLibImpl.h> 341 342 343 /*! 344 @addtogroup nn_ssl ssl 345 @{ 346 347 @defgroup nn_ssl_Connection_c Connection (C) 348 349 @brief @ref nn::ssl::Connection の C インタフェースモジュールです。 350 351 @{ 352 */ 353 354 /*! 355 @struct nnsslConnection 356 @brief SSLのConnectionを表す C の構造体です。 357 358 @brief 対応するクラス @ref nn::ssl::Connection を参照してください。 359 */ 360 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslConnection, nn::ssl::Connection, 56, u32); 361 362 /*! 363 @brief 対応する C++ 関数 @ref nn::ssl::Connection::AssignSocket を参照してください。 364 */ 365 NN_EXTERN_C bool nnsslConnectionAssignSocket(nnsslConnection* this_, s32 socket); 366 367 /*! 368 @brief 対応する C++ 関数 @ref nn::ssl::Connection::AssignServer を参照してください。 369 */ 370 NN_EXTERN_C nnResult nnsslConnectionAssignServer(nnsslConnection* this_, const char* pServerName, u32 verifyOpt); 371 372 /*! 373 @brief 対応する C++ 関数 @ref nn::ssl::Connection::SetServerCertBuffer を参照してください。 374 */ 375 NN_EXTERN_C nnResult nnsslConnectionSetServerCertBuffer(nnsslConnection* this_, uptr bufferAddress, size_t bufferSize); 376 377 /*! 378 @brief 対応する C++ 関数 @ref nn::ssl::Connection::Shutdown を参照してください。 379 */ 380 NN_EXTERN_C nnResult nnsslConnectionShutdown(nnsslConnection* this_); 381 382 /*! 383 @brief 対応する C++ 関数 @ref nn::ssl::Connection::DoHandshake(void) を参照してください。 384 */ 385 NN_EXTERN_C nnResult nnsslConnectionDoHandshake(nnsslConnection* this_); 386 387 /*! 388 @brief 対応する C++ 関数 @ref nn::ssl::Connection::DoHandshake(u8* pServerCertBuf, size_t* pServerCertSize, u32* pServerCertNum) を参照してください。 389 */ 390 NN_EXTERN_C nnResult nnsslConnectionDoHandshakeEx(nnsslConnection* this_, size_t* pServerCertSize, u32* pServerCertNum); 391 392 /*! 393 @brief 対応する C++ 関数 @ref nn::ssl::Connection::Read() を参照してください。 394 */ 395 NN_EXTERN_C nnResult nnsslConnectionRead(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier); 396 397 /*! 398 @brief 対応する C++ 関数 @ref nn::ssl::Connection::Peek() を参照してください。 399 */ 400 NN_EXTERN_C nnResult nnsslConnectionPeek(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier); 401 402 /*! 403 @brief 対応する C++ 関数 @ref nn::ssl::Connection::Peek() を参照してください。 404 */ 405 NN_EXTERN_C nnResult nnsslConnectionWrite(nnsslConnection* this_, const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier); 406 407 /*! 408 @brief 対応する C++ 関数 @ref nn::ssl::Connection::SetServerCertStore() を参照してください。 409 */ 410 NN_EXTERN_C nnResult nnsslConnectionSetServerCertStore(nnsslConnection* this_, nnsslCertStore* certStore); 411 412 /*! 413 @brief 対応する C++ 関数 @ref nn::ssl::Connection::SetClientCert() を参照してください。 414 */ 415 NN_EXTERN_C nnResult nnsslConnectionSetClientCert(nnsslConnection* this_, nnsslClientCert* pClientCert); 416 417 /*! 418 @brief 対応する C++ 関数 @ref nn::ssl::Connection::SetCRLStore() を参照してください。 419 */ 420 NN_EXTERN_C nnResult nnsslConnectionSetCRLStore(nnsslConnection* this_, nnsslCrlStore* crlStore); 421 422 /*! 423 @brief 対応する C++ 関数 @ref nn::ssl::Connection::DisableVerifyOptionForDebug() を参照してください。 424 */ 425 NN_EXTERN_C nnResult nnsslConnectionDisableVerifyOptionForDebug(nnsslConnection* this_, u32 excludeVerifyOptions); 426 427 /*! 428 @brief 対応する C++ 関数 @ref nn::ssl::Connection::GetCipherInfo() を参照してください。 429 */ 430 NN_EXTERN_C nnResult nnsslConnectionGetCipherInfo(nnsslConnection* this_, char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits ); 431 432 /*! 433 @brief 対応する C++ 関数 @ref nn::ssl::Connection::GetCertVerifyErrors( ) を参照してください。 434 */ 435 NN_EXTERN_C nnResult nnsslConnectionGetCertVerifyErrors(nnsslConnection* this_, u32* pCertVerifyErrors ); 436 437 /*! 438 @} 439 440 @} 441 */ 442 443 #endif /* NN_SSL_SSL_CONNECTION_H_ */ 444