1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_CertStore.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: 18106 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SSL_SSL_CERTSTORE_H_
17 #define NN_SSL_SSL_CERTSTORE_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通信で使用するRootCA証明書は、そのすべての証明書データをCertStoreインスタンスに登録後、そのCertStoreインスタンスをConnectionクラスに設定することになります。
31 */
32 class CertStore : private nn::util::NonCopyable<CertStore>
33 {
34     friend class Connection;
35 public:
36     /*!
37       @brief コンストラクタです。
38     */
39     explicit CertStore();
40 
41     /*!
42       @brief デストラクタです。
43     */
44     virtual ~CertStore (void);
45 
46     /*!
47       @brief  証明書ストアを初期化します。証明書を登録する前に、一度実施する必要があります。
48       @return 処理の結果が返ります。<BR>
49     */
50     nn::Result Initialize(void);
51 
52     /*!
53       @brief  証明書ストアの終了処理を行います。証明書ストアの全利用が終了したら、一度実施する必要があります。
54       @return 処理の結果が返ります。<BR>
55     */
56     nn::Result Finalize(void);
57 
58     /*!
59       @brief  証明書を登録します。複数回実行することで、複数個の証明書を登録することもできます。
60       @param[in]  pCertData   証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。
61       @param[in]  certDataSize pCertDataのサイズ 。
62       @param[out] pCertIdCourier 登録した証明書のID.個別に証明書の登録解除(UnRegisterCert())を実施する際に使用します。不要な場合(個別登録解除が不要の場合。CertStoreが解放されると、そこに登録されていた証明書は一括で登録解除されますので、その場合は個別登録解除は不要です。)は、未指定とすることができます。
63       @return 処理の結果が返ります。<BR>
64     */
65     nn::Result RegisterCert(const u8* pCertData, size_t certDataSize, CertId* pCertIdCourier=NULL);
66 
67     /*!
68       @brief  内蔵CA証明書を登録します。複数回実行することで、複数個の証明書を登録することもできます。
69       @param[in]  inCaCertName   内蔵CA証明書の名称。
70       @param[out] pCertIdCourier 登録した証明書のID.個別に証明書の登録解除(UnRegisterCert())を実施する際に使用します。不要な場合(個別登録解除が不要の場合。CertStoreが解放されると、そこに登録されていた証明書は一括で登録解除されますので、その場合は個別登録解除は不要です。)は、未指定とすることができます。
71       @return 処理の結果が返ります。<BR>
72     */
73     nn::Result RegisterCert(InternalCaCert inCaCertName, CertId* pCertIdCourier=NULL);
74 
75     /*!
76       @brief  証明書を登録解除します。
77       @param[in] certId   登録した証明書のID。RegisterCert()の引数で取得されたものです。
78       @return 処理の結果が返ります。<BR>
79     */
80     nn::Result UnRegisterCert(CertId certId);
81 
82     /*!
83       @brief  証明書ストアのIDを取得します。
84       @return 証明書ストアのID <BR>
85     */
GetID(void)86     CertStoreId GetID(void){return m_certStoreId;}
87 
88 
89 private:
90     bool m_isInitialized;
91     NN_PADDING3;
92     CertStoreId m_certStoreId;
93 
94     /*!
95       @brief  証明書ストアが有効なものか否かを取得します。
96       @return 処理の結果が返ります。<BR>
97     */
IsValid()98     bool IsValid(){return m_isInitialized;}
99 };
100 
101 } // end of namespace ssl
102 } // end of namespace nn
103 
104 #endif // __cplusplus
105 
106 
107 #include <nn/util/detail/util_CLibImpl.h>
108 
109 
110 /*!
111   @addtogroup   nn_ssl               ssl
112   @{
113 
114   @defgroup     nn_ssl_CertStore_c    CertStore (C)
115 
116   @brief        @ref nn::ssl::CertStore の C インタフェースモジュールです。
117 
118   @{
119 */
120 
121 /*!
122   @struct       nnsslCertStore
123   @brief        SSLのCertStoreを表す C の構造体です。
124 
125   @brief 対応するクラス @ref nn::ssl::CertStore を参照してください。
126 */
127 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslCertStore, nn::ssl::CertStore, 12, u32);
128 
129 /*!
130   @brief 対応する C++ 関数 @ref nn::ssl::CertStore::Initialize
131 */
132 NN_EXTERN_C nnResult nnsslCertStoreInitialize(nnsslCertStore* this_);
133 
134 /*!
135   @brief 対応する C++ 関数 @ref nn::ssl::CertStore::Finalize
136 */
137 NN_EXTERN_C nnResult nnsslCertStoreFinalize(nnsslCertStore* this_);
138 
139 /*!
140   @brief 対応する C++ 関数 @ref nn::ssl::CertStore::RegisterCert を参照してください。
141 */
142 NN_EXTERN_C nnResult nnsslCertStoreRegisterCert(nnsslCertStore* this_, const u8* pCertData, size_t certDataSize, NnSslCertId* pCertIdCourier);
143 
144 /*!
145   @brief 対応する C++ 関数 @ref nn::ssl::CertStore::RegisterCert を参照してください。
146 */
147 NN_EXTERN_C nnResult nnsslCertStoreRegistByInternalCert(nnsslCertStore* this_, NnSslInternalCaCert inCaCertName);
148 
149 
150 
151 /*!
152   @brief 対応する C++ 関数 @ref nn::ssl::CertStore::UnRegisterCert を参照してください。
153 */
154 NN_EXTERN_C nnResult nnsslCertStoreUnRegisterCert(nnsslCertStore* this_,  NnSslCertId certId);
155 
156 
157 /*!
158   @}
159 
160   @}
161 */
162 
163 #endif /* NN_SSL_SSL_CERTSTORE_H_ */
164