1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_Common.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_COMMON_H_
17 #define NN_SSL_SSL_COMMON_H_
18 
19 #include <nn/Result.h>
20 #include <nn/Handle.h>
21 
22 #ifdef __cplusplus
23 
24 namespace nn {
25 namespace ssl {
26     //----------------------------------------
27     //! @name ライブラリ全体の初期化、終了処理
28     //@{
29 
30 
31     /*!
32       @brief SSLライブラリの初期化を実施します。SSLライブラリをリンクしているプロセスは、ライブラリ利用前に一度呼び出す必要があります。
33       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
34       @retval ResultSuccess       処理に成功しました。SSLライブラリは使用可能です。
35       @retval ResultClientProcessMaxErr 同時利用可能なクライアントプロセス最大数のプロセスがすでに利用中を表すエラー。ある程度の時間を待機することで(その間に他モジュールが @ref Finalize を実行すれば)、再実行が成功する場合があります。
36       @retval ResultIpcSessionMaxErr    同時に接続可能なIPCセッション数のセッションがすでに接続中を表すエラー。ある程度の時間を待機することで(その間に他のIPCセッションが成功すれば)、再実行が成功する場合があります。
37       @retval ResultAlreadyInitializedErr 「すでに初期化済みです」を表すエラー。SSLライブラリはすでに使用可能です。
38       @retval 上記以外            想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。
39     */
40     Result Initialize(void);
41 
42     /*!
43       @brief SSLライブラリの終了処理を実施します。SSLライブラリをリンクしているプロセスは、ライブラリ利用終了後に一度呼び出す必要があります。
44       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
45       @retval ResultSuccess       処理に成功しました。
46       @retval ResultNotInitializedErr 「初期化されていない」を表すエラー。Finalizeの実行は不要です。
47       @retval 上記以外            想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。
48     */
49     Result Finalize(void);
50 
51     //@}
52 
53     //----------------------------------------
54     //! @name 擬似乱数用関数
55     //@{
56 
57     /*!
58       @brief  乱数用エントロピーを新規に収集します。
59               ※SSLプロセスも自らエントロピーを収集しています。本関数は任意のタイミングで新たにエントロピーを収集しなおさせたい場合に利用します。
60       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
61       @retval ResultSuccess       処理に成功しました。
62       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
63       @retval 上記以外            想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。
64     */
65     Result GatherRandomEntropy( void );
66 
67     /*!
68       @brief        乱数を取得します。
69 
70       @param[out]   pOutData        乱数を格納するバッファ。
71       @param[in]    outDataSize     pOutDataのサイズ。
72 
73       @return 関数の実行結果を返します。以下に挙げる Result を返します。<BR>
74       @retval ResultSuccess       処理に成功しました。
75       @retval ResultNotInitializedErr ライブラリが未初期化を表すエラー。@ref nn::ssl::Initialize が実行されていないと、本ライブラリの関数はすべて利用することができません。
76       @retval 上記以外            想定外のエラー(エラー内容については、@ref ssl_Result.h を参照)。
77     */
78     Result GenerateRandomBytes( u8 pOutData[], size_t outDataSize );
79 
80     //@}
81 
82     namespace {
83         /**
84          @brief コネクション用IPCポートの名称
85          */
86         const char PORT_NAME_CONNECTION[]        = "ssl:C";
87 
88         /**
89          @brief ポートのタイプと、ポート数を表す列挙体
90          */
91         enum IpcPortType
92         {
93             PORT_CONNECTION,
94             NUM_OF_PORTS
95         };
96 
97     }
98 } // end of namespace ssl
99 } // end of namespace nn
100 
101 #endif /*__cplusplus*/
102 
103 
104 extern "C" {
105 
106 /*!
107   @brief 対応する C++ 関数 @ref nn::ssl::Initialize を参照してください。
108 */
109 nnResult nnsslInitialize(void);
110 
111 /*!
112   @brief 対応する C++ 関数 @ref nn::ssl::Finalize を参照してください。
113 */
114 nnResult nnsslFinalize(void);
115 
116 /*!
117   @brief 対応する C++ 関数 @ref nn::ssl::GatherRandomEntropy を参照してください。
118 */
119 nnResult nnsslGatherRandomEntropy( void );
120 
121 /*!
122   @brief 対応する C++ 関数 @ref nn::ssl::GenerateRandomBytes を参照してください。
123 */
124 nnResult nnsslGenerateRandomBytes(u8 pOutData[], size_t outDataSize);
125 
126 } /*extern "C"*/
127 
128 #endif /* NN_SSL_SSL_COMMON_H_ */
129 
130