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