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