1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: crypto_RsaContext.h
4
5 Copyright (C)2009-2012 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: 47645 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_CRYPTO_CRYPTO_RSACONTEXT_H_
17 #define NN_CRYPTO_CRYPTO_RSACONTEXT_H_
18
19 #include <nn/os.h>
20 #include <nn/types.h>
21 #include <nn/config.h>
22 #include <nn/Result.h>
23 #include <nn/crypto/crypto_RsaKey.h>
24 #include <nn/crypto/crypto_PublicKeyContextBase.h>
25
26 #ifdef __cplusplus
27
28 namespace nn{ namespace crypto{
29
30 /* Please see man pages for details
31
32
33
34 */
35 class RsaContext : public PublicKeyContextBase
36 {
37 public:
RsaContext()38 RsaContext() : m_pRsaKeyBuf(NULL) {}
~RsaContext()39 virtual ~RsaContext() {}
40
41 static const size_t SIZE_STRING_LENGTH = static_cast<size_t>(-1);
42
43 /* Please see man pages for details
44
45
46
47
48
49
50
51
52 */
53 void Initialize();
54
55 /*
56
57
58
59
60
61
62
63
64 */
Initialize(const RsaKey & rsaKey)65 void Initialize(const RsaKey& rsaKey) { NN_UNUSED_VAR(rsaKey); nn::dbg::Panic(); }
66
67 /* Please see man pages for details
68
69
70
71
72
73
74
75
76 */
77 void Initialize(const void* pKey, size_t keyLength);
78
79 /* Please see man pages for details
80
81
82
83
84
85 */
86 void Finalize();
87
88 /*
89
90
91
92
93
94
95
96 */
SetKey(const RsaKey & rsaKey)97 nn::Result SetKey(const RsaKey& rsaKey) { NN_UNUSED_VAR(rsaKey); return nn::Result(Result::LEVEL_STATUS, Result::SUMMARY_NOT_SUPPORTED, Result::MODULE_NN_FS, Result::DESCRIPTION_NOT_IMPLEMENTED); }
98
99 /* Please see man pages for details
100
101
102
103
104
105
106
107 */
108 nn::Result SetKey(const void* pKey, size_t keyLength);
109
110 /* Please see man pages for details
111
112
113
114 */
115 void SetKeyLength(size_t keyLength);
116
117 /* Please see man pages for details
118
119
120
121 */
122 size_t GetKeyLength(size_t keyLength);
123
124 /* Please see man pages for details
125
126
127
128
129
130
131
132
133
134
135
136
137 */
138 nn::Result Decrypt(size_t* pDecrptLength, void* pDest, size_t destSize, const void* pSrc, size_t srcLength = SIZE_STRING_LENGTH);
139
140 nn::Result Decrypt(void* pDest, size_t destSize, const void* pSrc, size_t srcLength = SIZE_STRING_LENGTH);
141 virtual nn::Result Decrypt(void* pDest, const void* pSrc, size_t length);
142
143 /* Please see man pages for details
144
145
146
147
148
149
150
151
152
153 */
154 nn::Result Encrypt(size_t* pEncryptLength, void* pDest, size_t destSize, const void* pSrc, size_t srcLength = SIZE_STRING_LENGTH);
155
156 nn::Result Encrypt(void* pDest, size_t destSize, const void* pSrc, size_t srcLength = SIZE_STRING_LENGTH);
157 virtual nn::Result Encrypt(void* pDest, const void* pSrc, size_t length);
158
159 /* Please see man pages for details
160
161
162
163
164
165
166
167
168
169 */
170 nn::Result Sign(size_t* pSignLength, void* pDest, size_t destSize, const void* pSrc, size_t srcLength = SIZE_STRING_LENGTH);
171
172 nn::Result Sign(void* pDest, size_t destSize, const void* pSrc, size_t srcLength = SIZE_STRING_LENGTH);
173
174 /* Please see man pages for details
175
176
177
178
179
180
181
182
183 */
184 nn::Result SignSha256(size_t* pSignLength, void* pDest, size_t destSize, const void* pSrc);
185
186 nn::Result SignSha256(void* pDest, size_t destSize, const void* pSrc);
187
188 /* Please see man pages for details
189
190
191
192
193
194
195
196
197 */
198 nn::Result Verify(const void* pSrc, size_t srcLength, const void* pSign, size_t signLength);
199
200 /* Please see man pages for details
201
202
203
204
205
206
207
208 */
209 nn::Result VerifySha256(const void* pSrc, const void* pSign, size_t signLength);
210
211 /* Please see man pages for details
212
213
214
215
216
217
218
219
220
221
222 */
223 nn::Result VerifySha1(const void* pSrc, const void* pSign, size_t signLength);
224
225 private:
226 nn::Result SetKeyImpl(const void* pKey, size_t keyLength);
227
228 private:
229 RsaKey* m_pRsaKey;
230 void* m_pRsaKeyBuf;
231 size_t m_RsaKeyLength;
232 };
233
Encrypt(void * pDest,size_t destSize,const void * pSrc,size_t srcLength)234 inline nn::Result RsaContext::Encrypt(void* pDest, size_t destSize, const void* pSrc, size_t srcLength)
235 {
236 return Encrypt(NULL, pDest, destSize, pSrc, srcLength);
237 }
238
Encrypt(void * pDest,const void * pSrc,size_t length)239 inline nn::Result RsaContext::Encrypt(void* pDest, const void* pSrc, size_t length)
240 {
241 return Encrypt(NULL, pDest, 0, pSrc, length);
242 }
243
Decrypt(void * pDest,size_t destSize,const void * pSrc,size_t srcLength)244 inline nn::Result RsaContext::Decrypt(void* pDest, size_t destSize, const void* pSrc, size_t srcLength)
245 {
246 return Decrypt(NULL, pDest, destSize, pSrc, srcLength);
247 }
248
Decrypt(void * pDest,const void * pSrc,size_t length)249 inline nn::Result RsaContext::Decrypt(void* pDest, const void* pSrc, size_t length)
250 {
251 return Decrypt(NULL, pDest, 0, pSrc, length);
252 }
253
Sign(void * pDest,size_t destSize,const void * pSrc,size_t srcLength)254 inline nn::Result RsaContext::Sign(void* pDest, size_t destSize, const void* pSrc, size_t srcLength)
255 {
256 return Sign(NULL, pDest, destSize, pSrc, srcLength);
257 }
258
SignSha256(void * pDest,size_t destSize,const void * pSrc)259 inline nn::Result RsaContext::SignSha256(void* pDest, size_t destSize, const void* pSrc)
260 {
261 return SignSha256(NULL, pDest, destSize, pSrc);
262 }
263
264
265 }} // namespace nn::crypto
266
267 #endif // __cplusplus
268
269 #endif // #ifndef NN_CRYPTO_CRYPTO_RSACONTEXT_H_
270