source: svn/trunk/newcon3bcm2_21bu/dta/src/bootloader/des/des.h @ 2

Last change on this file since 2 was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 12.0 KB
Line 
1#ifndef _DES_H
2#define _DES_H
3
4#ifdef __cplusplus
5extern "C"
6{
7#endif
8
9/************************************************************************
10        The following files are added for DES Algorithm
11        des.h
12        des.cpp
13 ************************************************************************/
14
15//#include <memory.h>
16
17/* openssl-0.9.7d opensslconf.h */
18#define DES_LONG unsigned long
19
20
21/* openssl-0.9.7d des.h */
22#define DES_ENCRYPT     1
23#define DES_DECRYPT     0
24
25typedef unsigned char DES_cblock[8];
26
27typedef struct DES_ks
28{
29        union
30        {
31                DES_cblock cblock;
32                /* make sure things are correct size on machines with
33                * 8 byte longs */
34                DES_LONG deslong[2];
35        } ks[16];
36} DES_key_schedule;
37
38
39
40/* openssl-0.9.7d des_locl.h */
41#define ITERATIONS 16
42
43#define c2l(c,l)        (l =((DES_LONG)(*((c)++)))    , \
44        l|=((DES_LONG)(*((c)++)))<< 8L, \
45        l|=((DES_LONG)(*((c)++)))<<16L, \
46        l|=((DES_LONG)(*((c)++)))<<24L)
47
48#define c2ln(c,l1,l2,n) { \
49        c+=n; \
50        l1=l2=0; \
51        switch (n) { \
52                        case 8: l2 =((DES_LONG)(*(--(c))))<<24L; \
53                        case 7: l2|=((DES_LONG)(*(--(c))))<<16L; \
54                        case 6: l2|=((DES_LONG)(*(--(c))))<< 8L; \
55                        case 5: l2|=((DES_LONG)(*(--(c))));     \
56                        case 4: l1 =((DES_LONG)(*(--(c))))<<24L; \
57                        case 3: l1|=((DES_LONG)(*(--(c))))<<16L; \
58                        case 2: l1|=((DES_LONG)(*(--(c))))<< 8L; \
59                        case 1: l1|=((DES_LONG)(*(--(c))));     \
60        } \
61}
62
63#define l2c(l,c)        (*((c)++)=(unsigned char)(((l)     )&0xff), \
64        *((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
65        *((c)++)=(unsigned char)(((l)>>16L)&0xff), \
66        *((c)++)=(unsigned char)(((l)>>24L)&0xff))
67
68#define l2cn(l1,l2,c,n) { \
69        c+=n; \
70        switch (n) { \
71                        case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
72                        case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
73                        case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
74                        case 5: *(--(c))=(unsigned char)(((l2)     )&0xff); \
75                        case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
76                        case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
77                        case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
78                        case 1: *(--(c))=(unsigned char)(((l1)     )&0xff); \
79        } \
80}
81
82#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
83        (b)^=(t),\
84        (a)^=((t)<<(n)))
85
86#define IP(l,r) \
87        { \
88        register DES_LONG tt; \
89        PERM_OP(r,l,tt, 4,0x0f0f0f0fL); \
90        PERM_OP(l,r,tt,16,0x0000ffffL); \
91        PERM_OP(r,l,tt, 2,0x33333333L); \
92        PERM_OP(l,r,tt, 8,0x00ff00ffL); \
93        PERM_OP(r,l,tt, 1,0x55555555L); \
94        }
95
96#define FP(l,r) \
97        { \
98        register DES_LONG tt; \
99        PERM_OP(l,r,tt, 1,0x55555555L); \
100        PERM_OP(r,l,tt, 8,0x00ff00ffL); \
101        PERM_OP(l,r,tt, 2,0x33333333L); \
102        PERM_OP(r,l,tt,16,0x0000ffffL); \
103        PERM_OP(l,r,tt, 4,0x0f0f0f0fL); \
104        }
105
106#define ROTATE(a,n)     (((a)>>(n))+((a)<<(32-(n))))
107
108#define LOAD_DATA_tmp(a,b,c,d,e,f) LOAD_DATA(a,b,c,d,e,f,g)
109
110#define LOAD_DATA(R,S,u,t,E0,E1,tmp) \
111        u=R^s[S  ]; \
112        t=R^s[S+1]
113
114#define D_ENCRYPT(LL,R,S) {\
115        LOAD_DATA_tmp(R,S,u,t,E0,E1); \
116        t=ROTATE(t,4); \
117        LL^=\
118        DES_SPtrans[0][(u>> 2L)&0x3f]^ \
119        DES_SPtrans[2][(u>>10L)&0x3f]^ \
120        DES_SPtrans[4][(u>>18L)&0x3f]^ \
121        DES_SPtrans[6][(u>>26L)&0x3f]^ \
122        DES_SPtrans[1][(t>> 2L)&0x3f]^ \
123        DES_SPtrans[3][(t>>10L)&0x3f]^ \
124        DES_SPtrans[5][(t>>18L)&0x3f]^ \
125        DES_SPtrans[7][(t>>26L)&0x3f]; }
126
127
128
129/* openssl-0.9.7d set_key.c */
130#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
131        (a)=(a)^(t)^(t>>(16-(n))))
132
133static const DES_LONG des_skb[8][64]={
134        {
135                /* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
136                0x00000000L,0x00000010L,0x20000000L,0x20000010L,
137                        0x00010000L,0x00010010L,0x20010000L,0x20010010L,
138                        0x00000800L,0x00000810L,0x20000800L,0x20000810L,
139                        0x00010800L,0x00010810L,0x20010800L,0x20010810L,
140                        0x00000020L,0x00000030L,0x20000020L,0x20000030L,
141                        0x00010020L,0x00010030L,0x20010020L,0x20010030L,
142                        0x00000820L,0x00000830L,0x20000820L,0x20000830L,
143                        0x00010820L,0x00010830L,0x20010820L,0x20010830L,
144                        0x00080000L,0x00080010L,0x20080000L,0x20080010L,
145                        0x00090000L,0x00090010L,0x20090000L,0x20090010L,
146                        0x00080800L,0x00080810L,0x20080800L,0x20080810L,
147                        0x00090800L,0x00090810L,0x20090800L,0x20090810L,
148                        0x00080020L,0x00080030L,0x20080020L,0x20080030L,
149                        0x00090020L,0x00090030L,0x20090020L,0x20090030L,
150                        0x00080820L,0x00080830L,0x20080820L,0x20080830L,
151                        0x00090820L,0x00090830L,0x20090820L,0x20090830L,
152        },{
153                /* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
154                0x00000000L,0x02000000L,0x00002000L,0x02002000L,
155                        0x00200000L,0x02200000L,0x00202000L,0x02202000L,
156                        0x00000004L,0x02000004L,0x00002004L,0x02002004L,
157                        0x00200004L,0x02200004L,0x00202004L,0x02202004L,
158                        0x00000400L,0x02000400L,0x00002400L,0x02002400L,
159                        0x00200400L,0x02200400L,0x00202400L,0x02202400L,
160                        0x00000404L,0x02000404L,0x00002404L,0x02002404L,
161                        0x00200404L,0x02200404L,0x00202404L,0x02202404L,
162                        0x10000000L,0x12000000L,0x10002000L,0x12002000L,
163                        0x10200000L,0x12200000L,0x10202000L,0x12202000L,
164                        0x10000004L,0x12000004L,0x10002004L,0x12002004L,
165                        0x10200004L,0x12200004L,0x10202004L,0x12202004L,
166                        0x10000400L,0x12000400L,0x10002400L,0x12002400L,
167                        0x10200400L,0x12200400L,0x10202400L,0x12202400L,
168                        0x10000404L,0x12000404L,0x10002404L,0x12002404L,
169                        0x10200404L,0x12200404L,0x10202404L,0x12202404L,
170        },{
171                /* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
172                0x00000000L,0x00000001L,0x00040000L,0x00040001L,
173                        0x01000000L,0x01000001L,0x01040000L,0x01040001L,
174                        0x00000002L,0x00000003L,0x00040002L,0x00040003L,
175                        0x01000002L,0x01000003L,0x01040002L,0x01040003L,
176                        0x00000200L,0x00000201L,0x00040200L,0x00040201L,
177                        0x01000200L,0x01000201L,0x01040200L,0x01040201L,
178                        0x00000202L,0x00000203L,0x00040202L,0x00040203L,
179                        0x01000202L,0x01000203L,0x01040202L,0x01040203L,
180                        0x08000000L,0x08000001L,0x08040000L,0x08040001L,
181                        0x09000000L,0x09000001L,0x09040000L,0x09040001L,
182                        0x08000002L,0x08000003L,0x08040002L,0x08040003L,
183                        0x09000002L,0x09000003L,0x09040002L,0x09040003L,
184                        0x08000200L,0x08000201L,0x08040200L,0x08040201L,
185                        0x09000200L,0x09000201L,0x09040200L,0x09040201L,
186                        0x08000202L,0x08000203L,0x08040202L,0x08040203L,
187                        0x09000202L,0x09000203L,0x09040202L,0x09040203L,
188        },{
189                /* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
190                0x00000000L,0x00100000L,0x00000100L,0x00100100L,
191                        0x00000008L,0x00100008L,0x00000108L,0x00100108L,
192                        0x00001000L,0x00101000L,0x00001100L,0x00101100L,
193                        0x00001008L,0x00101008L,0x00001108L,0x00101108L,
194                        0x04000000L,0x04100000L,0x04000100L,0x04100100L,
195                        0x04000008L,0x04100008L,0x04000108L,0x04100108L,
196                        0x04001000L,0x04101000L,0x04001100L,0x04101100L,
197                        0x04001008L,0x04101008L,0x04001108L,0x04101108L,
198                        0x00020000L,0x00120000L,0x00020100L,0x00120100L,
199                        0x00020008L,0x00120008L,0x00020108L,0x00120108L,
200                        0x00021000L,0x00121000L,0x00021100L,0x00121100L,
201                        0x00021008L,0x00121008L,0x00021108L,0x00121108L,
202                        0x04020000L,0x04120000L,0x04020100L,0x04120100L,
203                        0x04020008L,0x04120008L,0x04020108L,0x04120108L,
204                        0x04021000L,0x04121000L,0x04021100L,0x04121100L,
205                        0x04021008L,0x04121008L,0x04021108L,0x04121108L,
206        },{
207                /* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
208                0x00000000L,0x10000000L,0x00010000L,0x10010000L,
209                        0x00000004L,0x10000004L,0x00010004L,0x10010004L,
210                        0x20000000L,0x30000000L,0x20010000L,0x30010000L,
211                        0x20000004L,0x30000004L,0x20010004L,0x30010004L,
212                        0x00100000L,0x10100000L,0x00110000L,0x10110000L,
213                        0x00100004L,0x10100004L,0x00110004L,0x10110004L,
214                        0x20100000L,0x30100000L,0x20110000L,0x30110000L,
215                        0x20100004L,0x30100004L,0x20110004L,0x30110004L,
216                        0x00001000L,0x10001000L,0x00011000L,0x10011000L,
217                        0x00001004L,0x10001004L,0x00011004L,0x10011004L,
218                        0x20001000L,0x30001000L,0x20011000L,0x30011000L,
219                        0x20001004L,0x30001004L,0x20011004L,0x30011004L,
220                        0x00101000L,0x10101000L,0x00111000L,0x10111000L,
221                        0x00101004L,0x10101004L,0x00111004L,0x10111004L,
222                        0x20101000L,0x30101000L,0x20111000L,0x30111000L,
223                        0x20101004L,0x30101004L,0x20111004L,0x30111004L,
224        },{
225                /* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
226                0x00000000L,0x08000000L,0x00000008L,0x08000008L,
227                        0x00000400L,0x08000400L,0x00000408L,0x08000408L,
228                        0x00020000L,0x08020000L,0x00020008L,0x08020008L,
229                        0x00020400L,0x08020400L,0x00020408L,0x08020408L,
230                        0x00000001L,0x08000001L,0x00000009L,0x08000009L,
231                        0x00000401L,0x08000401L,0x00000409L,0x08000409L,
232                        0x00020001L,0x08020001L,0x00020009L,0x08020009L,
233                        0x00020401L,0x08020401L,0x00020409L,0x08020409L,
234                        0x02000000L,0x0A000000L,0x02000008L,0x0A000008L,
235                        0x02000400L,0x0A000400L,0x02000408L,0x0A000408L,
236                        0x02020000L,0x0A020000L,0x02020008L,0x0A020008L,
237                        0x02020400L,0x0A020400L,0x02020408L,0x0A020408L,
238                        0x02000001L,0x0A000001L,0x02000009L,0x0A000009L,
239                        0x02000401L,0x0A000401L,0x02000409L,0x0A000409L,
240                        0x02020001L,0x0A020001L,0x02020009L,0x0A020009L,
241                        0x02020401L,0x0A020401L,0x02020409L,0x0A020409L,
242        },{
243                /* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
244                0x00000000L,0x00000100L,0x00080000L,0x00080100L,
245                        0x01000000L,0x01000100L,0x01080000L,0x01080100L,
246                        0x00000010L,0x00000110L,0x00080010L,0x00080110L,
247                        0x01000010L,0x01000110L,0x01080010L,0x01080110L,
248                        0x00200000L,0x00200100L,0x00280000L,0x00280100L,
249                        0x01200000L,0x01200100L,0x01280000L,0x01280100L,
250                        0x00200010L,0x00200110L,0x00280010L,0x00280110L,
251                        0x01200010L,0x01200110L,0x01280010L,0x01280110L,
252                        0x00000200L,0x00000300L,0x00080200L,0x00080300L,
253                        0x01000200L,0x01000300L,0x01080200L,0x01080300L,
254                        0x00000210L,0x00000310L,0x00080210L,0x00080310L,
255                        0x01000210L,0x01000310L,0x01080210L,0x01080310L,
256                        0x00200200L,0x00200300L,0x00280200L,0x00280300L,
257                        0x01200200L,0x01200300L,0x01280200L,0x01280300L,
258                        0x00200210L,0x00200310L,0x00280210L,0x00280310L,
259                        0x01200210L,0x01200310L,0x01280210L,0x01280310L,
260        },{
261                /* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
262                0x00000000L,0x04000000L,0x00040000L,0x04040000L,
263                        0x00000002L,0x04000002L,0x00040002L,0x04040002L,
264                        0x00002000L,0x04002000L,0x00042000L,0x04042000L,
265                        0x00002002L,0x04002002L,0x00042002L,0x04042002L,
266                        0x00000020L,0x04000020L,0x00040020L,0x04040020L,
267                        0x00000022L,0x04000022L,0x00040022L,0x04040022L,
268                        0x00002020L,0x04002020L,0x00042020L,0x04042020L,
269                        0x00002022L,0x04002022L,0x00042022L,0x04042022L,
270                        0x00000800L,0x04000800L,0x00040800L,0x04040800L,
271                        0x00000802L,0x04000802L,0x00040802L,0x04040802L,
272                        0x00002800L,0x04002800L,0x00042800L,0x04042800L,
273                        0x00002802L,0x04002802L,0x00042802L,0x04042802L,
274                        0x00000820L,0x04000820L,0x00040820L,0x04040820L,
275                        0x00000822L,0x04000822L,0x00040822L,0x04040822L,
276                        0x00002820L,0x04002820L,0x00042820L,0x04042820L,
277                        0x00002822L,0x04002822L,0x00042822L,0x04042822L,
278        }};
279
280
281/************************************************************************/
282/* des.cpp interface                                                    */
283/************************************************************************/
284//wrapper
285void DES_ecb_enc(const DES_cblock *input, DES_cblock *output,
286                        const DES_cblock *key, int keycheck,int enc);
287void DES_cbc_enc(const unsigned char *in, unsigned char *out, long length,
288                                          const DES_cblock *key, DES_cblock *ivec, int keycheck,int enc);
289void DES3_ecb_enc(const DES_cblock *input, DES_cblock *output,
290                  const DES_cblock *key1,const DES_cblock *key2,const DES_cblock *key3,
291                  int keycheck,int enc);
292void DES3_cbc_enc(const unsigned char *in, unsigned char *out, long length,
293                  const DES_cblock *key1,const DES_cblock *key2,const DES_cblock *key3,
294                  DES_cblock *ivec, int keycheck,int enc);
295
296//openssl prototype
297int DES_set_key_checked(const DES_cblock *key, DES_key_schedule *schedule);
298void DES_set_key_unchecked(const DES_cblock *key, DES_key_schedule *schedule);
299void DES_ecb_encrypt(const DES_cblock *input, DES_cblock *output,
300                                         DES_key_schedule *ks, int enc);
301void DES_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
302                                         DES_key_schedule *_schedule, DES_cblock *ivec, int enc);
303void DES_ecb3_encrypt(const DES_cblock *input, DES_cblock *output,
304                      DES_key_schedule *ks1,DES_key_schedule *ks2,
305                      DES_key_schedule *ks3, int enc);
306void DES_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output, 
307                          long length,
308                          DES_key_schedule *ks1,DES_key_schedule *ks2,
309                          DES_key_schedule *ks3,DES_cblock *ivec,int enc);
310
311#ifdef __cplusplus
312}
313#endif
314
315#endif //_DES_H
Note: See TracBrowser for help on using the repository browser.