1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     crypto_CtrEncryptor.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: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_CRYPTO_CRYPTO_CTRENCRYPTOR_H_
17 #define NN_CRYPTO_CRYPTO_CTRENCRYPTOR_H_
18 
19 #include <nn/crypto/crypto_Encryptor.h>
20 #include <nn/crypto/detail/crypto_CtrMode.h>
21 
22 
23 namespace nn {
24 namespace crypto {
25 
26 
27 
28 /* Please see man pages for details
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 */
43 template <size_t BlockSize>
44 class CtrEncryptor : public Encryptor
45 {
46 private:
47     typedef detail::CtrMode<BlockSize>  ImplT;
48 
49 public:
50     //
51     //
52     //
53     static const size_t  BLOCK_SIZE = ImplT::BLOCK_SIZE;
54 
55     //
56     //
57     //
58     static const size_t  IV_SIZE    = ImplT::IV_SIZE;
59 
60     //
61     //
62     //
63     static const size_t  UNIT_SIZE  = ImplT::UNIT_SIZE;
64 
65 public:
CtrEncryptor()66     CtrEncryptor(){}
~CtrEncryptor()67     virtual ~CtrEncryptor(){}
68 
69     /* Please see man pages for details
70 
71 
72 
73 
74 
75 
76     */
GetIvSize()77     virtual size_t  GetIvSize() const { return ImplT::GetIvSize(); }
78 
79     /* Please see man pages for details
80 
81 
82 
83 
84 
85     */
GetUnitSize()86     virtual size_t  GetUnitSize() const { return ImplT::GetUnitSize(); }
87 
88 
89 
90     /* Please see man pages for details
91 
92 
93 
94 
95 
96 
97 
98     */
Initialize(const BlockCipher & c,const void * pIv,size_t ivSize)99     virtual void    Initialize(const BlockCipher& c, const void* pIv, size_t ivSize)
100         { return m_Impl.Initialize(c, pIv, ivSize); }
101 
102     /* Please see man pages for details
103 
104 
105 
106     */
Finalize()107     virtual void    Finalize()
108         { return m_Impl.Finalize(); }
109 
110     /* Please see man pages for details
111 
112 
113 
114 
115 
116 
117 
118 
119 
120     */
Update(void * pDst,size_t dstSize,const void * pSrc,size_t srcSize)121     virtual size_t  Update(void* pDst, size_t dstSize, const void* pSrc, size_t srcSize)
122         { return m_Impl.Update(pDst, dstSize, pSrc, srcSize); }
123 
124     /* Please see man pages for details
125 
126 
127 
128 
129 
130 
131 
132     */
UpdateFinal(void * pDst,size_t size)133     virtual size_t  UpdateFinal(void* pDst, size_t size)
134         { return m_Impl.UpdateFinal(pDst, size); }
135 
136 
137 
138     /* Please see man pages for details
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166     */
Encrypt(void * pDst,size_t dstSize,const void * pSrc,size_t srcSize,const void * pIv,size_t ivSize,const BlockCipher & c)167     static size_t Encrypt(void* pDst, size_t dstSize, const void* pSrc, size_t srcSize,
168                             const void* pIv, size_t ivSize, const BlockCipher& c)
169     {
170         CtrEncryptor<BlockSize> e;
171         return e.Encryptor::Encrypt(pDst, dstSize, pSrc, srcSize, pIv, ivSize, c);
172     }
173 
174 private:
175     ImplT   m_Impl;
176 };
177 
178 /* Please see man pages for details
179 
180 */
181 typedef CtrEncryptor<16>    CtrEncryptor128;
182 
183 
184 
185 }   // namespace crypto
186 }   // namespace nn
187 
188 
189 
190 #endif /* NN_CRYPTO_CRYPTO_CTRENCRYPTOR_H_ */
191