1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_ClientCert.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: 19070 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SSL_SSL_CLIENTCERT_H_
17 #define NN_SSL_SSL_CLIENTCERT_H_
18 
19 #include <nn/util/util_NonCopyable.h>
20 #include <nn/ssl/ssl_Types.h>
21 
22 #ifdef __cplusplus
23 
24 namespace nn {
25 namespace ssl {
26 
27 class Connection;
28 
29 /*!
30   @brief SSLのクライアント証明書を表すクラスです。一つのSSL通信で使用するクライアント証明書は、その証明書データをClientCertインスタンスに登録後、そのClientCertインスタンスをConnectionクラスに設定することになります。
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 処理の結果が返ります。<BR>
54     */
55     nn::Result Initialize(const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
56 
57     /*!
58       @brief  内蔵証明書を用いて、クライアント証明書を初期化します。
59       @param[in]  inClientCertName   内蔵クライアント証明書の名称。
60       @return 処理の結果が返ります。<BR>
61     */
62     nn::Result Initialize(InternalClientCert inClientCertName);
63 
64     /*!
65       @brief  クライアント証明書の終了処理を行います。クライアント証明書の利用が全て終了したら、一度実施する必要があります。
66       @return 処理の結果が返ります。<BR>
67     */
68     nn::Result Finalize(void);
69 
70     /*!
71       @brief  クライアント証明書のIDを取得します。
72       @return クライアント証明書のID <BR>
73     */
GetID(void)74     CertId GetID(void){return m_certId;}
75 
76 private:
77     bool m_isInitialized;
78     NN_PADDING3;
79     CertId m_certId;
80 
81     /*!
82       @brief  クライアント証明書が有効なものか否かを取得します。
83       @return 処理の結果が返ります。<BR>
84     */
IsValid()85     bool IsValid(){return m_isInitialized;}
86 };
87 
88 } // end of namespace ssl
89 } // end of namespace nn
90 
91 #endif // __cplusplus
92 
93 
94 #include <nn/util/detail/util_CLibImpl.h>
95 
96 
97 /*!
98   @addtogroup   nn_ssl               ssl
99   @{
100 
101   @defgroup     nn_ssl_ClientCert_c    ClientCert (C)
102 
103   @brief        @ref nn::ssl::ClientCert の C インタフェースモジュールです。
104 
105   @{
106 */
107 
108 /*!
109   @struct       nnsslClientCert
110   @brief        SSLのClientCertを表す C の構造体です。
111 
112   @brief 対応するクラス @ref nn::ssl::ClientCert を参照してください。
113 */
114 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslClientCert, nn::ssl::ClientCert, 12, u32);
115 
116 /*!
117   @brief 対応する C++ 関数 @ref nn::ssl::ClientCert::Initialize
118 */
119 NN_EXTERN_C nnResult nnsslClientCertInitialize(nnsslClientCert* this_, const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize);
120 
121 /*!
122   @brief 対応する C++ 関数 @ref nn::ssl::ClientCert::Initialize
123 */
124 NN_EXTERN_C nnResult nnsslClientCertInitByInternalCert(nnsslClientCert* this_, NnSslInternalClientCert inClientCertName);
125 
126 
127 /*!
128   @brief 対応する C++ 関数 @ref nn::ssl::ClientCert::Finalize
129 */
130 NN_EXTERN_C nnResult nnsslClientCertFinalize(nnsslClientCert* this_);
131 
132 
133 /*!
134   @}
135 
136   @}
137 */
138 
139 #endif /* NN_SSL_SSL_CLIENTCERT_H_ */
140 
141