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: 30214 $ 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 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 54 @retval ResultSuccess 処理に成功しました。 55 @retval ResultProtocolFailedErr 証明書の登録失敗を表すエラー。SSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などに返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。 56 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 57 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_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 内蔵クライアント証明書の名称。 64 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 65 @retval ResultSuccess 処理に成功しました。 66 @retval ResultProtocolFailedErr 証明書の登録失敗を表すエラー。SSLライブラリに登録されている全証明書数が、システムが許容できる最大数に達している場合などに返ります。自身が登録している証明書の登録解除を行ったり、ある程度の時間を待機することで(その間に他モジュールが登録している証明書を登録解除すれば)、再実行が成功する場合があります。 67 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 68 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 69 */ 70 nn::Result Initialize(InternalClientCert inClientCertName); 71 72 /*! 73 @brief クライアント証明書の終了処理を行います。クライアント証明書の利用が全て終了したら、一度実施する必要があります。 74 @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR> 75 @retval ResultSuccess 処理に成功しました。 76 @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。 77 @retval 上記以外 想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。 78 */ 79 nn::Result Finalize(void); 80 81 /*! 82 @brief クライアント証明書のIDを取得します。 83 @return クライアント証明書のID <BR> 84 */ GetID(void)85 CertId GetID(void){return m_certId;} 86 87 private: 88 bool m_isInitialized; 89 NN_PADDING3; 90 CertId m_certId; 91 92 /*! 93 @brief クライアント証明書が有効なものか否かを取得します。 94 @return 処理の結果が返ります。<BR> 95 */ IsValid()96 bool IsValid(){return m_isInitialized;} 97 }; 98 99 } // end of namespace ssl 100 } // end of namespace nn 101 102 #endif // __cplusplus 103 104 105 #include <nn/util/detail/util_CLibImpl.h> 106 107 108 /*! 109 @addtogroup nn_ssl ssl 110 @{ 111 112 @defgroup nn_ssl_ClientCert_c ClientCert (C) 113 114 @brief @ref nn::ssl::ClientCert の C インタフェースモジュールです。 115 116 @{ 117 */ 118 119 /*! 120 @struct nnsslClientCert 121 @brief SSLのClientCertを表す C の構造体です。 122 123 @brief 対応するクラス @ref nn::ssl::ClientCert を参照してください。 124 */ 125 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslClientCert, nn::ssl::ClientCert, 12, u32); 126 127 /*! 128 @brief 対応する C++ 関数 @ref nn::ssl::ClientCert::Initialize 129 */ 130 NN_EXTERN_C nnResult nnsslClientCertInitialize(nnsslClientCert* this_, const u8* pCertData, size_t certDataSize, const u8* pPrivateKeyData, size_t privateKeyDataSize); 131 132 /*! 133 @brief 対応する C++ 関数 @ref nn::ssl::ClientCert::Initialize 134 */ 135 NN_EXTERN_C nnResult nnsslClientCertInitByInternalCert(nnsslClientCert* this_, NnSslInternalClientCert inClientCertName); 136 137 138 /*! 139 @brief 対応する C++ 関数 @ref nn::ssl::ClientCert::Finalize 140 */ 141 NN_EXTERN_C nnResult nnsslClientCertFinalize(nnsslClientCert* this_); 142 143 144 /*! 145 @} 146 147 @} 148 */ 149 150 #endif /* NN_SSL_SSL_CLIENTCERT_H_ */ 151 152