1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_Const.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_CONST_H_
17 #define NN_SSL_SSL_CONST_H_
18 
19 #include <nn/net/compatible/nssl.h>
20 #include <nn/net/compatible/nssl/nssl_restricted.h>
21 #include <nn/ssl/ssl_Types.h>
22 
23 /*!
24   @addtogroup nn_ssl                       ssl
25   @{
26 */
27 
28 /*!
29  * @brief 検証オプション
30  */
31 enum NnSslVerifyOption
32 {
33     NNSSL_VERIFY_NONE                = NSSL_VERIFY_NONE,                //!< 指定なし
34     NNSSL_VERIFY_COMMON_NAME         = NSSL_VERIFY_COMMON_NAME,         //!< サーバ証明書のCommonName検証
35     NNSSL_VERIFY_ROOT_CA             = NSSL_VERIFY_ROOT_CA,             //!< サーバ証明書のRootCA検証
36     NNSSL_VERIFY_DATE                = NSSL_VERIFY_DATE,                //!< サーバ証明書のサーバ証明書の有効期限検証
37     NNSSL_VERIFY_SUBJECT_ALT_NAME    = NSSL_VERIFY_SUBJECT_ALT_NAME,    //!< サーバ証明書のSubjectAlternativeName検証
38     NNSSL_VERIFY_EV                  = NSSL_VERIFY_EV,                  //!< サーバ証明書のEV証明書検証(サーバ証明書がEV証明書に紐づいたもので無い限り検証失敗。)
39     NNSSL_USE_SESSION_CACHE          = NSSL_OPTION_SESSION_CACHE,       //!< セッションの再利用(Session resumption。つまり同じホストに連続で接続する際、セッションの再利用を試行。)
40     //NNSSL_VERIFY_CHAIN              = NSSL_VERIFY_CHAIN               /* 現状はchain検証"のみ"をOFFにできないので、定義を廃止 */
41     NNSSL_VERIFY_IGNORE              = NSSL_VERIFY_IGNORE,              //!< 証明書検証を行うが、検証結果は無視して接続する
42     NNSSL_GET_ALL_SERVER_CERT_CHAIN  = NSSL_GET_ALL_SERVER_CERT_CHAIN   //!< 証明書チェーン内の全証明書データを保存する
43 };
44 
45 
46 
47 /*!
48  * @brief 機器内蔵CA証明書の定義
49  */
50 enum NnSslInternalCaCert
51 {
52     NNSSL_CACERT_NINTENDO_CA            = 0x01,                         //!< 機器内蔵の任天堂CA証明書
53     NNSSL_CACERT_NINTENDO_CA_G2         = 0x02,                         //!< 機器内蔵の任天堂CA証明書(G2)
54     NNSSL_CACERT_NINTENDO_CA_G3         = 0x03,                         //!< 機器内蔵の任天堂CA証明書(G3)
55     NNSSL_CACERT_NINTENDO_CLASS2_CA     = 0x04,                         //!< 機器内蔵の任天堂Class2 CA証明書
56     NNSSL_CACERT_NINTENDO_CLASS2_CA_G2  = 0x05,                         //!< 機器内蔵の任天堂Class2 CA証明書(G2)
57     NNSSL_CACERT_NINTENDO_CLASS2_CA_G3  = 0x06,                         //!< 機器内蔵の任天堂Class2 CA証明書(G3)
58     NNSSL_CACERT_PUBLIC_CA_1            = 0x07,                         //!< 機器内蔵の一般証明書1
59     NNSSL_CACERT_PUBLIC_CA_2            = 0x08,                         //!< 機器内蔵の一般証明書2
60     NNSSL_CACERT_PUBLIC_CA_3            = 0x09,                         //!< 機器内蔵の一般証明書3
61     NNSSL_CACERT_PUBLIC_CA_4            = 0x0a,                         //!< 機器内蔵の一般証明書4
62 
63     /* if internal CA certs are added or removed, this number needs to be updated to reflect how many there are */
64     NNSSL_CACERT_NUM_INTERNAL           = 0x0a                          //!< 機器内蔵のCA証明書の個数
65 };
66 
67 
68 /*!
69  * @brief 機器内蔵CRLの定義
70  */
71 enum NnSslInternalCrl
72 {
73     NNSSL_CRL_DEFAULT    = 0x20                               //!< 機器内蔵のCTRデフォルトCRL証明書([注意]現状では内蔵CRLは存在しません。)
74 };
75 
76 /*!
77  * @brief 機器内蔵クライアント証明書の定義
78  */
79 enum NnSslInternalClientCert
80 {
81     NNSSL_CLIENTCERT_DEFAULT        = 0x40,                    //!< 機器内蔵のCTRデフォルトクライアント証明書
82 
83     /* if internal client certs are added or removed, this number needs to be updated to reflect how many there are */
84     NNSSL_CLIENTCERT_NUM_INTERNAL   = 0x01                     //!< 機器内蔵クライアント証明書の個数
85 };
86 
87 
88 /*!
89  * @brief 証明書検証結果
90  * (各定義はビット定義となっており、複数定義の論理和を用いて、複数エラーをまとめた定義とすることも可能。
91  * GetCertVerifyErrors()で得られる証明書検証結果は、そのような値である。)
92  */
93 enum NnSslCertVerifyError
94 {
95     NNSSL_CERT_VERIFYERROR_COMMON_NAME      = NSSL_VERIFYERRORS_COMMON_NAME,       //!< サーバー名がCommon NameとSubjectAltName拡張領域のいずれとも不整合
96     NNSSL_CERT_VERIFYERROR_ROOT_CA          = NSSL_VERIFYERRORS_ROOT_CA,           //!< RootCAの不整合
97     NNSSL_CERT_VERIFYERROR_DATE             = NSSL_VERIFYERRORS_DATE,              //!< 証明書の有効期限切れ
98     NNSSL_CERT_VERIFYERROR_CHAIN            = NSSL_VERIFYERRORS_CHAIN,             //!< 証明書チェーンの検証NG
99     NNSSL_CERT_VERIFYERROR_REVOKED          = NSSL_VERIFYERRORS_REVOKED_CERT,      //!< 証明書は無効化されている
100     NNSSL_CERT_VERIFYERROR_EV               = NSSL_VERIFYERRORS_EV                 //!< EV証明書検証NG
101 };
102 
103 
104 /*!
105   @}
106 */
107 
108 
109 
110 #ifdef __cplusplus
111 
112 namespace nn {
113 namespace ssl {
114 
115 /*!
116  * @brief 検証オプション
117  */
118 enum VerifyOption
119 {
120     VERIFY_NONE                 = NNSSL_VERIFY_NONE,                //!< 指定なし
121     VERIFY_COMMON_NAME          = NNSSL_VERIFY_COMMON_NAME,         //!< サーバ証明書のCommonName検証
122     VERIFY_ROOT_CA              = NNSSL_VERIFY_ROOT_CA,             //!< サーバ証明書のRootCA検証
123     VERIFY_DATE                 = NNSSL_VERIFY_DATE,                //!< サーバ証明書のサーバ証明書の有効期限検証
124     VERIFY_SUBJECT_ALT_NAME     = NNSSL_VERIFY_SUBJECT_ALT_NAME,    //!< サーバ証明書のSubjectAlternativeName検証
125     VERIFY_EV                   = NNSSL_VERIFY_EV,                  //!< サーバ証明書のEV証明書検証(サーバ証明書がEV証明書に紐づいたもので無い限り検証失敗。)
126     USE_SESSION_CACHE           = NNSSL_USE_SESSION_CACHE,          //!< セッションの再利用(Session resumption。つまり同じホストに連続で接続する際、セッションの再利用を試行。)
127     //VERIFY_CHAIN              = NSSL_VERIFY_CHAIN                 /* 現状はchain検証"のみ"をOFFにできないので、定義を廃止 */]
128     VERIFY_IGNORE               = NNSSL_VERIFY_IGNORE,              //!< 証明書検証を行うが、検証結果は無視して接続する
129     GET_ALL_SERVER_CERT_CHAIN   = NNSSL_GET_ALL_SERVER_CERT_CHAIN   //!< 証明書チェーン内の全証明書データを保存する
130 };
131 
132 
133 /*!
134  * @brief 機器内蔵CA証明書の定義
135  */
136 enum InternalCaCert
137 {
138     CACERT_NINTENDO_CA           = NNSSL_CACERT_NINTENDO_CA,                  //!< 機器内蔵の任天堂CA証明書
139     CACERT_NINTENDO_CA_G2        = NNSSL_CACERT_NINTENDO_CA_G2,               //!< 機器内蔵の任天堂CA証明書(G2)
140     CACERT_NINTENDO_CA_G3        = NNSSL_CACERT_NINTENDO_CA_G3,               //!< 機器内蔵の任天堂CA証明書(G3)
141     CACERT_NINTENDO_CLASS2_CA    = NNSSL_CACERT_NINTENDO_CLASS2_CA,           //!< 機器内蔵の任天堂Class2 CA証明書
142     CACERT_NINTENDO_CLASS2_CA_G2 = NNSSL_CACERT_NINTENDO_CLASS2_CA_G2,        //!< 機器内蔵の任天堂Class2 CA証明書(G2)
143     CACERT_NINTENDO_CLASS2_CA_G3 = NNSSL_CACERT_NINTENDO_CLASS2_CA_G3,        //!< 機器内蔵の任天堂Class2 CA証明書(G3)
144     CACERT_PUBLIC_CA_1           = NNSSL_CACERT_PUBLIC_CA_1,                  //!< 機器内蔵の一般証明書1
145     CACERT_PUBLIC_CA_2           = NNSSL_CACERT_PUBLIC_CA_2,                  //!< 機器内蔵の一般証明書2
146     CACERT_PUBLIC_CA_3           = NNSSL_CACERT_PUBLIC_CA_3,                  //!< 機器内蔵の一般証明書3
147     CACERT_PUBLIC_CA_4           = NNSSL_CACERT_PUBLIC_CA_4,                  //!< 機器内蔵の一般証明書4
148 
149     CACERT_NUM_INTERNAL          = NNSSL_CACERT_NUM_INTERNAL                  //!< 機器内蔵のCA証明書の個数
150 };
151 
152 
153 /*!
154  * @brief 機器内蔵CRLの定義
155  */
156 enum InternalCrl
157 {
158     CRL_DEFAULT    = NNSSL_CRL_DEFAULT                                     //!< 機器内蔵のCTRデフォルトCRL証明書([注意]現状では内蔵CRLは存在しません。)
159 };
160 
161 
162 /*!
163  * @brief 機器内蔵クライアント証明書の定義
164  */
165 enum InternalClientCert
166 {
167     CLIENTCERT_DEFAULT        = NNSSL_CLIENTCERT_DEFAULT,                  //!< 機器内蔵のCTRデフォルトクライアント証明書
168 
169     CLIENTCERT_NUM_INTERNAL   = NNSSL_CLIENTCERT_NUM_INTERNAL              //!< 機器内蔵クライアント証明書の個数
170 };
171 
172 
173 /*!
174  * @brief 証明書検証結果
175  * (各定義はビット定義となっており、複数定義の論理和を用いて、複数エラーをまとめた定義とすることも可能。
176  * @ref GetCertVerifyErrors()で得られる証明書検証結果は、そのような値である。)
177  */
178 enum CertVerifyError
179 {
180     CERT_VERIFYERROR_COMMON_NAME = NNSSL_CERT_VERIFYERROR_COMMON_NAME,       //!< サーバー名がCommon NameとSubjectAltName拡張領域のいずれとも不整合
181     CERT_VERIFYERROR_ROOT_CA     = NNSSL_CERT_VERIFYERROR_ROOT_CA,           //!< RootCAの不整合
182     CERT_VERIFYERROR_DATE        = NNSSL_CERT_VERIFYERROR_DATE,              //!< 証明書の有効期限切れ
183     CERT_VERIFYERROR_CHAIN       = NNSSL_CERT_VERIFYERROR_CHAIN,             //!< 証明書チェーンの検証NG
184     CERT_VERIFYERROR_REVOKED     = NNSSL_CERT_VERIFYERROR_REVOKED,           //!< 証明書は無効化されている
185     CERT_VERIFYERROR_EV          = NNSSL_CERT_VERIFYERROR_EV                 //!< EV証明書検証NG
186 };
187 
188 
189 
190 } // end of namespace ssl
191 } // end of namespace nn
192 
193 
194 #endif /*__cplusplus*/
195 
196 #define SSL_CERT_SIZE			CERT_SIZE				/** 証明書の最大サイズ 2K */
197 #define SSL_CERTS_MAX			NSSL_CERTS_MAX			/** 登録できる証明書の最大数。ビルトイン証明書の数も含めた数です。 */
198 #define SSL_CERTSTORE_MAX		NSSL_CERTSTORE_MAX      /** 作成できる証明書ストアの最大数 */
199 #define SSL_CERTS_PER_STORE		NSSL_CERTS_PER_STORE	/** 一つの証明書ストアにセットできる証明書の最大数 */
200 #define SSL_CRLS_MAX			NSSL_CRLS_MAX			/** 登録できるCRLの最大数 */
201 #define SSL_CRLSTORE_MAX		NSSL_CRLSTORE_MAX       /** 作成できるCRLストアの最大数 */
202 #define SSL_CRLS_PER_STORE		NSSL_CRLS_PER_STORE		/** 一つのCRLストアにセットできるCRLの最大数 */
203 #define SSL_EV_MAX				NSSL_EV_MAX				/** 登録できるEV証明書ポリシーIDの数 */
204 
205 #endif /* NN_SSL_SSL_CONST_H_ */
206