1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: ssl_CrlStore.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_CRLSTORE_H_ 17 #define NN_SSL_SSL_CRLSTORE_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 CRLストアを表すクラスです。一つのSSL通信で使用するCRLは、そのすべてのCRLデータをCrlStoreインスタンスに登録後、そのCrlStoreインスタンスをConnectionクラスに設定することになります。 31 */ 32 class CrlStore : private nn::util::NonCopyable<CrlStore> 33 { 34 friend class Connection; 35 public: 36 /*! 37 @brief コンストラクタです。 38 */ 39 explicit CrlStore(); 40 41 /*! 42 @brief デストラクタです。 43 */ 44 virtual ~CrlStore (void); 45 46 /*! 47 @brief CRLストアを初期化します。証明書を登録する前に、一度実施する必要があります。 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 CRLストアの終了処理を行います。CRLストアの全利用が終了したら、一度実施する必要があります。 57 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 58 @retval ResultSuccess 処理に成功しました。 59 @retval ResultFailToCreateCrlStoreErr CRLストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全CRL数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録しているCRLの登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録しているCRLを登録解除すれば)、再実行が成功する場合があります。 60 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 61 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 62 */ 63 nn::Result Finalize(void); 64 65 /*! 66 @brief CRLを登録します。複数回実行することで、複数個のCRLを登録することもできます。 67 @param[in] pCrlData CRLデータ。データフォーマットは、X.509 v2のCRLデータ(ASN.1定義)をDERエンコードしたバイナリデータ。 68 @param[in] crlDatasize pCrlDataのサイズ 。 69 @param[out] pCrlIdCourier 登録したCRLのID.個別に証明書の登録解除(UnRegisterCrl())を実施する際に使用します。不要な場合(個別登録解除が不要の場合。CrlStoreが解放されると、そこに登録されていたCRLは一括で登録解除されますので、その場合は個別登録解除は不要です。)は、未指定とすることができます。 70 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 71 @retval ResultSuccess 処理に成功しました。 72 @retval ResultFailToCreateCrlStoreErr CRLストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全CRL数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録しているCRLの登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録しているCRLを登録解除すれば)、再実行が成功する場合があります。 73 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 74 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 75 */ 76 nn::Result RegisterCrl(const u8* pCrlData, size_t crlDatasize, CrlId* pCrlIdCourier=NULL); 77 78 /*! 79 @brief 内蔵CRLを登録します。複数回実行することで、複数個のCRLを登録することもできます。 80 @param[in] inCrlName 内蔵CRLの名称。 81 @param[out] pCrlIdCourier 登録したCRLのID.個別に証明書の登録解除(UnRegisterCrl())を実施する際に使用します。不要な場合(個別登録解除が不要の場合。CrlStoreが解放されると、そこに登録されていたCRLは一括で登録解除されますので、その場合は個別登録解除は不要です。)は、未指定とすることができます。 82 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 83 @retval ResultSuccess 処理に成功しました。 84 @retval ResultFailToCreateCrlStoreErr CRLストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全CRL数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録しているCRLの登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録しているCRLを登録解除すれば)、再実行が成功する場合があります。 85 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 86 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 87 */ 88 nn::Result RegisterCrl(InternalCrl inCrlName, CrlId* pCrlIdCourier=NULL); 89 90 /*! 91 @brief CRLを登録解除します。 92 @param[in] certId 登録したCRLのID。RegisterCrl()の引数で取得されたものです。 93 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 94 @retval ResultSuccess 処理に成功しました。 95 @retval ResultFailToCreateCrlStoreErr CRLストアの作成失敗を表すエラー。@ref Initialize が実行されていない場合に返ります。本クラスを利用する場合は、インスタンス化後に@ref Initialize を必ず実行してください。またSSLライブラリに登録されている全CRL数が、システムが許容できる最大数に達している場合などにも返ります。自身が登録しているCRLの登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録しているCRLを登録解除すれば)、再実行が成功する場合があります。 96 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 97 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 98 */ 99 nn::Result UnRegisterCrl(CrlId certId); 100 101 #ifdef NDEBUG_ENABLE 102 /*** 103 @brief This is for testing purposes only and is used for obtaining the id of this store. 104 @return The id of this store. <BR> 105 */ GetId()106 CrlStoreId GetId(){return m_crlStoreId;} 107 #endif 108 109 private: 110 bool m_isInitialized; 111 NN_PADDING3; 112 CrlStoreId m_crlStoreId; 113 114 /*! 115 @brief 証明書ストアが有効なものか否かを取得します。 116 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 117 @retval ResultSuccess 処理に成功しました。 118 @retval 上記以外 上記以外の理由で失敗しました(エラー内容については、@ref ssl_Result.h を参照)。 119 */ IsValid()120 bool IsValid(){return m_isInitialized;} 121 }; 122 123 124 } // end of namespace ssl 125 } // end of namespace nn 126 127 #endif // __cplusplus 128 129 #include <nn/util/detail/util_CLibImpl.h> 130 131 132 /*! 133 @addtogroup nn_ssl ssl 134 @{ 135 136 @defgroup nn_ssl_CrlStore_c CrlStore (C) 137 138 @brief @ref nn::ssl::CrlStore の C インタフェースモジュールです。 139 140 @{ 141 */ 142 143 /*! 144 @struct nnsslCrlStore 145 @brief SSLのCrlStoreを表す C の構造体です。 146 147 @brief 対応するクラス @ref nn::ssl::CrlStore を参照してください。 148 */ 149 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslCrlStore, nn::ssl::CrlStore, 12, u32); 150 151 /*! 152 @brief 対応する C++ 関数 @ref nn::ssl::CrlStore::Initialize 153 */ 154 NN_EXTERN_C nnResult nnsslCrlStoreInitialize(nnsslCrlStore* this_); 155 156 /*! 157 @brief 対応する C++ 関数 @ref nn::ssl::CrlStore::Finalize 158 */ 159 NN_EXTERN_C nnResult nnsslCrlStoreFinalize(nnsslCrlStore* this_); 160 161 /*! 162 @brief 対応する C++ 関数 @ref nn::ssl::CrlStore::RegisterCrl を参照してください。 163 */ 164 NN_EXTERN_C nnResult nnsslCrlStoreRegisterCrl(nnsslCrlStore* this_, const u8* pCrlData, size_t certDatasize, NnSslCrlId* pCrlIdCourier); 165 166 /*! 167 @brief 対応する C++ 関数 @ref nn::ssl::CrlStore::RegisterCrl を参照してください。 168 */ 169 NN_EXTERN_C nnResult nnsslCrlStoreRegistByInternalCrl(nnsslCrlStore* this_, NnSslInternalCrl certId); 170 171 172 /*! 173 @brief 対応する C++ 関数 @ref nn::ssl::CrlStore::UnRegisterCrl を参照してください。 174 */ 175 NN_EXTERN_C nnResult nnsslCrlStoreUnRegisterCrl(nnsslCrlStore* this_, NnSslCertId certId); 176 177 178 /*! 179 @} 180 181 @} 182 */ 183 184 #endif /* NN_SSL_SSL_CRLSTORE_H_ */ 185