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: 30214 $ 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 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 49 @retval ResultSuccess 処理に成功しました。 50 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 51 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 52 */ 53 nn::Result Initialize(void); 54 55 /*! 56 @brief 証明書ストアの終了処理を行います。証明書ストアの全利用が終了したら、一度実施する必要があります。 57 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 58 @retval ResultSuccess 処理に成功しました。 59 @retval ResultFailToCreateCertStoreErr 証明書ストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。 60 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 61 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 62 */ 63 nn::Result Finalize(void); 64 65 /*! 66 @brief 証明書を登録します。複数回実行することで、複数個の証明書を登録することもできます。 67 @param[in] pCertData 証明書データ。データフォーマットは、X.509 v3の証明書データ(ASN.1定義)をDERエンコードしたバイナリデータ。 68 @param[in] certDataSize pCertDataのサイズ 。 69 @param[out] pCertIdCourier 登録した証明書のID.個別に証明書の登録解除(UnRegisterCert())を実施する際に使用します。不要な場合(個別登録解除が不要の場合。CertStoreが解放されると、そこに登録されていた証明書は一括で登録解除されますので、その場合は個別登録解除は不要です。)は、未指定とすることができます。 70 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 71 @retval ResultSuccess 処理に成功しました。 72 @retval ResultFailToCreateCertStoreErr 証明書ストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。 73 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 74 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 75 */ 76 nn::Result RegisterCert(const u8* pCertData, size_t certDataSize, CertId* pCertIdCourier=NULL); 77 78 /*! 79 @brief 内蔵CA証明書を登録します。複数回実行することで、複数個の証明書を登録することもできます。 80 @param[in] inCaCertName 内蔵CA証明書の名称。 81 @param[out] pCertIdCourier 登録した証明書のID.個別に証明書の登録解除(UnRegisterCert())を実施する際に使用します。不要な場合(個別登録解除が不要の場合。CertStoreが解放されると、そこに登録されていた証明書は一括で登録解除されますので、その場合は個別登録解除は不要です。)は、未指定とすることができます。 82 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 83 @retval ResultSuccess 処理に成功しました。 84 @retval ResultFailToCreateCertStoreErr 証明書ストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。 85 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 86 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 87 */ 88 nn::Result RegisterCert(InternalCaCert inCaCertName, CertId* pCertIdCourier=NULL); 89 90 /*! 91 @brief 証明書を登録解除します。 92 @param[in] certId 登録した証明書のID。RegisterCert()の引数で取得されたものです。 93 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 94 @retval ResultSuccess 処理に成功しました。 95 @retval ResultFailToCreateCertStoreErr 証明書ストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。 96 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 97 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 98 */ 99 nn::Result UnRegisterCert(CertId certId); 100 101 /*! 102 @brief 証明書ストアのIDを取得します。 103 @return 証明書ストアのID <BR> 104 */ GetID(void)105 CertStoreId GetID(void){return m_certStoreId;} 106 107 108 private: 109 bool m_isInitialized; 110 NN_PADDING3; 111 CertStoreId m_certStoreId; 112 113 /*! 114 @brief 証明書ストアが有効なものか否かを取得します。 115 @return 処理の結果が返ります。<BR> 116 */ IsValid()117 bool IsValid(){return m_isInitialized;} 118 }; 119 120 } // end of namespace ssl 121 } // end of namespace nn 122 123 #endif // __cplusplus 124 125 126 #include <nn/util/detail/util_CLibImpl.h> 127 128 129 /*! 130 @addtogroup nn_ssl ssl 131 @{ 132 133 @defgroup nn_ssl_CertStore_c CertStore (C) 134 135 @brief @ref nn::ssl::CertStore の C インタフェースモジュールです。 136 137 @{ 138 */ 139 140 /*! 141 @struct nnsslCertStore 142 @brief SSLのCertStoreを表す C の構造体です。 143 144 @brief 対応するクラス @ref nn::ssl::CertStore を参照してください。 145 */ 146 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslCertStore, nn::ssl::CertStore, 12, u32); 147 148 /*! 149 @brief 対応する C++ 関数 @ref nn::ssl::CertStore::Initialize 150 */ 151 NN_EXTERN_C nnResult nnsslCertStoreInitialize(nnsslCertStore* this_); 152 153 /*! 154 @brief 対応する C++ 関数 @ref nn::ssl::CertStore::Finalize 155 */ 156 NN_EXTERN_C nnResult nnsslCertStoreFinalize(nnsslCertStore* this_); 157 158 /*! 159 @brief 対応する C++ 関数 @ref nn::ssl::CertStore::RegisterCert を参照してください。 160 */ 161 NN_EXTERN_C nnResult nnsslCertStoreRegisterCert(nnsslCertStore* this_, const u8* pCertData, size_t certDataSize, NnSslCertId* pCertIdCourier); 162 163 /*! 164 @brief 対応する C++ 関数 @ref nn::ssl::CertStore::RegisterCert を参照してください。 165 */ 166 NN_EXTERN_C nnResult nnsslCertStoreRegistByInternalCert(nnsslCertStore* this_, NnSslInternalCaCert inCaCertName); 167 168 169 170 /*! 171 @brief 対応する C++ 関数 @ref nn::ssl::CertStore::UnRegisterCert を参照してください。 172 */ 173 NN_EXTERN_C nnResult nnsslCertStoreUnRegisterCert(nnsslCertStore* this_, NnSslCertId certId); 174 175 176 /*! 177 @} 178 179 @} 180 */ 181 182 #endif /* NN_SSL_SSL_CERTSTORE_H_ */ 183