1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     http_ClientCert.h
4 
5   Copyright (C)2010 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: 30213 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_HTTP_HTTP_CLIENTCERT_H_
17 #define NN_HTTP_HTTP_CLIENTCERT_H_
18 
19 #include <nn/util/util_NonCopyable.h>
20 #include <nn/http/http_Types.h>
21 
22 #ifdef __cplusplus
23 
24 namespace nn {
25 namespace http {
26 
27 class Connection;
28 
29 /*!
30   @brief HTTPS用のクライアント証明書を表すクラスです。複数のHTTPS通信でクライアント証明書を使いまわしたい場合に利用します。
31 
32 */
33 class ClientCert : private nn::util::NonCopyable<ClientCert>
34 {
35     friend class Connection;
36 public:
37     /*!
38       @brief コンストラクタです。
39     */
40     explicit ClientCert();
41 
42     /*!
43       @brief デストラクタです。
44     */
45     virtual ~ClientCert (void);
46 
47     /*!
48       @brief  証明書と秘密鍵の登録を行い、クライアント証明書を初期化します。
49       @param[in]  pCertData   証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。
50       @param[in]  certDataSize pCertDataのサイズ 。
51       @param[in]  pPrivateKeyData   秘密鍵のデータ。データフォーマットは、X.509の鍵データ(ASN.1定義)をDERエンコードしたバイナリデータ。
52       @param[in]  privateKeyDataSize pPrivateKeyDataのサイズ 。
53       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
54       @retval ResultSuccess       処理に成功しました。
55       @retval nn::ssl::ResultProtocolFailedErr 証明書の登録失敗を表すエラー。SSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などに返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。
56       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
57       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
58     */
59     nn::Result Initialize(const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
60 
61     /*!
62       @brief  機器内蔵クライアント証明書を登録して、クライアント証明書を初期化します。
63       @param[in]  inClientCertName   対象の機器内蔵クライアント証明書(sslの @ref nn::ssl::InternalClientCertの値。)
64       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
65       @retval ResultSuccess       処理に成功しました。
66       @retval nn::ssl::ResultProtocolFailedErr 証明書の登録失敗を表すエラー。SSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などに返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。
67       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
68       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
69     */
70     nn::Result Initialize(InternalClientCertId inClientCertName );
71 
72 
73     /*!
74       @brief  クライアント証明書の終了処理を行います。クライアント証明書の利用が全て終了したら、一度実施する必要があります。
75       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
76       @retval ResultSuccess       処理に成功しました。
77       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::http::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
78       @retval 上記以外            想定外のエラー(エラー内容については、@ref http_Result.h を参照)。
79     */
80     nn::Result Finalize(void);
81 
82 private:
83     bool m_isInitialized;
84     NN_PADDING3;
85     CertId m_certId;
86 
87     /*!
88       @brief  クライアント証明書が有効なものか否かを取得します。
89       @return 処理の結果が返ります。<BR>
90     */
IsValid()91     bool IsValid(){return m_isInitialized;}
92 };
93 
94 } // end of namespace http
95 } // end of namespace nn
96 
97 #endif // __cplusplus
98 
99 
100 #include <nn/util/detail/util_CLibImpl.h>
101 
102 
103 /*!
104   @addtogroup   nn_http               http
105   @{
106 
107   @defgroup     nn_http_ClientCert_c    ClientCert (C)
108 
109   @brief        @ref nn::http::ClientCert の C インタフェースモジュールです。
110 
111   @{
112 */
113 
114 /*!
115   @struct       nnhttpClientCert
116   @brief        HTTPのClientCertを表す C の構造体です。
117 
118   @brief 対応するクラス @ref nn::http::ClientCert を参照してください。
119 */
120 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnhttpClientCert, nn::http::ClientCert, 12, u32);
121 
122 /*!
123   @brief 対応する C++ 関数 @ref nn::http::ClientCert::Initialize を参照してください。
124 */
125 NN_EXTERN_C nnResult nnhttpClientCertInitialize(nnhttpClientCert* this_, const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
126 
127 /*!
128   @brief 対応する C++ 関数 @ref nn::http::ClientCert::Initialize を参照してください。
129 */
130 NN_EXTERN_C nnResult nnhttpClientCertInitializeByInternalCert(nnhttpClientCert* this_, NnHttpInternalClientCertId inClientCertName);
131 
132 
133 /*!
134   @brief 対応する C++ 関数 @ref nn::http::ClientCert::Finalize を参照してください。
135 */
136 NN_EXTERN_C nnResult nnhttpClientCertFinalize(nnhttpClientCert* this_);
137 
138 
139 /*!
140   @}
141 
142   @}
143 */
144 
145 #endif /* NN_HTTP_HTTP_CLIENTCERT_H_ */
146 
147