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: 19716 $
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 処理の結果が返ります。<BR>
34       @retval Description==ER_ALREADY_INITIALIZED 「すでに初期化済み」を表すエラー。
35     */
36     Result Initialize(void);
37 
38     /*!
39       @brief SSLライブラリの終了処理を実施します。SSLライブラリをリンクしているプロセスは、ライブラリ利用終了後に一度呼び出す必要があります。
40       @return 処理の結果が返ります。<BR>
41       @retval Description==ER_NOT_INITIALIZED 「初期化されていない」を表すエラー。
42     */
43     Result Finalize(void);
44 
45     //@}
46 
47     //----------------------------------------
48     //! @name 擬似乱数用関数
49     //@{
50 
51     /*!
52       @brief  乱数用エントロピーを新規に収集します。
53               ※SSLプロセスも自らエントロピーを収集しています。本関数は任意のタイミングで新たにエントロピーを収集しなおさせたい場合に利用します。
54       @return 処理の結果が返ります。<BR>
55     */
56     Result GatherRandomEntropy( void );
57 
58     /*!
59       @brief        乱数を取得します。
60 
61       @param[out]   pOutData        乱数を格納するバッファ。
62       @param[in]    outDataSize     pOutDataのサイズ。
63 
64       @return       処理の結果が返ります。<BR>
65     */
66     Result GenerateRandomBytes( u8 pOutData[], size_t outDataSize );
67 
68     //@}
69 
70     namespace {
71         /**
72          @brief コネクション用IPCポートの名称
73          */
74         const char PORT_NAME_CONNECTION[]        = "ssl:C";
75 
76         /**
77          @brief ポートのタイプと、ポート数を表す列挙体
78          */
79         enum IpcPortType
80         {
81             PORT_CONNECTION,
82             NUM_OF_PORTS
83         };
84 
85     }
86 } // end of namespace ssl
87 } // end of namespace nn
88 
89 #endif /*__cplusplus*/
90 
91 
92 extern "C" {
93 
94 /*!
95   @brief 対応する C++ 関数 @ref nn::ssl::Initialize を参照してください。
96 */
97 nnResult nnsslInitialize(void);
98 
99 /*!
100   @brief 対応する C++ 関数 @ref nn::ssl::Finalize を参照してください。
101 */
102 nnResult nnsslFinalize(void);
103 
104 /*!
105   @brief 対応する C++ 関数 @ref nn::ssl::GatherRandomEntropy を参照してください。
106 */
107 nnResult nnsslGatherRandomEntropy( void );
108 
109 /*!
110   @brief 対応する C++ 関数 @ref nn::ssl::GenerateRandomBytes を参照してください。
111 */
112 nnResult nnsslGenerateRandomBytes(u8 pOutData[], size_t outDataSize);
113 
114 } /*extern "C"*/
115 
116 #endif /* NN_SSL_SSL_COMMON_H_ */
117 
118